我对数据科学面试问题的看法[第一部分]
GIF from this website
我的一个朋友为进入数据科学的人编制了一个问题列表。我想回答他们,请注意我不知道这些问题的来源,如果有人知道这些问题来自哪里,请在下面评论。
此外,我会尽力为每个问题提供正确的答案。然而, 我总是乐于学习和成长 ,所以如果你知道一个更好的解决方案,请在下面评论。
- 什么是特征向量?
我目前对特征向量的理解非常有限。假设我们正在使用标准卷积神经网络(CNN)和全连接神经网络(FNN)构建一个分类器。其中 CNN 负责从图像中提取高级特征(从边缘和角落开始到面部等)。在从 CNN 到 FNN 的转换中,我们最有可能对图像进行矢量化,这就是我称之为特征向量的地方。
我很惊讶,甚至原始像素值也可以被认为是一个特征向量。但确实有道理。现在让我们实际做一些编码,让我们使用 MNIST 数据集创建一个猪特征向量。(如果有人对什么是猪的特征感兴趣,请阅读这个博客,它是惊人的。)
左图 →图像 3 的可视化 HOG 特征
右图 →图像 6 的可视化 HOG 特征
正如所看到的,我们可以知道每个图像的 HOG 特征向量长度为 2048,当我们可视化这些向量时,它看起来像右边的东西。
2。解释制作决策树的步骤
我最近了解了二叉查找树,但我不知道如何解决这个问题,但我来了。从不同类型的用户那里收集关于许多不同结果的信息,开始绘制他们的二元答案(以树形方式),继续这个过程,直到我们绘制出所有内容?
Image from smartdraw
我对我搜索到的答案并不是 100%满意,然而,谢天谢地,YouTube 上有一个关于如何在商业环境中绘制决策树的教程。这是一个老视频,但它确实有帮助。
This video is from MBAbullshitDotCom
3。什么是根本原因分析?
我的英语有限,但我会试试看。根:我认为这是一些基本的东西,当我想指出一些东西的核心时,我会说这个词。所以我认为根本原因分析是找出问题核心原因的过程。
Image from this website
Image from wiki
看起来我对这个定义是一清二楚,但是我忘了说根本原因分析不仅仅是识别核心原因,它还用于防止类似的问题再次发生。最后,我发现实际上有一篇论文写的是“ 根本原因分析的技巧 ”如果有人感兴趣请阅读下面。
4。什么是逻辑回归?
我对回归这个术语的理解是预测。所以用我的话来说,线性回归就是得到一条最佳的线性线来预测未来的结果,比如房价。对于逻辑,我只能想到逻辑 sigmoid 函数,所以结合这两个术语,我认为逻辑回归是对离散值的预测,而不是对连续值的预测。
Image from this website
Image from Wiki
一般来说,逻辑回归预测分类值。它可以是简单的二进制值,也可以是复杂的多类预测。最后让我们看看指数函数和逻辑函数之间的区别。(如果有人对这个话题更感兴趣,请点击这里。)
Image from this website
5。什么是推荐系统?
推荐系统的一个很好的例子是 You-tube 的推荐视频部分。这里有一个算法(很多人会称之为 AI)接收用户在过去 2 或 4 周观看的视频列表。并搜索相似内容的视频推荐给用户。因此,在某种程度上,这可以是一种逻辑回归,其中一种算法试图预测用户最有可能观看的下一类视频。
Image from Wiki
哇,我从来不知道信息过滤系统这个术语的存在,更不知道推荐系统只是这个系统的一部分。现在让我们试着建立一个简单的推荐系统。
紫色、绿色、黄色斑点 →三种口味的冰淇淋某些用户喜欢
红点 →我们之前没有任何信息的新用户
假设我们有一家冰淇淋店,我们的每一位顾客都被表示为 2D 网格中的一个坐标。因此,x 值在[0–6]和 y 值在[0–7.5]范围内的人喜欢紫色冰淇淋等。现在,一个新用户带着坐标[2,7.5]、[8,15.5]和[20,11]进来。我们应该向我们的新顾客推荐什么口味的冰淇淋?我使用的一个简单方法是建立一个 KNN(邻居值为 3 ),让算法为我们预测味道。
6。梯度下降法总是收敛到同一点吗?
不,它可以收敛到局部最小点,为了防止这种情况经常发生,激活函数必须是单调的。(我在这篇博文中对此做了更多解释。)
Amazing answer from this website
在我看来,上面的图片是这个问题的最佳答案。
7。A/B 测试的目的是什么?
每当我试图解决面试问题时,似乎总有一个问题与 A/B 测试有关。我简单地说,A/B 测试的目标是弄清楚当给定环境中有一个差异时,受试者的态度是如何变化的。
Image from Wiki
Image from this website
上面的图片是网站 A/B 测试的具体定义,但我认为它可以推广到不同的行业,如医药,或物流等…
8。线性模型的缺点是什么?
线性模型的一个明显的好处是简单。Y = aX + b,如果我们试着用这个等式建立一个模型,我们已经知道它有多简单了。然而,我认为简单性也是线性模型的一个缺点。由于它的简单性,我们不能用线性模型来模拟复杂的情况。
Image from this website
Image from this website
我忽略了很多要点,比如它们对异常值很敏感,而且容易过度拟合。此外,我认为我的答案是错误的,因为我们可以使用更高的多元名义回归来预测更复杂的情况,所以这不是线性回归的倒退。
交互代码
对于 Google Colab,您需要一个 Google 帐户来查看代码,并且您不能在 Google Colab 中运行只读脚本,因此请在您的操场上创建一个副本。最后,我永远不会请求允许访问你在 Google Drive 上的文件,仅供参考。编码快乐!
要访问这篇文章中使用的代码,请点击这里。
遗言
Unsplash.com by artist :Photo by Štefan Štefančík.
每当我“试图”解决面试问题时,我都会变得更加谦逊。这恰恰说明了我对数据科学的不了解。同时也让我兴奋。
如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。
同时,在我的 twitter 上关注我这里,访问我的网站,或者我的 Youtube 频道了解更多内容。我还实现了广残网,请点击这里查看博文 t。
参考
- 特征(机器学习)。(2018).En.wikipedia.org。检索于 2018 年 5 月 6 日,来自https://en . Wikipedia . org/wiki/Feature _(machine _ learning)
- Anon,(2018)。【在线】可在:https://www . research gate . net/post/in _ simple _ words _ what _ do _ you _ mean _ by _ feature _ vector _ in _ image _ processing【2018 年 5 月 6 日访问】。
- ‘可视化’,h. (2018)。hog()获得了意外的关键字参数“visualize”。堆栈溢出。检索于 2018 年 5 月 6 日,来自https://stack overflow . com/questions/46516571/hog-got-an-unexpected-keyword-argument-visualize
- 方向梯度直方图—浏览 0.14 版开发文档。(2018).Scikit-image.org。2018 年 5 月 6 日检索,来自http://scikit-image . org/docs/dev/auto _ examples/features _ detection/plot _ hog . html
- Mallick,S. (2016 年)。方向渐变直方图|学习 OpenCV。Learnopencv.com。检索于 2018 年 5 月 6 日,来自https://www . learnopencv . com/histogram-of-oriented-gradients/
- 威廉姆斯,下午(2001 年 4 月)。根本原因分析技术。贝勒大学医学中心学报(第 14 卷,第 2 期,第 154-157 页)。泰勒&弗朗西斯。
- 根本原因分析。(2018).En.wikipedia.org。2018 年 5 月 6 日检索,来自https://en.wikipedia.org/wiki/Root_cause_analysis
- 根本原因分析。(2016).企业服务部。2018 年 5 月 6 日检索,来自https://des . wa . gov/services/risk-management/about-risk-management/enterprise-risk-management/root-cause-analysis
- 什么是逻辑回归?—统计解决方案。(2018).统计解决方案。检索于 2018 年 5 月 6 日,来自https://www . statistics solutions . com/what-is-logistic-regression/
- 逻辑回归。(2018).En.wikipedia.org。检索于 2018 年 5 月 6 日,来自 https://en.wikipedia.org/wiki/Logistic_regression
- 后勤职能。(2018).Xaktly.com。检索于 2018 年 5 月 6 日,来自http://xaktly.com/LogisticFunctions.html
- 信息过滤系统。(2018).En.wikipedia.org。检索于 2018 年 5 月 6 日,来自https://en.wikipedia.org/wiki/Information_filtering_system
- 分类器的概率校准-sci kit-学习 0.19.1 文档。(2018).Scikit-learn.org。2018 年 5 月 6 日检索,来自http://sci kit-learn . org/stable/auto _ examples/calibration/plot _ calibration . html # sphx-glr-auto-examples-calibration-plot-calibration-py
- python,G. (2018)。用 python 从列表中获取唯一值。堆栈溢出。2018 年 5 月 6 日检索,来自https://stack overflow . com/questions/12897374/get-unique-values-from-a-list-in-python
- plots,P. (2018 年)。Python matplotlib 叠加散点图。堆栈溢出。检索于 2018 年 5 月 6 日,来自https://stack overflow . com/questions/11190735/python-matplotlib-supplease-scatter-plots
- sk learn . datasets . make _ blobs-sci kit-learn 0 . 19 . 1 文档。(2018).Scikit-learn.org。2018 年 5 月 6 日检索,来自http://sci kit-learn . org/stable/modules/generated/sk learn . datasets . make _ blobs . html # sk learn . datasets . make _ blobs
- 二叉查找树。(2018).En.wikipedia.org。检索于 2018 年 5 月 6 日,来自 https://en.wikipedia.org/wiki/Binary_search_tree
- 决策树——了解关于决策树的一切。(2018).Smartdraw.com。检索于 2018 年 5 月 6 日,来自 https://www.smartdraw.com/decision-tree/
- 7 分钟决策树教程,包含决策树分析和决策树示例(基础)。(2018).YouTube。检索于 2018 年 5 月 6 日,来自https://www.youtube.com/watch?v=a5yWr1hr6QY
- 【Google Deep mind】—利用交互代码进行医学图像分割的深度学习。(2018).走向数据科学。检索于 2018 年 5 月 6 日,来自https://towards data science . com/Google-deep mind-deep-learning-for-medical-image-segmentation-with-interactive-code-4634 b 6 FD 6a 3a
- A/B 测试。(2018).En.wikipedia.org。检索于 2018 年 5 月 6 日,来自https://en.wikipedia.org/wiki/A/B_testing
- AB 测试-完全指南。(2018).网站。于 2018 年 5 月 6 日检索,来自https://vwo.com/ab-testing/
- 最优?,D. (2018)。梯度下降总是收敛到一个最优值吗?。数据科学堆栈交换。2018 年 5 月 6 日检索,来自https://data science . stack exchange . com/questions/24534/does-gradient-descent-always-converge-to-a-optimum
- )你的参考书目:Anon,(2018)。[在线]见:https://www . quora . com/What-is-the-limits-of-linear-regression-modeling-in-data-analysis【2018 年 5 月 6 日获取】。
- (2018).Sciencing.com。检索于 2018 年 5 月 6 日,来自https://science . com/advantages-linear-regression-8562780 . html
我对谷歌人工智能交互式代码面试问题的看法——第一部分
Gif from this website
所以我找到了这个了不起的博客作者维马什·卡巴里,他的博客上有一些了不起的东西!所以请看看他,他也是人工智能的创造者。今天,我将尝试从这个博客回答他的谷歌人工智能采访问题。请注意,我的解决方案不会优化。
另外,我不会按数字顺序回答问题。对于每一个问题,我会努力找到正确的答案并把它们联系起来。然而, 我总是乐于学习和成长 ,所以如果你知道一个更好的解决方案,请在下面评论。
1/x 的导数是多少?
谢天谢地,这个有点简单,它是(- 1 / (x))
Image from this website
Graphed in Python
绘制曲线 log(x+10)
幸运的是这也是可行的,我已经知道 log()函数看起来像一个 L,但水平翻转,所以可以把这个函数想象成它的翻译。
Image from this website
Graphed in Python
为什么不是 logistic 回归,为什么是 GBM?
****更新感谢Mikael Huss和Adrien Lucas Ecoffet指出错误。GBM 代表梯度推进机器,而不是几何布朗运动。请注意我的答案是错误的!
我不知道“GBM”是什么意思,直到我研究了它。我想是指几何布朗运动下面是维基答案定义。
Image from Wiki
从那以后,我需要思考选择 GBM 比选择逻辑回归更好的情况。(问题是,我甚至不知道 GBM 存在 LOL,但我们还是可以估计一下)。让我们首先看看 GBM 实际使用的情况。
Answer from quora
Answer from Wiki, for the link please see above
因此,GBM 似乎被广泛用于股票市场定价。我通常将逻辑回归与一个分类问题的解决方案联系起来,(或者对离散值的回归)然而,这似乎是我们想要预测连续值的情况(我不是 100%确定股市预测是否只能被视为连续回归,如果我错了请纠正我。)所以我想,答案之一可能是,由于逻辑回归不能预测连续值,所以我们最好使用 GBM。(但我真的认为这是一个后续问题,对我来说没有多大意义。)
Image from my blog post
抛硬币十次,结果是八个正面和两个反面。你会如何分析一枚硬币是否公平?p 值是多少?
****更新感谢 扬扎瓦日基 关于 p 值的精彩讲解!要查看它们,请向下滚动到评论区!
所以正面的概率是 80%,反面的概率是 20%。对于这个问题,我认为取期望值,并与我们得到的值进行比较,可能是一个答案。( 然而,我不擅长统计学或数学,所以如果任何统计学家或数学家知道答案,请在下面评论。 )
因此,期望值的等式是 E[x] = n * p(x),如果我们插入数字,我们可以看到获得正面的期望值是
E[x] = 10 * 0.5 = 5,所以当我们投掷硬币 10 次时,我们可以预期看到 5 次是正面。(尾巴也一样)。但是我们只看到了两个尾巴,所以我想我们可以说这枚硬币偏向正面。对于 p 值,我实际上忘了怎么做了。
Image from this website
因此,期望值的等式和计算是正确的,对于 p 值,我按照这个 WikiHow 页面上的逐步指南,在显著性水平为 0.05 的情况下,我得到了 0.05 到 0.1 之间的 p 值。(如果我说错了,请告诉我。)
Image from Wikihow
你有一个谷歌应用程序,你做出了改变。如何测试一个指标是否增加了?
我从我的前一篇博文中学到了什么是 A/B 测试,所以我认为这是一个完美的用例,A/B 测试可以帮助我们了解指标是否增加了。我会随机将用户重定向到我的应用程序的两个版本,一个有变化,另一个没有变化(假设两个版本之间只有一个不同),然后观察它们的表现。
Image from this website
通过简单的谷歌搜索,我找到了上面的帖子,所以从某种意义上来说,A/B 测试是正确的。(希望如此)。
每年有多少人申请谷歌?
嗯,很多,但我真的很好奇,一个谷歌搜索做到了这一点。
Image from this website
交互代码
对于 Google Colab,你需要一个 Google 帐户来查看代码,而且你不能在 Google Colab 中运行只读脚本,所以在你的操场上复制一份。最后,我永远不会请求允许访问你在 Google Drive 上的文件,仅供参考。编码快乐!
要访问 Google Colab 上的代码,请点击此处。
最后的话
在这篇文章中,当我试图解决这些问题时,我变得更加谦虚,意识到我知道的很少。要成为数据科学专家,我还有很多工作要做。
如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你希望看到我所有写作的列表,请在这里查看我的网站。
同时,在我的 twitter 这里关注我,并访问我的网站,或我的 Youtube 频道了解更多内容。如果你感兴趣的话,我还做了解耦神经网络的比较。
参考
- 谷歌人工智能面试问题——应对人工智能面试。(2018).中等。检索于 2018 年 4 月 7 日,来自https://medium . com/acing-ai/Google-interview-questions-acing-the-ai-interview-1791 ad 7 DC 3 AE
- 德斯莫斯图表。(2018).德斯莫斯图形计算器。于 2018 年 4 月 7 日检索,来自https://www.desmos.com/calculator
- 几何布朗运动。(2018).En.wikipedia.org。于 2018 年 4 月 7 日检索,来自https://en.wikipedia.org/wiki/Geometric_Brownian_motion
- [2]2018.【在线】。可用:https://www . quora . com/Why-is-Geometric-Brownian-Motion-used-so-wide-the-stock-markets。[访问时间:2018 年 4 月 7 日]。
- "我对优步人工智能面试问题的互动代码——第一部分."走向数据科学。n . p . 2018。网络。2018 年 4 月 7 日。
- 每年有多少人申请谷歌?—谷歌搜索。(2018).Google.ca 检索 2018 年 4 月 7 日,来自https://www.google.ca/search?q = How+many+people+apply+to+Google+每年% 3F&rlz = 1c 1 oclt _ enca 772 ca 772&OQ = How+many+people+apply+to+Google+每年%3F & aqs=chrome…69i 57.586 j0j 7&sourceid = chrome&ie = UTF-8
- 统计学中的期望值:定义和计算。(2018).统计学如何?2018 年 4 月 7 日检索,来自http://www . statistics show to . com/probability-and-statistics/expected-value/
- 如何计算 P 值?(2018).维基百科。检索于 2018 年 4 月 7 日,来自 https://www.wikihow.com/Calculate-P-Value
- 应用内 A/B 测试介绍——Google Play 应用和游戏——中级。(2017).中等。检索于 2018 年 4 月 7 日,来自https://medium . com/Google play dev/an-introduction-to-in-app-a-b-testing-C5 a9 a 69 a 3791
我对微软人工智能交互式代码面试问题的看法——第一部分
Gif from this website
所以我找到了这个了不起的博客作者维马什·卡巴里,他的博客上有一些了不起的东西!所以请看看他,他也是人工智能的创造者。今天,我将尝试从这个博客回答他的微软人工智能采访问题。请注意,我的解决方案不会优化,而且 我总是乐于学习和成长 ,所以如果你知道一个更好的解决方案,请在下面评论。
另外,我不会按数字顺序回答问题。
合并 k(本例中 k=2)个数组并排序。
为此我会使用冒泡排序,我知道这不是最有效的排序算法,但它很容易描述和实现。
L1 和 L2 有哪些不同的成本函数/正则化指标?
Image from Chioka’s blog
我会说,L1 是预测值和地面真实值之间的绝对差值。对于 L2,我会说是均方差。我在本帖中使用正则化实现并比较了 L1 和 L2 成本函数的各种组合。此外,L1 正则化是权重的绝对值之和,L2 是所有权重的平方值之和。
Image from Chioka’s blog
如何找到百分位数?为它写代码。
Image from MathisFun
为此,让我们做一个简单的数学有趣的问题。根据上面的表格,让我们得到 30%的人参观商场的时间。
我会先得到 30%的百分比,然后得到平均时间值,显然这不是最准确的答案,如下所示。但是我们可以得到一个大概的感觉。
好的和坏的数据可视化有什么区别?
好吧,对于这个问题,我们可以有许多不同的答案,我的答案是,当我们没有正确处理异常值并将其可视化时。
假设我们有一个数字数组,我们可以看到在较小的数字中有一个很大的数字(7777)。当我们一起想象这个数组时,它看起来像下面这样。
右图 →原图
中图 →标准化值
左图 →标准化值
如上所述,即使我们将这些值标准化或规范化,创建的图也是非常倾斜的。我在这篇文章中谈到了规范化、标准化和批量规范化。
如何通过玩弄一些计算技巧来更快地计算逆矩阵?
我其实不知道确切的答案是什么,但经过研究,我发现了一种叫做高斯-乔丹法的方法,然而它非常复杂。(要查看 python 的实现,请点击这里。我设法找到了一个更简单解决方案,如下所示,并实现了这个方法。
Image from this website
定义差异
用我的话来说,我会把方差描述为每个数据点的平方差之和,尊重所有数据的平均值。换句话说,数据是否有很大的变化。实际上,数学很有趣有一个惊人的图表来描述这一点。
Image from this website
交互代码
对于 Google Colab,您需要一个 Google 帐户来查看代码,而且您不能在 Google Colab 中运行只读脚本,因此请在您的操场上创建一个副本。最后,我永远不会请求允许访问你在 Google Drive 上的文件,仅供参考。编码快乐!
要访问 Google Colab 上的代码,请点击此处。
遗言
我总是乐于接受新的、更好的、更有效的想法和答案,如果你知道它们,请在下面评论!
如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。
与此同时,在我的 twitter 上关注我这里,访问我的网站,或者我的 Youtube 频道了解更多内容。如果你感兴趣,我还在这里做了解耦神经网络的比较。
参考
- 维马什·卡巴里—中等。(2015).Medium.com。2018 年 4 月 5 日检索,来自https://medium.com/@vimarshk
- 微软人工智能面试问题——应对人工智能面试。(2018).中等。检索于 2018 年 4 月 5 日,来自https://medium . com/acing-ai/Microsoft-ai-interview-questions-acing-the-ai-interview-be 6972 f 790 ea
- https://www.geeksforGeeks.org/bubble-sortBubble 的排序——极客 forgeeks。(2014).极客之福。检索于 2018 年 4 月 5 日,来自 https://www.geeksforgeeks.org/bubble-sort/
- Only Numpy:对深度神经网络实施 L1 /L2 范数/正则化的不同组合…(2018).走向数据科学。2018 年 4 月 5 日检索,来自https://towards data science . com/only-numpy-implementing-different-combination-of-L1-norm-L2-norm-L1-regularity-and-14b 01a 9773 b
- L1 和 L2 作为损失函数和正则化的区别。(2018).chioka . in . 2018 年 4 月 5 日检索,来自http://www . chioka . in/differences-between-L1-and-L2-as-loss-function-and-regulation/
- 通过 Numpy 和 Tensorflow 中的示例和交互式代码理解批处理规范化。(2018).走向数据科学。2018 年 4 月 5 日检索,来自https://towardsdatascience . com/understanding-batch-normalization-with-examples-in-numpy-and-tensor flow-with-interactive-code-7f 59 bb 126642
- 正态分布。(2018).Mathsisfun.com。检索于 2018 年 4 月 5 日,来自https://www . mathsisfun . com/data/standard-normal-distribution . html
- numpy.linalg.inv — NumPy v1.12 手册。(2018).Docs.scipy.org。2018 年 4 月 5 日检索,来自https://docs . scipy . org/doc/numpy-1 . 12 . 0/reference/generated/numpy . Lina LG . inv . html
- 高斯消去法。(2018).En.wikipedia.org。2018 年 4 月 5 日检索,来自https://en . Wikipedia . org/wiki/Gaussian _ elimination # Finding _ the _ inverse _ of _ a _ matrix
- 托马斯,M. (2013 年)。用高斯消元法解线性方程组。马丁·托马斯。检索于 2018 年 4 月 5 日,来自https://Martin-thoma . com/solving-linear-equations-with-Gaussian-elimination/
- matrix,s. (2018)。求矩阵逆矩阵的捷径。Math.stackexchange.com。检索于 2018 年 4 月 5 日,来自https://math . stack exchange . com/questions/21533/shortcut-for-finding-a-inverse-of-matrix
- 标准差和方差。(2018).Mathsisfun.com。检索于 2018 年 4 月 5 日,来自 http://www.mathsisfun.com/data/standard-deviation.html
我对优步人工智能交互式代码面试问题的看法——第一部分
所以我找到了这个了不起的博客作者维马什·卡巴里,他的博客上有一些了不起的东西!所以请看看他,他也是人工智能的创造者。今天,我将尝试从这个博客回答他的优步人工智能采访问题。请注意,我的解决方案不会优化。
另外,我不会按数字顺序回答问题。对于每一个问题,我会努力找到正确的答案并把它们联系起来。然而, 我总是乐于学习和成长 ,所以如果你知道一个更好的解决方案,请在下面评论。
描述二进制分类
我将这描述为当我们有两类标记数据时,例如类 Z 和非 Z。我们希望预测给定的数据是否属于某个类。(在本例中为 Z 类)
Wiki 回答:“二元或二项式分类是根据一个分类规则将给定集合的元素分为两组(预测每个元素属于哪个组)的任务。”
解释逻辑回归、假设和数学方程
我不知道这个问题解释假设是什么意思。但我会试着做另外两个。对我来说,我会将逻辑回归描述为对离散值的预测(如猫对狗),而不是对连续值的预测(如房屋定价)。通过数学方程,我认为这个问题是问逻辑回归的方程。
Screen Shot from CMU Stats
Example of Linear Regression
Wiki 回答:“在统计、逻辑回归,或 logit 回归,或 logit 模型【1】是回归模型,其中因变量(DV) 是范畴
关于逻辑回归的假设,请查看本网站。
缓存是如何工作的,您如何在数据科学中使用它?
我对缓存的理解是为了更快的访问而临时存储数据。但是,这些数据没有被保留,而是被删除了。我不确定这项技术是如何在引擎盖下工作的,我只知道高层次的观点。对于它如何应用于数据科学,我认为这篇来自网飞的博客可以给出答案。
基本上,在网飞,他们可以预测什么内容会最受欢迎(或最受欢迎),从而优化流媒体。对优步来说,这可能是对汽车需求最高的地方,以优化客户满意度。
什么是异常检测方法?
我认为聚类给定的数据集可以揭示异常值,或者只是简单的方法,采取标准偏差,看看哪些数据点在范围之外也可以工作。
来自网络的回答:这篇博客在解释这些问题上做得非常出色。
Image from this website.
你如何使用 A/B 测试?
我对 A/B 测试的了解非常有限,因为我只能想到医疗环境。其中一组病人服用药物,而另一组不服用。然后我们试图在让他们参与一些活动的时候看到他们之间的一些不同。
Image from this website
Wiki 回答:“在 web analytics 中,A/B 测试(bucket tests 或 split-run testing)是一个有 A 和 B 两个变量的受控实验”(不过,我相信 A/B 测试在每个行业都有使用。)
交互代码
对于 Google Colab,你需要一个 Google 帐户来查看代码,而且你不能在 Google Colab 中运行只读脚本,所以在你的操场上做一个副本。最后,我永远不会请求允许访问你在 Google Drive 上的文件,仅供参考。编码快乐!
要访问 Google Colab 上的代码,请点击此处。
最后的话
当我做这些问题时,我变得更加谦虚,意识到我知道的很少。要成为数据科学专家,我还有很多工作要做。
如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请点击这里查看我的网站。
同时,在我的推特这里关注我,访问我的网站,或者我的 Youtube 频道了解更多内容。如果你感兴趣,我还在这里做了解耦神经网络的比较。
参考
- 二元分类。(2018).En.wikipedia.org。于 2018 年 4 月 6 日检索,来自https://en.wikipedia.org/wiki/Binary_classification
- 线性回归示例—sci kit—了解 0.19.1 文档。(2018).Scikit-learn.org。2018 年 4 月 6 日检索,来自http://sci kit-learn . org/stable/auto _ examples/linear _ model/plot _ ols . html
- 逻辑回归。(2018).En.wikipedia.org。于 2018 年 4 月 6 日检索,来自https://en.wikipedia.org/wiki/Logistic_regression
- (2018).Stat.cmu.edu。于 2018 年 4 月 6 日检索,来自http://www.stat.cmu.edu/~cshalizi/uADA/12/lectures/ch12.pdf
- (2018).Statisticssolutions.com。2018 年 4 月 6 日检索,来自http://www . statistics solutions . com/WP-content/uploads/WP-post-to-pdf-enhanced-cache/1/assumptions-of-logistic-regression . pdf
- 数据科学如何帮助推动网飞内容的全球交付。(2017).中等。2018 年 4 月 6 日检索,来自https://medium . com/网飞-tech blog/how-data-science-helps-power-world wide-delivery-of-网飞-content-bac55800f9a7
- 什么是缓存(计算)?—来自 WhatIs.com 的定义。(2018).搜索存储。检索于 2018 年 4 月 6 日,来自https://searchstorage.techtarget.com/definition/cache
- A/B 测试。(2018).En.wikipedia.org。检索于 2018 年 4 月 6 日,来自 https://en.wikipedia.org/wiki/A/B_testing
- AB 测试-完全指南。(2018).网站。检索于 2018 年 4 月 6 日,来自 https://vwo.com/ab-testing/
我对 2018 年数据科学的五大阅读
“对于那些寻求超越平凡的人来说,阅读是必不可少的。”—吉米·罗恩
数据科学是一个新兴领域,每个人都试图磨练自己的技能来掌握它。人们对成为一名优秀的数据科学家所需的重要因素感到好奇。我相信对统计学的良好理解,对 R/Python 等工具的良好掌握,能够发现数据中的模式,能够应用准确的模型,这些只是所需的众多特征中的一部分。然而,优秀是一回事,成功是另一回事。一个**“成功的**”数据科学家不仅关注必要的工具和概念,还紧跟行业的当前趋势。
书籍是建立更好的视角和拓展想象力的绝佳方式。尽管互联网上有大量的数据科学资源,但书籍有助于加深对该主题的理解,并可以在需要时随时用作参考。
我对书籍和数据都有热情。因此,今年,我挑选了五本书,它们不是“典型的”数据科学类型,但却“有益于数据科学领域”。他们不仅增加了我的知识,还给了我很多关于数据领域的思考。如果你是一名有抱负的数据科学家,正在为慵懒的下午寻找一些读物,我推荐以下列表。
游戏中的皮肤:日常生活中隐藏的不对称
纳西姆·尼古拉斯·塔勒布是我们这个时代最重要的思想家之一。短语“游戏中的皮肤”是风险管理的支柱,但适用于包括数据科学在内的所有领域。如果你在游戏中有皮肤,你更有可能利用你的本地知识,使用重要的东西,丢弃不相关的东西。
如何适用于数据科学?这本书论述了公平、商业效率和应对风险的必要性,所有这些特征都是数据科学生态系统的重要组成部分。
赤裸裸的统计——从数据中剥离恐惧
查尔斯·惠兰 的《赤裸裸的统计学》是对统计学及其如何被使用、误用和歪曲的极好介绍。这本书通过剥去表面的争论和揭示主题的潜在价值强调统计学的真实世界的应用。
许多人把这本书比作没有数学的“统计 101 课程”。因此,如果你害怕统计,这本书试图解释直觉,从基本概率到中心极限定理,从描述性统计到回归分析,所有这些都以一种简单直观的方式,带着一点幽默。
真实度
这本书是由有远见的 汉斯·罗斯林 (以及他的儿子和儿媳)写的,既鼓舞人心又富有启示性,充满了生动的轶事和感人的故事。
汉斯·罗斯林用数据、统计和简洁的视觉化表达了对世界及其问题的不同观点。事实证明,尽管这个世界并不完美,但它比我们想象的要好得多。这本书强调需要用事实来衡量世界的进步和发展,以对抗全球的无知。
数据科学教育非常注重数据争论和假设检验。汉斯·罗斯林通过这本书巧妙地提醒我们,形成错误的假设是代价高昂的
信号和噪音:为什么如此多的预测失败了——但有些却没有
[内特·西尔弗](http://Nate Silver) 是一个无需介绍的名字。他是著名的统计学家、作家,也是获奖网站FiveThirtyEight.com的创始人。这本书帮助我们理解预测的局限性和它可以被证明是成功的领域。通过他的书,Nate 带领我们进入了预测的世界,在这个世界里,大量的数据都存在于噪音之中。
如果一个人有兴趣了解现实世界中预测是如何进行的,以及预测者如何克服偏见以揭示准确和有意义的预测,这是一个有用的阅读。
大数据:洞察时代工作、生活和学习的必备指南
多年来,已经有很多关于“大数据”的书籍问世。然而,这本书的重点主要是大数据的应用,这些应用正在重新定义我们周围的业务和流程。
本书由世界上最受尊敬的两位数据专家 【维克托·迈尔·舍恩伯格】 和 肯尼斯·库基尔 撰写。他们谈论什么是大数据、大数据的好处以及如何有效利用大数据。通过本书分享的例子和现实生活中的经历,堪称典范。这本书不仅强调了大数据对从商业到政府,从科学到医学的几乎所有事物的日益增长的影响,而且还对大数据的黑暗面留下了深刻印象。
总的来说,这本书为大数据革命提供了强有力的介绍,对于探索该领域的有抱负的数据科学家来说,这是一本好书。
我很高兴我能读这些书,我希望你也能从中受益。虽然阅读一本书不会让你一夜之间成为一名成功的数据科学家,但它肯定会给你一个更好、更广阔的视角来看待和分析事物。毕竟,从数据中寻找意义是我们的工作。
我对当今优秀数据科学家的两点看法?
Source: Data Product Development Approaches (Industry 4.0 Series — Part 4) — Sravan Ankaraju
我的父母最近问我,我为了重新生活做些什么。过去,这并不容易解释,因为数据科学不是一个定义明确的领域。甚至当我在埃森哲开始我的第一份工作时,我几乎不知道我到底在做什么。当然有一些定义,比如:
或者著名的德鲁·康威的《数据科学维恩图》。
因此,在这个时候,我对什么是数据科学有了一些线索,但从我的角度来看,我所在领域的每个人,包括我在内,仍然在弄清楚什么是数据科学,以及它如何能够带来价值。至少,大多数人是这么做的。当然,谷歌或亚马逊的一些人马上就理解了我今天所说的现代数据科学,但其他人只是在试验它。例如,当我在埃森哲工作时,我的大多数客户“都希望利用他们的大数据”——不管这意味着什么。我相信你们很多人以前都听过这句话,尤其是如果你在这个领域工作的话。这个目标非常模糊,以至于我做的大部分项目都是一些 powerpoint 演示文稿中的概念证明。
现在,在工作了几年后,我对自己的工作有了更好的理解,我的工作只是创建智能和数据驱动的数据产品——至少,这是我现在告诉我父母的,他们似乎理解这一点。现在可能会出现的一个问题是,如今对于一名优秀的数据科学家来说,什么样的品质是脱颖而出的重要因素?
优秀的数据科学家也是优秀的产品经理
许多众所周知的数字产品直接由数据科学和机器学习驱动。举个例子,
- 谷歌在其搜索算法中使用机器学习来提高搜索质量
- Spotify、网飞或亚马逊使用推荐引擎来推荐新音乐、电影或产品
- 脸书使用计算机视觉技术自动标记你照片中的朋友,即使它看不到他们的脸
- 优步利用机器学习创造无人驾驶汽车和许多其他东西。
从这些例子中可以看出,颠覆性技术很好地利用了数据,它们是整体产品的一部分。
如今,仅仅摆弄数据、创建最终出现在 powerpoint 演示文稿中的模型是不够的,它们还需要成为产品的一部分!这就是为什么优秀的数据科学家也需要成为优秀的产品经理。优秀的数据科学家需要了解他们的工作如何在产品中结束,以及如何被消费。他们还需要能够创造一个产品,即使没有数据。我遇到过一些数据科学家,他们告诉我,只有在有数据的情况下,他们才能做数据科学。当然,这是有道理的,但并不是每个产品都是从大量数据开始的。或者也没有数据,特别是如果你还在弄清楚那个产品是什么的话。思考数据很快会带来什么是一项非常重要的技能。 Trey Causey 最近也发表了一篇关于这个话题的文章《数据产品经理的崛起》。你应该看看他的文章。这个课题我也研究过一段时间。去年,我写了一篇名为“数据科学的 API 优先”的文章,文章基本上认为数据科学模型应该尽早包装成 API,以便它们可以无缝地用于产品中。
优秀的数据科学家也是优秀的足球运动员
在足球比赛中,你有 11 名队员。一名球员担任守门员,其他十名球员担任前锋、中场或后卫。虽然有像克里斯蒂亚诺罗纳尔多或莱昂内尔梅西这样的球员脱颖而出,但没有他们的球队,他们什么都不是。例如,梅西在他的俱乐部巴塞罗那做得非常好,但当谈到国家队时,一切都落在他的肩上,他的球队通常在比赛中表现不佳。
这也适用于创造惊人的产品。虽然有那些超级惊人的独角兽,也就是数据科学家,但如果没有他们的同行,如产品经理、设计师、软件工程师、数据工程师、功能专家或创造成功产品所需的任何角色,他们就什么都不是。
例如,让我们把 Spotify 作为设计+数据科学之间合作的一个很好的用例(当然,产品经理、软件工程师等其他角色也参与其中,但在这种情况下,设计和数据科学更明显)。这是他们的产品在多种设备上的图像:
Source: FileHippo
我只是喜欢它们光滑、深色、干净的设计,在我使用的每一个设备上看起来都很完美。但我使用 Spotify 的主要原因是因为他们的“每周发现”功能,他们根据我过去听过的内容编辑每周个性化播放列表。我必须承认它工作得很好。
Source: The Verge
等等——其他品质呢,比如数据科学家也是优秀的黑客、优秀的统计学家、优秀的沟通者、优秀的问题解决者等等…
事实上,我们每个人都同意,如今一名优秀的数据科学家需要具备良好的编程、统计、数学、沟通和解决问题的技能。还有更多的技巧,但我故意不谈论这些,因为有太多的文章在讨论这个问题。我只提到了我认为数据科学将会发展的两个领域。例如,我们看到许多数据产品经理的角色即将出现,因为许多公司意识到许多成功的产品都是数据驱动的。
此外,数据科学领域也将出现更多的跨学科合作。谷歌启动了一个名为“以人为中心的机器学习”的新项目,它基本上应该为与人工智能合作的设计师创造一些指南。还会有更多的合作。我期待着这种发展。
更多的读数
构建有影响力的数据产品的建议
builttoadapt.io](https://builttoadapt.io/8-simple-guidelines-for-data-projects-859a1a738ffc) [## 机器学习时代的体验设计
这对设计者和数据科学家来说意味着什么,他们创造了从人类行为中学习的系统
medium.com](https://medium.com/@girardin/experience-design-in-the-machine-learning-era-e16c87f4f2e2) [## 为什么优秀的数据科学家会成为优秀的产品经理(以及为什么他们会有点不舒服)
当我从数据科学家转型为产品经理时,我从当前的…
medium.com](https://medium.com/@treycausey/why-good-data-scientists-make-good-product-managers-and-why-theyll-be-a-little-uncomfortable-155bb9687f3) [## 设计现代团队
“我们需要什么样的团队来开发我们的新产品?”
medium.com](https://medium.com/@davidjbland/designing-modern-teams-d53516b1e7d8)
我相信,对于当今优秀的数据科学家需要具备哪些素质,许多人会有不同的看法。我很高兴能在一个每天都在不断变化的领域工作。所以我很乐意听取其他人对什么品质是/将是重要的看法?
如果你喜欢这篇文章,请给我一个❤️:)在 Medium Dat Tran 或 twitter @datitran 上关注我,了解我的最新作品。
我的 Python 工作秘书
在 Upwork 工作和找工作既不容易也不困难。招聘人员发布职位,自由职业者前来投标。根据招聘者的需求,他们可以选择一名自由职业者,游戏继续进行。这并不像听起来那么简单。许多自由职业者试图在竞标中杀出一条血路,要么让他们太便宜,要么失去被选中的可能性。自由职业者会明白我在说什么。
因此,作为一名自由职业者,我也曾向资深人士咨询如何成功获得一份体面的工作。我曾经从不同的人那里得到不同的指示。我想到的一个主意是——尝试对工作/项目进行第一次投标。这增加了你被招聘人员注意到的机会。然后试着和他交谈,让他(招聘人员)对你感到舒服,并对选择你充满信心,问一些与工作/项目相关的问题,我指的是好问题。
我想到的一个主意是——尝试对工作/项目进行第一次投标。这增加了你被招聘人员注意到的机会。
当然,为了执行第二个任务,我必须执行第一个。
方案 A:整天坐在传送门上,每分钟按 F-5。
选项 B:利用你唯一拥有的技能(编程),运行一个脚本,在每个定义的时间间隔获取与你的技能相关的报价,并播放通知声音,随后显示具体报价的简要信息和链接。
运行一个脚本,在每个定义的时间间隔获取与您的技能相关的报价,并播放通知声音,随后显示具体报价的简要信息和链接。
我非常幸运,因为 Upwork 确实提供了用于开发目的的 API。我很高兴用我最喜欢的语言——Python 实现了这个想法。简而言之,我把程序分成了许多子任务;它们是:
-
获取 API 密钥并初始化客户端
-
在浏览器中打开身份验证 URL
-
读取令牌并在当天剩余时间存储客户端
-
按定义的时间间隔获取作业
-
为每个作业对象生成一个散列字符串(在 JSON BTW 中)
-
简单:检查历史作业中是否存在哈希;如果是-忽略,如果不是,这是一个新的提议
源代码是开源的——我希望每个人都受益,如果有改进,我会接受拉请求。
在 GitHub 上创建一个帐户,为 upwork-secretary 的发展做出贡献。
github.com](https://github.com/ramansah/upwork-secretary)
我作为数据科学家的愿景和使命
我教会的一位年轻弟兄组织了一个使用 SPSS 进行数据分析的能力建设班。因为我总是故意不去上他的课,所以他鼓励我去参加,哪怕只是一次。我最后参加的唯一一堂课激发了我的好奇心。“数据分析到底是什么?”。为了解决我好奇的想法,我在谷歌上跳转,直到我发现自己在
Quora(一个问&智能问题并由智能头脑回答的平台)上。我对
数据分析所能提供的不满意,因为我想要更多。幸运的是,我偶然发现了数据科学,并且一见钟情。从那时到现在,对我来说,
数据科学家被认为是 21 世纪开创性的工作之一。哇,我开始下载大量资料,并在
youtube 上观看视频,以了解它是什么。
Prof J.Widom ShortCourse, University of Ibadan
在我自学期间,我被选中参加伊巴丹大学 J.Widom 教授(加州斯坦福大学工程学院院长)主持的为期 5 天的大数据和机器学习领域的短期课程。那年年底,我也进入了尼日利亚第二届数据科学训练营的最终名单。在那里,我们接受了来自美国、加拿大、南非甚至尼日利亚的专业数据科学家的辅导和指导。这的确是一次改变人生的经历。
Data Science Bootcamp, Lagos
作为回报,我不仅要提高自己的技能,还要尽我所能帮助更多的人进入这个光荣的领域。为了实现我的目标,我组建了一个团队,目标是从 meetup 培训开始,在学校建立一个数据科学社区。在发布注册表格的 3 天内,仅 25 个位置就收到了超过 55 份申请(这是我们场地可以方便容纳的参与者数量,感谢 @CmapIT )。该团队筛选出了 25 名成功申请者,他们的回答都是有目的的。
聚会是一个通宵会议,因为大多数学生白天都会很忙,结果令人惊讶。我们进行了两次
现场介绍性会谈( @idowu_adelek 和 @iamopetunde ),我参加了一个端到端机器
学习项目的实践会议( Daniel Ajisafe )。他们理解新概念的速度和步伐是惊人的。我不能要求更多了。
我们的愿景是培养该国下一代年轻的数据从业者,并将
机器学习的可能性传播给尽可能多的人。LAUTECH 的第一次,尼日利亚所有大学的第一次学生数据科学/机器
学习聚会。这只是开始…………@ lautechDataSci
加速您数据科学学习的双重方法
介绍
所以,这篇文章是关于通过我在过去几个月里开发的方法/技术来学习数学。我称之为双折法。数学不仅是数据科学的重要组成部分,也是模拟现实世界问题的重要组成部分。我开始学习是因为我无法理解几乎每本关于数据科学的书籍或文章中出现的任何概率分布、统计概念、微积分符号和矩阵。截至 2018 年 11 月,我已经开始理解和舒适地使用数据科学书籍、帖子、文章和期刊,无论它们包含什么水平的数学。是的,就连深度神经网络的数学也不再让我害怕。我想是时候分享我的学习方法了。我之前写过关于我的数据科学之旅。
Source: Wikipedia
背景
在我继续讲下去之前,我想重申几件已经确立了我的学习和工作方式的事情。每当我想学习新的东西时,我总是想先学习基础知识,然后在基础知识上再有所发展。死记硬背或忽略某些基本概念和想法是没有意义的,因为这不仅会导致沮丧,而且会浪费大量时间学习,然后因为忽略了基础知识而重新学习 100 遍同样的东西。这是我个人的学习方式,然后是专业方式,受商业方式和生活实用性的影响。从专业角度来说(以前是软件开发,现在是数据科学),如果我需要学习一些非常新的主题/子主题/概念,我会快速浏览并阅读一些基础知识,然后找到正确和既定的方法来应用这些概念解决问题。Aim 更多的是应用方面的东西。
世界正在高速发展,技术已经震撼了世界,随着这一第四次工业革命已经到来。它模糊了你的职业(工作)和生意之间的界限。现在你可能会问,什么是第四次工业革命。根据维基百科,第四次工业革命也称为工业 4.0 包括这些想法:
Image by Christoph Roser at http://AllAboutLean.com
本质上,在智能工厂中,信息物理系统监控物理过程,创建物理世界的虚拟副本,并做出分散的决策。通过物联网,信息-物理系统在内部以及由价值链的参与者提供和使用的组织服务之间实时地相互通信和合作
这对你的职业生涯有什么影响?你必须尽快给出结果,否则不仅会让你丢掉工作,还会给你的雇主带来巨大的损失,如果你不明白这一点,如果你继续忽视这一点,那么从长远来看,你也会失去你的职业生涯。
职业需求
实际上,一个交付的问题解决方案比一个花费 10 倍时间的伟大解决方案更好,也比一个花费一年时间的完美解决方案更好,更有益。以领域为例,它在数据科学中的重要性已经确立。数据科学和领域专业知识密切相关。现在,如果你是一名数据科学家,从来没有学过生物学,但你的雇主有一个客户,主要是一家从事生物学的公司,那么,你要么让它成为一次痛苦的经历,要么成为一次快乐的经历,你必须学会这两种方式。在你认为我在瞎编之前,先看看计算生物学。没有生物学背景,你可以从零开始学习几种方法:
- 买一本厚重的生物学基础/入门书,需要几个月的时间来完成
- 参加为期 6 周多的生物学和数据科学 MOOCs
- 学习第四次工业革命的方式
前两个选项需要 1-2 个月或更长时间(理想情况下是 4 个月)才能开始你的项目工作,而你的雇主却因为你什么都没做而付给你钱。这既不公平又愚蠢,对你的雇主不公平,对你也愚蠢,因为你可以更有效地利用时间。你需要学会区分雇主的直接需求和你生产优秀产品的需求。
Source: Wikipedia
第四次工业革命的方式说你可以在一两周内完成,你不需要马上花两个月。将你的关注点从生物学缩小到你客户的当前需求,学习基本的术语和足够的基础知识,以便开始用 Python 和库来处理生物学中的问题(例如 PySB 和 Biopython )。如果你想完成有期限的工作,这就是你的态度。即使没有最后期限,我还是会说你走第四次工业革命的道路,因为这不仅会帮助你更快地解决问题,还会让你免于陷入“我学得不够多”的恶性循环。这并不意味着,你创造了一个糟糕的解决方案,因为你不是你学校的生物学生。如果你这样做,那么你解决问题的方法就不系统,这意味着你需要学习很多关于生产力、效率和情商的知识。这也意味着,你无法提供一个真正好的解决方案,这种能力已经超越了你的工作,延伸到了你的个人、财务和职业生活的另一个层面,你需要非常认真地对待这个问题,并立即开始着手解决自己的问题。你的日常常规思维需要改变。你可以看看吉米·罗恩教你如何掌控自己的人生
数学
你可能认为这一切都与数据科学的数学无关。确实如此。数学是一种对世界建模的方法,它是一种在问题中发现模式并使用经过试验和测试的模型来解决它们的方法。这既是一门艺术也是一门科学。数学给了我们解决问题的工具,比我们想象的要快得多,在事情失去控制之前处理混乱也是惊人的准确。这如何适用于我们的情况呢?我一会儿会谈到这一点。
我完成了代数和微积分的学习,参加了几门 MOOCs 课程,阅读了大量自学材料,包括书籍、文章和博客。我现在开始学习概率。概率、统计和线性代数是与数据科学重叠的数学领域。我观察到的是,就像代数和微积分一样,这些主题非常广泛,你可以花将近一年的时间来学习它们的基础知识。那我们该怎么办?我们变得聪明而实际。
双重方法
第一重: 使用第四次工业革命我上面描述的解决问题的方式,这意味着我记得我的主要工作是数据分析和机器学习,我的目标是获得数据科学所必需的基础数学,这样我就不会盯着空白或看数学术语和公式时精神崩溃,每当我在数据分析和机器学习文章、博客和库文档中遇到数学时,我都知道基本的公理和理论基础。如果我遇到我不知道的东西,我就能弄清楚,因为我掌握了基本原理。
第二重 : 终身学习数学,这与第一重相反,每当我有空的时候,我会打开一本书,看几个自定进度 MOOC 的视频(我不再订阅非数据科学工作的基于时间的 MOOC)或解决一些数学问题( Schaum 的系列非常有名,如果你知道什么更好的,请告诉我)。从更广泛的意义上来说,我把数学作为我的爱好,而不是在 YouTube 上看视频。像数学家一样思考问题,花尽可能多的时间找出答案。我从约翰·艾伦·保罗斯的《数学盲及其后果》开始了这段旅程。从狭义上来说,看一个数学公式并找出它被创造的原因,阅读它的历史,它被应用在哪些领域,它的应用范围以及它从一个领域到另一个领域的演变,尽可能详细地阅读它,或者阅读不同数学家和书籍中的一个概念的简介,如果你有编程背景,可以阅读埃文·米勒的数学黑客。另一篇关于如何正确学习数学的非常好的文章是史蒂夫·耶格写的。如果你只做第一次,那么你的数学知识将会很少,几年后,当你决定用什么模型来解决什么问题时,你将没有足够的信息。如果你只是做第二遍,那么你将永远没有足够的时间来完成任何事情。你必须混合使用这两种方法,这就是为什么我称之为双重方法。事实上,它不仅适用于数学,也适用于几乎任何一种学习。如果你知道任何更好的学习数学的方法,我将非常乐意知道。
灵感
由于我的概率、统计和线性代数知识几乎为零,最近我从普渡大学开始了 one,它也有它的第二部分。最后一件事,我上过的最好的 MOOC 是在 Coursera 学习如何学习。是的,这与数学或数据科学无关,但这就是生活,你在任何领域/学科的技能和成就很大程度上取决于你的个人思维,但这完全是另一回事,在另一篇博客文章中讨论。终身学习,无论遇到多大的挫折都不要放弃。
最初发表于我的博客。
我作为数据科学家的弱点
(Source)
不认识到我们的弱点,我们将永远无法克服它们
如果现代求职面试教会了我们什么,那就是“你最大的缺点是什么?”这个问题的正确答案就是“我工作太辛苦了。”显然,实际上谈论我们的弱点是可笑的,对吗?为什么我们要提到我们还不能做的事情?虽然工作申请和 LinkedIn 个人资料页面并不鼓励我们披露自己的弱点,如果我们从不承认自己的不足,那么我们就无法采取措施来解决它们。
努力变得更好的方法很简单:
- 确定你现在的位置:找出弱点
- 弄清楚你想去哪里:制定一个到达那里的计划
- 执行计划:一次做一件小事
我们很少走过第一步:特别是在技术领域,我们低着头继续工作,使用我们已经拥有的技能,而不是获得新的技能,使我们的工作更容易或为我们打开新的机会。自我反省——客观地评价自己——可能看起来像一个陌生的概念,但是能够后退一步,找出我们可以做得更好或更有效的地方,对于任何领域的进步都是至关重要的。
考虑到这一点,我试图客观地审视我现在的状况,并确定了 3 个方面来使我成为更好的数据科学家:
- 软件工程
- 缩放数据科学
- 深度学习
我写这篇关于我在数据科学方面的弱点的文章有三个目的。首先,我真的关心变得更好,所以我需要承认我的弱点。通过概述我的不足以及如何解决它们,我的目标是让我自己有动力去完成我的学习目标。
其次,我希望鼓励其他人思考他们可能不知道的技能,以及他们如何努力获得这些技能。你不必写自己的文章来披露你所不知道的,但是花一些时间来考虑这个问题会有回报的,如果你发现了一项需要努力的技能的话。
最后,我想告诉大家,要成为一名成功的数据科学家,你不需要知道所有的事情。数据科学/机器学习主题的数量几乎是无限的,但你实际上可以知道的数量是有限的。不管不切实际的工作申请宣称什么,你不需要完全了解每种算法(或 5-10 年的经验)就能成为一名实践数据科学家。我经常听到初学者被他们认为必须学习的大量主题所淹没,我的建议总是相同的:从基础开始,明白你不需要知道所有!
Even this is probably an exaggeration! (Source)
对于每一个缺点,我都列出了问题和我目前正在努力做的事情。发现自己的弱点很重要,但制定解决它们的计划也很重要。学习一项新技能需要时间,但是计划一系列小而具体的步骤会大大增加你成功的机会。
1.软件工程
在学术环境中获得了第一次真正的数据科学经验后,我试图避免染上一些反映数据科学学术方式的坏习惯。其中有*编写只运行一次的代码的倾向,缺乏文档,没有一致风格的代码难以阅读,*硬编码 具体值。所有这些实践都反映了一个主要目标:开发一个数据科学解决方案,该方案只对特定数据集有效,以便撰写论文。
作为一个典型的例子,我们的项目处理最初以 15 分钟为间隔的建筑能源数据。当我们开始以 5 分钟为增量获取数据时,我们发现我们的管道完全崩溃了,因为有数百个地方的间隔被明确编码为 15 分钟。我们无法进行简单的查找和替换,因为该参数被多个名称引用,如electricity_interval
、timeBetweenMeasurements
或dataFreq
。没有一个研究人员想过让代码易于阅读或灵活地改变输入*。*
相比之下,从软件工程的角度来看,代码必须用许多不同的输入进行广泛的测试,有良好的文档记录,在现有的框架内工作,并遵守编码标准,以便其他开发人员能够理解。尽管我的初衷是好的,但我仍然偶尔像数据科学家而不是软件工程师一样编写代码。我开始认为,将普通数据科学家与伟大的数据科学家区分开来的是使用软件工程最佳实践编写代码——如果你的模型不健壮或不适合某个架构,它就不会被部署——现在我正试图训练自己像计算机科学家一样思考。
我在做什么
像往常一样,没有比实践更好的学习技能的方法了。幸运的是,在我目前的工作中,我能够为我们的内部工具和开源库做出贡献。这迫使我学习了许多实践,包括:
即使对于那些还没有进入公司的数据科学家来说,你也可以通过参与合作性的开源项目来获得这方面的经验。找出可靠编码实践的另一个好方法是通读 GitHub 上流行库的源代码( Scikit-Learn 是我的最爱之一)。获得他人的反馈至关重要,所以找一个社区,向那些比你更有经验的人寻求建议。
像软件工程师一样思考需要思维方式的改变,但是如果你能够放慢速度并记住它们,采用这些实践并不困难。例如,每当我发现自己在 Jupyter 笔记本上复制和粘贴代码并更改一些值时,我会尝试停下来,并意识到使用一个从长远来看会使我更高效的函数会更好。虽然我在这些实践上并不完美,但我发现它们不仅让其他人更容易阅读我的代码,也让我更容易构建我的工作。代码被阅读的次数将会比它被编写的次数多,这包括你未来的自己,他会欣赏文档和一致的风格。
当我不编写被设计为更大的库的一部分的代码时,我仍然尝试使用这些方法中的一些。对于数据科学家来说,为数据分析编写单元测试可能看起来很奇怪,但是当您实际需要开发测试来确保代码按预期工作时,这是一个很好的实践。此外,有许多林挺工具检查你的代码是否遵循一种编码风格(我仍然纠结于关键字参数周围没有空格)。
Always things to improve (using pylint in Sublime Text 3).
我还想在计算机科学的许多其他方面努力,比如编写高效的实现而不是暴力方法(比如使用矢量化而不是循环)。然而,同样重要的是要意识到你不能一下子改变所有的事情,这就是为什么我专注于一些实践,并把它们 习惯 融入我的工作流程。
虽然数据科学现在是它自己的领域,但从业者可以通过采用现有领域(如软件工程)的最佳实践而受益。
2.扩展数据科学
虽然你可以自学数据科学中的所有知识,但你可以付诸实践的东西是有一些限制的。一个是难以将分析或预测模型扩展到大型数据集。我们大多数人都没有机会接触到计算集群,也不想花钱购买个人超级计算机。这意味着,当我们学习新方法时,我们倾向于将它们应用于小型的、性能良好的数据集。
不幸的是,在现实世界中,数据集并不遵循严格的大小或清洁度限制,您将需要不同的方法来解决问题。首先,你可能需要打破个人电脑的安全限制,使用一个远程实例——比如通过AWS EC2——甚至多台机器。这意味着学习如何连接到远程机器和掌握命令行——你将无法在 EC2 实例上使用鼠标和 gui。
在学习数据科学时,我尝试在 EC2 机器上工作,要么使用免费层,要么使用免费配额(如果您管理所有的电子邮件和密码,您可以创建多个帐户)。这有助于我熟悉命令行,但是,我仍然没有解决第二个问题:大于机器内存的数据集。最近,我意识到这是一个阻碍我前进的限制,是时候学习如何处理更大的数据集了。
我在做什么
即使没有在计算资源上花费数千美元,也有可能实践处理不适合内存的数据集的方法。其中一些包括一次遍历一个数据集的一个块,将一个大数据集分成许多小块,或者使用 Dask 等工具为您处理大数据的细节。
我目前的方法,无论是在内部项目上还是在开源数据集上,都是将数据集划分为子集,开发一个可以处理一个分区的管道,然后使用 Dask 或 Spark 和 PySpark 通过管道并行运行子集。这种方法不需要超级计算机或集群,您可以使用多个内核在个人计算机上并行化操作。然后,当您可以访问更多资源时,您可以调整相同的工作流以进行扩展。
此外,感谢 Kaggle 等数据仓库,我已经能够找到一些非常大的数据集,通读其他数据科学家的方法来处理它们。我收集了一些有用的技巧,比如通过改变数据帧中的数据类型来减少内存消耗。这些方法有助于我更有效地处理任何规模的数据集。
虽然我还没有处理大规模的 TB 级数据集,但是这些方法已经帮助我学会了处理大数据的基本策略。对于最近的一些项目,我能够应用到目前为止我所学到的技能来对运行在 AWS 上的集群进行分析。在接下来的几个月里,我希望逐渐增加我能轻松分析的数据集的大小。很有可能数据集的大小不会减少,我知道我需要继续提高处理大量数据的技能。
The US Library of Congress “only” has about 3 Petabytes of material. (Image source)
3.深度学习
虽然人工智能在过去经历了繁荣和萧条的时期,但最近在计算机视觉、自然语言处理和深度强化学习等领域的成功让我相信,深度学习——使用多层神经网络——并不是又一个短暂的时尚。
与软件工程或扩展数据科学不同,我目前的职位不需要任何深度学习:传统的机器学习技术(例如 Random Forest )已经能够解决我们客户的所有问题。然而,我认识到,并不是每个数据集都是整齐的行列结构,神经网络是(目前)处理文本或图像项目的最佳选择。我可以继续利用我目前的技能解决我已经解决的问题,但是,尤其是在我职业生涯的早期,探索话题是一项具有巨大潜在价值的工作。
The Explore/Exploit Tradeoff applies to reinforcement learning and your life! (Source)
深度学习中有许多不同的子领域,很难找出哪些方法或库最终会胜出。尽管如此,我认为对该领域的熟悉和对实现一些技术的信心将允许一个人处理更广泛的问题。鉴于解决问题是驱使我从事数据科学的原因,将深度学习的工具添加到我的工具箱中是一项值得的投资。
我在做什么
我研究深度学习的计划与我将自己转变为数据科学家的方法相同:
- 阅读强调实现的书籍和教程
- 在实际项目中练习这些技术和方法
- 通过写作分享和解释我的项目
当研究一个技术课题时,一个有效的方法是边做边学。对我来说,这意味着不是从潜在的基本理论开始,而是通过找出如何实现解决问题的方法。这种自上而下的方法意味着我非常看重那些有动手风格的书,也就是那些有很多代码示例的书。在我看到技术是如何工作的之后,我会回到理论上来,这样我就可以更有效地使用这些方法。
虽然我可能是独自一人,因为我没有机会在工作中从其他人那里学习神经网络,但在数据科学中,由于丰富的资源和广泛的社区,你永远不会真正依靠自己。对于深度学习,我主要依靠三本书:
- 深度学习食谱作者 Douwe Osinga
- 用 Python 进行深度学习Francois Chollet
- 伊恩·古德菲勒、约舒阿·本吉奥和亚伦·库维尔的《深度学习》
前两者强调用神经网络构建实际的解决方案,而第三个则深入讨论理论。当阅读关于技术主题的内容时,让它成为一种积极的体验:只要有可能,把你的手放在键盘编码和你所阅读的内容上。像前两本书这样提供代码示例的书非常棒:我通常会在 Jupyter 笔记本上一行一行地输入一个示例,以弄清楚它是如何工作的,并在进行过程中写下详细的笔记。
此外,我不仅尝试复制代码示例,还尝试对它们进行实验,或者使它们适应我自己的项目。这方面的一个应用是我最近与合作建立一个图书推荐系统,这个项目改编自深度学习食谱中的一个类似代码练习。试图从头开始自己的项目可能会令人生畏,而且,当你需要激励时,在别人已经做的基础上进行建设也没什么错。
最后,学习一个话题的最有效的方法之一是把它教给别人*。根据经验,我不会完全理解一个概念,直到我试图用简单的术语向别人解释它。对于我在深度学习中涉及的每个新主题,我将继续写作,分享技术实现细节以及概念解释。*
教学是最好的学习方式之一,我计划让它成为我研究深度学习的一个组成部分。
From personal experience, this looks accurate (Source)
结论
宣扬你的弱点可能感觉有点奇怪。我知道写这篇文章让我不舒服,但我把它放出来,因为它最终会让我成为一名更好的数据科学家。此外,我发现,如果你有自知之明,承认自己的缺点,并讨论如何解决这些问题,那么包括雇主在内的许多人都会对你印象深刻。
缺乏技能并不是缺点——真正的缺点是假装你什么都知道,并且不需要变得更好。
通过确定我的数据科学弱点(软件工程、扩展分析/建模、深度学习),我旨在提高自己,鼓励他人思考他们的弱点,并表明要成为一名成功的数据科学家,你不需要学习所有东西。虽然反思自己的弱点可能是痛苦的,但学习是令人愉快的:最有收获的经历之一是在持续学习一段时间后回顾过去,并意识到自己比开始学习前知道的更多。
一如既往,我欢迎反馈和建设性的批评。可以通过推特 @koehrsen_will 或者通过我的个人网站 willk.online 找到我。
我妻子睡不着
她没有忽视瘙痒,你也不应该忽视
她又痒又累。她也怀了 29 周我们的第二个孩子。当然不是一场独特的斗争。不舒服和精疲力尽几乎是妊娠晚期的定义。
但是伊芙知道有些事情不对劲。当瘙痒开始时,睡觉让位于夜间抓痒——和谷歌搜索。起初,她在网上找到的东西令人放心——怀孕确实会因为皮肤血流量增加而让你发痒——但她的瘙痒似乎有所不同。更加强烈和广泛。然后她读到了一种相对罕见的肝脏疾病,这种疾病会导致怀孕期间的严重瘙痒*。这种疾病与婴儿的一些非常糟糕的结果有关,所以伊芙决定问问她的产科医生。医生认为这是很严重的可能性很小,但为了安全起见,她还是安排了检查。*
肝功能结果最先出来,因为样本是在本地进行的。该国只有少数实验室评估胆汁酸水平,因此 Eve 的样本必须运出,这一过程需要 3 到 7 天。作为对我们耐心的回报,我们被告知她的数据看起来不错。似乎没什么可担心的。
又过了两周。为了工作,我去了肯尼亚和利比里亚。伊芙去 DC 参加一个会议。她的痒尾随而来,并分享一个房间。但是在那些深夜的狂欢中,她无法摆脱出问题的感觉。
她重复了这些测试,并于 6 月 8 日(第 31 周)收到了她的诊断结果: 妊娠期肝内胆汁淤积症 ,或 ICP。
什么是 ICP?
肝脏(希腊文 hepato )是一个相当整洁的器官。当你在五人餐厅狼吞虎咽地吃下一个汉堡时,你的肝脏会产生胆汁来分解脂肪。由于尚未完全了解的原因,ICP 中断了这一过程,并在血液中产生胆汁酸堆积()。如果不加以控制,ICP 会增加死胎和出生时呼吸问题的风险。血液中过量的胆汁酸是导致这些问题的原因,还是仅仅是一些其他疾病过程的标志还不清楚。**
ICP 的唯一“治疗”是分娩;大多数女性在不再怀孕时,肝功能会恢复正常。怀孕期间的“管理”ICP 通常涉及规划早期分娩和使用药物熊去氧胆酸(又名 UDCA、熊去氧胆酸、Actigall),这可能会缓解瘙痒并减少血液中有毒胆汁酸的量。血清胆汁酸水平大于 10 mol/L 标志着 ICP 的发作,40 mol/L 是“重度”ICP 的阈值。
研究最佳交货周
当伊芙的结果显示是颅内压增高时,我们试图尽可能地了解病情。我于 6 月 9 日登陆 ICP 关爱网站,那天正好是 ICP 宣传日的前一天。以下是引起我注意的事情:
**如果不积极处理,妊娠期肝内胆汁淤积症期间死产的风险可高达 15%。然而,通过积极的管理,包括药物熊去氧胆酸和早期分娩(通常在妊娠 36-37 周),风险被认为与无并发症妊娠大致相同,即低于 1%。**导致死胎的机制尚未完全了解,也不可能预测哪些妊娠存在风险。虽然研究发现较高的胆汁酸水平似乎会带来较高的某些并发症风险,如呼吸窘迫和胎儿窘迫,但研究未能确定死产的相同关系。因此,所有 ICP 妊娠都建议提前分娩。
我们相信死产的总体风险应该很低,因为伊芙正在接受 UDCA 的“积极管理”,并初步计划在 37 周分娩,但两个问题促使我们开始深入研究:
- 37 周是分娩的最佳时间吗?
- Eve 诊断时的胆汁酸水平是 25 mol/L,如果开始升高怎么办?有没有一个门槛可以促使我们更早地交付产品?
按周来看死胎的风险是什么样的?
就 ICP 而言,分娩的“最佳时机”是做某事的风险小于什么都不做的风险的点(T21)。等太久才生,就有死胎的风险。行动太快,你就有婴儿死亡或活产并发症的风险。
这应该让你对我们的风险计算有所了解,我们通过寻找按周估计死产风险的研究开始了我们的研究之旅。我们发现的关于死胎率的最大研究是加利福尼亚州 160 万妊娠妇女的回顾性队列研究。
在一项队列研究中,研究人员找出符合特定标准的人,并跟踪他们一段时间,看看谁产生了感兴趣的结果。在这项特殊的研究中, 普尔吉奇和他的同事们 根据妇女的暴露程度——ICP 或无 ICP——从生命统计登记中选择妇女,并提取关于产妇、胎儿和婴儿结局的相关数据。这被认为是回顾性(或非同期或历史性*)队列设计,因为在作者开始他们的研究时,怀孕和结果已经发生。***
在他们 160 万例妊娠的数据集中,研究人员发现了 5545 例 ICP,发病率为 0.35%。这比其他研究发现的要低,这意味着有可能某些比例的实际 ICP 妊娠没有被正确编码。或者其他研究高估了 ICP 的发病率,而这项研究是正确的。很难知道。
作者以表格形式展示了一些结果,我认为用数字来表示更好,所以我尝试了一些图表(代码在这里是)。下图显示了患有和未患有 ICP 的妇女每周的死产风险。它表明,与没有 ICP 的妇女相比,患有 ICP 的妇女每周的死产风险更高,但 ICP 组的每周数字如此之小,以至于估计值非常不确定(黄色带是 ICP 的 95%置信区间,它包括所有非常精确估计的紫色对照值)。最明显的发现是患有 ICP 的妇女在期末死产的风险显著增加。根据定义,这些案例没有得到提前分娩的完全“管理”,因为它们没有在 38 周之前分娩,但是我们从数据中不知道服用 UDCA 的百分比。
Data for this plot come from Table 2 in Puljic et al. (2015). The risk of infant and fetal death by each additional week of expectant management in intrahepatic cholestasis of pregnancy by gestational age. American Journal of Obstetrics and Gynecology, 212(5), 667-e1. Plot code here.
另一方面呢——过早交付的风险?
由普尔吉奇和他的同事进行的回顾性队列研究也提供了关于早产风险的部分数据。在患有 ICP 的女性群体中,作者计算了与分娩相关的婴儿死亡的每周风险——也就是做一些事情——并将其与他们所谓的期待治疗——也就是等待和不做任何事情——的复合死亡风险进行比较。复合风险是给定一周内死产的综合风险加上下一周分娩时婴儿死亡的风险。换句话说,他们比较了在给定的一周内分娩的风险和多等一周的风险。
这是我试图绘制他们的数据。作者在论文中也画了点估计,但没有画不确定性,我认为我们需要看到这两个元素。这两条线在第 36 周交叉,表明这可能是最佳点,此时行动的风险低于等待的风险。
Data for this plot come from Table 3in Puljic et al. (2015). The risk of infant and fetal death by each additional week of expectant management in intrahepatic cholestasis of pregnancy by gestational age. American Journal of Obstetrics and Gynecology, 212(5), 667-e1. Plot code here.
***当然,这份风险档案中遗漏了围产期发病率——母亲和婴儿的不良后果,导致死亡。*这可能包括脑瘫和呼吸窘迫综合征等情况,这些情况更有可能是早产的结果。如果不考虑发病率,就不可能对早期分娩的风险进行真正的评估。
Lo 和他的同事 用他们的决策分析模型在这方面帮了我们。在这项研究中,作者模拟了一个假设的 10,000 名 ICP 妇女队列的结果,基于(a)产妇和新生儿的预期寿命,(b)文献中发现的几种不良结果的产妇和新生儿效用值,以及©四种不同分娩策略的新生儿和产妇发病率、ICP 死产和 35-38 周新生儿死亡的公布概率:**
- 服用类固醇(促进肺部发育)后 48 小时分娩,无需羊膜穿刺术
- 使用类固醇后 48 小时分娩,羊膜穿刺术
- 羊膜穿刺术和复检,没有类固醇
- 立即分娩(无羊膜穿刺术,无类固醇)
Data for this plot come from Lo et al. (2015). Intrahepatic cholestasis of pregnancy and timing of delivery. Journal of Maternal-Fetal & Neonatal Medicine, 28(18), 2254–2258. Plot code here. This plot shows additional QALYs relative to the minimum QALY value, which is delivery at 38 weeks following amniocentesis and steroids. This minimum value is set to 0 in the figure.
主要结果是总的 质量调整生命年 ,或质量生命年。一年的健康相当于 1 QALY,所以人均预期生活质量越好。这里显示了模拟的主要结果。与所有其他策略相比,在 36 周立即分娩而不使用羊膜穿刺术或类固醇似乎能最大限度地提高质量生活质量。
作者总结道:
当考虑权衡因素时,虽然与妊娠 37 周或更晚分娩相比,36 周分娩的新生儿发病率更高,但[死产]的风险降低。
以下图表显示了 QALY 计算和这一结论背后的趋势。像脑瘫和呼吸窘迫综合征的风险在 37 周前最高,但这被 37 周和 38 周死产风险的增加所抵消。
Data for this plot come from Lo et al. (2015). Intrahepatic cholestasis of pregnancy and timing of delivery. Journal of Maternal-Fetal & Neonatal Medicine, 28(18), 2254–2258. Plot code here. These plots show the patterns of risk for three specific outcomes according to the model: the risks of cerebral palsy and respiratory distress syndrome decrease as babies mature in the womb, while the risk of stillbirth among women with ICP increases every week.
虽然不是绝对的,但这两项研究使我们倾向于在 36 周而不是计划的 37 周分娩。当 Eve 的下一次胆汁酸测试在接下来的一周回到 85 mol/L 时,我们进一步确信了这一点。
当我们得到这个结果时,我正在阅读一篇新发表的 2018 年 ICP 护理综述,该综述由杜克大学产科/GYN 部门母体胎儿医学部门的 Elizabeth Livingston 博士和她的同事发表。在这篇评论中, 利文斯顿和他的同事 写道:
考虑到 ICP 患者死产风险增加,通常建议在妊娠 37 周时进行引产,以平衡医源性早产风险和胎儿死亡风险。当胆汁酸水平达到 100 μmol/L 或更高时,死产的风险显著增加,在这些情况下,可考虑在更早的孕龄分娩,如 35 至 37 周;然而,这些决定应该通过仔细的患者咨询来个体化。
伊芙是杜克卫生系统的一名病人,所以我们会见了利文斯顿医生,讨论我们的选择。考虑到伊芙的良好表现,利文斯顿对 36 周的分娩感到满意。但如果她的水平越过了 100 mol/L 大关呢?
胆汁酸水平和死胎有什么关系?
利文斯顿及其同事的论文回顾了关于这种关系的最新证据,并总结了胆汁酸可能导致死产的主要假设。一种观点认为过量的胆汁酸会收缩胎盘中的血管。这可能是为什么 ICP 中的死产似乎是导致缺氧和死亡的急性事件的结果,而不是胎儿健康的慢性恶化的一个原因。如果是这样,这有助于解释为什么胎儿监测 Eve 每周进行两次——不能降低 ICP 中死产的风险(但仍被推荐)。
目前,高胆汁酸水平可能是死产风险增加的最佳诊断指标,但这仍然是一个有争议的问题。一个关键的证据来自一项在英国进行的对患有严重 ICP 的女性的前瞻性队列研究,该研究于 2014 年发表在期刊*上。在这项研究中,队列由多达 669 名患有重度 ICP** (定义为妊娠期间任何时间胆汁酸水平≥ 40 mol/L)的妇女组成,感兴趣的结局是死产。***
以下是来自重度 ICP 队列的一些值得注意的发现:
- 这些妇女中的大多数接受了 UDCA 治疗(72%),平均分娩时间为 37.5 周。因此,你可以说“主动管理”相当普遍,但肯定不是普遍的。
- 669 名妇女中有 10 名经历了死产,发生率为 1.5%。(在下图中用红色加号表示)
- 10 例死胎中有 6 例发生在 前 37 周。
- 死产似乎聚集在胆汁酸水平高于 100 mol/L 的女性中。
Source: Geenes, V. et al. (2014). Association of severe intrahepatic cholestasis of pregnancy with adverse pregnancy outcomes: a prospective population‐based case‐control study. Hepatology, 59(4), 1482–1491. Figure 4©. The estimated probability and 95% CIs of stillbirth in relation to the maternal serum bile acid level, based on simple logistic regression.
作者还观察了两组没有 ICP 的妇女的死产结果。重度 ICP 队列中死胎发生率为 1.5%,是非 ICP 对照组死胎发生率的 3 倍。
夏娃的轨迹
最终,伊芙的胆汁酸水平永远不会超过 100 摩尔/升。她的峰值是 85.6 mol/L,分娩前的最终检测结果是 38.4 mol/L
Plot code here.
我们的小痒来了
经过紧张的几个星期,安妮·格雷斯在 7 月 9 日,也就是夏娃的生日那天出生了。36 周零 1 天。我们感到无比幸运。如果你被诊断患有 ICP,现有的证据表明,你也有很大的机会获得良好的结果,特别是如果你的医生开了 UDCA,并将你的分娩时间安排在 36 周或 37 周(或者更早,如果考虑到你的情况有意义的话)。
Annie Grace
不幸的是,并不是每个人都这么幸运。在我们旅行的早期,我读了唐娜·贝纳维德斯的故事《T21》。她在 36 周时被诊断为 ICP,并计划在 38 周时引产。
我感到困惑和害怕,这是我第一次怀孕。我在网上阅读了更多关于妊娠胆汁淤积症的信息,并打印了一些信息与我丈夫讨论,因为我阅读的文章中的统计数据显示,ICP 导致婴儿流产的比例很小。在我的反应性(非压力测试)后的第二天——离被诱导只有两天——我们失去了儿子乔丹。
唐娜继续创立了 T2 ICP 护理中心,并帮助无数家庭理解这个可怕的诊断。现在,她告诉其他女性去止痒。
唐娜的医生不知道开 UDCA。虽然今天人们对 ICP 有了更好的理解,但仍经常会读到 ICP Care 的 发痒的妈妈们 脸书妇女团体的故事,这些妇女努力让她们的提供者检测 ICP 并认真对待她们的症状。
被授权接受测试。用这份博士讨论指南为你的预约做准备,并与你的提供者分享这些资源。
不要忽视痒。
[1] Eve 的第一次胆汁酸水平实际上为 11.5 mol/L,高于 Wood et al. (2018) 推荐的诊断 ICP 的临界值。她的结果被归类为“正常”,可能是因为杜克 MyChart 中 15 至 45 岁孕妇的参考范围是 3.7–14.5mol/l。
与 Simon Greiner 一起打破数据科学的神话
Cesar Viteri on www.unsplash.com
在她的第一个博客中,安妮塔·拉克霍迪亚问了一个问题:一个数据科学家整天都在做什么?这是非数据科学家最常问她的问题。想想她在聚会、黑客马拉松或博客中亲自遇到的数据科学家,很难给出一个答案。
因此,她今天与我,西蒙·格雷纳,一位有抱负的数据科学家和经验丰富的 IT 顾问交谈,做一些真正的神话打破。我们想要打破的关于数据科学家的神话是,他们仍然阅读书籍,书籍仍然是灵感的伟大来源!
安妮塔:数据科学似乎是一门瞬息万变的科学。你是如何跟上时代的?你去哪里获取信息和与同龄人交流想法/思想?
Simon :首先, Medium 是一个非常棒的平台,有非常有趣的文章,也不同于其他博客,因为你会觉得你在阅读真实的内幕信息/观点,而且非常真实。不是通常的高层次的东西,而是数据科学家做什么和他们真正面临的问题。
二、书籍书籍书籍!起初,这听起来可能有些奇怪和过时,但一些最好的算法是在 70 年代和 80 年代创建的。当时,数据科学家没有足够的计算能力来实现/允许他们发挥全部潜力。
第三,论文有助于跟上数据科学特定领域的最新进展。第四,像“世界人工智能峰会”这样的同事和会议是灵感的来源,也是交流思想的平台。
如果有时间,我也会参加聚会。此外,Kaggle 比赛也是我的一大爱好。和大学的同事一起。Kaggle 比赛占用了很多时间,但这是值得的,因为它非常有趣。这是我的朋友约书亚·戈尔纳关于“媒介”的总结的链接,我们来到了前 2% 。
安妮塔:你认为自己是数据科学家吗?
西蒙:等我拿到硕士学位后,我会成为一名数据科学家。但我认为自己更像是商业和技术数据科学之间的桥梁。今天,许多人自称为数据科学家,因为这很流行,但他们实际上并不从事数据科学工作。
安妮塔:典型的数据科学家是做什么的?
西蒙:数据科学家处理大量数据。在数据科学家开始研究数据之前,通常会有一个业务案例的假设。然后是经典的数据准备、清理和分析。然后应用机器学习将数据转化为商业案例。但这实际上是团队的努力。
在开发模型和分析数据的统计学家和收集所有输入来为模型提供信息的数据科学家之间,对基础设施进行基准测试,然后构建实际的机器学习算法来应用这些数据。
安妮塔:那么数据科学家和统计学家之间有什么区别呢?
西蒙:数据科学家清理数据,分析数据,建立模型。但实际上这些工作是分开的。传统的统计学家只做数据清理、准备和运行模型。他们是没有 IT 背景的数学家。
我认为自己更全面:首先是统计分析;然后检查数据的可用性;清理数据,构建算法,并亲自展示研究结果。为了能够完成 E2E 过程,我去攻读我的硕士学位。
你必须基本上知道算法应该传递什么,以便为它提供正确的数据来学习。对于这一点,我的经济学背景真的很有用。由于我的商业知识,我能够更快、甚至更好地理解商业问题。但是也有人比我更擅长编程和编码。对来自客户的非结构化数据可能产生的结果有一个愿景,是数据科学家的实际任务。为此,我的经济学背景非常有用。
安妮塔:是什么让你决定攻读数据科学硕士学位?是什么引发了这个决定?
西蒙:我是我的硕士班里唯一没有 IT 背景的人。我必须参加额外的入学考试,才能获准攻读硕士学位。一开始真的很难,因为你从一开始就要深入编程和编码。但是我的商业背景会在现实世界中帮助我。因为要正确解释数据,领域知识是必需的。
我一直热爱统计学,并对借助技术人类可以预测非常复杂的结果这一想法着迷。此外,我一直对心理学和人类为什么会这样做感兴趣——数据科学为你提供了分析工具集,并在完全不同的层面和更大的规模上进行分析。
最后,我订购了一本关于数据科学用例的书,第一本是基于过去 3 个美式足球赛季的数据预测超级碗冠军…从那时起,我就 100%投入了。两周后,福布斯写道,数据科学将是 21 世纪的工作,所以这是一个非常好的选择。
安妮塔:在你看来,要让一名数据科学家成功并为未来做好准备,还需要哪些技能?有兴趣的人可以从哪里入手?
西蒙:我认为即使有硕士学位,你也必须不断跟上时代,因为这是一个快速变化的环境。如果你没有读硕士,但你对统计学真的很感兴趣,相信人类现在还没有达到巅峰,在技术的帮助下,我们可以完成比我们想象的更多的事情,你可以通过阅读现实世界问题的数据科学解决方案,用一点点努力做大事。此外,网上有很多很棒的课程,这是一个很好的开始,如果你已经精通编程,你可以用很小的努力获得很多。
安妮塔:“传统统计学家”和“新数据科学家”之间有差距吗?还是数据科学家是现代统计学家?他们能一起工作吗?
西蒙:数据科学是一项团队工作。你总是需要两个世界。要有一个成功的数据科学项目,你需要:开发人员、领域专家和统计学家。现代数据科学家有一点点以上的东西。但是仅仅是为了让你看到真相和验证,你仍然需要每个领域的专家。作为一名数据科学家,你可以在短时间内取得很大成就,有时这足以让一个项目取得成功。有时候这已经足够专业了。这就是 DS 吸引许多公司的原因。但是当然,我不想暗示所有的数据科学家都“只是”全能,因为有太多的人拥有不同的技能。所以没有一个是一样的。你所不具备的技能将由 DS 项目团队的其他成员来补充。
除了上面提到的,你还需要那些软件架构师,他们为分析提供基础设施。没有它们,如果数据量和计算量越来越大,你会很快陷入困境。
安妮塔:你在科学领域的专长是什么?你为什么选择这个领域?
西蒙:我对数据挖掘和统计分析以及更高级的机器学习感兴趣。
安妮塔:你最喜欢哪种编程语言?你知道哪个?
西蒙:皮顿!!我也懂 R 和一点 Java。
安妮塔:现在数据科学正在快速发展。比方说,在 5 到 10 年后,数据科学家的未来技能是什么?
Simon :数据科学家的未来是自动化机器学习。清理数据,让机器完成剩下的工作(特征工程、训练、模型拟合)。但是仍然需要数据科学家来解释分析的结果。因此,在这个过程的开始和结束阶段,都需要数据科学家。
数据科学家不再构建特征,而只是准备数据。汽车特征工程是未来。
在我看来,我们必须开始说服没有伴随着人工智能成长起来的一代管理者,AI 是正确的,是未来。如果我们做不到这一点,不了解全局的高级管理人员往往会阻碍进步。
安妮塔:你如何向家人解释数据科学家的工作?
西蒙:我告诉他们我试图根据大量的数据来预测事情。或者,我创造了学习算法,可以越来越好地预测事物。但大多数时候,我妈妈只是告诉人们我用电脑做一些事情
安妮塔:西蒙,非常感谢你的这些见解。如果你想和西蒙联系,在这里找到他的 LinkedIn 个人资料。https://www.linkedin.com/in/simonjuliangreiner/
我想给你看另一个我对米歇尔·霍斯的采访。打破关于 SAS 社区的神话。可在此查阅:https://www . LinkedIn . com/pulse/myth-busting-SAS-communities-Anita-lakhotia/
打破神话的梦幻英超联赛:形式胜于赛程
数据科学教程
使用足球数据和机器学习来测试在预测不失球、进球和助攻方面,形式是否比固定比赛更重要
Form vs fixtures discussions on Reddit
超过 600 万人参加了梦幻超级联赛(FPL) 的比赛,试图组建最好的 11 名球员阵容,以获得英格兰超级联赛 38 周以来的最高分。每个球员的得分由他们在实际比赛中的表现决定,守门员和后卫在没有失球的情况下完成一场比赛可以获得 4 分,进球得分者根据他们的位置,每个进球或助攻可以获得 3 到 6 分。为了最大限度地提高球队的得分,经理们必须做出明智的决定,选择最有可能保持零失球或每周进球的球员。
经理们经常讨论的两个流行指标是球员的状态和即将到来的比赛难度。根据状态选择球员意味着更喜欢在最近的比赛中得分好或者保持零失球的球员。然而,考虑比赛难度也很重要,因为一名球员在对阵较弱的对手时得分,可能不会在对阵更强的球队时得分。
在决定这两个指标时,我注意到经理们经常在梦幻英超社区上称赞“形式胜于固定”,但几乎没有发现在预测不失球或进攻得分(即助攻或进球)方面比较这两个指标的分析。彼得·布雷克已经分析了固定难度的影响,但它只考虑了固定难度,而没有考虑球员的状态。因此,为了测试形式是否确实比夹具更重要,我使用了 2016 年以来的 FPL 数据来比较他们在预测 FPL 不失球和进攻点方面的贡献。
Sample screen of Fantasy Premier League
1.查找数据并定义形状和夹具
我能够通过 FPL 的 API 收集到瓦斯塔夫阿南德过去两个赛季的数据。在获得过去两个赛季(2016-17 和 2017-18)的数据后,我将球员的“状态”定义为他们前 6 周的平均表现,与 FPL 官方网站上的定义一致。比赛难度确定如下:前 2 名球队的比赛难度排名为 5,排名第 3 至第 6 的球队排名为 4,排名第 7 至第 12 的球队排名为 3,排名第 12 至第 20 的球队排名为 2。这并不完全是在官方 FPL 网站上定义的,该网站声称使用了“FPL 专家开发的复杂算法”,但看起来是足够接近的近似值。
Fixture Difficulty Ranking Chart
我将跳转到结果,但是所有用于分析的数据和代码都可以在这里获得,笔记本也嵌入在文章的底部。
2.估计夹具和模板对清洁板材的贡献
首先,我评估了夹具难度如何影响零失球的概率。在图 1 的左图中,我们可以看到对手的比赛难度降低了球队零失球的概率。大约 15%的球队在对阵比赛难度为 5 的球队时保持不失球(例如,上赛季的曼城和曼联),而大约 30%的球队在对阵比赛难度为 2 的球队时保持不失球(例如,上赛季的西布罗姆维奇或斯托克城)。我们也看到了主场优势,当球队在主场比赛时,不失球的可能性更大。
Figure 1. Fixture difficulty on clean sheet probability. Left panel uses the opponent’s fixture difficulty. Right panel uses the difference between the playing team and the opponent team’s fixture difficulty ranking such that higher difference suggests that a high caliber team is playing a low caliber team. Error bars are 95% confidence intervals
此外,我们还可以考虑两队之间的比赛难度差异。例如,曼城很难排在第 5 位,这表明他们是一支困难的球队,但如果他们与一支类似的球队比赛,两者之间的差异可以更好地预测不失球的可能性。差值的计算方法是比赛队的比赛难度减去对手的比赛难度,因此数值越高表示优势越大。正如所料,我们可以从图 1 的右图中看到,当一个更强的球队对阵一个更弱的球队时,不失球的可能性更大。
现在,为了测试球员的形式或固定难度是否可以预测不失球,我们可以训练一个以形式和固定为特征的机器学习模型。通过标准化特征,我们可以比较一个特征是否比另一个特征更有助于预测干净的纸张。我在个人玩家身上训练了一个逻辑回归模型,反复进行 K 倍交叉验证。通过这种方式,我们还可以看到不同数据折叠的系数有多稳定。
Figure 2. Form vs fixture on clean sheets. Left panel shows average coefficient weights of fixture difficulty difference and form in predicting clean sheets. Middle panel shows average accuracy in predicting clean sheets which was 58%. Right panel shows the confusion matrix in accurately predicting clean sheets (coded as 1). Error bars are 95% confidence intervals
在这个分析中,我只包括了在比赛中打了 60 分钟以上的后卫和守门员,因为他们是那些如果不失球就会获得零失球分数的人。图 2 的左图清楚地显示了两队之间的比赛难度差异是比球员状态更强的不失球预测因素。虽然该模型的准确性不高,只有 58%,但我们仍然可以得出这样的结论:当选择那些在不失球的情况下获得大部分分数的守门员和后卫时,经理们应该考虑的是固定而不是形式。
对于守门员和后卫来说,在预测不失球方面,比赛比球员的状态更重要
3.估计固定物和形态对攻击点的贡献
比赛中的进球也会受到比赛难度的影响。在球队层面,我们可以从图 3 左图中看到,与实力更强的球队比赛(即比赛难度为 5)比与更轻松的对手比赛(比赛难度为 2)进球略少。从图 3 的右图中,我们还可以推断出,当排名靠前的球队与排名垫底的球队比赛时,我们可以看到大约两个进球,但在大多数其他比赛中,我们可以看到大约一个进球。
Figure 3. Fixture difficulty on attacking expected goals. Left panel uses the opponent’s fixture difficulty. Right panel uses the difference between the playing team and the opponent team’s fixture difficulty ranking such that higher difference suggests that a high ranked team is playing a lower rank team. Error bars are 95% confidence intervals
然而在 FPL,球员不仅因为进球得分,还因为助攻得分。因此,我决定使用进攻得分作为因变量,进攻得分定义为比赛中的进球或助攻。类似于零失球分析,我只包括了在比赛中出场超过 60 分钟的中场和前锋,因为他们需要获得进攻分。现在,我们再次运行逻辑回归模型来预测球员状态和设备难度差异的攻击点。
Figure 4. Form vs fixture on attacking points. Left panel shows average coefficient weights on fixture difficulty difference and form. Middle panel shows average accuracy in predicting clean sheets which was 62%. Right panel shows the confusion matrix in accurately predicting attacking points (coded as True). Error bars are 95% confidence intervals
在这里,我们发现形式和比赛的差异都有助于球员进球或助攻的概率,但形式比比赛更重要(图 4 的左图)。预测准确度为 62%,并且它比获得攻击点(灵敏度;图 4 右侧面板中的混淆矩阵)。由此我们可以得出结论,主教练应该考虑中场和前锋的状态而不是赛程。
在预测进攻点时,球员的状态比中场和前锋的固定位置更重要。
我们学到了什么
在这里,我们验证了在 FPL 流行的神话,球员的状态比比赛更重要。事实证明,至少对防守者来说,固定比赛比形式更重要。他们更有可能在与较弱的对手比赛时不失球,不管他们的状态如何。相比之下,对于中场和前锋来说,这个神话被证明是真实的,那种形式确实比固定难度更能预测进攻点,尽管它仍然是预测进攻点的一个重要因素。
结论
在分析中,有几个重要的假设和警告需要记住。例如,夹具难度差异应该更多地被认为是一个顺序变量,其中差异之间的间距在现实中可能不是线性的。此外,为了简单起见,我使用了逻辑回归,但是泊松分布可能更适合这样的数据。此外,如果模型被置换,预测精度很差,可能接近噪声水平(见我以前关于置换模型的重要性的帖子)。这就留下了一种可能性,其他变量可能比状态和比赛更好地预测不失球和进攻得分,但这将是另一个问题。感谢您的阅读,并随时留下任何意见或建议。
原载于 2018 年 12 月 26 日【jinhyuncheong.com。
对用户生成内容进行知识提取和大数据分析的误区
探索和研究数据和内容为
了解不断发展的现代社会提供了一个很好的机会,包括感兴趣的话题、事件、人际关系和行为。
S 基于所谓大数据范式的多种数据科学方法已经分析了各种各样的来源,包括科学实验的定量测量、用户在网络和社交媒体上生成的内容、移动电话使用数据、物联网传感器和许多其他来源,目的是描述和/或预测行为、密度、问题以及人们感兴趣的话题或位置。
如果你把不同的来源合并在一起分析,影响会更大。
当来自多个不同来源的信息融合在一起时,分析的潜在影响甚至会更大。这也包括数据格式的多样性:在分析文本内容和数量信息时,可以提取更大的价值。当考虑多媒体内容时更是如此,尤其是因为照片、视频和音频在人与人之间的交流中扮演着越来越重要的角色。
机器学习和数据科学的重新构建增加了人们的期望。
T 大数据范式正在推动人们感知到
大规模存储的广泛可用性、强大的计算能力以及灵活易用的统计和机器学习工具。
这在中反映了(对个人和企业而言)期望能够始终快速地从现有数据中获得我们可能需要的任何种类的洞察力。
这意味着人们期望被执行的分析将总是被证明对他们的需求是相关和有用的。特别是,结果总是预期的:
*综合结果:
始终为提供一幅清晰完整的现实图景,包括所有相关方面、所有细节层次,从非常精细的结果到有弹性且可靠的综合结果。
*一致的结果:
在所有版本和维度上自洽,无论数据源、分析粒度和考虑的时间/空间是什么。
*凝聚的结果:
能够传达对现实的统一、客观和深刻的理解,这可以带来明智和适当的决策过程。
B ut,是这样吗?或者更好的说法是:这是我们从任何分析中期待的自动结果吗?
不幸的是,许多数据分析和数据科学的经验表明,情况恰恰相反。人们没有意识到,数据分析工具的广泛可用性和可访问性并不意味着你可以简单地使用它们并获得可靠的结果。
这是大数据、人工智能和机器学习民主化的挑战。
在大部分分析中,如果工作没有正确进行,没有考虑风险和偏差,没有正确应用统计数据,结果会受到许多关键方面的影响,以至于对任何目标都没有帮助。
仅使用 Python 从零开始的朴素贝叶斯——没有花哨的框架
对于 ML 初学者
从零开始展开朴素贝叶斯!Take-2🎬
所以在我之前的博文 中从头开始展开了朴素贝叶斯! 取-1🎬,我试图解码朴素贝叶斯(NB) ML 算法背后的火箭科学,在经历了它的算法见解后,你一定也意识到它是一个相当无痛的算法。在这篇博文中,我们将一步一步地完成 python 的实现(仅使用基本的 python ),并且很明显从头开始编写 NB 代码是多么容易并且 NB 在分类方面并不幼稚!
目标受众是谁?🗣 🗣 🗣 ML 初学者
因为我一直想为绝对的初学者解读 ML,而且据说如果你不能解释它,你可能没有理解它,所以这篇博客也是特别为 ML 初学者写的。
本教程的成果——NB 的实际 Pythonic 实现
正如我上面提到的,NB pythonic 实现的完整演示
定义路线图……🚵
里程碑# 1: 数据预处理功能
里程碑# 2: 实现 NaiveBayes 类——定义用于训练的函数&测试
里程碑# 3: 在训练数据集 上训练 NB 模型
里程碑# 4: 使用经过训练的 NB 模型 进行测试
里程碑# 5: 证明 NaiveBayes 类的代码是绝对通用的!
在我们开始用 python 编写朴素贝叶斯的代码之前,我假设您熟悉:
- Python 列表
- Numpy &只是一点点矢量化代码
- 字典
- 正则表达式
让我们从 Pythonic 实现开始吧!
定义数据预处理功能
让我们从实现朴素贝叶斯时需要的一些导入开始
达到里程碑# 1👍
实现 NaiveBayes 类定义函数用于训练&测试
:我们将为 NB 分类器编写一个完全通用的代码!不管训练数据集中有多少类,也不管给定了什么文本数据集,它仍然能够训练一个完全工作的模型。
NaiveBayes 的代码只是一个的小扩展—* ,但是我们只需要花费最多 10-15 分钟来掌握它!之后,你会对所有重要的概念有一个很好的理解。*
这段代码在做什么??
NaiveBayes 类中总共定义了四个函数:
*1\. **def** addToBow(self,example,dict_index)
2\. **def** train(self,dataset,labels)
3\. **def** getExampleProb(self,test_example)
4\. **def** test(self,test_set)*
代码分为两个主要功能,即训练和测试功能。一旦您理解了这两个函数中定义的语句,您就一定会知道代码实际上在做什么,以及其他两个函数被调用的顺序。
*1**.** Training function that trains NB Model : **def** train(self,dataset,labels)2\. Testing function that is used to predict class labels
for the given test examples :
**def** test(self,test_set)*
另外两个函数被定义来补充这两个主要函数
*1\. BoW function that supplements training function
It is called by the train function.
It simply splits the given example using space as a tokenizer
and adds every tokenized word to its corresponding BoW :
**def** addToBow(self,example,dict_index)2\. Probability function that supplements test function.
It is called by the test function.
It estimates probability of the given test example so that
it can be classified for a class label :
**def** getExampleProb(self,test_example)*
您可以在本 Jupyter 笔记本 中查看以上代码太
如果我们定义一个 NB 类,比使用传统的结构化编程方法更容易组织和重用代码。这就是定义 NB 类及其内部所有相关函数的原因。
我们不只是想写代码,而是想写漂亮、整洁、方便、可重用的代码。是的,没错——我们希望拥有一个优秀的数据科学家可能拥有的所有特征!
你猜怎么着?每当我们将要处理一个我们打算用 NB 来解决的文本分类问题时,我们将简单地实例化它的对象,并且通过使用相同的编程接口,我们将能够训练一个 NB 分类器。另外,作为面向对象编程的一般原则,我们只定义与该类中的某个类相关的函数,所以所有与 NB 类无关的函数都将被单独定义
里程碑# 2 实现 👍 👍
在训练数据集上训练 NB 模型
是的,就是这样!只需要四个函数,我们就可以在任何文本数据集和任何数量的类标签上训练我们的 NB 模型了!
Ready — Set — Go!
如果你很想知道训练数据实际上是什么样的……这是一个新闻组数据集,由 20 个主题的新闻组帖子组成。它有 20 个类别,但目前,我们将只在四个类别上训练我们的 NB 模型——[’ alt .无神论’,’ comp.graphics ‘,’ sci.med ‘,’ soc.religion.christian’],但代码对于所有 20 个类别的训练都非常有效。
Training Dataset
您可能想知道为什么“Training Labels”列是数字形式,而不是它们原来的字符串文本形式。只是每个字符串标签都被映射到其唯一的数字整数形式。即使你现在还不清楚这一点,只要考虑已经提供了一个数据集,并且它有数字形式的标签。简单!
因此,在我们开始训练 NB 模型之前,让我们加载这个数据集……
我们将从 sklearn ( python 的 ML 框架)加载一个数据集——但我们仍然从头开始编写 NB 代码!
让我们开始训练吧!
训练完成!!!
里程碑# 3 达成👍 👍 👍
使用经过训练的 NB 模型进行测试
既然我们已经训练了我们的 NB 模型,让我们开始测试吧!
加载测试集……
使用我们训练过的 NB 模型对上面加载的测试示例进行测试…
哇!相当不错的准确率~ 93% ✌️
看现在你意识到 NB 不是那么天真!
里程碑# 4 实现 👍 👍 👍👍
证明 NaiveBayes 类的代码是绝对通用的!
正如我在开头提到的,我们编写的代码是泛型的,所以让我们在不同的数据集上使用相同的代码,并使用不同的类标签来证明它的"泛型"!
另一个文本数据集由电影评论和他们的观点组成&看起来像下面这样:
Here is the link to this dataset from Kaggle
为此数据集训练一个 NB 模型并测试其准确性…
请注意,看看相同的 NaiveBayes 代码如何在不同的数据集上工作,并且具有相同的编程接口!
让我们在 Kaggle 测试集上测试,并上传我们在 kaggle 上的预测,看看我们的 NB 在 Kaggle 测试集上的表现如何!
kaggle 结果的屏幕截图——相当好的 80%的准确率👌
Kaggle Prediction Results
里程碑# 5 实现 👍 👍 👍👍👍
这就是这篇博文的全部内容,现在你都知道了!
即将发布的帖子将包括:
- 从头开始展开朴素贝叶斯!Take-3🎬使用 scikit-learn 实现朴素贝叶斯( Python 的机器学习框架)
在此之前,敬请关注📻 📻 📻
如果您有任何想法、意见或问题,欢迎在下面评论或联系📞跟我上 LinkedIn
朴素贝叶斯分类器
什么是量词?
分类器是一种机器学习模型,用于根据某些特征区分不同的对象。
朴素贝叶斯分类器的原理:
朴素贝叶斯分类器是一种用于分类任务的概率机器学习模型。分类器的关键是基于贝叶斯定理。
贝叶斯定理:
利用贝叶斯定理,我们可以求出 A 发生的概率,假设 B 已经发生。这里, B 是证据, A 是假设。这里的假设是预测器/特征是独立的。也就是说,一个特定特征的存在不会影响另一个特征。因此它被称为天真。
示例:
让我们举个例子来获得一些更好的直觉。考虑打高尔夫的问题。数据集表示如下。
鉴于当天的特点,我们对当天是否适合打高尔夫球进行分类。列代表这些功能,行代表各个条目。如果我们取数据集的第一行,我们可以观察到,如果天气多雨、温度高、湿度大且没有风,则不适合打高尔夫球。我们在这里做两个假设,一个如上所述,我们认为这些预测是独立的。也就是说,温度热,不一定意味着湿度高。这里做的另一个假设是所有的预测因素对结果有相同的影响。也就是说,刮风的那一天对决定是否打高尔夫球没有更大的重要性。
根据这个例子,贝叶斯定理可以改写为:
变量 y 是类变量(play golf),代表是否适合打高尔夫球,是否给定条件。变量 X 代表参数/特征。
X 给定为:
这里 x_1,x_2…x_n 代表特征,即它们可以映射到前景、温度、湿度和风力。通过替换 X 并用我们得到的链式法则展开,
现在,您可以通过查看数据集获得每个值,并将它们代入等式。对于数据集中的所有条目,分母不变,保持不变。因此,可以去掉分母,引入比例。
在我们的例子中,类变量( y )只有两个结果,是或否。可能存在分类是多元的情况。所以我们需要找到概率最大的类 y 。
使用上面的函数,我们可以得到类,给定预测。
朴素贝叶斯分类器的类型:
多项式朴素贝叶斯;
这主要用于文档分类问题,即文档是否属于体育、政治、技术等类别。分类器使用的特征/预测值是文档中出现的单词的频率。
伯努利朴素贝叶斯;
这类似于多项式朴素贝叶斯,但预测因子是布尔变量。我们用来预测类变量的参数只取值 yes 或 no,例如一个单词是否出现在文本中。
高斯朴素贝叶斯:
当预测值取连续值且不是离散值时,我们假设这些值是从高斯分布中采样的。
Gaussian Distribution(Normal Distribution)
由于数据集中值的显示方式发生了变化,条件概率的公式也发生了变化,
结论:
朴素贝叶斯算法主要用于情感分析、垃圾邮件过滤、推荐系统等。它们快速且易于实现,但是它们最大的缺点是要求预测器是独立的。在大多数实际情况下,预测器是相关的,这阻碍了分类器的性能。
朴素贝叶斯分类器:朴素贝叶斯的几何分析。第一部分
当类被线性和非线性真决策边界分开时,为朴素贝叶斯预测导出封闭形式的解…
维数灾难是所有分类问题的祸根。什么是维度的诅咒?随着特征(维度)数量的线性增长,分类所需的训练数据量也呈指数增长。如果分类是由单个特征确定的,我们需要该特征的一系列值的先验分类数据,因此我们可以预测新数据点的类别。对于具有 100 个可能值的特征 x ,所需的训练数据的数量级为 O(100)。但是,如果还需要第二个特征 y 来确定类别,并且 y 具有 50 个可能值,那么我们将需要 O(5000)阶的训练数据,即在对“ *x,y”*的可能值的网格上。因此,所需数据的度量是特征空间的体积,并且随着更多特征的添加,它呈指数增长。
但这总是这么糟糕吗?我们是否可以做一些简化的假设来减少所需的数据量,同时保留所有的特性?在上面的例子中,我们说我们需要 O(5000)阶的训练度量。但是朴素贝叶斯分类器只需要 O(150)阶的测量值——即只是线性增加,而不是指数增加!这太棒了,但是我们知道没有免费的午餐,朴素贝叶斯分类器应该做一些简化(朴素?)假设。这就是这篇文章的目的——检查天真在朴素贝叶斯分类器中的影响,该分类器允许它避开维数灾难。实际上,我们不希望代数分散我们对我们所追求的东西的欣赏,所以我们坚持二维 x,y 和两类 C_1 和 C _ 2 T21。
决定边界
决策边界是我们的二维特征空间中的一条曲线,它将两个类别C1和C2分开。在图 1 中, y-f(x) > 0 表示等级C1和 y -f(x) < 0 表示C2的区域。沿着决策边界 *y = f(x),*并且属于任一类的概率相等。任一类的等概率是获得决策边界的准则。
Figure 1. The decision boundary separates the two classes C_1 and C_2 in the feature space. For points on the decision boundary, the probability of belonging to either class is the same.
这篇文章的目的是分析非线性对决策边界的影响,以及由不平衡的班级规模引起的相关问题。这个职位的总体轮廓如下。
- 选择一个精确的函数形式 y = f(x) 作为真正的决策边界。
- 获得由朴素贝叶斯分类器预测的决策边界的封闭形式的解
- 分析班级规模对预测的影响
- 当一个类压倒另一个类时,获得渐近行为
- 当 f(x) 为线性和非线性时,重复 1 至 4。
帖子的内容有些学术性,因为对于真实数据,我们不知道真正的决策边界,必须处理数据噪声,并且不知道哪些特征实际上负责我们所寻求的分类等。但这里的要点是理解在理想化设置中天真假设的影响,以便我们能够更好地应用和解释真实数据的朴素贝叶斯分类器。
1.朴素贝叶斯分类
朴素贝叶斯分类基于关联条件概率和边际概率的贝叶斯规则。这在文献中有很好的描述,因此我们简单地写下具有 2 个特征 x,y 的 2 类(C1和C2)情况的方程。
(1)
对于任何新的测量值 x,y ,我们将根据等式 1 计算 P(C_1|x,y) 和 P(C_2|x,y) ,并选择具有较大值的类。因为分母是相同的,所以计算它们的比值更容易,所以我们不需要计算 P(x,y) 。
P(C_i) 是任何测量值落入 C_i 类的概率。作为 C_i 样本的相对丰度,它很容易从训练数据中计算出来。正是 P(x,y|C_i) 的计算充满了我们谈到的数据需求的挑战。为了做到这一点,我们需要估计每一类 C_i 中 x,y 的联合概率分布,这需要在 x,y 值的网格上的训练数据。这就是朴素贝叶斯的朴素部分缓解维数灾难的地方。
1.1 天真的假设
如果特征 x,y 是不相关的,给定类别 C_i ,那么联合概率分布将简单地是个体概率的乘积。即
(2)
如果我们做这个假设,那么我们只需要分别估计 P(x|C_i) 和 P(y|C_i) 。并且这只需要在范围 x 和范围 y 上的训练数据,而不是在 x,y 值的网格上。使用方程1中的方程 2 ,我们得到新的 x,y 测量值及其类别分配的类别概率的比率如下
(3)
虽然不相关特征的天真假设简化了事情,但它的有效性值得商榷。例如,如果 xy < 1 在一个类中,那么当 y 较小时,找到大的 x 值的概率较高,当 y 较大时,找到大的x值的概率较低。事实上,在这个类中找到测量值[x=0.9,y=1.1]的概率将是 1,而对于测量值[x=0.9,y=1.2]来说,它将是 0。显然, x 和 y 的概率分布通常不会相互独立,并且对独立性的天真假设会导致新数据的错误分类。
1.2 推导 P(x|C_i)和 P(y|C_i)
如果我们可以获得作为 x,y 的函数的 P(x|C_i) 和 P(y|C_i) ,那么我们可以得到作为 x,y 的函数的公式 3 中的比值。
Figure 2. Deriving the naive bayes probabilities, given a true decision boundary y = f(x). To keep the algebra simple, the function f(x) is taken to have a simple inverse x = f^-1(y). The fractional areas of the rectangular strips in a class are indicative of the probability.
考虑图 2,其中真实判定边界*y = f(x)*将特征空间分成两类。为了避免代数问题,我们进一步假设 f 是显式可逆的,因此我们可以写成 *x = f^-1(y).*一个类的先验概率与它的整体大小成正比——在这种情况下是面积。
(4)
为了计算 *P(x|C_i),*假设我们将 x 轴离散化,并在 x 周围选取一个宽度为δx 的小矩形条,如图 2 所示。类别 C_i 中的条带面积除以类别面积 A_i 将是概率 *P (x|C_i)。*同样对于概率 P (y|C_i)
(5)
x1越长,*P(y | C1)*的概率就越高。同样,更大的 y_2 意味着更高的概率用于 P(x|C_2) 等等。一旦我们理解了这一点,剩下的就是简单的几何和代数了。将等式 4 和 5 与等式 3 中的朴素贝叶斯分类相结合,我们得到:
(6)
上述比率等于 1 的 x,y 的轨迹是朴素贝叶斯分类器预测的决策边界。
(7)
Figure 3. For a point on a linear decision boundary, a geometric proof that: (a) x_1 y_1 = x_2 y_2 in case of balanced classes and (b) x_1 y_1 ≠ x_2 y_2 when classes are unbalanced.
为了直观理解等式 7 ,考虑图 3 中具有相等/不相等班级规模的线性决策边界的情况。如图 3.1 所示,当班级规模相等时,决策边界将是对角线,对于对角线上的每一点,矩形 ABOC 的面积等于矩形 ODEF 的面积。但那不过是关于对角线上任意一点的 x_1 y_1 和 x_2 y_2 相等的陈述。因此,根据等式 7 ,由朴素贝叶斯预测的决策边界将匹配对角线——真正的决策边界。然而,在图 3.2 中,类的大小是不一样的,并且这两个矩形的面积不必对分离边界上的每一点都相等。因此,即使在线性情况下,当类别大小不同时,我们也不能期望朴素贝叶斯产生真实的决策边界。我们将在下一节通过分析再次验证这一点。
这就完成了我们推导朴素贝叶斯预测的决策边界的一般方法。在这篇文章的剩余部分,我们为真正的决策边界选择不同的函数形式 f(x) ,并与我们从朴素贝叶斯得到的进行对比。
2.线性决策边界
我们从图 4 中的线性情况开始,其中直线 y = qx/a 在矩形特征空间中将两个类分开。当 q 等于 b 时,我们得到平衡类。
Figure 4. Evaluating x_1 , y_1 , x_2 and y_2 for a linear decision boundary y=qx/a
类面积a1,a2和长度x1,x2,y1,和y2直接从几何图形中得出。在等式 7 中使用它们并进行简化,我们得到朴素贝叶斯预测的决策边界是一条双曲线。
(8)
有了预测分离边界的闭合解,我们可以看看当 A_1 类的规模保持增加而 A_2 保持不变时,类规模的影响及其渐近性。这是通过增加 b 同时保持 a 和 q 不变来实现的。
2.1 均衡类。A_1 = A_2
当 b = q 时,类别大小将相等,并且分离边界减少到:
(9)
这是真正的决策界限。也就是说,当类由直线分隔并且大小相同时,朴素贝叶斯分类不会有错误。这是对图 3 中相同几何论证的严格证明。
2.2 不平衡的阶层。增加 a1 和常数 a2
图 5 显示了当 b 增加时的预测决策边界(即,我们拖动特征空间的顶部边界),从而增加 A_1,同时保持 A_2 不变。在所有情况下,对于较小的 x ,朴素贝叶斯预测开始偏向于类别 C_2 (预测的边界在真实边界之上——意味着将真实 C_1 测量分类为 C_2 的偏好),并且随着 x 的增加,切换到偏好类别 C_1 。然而,有趣的是,它们都在真实决策边界的同一点上切换。
2.2.1 切换点
切换点 (x,y*)* 是真实决策边界和预测决策边界的交点。利用方程 8 中的 y = qx/a 并简化得到:
(10)
Figure 5. Linear decision boundary. Naive bayes classifier predicts a hyperbola as the class boundary. Only when the classes are balanced does the prediction match the prescribed boundary y = x
该点的坐标独立于 *b,*不同曲线上的唯一变量。因此它们都与真实边界相交于同一点。
2.2.2 渐近边界:a1→∞
随着 b 增加,比率 A_1/A_2 增加。当 b 趋于无穷大时,我们得到渐近预测边界 y_s(x)。
(11)
3.非线性决策边界
我们现在考虑图 6 中的情况,其中抛物线判决边界 y=x^2 将两个类别分开。
Figure 6. Evaluating x_1 , y_1 , x_2 and y_2 for a nonlinear decision boundary y=x²
再次,x_1,y_1,x_2 和 y_2 作为 x,y 的函数的表达式直接来自几何。应用等式 7 并进行简化,我们得到 y 作为预测决策边界的 x 的四阶函数
(12)
3.1 增加 A_2 和常数 A_1 的影响
Figure 7. Nonlinear decision boundary. The naive bayes prediction does not match the true boundary even in the case of balanced classes.
图 7 显示了当类大小 A_2 变化而保持 A_1 不变时,预测的决策边界与真实边界的对比。这可以简单地通过拖动特征空间的右边界来完成,即改变为。
这里有一些与线性情况相反的快速观察。
- 即使在平衡类的情况下(A_1/A_2 = 1 即 a = 4q/3),预测的边界也与真实的边界不匹配。这不同于我们前面看到的线性情况。使用等式 12 中的 q = 3a/4,我们得到:
(13)
- 对于小的 x ,预测倾向于 C_1 而不是 C_2 (在所有情况下,预测边界在真实边界以下开始),但是对于较大的 x 则切换到偏好 C_2 。
- 当 a2 较小时,预测边界在 x 范围内大部分在真实边界之下。对于较大的 A_2,预测边界变得更陡,越来越早地与真实边界相交。因此,与线性情况不同,它们与真实边界相交于不同的点。
- 即使它们在不同的点上与真实边界相交,有趣的是它们都在一个点上相交。那当然可以证明。不同曲线上的唯一变量是和。所以我们要做的就是找到两个预测边界的交点,并证明它独立于 a 。考虑 a_ 1 和 a_2 的两个边界。使用方程 12 在它们的交点处并简化我们得到,
产生独立于 a 的交点,从而证明观察结果。
(14)
3.2 渐近边界:a2→∞
随着 a 增加,面积 A_2 增加。当 a 趋于无穷大时,我们得到渐近预测边界 y_s(x)。
(15)
4.后续步骤
当真实的决策边界在具有两个特征的两个类之间已知时,我们已经导出了由朴素贝叶斯分类器预测的决策边界的封闭形式的解决方案。我们挑选了简单的线性和非线性边界,并评估了当一个类别压倒另一个类别时,类别大小及其渐近性的影响。接下来的步骤如下。
- 在总规模保持不变的情况下,获得作为班级规模比率的函数的混淆矩阵。例如,当我们在图 4 中将 q 从 0 变到 1 时,比率 A_1/A_2 从∞变到 0,而 A_1 + A_2 保持恒定在 ab 。在这种情况下,通过混淆矩阵测量的朴素贝叶斯分类器的性能是令人感兴趣的。
- 模拟在 SciKit 中实现的高斯朴素贝叶斯算法,以评估高斯近似概率引入的额外误差。
- 评估朴素贝叶斯预测相对于其他竞争分类器,如逻辑回归,神经网络等…
由于这篇文章太长了,所以我将在这个系列的下一篇文章中讨论以上内容。
原载于 2018 年 8 月 6 日xplordat.com。
朴素贝叶斯分类器:第 2 部分。表征和评估
封闭形式的解决方案是甜蜜的。不需要绞手/挥手来表达观点。给定假设,模型预测是精确的,因此我们可以很容易地评估假设的影响。并且,我们获得了评估应用于这些具有精确解的相同极限情况的替代(例如,数值)方法的方法。我们当然是在讨论之前的文章,其中我们获得了朴素贝叶斯预测决策边界的闭合形式解,而真正的决策边界是已知的线性或非线性形式。由于已经有了很好的基础,我们将认真地开始我们在前一篇文章中概述的“下一步”。如果需要的话,请回顾一下,因为我的文章往往有 2000 多字,几乎没有重复的空间。这个帖子实际上有点长,但主要是因为图表和模拟结果,所以应该不会太差。
1.混乱矩阵
对于我们的 2 类(C1和“而不是 C1或C2)和 2 特征([ x,y】【T9])情况,一个很好的表征任何分类器性能的方法是计算下面图 1 所示的混淆矩阵。真实边界和预测边界相交,并将特征空间分为四个区域。这些区域中的数据点已经被正确地(即真*)或不正确地(即假)识别为属于(即正)或不属于C1(即负)。例如,右上角区域被标记为假阴性,因为预测假阳性将其归类为’而非**C1 '。其他区域的命名也是如此。*
Figure 1. Evaluating the confusion matrix in the assignment of a class C_1 to a data point. The areas of intersection FP and FN are the key variables determining the quality of the classifier
相交面积 FP 和 FN 以及由此计算的任何度量产生对分类器有效性的重要洞察。例如,用于C1的高度特定的分类器永远不会将真正的“not C1”数据点放置在“C1”区域中。同样,如果分类器对C1高度敏感,它将永远不会将真正的C1放置在“*not C1”*区域中。分类器的整体准确度当然是正确预测的分数。所有这些导致了通常使用的以下定义。
(1)
每个分类练习都会为这些指标中的每一个产生一个值。运行一系列这样的练习并从每次运行中收集这些度量,我们可以表征分类器对于该特征空间中的数据有多好。高灵敏度(小 FN 区)&高特异性(小 FP 区)自然是分类器的理想特征。
2.相交的区域
随着初步问题的解决,我们准备量化朴素贝叶斯分类器对于我们在上一篇文章中考虑的线性和非线性边界的表现。如下图 2 所示, k 的每个值在 A_1 和 A_2 之间分割特征空间,而 A_1 + A_2 保持不变。预测边界自然是这个参数 k 的函数,并且每个这样的预测边界产生一个值用于 FN 和 FP 我们感兴趣的相交区域。
Figure 2. As the point P moves, the feature space gets split between the classes. FP and FN are the areas of interest that meet at the intersection point of the true and predicted boundaries. (A) Point P moves vertically from 0 through b. The true and predicted boundaries always intersect at (a/2, k/2) (B) Point P moves horizontally from 0 through a . The intersection point x* for the true and predicted boundaries is a root of the quadratic given in Equation 6.
在非线性抛物线边界的情况下,我们用 y = kx^2 而不是 y = x^2 来工作,就像我们在之前的文章中那样。导出更新的决策边界是前面详述的相同几何过程的直接应用。为了便于参考,我们简单地写下线性和抛物线情况下的结果。 y_p 代表下面的预测边界,我们用 y_t 代表真实边界。
(2)
(3)
Figure 3. Varying k is a means to change the relative class sizes while holding the total size constant. In all the cases above a = b = 1.0, so A_1 + A_2 = 1.0. When one of the class sizes goes to zero i.e. A_1/A_2 → ∞ for the linear case, and A_1/A_2 → 0 for the parabolic case we expect better predictions in either case as indicated by vanishing FP and FN. (A) For linear case, naive bayes prediction is exact, i.e FP = FN = 0 for A_1/A_2 = 1 (B) For the nonlinear case has FN = 0, but FP is at maximum when A_1/A_2 = 2.
图 3 说明了 FP 和 FN 之间的动态相互作用和权衡,因为 k 在任一情况下都是变化的。交点 FP 和 FN 的面积就是我们所追求的,因为我们有 y_p 和 y_t 的显式方程,所以可以直接积分。
2.1 线性情况下的 FP 和 FN
在线性情况下,我们知道真实边界和预测边界相交于点 (a/2,k/2) 。
(4)
从方程 2 中代入 y_t = kx/a 和 y_p ,积分简化得到:
(5)
抛物线情况下的 2.2 FP 和 FN
这里的交点是方程 y_p=k x^2 的解,其中 y_p 由方程 3 给出。不幸的是,没有显式的解决方案,但整个事情简化为一个二次,需要解决一个有意义的根。
(6)
参照图 2B,面积 FP 和 FN 的计算公式如下
(7)
被积函数和极限是确切已知的,因此可以使用如下代码片段对积分进行精确的数值计算:
import numpy as np from scipy.integrate
import quaddef integrand (x, k):
yt = min (k * x * x, b)
temp = 1.0/k**0.5 + (1.0/k**0.5) * (3*a/(2*(b/k)**0.5) — 1.0) * (b/(k*x*x) — 1.0)
yp = min ((a/temp)**2, b)
return abs(yt — yp)def findIntersectionX (k):
c2 = 4 * (b*k)**0.5 - 3*a*k
c1 = -2 * a * (b*k)**0.5
c0 = b * (3 * a - 2 * (b/k)**0.5) x1 = (-c1 + (c1**2 - 4 * c2 * c0)**0.5) / (2*c2)
x2 = (-c1 - (c1**2 - 4 * c2 * c0)**0.5) / (2*c2) if ( (x1 >= xmin) and (x1 <= xmax) ):
return x1
elif ( (x2 >= xmin) and (x2 <= xmax) ):
return x2
else:
print ("ERROR!") # should not happen!a = 1.0
b = 1.0
k = 10.0
xmin = 0.0
xmax = (b/k)**0.5xIntersection = findIntersectionX (k)
fp_area = quad(integrand, xmin, xIntersection, args=(k),epsabs=1.0e-8)
fn_area = quad(integrand, xIntersection, xmax, args=(k), epsabs=1.0e-8)
3.特征
有了获取任何 k 的 FP 和 FN 的方法,我们就可以对分类器的灵敏度、特异性等进行评估了……我们在第 1 节中讨论过了。 TP 和 TN 直接从几何图形中得出。
(8)
图 4 示出了作为 A_1/A_2 的函数的相交面积及其获得的度量。 FP 和 FN 面积是整体面积的一小部分,精度极好。毫无疑问,这两种情况下的度量都很好,即使线性情况似乎有优势。由于导出解的设计,这些结果中的a1/a2的范围在两种情况下都有所限制(抛物线情况下 0 → 2 ,线性情况下 1 → ∞ )。
Figure 4. In all the cases above a = b = 1.0, so A_1 + A_2 = 1.0. (A) Both the intersection areas FP, FN go to zero for the linear case when A_1/A_2 = 1 and when A_1/A_2 → ∞ as expected. Only FN is zero in the parabolic case when A_1/A_2 = 2 confirming our assessment from Figure 3. (B) The naive bayes classifier is more sensitive than specific in either case.
在图 4B 中观察到的敏感性、特异性和准确性通过一个点并不是偶然的。当灵敏度和特异性相等时,
其中最后一个表达式是精度的定义。
4.用 SciKit 进行数值模拟
SciKit 拥有优秀的算法实现,包括用于分类的朴素贝叶斯。高斯朴素贝叶斯从训练数据中逼近高斯分布,以估计新数据点 x,y 的 P(x|C_1) 和 P(y|C_1) 。当这个新的数据点 x,y 远离决策边界时,这是好的,但是否则显然会有一些误差。这种误差对分类的影响是什么,这是我们试图通过一些数值模拟来探索的问题。此外,我们应用了两种竞争分类技术,即逻辑回归和MLP 分类器,同样在 SciKit 中实现。对这些技术中的假设进行分析是另一篇文章的主题。在这里我们简单地使用它们——sci kit 使尝试变得非常容易。
生成训练和测试数据轻而易举,因为我们知道确切的决策界限。
from sklearn.naive_bayes import GaussianNB
from sklearn.linear_model import LogisticRegression
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import *
import numpy as nptrain = np.array(np.loadtxt(open('./train.csv', "rb"), delimiter=",",skiprows=1))
trainX = train[:,0:2] # x, y locations
trainY = train[:,2] # Class label 1 (i.e. C1) or 0 (i.e. Not C1)
test = np.array(np.loadtxt(open('./test.csv', "rb"), delimiter=",",skiprows=1))
testX = test[:,0:2]
testY = test[:,2]gnb = GaussianNB()
lr = LogisticRegression()
mlp = MLPClassifier(hidden_layer_sizes=(4,))stats = []
for id, clf, name in [(0,lr, 'lr'),(1,gnb, 'gnb'),(2,mlp, 'mlp')]:
clf.fit(trainX, trainY)
predictions = clf.predict (testX) sk_tn, sk_fp, sk_fn, sk_tp = confusion_matrix (testY, predictions).ravel()
sk_accuracy = accuracy_score(testY, predictions)
sk_precision = precision_score(testY, predictions)
sk_sensitivity = recall_score(testY, predictions)
sk_specificity = sk_tn / (sk_tn + sk_fp)
我们对三个分类器的大部分参数使用默认值。默认情况下,MLPClassifier 使用 100 个神经元和一个隐藏层。一个隐藏层很好,但是考虑到我们只有 2 个输入神经元(一个用于 x ,另一个用于 y ),使用 100 个隐藏神经元是大材小用。我们选了 4 个,我们可能会做得更少。在训练模型之后,我们得到混淆矩阵。当然,所有其他的指标都可以通过计算得出。
4.1 sci kit 中高斯近似的误差
Figure 5. In all the cases above a = b = 1.0 so A_1 + A_2 = 1.0. MLP uses a single hidden layer with 4 neurons. (A) & ( C ) The mispredictions from gaussian naive bayes overlap and extend beyond the analytic results (B) Both logistic regression and MLP have essentially no mispredictions in the linear case (D) Logistic regression (in red) does worse than MLP for the nonlinear case.
图 5A 和 5C 显示了 SciKit 的高斯朴素贝叶斯模拟对于线性情况的结果,其中 k = 0.6 (即 A_1/A_2 = 2.33 )。红色的预测失误区域比用分析朴素贝叶斯预测获得的预测失误区域更大。众所周知,逻辑回归是一种线性分类器,因此预计图 5B 中的预测接近完美。在所有情况下,MLP 当然是最好的,即使在一个隐藏层中只有 4 个神经元。但是我们将在后面看到,这种快乐的情景不适用于具有更严重非线性的边界。
4.2 分类指标
图 6 比较了三个分类器在多个仿真中的性能,其中比率 A_1/A_2 在保持 A_1 + A_2 为 1 的同时发生变化。这非常类似于图 4,其中我们比较了分析性朴素贝叶斯预测和事实。一些简单的观察如下。
Figure 6. In all the cases above a = b = 1.0, so A_1 + A_2 = 1.0. All three classifiers can be considered quite good even while MLP does beat out the rest in general.
- 朴素贝叶斯具有最大的误差区域( FP 和 FN )。即使在线性情况下,逻辑回归的 FP 也随着a1/a2增加。鉴于逻辑回归是一个线性分类器,这将需要一些进一步的分析,为什么。
- 就错误表征的总面积(即 FP + FN )而言,我们看到 MLP、逻辑回归和朴素贝叶斯的优秀程度依次递减。
- 根据需求,人们可以选择在该标准方面表现优异的分类器。例如,MLP 在这一点上非常突出。
5.神经网络更擅长分类吗?
从第 3 节和第 4 节的结果来看,神经网络似乎更善于对具有线性或非线性分离边界的数据进行分类。但是这样的概括可能是错误的。当我们知道真相时,就像这里的情况一样,我们可以对隐藏层的数量、内部神经元的数量、激活函数等进行调整,以获得与真相更好的匹配。但这一结果可能不具有超出这一具体实践范围的普遍有效性。为了在实践中看到这一点,让我们考虑正弦波作为分离边界的情况,并尝试用同样的三种方案进行分类。
(9)
随着 k 的增加,特征空间被分割成越来越多的不连续区域,分类变得更加困难。使用 SciKit 获得分类结果的机制与第 4 节中的相同,因此我们直接查看结果。
图 7A 绘制了当不连续区域的数量通过改变 k 而变化时,相交区域的大小。很明显,当我们使用单一隐藏层时,MLP 对任何 k 都没有好处。MLP。 FP 和 FP 加起来大约占总面积的 20-30 %,所以有很多数据会被错误分类。这反映在图 7B 中较小的特异性值中。对于 6 个隐藏层,MLP 对于所有的 k 值具有小得多的误差区域,从而具有更好的特异性,如图 7B 所示。
Figure 7. The upshot from the results here is that MLP can do better but careful experimentation is required before generalizing the applicability of the model. When k = 4, in Equation 9, there would be 4 non-contiguous zones for the two classes. (A) MLP with a single hidden layer yields no improvement over naive bayes or logistic regression for any k. Six hidden layers with ten neurons each yields better classification but there could be other combinations that can do equally well or better. (B) Much better specificity with 6 hidden layers for all values of k. (C — E): Increasing the number of layers is not guaranteed to improve performance for MLP. It starts to get better as we add more hidden layers but worsens after 6 layers.
图 7C-7E 显示了当 k = 4 时所有情况下获得的误差区域。误差区域随着隐藏层的增加而减少,产生 6 层的最佳分类。但不幸的是,7 层的效果更差,有点出乎意料…所谓的炼金术在起作用。显然,这里还有更多的事情需要更深入的分析。
6.后续步骤
至此,我们结束了这篇有点长但简单明了的帖子。对于线性和抛物线分离边界,我们已经表明,这里测试的所有三个分类器都很好,MLP 挤掉了逻辑回归和朴素贝叶斯。MLP 的出色表现很有趣,但目前还不清楚它究竟如何做得更好。对于更严重的非线性,MLP 可能工作得很好,但是可能需要仔细的实验来概括所获得的结果。尽管如此,这里的结果是足够令人鼓舞的,我们希望在未来的帖子中尝试使用神经网络来解决文本分类问题。
原载于 2018 年 8 月 25 日【xplordat.com】。
机器学习中的朴素贝叶斯
贝叶斯定理在概率论和统计学中有许多用途。你有极小的可能从未听说过这个定理。原来这个定理已经找到了进入机器学习世界的方法,形成了一个高度修饰的算法。在本文中,我们将学习所有关于朴素贝叶斯算法的知识,以及它在机器学习中用于不同目的的变体。
你可能已经猜到了,这需要我们从概率的角度来看待事物。就像在机器学习中,我们有属性、反应变量和预测或分类。使用该算法,我们将处理数据集中变量的概率分布,并在给定新实例的属性的情况下,预测响应变量属于特定值的概率。让我们从回顾贝叶斯定理开始。
贝叶斯定理
这使我们能够根据与前一事件相关的任何事件的先验知识来检查事件的概率。因此,举例来说,如果我们知道房子周围的设施,与不知道房子的位置相比,我们可以更好地评估房子价格高的可能性。贝叶斯定理就是这么做的。
Image taken from Wikipedia
上面的等式给出了贝叶斯定理的基本表示。这里 A 和 B 是两个事件,
P(A|B):假设 B 已经发生,事件 A 发生的条件概率。这也被称为后验概率。
P(A)和 P(B):A 和 B 互不考虑的概率。
P(B|A):假设 A 已经发生,事件 B 发生的条件概率。
现在,让我们看看这如何很好地适应机器学习的目的。
以一个简单的机器学习问题为例,我们需要从一组给定的属性(在训练示例中)中学习我们的模型,然后形成一个假设或与一个响应变量的关系。然后,给定新实例的属性,我们使用这个关系来预测响应。使用贝叶斯定理,在给定一组新属性的情况下,可以构建一个预测响应变量属于某类的概率的学习器。
再次考虑前面的等式。现在,假设 A 是响应变量,B 是输入属性。所以根据等式,我们有
P(A|B) :给定输入属性,响应变量属于特定值的条件概率。这也被称为后验概率。
P(A) : 响应变量的先验概率。
P(B):训练数据或证据的概率。
P(B|A):这就是训练数据的似然性。
因此,上述等式可以改写为
Image taken from Wikipedia
让我们来看一个问题,其中属性的数量等于 n,响应是一个布尔值,即它可以是两个类中的一个。此外,属性是分类的(我们的例子中有两个类别)。现在,为了训练分类器,我们需要为实例和响应空间中的所有值计算 P(B|A)。 这意味着,我们将需要计算 2(2^n -1),用于学习这个模型的参数。在大多数实际的学习领域,这显然是不现实的。例如,如果有 30 个布尔属性,那么我们将需要估计超过 30 亿个参数。*
朴素贝叶斯算法
为了实用,需要降低上述贝叶斯分类器的复杂性。 朴素贝叶斯算法通过对训练数据集做出条件独立性的假设来做到这一点。这大大降低了上述问题的复杂性,只有 2n。
条件独立性假设说明,给定随机变量 X,Y,Z,我们说 X 是条件独立于 Y 给定 Z 的,当且仅当支配 X 的概率分布独立于 Y 给定 Z 的值
换句话说,给定 Z ,X 和 Y 是有条件独立的当且仅当,给定 Z 发生的知识,关于 X 是否发生的知识不提供关于 Y 发生的可能性的信息,并且关于 Y 是否发生的知识不提供关于 X 发生的可能性的信息。
这种假设使得贝叶斯算法显得幼稚。
给定 n 个不同的属性值,可能性现在可以写成
这里,X 代表属性或特征,Y 是响应变量。现在,P(X|Y)等于给定 Y 的每个属性 X 的概率分布的乘积。
最大化后验概率
我们感兴趣的是找到后验概率或 P(Y|X)。现在,对于 Y 的多个值,我们需要计算每个值的表达式。
给定一个新的实例 Xnew,我们需要计算 Y 取任何给定值的概率,给定 Xnew 的观察属性值,给定从训练数据估计的分布 P(Y)和 P(X|Y)。
那么,我们如何预测响应变量的类别,基于我们得到的 P(Y|X)的不同值。我们简单地取这些值中最可能的或最大的。因此,这个过程也被称为最大化后验概率。
最大化可能性
如果我们假设响应变量是均匀分布的 ,也就是说它同样有可能得到任何响应,那么我们可以进一步简化算法。在这种假设下,先验或 P(Y)变成一个常数值,即 1/响应的类别。
由于,先验和证据现在都独立于响应变量,这些可以从方程中去掉。因此,最大化后验概率就归结为最大化似然问题。
特征分布
如上所述,我们需要从训练集中估计响应变量的分布,或者假设均匀分布。类似地, 为了估计特征分布的参数,必须假设分布或从训练集 生成特征的非参数模型。这种假设被称为事件模型。这些假设的变化产生了用于不同目的的不同算法。对于连续分布,高斯朴素贝叶斯是首选算法。 为离散特征,多项式和伯努利分布为流行。对这些变化的详细讨论超出了本文的范围。
朴素贝叶斯分类器在复杂的情况下工作得非常好,尽管有简化的假设和天真。 这些分类器的优点在于,它们需要少量的训练数据来估计分类所需的参数。 这是文本分类的算法选择。 这是朴素贝叶斯分类器背后的基本思想,你需要开始实验算法。
如果你喜欢这篇文章,一定要为下面的这篇文章鼓掌以示支持,如果你有任何问题,请留言,我会尽力回答。
为了更加了解机器学习的世界,跟我来。这是最好的办法,等我多写点这样的文章就知道了。
也可以在 Twitter , 直接发邮件给我 或者 在 linkedin 上找我。我很乐意收到你的来信。
乡亲们,祝你们有美好的一天:)
朴素贝叶斯推文极性预测马来西亚第 14 届大选
马来西亚最具标志性选举的初级数据科学任务
当我第一次在 Udacity 上了解朴素贝叶斯分类器时,我想到了这个迷你项目。NB 上有很多在线教程,但我不知道他们为什么主要做垃圾邮件分类(比如,10 个博客中有 9 个都在写 NB 垃圾邮件过滤)。
那时,我的祖国马来西亚正在迎来她历史上最重要的选举,所以我想出了这个主意,说——我们为什么不在选举前做一个推特分析,使用 NB 作为极性预测器?
由于其简单性,NB 在文本分类和情感分析中是众所周知的算法,但是对于 NLP 上下文中的 NB 来说,最大的缺点是它只对单词的出现感兴趣,而忽略了单词之间的相关性(因此得名“naive”)。因此,通过使用 NB,我们只能从“词汇袋”的角度来看待我们的上下文,考虑发生超过相关性。
NB 在做什么?
简单来说,我想把 NB 解释为一个“向前-向后”的过程。
- “向前”的过程——给定这句话在 C1 类中,一个单词 w1 出现的次数是多少?
- “逆向”过程— 给定一个单词 w1 包含在句子中,这个句子在 C1 类中的概率是多少?
Naive-Bayes tutorial on Udacity’s course.
这就是为什么出现在 NB 中很重要——某个类中某个单词出现的次数越多,它在我们进行预测时的影响就越大。
Udacity 的本课程中的 NB 教程给出了关于 NB 的简短、简明、清晰的解释。
收集推文
首先,我们需要准备我们的原材料——在这种情况下,我们自己收集 tweets。所以我有一个用于抓取推文的 twitter_scraper.py 脚本。
我使用 tweepy 进行抓取部分,所以需要一个 API 密匙进行授权和设置。在这个项目中,我只是收集了与我最亲爱的总理(哦,对不起,现在是前总理)相关的推文,所以极性分析主要针对我们亲爱的前总理。
你还需要一个听众来倾听收集到的推文流,并决定你想要如何处理它们。在我的例子中,我获取 tweet 并将其传递给 TextBlob 进行极性和主观性评分,并将其写入一个. csv 文件。
最后,把你的听众连接到信息流上,让它为你抓取推文!一旦你收集了足够多的推文,简单地停止这个过程(我只收集了 300 条推文,哈哈)。
经验教训:推文主要是马来语,极性得分只是做得不好。所以最后我决定自己在训练和测试数据上手动标注每条推文的类别——这就是为什么我只收集了 300 条推文。
构建 NB 模型
在进入测试部分之前,我构建了一些东西:
- 字典——在抓取的推文中出现的所有单词。我只是使用 TextBlob 来标记我的每条 tweet,并收集它们。
- 频率表——统计每个单词在给定类别中的出现次数,w i 。用每个类别中出现的次数除以单词 w i 的总出现次数,我们得到先验概率——给定一个单词,它在某个类别中出现的概率。或者,P(C|w i )。
我们在数据集中进行了预计算,我们知道:
P(C=0) = 182/300 = 0.6067
P(C=1) = 118/300 = 0.3933
对于 tweet 中的每个单词,从表中检索其频率,并在列表中附加每个类别中每个单词的先验概率:
取所有先验概率的乘积(numpy 在这里通过 prod() 方法做得很好)。你得到两个概率, p0 和 p1 。
将 pk 乘以 P(C=k)就得到后验概率。比较它们,较高的概率决定了推文的类别。
对每条推文重复这个过程,你就可以使用 NB 分类器预测推文的极性了!
调查的结果
Results for my test set
我隔离了 20 条推文作为测试集,NB 分类器达到了 90%的准确率 (18/20 正确)。
让我们看看分类器犯了哪两条推文的错误。
tgok video tu aku tak kesian dkat tun m TP kesian dkat Najib。kesian nampak desperito Sgt nak jatuhkan tun m .
看着视频,我不同情敦·马哈蒂尔,但我同情纳吉布,看到他如此不顾一切地想扳倒敦·马哈蒂尔。
对于理解上下文的我们来说,这条推文很明显属于 0 类,即反纳吉布类,但我们的分类器却相反。
让我们看看哪些词决定了这条推文在分类器中的类别:
视频+ tu + aku + tak + tun + m +纳吉+ nak + tun + m
显然,术语“Tun M”应该组合在一起而不是分开,因为分开它可能传达不同的结果。此外,tweet 中决定的最重要的词应该是“kesian”(怜悯),我们在决定词中没有看到这个词。
对于我们失败的另一条推文:
国民阵线
对我们来说,这应该属于支持纳吉布的阶层,因为纳吉布的政党国民阵线的标签。然而,在我们的实现中,hashtags 是被清理的,所以在这里要学习的另一课是选择哪些内容要清理,哪些不要清理。
单词“lahanat”(诅咒的一个粗鲁的单词)是我们的分类器将此归类为反纳吉类的主要原因。然而,我将得出结论,这条推文很难分类,因为我们只有两个有意义的词,每个代表一个类别,我们没有任何额外的信息。
结论
总的来说,我应该说 NB 分类器仍然做得相当好,前提是我们只有 300 条人工注释的训练推文。
当然,还有很大的改进空间——首先是增加训练集的大小,但是我现在想不出这个领域有任何其他方法可以自动化注释过程。
令人震惊的是,在选举前,大多数推文都是反纳吉布的。毫无疑问,我们一直认为马来社群仍然会支持纳吉和国阵,但事实证明,推特上的马来网民告诉我们一个不同的故事。
我要说的是,这是我工作和学习的一个有趣而简单的迷你项目,它与我和我的祖国非常相关。此外,写这篇文章有助于澄清我所学到的 NB 的概念,并迫使我用简单的语言来表达它们,就像费曼技巧中建议的那样。所以,让我们期待更多的到来!
对代码感兴趣?通过我的 GitHub 回购结账。
在 Numpy 中使用矩阵点积/具有交互代码的基变化的简单分类
GIF from this website
昨天我研究了标量投影和点积,现在我希望进一步研究矩阵点积/基的变化,再次使用 sklearn 乳腺癌数据集进行简单分类。
请注意,这篇帖子是为了我对线性代数更深入的理解。
矩阵点积的简单/快速复习
Image from this website
因此,上面的图像捕捉到了矩阵点积的数学运算,然而它没有覆盖点积的直觉,这是非常强大的。更多关于点产品背后的直觉的阅读,请访问我以前的博客。
基础变更
Image from this website
在二维情况下,我们的大多数坐标系都是在[1,0]和[0,1]的基矢中。然而,并不总是这样,我们可以用一个简单的基变换来转换矢量的参考点。在数据领域,我将此理解为属性的组合。
分类虚假数据集
假设我们有如上所示的数据聚类,有多种方法来执行分类,但我将只使用两个矢量和矩阵点积来执行分类。现在,我们可以看到,当我们有一个向量[1,0]来捕获每个数据有多少分量轴 y 时(在数据域中,这可以是任何属性,如心跳或血压等),我们可以使用向量[0,1]来捕获每个数据点如何包含轴 x,这也可以是任何属性。
如上所述,我们可以简单地取每个数据点的结果矩阵的最大自变量。具有更多[1,0]的数据点的最大参数为 0,而另一个数据点的最大参数为 1。(反之亦然,我没有检查,但逻辑保持不变。)
当我们绘制散点图时,使用捕获的 max 参数作为颜色,我们可以看到它已经被很好地分类了。
天真地对乳腺癌数据集进行分类
现在让我们来看一个真实世界的数据使用案例,上面是在获取与乳腺癌结果高度相关的 2 个属性时生成的散点图。(分别是“最差凹点”、“最差周长”,相关矩阵如下所示。)
Target is the outcome
现在,当我们采用完全相同的方法,用一个分类向量来捕捉一个数据点有多少关于最差凹点的信息,用另一个分类向量来捕捉最差周长的信息。以最大值为参数,我们得到如下结果。
之所以创建这个图表,是因为我们制作的边界线如下图所示。
我们可以观察我们选择的两个粉色分类向量。
围绕 1 对乳腺癌数据集进行分类
解决这一问题并获得更好结果的一种方法(尽管不完美)是使用单个矢量点,执行标量投影,并设置一个阈值来制作边界线。
这不是最好的解决方案,但却是更好的解决方案。
在乳腺癌数据集分类上做了大约 2 个工作
第二种方法是简单地改变基向量,正如上面看到的,当我们相对于 y 轴翻转所有的数据点时,我们可以得到类似上面的结果。换句话说,我们将基向量改为[-1,0]和[1,0]。x 轴现在被求反。(使用下面的代码。)
现在,我们可以简单地采用与第一步完全相同的方法。
如上所述,通过取两个向量[0,0.5]和[1,0]的点积,并取最大自变量,我们可以得到更好的结果。
互动码
要访问这篇文章的代码,请点击这里。
遗言
这么多这些强大的东西被隐藏在机器学习这个术语之外,用高级 API 工作很有趣。但是他们没有给你洞察力。
如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。
与此同时,请在我的 twitter 这里关注我,并访问我的网站或我的 Youtube 频道了解更多内容。我还实现了广残网,请点击这里查看博文 pos t。
参考
- 如何乘矩阵?(2018).Mathsisfun.com。检索于 2018 年 7 月 5 日,来自https://www.mathsisfun.com/algebra/matrix-multiplying.html
- sk learn . datasets . load _ breast _ cancer-sci kit-learn 0 . 19 . 1 文档。(2018).Scikit-learn.org。检索于 2018 年 7 月 5 日,来自http://sci kit-learn . org/stable/modules/generated/sk learn . datasets . load _ breast _ cancer . html # sk learn . datasets . load _ breast _ cancer
- 标题?,C. (2018)。从 Numpy 数组创建 Pandas DataFrame:如何指定索引列和列标题?。堆栈溢出。2018 年 7 月 5 日检索,来自https://stack overflow . com/questions/20763012/creating-a-pandas-data frame-from-a-numpy-array-how-do-I-specify-the-index-column
- 控制图形美学-seaborn 0 . 8 . 1 文档。(2018).Seaborn.pydata.org。检索于 2018 年 7 月 5 日,来自 https://seaborn.pydata.org/tutorial/aesthetics.html
- 绘制对角线相关矩阵——seaborn 0 . 8 . 1 文档。(2018).Seaborn.pydata.org。检索于 2018 年 7 月 5 日,来自https://seaborn . pydata . org/examples/many _ pairwise _ correlations . html
- matplotlib?,H. (2018)。如何改变用 matplotlib 绘制的图形的大小?。堆栈溢出。检索于 2018 年 7 月 5 日,来自https://stack overflow . com/questions/332289/how-do-you-change-the-size-of-figures-drawn-with-matplotlib
- 熊猫。data frame . plot . scatter—pandas 0 . 23 . 1 文档。(2018).Pandas.pydata.org。检索于 2018 年 7 月 5 日,来自https://pandas . py data . org/pandas-docs/stable/generated/pandas。DataFrame.plot.scatter.html
- 法,一.(2018)。使用 pandas plot 方法设置图形大小时不一致。堆栈溢出。检索于 2018 年 7 月 5 日,来自https://stack overflow . com/questions/42215252/consistency-when-setting-figure-size-using-pandas-plot-method
- 可视化-pandas 0 . 23 . 1 文档。(2018).Pandas.pydata.org。检索于 2018 年 7 月 5 日,来自https://pandas . pydata . org/pandas-docs/stable/visualization . html
- 可能吗?,P. (2018)。Python 使用 lambda 应用 pd。DataFrame 代替 for 嵌套循环可能吗?。堆栈溢出。2018 年 7 月 5 日检索,来自https://stack overflow . com/questions/19178762/python-using-lambda-to-apply-PD-data frame-instead-for-nested-loop-is-possible
- 使用标量投影和交互式编码的朴素分类。(2018).走向数据科学。检索于 2018 年 7 月 5 日,来自https://towards data science . com/naive-class ification-using-scalar-projection-with-interactive-code-298279 AFB 11 f
- mplot3d 示例代码:scatter 3d _ demo . py—Matplotlib 2 . 0 . 0 文档。(2018).Matplotlib.org。检索于 2018 年 7 月 5 日,来自https://matplotlib . org/2 . 0 . 0/examples/mplot 3d/scatter 3d _ demo . html
- 调色板?],H. (2018)。如何使用连续值给散点图着色?].堆栈溢出。2018 年 7 月 5 日检索,来自https://stack overflow . com/questions/39735147/how-to-color-matplotlib-scatter plot-using-a-continuous-value-seaborn-color
- numpy.dot()。(2018).www.tutorialspoint.com。检索于 2018 年 7 月 5 日,来自https://www.tutorialspoint.com/numpy/numpy_dot.htm
- git add,c. (2018)。git 添加、提交和推送命令合二为一?。堆栈溢出。2018 年 7 月 5 日检索,来自https://stack overflow . com/questions/19595067/git-add-commit-and-push-commands-in-one
- 标记— Matplotlib 2.2.2 文档。(2018).Matplotlib.org。检索于 2018 年 7 月 5 日,来自https://matplotlib.org/api/markers_api.html
- 绘制随机生成的分类数据集-sci kit-learn 0 . 19 . 1 文档。(2018).Scikit-learn.org。2018 年 7 月 5 日检索,来自http://sci kit-learn . org/stable/auto _ examples/datasets/plot _ random _ dataset . html
- 基的变化-HMC 微积分教程。(2018).Math.hmc.edu。检索于 2018 年 7 月 5 日,来自 https://www.math.hmc.edu/calculus/tutorials/changebasis/
使用具有交互式代码的标量投影的朴素分类
GIF from this website
今天,我想用线性代数中的一个简单概念来进行非常简单的分类。
请注意,这篇帖子是在对线性代数有更深入了解的同时,给我自己的。
点积
Image from this website
这个网站做得非常好,详细描述了什么是点积。如上所述,我把它理解为向量之间每个分量的乘积的总和,相对于它们的方向。因此,如果向量彼此垂直(正交)。乘法是零,数学上的理解应该是余弦法则,但我简单的理解为不同的方向。
标量/矢量投影
Video from calculuscoaches
现在,如果点积测量的是每个矢量分量的大小相乘值的总和。我们可以用这个值除以我们想要投影的向量的长度。这个词可以叫做标量投影,我知道我在解释这个东西时做得很糟糕,所以这是另一个视频。
Video from george soilis
对生成数据的分类
现在让我们把它带到现场,如上所示,让我们想象我们有两个数据点。第一个在左上角,第二个在右下角。现在让我们插入一个新的向量(显示为数据点)到平面中。
现在我们可以观察到两件事情,1)在平面的中心有一个新的数据点,2)左上角的斑点改变了颜色。我们接下来要做的事情非常简单。我们将使用我们拥有的每个数据点对中间的黄色点执行标量投影,根据得到的标量,我们将把数据分成两组。
如上所示,我们设置的阈值是 2.5
有了清晰分离的数据点,我们可以看到,即使“仔细”选择数据点,我们也可以达到很高的精度。但是让我们看看更多的东西,让我们看看我们在哪里划定了界限。
黄点 →选择的分类向量
黑点 →坐标(0,0)的基向量
如上所述,我们可以看到通过给定平面的线性线切割,现在让我们看看当我们设置阈值为 0 时的结果。
当我们将阈值设置为零时,我们可以观察到类似的模式。
真实数据分类
现在让我们使用皮马印第安人糖尿病数据库的数据,当我们绘制属性之间的相关矩阵时。我们可以观察如上所述创建的矩阵。我们将使用两个最高的属性,即葡萄糖和身体质量指数。
当绘制在 2D 平面上时,我们可以观察到类似上面的东西。现在让我们插入分类向量。
同样,我们可以观察到其中一个斑点的颜色变化以及插入的黄点。
最后,对我们的标量阈值进行较小的调整,我们可以得到如上所示的结果。我们已经知道,对每个数据点进行分类是一项非常可怕的工作。
互动码
要获取这篇文章的代码,请点击这里。
最后的话
直到现在,我从未真正体会到点积的力量和全部潜力。
如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。
同时,在我的 twitter 这里关注我,并访问我的网站,或我的 Youtube 频道了解更多内容。我还实现了广残网,请点击这里查看博文 pos t。
参考
- 笔记本,P. (2018)。Python & Matplotlib:在 Jupyter Notebook 中进行 3D 绘图交互。堆栈溢出。检索于 2018 年 7 月 4 日,来自https://stack overflow . com/questions/38364435/python-matplotlib-make-3d-plot-interactive-in-jupyter-notebook
- mplot3d 教程— Matplotlib 2.0.2 文档。(2018).Matplotlib.org。检索于 2018 年 7 月 4 日,来自https://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html
- matplotlib,p. (2018 年)。使用 matplotlib 为不同的分类级别绘制不同的颜色。堆栈溢出。检索于 2018 年 7 月 4 日,来自https://stack overflow . com/questions/26139423/plot-different-color-for-different-category-levels-using-matplotlib
- dataframe,S. (2018)。在熊猫数据框架中选择列。堆栈溢出。检索于 2018 年 7 月 4 日,来自https://stack overflow . com/questions/11285613/selecting-columns-in-a-pandas-data frame
- matplotlib?,H. (2018)。如何改变用 matplotlib 绘制的图形的大小?。堆栈溢出。检索于 2018 年 7 月 4 日,来自https://stack overflow . com/questions/332289/how-do-you-change-the-size-of-figures-drawn-with-matplotlib
- 绘制对角线相关矩阵——seaborn 0 . 8 . 1 文档。(2018).Seaborn.pydata.org。检索于 2018 年 7 月 4 日,来自https://seaborn . pydata . org/examples/many _ pairwise _ correlations . html
- sk learn . datasets . make _ blobs-sci kit-learn 0 . 19 . 1 文档。(2018).Scikit-learn.org。2018 年 7 月 4 日检索,来自http://sci kit-learn . org/stable/modules/generated/sk learn . datasets . make _ blobs . html # sk learn . datasets . make _ blobs
- [已关闭],H. (2018)。如何用 Python 在一个地块上画一个网格?。堆栈溢出。检索于 2018 年 7 月 4 日,来自https://stack overflow . com/questions/8209568/how-do-I-draw-a-grid-on-a-plot-in-python
- NumPy . expand _ dims—NumPy 1.14 版手册。(2018).Docs.scipy.org。2018 年 7 月 4 日检索,来自https://docs . scipy . org/doc/numpy/reference/generated/numpy . expand _ dims . html
- NumPy . insert—NumPy 1.14 版手册。(2018).Docs.scipy.org。检索于 2018 年 7 月 4 日,来自https://docs . scipy . org/doc/numpy/reference/generated/numpy . insert . html
- Numpy?,H. (2018)。如何在 Numpy 中得到向量的大小?。堆栈溢出。检索于 2018 年 7 月 4 日,来自https://stack overflow . com/questions/9171158/how-do-you-get-the-magnitude-of-a-vector-in-numpy
- NumPy . mesh grid—NumPy 1.14 版手册。(2018).Docs.scipy.org。检索于 2018 年 7 月 4 日,来自https://docs . scipy . org/doc/numpy/reference/generated/numpy . mesh grid . html
- Python?,W. (2018)。Python 中 meshgrid 的用途是什么?。堆栈溢出。检索于 2018 年 7 月 4 日,来自https://stack overflow . com/questions/36013063/what-of-purpose-of-mesh grid-in-python
- 皮马印第安人糖尿病数据库。(2018).Kaggle.com。检索于 2018 年 7 月 4 日,来自https://www.kaggle.com/uciml/pima-indians-diabetes-database
- calculuscoaches.com:理解标量投影的概念。(2018).YouTube。检索于 2018 年 7 月 4 日,来自https://www.youtube.com/watch?v=ziPGBFRSijk
- 向量微积分:理解点积-更好的解释。(2018).Betterexplained.com。检索于 2018 年 7 月 4 日,来自https://better explained . com/articles/vector-calculus-understanding-the-dot-product/
- 9 投影。(2018).YouTube。2018 年 7 月 4 日检索,来自https://www.youtube.com/watch?v=0bS5_k86id8&list = plznyisit 9am 7 aclo abca 1 stjz 41 ffwam&index = 9
从多国名字中的字符序列推断性别
Gender Inference from Character Sequences in Multinational First Names using Naïve Bayes and PyTorch Char-RNN
考虑到“约翰”和“辛迪”这两个名字,大多数人会立刻认为约翰是男性名字,而辛迪是女性名字。是这样吗主要是因为我们看到了太多男嫖客和女嫖客的例子,以至于我们的大脑在特定的名字和相应的性别之间建立了潜在的联系?大概吧。
但是名字本身的某些组成部分(它的拼写/字母组合)也在很大程度上决定了它的性别。想想“安迪”和“安迪”这两个名字。他们在发音上是一样的(/ˇn . di/),但是大多数人在看到拼写时会把“安迪”归类为男性,而“安迪”归类为女性。名字的后缀可以表明名字的性别;然而,规则并不是一成不变的。例如,以 -yn 结尾的名字似乎主要是女性,尽管事实上以 -n 结尾的名字往往是男性;而以 -ch 结尾的名字通常是男性,即使以 -h 结尾的名字往往是女性【1】。不仅仅是后缀,还有更多的字符模式对应着特定的性别分类——这个任务并不简单。
当你考虑到来自世界各地的所有名字的空间时,名字的性别分类变得越来越困难——我到目前为止给出的例子都是从一个标准的美国人的角度来看的。现在让我们来考虑两个印度名字(我几乎没有接触过这种文化):当我看到“Priyanka”和“Srikanth”这两个名字时,我立刻认为 Priyanka 是女性,Srikanth 是男性。这是为什么呢?我们的大脑是如何提取编码在组成一个名字的字符序列中的揭示性别的信息的?
谁在乎呢。
在市场营销、社会科学以及学术界和工业界的许多其他应用中,需要对未知个体的性别进行准确预测。也许一个人的性别最明显、最能说明问题的标志是他们的名字。在通过名字对性别进行分类方面,大多数先前的工作涉及使用已知姓名的大型语料库来给出已知姓名的概率预测。这篇文章试图通过研究名字的方方面面来探索未知名字的空间,特别关注名字中的字符序列,这些方面包含了重要的性别信息。这也是将 ML/DL 应用于实际问题的一次练习。
这个性别分类问题类似于自然语言理解中的一大类问题,但有着本质的不同。对于“猫”和“狗”这两个词,几乎所有人都会把猫归为雌性,把狗归为雄性。
source: https://goo.gl/YZPEjm
这里的核心区别是,当我们阅读“狗”这个词时,我们的大脑将字符序列“d-o-g”翻译成抽象实体的高维表示,即是我们对狗的理解。我们大脑中这种高维表征的一些特征组合,与我们对男性的抽象表征相比,与女性的抽象表征更密切相关;包含性别揭示信息的不是字符序列本身(至少在大部分情况下)。**
当你把性别分类问题从名字抽象到所有的单词时,这个问题就变得更加有趣了。从语言学上来说,许多语言都是用语法性别的概念来构建的,其中语言中的名词类别在形式上与一组离散的性别相关联。在这种语言中,一个单词中的某些字符序列几乎可以确定该单词的语法性别。学习这些字符序列——无论是显式的还是隐式的——是学习语言的固有部分。此外,对这种字符模式的理解可以帮助理解未见过的单词。出于这些原因,研究嵌入字符序列中的信息似乎是语言学和 NLU 的一个有趣且不可或缺的话题,这超出了本文的范围。
方法学
该项目的所有代码可在GitHub://Ellis brown/name 2 gender获得。
在 GitHub 上创建一个帐户,为 name2gender 开发做出贡献。
github.com](https://github.com/ellisbrown/name2gender/)
作为该主题的初始方法,我探索了一种普通的机器学习技术,使用已知与姓名的相关性别高度相关的姓名的硬编码特征(如前面提到的后缀)。这种快速而肮脏的实现实际上能够以最少的工作获得相当好的结果。
这种方法中使用的特性直接取自 NLTK 书籍:
以-a、-e 和-i 结尾的名字很可能是女性,而以-k、-o、-r、-s 和-t 结尾的名字很可能是男性……以-yn 结尾的名字似乎主要是女性,尽管以-n 结尾的名字往往是男性;以-ch 结尾的名字通常是男性,尽管以-h 结尾的名字往往是女性。【1】
Naïve-Bayes features of first name
这些特性被插入到 NLTK naive Bayes 分类器中,以便于训练和测试。
结果
我用 70/30 的训练-测试分割(大约 95k 训练名称,大约 40.6k 测试名称)来训练这个模型。测试精度大约在 85% 左右,对于这个任务来说可以说是相当不错了。
代码使用示例可在naive _ Bayes/demo . ipynb获得。
夏尔-RNN
当然,一个名字中有很多很多的字符模式可能包含性别暗示——尤其是当考虑到我们的全球(世界)名字空间时;当我们有深度学习的时候,试图硬编码每一个可能的模式似乎是荒谬的。在这种情况下,我使用 PyTorch 探索了一种字符级递归神经网络方法,该方法试图学习各种揭示性别的序列,而不必明确指定它们。
张量表示
这里的第一步是弄清楚如何将一个名字表示为一个张量。因为我们的目标是找出组成名字的字母序列中的所有细微差别,所以我们希望分解名字,逐个字符地看。为了表示每个字符,我们创建一个大小为<1 x N_LETTERS>
的一键向量(一个一键向量除了在当前字母的索引处填充 1 之外都填充 0,例如"**c**" = <0 0 **1** 0 0 ... 0>
)。
Name/Tensor conversion
另一种方法可能是通过字符在字母表"**c**" = 3
中的位置来存储字符的值;然而,这可能导致模型学习我们不希望的字符值中的一些模式(例如,它可能学习到“c”与“a”比与“x”更相似,因为它们在字母顺序上更接近,而实际上没有相似性差异)。
模型定义
然后,我们定义网络模块本身的结构:
source: https://goo.gl/BB7h2A
按照 PyTorch name nationality 分类示例的指导,我们创建了一个简单的网络,其中 2 个线性 层在输入和隐藏状态上操作,一个 LogSoftmax 层在输出上操作。我用 128 个隐藏单位【4】。
这是一个非常简单的网络定义,可以通过添加更多的线性图层或更好地塑造网络来进行改进。
RNN Module definition
结果
我再次用 70/30 的训练测试分割法分割数据集(约 95k 个训练名称,约 40.6k 个测试名称)。我能达到的最好的测试精度大约是 75.4%精度。我没有花太多时间调整超参数以获得更好的结果。
数据集— 名称 2 性别/数据/
我扩展了 NLTK 的姓名语料库,增加了更多代表各种文化的数据集,形成了一个大数据集(约 135 万个实例),包含按性别分类的名字,可以在我的存储库中找到。请参见data/dataset . ipynb了解更多关于我如何将它整合在一起的信息。*注意:*我没有花太多的时间来检查和整理这个数据集,所以它可能并不令人惊讶或特别干净(如果有人关心或有时间,我将非常感谢任何公关!).
改进/清理该数据集可能是最初最有效的改进。此外,使用只包含来自单一文化特性的名称的资料集,在预测该文化特性中的名称方面可能会好得多。**
放弃
值得承认的是,有许多名字,比如我自己的名字(埃利斯),在两性中几乎一样常见。与世界上出现的频率相反,包含离散标签的数据集更容易遇到,因此我只考虑了这些数据集给出的名称的二进制分类。一个更可靠的方法是结合人群中出现的频率,给出一个更有概率的性别预测。刘的“性别-姓名关联分数”方法可能是一个好方法【3】。性别不明确的名字的存在也限制了性别分类系统所能达到的最好的真实世界的准确性。
此外,在我们的社会中,越来越多的运动开始认可传统的二元男性和女性性别。由于这些努力仍处于起步阶段,包含这些扩大的性别分类的数据很少(如果有的话),我没有试图将它们纳入这一分析。
我也只考虑用拉丁字母写的名字。对于这篇文章来说,抽象成完全语言不可知的分类是一个非常艰巨的任务。
未来的工作
正如我上面提到的,改进数据集绝对是改进的最佳起点。
对发现名字分类有用的人来说,将这个名字应用到名字的变体的性别分类将是非常有用的。正如刘所说:
昵称、缩写、混乱的名字和用户名经常包含不小的性别暗示。确定提取和使用这些线索来更准确地推断性别的策略是未来工作的一个有希望的方向。”
也有可能精心设计测试方案来更好地代表真实世界的用例。在我的分析中,我认为每个名字出现的可能性都是一样的。一个更好的真实世界数据集可能包括某个名字在世界上出现频率的某种表示。例如,“约翰”的频率比“埃利斯”高得多这种变化会影响测试结果的计算方式,以及整个系统。理想情况下,我们的数据集中应该包含大多数常见的名字。
Name Frequency scheme
对于这样的名字,我们可以简单地查找我们的数据存储中有哪些名字的性别。我们的预测系统将只适用于不常见的名称集。为了测试这个系统设置,我们可以按照频率等级对名字进行排序,并保留 30%最不常用的名字。
参考
- ****伯德,s .,克莱因,e .和洛珀,e .“6 . 1 . 1 性别鉴定”用 Python 进行自然语言处理:用自然语言工具包分析文本,O’Reilly,2009,【www.nltk.org/book/ch06.html. ****
- “语法性别。”维基百科,维基媒体基金会,2017 年 12 月 21 日,en.wikipedia.org/wiki/Grammatical_gender。
- 刘,w .和露丝,D 名字里有什么?在 Twitter 中使用名字作为性别推断的特征" AAAI 春季研讨会系列 (2013),2017 年 12 月 21 日https://www . aaai . org/OCS/index . PHP/SSS/SSS 13/paper/view/5744/5908。
- 用字符级 RNN 对名字进行分类用字符级 RNN 对姓名进行分类,PyTorch Docs,2017,http://py torch . org/tutorials/intermediate/char _ rnn _ classification _ tutorial . html。**
命名实体识别对自然语言处理中的信息抽取有什么帮助?
Source: https://hackernoon.com/named-entity-recognition-applications-and-use-cases-c2ef0904e9fe
在阅读这个故事和比较几个著名的图书馆之后,你可以学习如何得到位置和组织。
在自然语言处理中,命名实体识别是提取相关信息的重要方法。对于特定领域的实体,我们必须花费大量的时间进行标注,以便能够识别这些实体。对于一般实体,如名称、位置和组织,我们可以使用预先训练的库,如斯坦福 NER、spaCy 和 NLTK NE_Chunk 来处理它。
使用以下两个脚本进行测试:
- 从维基百科中截取了斯坦福大学的部分描述
article = "The university was founded in 1885 by Leland and Jane Stanford in memory of \
their only child, Leland Stanford Jr., who had died of typhoid fever at age 15 the previous \
year. Stanford was a former Governor of California and U.S. Senator; he made his fortune as a railroad tycoon. \
The school admitted its first students on October 1, 1891,[2][3] as a coeducational and non-denominational institution."
- 自建语句检查提取位置实体的行为
article2 = "New York, New York , NY N.Y. new york"
Source : https://nlp.stanford.edu/software/CRF-NER.shtml
斯坦福 NER
斯坦福 NER 是用 Java 实现的。幸运的是,我们可以使用 python 接口来实现我们所需要的。
步骤 1:环境设置
- 安装 NLTK 库(使用 3.2.5)
pip install nltk==3.2.5
- 下载斯坦福 NER 图书馆
去 https://nlp.stanford.edu/software/CRF-NER.html下载最新版本或者这里下载(版本:3.9.1)
解压缩下载的 zip 文件,并获得“stanford-ner-3.9.1.jar”(或“stanford-ner.jar”)和分类器文件夹
放到一个特定的目录中(我使用 ner_dir 进行演示)
步骤 2:导入库
import nltkprint('NTLK Version: %s' % nltk.__version__)from nltk.tag import StanfordNERTaggerstanford_ner_tagger = StanfordNERTagger(
ner_dir + 'classifiers/english.all.3class.distsim.crf.ser.gz',
ner_dir + 'stanford-ner-3.9.1.jar'
)
第三步:第一次测试
results = stanford_ner_tagger.tag(article.split())print('Original Sentence: %s' % (article))
for result in results:
tag_value = result[0]
tag_type = result[1]
if tag_type != 'O':
print('Type: %s, Value: %s' % (tag_type, tag_value))
结果:
Original Sentence: The university was founded in 1885 by Leland and Jane Stanford in memory of their only child, Leland Stanford Jr., who had died of typhoid fever at age 15 the previous year. Stanford was a former Governor of California and U.S. Senator; he made his fortune as a railroad tycoon. The school admitted its first students on October 1, 1891,[2][3] as a coeducational and non-denominational institution.Type: PERSON, Value: Leland
Type: PERSON, Value: Jane
Type: PERSON, Value: Stanford
Type: PERSON, Value: Leland
Type: PERSON, Value: Stanford
Type: PERSON, Value: Jr.,
Type: ORGANIZATION, Value: Stanford
Type: LOCATION, Value: California
Type: LOCATION, Value: U.S.
第四步:第二次测试
results = stanford_ner_tagger.tag(article2.split())print('Original Sentence: %s' % (article2))
for result in results:
tag_value = result[0]
tag_type = result[1]
if tag_type != 'O':
print('Type: %s, Value: %s' % (tag_type, tag_value))
结果:
Original Sentence: New York, New York , NY N.Y. new york
Type: LOCATION, Value: New
Type: LOCATION, Value: York
Type: LOCATION, Value: NY
Type: LOCATION, Value: N.Y.
- “纽约”无法标记为位置,因为“,”
- 第二个“纽约”可以被标记。
- “纽约”分别标记为“新”和“纽约”。我们需要自己合并它。
- “纽约”不能被标记为位置,因为它是小写字母。
Source: https://spacy.io/
宽大的
第二个图书馆是空间。这是一个非常强大的图书馆,有一个很大的社区。它还支持 GPU 和深度学习实现。
步骤 1:环境设置
安装空间(2.0.11)
pip install spacy==2.0.11
步骤 2:导入库
spacy_nlp = spacy.load('en')
第三步:第一次测试
document = spacy_nlp(article)print('Original Sentence: %s' % (article))
for element in document.ents:
print('Type: %s, Value: %s' % (element.label_, element))
结果:
Original Sentence: The university was founded in 1885 by Leland and Jane Stanford in memory of their only child, Leland Stanford Jr., who had died of typhoid fever at age 15 the previous year. Stanford was a former Governor of California and U.S. Senator; he made his fortune as a railroad tycoon. The school admitted its first students on October 1, 1891,[2][3] as a coeducational and non-denominational institution.Type: DATE, Value: 1885
Type: GPE, Value: Leland
Type: PERSON, Value: Jane Stanford
Type: PERSON, Value: Leland Stanford Jr.
Type: DATE, Value: age 15 the previous year
Type: ORG, Value: Stanford
Type: GPE, Value: California
Type: GPE, Value: U.S.
Type: ORDINAL, Value: first
Type: DATE, Value: October 1, 1891,[2][3
第四步:第二次测试
document = spacy_nlp(article2)print('Original Sentence: %s' % (article2))
print()
for element in document.ents:
print('Type: %s, Value: %s' % (element.label_, element))
结果
Original Sentence: New York, New York , NY N.Y. new york
Type: GPE, Value: New York
Type: GPE, Value: New York
Type: GPE, Value: NY N.Y.
- 既能认出“纽约”
- 将“纽约”标记为单一位置
- 无法标记“纽约”
Source: https://geonaut.co.uk/projects/programming/
NLTK 东北 _ 块
NLTK 是另一个著名的 NLP 库。我使用这个库来处理我的第一个 NLP 相关的项目。它包括了许多与自然语言处理相关的方法,如词性标注、句子分词等。
步骤 1:环境设置
pip install nltk=3.2.5
步骤 2:导入库
加载相应的包
import nltkprint('NTLK version: %s' % (nltk.__version__))from nltk import word_tokenize, pos_tag, ne_chunknltk.download('words')
nltk.download('averaged_perceptron_tagger')
nltk.download('punkt')
nltk.download('maxent_ne_chunker')
第三步:第一次测试
NLTK 将单词标记化、词性(POS)标注和命名实体识别分开。因此,我们需要为命名实体识别执行三个函数。
results = ne_chunk(pos_tag(word_tokenize(article)))print('Original Sentence: %s' % (article))
print()
for x in str(results).split('\n'):
if '/NNP' in x:
print(x)
结果:
(GPE Leland/NNP)
(PERSON Jane/NNP Stanford/NNP)
(GPE Leland/NNP)
Stanford/NNP
Jr./NNP
(PERSON Stanford/NNP)
Governor/NNP
(GPE California/NNP)
(GPE U.S/NNP)
Senator/NNP
October/NNP
]/NNP
第四步:第二次测试
results = ne_chunk(pos_tag(word_tokenize(article2)))print('Original Sentence: %s' % (article2))
print()
for x in str(results).split('\n'):
if '/NNP' in x:
print(x)
结果:
Original Sentence: New York, New York , NY N.Y. new york
(GPE New/NNP York/NNP)
(GPE New/NNP York/NNP)
(ORGANIZATION NY/NNP)
N.Y./NNP
结论
演示可以在 Jupyter 笔记本中找到。
斯坦福 NER 需要额外的实现来获得实体,如果它包括一个以上的单词。另外,与其他两个库相比,标记的性能是最慢的。
spaCy 似乎是更容易获得实体的库,并且不需要额外的设置。除了 NER,它还支持 GPU 和深度学习方法
NLTK NE_Chunk 需要更多的设置(下载预训练文件),但这只是一次性的。通过比较其他两个库,结果似乎并不好。
TL;博士
斯坦福 NER
我们在前面的演示中加载了“English . all . 3 class . dist sim . CRF . ser . gz”分类器。可以替换为“English . con ll . 4 class . dist sim . CRF . ser . gz”或“English . muc . 7 class . dist sim . CRF . ser . gz”。如果使用“English . muc . 7 class . dist sim . CRF . ser . gz”,也可以标记日期和时间。
- English . all . 3 class . dist sim . CRF . ser . gz:地点、人员和组织
- English . con ll . 4 class . dist sim . CRF . ser . gz:地点、人员、组织和杂项
- English . muc . 7 class . dist sim . CRF . ser . gz:地点、人员、组织、资金、百分比、日期、时间
空间
如果机器没有 GPU 但安装了 cupy。会抛出错误,提交 bug (spaCy 版本为(2.0.11)。如果计算机没有 GPU,当前的解决方法是卸载 cupy
NLTK NE 组块
通过与斯坦福 NER 和 spaCy 的比较,性能和代码效率不如这些库。
关于我
我是湾区的数据科学家。专注于数据科学、人工智能,尤其是 NLP 和平台相关领域的最新发展。你可以通过媒体博客、 LinkedIn 或 Github 联系我。