提交 4d3cfc67 编写于 作者: W wizardforcel

2021-03-10 21:09:25

上级 782814c7
......@@ -500,7 +500,7 @@ scikit_learn==0.19.0
![Explore Boston housing datasetexploringthe Boston housing dataset](img/image1_061.jpg)
这将计算各种属性,包括每列的平均值,标准差,最小值和最大值。 该表提供了有关所有内容分配方式的高级思路。 注意,我们通过在输出中添加`.T`对结果进行了转换。 这将交换行和列。
这将计算各种属性,包括每列的平均值,标准差,最小值和最大值。 该表提供了有关所有内容分配方式的高级思路。 注意,我们通过在输出中添加`.T`对结果进行了转换。 这将交换行和列。
继续进行分析,我们将指定一组要关注的列。
......@@ -538,7 +538,7 @@ scikit_learn==0.19.0
### 注意
皮尔逊系数定义为两个变量之间的协方差,除以它们的标准差的乘积:
皮尔逊系数定义为两个变量之间的协方差,除以它们的标准差的乘积:
![Explore Boston housing datasetexploringthe Boston housing dataset](img/image1_067.jpg)
......@@ -619,7 +619,7 @@ scikit_learn==0.19.0
### 注意
通过获取垂直于最佳拟合线的仓中数据的标准差,有效地确定沿最佳拟合线的每个点的置信区间,可以计算出这 95% 的置信区间。 在实践中,这涉及 Seaborn 引导数据,该过程是通过随机采样替换产生新数据的过程。 自举的样本数是根据数据集的大小自动确定的,但也可以通过传递`n_boot`参数来手动设置。
通过获取垂直于最佳拟合线的仓中数据的标准差,有效地确定沿最佳拟合线的每个点的置信区间,可以计算出这 95% 的置信区间。 在实践中,这涉及 Seaborn 引导数据,该过程是通过随机采样替换产生新数据的过程。 自举的样本数是根据数据集的大小自动确定的,但也可以通过传递`n_boot`参数来手动设置。
3. Seaborn 也可以用于绘制这些关系的残差。 通过运行包含以下内容的单元来绘制残差:
......
......@@ -795,7 +795,7 @@ K 折交叉验证算法如下:
1. 将数据拆分为大小近似相等的`k`个“折叠”。
2. 在不同的折叠组合上测试并训练`k`模型。 每个模型将包括`k-1`折叠训练数据,剩余的折叠用于测试。 在这种方法中,每个折叠最终仅被用作一次验证数据。
3. 通过取`k`值的平均值来计算模型精度。 还计算标准差以在值上提供误差线。
3. 通过取`k`值的平均值来计算模型精度。 还计算标准差以在值上提供误差线。
标准设置为`k = 10`,但如果使用大数据集,则应考虑使用`k`较小的值。
......@@ -925,7 +925,7 @@ K 折交叉验证算法如下:
回想一下如何为决策树设置最大深度来限制过拟合的数量? 这反映在验证曲线中,在该曲线中,我们看到右侧的较大最大深度值发生过拟合。 `max_depth`的一个好值似乎是`6`,在这里我们看到了训练和验证的准确性。 当`max_depth`等于`3`时,由于训练和验证精度较低,我们看到模型不适合数据。
总而言之,我们已经学习并实现了两种重要的技术来构建可靠的预测模型。 第一种这样的技术是 K 折交叉验证,该技术用于将数据拆分为各种训练/测试批次并产生设定的准确性。 然后,从这个集合中,我们计算出平均准确度和标准差作为误差的度量。 这很重要,因此我们可以衡量模型的可变性,并可以产生可信赖的准确性。
总而言之,我们已经学习并实现了两种重要的技术来构建可靠的预测模型。 第一种这样的技术是 K 折交叉验证,该技术用于将数据拆分为各种训练/测试批次并产生设定的准确性。 然后,从这个集合中,我们计算出平均准确度和标准差作为误差的度量。 这很重要,因此我们可以衡量模型的可变性,并可以产生可信赖的准确性。
我们还了解了另一种可以确保获得值得信赖的结果的技术:验证曲线。 这些使我们可以根据比较训练和验证准确性来可视化模型何时过拟合。 通过在选定的超参数的范围内绘制曲线,我们可以确定其最佳值。
......@@ -999,7 +999,7 @@ K 折交叉验证算法如下:
```
我们正在测试 10 个具有 K 折交叉验证的模型。 通过设置`k = 5`,我们从得出每个模型的准确性的五个估计,我们从中提取平均值和标准差以绘制在验证曲线中。 我们总共训练了 50 个模型,由于`n_estimators`设置为 20,所以我们总共训练了 1,000 个决策树! 大约需要 10 秒钟!
我们正在测试 10 个具有 K 折交叉验证的模型。 通过设置`k = 5`,我们从得出每个模型的准确性的五个估计,我们从中提取平均值和标准差以绘制在验证曲线中。 我们总共训练了 50 个模型,由于`n_estimators`设置为 20,所以我们总共训练了 1,000 个决策树! 大约需要 10 秒钟!
4. 使用上一个练习中的自定义`plot_validation_curve`函数绘制验证曲线。 运行以下代码:
......
此差异已折叠。
......@@ -50,7 +50,7 @@ plt.show()
```
在此示例中,我将原来的函数称为正态分布,但我还将在此处渲染另一个正态分布,均值约为`1.0`,标准差为`0.5`。 然后,我将一起展示这两者,以便您了解它们之间的比较。
在此示例中,我将原来的函数称为正态分布,但我还将在此处渲染另一个正态分布,均值约为`1.0`,标准差为`0.5`。 然后,我将一起展示这两者,以便您了解它们之间的比较。
![](img/86bcf451-c546-482c-81f0-7d32400aebff.png)
......@@ -340,19 +340,19 @@ plt.show()
```
在此示例中,我称一个以 27,000 为中心的正态分布,标准差为 15,000,具有 10,000 个数据点。 然后,我只调用`pyplot`的直方图函数,即`hist()`,并指定输入数据和我们要在直方图中将事物分组的存储桶数。 然后我叫`show()`,其余的都是魔术。
在此示例中,我称一个以 27,000 为中心的正态分布,标准差为 15,000,具有 10,000 个数据点。 然后,我只调用`pyplot`的直方图函数,即`hist()`,并指定输入数据和我们要在直方图中将事物分组的存储桶数。 然后我叫`show()`,其余的都是魔术。
![](img/fdd1e7b6-d46c-4ff0-99d5-3c9390efc143.png)
# 生成箱
# 生成箱
最后,让我们看一下箱图。 请记住,在上一章中,当我们谈论百分位数时,我谈到了这一点。
最后,让我们看一下箱图。 请记住,在上一章中,当我们谈论百分位数时,我谈到了这一点。
同样,使用箱图,该框代表两个内部四分位数,其中 50% 的数据位于该四分位数中。 相反,另外 25% 的居民位于该盒子的两侧。 晶须(在我们的示例中为虚线)代表数据的范围(异常值除外)。
同样,使用箱图,该框代表两个内部四分位数,其中 50% 的数据位于该四分位数中。 相反,另外 25% 的居民位于该盒子的两侧。 晶须(在我们的示例中为虚线)代表数据的范围(异常值除外)。
我们将箱图中的离群值定义为四分位间距或框的大小的 1.5 倍以外的任何值。 因此,我们将盒子的大小乘以 1.5,直到点状晶须上的那个点,我们将这些部分称为四分位数外。 但是外部四分位数之外的任何东西都被视为离群值,这就是外部四分位数以外的线所代表的含义。 那就是我们根据盒须图绘制的定义来定义离群值的地方。
我们将箱图中的离群值定义为四分位间距或框的大小的 1.5 倍以外的任何值。 因此,我们将盒子的大小乘以 1.5,直到点状晶须上的那个点,我们将这些部分称为四分位数外。 但是外部四分位数之外的任何东西都被视为离群值,这就是外部四分位数以外的线所代表的含义。 那就是我们根据盒须图绘制的定义来定义离群值的地方。
关于箱图的几点要记住:
关于箱图的几点要记住:
* 它们对于可视化数据的散布和偏斜很有用
* 方框中间的线代表数据的中位数,方框代表第一四分位数和第三四分位数的边界
......@@ -372,7 +372,7 @@ plt.show()
```
在代码中,我们具有统一的数据随机分布(`uniformSkewed`)。 然后,我们在高端`high_outliers`上添加了一些离群值,并在`low_outliers`上添加了一些负值。 然后,我们将这些列表连接在一起,并使用 NumPy 从这三个不同的集合中创建了一个数据集。 然后,我们采用统一数据和一些离群值的组合数据集,并使用`plt.boxplot()`进行绘制,这就是您得到箱图的方式。 调用`show()`将其可视化,然后就可以了。
在代码中,我们具有统一的数据随机分布(`uniformSkewed`)。 然后,我们在高端`high_outliers`上添加了一些离群值,并在`low_outliers`上添加了一些负值。 然后,我们将这些列表连接在一起,并使用 NumPy 从这三个不同的集合中创建了一个数据集。 然后,我们采用统一数据和一些离群值的组合数据集,并使用`plt.boxplot()`进行绘制,这就是您得到箱图的方式。 调用`show()`将其可视化,然后就可以了。
![](img/77d95176-b924-4737-b914-454a2ebca453.png)
......@@ -417,7 +417,7 @@ plt.show()
# 相关性
相关性通过每个属性的标准偏差对所有事物进行归一化(只需将协方差除以两个变量的标准偏差即可对事物进行归一化)。 这样做,我可以很清楚地说,相关系数为 -1 表示存在完美的逆相关性,因此,一个值增大,另一个值减小,反之亦然。 相关性为 0 表示两组属性之间完全没有相关性。 相关性为 1 表示完全相关,其中这两个属性的移动方式与查看不同数据点时完全相同。
相关性通过每个属性的标准差对所有事物进行归一化(只需将协方差除以两个变量的标准差即可对事物进行归一化)。 这样做,我可以很清楚地说,相关系数为 -1 表示存在完美的逆相关性,因此,一个值增大,另一个值减小,反之亦然。 相关性为 0 表示两组属性之间完全没有相关性。 相关性为 1 表示完全相关,其中这两个属性的移动方式与查看不同数据点时完全相同。
请记住,关联并不意味着因果关系。 仅仅因为您发现一个很高的相关值并不意味着这些属性之一会导致另一个属性。 这仅表示两者之间存在某种关系,并且这种关系可能是由完全不同的事物引起的。 真正确定因果关系的唯一方法是通过受控实验,我们将在后面讨论。
......@@ -498,7 +498,7 @@ correlation(pageSpeeds, purchaseAmount)
```
再次,从第一原理开始,我们可以获取两组属性之间的相关性,计算每个属性的标准偏差,然后计算这两个属性之间的协方差,然后除以每个数据集的标准偏差。 这样便得到了相关值,该值被标准化为 -1 比 1。我们最终得到的值是 -0.4,这表明在负方向上这两件事之间存在一些相关性:
再次,从第一原理开始,我们可以获取两组属性之间的相关性,计算每个属性的标准差,然后计算这两个属性之间的协方差,然后除以每个数据集的标准差。 这样便得到了相关值,该值被标准化为 -1 比 1。我们最终得到的值是 -0.4,这表明在负方向上这两件事之间存在一些相关性:
![](img/68d23ab2-f88b-4e59-9a50-ca99032fe2da.png)
......@@ -542,7 +542,7 @@ correlation (pageSpeeds, purchaseAmount)
再次提醒您:相关性并不意味着因果关系。 仅仅因为人们在拥有更快的页面速度时可能会花更多钱,也许这意味着他们可以负担得起更好的互联网连接。 也许这并不意味着页面呈现的速度与人们的花费之间实际上存在因果关系,但是它告诉您存在一种有趣的关系,值得进一步研究。 如果不运行实验,就无法说出因果关系,但是相关性可以告诉您可能要运行的实验。
# 相关活动
# 相关性的活动
因此,请弄脏您的手,卷起袖子,我希望您使用`numpy.cov()`功能。 这实际上是让 NumPy 为您计算协方差的一种方法。 我们看到了如何使用`corrcoef()`函数计算相关性。 因此,返回并仅使用`numpy.cov()`函数重新运行这些示例,看看是否获得相同的结果。 它应该是相当不错的,所以不要使用我从头开始编写的协方差函数来做到这一点,而要使用 NumPy 看看是否可以获得相同的结果。 同样,此练习的目的是使您熟悉使用 NumPy 并将其应用于实际数据。 因此,看看它在哪里。
......@@ -715,7 +715,7 @@ Out []:0.29929598652145134
好吧,很难缠住这些东西。 我知道这有点令人困惑,但是如果您需要,请再次进行遍历,研究一下,并确保您了解这里发生的事情。 我在这里尝试输入足够的示例,以说明对这些内容的不同思考组合。 一旦您将其内部化,我将挑战您自己在这里实际进行一些工作。
# 条件概率分
# 条件概率分
我要您做的是修改以下在上一节中使用的 Python 代码。
......
......@@ -34,7 +34,7 @@
现在,您将不再需要真正地自己动手做,但是如果您出于某些原因必须这样做,或者您只是对幕后发生的事情感到好奇,我现在将为您描述整体算法,以及如何实际计算斜率和`y`-如果需要一天的时间,则很难拦截自己。 其实并不那么复杂。
还记得直线的斜率截距方程吗? 它是`y = mx + c`。 斜率刚好是两个变量之间的相关性乘以`Y`中的标准偏差除以`X`中的标准偏差。 标准差只是自然而然地渗入到数学中似乎有些奇怪,但是请记住,相关性也已纳入标准差,因此不必重新引入该术语也就不足为奇了。
还记得直线的斜率截距方程吗? 它是`y = mx + c`。 斜率刚好是两个变量之间的相关性乘以`Y`中的标准差除以`X`中的标准差。 标准差只是自然而然地渗入到数学中似乎有些奇怪,但是请记住,相关性也已纳入标准差,因此不必重新引入该术语也就不足为奇了。
然后可以将截距计算为`Y`的平均值减去斜率乘以`X`的平均值。 再说一次,尽管实际上并不是那么困难,Python 会为您完成所有工作,但要点是,这些并不是要运行的复杂事情。 实际上,它们可以非常有效地完成。
......@@ -87,7 +87,7 @@ scatter(pageSpeeds, purchaseAmount)
```
我在这里所做的只是随机地进行,页面速度的正态分布以 3 秒为中心,标准差为 1 秒。 我已将购买金额设为该金额的线性函数。 因此,我将其设为 100 减去页面速度,再加上周围的一些正常随机分布乘以 3。如果我们对此进行分散,我们可以看到数据最终看起来像这样:
我在这里所做的只是随机地进行,页面速度的正态分布以 3 秒为中心,标准差为 1 秒。 我已将购买金额设为该金额的线性函数。 因此,我将其设为 100 减去页面速度,再加上周围的一些正常随机分布乘以 3。如果我们对此进行分散,我们可以看到数据最终看起来像这样:
![](img/ec49842b-65b9-442d-9ce4-5659794c8e28.png)
......
# 使用 Python 进行机器学习
# Python 机器学习
在本章中,我们将学习机器学习以及如何在 Python 中实际实现机器学习模型。
......@@ -19,7 +19,7 @@
* 什么是整体学习
* **支持向量机****SVM**)及其使用 Scikit-learn 的示例
# 机器学习和培训/测试
# 机器学习和训练/测试
那么什么是机器学习? 好吧,如果您在维基百科上或其他任何内容上查找它,就会说这是一种可以从观测数据中学习并可以基于其进行预测的算法。 听起来真的很花哨,对不对? 就像人工智能一样,您的计算机内部也有动荡的大脑。 但实际上,这些技术通常非常简单。
......@@ -424,7 +424,7 @@ K 均值聚类是机器学习中一种非常普遍的技术,您仅尝试获取
现在让我们来看一个例子,将 K 均值聚类付诸实践。
# 根据收入和年龄对人进行聚类
# 根据收入和年龄将人员聚类
让我们看看使用 Scikit-learn 和 Python 进行 K 均值聚类有多么容易。
......@@ -559,7 +559,7 @@ plt.show()
* 如果他们当前没有工作,那么他们以前的雇主少于一个吗? 如果是,则此人从未从事过工作,也从未实习过。 可能不是一个好的招聘决定。 不要雇用那个人。
* 但是,如果他们确实有以前的雇主,他们是否至少上过一流学校? 如果不是这样,那就太不稳定了。 如果是这样,那么是的,我们应该根据我们训练的数据聘请此人。
# 穿过决策树
# 浏览决策树
这就是您浏览决策树结果的方式。 就像遍历流程图一样,算法可以为您产生这种效果真是太棒了。 该算法本身实际上非常简单。 让我解释一下该算法的工作原理。
......
此差异已折叠。
......@@ -213,7 +213,7 @@ for neighbor in neighbors:
![](img/4e0fbf04-f04f-4b07-aff6-6d7f67fb0c17.png)
结果并非没有道理。 因此,我们以电影《玩具总动员》(玩具总动员)为例,该电影名为 movieID 1,对于最近的前 10 位邻居,我们从中得到的都是喜剧和儿童电影的不错选择。 因此,鉴于《玩具总动员》是一部受欢迎的喜剧和儿童电影,我们还得到了许多其他的喜剧和儿童电影。 因此,它似乎有效! 我们不必使用一堆花哨的协过滤算法,这些结果还不错。
结果并非没有道理。 因此,我们以电影《玩具总动员》(玩具总动员)为例,该电影名为 movieID 1,对于最近的前 10 位邻居,我们从中得到的都是喜剧和儿童电影的不错选择。 因此,鉴于《玩具总动员》是一部受欢迎的喜剧和儿童电影,我们还得到了许多其他的喜剧和儿童电影。 因此,它似乎有效! 我们不必使用一堆花哨的协过滤算法,这些结果还不错。
接下来,让我们使用 KNN 来预测等级,在此示例中,我们将等级视为分类:
......@@ -274,7 +274,7 @@ avgRating
因此,这些就是降维,主成分分析和奇异值分解的概念。 是的,所有花哨的大话都是,这是一件花哨的事情。 您知道,我们正在设法以保留维数差异的方式将维空间缩小为维空间减少。 幸运的是,Scikit-learn 使此操作非常容易,就像实际应用 PCA 所需的仅 3 行代码一样。 因此,让我们实现这一目标吧!
# 具有鸢尾花数据集的 PCA 示例
# 使用鸢尾花数据集的 PCA 示例
让我们将主成分分析应用于鸢尾花数据集。 这是一个 4D 数据集,我们将缩小为 2 维。 我们将看到,即使丢弃一半的维度,我们实际上仍然可以保留该数据集中的大多数信息。 这是很酷的东西,也很简单。 让我们深入研究并做一些主成分分析,并治愈维数的诅咒。 继续并打开`PCA.ipynb`文件。
......@@ -491,9 +491,9 @@ Q(s,a) += discount * (reward(s,a) + max(Q(s')) - Q(s,a))
因此,再次描述马尔科夫决策过程,只是描述我们所做的事情,只有一种数学符号和一个听起来更奇特的单词。 而且,如果您想听起来更聪明,也可以使用另一个名称来调用马尔可夫决策过程:离散时间随机控制过程。 听起来很聪明! 但是概念本身就是我们刚刚描述的东西。
# 动态编程
# 动态规划
因此,甚至可以说是花哨的话:动态编程可以用来描述我们刚刚所做的事情。 哇! 听起来像人工智能,计算机自己编程,《终结者 2》,天网之类的东西。 但是,不,这就是我们所做的。 如果您查看动态编程的定义,则它是一种解决复杂问题的方法,可以将其分解为更简单的子问题的集合,一次解决每个子问题,并使用基于内存的数据结构理想地存储其解决方案。
因此,甚至可以说是花哨的话:动态规划可以用来描述我们刚刚所做的事情。 哇! 听起来像人工智能,计算机自己编程,《终结者 2》,天网之类的东西。 但是,不,这就是我们所做的。 如果您查看动态规划的定义,则它是一种解决复杂问题的方法,可以将其分解为更简单的子问题的集合,一次解决每个子问题,并使用基于内存的数据结构理想地存储其解决方案。
下一次出现相同的子问题时,无需重新计算其解决方案,只需查找先前计算出的解决方案,从而节省了计算时间,但以(希望的)适度的存储空间开销为代价:
......@@ -505,7 +505,7 @@ Q(s,a) += discount * (reward(s,a) + max(Q(s')) - Q(s,a))
* **无需重新计算其解,而是简单地查找先前计算的解**:我已经从探索阶段获得了`Q`值。
* **从而节省了计算时间,但以适度的存储空间开销为代价**:这正是我们刚刚进行的强化学习。
我们有一个复杂的探索阶段,该阶段寻找给定状态下与每个动作相关的最佳奖励。 一旦有了针对给定状态要采取的正确行动的表格,我们就可以非常快速地使用它来使“吃豆人”以最佳方式移动,这是他之前从未见过的全新迷宫。 因此,强化学习也是动态编程的一种形式。 哇!
我们有一个复杂的探索阶段,该阶段寻找给定状态下与每个动作相关的最佳奖励。 一旦有了针对给定状态要采取的正确行动的表格,我们就可以非常快速地使用它来使“吃豆人”以最佳方式移动,这是他之前从未见过的全新迷宫。 因此,强化学习也是动态规划的一种形式。 哇!
概括地说,您可以通过半随机地探索给定不同条件的运动的不同选择来制作智能的 PacMan 代理,其中,这些选择是动作,而这些条件是状态。 我们会随时跟踪与每个动作或状态相关的奖励或惩罚,实际上,我们可以打折,如果您想使其更好的话,可以分多个步骤进行。
......
# 处理真实数据
在本章中,我们将讨论处理现实数据的挑战,以及您可能会遇到的一些怪癖。 本章首先讨论偏差方差折衷,这是一种更原则性的方式,用于讨论您可能过拟合和欠拟合数据的不同方式,以及它们之间如何相互关联。 然后,我们讨论 K 折交叉验证技术,该技术是打击过拟合的重要工具,并介绍了如何使用 Python 实现该技术。
在本章中,我们将讨论处理现实数据的挑战,以及您可能会遇到的一些怪癖。 本章首先讨论偏差方差权衡,这是一种更原则性的方式,用于讨论您可能过拟合和欠拟合数据的不同方式,以及它们之间如何相互关联。 然后,我们讨论 K 折交叉验证技术,该技术是打击过拟合的重要工具,并介绍了如何使用 Python 实现该技术。
接下来,我们分析在实际应用任何算法之前清除数据并对其进行规范化的重要性。 我们看到一个示例,用于确定网站上最受欢迎的页面,这些页面将演示清洁数据的重要性。 本章还涵盖了记住对数值数据进行规范化的重要性。 最后,我们研究如何检测异常值并加以处理。
......@@ -13,7 +13,7 @@
* 归一化数值数据
* 检测异常值并对其进行处理
# 偏差/方差折衷
# 偏差/方差权衡
在处理现实世界数据时,我们面临的基本挑战之一是拟合过高与拟合过低而不是拟合数据,模型或预测。 当我们谈论欠拟合和过拟合时,我们经常可以在偏差和方差以及偏差与方差之间进行权衡。 所以,让我们谈谈这意味着什么。
......@@ -50,7 +50,7 @@
这是偏差方差的权衡。 您知道必须在价值的整体准确性,价值的分散程度或紧密程度之间做出决定。 那就是偏差-方差的权衡,它们都会导致整体误差,这是您真正关心的要最小化的事情。 因此,请记住这些条款!
# K 折交叉验证以避免过拟合
# 用于避免过拟合的 K 折交叉验证
在本书的前面,我们讨论了训练和测试,将其作为防止过拟合并实际测量模型在从未见过的数据上的性能的好方法。 我们可以使用称为 K 折交叉验证的技术将其提升到一个新的水平。 因此,让我们谈谈您的武器库中用于对抗过拟合的强大工具; K 折交叉验证并了解其工作原理。
......@@ -71,7 +71,7 @@
有 K 折交叉验证的变体,也可以将其随机化。 因此,您可以每次都随机选择训练数据集是什么,而只是保持随机地将事物分配给不同的存储桶并测量结果。 但是通常,当人们谈论 K 折交叉验证时,他们谈论的是这种特定技术,即您保留一个存储桶用于测试,其余的存储桶用于训练,然后当您为每个桶建立一个模型时,相对于测试数据集评估全部训练数据集。
# 使用 Scikit-learn 进行 K 折交叉验证的示例
# 使用 Scikit-learn K 折交叉验证的示例
幸运的是,Scikit-learn 使得此操作确实非常容易,并且比进行常规培训/测试更容易! 进行 K 折叠交叉验证非常简单,因此您也可以这样做。
......@@ -325,7 +325,7 @@ for result in results[:20]:
这是一个恶意数据被引入到我的数据流中的例子,我必须将其过滤掉。 因此,通过查看,我们不仅可以看到恶意攻击在查看 PHP 文件,而且还试图执行内容。 这不仅是在执行 GET 请求,还在于在脚本上进行发布请求,以实际尝试在我的网站上执行代码。
# 修改二-过滤发布请求
# 修改二-过滤 POST 请求
现在,我知道我所关心的数据是根据我要弄清楚的事情来确定的,那就是人们从我的网站获取网页。 因此,对我而言,合法的做法是从这些日志中过滤掉不是 GET 请求的所有内容。 所以,让我们接下来做。 我们将再次检查请求字段中是否有三个字段,然后还要检查操作是否得到执行。 如果不是,我们将完全忽略该行:
......@@ -364,7 +364,7 @@ for result in results[:20]:
如果一个真正的人使用一个真正的浏览器来尝试获取此页面,它将说出诸如 Mozilla 或互联网Explorer 或 Chrome 之类的内容。 因此,这些请求似乎来自某种刮板。 同样,潜在的恶意流量无法识别其身份。
# 修改三-检查用户代理
# 修改三-检查 UserAgent
也许,我们也应该查看 UserAgent,以查看这些用户是否是提出请求的实际人员。 让我们继续打印所有遇到的不同 UserAgent。 因此,按照实际上总结了所看到的不同 URL 的代码的精神,我们可以查看所看到的所有不同 UserAgent,并按此日志中最流行的`user_agent`字符串对它们进行排序:
......@@ -542,7 +542,7 @@ for result in results[:20]:
实际数据的一个常见问题是离群值。 您总是会有一些奇怪的用户或某些奇怪的代理程序在污染您的数据,而这些行为异常而非典型地来自于典型用户。 它们可能是合法的异常值; 它们可能是由真实的人而不是某种恶意流量或伪造数据引起的。 所以有时候,删除它们是适当的,有时候不是。 确保做出负责任的决定。 因此,让我们深入研究一些处理异常值的示例。
例如,如果我正在进行协过滤,并且试图提出电影推荐或类似的建议,那么您可能会有一些超级用户观看过每部电影,并对每部电影进行了评分。 他们最终可能会对其他所有人的建议产生过分的影响。
例如,如果我正在进行协过滤,并且试图提出电影推荐或类似的建议,那么您可能会有一些超级用户观看过每部电影,并对每部电影进行了评分。 他们最终可能会对其他所有人的建议产生过分的影响。
您实际上并不希望少数人在您的系统中拥有如此强大的功能。 因此,这可能是一个示例,其中过滤掉异常值并通过它们实际放入系统中的评级来识别它们是合理的事情。 或者,也许一个离群值就是没有足够评分的人。
......@@ -550,7 +550,7 @@ for result in results[:20]:
如果有人真的想要美国的平均平均收入(而不是中位数),那么您不应该因为不喜欢唐纳德·特朗普而把他扔掉。 您知道的事实是,即使他的中位数不超出中位数,他的数十亿美元也将推动该中位数的增长。 因此,不要通过排除异常值来弄乱数字。 但是,如果它与您首先要建模的内容不一致,则将其排除在外。
现在,我们如何识别异常值? 好吧,还记得我们的老朋友标准差吗? 我们在本书的开头部分已经介绍了这一点。 这是检测异常值的非常有用的工具。 原则上,您可以计算应该具有或多或少正态分布的数据集的标准偏差。 如果您看到的数据点超出一两个标准偏差,则那里有一个异常值。
现在,我们如何识别异常值? 好吧,还记得我们的老朋友标准差吗? 我们在本书的开头部分已经介绍了这一点。 这是检测异常值的非常有用的工具。 原则上,您可以计算应该具有或多或少正态分布的数据集的标准差。 如果您看到的数据点超出一两个标准差,则那里有一个异常值。
记住,我们之前也讨论过箱形图和晶须图,它们还具有检测和可视化异常值的内置方法。 这些图将异常值定义为位于四分位数范围的 1.5 之外。
......@@ -600,7 +600,7 @@ incomes.mean ()
但是,假设我们出于某种原因不得不使用均值,而解决此问题的正确方法将是排除唐纳德·特朗普等离群值。 因此,我们需要弄清楚如何识别这些人。 好吧,您可以选择一些任意的界限,然后说:“我将淘汰所有亿万富翁”,但这并不是一件非常原则性的事情。 10 亿来自哪里?
我们数数的方式只是偶然。 因此,更好的方法是实际测量数据集的标准偏差,并将异常值识别为偏离平均值的标准偏差的倍数。
我们数数的方式只是偶然。 因此,更好的方法是实际测量数据集的标准差,并将异常值识别为偏离平均值的标准差的倍数。
因此,以下是我编写的一个小功能。 称为`reject_outliers()`
......@@ -618,7 +618,7 @@ plt.show()
```
它接收数据列表并找到中位数。 它还找到该数据集的标准偏差。 因此,我将其过滤掉,因此只保留数据中位数两个标准偏差内的数据点。 因此,我可以在收入数据上使用此便捷的`reject_outliers()`函数,以自动自动剔除怪异的异常值:
它接收数据列表并找到中位数。 它还找到该数据集的标准差。 因此,我将其过滤掉,因此只保留数据中位数两个标准差内的数据点。 因此,我可以在收入数据上使用此便捷的`reject_outliers()`函数,以自动自动剔除怪异的异常值:
![](img/2e37aa6a-afb1-4ae4-97a3-2af86b800d90.png)
......@@ -630,9 +630,9 @@ plt.show()
# 异常活动
因此,如果您想玩这个游戏,就可以像我通常要求您那样去弄弄它。 尝试使用标准差的不同倍数,尝试添加更多离群值,并尝试添加不像唐纳德·特朗普那样离群值的离群值。 您知道,只需在此处构造一些额外的伪造数据并进行处理,看看您是否可以成功识别这些人。
因此,如果您想玩这个游戏,就可以像我通常要求您那样去弄弄它。 尝试使用标准差的不同倍数,尝试添加更多离群值,并尝试添加不像唐纳德·特朗普那样离群值的离群值。 您知道,只需在此处构造一些额外的伪造数据并进行处理,看看您是否可以成功识别这些人。
所以你有它! 离群值; 非常简单的概念。 因此,这是通过查看标准偏差并仅查看与您关心的均值或中值的标准偏差的数量来识别异常值的示例。 实际上,考虑到离群值本身可能会扭曲均值,因此中值实际上可能是一个更好的选择,对吗? 因此,通过使用标准偏差,这是一种以更原则性的方式识别异常值的好方法,而不仅仅是选择一些任意的截止值。 同样,您需要决定对这些异常值进行正确的处理。 您实际上想衡量什么? 实际丢弃它们是否合适? 所以,把它放在你的头上!
所以你有它! 离群值; 非常简单的概念。 因此,这是通过查看标准差并仅查看与您关心的均值或中值的标准差的数量来识别异常值的示例。 实际上,考虑到离群值本身可能会扭曲均值,因此中值实际上可能是一个更好的选择,对吗? 因此,通过使用标准差,这是一种以更原则性的方式识别异常值的好方法,而不仅仅是选择一些任意的截止值。 同样,您需要决定对这些异常值进行正确的处理。 您实际上想衡量什么? 实际丢弃它们是否合适? 所以,把它放在你的头上!
# 总结
......
......@@ -235,7 +235,7 @@ Spark 是一项非常热门的技术,并且相对来说还很年轻,因此
* **MLlib**:这是本节中要重点介绍的内容。 它实际上是一个机器学习库,可让您执行通用的机器学习算法,而 Spark 则在后台运行,以在整个集群中实际分配该处理。 您可以在比其他更大的数据集上执行机器学习。
* **GraphX**:这不是用于制作漂亮的图表。 它是指网络理论意义上的图形。 考虑一下社交网络; 那是一个图的例子。 GraphX 仅具有一些功能,可让您分析信息图的属性。
# Python 与 Scala for Spark
# Python 与 Scala 上的 Spark
当我向人们介绍 Apache Spark 时,有时确实会有些关于使用 Python 的错误,但是有一种让我疯狂的方法。 确实,很多人在编写 Spark 代码时都会使用 Scala,因为这是 Spark 本身开发的。 因此,通过迫使 Spark 将 Python 代码转换为 Scala,然后在一天结束时转换为 Java 解释器命令,会产生一些开销。
......@@ -320,7 +320,7 @@ hiveCtx = HiveContext(sc) rows = hiveCtx.sql("SELECT name, age FROM users")
现在,一旦拥有 RDD,便可以执行两种不同类型的事情,可以进行转换,也可以进行操作。
# 转
# 转
让我们先谈谈转换。 转换正是它们的本质。 这是一种采用 RDD 并将 RDD 中的每一行转换为基于您提供的函数的新值的方法。 让我们看一下其中的一些功能:
......@@ -349,7 +349,7 @@ rdd.map(lambda x: x*x)
这只是您要作为转换传递的非常简单的函数的简写。 它消除了实际将其声明为自己的单独命名函数的需要。 这就是函数编程的全部思想。 因此,可以说您现在已经了解函数式编程! 但实际上,这只是用于将内联函数定义为`map()`函数的参数或任何相关转换的简写形式。
#
#
当您想实际获得结果时,还可以对 RDD 执行操作。 以下是一些您可以执行的操作示例:
......@@ -386,17 +386,17 @@ rdd.map(lambda x: x*x)
还记得本书前面提到的电影相似之处和电影推荐吗? 向量的一个示例可能是给定用户评分的所有电影的列表。 向量有两种类型:稀疏和密集。 让我们看一个例子。 世界上有很多电影,无论用户是否实际观看,密集的向量实际上代表每个电影的数据。 例如,假设我有一个用户观看过《玩具总动员》,显然我会存储他们对玩具总动员的评分,但是如果他们不看电影《星球大战》,我实际上会存储一个事实,那就是《星球大战》没有数字。 因此,我们最终以密集的向量为所有这些丢失的数据点占用了空间。 稀疏向量仅存储存在的数据,因此不会在丢失的数据上浪费任何内存空间,好的。 因此,它是内部表示向量的一种更紧凑的形式,但是显然在处理时会引入一些复杂性。 因此,如果您知道向量中会有很多丢失的数据,那么这是节省内存的好方法。
# LabeledPoint 数据类型
# `LabeledPoint`数据类型
还出现了`LabeledPoint`数据类型,这听起来就是这样,该点具有某种与之相关的标签,以人类可读的方式传达此数据的含义。
# 评分数据类型
# `Rating`数据类型
最后,如果在 MLlib 中使用推荐,则会遇到`Rating`数据类型。 此数据类型可以接受代表 1-5 或 1-10 的等级(无论一个人可能拥有的星级),并使用该等级自动通知产品推荐。
因此,我认为您终于拥有了开始所需的一切,让我们深入研究一下实际的 MLlib 代码并运行它,然后它将变得更加有意义。
# 带有 MLlib 的 Spark 中的决策树
# MLlib 的 Spark 中的决策树
好吧,我们实际上使用 Spark 和 MLlib 库构建一些决策树,这是非常酷的事情。 无论您将本书的课程资料放在哪里,我都希望您现在转到该文件夹​​。 确保完全封闭 Canopy 或用于 Python 开发的任何环境,因为我想确保您是从此目录启动的,好吗? 并找到`SparkDecisionTree`脚本,然后双击该脚本以打开 Canopy:
......@@ -627,7 +627,7 @@ trainingData = csvData.map(createLabeledPoints)
此时,在使用该`createLabeledPoints`函数映射了我们的 RDD 之后,我们现在有了一个`trainingData` RDD,而这正是 MLlib 想要构造决策树的原因。
# 创建测试候选并建立我们的决策树
# 创建测试候选并建立我们的决策树
让我们创建一个可以使用的测试候选者,以便我们可以使用模型来实际预测是否会雇用新人。 我们要做的是创建一个候选测试,其中包含与 CSV 文件中每个字段相同的值数组:
......@@ -838,7 +838,7 @@ spark-submit SparkKMeans.py
最后,我们计算了 WSSSE 指标,在本示例中为 19.97。 因此,如果您想稍微尝试一下,我鼓励您这样做。 您可以看到随着增加或减小 K 值,该错误度量会发生什么,并思考为什么会这样。 如果不对所有数据进行归一化,您还可以尝试发生什么,这是否会对您的结果产生有意义的影响? 这实际上是一件重要的事情吗? 您还可以在模型本身上使用`maxIterations`参数进行试验,从而很好地了解实际对最终结果的影响以及它的重要性。 因此,可以随意使用它并进行实验。 这是使用 MLlib 和 Spark 以可扩展方式完成的 K 均值聚类。 很酷的东西。
# 特遣部队
# TF-IDF
因此,我们最后的 MLlib 示例将使用称为术语频率逆文档频率或 TF-IDF 的东西,它是许多搜索算法的基本组成部分。 和往常一样,这听起来很复杂,但没有听起来那么糟糕。
......@@ -853,7 +853,7 @@ TF-IDF 代表术语频率和文档逆向频率,这基本上是两个指标,
因此,这就是 TF-IDF。 它仅代表术语频率 x 反向文档频率,这只是表达术语频率高于文档频率的一种奇妙方式,也只是一种表达该单词在本文档中出现的频率与在文档中出现的频率相比的奇特方式。 整个文件? 就这么简单。
# TF-IDF 在实践中
# 实践中的 TF-IDF
在实践中,我们如何使用它有一些细微差别。 例如,我们使用反向文档频率的实际对数而不是原始值,这是因为现实中的词频倾向于呈指数分布。 因此,考虑到它们的整体流行性,通过记录日志,我们最终得出的词权重稍好一些。 这种方法有一些局限性,很明显,一个是我们基本上假设一个文档不过是一堆单词,我们假设单词本身之间没有任何关系。 而且,显然并非总是如此,将其解析出来可能是工作的一个很好的部分,因为您必须处理同义词和各种时态的单词,缩写,大写字母,拼写错误等问题。 这回到了清理数据的想法,这是您作为数据科学家的大部分工作,在处理自然语言处理内容时尤其如此。 幸运的是,那里有一些库可以帮助您解决此问题,但这是一个实际的问题,它将影响结果的质量。
......@@ -1035,7 +1035,7 @@ print (zippedResults.max())
希望我们对 Spark 有兴趣,并且您可以看到如何将其应用于以分布式方式解决非常复杂的机器学习问题。 因此,这是一个非常重要的工具,我想确保您在不至少了解如何将 Spark 应用于大数据问题的概念的前提下,不阅读本书中的数据科学。 因此,当您需要超越一台计算机可以完成的工作时,请记住,Spark 可供您使用。
# 使用适用于 MLlib 的 Spark 2.0 `DataFrame` API
# 将 Spark 2.0 `DataFrame` API 用于 MLlib
本章最初是为 Spark 1 编写的,因此让我们讨论一下 Spark 2 的新增功能以及 MLlib 现在具有哪些新功能。
......
......@@ -167,7 +167,7 @@ stats.ttest_ind(A, B)
# 当两组之间没有真正的区别时
就像进行健全性检查一样,让我们​​继续进行更改,以使这两组之间没有真正的区别。 因此,我将更改组`B`(在这种情况下为对照组),使其与治疗相同,其中均值为 25,标准差不变,样本大小不变,如下所示:
就像进行健全性检查一样,让我们​​继续进行更改,以使这两组之间没有真正的区别。 因此,我将更改组`B`(在这种情况下为对照组),使其与治疗相同,其中均值为 25,标准差不变,样本大小不变,如下所示:
```py
B = np.random.normal(25.0, 5.0, 10000)
......@@ -180,7 +180,7 @@ stats.ttest_ind(A, B)
![](img/81066228-b08e-4aa3-85af-015efe4ac2b3.jpg)
请记住,这是根据标准差得出的。 因此,这意味着除非我们还有更高的 p 值(超过 30%),否则那里可能没有真正的变化。
请记住,这是根据标准差得出的。 因此,这意味着除非我们还有更高的 p 值(超过 30%),否则那里可能没有真正的变化。
现在,这些数字仍然相对较高。 您会看到随机变化可能是一种阴险的事情。 这就是为什么您需要提前决定 p 值可接受的限制的原因。
......@@ -285,7 +285,7 @@ stats.ttest_ind(A, A)
它们不能成为决策所依据的一切,因为结果中存在错误的余地,并且有些事情可能会使结果产生偏差。 而且,如果此变化有更大的业务目标,而不仅仅是增加短期收入,则还必须考虑到这一点。
# 新效应
# 新颖性效应
一个问题是新颖性效应。 A/B 测试的一个主要致命弱点是它们倾向于在很短的时间内运行,这会带来很多问题。 首先,更改可能会产生较长期的影响,您将不会进行衡量,但是,网站上的某些内容也会有所不同。
......
......@@ -20,7 +20,7 @@
第 7 章,“估计事件的可能性”教您如何建立逻辑回归模型以及评估它的不同技术。 使用逻辑回归,您将能够学习如何估算事件发生的可能性。
第 8 章,“通过协过滤生成建议”教您创建并应用推荐模型。 它类似于网站(例如 Amazon),该网站能够建议您可能会在其页面上购买的商品。
第 8 章,“通过协过滤生成建议”教您创建并应用推荐模型。 它类似于网站(例如 Amazon),该网站能够建议您可能会在其页面上购买的商品。
第 9 章,“使用集成模型推展边界”使您熟悉集成技术,该技术用于组合多个模型的功能以增强预测的准确性。 这样做是因为有时单个模型不足以估计结果。
......
......@@ -21,7 +21,7 @@
## 正态分布
正态分布是统计中最常见且使用最广泛的分布。 在数学家 Karl Friedrich Gauss 之后,它也被称为“钟形曲线”和“高斯曲线”。 正态分布通常在自然界中发生。 让我们以前面看到的高度示例为例。 如果您拥有香港城市中特定性别的所有人的身高数据,并绘制了条形图,其中每个条形图代表该特定身高的人数,则所获得的曲线将看起来与下图一样。 图中的数字是相对于平均值的标准差数,即零。 在本章中,这一概念将变得更加清晰。
正态分布是统计中最常见且使用最广泛的分布。 在数学家 Karl Friedrich Gauss 之后,它也被称为“钟形曲线”和“高斯曲线”。 正态分布通常在自然界中发生。 让我们以前面看到的高度示例为例。 如果您拥有香港城市中特定性别的所有人的身高数据,并绘制了条形图,其中每个条形图代表该特定身高的人数,则所获得的曲线将看起来与下图一样。 图中的数字是相对于平均值的标准差数,即零。 在本章中,这一概念将变得更加清晰。
![A normal distribution](img/B03450_02_01.jpg)
......@@ -29,7 +29,7 @@
![A normal distribution](img/B03450_02_02.jpg)
请看下图:它显示了三个具有正态分布的曲线。 曲线`A`的标准偏差为 1,曲线`C`的标准偏差为 2,曲线`B`的标准偏差为 3,这意味着曲线`B`的值分布最大,而曲线`A`的值分布最小。 另一种看待它的方法是,如果曲线`B`代表一个国家的高度,那么这个国家的许多人具有高度的不同,而曲线`C`分布的身高彼此相似。
请看下图:它显示了三个具有正态分布的曲线。 曲线`A`的标准差为 1,曲线`C`的标准差为 2,曲线`B`的标准差为 3,这意味着曲线`B`的值分布最大,而曲线`A`的值分布最小。 另一种看待它的方法是,如果曲线`B`代表一个国家的高度,那么这个国家的许多人具有高度的不同,而曲线`C`分布的身高彼此相似。
![A normal distribution](img/B03450_02_03.jpg)
......@@ -158,11 +158,11 @@ array([1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
# Z 得分
用简单的术语表示,Z 得分是一个得分,表示相对于平均值的标准差的分布值。 让我们看一下计算 Z 得分的以下公式:
用简单的术语表示,Z 得分是一个得分,表示相对于平均值的标准差的分布值。 让我们看一下计算 Z 得分的以下公式:
![A z-score](img/3450_02_15.jpg)
在此,`X`是分布中的值,`µ`是分布的平均值,`σ`是分布的标准
在此,`X`是分布中的值,`µ`是分布的平均值,`σ`是分布的标准差
让我们尝试从学校教室的角度来理解这个概念。
......@@ -179,7 +179,7 @@ array([1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
```
NumPy 程序包具有一个具有正态函数的随机模块,其中 50 是分布的平均值,10 是分布的标准差,60 是要生成的值的数量。 您可以使用以下命令绘制正态分布:
NumPy 程序包具有一个具有正态函数的随机模块,其中 50 是分布的平均值,10 是分布的标准差,60 是要生成的值的数量。 您可以使用以下命令绘制正态分布:
```py
>>> plt.hist(classscore, 30, normed=True) #Number of breaks is 30
......@@ -251,7 +251,7 @@ NumPy 程序包具有一个具有正态函数的随机模块,其中 50 是分
```
我们将 Z 得分与标准差相乘,然后将结果与分布的平均值相加。 这有助于将 Z 得分转换为分布中的值。 `55.83`分数表示分数超过该分数的学生位于分布的前 20%。
我们将 Z 得分与标准差相乘,然后将结果与分布的平均值相加。 这有助于将 Z 得分转换为分布中的值。 `55.83`分数表示分数超过该分数的学生位于分布的前 20%。
Z 得分是统计学中必不可少的概念,已被广泛使用。 现在您可以理解,它基本上用于标准化任何分布,以便可以对其进行比较或从中推论得出。
......@@ -386,7 +386,7 @@ p 值为:
![A confidence interval](img/3450_02_25.jpg)
在此,`s`是样品的标准差,`n`是样品的元素数。
在此,`s`是样品的标准差,`n`是样品的元素数。
可以使用 SciPy 包的`sem()`函数来计算:
......@@ -415,7 +415,7 @@ upper_bound / lower_bound = mean(height) +/- sigma * SEmean(x)
183.24 - (1.96 * 1.38) = 180.53
```
1.96 标准差覆盖正态分布中 95% 的面积。
1.96 标准差覆盖正态分布中 95% 的面积。
我们可以自信地说,人口平均值在 180.53 厘米至 185.94 厘米之间。
......@@ -465,7 +465,7 @@ upper_bound / lower_bound = mean(height) +/- sigma * SEmean(x)
![Correlation](img/3450_02_29.jpg)
前面的公式将皮尔逊相关性定义为`X``Y`之间的协方差,除以`X``Y`的标准偏差。 ,或者也可以将其定义为随机变量相对于均值的差值之和的期望均值除以`X``Y`的标准偏差。让我们以一个示例来理解。 让我们看一下各种汽车的行驶里程和马力,看看两者之间是否有关系。 这可以使用 SciPy 包中的`pearsonr`函数来实现:
前面的公式将皮尔逊相关性定义为`X``Y`之间的协方差,除以`X``Y`的标准差。 ,或者也可以将其定义为随机变量相对于均值的差值之和的期望均值除以`X``Y`的标准差。让我们以一个示例来理解。 让我们看一下各种汽车的行驶里程和马力,看看两者之间是否有关系。 这可以使用 SciPy 包中的`pearsonr`函数来实现:
```py
>>> mpg = [21.0, 21.0, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, 22.8, 19.2, 17.8, 16.4, 17.3, 15.2, 10.4, 10.4, 14.7, 32.4, 30.4,
......@@ -551,13 +551,13 @@ Spearman 相关性没有受到太大影响,因为它基于顺序而不是数
T 分布类似于 Z 分布,它以零为中心并且具有基本的钟形形状,但是其中心比 Z 分布更短且更平坦。
T 分布的标准差通常成比例地大于 Z,因此您会在每侧看到较粗的尾巴。
T 分布的标准差通常成比例地大于 Z,因此您会在每侧看到较粗的尾巴。
当样本较小时,通常使用 t 分布来分析总体。
Z 检验用于比较样本的总体平均值或样本大小大于 30 的两个分布的总体平均值。Z 检验的一个示例是比较不同种族的男性身高。
T 检验用于将总体平均值与样本进行比较,或在样本量小于 30 的两个分布中比较的总体平均值,并且不知道总体的标准差。
T 检验用于将总体平均值与样本进行比较,或在样本量小于 30 的两个分布中比较的总体平均值,并且不知道总体的标准差。
让我们在两个经过数学测试且每个班级有 10 名学生的课程上进行 T 检验:
......@@ -587,7 +587,7 @@ F 统计量由以下公式给出:
![The F distribution](img/3450_02_33.jpg)
`s[1]`是的样本 1 的标准差,大小为`n[1]``s[2]`是样本 2 的标准偏差,大小为`n[2]``σ[1]`是样本 1 的总体标准差,`σ[2]`是样本 2 的总体标准偏差。
`s[1]`是的样本 1 的标准差,大小为`n[1]``s[2]`是样本 2 的标准差,大小为`n[2]``σ[1]`是样本 1 的总体标准差,`σ[2]`是样本 2 的总体标准差。
`f`统计信息的所有可能值的分布称为 F 分布。 下图中的`d1``d2`表示自由度:
......@@ -599,7 +599,7 @@ F 统计量由以下公式给出:
![The chi-square distribution](img/3450_02_35.jpg)
在此,`n`是样本的大小,`s`是样本的标准偏差,`σ`是总体的标准偏差。
在此,`n`是样本的大小,`s`是样本的标准差,`σ`是总体的标准差。
如果我们反复采样并定义卡方统计量,则可以形成卡方分布,该分布由以下概率密度函数定义:
......
......@@ -140,7 +140,7 @@ Coefficient value of the height is [ 1.00092142]
5. 最重的球员是 263 磅。
6. 球员的最佳投篮命中率是 60%。
7. 球员最差的投篮命中率是 29%。
8. 一名球员的平均投篮命中率为 45%,但是从较小的标准差中,我们可以看到大多数球员的投篮命中率在 40% 至 50% 之间。
8. 一名球员的平均投篮命中率为 45%,但是从较小的标准差中,我们可以看到大多数球员的投篮命中率在 40% 至 50% 之间。
9. 在罚球中,有一位球员错过了 3/4 的时间。
10. 最佳罚球手的成功率达到 90%。
11. 大多数球员的罚球成功率约为 70% 至 80%。
......
# 第 8 章。使用协过滤生成建议
# 第 8 章。使用协过滤生成建议
作过滤是使用包括多个代理,视点,数据源等之间的协作的技术对信息或模式进行过滤的过程。 协作过滤方法已应用于许多不同类型的数据,包括感测和监视数据,例如矿物勘探,大面积环境感测或多个传感器; 金融数据,例如集成了许多财务来源的金融服务机构; 或以用户数据等为重点的电子商务和 Web 应用程序中。
同过滤是使用包括多个代理,视点,数据源等之间的协作的技术对信息或模式进行过滤的过程。 协同过滤方法已应用于许多不同类型的数据,包括感测和监视数据,例如矿物勘探,大面积环境感测或多个传感器; 金融数据,例如集成了许多财务来源的金融服务机构; 或以用户数据等为重点的电子商务和 Web 应用程序中。
过滤方法背后的基本原理是,它通过查看自己的品味来寻找彼此相似的人。 假设某人主要喜欢动作片,那么它将尝试找到曾经看过类似电影的人,并且会推荐一个未被第一人看过但被第二人看过的人。 。
过滤方法背后的基本原理是,它通过查看自己的品味来寻找彼此相似的人。 假设某人主要喜欢动作片,那么它将尝试找到曾经看过类似电影的人,并且会推荐一个未被第一人看过但被第二人看过的人。 。
在本章中,我们将重点介绍以下类型的协过滤:
在本章中,我们将重点介绍以下类型的协过滤:
* 基于用户的协同过滤
* 基于项目的协过滤
* 基于项目的协过滤
# 推荐数据
......@@ -55,9 +55,9 @@ movie_user_preferences['William']['Gone Girl']
```
# 基于用户的协过滤
# 基于用户的协过滤
让我们开始,通过查找彼此相似的用户来构建基于用户的协过滤器。
让我们开始,通过查找彼此相似的用户来构建基于用户的协过滤器。
## 寻找相似用户
......@@ -376,15 +376,15 @@ movie_user_preferences['William']['Gone Girl']
```
现在,我们已经创建了一个基于用户的协过滤器。
现在,我们已经创建了一个基于用户的协过滤器。
# 基于项目的协过滤
# 基于项目的协过滤
基于用户的协同过滤查找用户之间的相似性,然后使用用户之间的这些相似性进行推荐。
基于项目的协同过滤可发现项目之间的相似性。 然后将其用于为用户查找新推荐。
首先要开始基于项目的协过滤,我们首先必须将电影放在第一层中,然后将用户放在第二层中,以反转数据集:
首先要开始基于项目的协过滤,我们首先必须将电影放在第一层中,然后将用户放在第二层中,以反转数据集:
```py
>>> def transform_prefs(prefs):
......@@ -552,6 +552,6 @@ movie_user_preferences['William']['Gone Girl']
# 总结
在本章中,您学习了如何执行基于用户和基于项目的协过滤。 您还了解了一些可用于计算用户和项目之间相似度的度量标准,以及如何应用此相似度为最终用户生成建议。
在本章中,您学习了如何执行基于用户和基于项目的协过滤。 您还了解了一些可用于计算用户和项目之间相似度的度量标准,以及如何应用此相似度为最终用户生成建议。
下一章将介绍不同的集成模型,这些模型基本上将多个模型结合起来以提高预测的性能。
\ No newline at end of file
......@@ -470,7 +470,7 @@ import pandas as pd
* **基本知识**,例如类型,唯一值和缺失值
* **分位数统计信息**,例如最小值,Q1,中位数,Q3,最大值,范围和四分位数范围
* **描述性统计数据**,例如均值,众数,标准差,总和,中位数绝对偏差,变异系数,峰度和偏度
* **描述性统计数据**,例如均值,众数,标准差,总和,中位数绝对偏差,变异系数,峰度和偏度
* **最频繁的值**
* **直方图**
* **相关性**突出显示高度相关的变量,以及 Spearman 和 Pearson 矩阵
......
......@@ -571,7 +571,7 @@ In: iris['target'].unique() Out: array(['Iris-setosa', 'Iris-versicolor', 'New l
* `max`:最高值
* `mode`:模式,是最频繁出现的值
* `var`:方差,用于测量值的离散度
* `std`:标准差,是方差的平方根
* `std`:标准差,是方差的平方根
* `mad`:平均绝对偏差,这是一种测量对异常值稳健的值的离散度的方法
* `skew`:偏度的度量,指示分布对称性
* `kurt`:峰度的量度,指示分布形状
......@@ -1466,7 +1466,7 @@ In: std_gaussian = np.random.normal(size=(3,3))
In: gaussian = np.random.normal(loc=1.0, scale= 3.0, size=(3,3))
```
`loc`参数代表平均值,`scale`实际上是标准差。
`loc`参数代表平均值,`scale`实际上是标准差。
用于初始化向量的统计分布的另一个常见选择当然是均匀分布:
......
......@@ -247,7 +247,7 @@ In: import matplotlib.pyplot as plt
**主成分分析****PCA**)是一种有助于定义更小且更相关的功能集的技术。 从 PCA 获得的新特征是当前特征的线性组合(即旋转),即使它们是二进制的。 输入空间旋转后,输出集的第一个向量包含信号的大部分能量(或换句话说,其方差)。 第二个正交于第一个,它包含大部分剩余能量; 第三个与前两个向量正交,并且包含大部分剩余能量,依此类推。 就像通过将尽可能多的信息聚合到 PCA 产生的初始向量上来重构数据集中的信息一样。
在 AWGN 的理想​​情况下,初始向量包含输入信号的所有信息; 靠近末端的仅包含噪音。 此外,由于输出基础是正交的,因此您可以分解并合成输入数据集的近似版本。 能量是决定人能使用多少个基向量的关键参数。 由于该算法在本质上是用于奇异值分解的,因此在阅读有关 PCA 时经常会引用两个特征向量(基本向量)和特征值(与该向量相关的标准差)。 通常,输出集的基数是保证存在 95%(在某些情况下需要 90% 或 99%)输入能量(或方差)的基数。 对 PCA 的严格解释超出了本书的范围,因此,我们仅向您介绍有关如何在 Python 中使用此功能强大的工具的准则。
在 AWGN 的理想​​情况下,初始向量包含输入信号的所有信息; 靠近末端的仅包含噪音。 此外,由于输出基础是正交的,因此您可以分解并合成输入数据集的近似版本。 能量是决定人能使用多少个基向量的关键参数。 由于该算法在本质上是用于奇异值分解的,因此在阅读有关 PCA 时经常会引用两个特征向量(基本向量)和特征值(与该向量相关的标准差)。 通常,输出集的基数是保证存在 95%(在某些情况下需要 90% 或 99%)输入能量(或方差)的基数。 对 PCA 的严格解释超出了本书的范围,因此,我们仅向您介绍有关如何在 Python 中使用此功能强大的工具的准则。
这是有关如何将数据集缩小为二维的示例。 在上一节中,我们推论 2 是降维的好选择; 让我们检查是否正确:
......@@ -550,7 +550,7 @@ In: from sklearn.datasets import load_boston
`StandardScaler`自动标准化为零均值和单位方差。 这是必需的常规操作,应在将数据馈送到学习阶段之前执行。 否则,许多算法将无法正常工作(例如由梯度下降和支持向量机支持的线性模型)。
最后,让我们找到高于三个标准差的绝对值的值:
最后,让我们找到高于三个标准差的绝对值的值:
```py
In: import numpy as np
......@@ -577,7 +577,7 @@ In: print (list(zip(outliers_rows, outliers_columns))) Out: [(55, 1), (56, 1), (
单变量方法可以揭示很多潜在的异常值。 它不会披露没有极值的离群值-相反,它的特征是两个或多个变量中的值异常组合。 在这种情况下,所涉及变量的值甚至可能不是极端值,因此,异常值可能会在单变量检查中未被注意到而消失。 这些离群值称为多元离群值。
为了发现多元离群值,您可以使用降维算法,例如前面说明的 PCA,然后检查超出三个标准差的组件的绝对值,或目视检查双变量图以找到孤立的聚类。 数据点。
为了发现多元离群值,您可以使用降维算法,例如前面说明的 PCA,然后检查超出三个标准差的组件的绝对值,或目视检查双变量图以找到孤立的聚类。 数据点。
Scikit-learn 软件包提供了两个类,这些类可以直接为您自动工作并发出所有可疑情况的信号:
......@@ -1089,7 +1089,7 @@ Out: X train shape, (1078, 64), X validation shape (359, 64),
在我们推荐的交叉验证中,十折是很常见的配置。 对于线性估计等有偏估计量,使用较少的折痕可能会很好,但它可能会惩罚更复杂的机器学习算法。 在某些情况下,您确实需要使用更多的折痕以确保有足够的训练数据供机器学习算法正确归纳。 这在没有足够数据点的医学数据集中很常见。 另一方面,如果手头的示例数量不成问题,则使用更多的折叠会占用更多的计算资源,并且交叉验证完成可能需要更长的时间。 有时,使用五折可以很好地权衡估算的准确性和运行时间。
标准差将提示您模型如何受到训练提供的数据(实际上是模型的方差)的影响,并且平均值提供了对其总体性能的合理估计。 使用从不同模型获得的交叉验证结果的平均值(由于使用了不同的模型类型,或者因为使用了不同的训练变量选择,或者因为模型的不同超参数),您可以放心地选择表现最佳的假设,可进行总体表现测试。
标准差将提示您模型如何受到训练提供的数据(实际上是模型的方差)的影响,并且平均值提供了对其总体性能的合理估计。 使用从不同模型获得的交叉验证结果的平均值(由于使用了不同的模型类型,或者因为使用了不同的训练变量选择,或者因为模型的不同超参数),您可以放心地选择表现最佳的假设,可进行总体表现测试。
我们强烈建议您将交叉验证仅用于优化目的,而不是用于性能估计(也就是说,找出新数据上的模型错误可能是什么)。 交叉验证只是根据最佳平均结果指出最佳算法和参数选择。 将其用于性能评估将意味着使用找到的最佳结果,这比应该的结果更为乐观。 为了报告您可能的性能的无偏估计,您应该首选使用测试集。
......
......@@ -891,7 +891,7 @@ In: from sklearn.datasets import load_boston
对于每个估计量(在我们的示例中,我们有 100 个模型),该算法估计得分以对每个变量的重要性进行排名。 随机森林模型由决策树组成,决策树可以由许多分支组成,因为该算法试图获得非常小的终叶。 如果在随意排列其原始值之后,排列后的模型的结果预测与原始模型的预测相比在准确性方面有很大差异,则认为该变量之一很重要。
重要性向量在估计器的数量上平均,并且估计的标准偏差通过列表理解(重要性和`std`的赋值)进行计算。 现在,根据重要性得分(向量索引)进行排序,结果将投影到带有标准偏差提供的误差线的条形图上。
重要性向量在估计器的数量上平均,并且估计的标准差通过列表理解(重要性和`std`的赋值)进行计算。 现在,根据重要性得分(向量索引)进行排序,结果将投影到带有标准差提供的误差线的条形图上。
在我们的 LSTAT 分析中,该区域中处于较低地位的人口百分比和 RM(即每个住宅的平均房间数)被指出是我们随机森林模型中最具决定性的变量。
......
......@@ -296,7 +296,7 @@ Out:
分类似乎已经很好了。 我们可以做得更好,避免过拟合吗? 是的,这是我们可以使用的:
* **丢弃层**:这等效于正则化,并且可以防止过拟合。 基本上,在训练的每个步骤中,都会停用一部分单元,因此该层的输出不会过分依赖其中的一些单元。
* **批量规范化层**:通过减去批次平均值并将其除以标准差,此 z 标准化层。 这对于更新数据很有用,并且在每个步骤都会放大/衰减信号。
* **批量规范化层**:通过减去批次平均值并将其除以标准差,此 z 标准化层。 这对于更新数据很有用,并且在每个步骤都会放大/衰减信号。
* **最大池化**:这是一个非线性变换,用于通过对内核下的每个区域应用最大滤波器来对输入进行下采样。 用于选择最大功能,该功能在同一类中的位置可能略有不同。
除此之外,总是有改变深层网络和训练属性的空间。 也就是说,优化程序(及其参数),批量大小和时期数。 在下一个单元格中,这里是具有以下几层的改进的深层网络:
......
......@@ -1153,7 +1153,7 @@ Out: Row(features=SparseVector(41, {1: 8.0, 7: 181.0, 15: 1.0, 16: 2.0, 22:
最后,我们到达了任务的热点:训练分类器。 分类器包含在`pyspark.ml.classification`包中,对于本示例,我们使用随机森林。 对于 Spark 2.3.1,可以在[这个页面](https://spark.apache.org/docs/2.3.1/ml-classification-regression.html)中找到可用的算法的广泛列表。 算法列表非常完整,包括线性模型,SVM,朴素贝叶斯和树集成。 请注意,并非所有这些工具都能够处理多类问题,并且可能具有不同的参数。 始终检查与使用版本有关的文档。 除分类器外,Spark 2.3.1 中使用 Python 接口实现的其他学习器如下:
* 群集(`pyspark.ml.clustering`程序包):KMeans
* 推荐人(`pyspark.ml.recommendation`软件包):ALS(协过滤推荐器,基于交替最小二乘法)
* 推荐人(`pyspark.ml.recommendation`软件包):ALS(协过滤推荐器,基于交替最小二乘法)
让我们回到 KDD99 挑战的目标。 现在,该实例化随机森林分类器并设置其参数了。 要设置的参数是`featuresCol`(包含特征矩阵的列),`labelCol`(包含目标标签的数据框的列),`seed`(使实验可复制的随机种子)和`maxBins` (用于树的每个节点中的分割点的最大箱子数)。 森林中树木数量的默认值为`20`,每棵树的最大深度为 5 级。 此外,默认情况下,此分类器在`DataFrame`中创建三个输出列:`rawPrediction`(用于存储每个可能标签的预测得分),`probability`(用于存储每个标签的可能性)和`prediction`(最可能的标签):
......
......@@ -111,7 +111,7 @@
数据管道的构建涉及多个人:
* **数据工程师**:他们负责设计和操作信息系统。 换句话说,数据工程师负责与数据源进行接口,以原始格式获取数据,然后对其进行按摩(有些人称此数据为问题),直到准备好进行分析为止。 在 Amazon 推荐系统示例中,他们将实现流处理管道,该流处理管道从记录的电子商务系统中捕获并汇总特定的消费者交易事件并将其存储到数据仓库中。
* **数据科学家**:他们分析数据并建立提取见解的分析方法。 在我们的 Amazon 推荐系统示例中,他们可以使用连接到数据仓库的 Jupyter笔记本加载数据集并使用[过滤算法](https://en.wikipedia.org/wiki/Collaborative_filtering)
* **数据科学家**:他们分析数据并建立提取见解的分析方法。 在我们的 Amazon 推荐系统示例中,他们可以使用连接到数据仓库的 Jupyter笔记本加载数据集并使用[过滤算法](https://en.wikipedia.org/wiki/Collaborative_filtering)
* **开发人员**:他们负责将分析操作化为针对业务用户(业务分析师,C-Suite,最终用户等)的应用程序。 同样,在 Amazon 推荐系统中,开发人员将在用户完成购买或通过定期电子邮件后显示推荐产品的列表。
* **业务用户**:包括使用数据科学分析输出的所有用户,例如,业务分析人员分析仪表板以监视业务的健康状况,或者使用提供以下建议的应用程序监视最终用户: 接下来要买什么。
......
......@@ -24,7 +24,7 @@ Scala 还提供了一种非常简洁的语法,可以将其转换为更少的
因此,对于像我这样开始涉足数据科学的开发人员来说,Scala 似乎是一个更自然的选择,但是,扰流警报却使我们最终专注于 Python。 这种选择有多种原因:
* Python 作为一种语言,本身也有很多发展。 它是一种动态编程语言,具有与 Scala 相似的优点,例如函数式编程,简洁的语法等。
* Python 作为一种语言,本身也有很多发展。 它是一种动态规划语言,具有与 Scala 相似的优点,例如函数式编程,简洁的语法等。
* 在过去的几年中,Python 见证了数据科学家的飞速发展,已取代长期的竞争对手 R 作为数据科学的整体首选语言,这可以通过在 Google 趋势中快速搜索术语“Python 数据科学”,“Python 机器学习”,“R 数据科学”和“R 机器学习”来证明:
![Why choose Python?](img/00011.jpeg)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册