提交 5ae3d29c 编写于 作者: W wizardforcel

2021-03-09 23:12:55

上级 fe74a8c1
......@@ -225,7 +225,7 @@ R 平方值原来是`0.6`,这并不奇怪,因为我们在训练数据上对
您可能会猜到您的作业是什么。 因此,我们知道 8 阶多项式不是很有用。 你能做得更好吗? 因此,我希望您回顾一下我们的示例,并对要用于拟合的次数多项式使用不同的值。 将该 8 更改为不同的值,然后查看是否可以找出使用训练/测试作为度量标准的多项式最有效的分数。 您在哪里可以得到最佳的 R 平方分数作为测试数据? 这里适合什么程度? 去玩吧。 这应该是一个非常容易的练习,同时对您也非常有启发性。
因此,这实际上是培训/测试,这是掌握的一项非常重要的技术,并且您将一遍又一遍地使用它,以确保您的结果很好地适合您所拥有的模型,并且您的 结果可以很好地预测看不见的值。 这是在进行建模时防止过度拟合的好方法。
因此,这实际上是培训/测试,这是掌握的一项非常重要的技术,并且您将一遍又一遍地使用它,以确保您的结果很好地适合您所拥有的模型,并且您的结果可以很好地预测看不见的值。 这是在进行建模时防止过度拟合的好方法。
# 贝叶斯方法-概念
......@@ -314,7 +314,7 @@ data = data.append(dataFrameFromDirectory(
如果您在这里玩耍,请确保修改传递给`dataFrameFromDirectory()`函数的路径以匹配您在系统中安装书籍资料的位置! 同样,如果您使用的是 Mac 或 Linux,请注意反斜杠和正斜杠以及所有其他内容。 在这种情况下,这没关系,但是如果您不在 Windows 上,则不会有驱动器号。 因此,只需确保这些路径实际上指向此示例的`spam``ham`文件夹所在的位置即可。
接下来,`dataFrameFromDirectory()`是我编写的函数,基本上说我有一个目录的路径,并且我知道给它指定了分类,垃圾邮件或火腿,然后它使用了我也编写的`readFiles()`函数,该函数将进行迭代 通过目录中的每个文件。 因此,`readFiles()`使用`os.walk()`功能来查找目录中的所有文件。 然后,它为该目录中的每个文件建立完整的路径名,然后将其读入。在读入时,它实际上跳过了每封电子邮件的标题,并直接转到文本,并且 通过查找第一个空白行
接下来,`dataFrameFromDirectory()`是我编写的函数,基本上说我有一个目录的路径,并且我知道给它指定了分类,垃圾邮件或火腿,然后它使用了我也编写的`readFiles()`函数,该函数将迭代目录中的每个文件。 因此,`readFiles()`使用`os.walk()`功能来查找目录中的所有文件。 然后,它为该目录中的每个文件建立完整的路径名,然后将其读入。在读入时,它实际上跳过了每封电子邮件的标题,并通过查找第一个空白行直接转到文本
它知道在第一个空行之后的所有内容实际上都是邮件正文,而在第一个空行之前的所有内容只是一堆标题信息,我实际上并不想在上面训练垃圾邮件分类器。 因此,它既给我返回了每个文件的完整路径,又给了邮件正文。 这就是我们读取所有数据的方式,这就是大部分代码!
......@@ -419,7 +419,7 @@ K 均值聚类是机器学习中一种非常普遍的技术,您仅尝试获取
因此,K 均值聚类存在一些限制。 他们来了:
1. **选择 K**:首先,我们需要选择正确的 K 值,这根本不是一件容易的事情。 选择 K 的主要方法是从低开始,并根据想要的组数不断增加 K 的值,直到不再大幅度减少平方误差为止。 如果查看每个点到其质心的距离,可以将其视为误差度量。 在停止减少该错误指标的那一刻,您知道您可能有太多的群集。 因此,此时您无法通过添加其他集群真正获得任何更多信息。
2. **避免局部最小值**:此外,存在局部最小值的问题。 您可能会对最初选择的质心感到非常不走运,而且它们最终可能只收敛于局部现象,而不是更多的全局簇,因此通常,您需要运行几次并可能求平均结果。 我们称这种集成学习。 我们稍后再讨论,但是使用一组不同的随机初始值多次运行 K 均值总是一个好主意,只是看看您是否最终得到相同的总体结果 或不
2. **避免局部最小值**:此外,存在局部最小值的问题。 您可能会对最初选择的质心感到非常不走运,而且它们最终可能只收敛于局部现象,而不是更多的全局簇,因此通常,您需要运行几次并可能求平均结果。 我们称这种集成学习。 我们稍后再讨论,但是使用一组不同的随机初始值多次运行 K 均值总是一个好主意,只是看看您是否最终得到相同的总体结果。
3. **标记群集**:最后,K 均值聚类的主要问题是没有针对您获得的集群的标签。 它只会告诉您这组数据点在某种程度上是相关的,但是您不能在上面加上名称。 它无法告诉您该群集的实际含义。 假设我正在看一堆电影,并且 K 均值聚类告诉我这堆科幻电影就在这里,但我不会将它们称为“科幻”电影。 我要真正去研究数据并弄清楚,这些东西到底有什么共同点? 我怎么用英语来描述? 那是最困难的部分,而 K 均值并不能帮助您。 再次说明,Scikit-learn 使执行此操作变得非常容易。
现在让我们来看一个例子,将 K 均值聚类付诸实践。
......@@ -498,11 +498,11 @@ plt.show()
# 活动
因此,我希望您为某项活动做的是尝试使用不同的 k 值,然后查看最终结果。 只是盯着前面的图,看起来四个就可以了。 真的吗 如果我增加 k 太大会怎样? 我的结果如何? 它试图将事物分解成什么,甚至有意义? 因此,尝试一下,尝试使用`k`的不同值。 因此,在`n_clusters()`功能中,将 5 更改为其他值。 再次运行所有内容,看看最终结果如何。
因此,我希望您为某项活动做的是尝试使用不同的 k 值,然后查看最终结果。 只是盯着前面的图,看起来四个就可以了。 真的吗如果我增加 k 太大会怎样? 我的结果如何? 它试图将事物分解成什么,甚至有意义? 因此,尝试一下,尝试使用`k`的不同值。 因此,在`n_clusters()`功能中,将 5 更改为其他值。 再次运行所有内容,看看最终结果如何。
这就是 K 均值聚类的全部内容。 就这么简单。 您可以只使用 Scikit-learn 的`cluster`中的`KMeans`东西。 唯一的难题:请确保您缩放数据,对其进行规范化。 您要确保使用 K 均值的事物彼此可比,并且`scale()`函数将为您做到这一点。 因此,这些是 K 均值聚类的主要内容。 非常简单的概念,甚至更简单地使用 Scikit-learn 进行操作。
这里的所有都是它的。 这就是 K 均值聚类。 因此,如果您有一堆未分类的数据,并且事先没有真正的正确答案,那么这是一种尝试自然地找到有趣的数据分组的好方法,也许可以让您深入了解什么 该数据是。 这是一个很好的工具。 我以前在现实世界中使用过它,而且使用起来并不难,因此请将其保存在您的工具箱中。
这里的所有都是它的。 这就是 K 均值聚类。 因此,如果您有一堆未分类的数据,并且事先没有真正的正确答案,那么这是一种尝试自然地找到有趣的数据分组的好方法,也许可以让您深入了解该数据是什么。 这是一个很好的工具。 我以前在现实世界中使用过它,而且使用起来并不难,因此请将其保存在您的工具箱中。
# 测量熵
......@@ -520,7 +520,7 @@ plt.show()
![](img/b3ae9e6d-662c-4568-b28f-e9fed56739e7.jpg)
您为每个单独的类加起来。 例如,如果数据的比例(即,对于给定的类别)为 0,则对总熵的贡献为 0。如果所有内容都是该类别,则对总熵的贡献也为 0,因为在任一情况下 情况是,如果什么都不是此类,或者什么都不是此类,则对整体熵没有任何贡献。
您为每个单独的类加起来。 例如,如果数据的比例(即,对于给定的类别)为 0,则对总熵的贡献为 0。如果所有内容都是该类别,则对总熵的贡献也为 0,因为在任一情况下,如果什么都是此类,或者什么都不是此类,则对整体熵没有任何贡献。
中间的东西是类的熵,这种分类和其他东西混合在一起。 将所有这些项加在一起时,最终得到整个数据集的整体熵。 因此,从数学上讲,这就是它的工作原理,但是概念又非常简单。 它只是衡量数据集混乱程度,数据中事物的相同或不同程度的一种度量。
......@@ -571,7 +571,7 @@ plt.show()
# 随机森林技术
现在,决策树的一个问题是它们很容易过度拟合,因此您最终可能会得到一个决策树,该树对于您训练过的数据非常有效,但是对于实际预测正确的分类可能不是那么好 以前从未见过的新朋友。 决策树都是为了为您提供的培训数据做出正确的决策,但是也许您没有真正考虑正确的属性,也许您没有给予足够的代表性样本以供学习 。 这可能会导致实际问题。
现在,决策树的一个问题是它们很容易过度拟合,因此您最终可能会得到一个决策树,该树对于您训练过的数据非常有效,但是对以前从未见过的新朋友实际预测正确的分类可能不是那么好。 决策树都是为了为您提供的培训数据做出正确的决策,但是也许您没有真正考虑正确的属性,也许您没有给予足够的代表性样本以供学习 。 这可能会导致实际问题。
因此,为了解决这个问题,我们使用了一种称为随机森林的技术,该技术的思想是针对多个不同的决策树,以不同的方式对训练的数据进行采样。 每个决策树都从我们的训练数据集中获取不同的随机样本,并从中构造出一棵树。 然后,每个结果树都可以对正确的结果进行投票。
......@@ -662,7 +662,7 @@ clf = clf.fit(X,y)
此代码提取整个`Hired`列,并将其命名为`y`。 然后,它将所有列用于特征数据,并将其放入`X`中。 这是所有数据和所有功能列的集合,`X``y`是我们的决策树分类器需要的两件事。
要实际创建分类器本身,需要执行两行代码:调用`tree.DecisionTreeClassifier()`创建分类器,然后将其拟合到特征数据(`X`)和答案(`y`)中-无论人们是否 雇用。 因此,让我们继续进行操作。
要实际创建分类器本身,需要执行两行代码:调用`tree.DecisionTreeClassifier()`创建分类器,然后将其拟合到特征数据(`X`)和答案(`y`)中-无论人们是否雇用。 因此,让我们继续进行操作。
显示图形数据有些棘手,我不想在这里过多分散我们的细节,因此请考虑以下样板代码。 您无需了解 GraphViz 在这里的工作方式-点文件以及所有其他内容:对于我们现在的旅程而言,这并不重要。 实际显示决策树的最终结果所需的代码很简单:
......@@ -749,7 +749,7 @@ print clf.predict([[10, 0, 4, 0, 0, 0]])
几年前的一个很好的例子是 Netflix 奖。 Netflix 举办了一场竞赛,他们向可以超越现有电影推荐算法的任何研究人员提供一百万美元。 获胜的方法是整体方法,实际上他们可以一次运行多个推荐算法,然后让他们都对最终结果进行投票。 因此,集成学习可以是一种非常强大但简单的工具,可以提高机器学习中最终结果的质量。 现在让我们尝试探索各种类型的集成学习:
* **自举集成或装袋**:现在,随机森林使用一种称为袋装的技术,是自举集成的简称。 这意味着我们将从训练数据中随机抽取一些子样本,并将其输入相同模型的不同版本中,然后让它们全部对最终结果进行投票。 如果您还记得的话,随机森林采用了许多不同的决策树,它们使用训练数据的不同随机样本进行训练,然后它们最终聚集在一起,对最终结果进行投票。 装袋。
* **提升**: 提升是一个替代模型,这里的想法是从一个模型开始,但是每个后续模型都会增强处理那些被先前模型错误分类的区域的属性。 因此,您在模型上进行训练/测试,找出根本上出错的属性,然后在后续模型中增强这些属性-希望那些后续模型会更多地关注它们并得到它们 正确的。 因此,这就是推动发展的总体思路。 您可以运行一个模型,找出其薄弱环节,并在不断发展时将重点放在这些薄弱环节上,并基于前一个薄弱环节,继续构建越来越多的模型以不断完善该模型。
* **提升**: 提升是一个替代模型,这里的想法是从一个模型开始,但是每个后续模型都会增强处理那些被先前模型错误分类的区域的属性。 因此,您在模型上进行训练/测试,找出根本上出错的属性,然后在后续模型中增强这些属性-希望那些后续模型会更多地关注它们并正确得到它们。 因此,这就是推动发展的总体思路。 您可以运行一个模型,找出其薄弱环节,并在不断发展时将重点放在这些薄弱环节上,并基于前一个薄弱环节,继续构建越来越多的模型以不断完善该模型。
* **模型桶**: Netflix 获奖者所做的另一项技术称为模型桶,您可能会使用完全不同的模型来预测某些事物。 也许我正在使用 K 均值,决策树和回归。 我可以在一组训练数据上同时运行所有这三个模型,并在我试图预测某些结果时让它们全部对最终分类结果进行投票。 也许这比孤立使用其中任何一个模型要好。
* **堆叠**:堆叠具有相同的想法。 因此,您可以对数据运行多个模型,并以某种方式将结果组合在一起。 在存储桶和堆叠模型之间的细微区别是,您选择了获胜的模型。 因此,您将进行训练/测试,找到最适合您的数据的模型,然后使用该模型。 相比之下,堆叠会将所有这些模型的结果组合在一起,以得出最终结果。
......@@ -882,7 +882,7 @@ plotPredictions(svc)
您可以在这里看到它已尽力而为。 鉴于它必须绘制直线和多边形,因此在拟合我们拥有的数据方面做得不错。 所以,您知道,它确实错过了一些-但总的来说,结果还不错。
SVC 实际上是一种非常强大的技术。 它的真正优势在于高维特征数据。 继续玩吧。 顺便说一句,如果您不仅要可视化结果,还可以在 SVC 模型上使用`predict()`函数,就像在 Scikit-learn 中的几乎所有模型上一样,可以传入您感兴趣的特征数组 如果我要预测 40 岁的年收入 200,000 美元的人的分类,我将使用以下代码:
SVC 实际上是一种非常强大的技术。 它的真正优势在于高维特征数据。 继续玩吧。 顺便说一句,如果您不仅要可视化结果,还可以在 SVC 模型上使用`predict()`函数,就像在 Scikit-learn 中的几乎所有模型上一样,可以传入您感兴趣的特征数组 如果我要预测 40 岁的年收入 200,000 美元的人的分类,我将使用以下代码:
```py
svc.predict([[200000, 40]])
......
......@@ -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)
......
......@@ -126,7 +126,7 @@
# 线性回归
线性回归是建模中的方法,可帮助建模标量因变量`Y`与自变量`X`之间的标量线性关系,后者可以是一个或多个值:
线性回归是建模中的方法,可帮助建模标量因变量`Y`与自变量`X`之间的标量线性关系,后者可以是一个或多个值:
![Linear regression](img/B03450_05_05.jpg)
......
# 第 6 章。使用线性回归执行预测
线性回归分析是所有统计技术中使用最广泛的:它是研究变量之间的线性,加性关系。 它在各个行业中广泛用于创建模型,这将对业务有所帮助。 例如,在零售行业中,有多种因素影响产品的销售。 这些因素可能是价格,促销或季节性因素,仅举几例。 线性回归模型有助于理解这些因素中的每一项对产品销售的影响以及计算基准销售,这是在没有外部因素的情况下该产品的销售数量,例如 价格,促销等。
线性回归分析是所有统计技术中使用最广泛的:它是研究变量之间的线性,加性关系。 它在各个行业中广泛用于创建模型,这将对业务有所帮助。 例如,在零售行业中,有多种因素影响产品的销售。 这些因素可能是价格,促销或季节性因素,仅举几例。 线性回归模型有助于理解这些因素中的每一项对产品销售的影响以及计算基准销售,这是在没有外部因素的情况下该产品的销售数量,例如价格,促销等。
在上一章中,向您介绍了线性回归以及一个简单的线性回归示例。 在本章中,您将学习如何创建以下内容:
......@@ -15,7 +15,7 @@
y = A + Bx
```
这里,`y`是因变量,`x`是自变量,`A`是截距(其中`x`等于 零),`B`是系数
这里,`y`是因变量,`x`是自变量,`A`是截距(其中`x`等于零),`B`是系数
我们将使用的数据集包含一个男性样本的身高(cm)和体重(kg)。
......@@ -197,7 +197,7 @@ Coefficient value of the height is [ 1.00092142]
![Multiple regression](img/3450_06_08.jpg)
我们可以看到 105 磅似乎是一个离群值,并且平均得分也相对较低。 我们还可以看到几乎是 240 磅的球员在得分方面有最大的变化,因此可以假设高矮的球员得分更高,而矮矮的球员得分更高 得分较低。
我们可以看到 105 磅似乎是一个离群值,并且平均得分也相对较低。 我们还可以看到几乎是 240 磅的球员在得分方面有最大的变化,因此可以假设高矮的球员得分更高,而矮矮的球员得分较低。
现在,让我们看看成功的射门得分和平均得分之间的分布:
......
......@@ -1225,9 +1225,9 @@ In: print (type(iris.data)) Out: <class 'numpy.ndarray'>
`Iris.data`提供名为`sepal length``sepal width``petal length``petal width`的变量的数值,它们以矩阵形式`(150, 4)`排列,其中 150 是观察数,4 是特征数量。 变量的顺序是`iris.feature_names`中显示的顺序。
`Iris.target`是整数的向量,其中每个数字代表一个不同的类(请参阅`target_names`的内容;每个类名称都与其索引号和*山鸢尾*相关,该零元素是零元素 列表中的,在目标向量中表示为`0`
`Iris.target`是整数的向量,其中每个数字代表一个不同的类(请参阅`target_names`的内容;每个类名称都与其索引号和*山鸢尾*相关,它是列表中的零元素,在目标向量中表示为`0`
`Iris flower`数据集由现代统计分析之父之一的罗纳德·费舍尔(Ronald Fisher)于 1936 年首次使用,目的是通过一小部分可通过经验验证的示例(每个 150 个数据点)展示线性判别分析的功能 代表鸢尾花)。 这些示例被安排在树木平衡的物种类别中(每个类别由三分之一的示例组成),并提供了四个度量描述变量,这些变量在组合时能够分离类别。
`Iris flower`数据集由现代统计分析之父之一的罗纳德·费舍尔(Ronald Fisher)于 1936 年首次使用,目的是通过一小部分可通过经验验证的示例(150 个数据点的每个代表鸢尾花)展示线性判别分析的功能。 这些示例被安排在树木平衡的物种类别中(每个类别由三分之一的示例组成),并提供了四个度量描述变量,这些变量在组合时能够分离类别。
使用这种数据集的优势在于,从监督学习到图形表示,可以很容易地出于不同目的加载,处理和探索。 无论其规格如何,在任何计算机上进行建模活动几乎都不会花费时间。 而且,类与显式变量的作用之间的关系是众所周知的。 因此,任务是艰巨的,但不是很艰巨。
......
......@@ -22,7 +22,7 @@
特别是在面对新挑战时,上传数据可以证明自己是数据科学家工作的关键部分。 您的数据可以来自多种来源:数据库,CSV 或 Excel 文件,原始 HTML,图像,录音,API(如果您对 API 的含义一无所知,[则可以在此处阅读有关使用 Python 的 API 的很好的教程](https://www.dataquest.io/blog/python-api-tutorial/))提供 **JavaScript 对象表示法****JSON**)文件,依此类推。 鉴于存在多种选择,我们将通过提供基本工具来简要介绍这一方面,方法是使用硬盘上存在的文本文件或将 Web 或**关系数据库管理系统****RDBMS**)中的表格。
成功上传数据后,进入数据整理阶段。 尽管现在已经可以在内存中使用,但您的数据肯定会以不适合任何分析和实验的形式出现。 现实世界中的数据非常复杂,混乱,有时甚至是错误或丢失。 但是,由于有了一系列基本的 Python 数据结构和命令,您将解决所有有问题的数据,并将其输入到项目的下一个阶段,并适当地转换为一个典型的数据集,该数据集的行和列的变量均具有观察值。 数据集是任何统计和机器学习分析的基本要求,您可能会听到它被提及为平面文件(当它是将数据库中多个关系表连接在一起的结果时)或数据矩阵(当列和行为 未标记,并且其中包含的值只是数字)。
成功上传数据后,进入数据整理阶段。 尽管现在已经可以在内存中使用,但您的数据肯定会以不适合任何分析和实验的形式出现。 现实世界中的数据非常复杂,混乱,有时甚至是错误或丢失。 但是,由于有了一系列基本的 Python 数据结构和命令,您将解决所有有问题的数据,并将其输入到项目的下一个阶段,并适当地转换为一个典型的数据集,该数据集的行和列的变量均具有观察值。 数据集是任何统计和机器学习分析的基本要求,您可能会听到它被提及为平面文件(当它是将数据库中多个关系表连接在一起的结果时)或数据矩阵(当列和行为未标记,并且其中包含的值只是数字)。
尽管与其他刺激性阶段(例如应用算法或机器学习)相比,数据回馈的回报不高,但是数据处理为您可能想获得的每个复杂而复杂的增值分析奠定了基础。 项目的成功很大程度上取决于它。
......@@ -46,7 +46,7 @@
# 快速简便的数据加载
让我们从 CSV 文件和Pandas开始。 Pandas 库提供了最可访问且最完整的功能,可以从文件(或 URL)中加载表格数据。 默认情况下,它将以专用的Pandas数据结构存储数据,为每一行建立索引,通过自定义分隔符分隔变量,为每一列推断正确的数据类型,转换数据(如有必要),以及解析日期,缺失值和 错误的值。
让我们从 CSV 文件和Pandas开始。 Pandas 库提供了最可访问且最完整的功能,可以从文件(或 URL)中加载表格数据。 默认情况下,它将以专用的Pandas数据结构存储数据,为每一行建立索引,通过自定义分隔符分隔变量,为每一列推断正确的数据类型,转换数据(如有必要),以及解析日期,缺失值和错误的值。
我们将首先导入 Pandas 包并阅读我们的`Iris`数据集:
......@@ -208,7 +208,7 @@ In: fake_dataset.fillna(fake_dataset.mean(axis=0))
请注意,`axis= 0`表示对跨越行的均值的计算; 结果获得的均值是从逐列计算得出的。 相反,`axis=1`跨列,因此获得了逐行结果。 对于其他要求使用`axis`参数的其他方法(在 Pandas 和 NumPy 中),其工作方式相同。
`.median`方法类似于`.mean`,但是它计算中值,如果分布太偏斜(例如,当 有很多极限值)。
`.median`方法类似于`.mean`,但是它计算中值,如果分布太偏斜(例如,有很多极限值的时候)。
处理实际数据集时,另一个可能的问题是加载包含错误或错误行的数据集时。 在这种情况下,`read_csv`方法的默认行为是停止并引发异常。 一种可能的解决方法是忽略导致错误的行,这在错误的示例不是多数的情况下是可行的。 在许多情况下,这种选择仅具有训练机器学习算法而没有错误观察的含义。 举个例子,假设您有一个格式错误的数据集,并且您只想加载所有好的行而忽略格式错误的行。
......@@ -287,7 +287,7 @@ In:import csv
这是一个使用 CSV 软件包中的此类功能的简单示例。
让我们假设从[这个页面](http://mldata.org/)下载的`datasets-uci-iris.csv`文件是一个巨大的文件,我们无法将其完全加载到内存中(实际上,我们只是假装这是 这种情况是因为我们记得我们在本章的开头看到了该文件;它仅由 150 个示例组成,并且 CSV 缺少标题行)。
让我们假设从[这个页面](http://mldata.org/)下载的`datasets-uci-iris.csv`文件是一个巨大的文件,我们无法将其完全加载到内存中(实际上,我们只是假装这种情况是因为我们记得我们在本章的开头看到了该文件;它仅由 150 个示例组成,并且 CSV 缺少标题行)。
因此,我们唯一的选择是将其加载到块中。 首先,让我们进行一个实验:
......@@ -360,7 +360,7 @@ In: import numpy as np
['4.7' '3.2' '1.3' '0.2' 'Iris-setosa']]
```
这样的功能可以为随机梯度下降学习提供基本功能,如第 4 章,“机器学习”中所述,我们将回到这段代码并进行扩展 通过引入一些更高级的示例,此示例。
这样的功能可以为随机梯度下降学习提供基本功能,如第 4 章,“机器学习”中所述,我们将回到这段代码并通过引入一些更高级的示例,来扩展这个示例。
# 访问其他数据格式
......
......@@ -1757,7 +1757,7 @@ In: import numpy as np
classifier = LogisticRegression(C=0.1, penalty='l1', random_state=101)
```
这样做之后,我们指示并行执行 PCA,`KernelPCA`和两个自定义转换器-一个仅按原样传递功能,而另一个按逆向传递。 您可以期望`transformer_list`中的每个元素都适合,应用转换以及所有结果按列堆叠在一起,但是仅当执行`transform`方法时(这是一个懒惰的执行;定义`FeatureUnion`不会 触发任何执行)。
这样做之后,我们指示并行执行 PCA,`KernelPCA`和两个自定义转换器-一个仅按原样传递功能,而另一个按逆向传递。 您可以期望`transformer_list`中的每个元素都适合,应用转换以及所有结果按列堆叠在一起,但是仅当执行`transform`方法时(这是一个懒惰的执行;定义`FeatureUnion`不会触发任何执行)。
您还会发现使用`make_pipeline``make_union`命令获得相同结果很有用。 实际上,这些命令可以生成`FeatureUnion``Pipeline`类,可以将它们设置为输出。 值得一提的是,它们不需要您命名步骤,因为该功能将自动完成命名:
......
......@@ -114,7 +114,7 @@ In: %timeit regr.fit(X_train, y_train) Out: 544 µs ± 37.4 µs per loop
`W`可以借助矩阵求逆(或更可能是伪求逆,这是一种计算有效的方法)和点积的帮助容易地找到。 这就是线性回归如此之快的原因。 请注意,这只是一个简单的解释-实际方法添加了另一个虚拟功能来补偿过程的偏差。 但是,这并没有很大程度地改变回归算法的复杂性。
我们现在进行逻辑回归。 尽管顾名思义,它是一个分类器,而不是回归器。 它只能用于仅处理两个类的分类问题(二进制分类)。 通常,目标标签是布尔值; 也就是说,它们的值为`True/False`或 0/1(指示是否存在预期结果)。 在我们的示例中,我们继续使用相同的数据集。 目标是猜测房屋价值是高于还是低于我们感兴趣的阈值的平均值。本质上,我们从回归问题转向二元分类问题,因为现在我们的目标是猜测一个示例的可能性有多大 成为一个小组的一部分。 我们开始使用以下命令来准备数据集:
我们现在进行逻辑回归。 尽管顾名思义,它是一个分类器,而不是回归器。 它只能用于仅处理两个类的分类问题(二进制分类)。 通常,目标标签是布尔值; 也就是说,它们的值为`True/False`或 0/1(指示是否存在预期结果)。 在我们的示例中,我们继续使用相同的数据集。 目标是猜测房屋价值是高于还是低于我们感兴趣的阈值的平均值。本质上,我们从回归问题转向二元分类问题,因为现在我们的目标是猜测一个示例成为一个小组的一部分的可能性有多大。 我们开始使用以下命令来准备数据集:
```py
In: import numpy as np
......@@ -438,7 +438,7 @@ In: import numpy as np
首先是关于 SVM 对不同规模和大量变量的敏感性。 与基于线性组合的其他学习算法类似,具有不同比例的变量会使该算法被具有较大范围或方差的特征所控制。 而且,极高或极低的数目可能在学习算法的优化过程中引起问题。 建议以有限的时间间隔缩放所有数据,例如`[0, +1]`,这是使用稀疏数组时的必要选择。 实际上,希望保留零个条目。 否则,数据将变得密集,从而消耗更多的内存。 您也可以将数据缩放到`[-1, +1]`间隔。 或者,您可以将它们标准化为零均值和单位方差。 您可以从预处理模块中使用`MinMaxScaler``StandardScaler`实用程序类,方法是先将它们拟合到训练数据上,然后转换训练和测试集。
第二个方面是关于不平衡的阶级。 该算法倾向于偏爱频繁类。 除了重采样或下采样(将多数类减少为较小的相同数目)之外,一种解决方案是根据类的频率加权`C`惩罚参数(低值将对类进行更多的惩罚,高值将对类进行更多的惩罚) 。 对于不同的实现,有两种方法可以实现此目的。 首先,SVC 中有`class_weight`参数(可以将其设置为关键字`balanced`,或提供包含每个类的特定值的字典)。 然后,在`SVC``NuSVC``SVR``NuSVR``OneClassSVM``.fit()`方法中还有`sample_weight`参数(它需要一维数组作为输入,其中每个 位置是指每个训练示例的权重)。
第二个方面是关于不平衡的阶级。 该算法倾向于偏爱频繁类。 除了重采样或下采样(将多数类减少为较小的相同数目)之外,一种解决方案是根据类的频率加权`C`惩罚参数(低值将对类进行更多的惩罚,高值将对类进行更多的惩罚) 。 对于不同的实现,有两种方法可以实现此目的。 首先,SVC 中有`class_weight`参数(可以将其设置为关键字`balanced`,或提供包含每个类的特定值的字典)。 然后,在`SVC``NuSVC``SVR``NuSVR``OneClassSVM``.fit()`方法中还有`sample_weight`参数(它需要一维数组作为输入,其中每个位置是指每个训练示例的权重)。
处理了比例和类的平衡之后,您可以使用Sklearn中`model_selection`模块中的`GridSearchCV`详尽搜索其他参数的最佳设置。 尽管 SVM 可以使用默认参数很好地工作,但是它们通常不是最佳的,并且您需要使用交叉验证来测试各种值组合以找到最佳参数。
......@@ -706,11 +706,11 @@ In: import numpy as np
# XGBoost
XGBoost 代表**极限梯度提升**,这是一个不属于 Scikit-learn 的开源​​项目,尽管最近它已通过 scikit-Learn 包装器接口进行了扩展,该接口使用基于 [XGBoost](http://xgboost.readthedocs.io/en/latest/python/python_api.html#module-xgboost.sklearn) 的模型进行渲染,并已集成到您的计算机中 数据管道
XGBoost 代表**极限梯度提升**,这是一个不属于 Scikit-learn 的开源​​项目,尽管最近它已通过 scikit-Learn 包装器接口进行了扩展,该接口使用基于 [XGBoost](http://xgboost.readthedocs.io/en/latest/python/python_api.html#module-xgboost.sklearn) 的模型进行渲染,并已集成到您的计算机的数据管道中
XGBoost 源代码可从 [GitHub 上](http://github.com/dmlc/XGBoost)获得; 可以在[这个页面](http://xgboost.readthedocs.io/en/latest)上找到其文档和一些教程。
XGBoost 算法在 [Kaggle](http://www.kaggle.com) 和 KDD-cup 2015 等数据科学竞赛中获得了动力和普及。作者报告(Tianqui Chen,Tong He,Carlos Guestrin)报告 在有关该算法的论文中,2015 年期间在 Kaggle 上进行了 29 个挑战,其中有 17 个获奖解决方案使用 XGBoost 作为独立解决方案或作为多个不同模型集合的一部分。
XGBoost 算法在 [Kaggle](http://www.kaggle.com) 和 KDD-cup 2015 等数据科学竞赛中获得了动力和普及。作者(Tianqui Chen,Tong He,Carlos Guestrin)在有关该算法的论文中报告,2015 年期间在 Kaggle 上进行了 29 个挑战,其中有 17 个获奖解决方案使用 XGBoost 作为独立解决方案或作为多个不同模型集合的一部分。
在他们的论文《XGBoost:可扩展树增强系统》中(可在[这个页面](http://learningsys.org/papers/LearningSys_2015_paper_32.pdf)中找到),作者报告说,每个团队也都使用 XGBoost 在最近的 KDD 杯 2015 的前十名中排名第二。
......@@ -775,7 +775,7 @@ In: from sklearn.metrics import accuracy_score, confusion_matrix
[这是它的 GitHub 页面](https://github.com/Microsoft/LightGBM)。 并且,[这里是说明该算法背后思想的学术论文](https://papers.nips.cc/paper/6907-lightgbm-a-highly-efficient-gradient-boosting-decision-tree)
LightGBM 基于决策树以及 XGBoost,但遵循不同的策略。 XGBoost 使用决策树对变量进行拆分,并在该变量上探索不同的切分(逐级树增长策略),而 LightGBM 则专注于拆分并从那里进行拆分,以实现更好的拟合(这就是叶子 明智的树木生长策略)。 这使得 LightGBM 可以首先快速获得数据的良好拟合度,并生成与 XGBoost 相比的替代解决方案(如果您希望将这两个解决方案进行混合(即平均),则可以很好地解决这一问题,以减少估计值的方差) )。
LightGBM 基于决策树以及 XGBoost,但遵循不同的策略。 XGBoost 使用决策树对变量进行拆分,并在该变量上探索不同的切分(逐级树增长策略),而 LightGBM 则专注于拆分并从那里进行拆分,以实现更好的拟合(这就是叶子级别的树木生长策略)。 这使得 LightGBM 可以首先快速获得数据的良好拟合度,并生成与 XGBoost 相比的替代解决方案(如果您希望将这两个解决方案进行混合(即平均),则可以很好地解决这一问题,以减少估计值的方差) )。
从算法上讲,XGBoost 仔细研究了**广度优先搜索****BFS**),而 LightGBM 则是**深度优先搜索****DFS**)。
......@@ -829,7 +829,7 @@ IO 参数定义如何加载(甚至由模型存储)数据:
我们如何调整所有这些参数? 实际上,您可以有效地进行一些操作。 如果要实现更快的计算,只需使用`save_binary`并设置一个较小的`max_bin`即可。 您还可以使用数量较少的`bagging_fraction``feature_fraction`来减少训练集的大小并加快学习过程(以增加解决方案的差异为代价,因为它将从更少的数据中学习)。
如果要通过误差度量获得更高的精度,则应改用较大的`max_bin`(这意味着在使用数字变量时精度更高),应使用较小的`learning_rate`和较大的`num_iterations`(这是必需的,因为算法会收敛 并使用较大的`num_leaves`(尽管可能会导致过拟合)。
如果要通过误差度量获得更高的精度,则应改用较大的`max_bin`(这意味着在使用数字变量时精度更高),应使用较小的`learning_rate`和较大的`num_iterations`(这是必需的,因为算法会收敛),并使用较大的`num_leaves`(尽管可能会导致过拟合)。
在过度拟合的情况下,您可以尝试设置`lambda_l1``lambda_l2``min_gain_to_split`并获得更多的正则化。 您也可以尝试`max_depth`避免生长过深的树木。
......@@ -890,9 +890,9 @@ In: y_probs = bst.predict(covertype_test_X,
# 猫助推器
2017 年 7 月,另一种有趣的 GBM 算法由俄罗斯搜索引擎 Yandex 公开:它是 [CatBoost](https://catboost.yandex/),其名称来自两个词 Category 和 提振。 实际上,它的最强之处是能够处理分类变量,该变量实际上通过采用“一键编码”和“均值编码”的混合策略来充分利用大多数关系数据库中的信息(一种通过分配变量来表达分类级别的方法) 适当的数值来解决手头的问题;稍后再讨论)。
2017 年 7 月,另一种有趣的 GBM 算法由俄罗斯搜索引擎 Yandex 公开:它是 [CatBoost](https://catboost.yandex/),其名称来自两个词 Category 和 Boosting。 实际上,它的最强之处是能够处理分类变量,该变量实际上通过采用“一键编码”和“均值编码”的混合策略来充分利用大多数关系数据库中的信息(一种通过分配变量来表达分类级别的方法) 适当的数值来解决手头的问题;稍后再讨论)。
正如[《CatBoost:具有分类特征的梯度增强支持》](https://pdfs.semanticscholar.org/9a85/26132d3e05814dca7661b96b3f3208d676cc.pdf)所解释的,因为其他 GBM 解决方案都通过一次热编码来处理分类变量 变量(就数据矩阵的内存打印而言而言非常昂贵)或通过将任意数字代码分配给分类级别(至多一种不精确的方法,需要大的分支才能生效),CatBoost 的解决方法有所不同。
正如[《CatBoost:具有分类特征的梯度增强支持》](https://pdfs.semanticscholar.org/9a85/26132d3e05814dca7661b96b3f3208d676cc.pdf)所解释的,因为其他 GBM 解决方案都通过一次热编码来处理分类变量(就数据矩阵的内存打印而言而言非常昂贵)或通过将任意数字代码分配给分类级别(至多一种不精确的方法,需要大的分支才能生效),CatBoost 的解决方法有所不同。
您可以为算法提供分类变量的索引,并设置一个`one_hot_max_size`参数,告诉 CatBoost 使用单热编码来处理分类变量(如果变量的级别小于或等于该级别)。 如果变量具有更多分类级别,从而超过了`one_hot_max_size`参数,则算法将以与均值编码不太相同的方式对它们进行编码,如下所示:
......@@ -943,7 +943,7 @@ In: covertype_train = Pool(data[:15000,:],
None, [10, 11]) covertype_test_y = label[20000:25000]
```
3. 现在是时候设置`CatBoostClassifier`了。 我们决定采用较低的学习率(0.05)和大量的迭代,最大树深度为 8(CatBoost 的实际最大值为 16),针对`MultiClass`进行优化(对数丢失),但同时监控训练和验证的准确性
3. 现在是时候设置`CatBoostClassifier`了。 我们决定采用较低的学习率(0.05)和大量的迭代,最大树深度为 8(CatBoost 的实际最大值为 16),针对`MultiClass`进行优化(对数丢失),但同时监控训练和验证的准确性:
```py
In: model = CatBoostClassifier(iterations=4000,
......@@ -992,7 +992,7 @@ In: from sklearn.metrics import accuracy_score, confusion_matrix
# 创建一些大数据集作为示例
作为大数据分析的典型示例,我们将使用互联网上的一些文本数据,并利用可用的`fetch_20newsgroups`,其中包含 11,314 个帖子的数据,每个帖子平均约 206 个单词,出现在 20 个不同的位置 新闻组
作为大数据分析的典型示例,我们将使用互联网上的一些文本数据,并利用可用的`fetch_20newsgroups`,其中包含 11,314 个帖子的数据,每个帖子平均约 206 个单词,出现在 20 个不同的新闻组中
```py
In: import numpy as np
......@@ -1042,7 +1042,7 @@ In: import os
# 体积可扩展
在不将太多兆字节(或千兆字节)数据加载到内存中的情况下管理大量数据的技巧是一次仅使用部分示例来增量更新算法的参数,然后对以下数据块重复更新,直到 机器学习者至少对所有观察进行了详细阐述。
在不将太多兆字节(或千兆字节)数据加载到内存中的情况下管理大量数据的技巧是一次仅使用部分示例来增量更新算法的参数,然后对以下数据块重复更新,直到机器学习者至少对所有观察进行了详细阐述。
借助`.partial_fit()`方法,这在 Scikit-learn中是可能的,该方法已可用于一定数量的有监督和无监督算法。 通过使用`.partial_fit()`方法并提供一些基本信息(例如,对于分类,您应该事先知道要预测的类的数量),即使您只有一个案例或几个观察结果,也可以立即开始拟合模型 。
......@@ -1596,7 +1596,7 @@ In: dbs_2 = DBSCAN(eps=0.5)
![](img/7d82af20-0c13-43fa-82b8-eccb2b2d8f00.png)
在本节的最后,最后一个重要说明是,在 K 均值和 DBSCAN 的基本介绍中,我们一直使用欧几里得距离,因为它是这些函数中的默认距离度量(尽管其他距离度量也可以是 如果您认为合适的话,可以使用)。 在实际情况下使用此距离时,请记住您必须对每个特征进行归一化(z 归一化),以便每个特征对最终失真的贡献均相等。 如果未对数据集进行规范化,则具有更大支持的功能将对输出标签具有更大的决策权,而这正是我们所不希望的。
在本节的最后,最后一个重要说明是,在 K 均值和 DBSCAN 的基本介绍中,我们一直使用欧几里得距离,因为它是这些函数中的默认距离度量(尽管如果您认为合适的话,其他距离度量也可以使用)。 在实际情况下使用此距离时,请记住您必须对每个特征进行归一化(z 归一化),以便每个特征对最终失真的贡献均相等。 如果未对数据集进行规范化,则具有更大支持的功能将对输出标签具有更大的决策权,而这正是我们所不希望的。
# 潜在狄利克雷分配(LDA)
......
......@@ -268,7 +268,7 @@ In: from sklearn.datasets import fetch_olivetti_faces
![](img/e24af951-ba7f-4658-a831-06d6ef337d7d.png)
我们还可以可视化手写数字或字母。 在我们的示例中,我们将绘制 Scikit-learn 手写数字数据集中的前九个数字,并设置两个轴的范围(通过使用`extent`参数并提供最小值和最大值的列表)以将网格对齐 像素
我们还可以可视化手写数字或字母。 在我们的示例中,我们将绘制 Scikit-learn 手写数字数据集中的前九个数字,并设置两个轴的范围(通过使用`extent`参数并提供最小值和最大值的列表)以将像素对齐网格
```py
In: from sklearn.datasets import load_digits
......@@ -399,7 +399,7 @@ In: hexbin = iris_df.plot(kind='hexbin', x=0, y=1, gridsize=10)
`gridsize`参数指示图表将在一个网格中汇总多少个数据点。 较大的网格将创建大型网格单元,而较小的网格将创建小型网格单元。
散点图是双变量的。 因此,每个变量组合都需要一个图。 如果变量的数量不是很多(否则,可视化将变得混乱),一种快速的解决方案是使用`pandas`命令自动绘制散点图矩阵(使用核密度估计`'kde'`依次 在图表的对角线上绘制每个要素的分布):
散点图是双变量的。 因此,每个变量组合都需要一个图。 如果变量的数量不是很多(否则,可视化将变得混乱),一种快速的解决方案是使用`pandas`命令自动绘制散点图矩阵(使用核密度估计`'kde'`依次在图表的对角线上绘制每个要素的分布):
```py
In: from pandas.plotting import scatter_matrix
......@@ -452,7 +452,7 @@ In: from pandas.tools.plotting import parallel_coordinates
Seaborn 由 Michael Waskom 创建并托管在 [PyData 网站](http://seaborn.pydata.org/)上,是一个将底层 Matplotlib 与整个 pyData 堆栈包装在一起的库,允许集成图表 包含 NumPy 和 Pandas 的数据结构,以及 SciPy 和 StatModels 的统计例程。 借助内置主题以及专为揭示数据模式而设计的调色板,所有这些工作都特别注重美学。
如果您当前尚未在系统上安装 Seaborn(例如,Anaconda 发行版默认提供它),则可以通过`pip``conda`轻松获得它(提醒您`conda`版本可能落后 直接从 PyPI(Python 包索引)获取的`pip`版本后面
如果您当前尚未在系统上安装 Seaborn(例如,Anaconda 发行版默认提供它),则可以通过`pip``conda`轻松获得它(提醒您`conda`版本可能落后于直接从 PyPI(Python 包索引)获取的`pip`版本)
```py
$> pip install seaborn
......@@ -973,7 +973,7 @@ Bottle 是一个 Python 网络框架,是 HTTP 上微型应用程序的起点
![](img/32ba044d-9519-4b05-b757-80fdf329562e.png)
单击**预测**按钮后插入值(`5.1``3.5``1.4``0.2`),应将您重定向到`http://localhost:9099/prediction`,其中`The predictor says it's a setosa`字符串应为 显示。 另外,请注意,如果您在表单中插入无效的条目(例如,将其保留为空或插入字符串而不是数字),则会显示一个 HTML 页面,指出存在错误。
单击**预测**按钮后插入值(`5.1``3.5``1.4``0.2`),应将您重定向到`http://localhost:9099/prediction`,其中应显示`The predictor says it's a setosa`字符串。 另外,请注意,如果您在表单中插入无效的条目(例如,将其保留为空或插入字符串而不是数字),则会显示一个 HTML 页面,指出存在错误。
我们已经完成了本节的一半,并且已经看到了用 Bottle 创建 HTTP 端点是多么容易和快捷。 现在,让我们尝试创建一个可以在任何程序中调用的预测即服务。 我们将以`get`调用的形式提交特征向量,并且返回的预测将为 JSON 格式。 这是此解决方案的代码:
......
......@@ -9,7 +9,7 @@
* 如何使用预训练的网络进行分类和迁移学习
* 如何使用 LSTM 对序列进行操作
我们将使用 [Keras 软件包](https://keras.io/),这是用于深度学习的高级 API,它将使用于深度学习的神经网络更加容易和易于理解,因为其特点是类似于乐高的方法(这里的积木是神经网络的组成元素)。
我们将使用 [Keras 软件包](https://keras.io/),这是用于深度学习的高级 API,它将使用于深度学习的神经网络更加容易和易于理解,因为其特点是类似于乐高的方法(这里的积木是神经网络的组成元素)。
# 接近深度学习
......@@ -629,7 +629,7 @@ In: from keras.models import Sequential
loss:0.0377 - acc:0.9878 - val_loss:0.8090 - val_acc:0.8230
```
这就是 25K 审查测试数据集的准确性。 这是可以接受的结果,因为我们通过这样一个简单的模型实现了 80% 以上的正确分类。 如果您想对其进行改进,可以尝试使体系结构更复杂,但是请始终记住,通过增加网络的复杂性,训练和预测结果所需的时间会增加,因为 以及内存占用量
这就是 25K 审查测试数据集的准确性。 这是可以接受的结果,因为我们通过这样一个简单的模型实现了 80% 以上的正确分类。 如果您想对其进行改进,可以尝试使体系结构更复杂,但是请始终记住,通过增加网络的复杂性,训练和预测结果所需的时间,以及内存占用量会增加
# 概括
......
......@@ -34,7 +34,7 @@
当前的计算机,甚至是最新,最昂贵的计算机,其磁盘,内存和 CPU 的数量也有限。 每天处理太字节(PB)的信息并及时生成模型似乎非常困难。 此外,需要复制同时包含数据和处理软件的独立服务器。 否则,它可能成为系统的单点故障。
因此,大数据世界已经转移到了集群:它们由可变数量的*并不十分昂贵的*节点组成,并且位于高速互联网连接上。 通常,有些集群专用于存储数据(大硬盘,少 CPU 和少量内存),而另一些专用于处理数据(功能强大的 CPU,中等到大量内存,以及 小硬盘)。 此外,如果正确设置了群集,则可以确保可靠性(没有单点故障)和高可用性。
因此,大数据世界已经转移到了集群:它们由可变数量的*并不十分昂贵的*节点组成,并且位于高速互联网连接上。 通常,有些集群专用于存储数据(大硬盘,少 CPU 和少量内存),而另一些专用于处理数据(功能强大的 CPU,中等到大量内存,以及小硬盘)。 此外,如果正确设置了群集,则可以确保可靠性(没有单点故障)和高可用性。
# 理解为什么我们需要分布式框架
......@@ -1155,7 +1155,7 @@ Out: Row(features=SparseVector(41, {1: 8.0, 7: 181.0, 15: 1.0, 16: 2.0, 22:
* 群集(`pyspark.ml.clustering`程序包):KMeans
* 推荐人(`pyspark.ml.recommendation`软件包):ALS(协作过滤推荐器,基于交替最小二乘法)
让我们回到 KDD99 挑战的目标。 现在,该实例化随机森林分类器并设置其参数了。 要设置的参数是`featuresCol`(包含特征矩阵的列),`labelCol`(包含目标标签的数据框的列),`seed`(使实验可复制的随机种子)和`maxBins` (用于树的每个节点中的分割点的最大箱子数)。 森林中树木数量的默认值为`20`,每棵树的最大深度为 5 级。 此外,默认情况下,此分类器在`DataFrame`中创建三个输出列:`rawPrediction`(用于存储每个可能标签的预测得分),`probability`(用于存储每个标签的可能性)和`prediction`(最可能的标签):
让我们回到 KDD99 挑战的目标。 现在,该实例化随机森林分类器并设置其参数了。 要设置的参数是`featuresCol`(包含特征矩阵的列),`labelCol`(包含目标标签的数据框的列),`seed`(使实验可复制的随机种子)和`maxBins` (用于树的每个节点中的分割点的最大箱子数)。 森林中树木数量的默认值为`20`,每棵树的最大深度为 5 级。 此外,默认情况下,此分类器在`DataFrame`中创建三个输出列:`rawPrediction`(用于存储每个可能标签的预测得分),`probability`(用于存储每个标签的可能性)和`prediction`(最可能的标签):
```py
In: from pyspark.ml.classification import RandomForestClassifier
......
......@@ -487,11 +487,11 @@ a_dictionary = {key:value for value, key in zip(a_list, another_list)}
有时,您需要一些书面说明,并有机会自己测试一些示例代码。 Jupyter 是一个类似 Python 本身的开放工具,可通过其笔记本(交互式网页)为您提供所有这些功能,您可以在其中找到说明和可以直接测试的示例代码。 我们在整本书中都对 Jupyter 及其内核进行了说明,因为它是真正的数据科学。 它使您可以轻松地运行 Python 脚本,并评估它们对正在处理的数据的影响。
IPython 内核(Jupyter 的 Python 内核,因为 Jupyter 可以运行许多不同的编程语言)的 GitHub 位置提供了示例笔记本的完整列表。 您可以在[这个页面](https://github.com/ipython/ipython/wiki/A-gallery-of-interesting-IPython-Notebooks)上进行检查。 特别是,列表的一部分与**通用 Python 编程**有关,而另一部分与**统计,机器学习和数据科学**有关,您会在其中找到很多 Python 的示例 您可以从学习中学到灵感的脚本
IPython 内核(Jupyter 的 Python 内核,因为 Jupyter 可以运行许多不同的编程语言)的 GitHub 位置提供了示例笔记本的完整列表。 您可以在[这个页面](https://github.com/ipython/ipython/wiki/A-gallery-of-interesting-IPython-Notebooks)上进行检查。 特别是,列表的一部分与**通用 Python 编程**有关,而另一部分与**统计,机器学习和数据科学**有关,您会在其中找到很多 Python 脚本的示例,您可以从中学到灵感
# 别害羞,接受真正的挑战
如果您想做一些可以使您的 Python 编码能力达到不同水平的事情,我们建议您去挑战 Kaggle。 [**Kaggle**](http://www.kaggle.com) 是用于预测建模和分析竞赛的平台,在数据中应用了竞争性编程(参与者尝试根据提供的规范进行编程)的思想 向参与者提出具有挑战性的数据问题,并要求他们提供可能在测试集上评估的解决方案,从而实现科学。 测试集的结果部分是公开的,部分是私有的。
如果您想做一些可以使您的 Python 编码能力达到不同水平的事情,我们建议您去挑战 Kaggle。 [**Kaggle**](http://www.kaggle.com) 是用于预测建模和分析竞赛的平台,在数据中应用了竞争性编程(参与者尝试根据提供的规范进行编程)的思想向参与者提出具有挑战性的数据问题,并要求他们提供可能在测试集上评估的解决方案,从而实现科学。 测试集的结果部分是公开的,部分是私有的。
对于 Python 学习者来说,最有趣的部分是有机会参加没有明显解决方案的实际问题,这需要您编写一些代码以提出可能的问题解决方案,甚至是简单或幼稚的解决方案(我们建议您从头开始) 参与复杂的解决方案之前)。 这样,学习者将发现有趣的教程,基准测试代码,有用的数据科学家社区,以及其他数据科学家或 [Kaggle](http://blog.kaggle.com/) 本身在其博客中提出的一些非常聪明的解决方案。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册