未验证 提交 966a2d7f 编写于 作者: L loopyme 提交者: GitHub

Merge pull request #349 from loopyme/master

用户指南更新完成
+ [安装 scikit-learn](docs/79.md)
+ 用户指南
+ [1\. 监督学习](docs/1.md)
+ [1.1\. 广义线性模型](docs/2.md)
+ [1.2\. 线性和二次判别分析](docs/3.md)
+ [1.3\. 内核岭回归](docs/4.md)
+ [1.4\. 支持向量机](docs/5.md)
+ [1.5\. 随机梯度下降](docs/6.md)
+ [1.6\. 最近邻](docs/7.md)
+ [1.7\. 高斯过程](docs/8.md)
+ [1.8\. 交叉分解](docs/9.md)
+ [1.9\. 朴素贝叶斯](docs/10.md)
+ [1.10\. 决策树](docs/11.md)
+ [1.11\. 集成方法](docs/12.md)
+ [1.12\. 多类和多标签算法](docs/13.md)
+ [1.13\. 特征选择](docs/14.md)
+ [1.14\. 半监督学习](docs/15.md)
+ [1.15\. 等式回归](docs/16.md)
+ [1.16\. 概率校准](docs/17.md)
+ [1.17\. 神经网络模型(有监督)](docs/18.md)
+ [2\. 无监督学习](docs/19.md)
+ [2.1\. 高斯混合模型](docs/20.md)
+ [2.2\. 流形学习](docs/21.md)
+ [2.3\. 聚类](docs/22.md)
+ [2.4\. 双聚类](docs/23.md)
+ [2.5\. 分解成分中的信号(矩阵分解问题)](docs/24.md)
+ [2.6\. 协方差估计](docs/25.md)
+ [2.7\. 新奇和异常值检测](docs/26.md)
+ [2.8\. 密度估计](docs/27.md)
+ [2.9\. 神经网络模型(无监督)](docs/28.md)
+ [3\. 模型选择和评估](docs/33.md)
+ [3.1\. 交叉验证:评估估算器的表现](docs/34.md)
+ [3.2\. 调整估计器的超参数](docs/35.md)
+ [3.3\. 模型评估: 量化预测的质量](docs/53.md)
+ [3.4\. 模型持久化](docs/54.md)
+ [3.5\. 验证曲线: 绘制分数以评估模型](docs/55.md)
+ [5\. 数据集转换](docs/56.md)
+ [5.1\. Pipeline(管道)和 FeatureUnion(特征联合): 合并的评估器](docs/57.md)
+ [5.2\. 特征提取](docs/58.md)
+ [5.3\. 预处理数据](docs/59.md)
+ [5.4\. 缺失值填充]()
+ [5.5\. 无监督降维](docs/60.md)
+ [5.6\. 随机投影](docs/61.md)
+ [5.7\. 内核近似](docs/62.md)
+ [5.8\. 成对的矩阵, 类别和核函数](docs/63.md)
+ [5.9\. 预测目标 (`y`.md) 的转换](docs/64.md)
+ [6\. 数据集加载工具](docs/65.md)
+ [7\. 使用scikit-learn计算](docs/66.md)
+ [7.1\. 大规模计算的策略: 更大量的数据](docs/66?id=_71-大规模计算的策略-更大量的数据)
+ [7.2\. 计算性能](docs/66?id=_72-计算性能)
+ [7.3\. 并行,资源管理和配置]()
+ [1. 监督学习](docs/1.md)
* [1.1. 广义线性模型](docs/2.md?id=_11-广义线性模型)
* [1.2. 线性和二次判别分析](docs/3.md?id=_12-线性和二次判别分析)
* [1.3. 内核岭回归](docs/4.md?id=_13-内核岭回归)
* [1.4. 支持向量机](docs/5.md?id=_14-支持向量机)
* [1.5. 随机梯度下降](docs/6.md?id=_15-随机梯度下降)
* [1.6. 最近邻](docs/7.md?id=_16-最近邻)
* [1.7. 高斯过程](docs/8.md?id=_17-高斯过程)
* [1.8. 交叉分解](docs/9.md?id=_18-交叉分解)
* [1.9. 朴素贝叶斯](docs/10.md?id=_19-朴素贝叶斯)
* [1.10. 决策树](docs/11.md?id=_110-决策树)
* [1.11. 集成方法](docs/12.md?id=_111-集成方法)
* [1.12. 多类和多标签算法](docs/13.md?id=_112-多类和多标签算法)
* [1.13. 特征选择](docs/14.md?id=_113-特征选择)
* [1.14. 半监督学习](docs/15.md?id=_114-半监督学习)
* [1.15. 等式回归](docs/16.md?id=_115-等式回归)
* [1.16. 概率校准](docs/17.md?id=_116-概率校准)
* [1.17. 神经网络模型(有监督)](docs/18.md?id=_117-神经网络模型(有监督))
+ [2. 无监督学习](docs/19.md)
* [2.1. 高斯混合模型](docs/20.md?id=_21-高斯混合模型)
* [2.2. 流形学习](docs/21.md?id=_22-流形学习)
* [2.3. 聚类](docs/22.md?id=_23-聚类)
* [2.4. 双聚类](docs/23.md?id=_24-双聚类)
* [2.5. 分解成分中的信号(矩阵分解问题)](docs/24.md?id=_25-分解成分中的信号(矩阵分解问题))
* [2.6. 协方差估计](docs/25.md?id=_26-协方差估计)
* [2.7. 新奇和异常值检测](docs/26.md?id=_27-新奇和异常值检测)
* [2.8. 密度估计](docs/27.md?id=_28-密度估计)
* [2.9. 神经网络模型(无监督)](docs/28.md?id=_29-神经网络模型(无监督))
* [3. 模型选择和评估](docs/29.md?id=_3-模型选择和评估)
* [3.1. 交叉验证:评估估算器的表现](docs/30.md?id=_31-交叉验证:评估估算器的表现)
* [3.2. 调整估计器的超参数](docs/31.md?id=_32-调整估计器的超参数)
* [3.3. 模型评估: 量化预测的质量](docs/32.md?id=_33-模型评估--量化预测的质量)
* [3.4. 模型持久化](docs/33.md?id=_34-模型持久化)
* [3.5. 验证曲线: 绘制分数以评估模型](docs/34.md?id=_35-验证曲线--绘制分数以评估模型)
* [4. 检验](docs/35.md?id=_4--检验)
* [4.1. 部分依赖图](docs/36.md?id=_41-部分依赖图)
* [5. 数据集转换](docs/37.md?id=_5-数据集转换)
* [5.1. Pipeline(管道)和 FeatureUnion(特征联合): 合并的评估器](docs/38.md?id=_51-pipeline(管道)和-featureunion(特征联合)--合并的评估器)
* [5.2. 特征提取](docs/39.md?id=_52-特征提取)
* [5.3 预处理数据](docs/40.md?id=_53-预处理数据)
* [5.4 缺失值插补](docs/41.md?id=_54-缺失值插补)
* [5.5. 无监督降维](docs/42.md?id=_55-无监督降维)
* [5.6. 随机投影](docs/43.md?id=_56-随机投影)
* [5.7. 内核近似](docs/44.md?id=_57-内核近似)
* [5.8. 成对的矩阵, 类别和核函数](docs/45.md?id=_58-成对的矩阵,-类别和核函数)
* [5.9. 预测目标 (`y`) 的转换](docs/46.md?id=_59-预测目标--的转换)
* [6. 数据集加载工具](docs/47.md?id=_6-数据集加载工具)
* [6.1. 通用数据集 API](docs/47.md?id=_61-通用数据集-api)
* [6.2. 玩具数据集](docs/47.md?id=_62-玩具数据集)
* [6.3 真实世界中的数据集](docs/47.md?id=_63-真实世界中的数据集)
* [6.4. 样本生成器](docs/47.md?id=_64-样本生成器)
* [6.5. 加载其他数据集](docs/47.md?id=_65-加载其他数据集)
* [7. 使用scikit-learn计算](docs/48.md?id=_7-使用scikit-learn计算)
* [7.1. 大规模计算的策略: 更大量的数据](docs/48.md?id=_71-大规模计算的策略--更大量的数据)
* [7.2. 计算性能](docs/48.md?id=_72-计算性能)
* [7.3. 并行性、资源管理和配置](docs/48.md?id=_73-并行性、资源管理和配置)
+ 教程
+ [使用 scikit-learn 介绍机器学习](docs/68.md)
+ [关于科学数据处理的统计学习教程](docs/69.md)
......
此差异已折叠。
# 1.9\. 朴素贝叶斯
# 1.9. 朴素贝叶斯
校验者:
        [@Kyrie](https://github.com/apachecn/scikit-learn-doc-zh)
......@@ -38,10 +38,10 @@
另一方面,尽管朴素贝叶斯被认为是一种相当不错的分类器,但却不是好的估计器(estimator),所以不能太过于重视从 `predict_proba` 输出的概率。
>参考文献:
> **参考资料**:
>* H. Zhang (2004). [The optimality of Naive Bayes.](http://www.cs.unb.ca/~hzhang/publications/FLAIRS04ZhangH.pdf) Proc. FLAIRS.
## 1.9.1\. 高斯朴素贝叶斯
## 1.9.1. 高斯朴素贝叶斯
[`GaussianNB`](https://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.GaussianNB.html#sklearn.naive_bayes.GaussianNB "sklearn.naive_bayes.GaussianNB") 实现了运用于分类的高斯朴素贝叶斯算法。特征的可能性(即概率)假设为高斯分布:
......@@ -61,7 +61,7 @@ Number of mislabeled points out of a total 150 points : 6
```
## 1.9.2\. 多项分布朴素贝叶斯
## 1.9.2. 多项分布朴素贝叶斯
[`MultinomialNB`](https://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.MultinomialNB.html#sklearn.naive_bayes.MultinomialNB "sklearn.naive_bayes.MultinomialNB") 实现了服从多项分布数据的朴素贝叶斯算法,也是用于文本分类(这个领域中数据往往以词向量表示,尽管在实践中 tf-idf 向量在预测时表现良好)的两大经典朴素贝叶斯算法之一。 分布参数由每类 ![y](img/0775c03fc710a24df297dedcec515aaf.jpg) 的 ![\theta_y = (\theta_{y1},\ldots,\theta_{yn})](img/a25ab5d7faac5be22a6d242286376161.jpg) 向量决定, 式中 ![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) 是特征的数量(对于文本分类,是词汇量的大小) ![\theta_{yi}](img/860af894555b3d5f52e893bab6cafc11.jpg) 是样本中属于类 ![y](img/0775c03fc710a24df297dedcec515aaf.jpg) 中特征 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 概率 ![P(x_i \mid y)](img/db23fadfab6b660dbfa2934c4536beb1.jpg)
......@@ -73,7 +73,7 @@ Number of mislabeled points out of a total 150 points : 6
先验平滑因子 ![\alpha \ge 0](img/43fc75930300610d8cb41a8d15899c15.jpg) 应用于在学习样本中没有出现的特征,以防在将来的计算中出现0概率输出。 把 ![\alpha = 1](img/3e0dffeddefe6ba1e809bd9b6276c771.jpg) 被称为拉普拉斯平滑(Lapalce smoothing),而 ![\alpha < 1](img/8fe0d726b364f224c93e31cd3248a1f6.jpg) 被称为Lidstone平滑方法(Lidstone smoothing)。
## 1.9.3\. 补充朴素贝叶斯
## 1.9.3. 补充朴素贝叶斯
[`ComplementNB`](https://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.ComplementNB.html#sklearn.naive_bayes.ComplementNB)实现了多项朴素贝叶斯(CNB)算法。CNB是标准多项式朴素贝叶斯(MNB)算法的一种改进,特别适用于不平衡数据集。具体来说,CNB使用来自每个类的补数的统计数据来计算模型的权重。CNB的发明者的经验表明,CNB的参数估计比MNB的参数估计更稳定。此外,CNB在文本分类任务上通常比MNB表现得更好(通常有相当大的优势)。计算权重的步骤如下:
......@@ -87,7 +87,7 @@ Number of mislabeled points out of a total 150 points : 6
即将记录分配给补充匹配度最低的类。
## 1.9.4\. 伯努利朴素贝叶斯
## 1.9.4. 伯努利朴素贝叶斯
[`BernoulliNB`](https://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.BernoulliNB.html#sklearn.naive_bayes.BernoulliNB "sklearn.naive_bayes.BernoulliNB") 实现了用于多重伯努利分布数据的朴素贝叶斯训练和分类算法,即有多个特征,但每个特征 都假设是一个二元 (Bernoulli, boolean) 变量。 因此,这类算法要求样本以二元值特征向量表示;如果样本含有其他类型的数据, 一个 `BernoulliNB` 实例会将其二值化(取决于 `binarize` 参数)。
......@@ -99,12 +99,12 @@ Number of mislabeled points out of a total 150 points : 6
在文本分类的例子中,词频向量(word occurrence vectors)(而非词数向量(word count vectors))可能用于训练和用于这个分类器。 `BernoulliNB` 可能在一些数据集上可能表现得更好,特别是那些更短的文档。 如果时间允许,建议对两个模型都进行评估。
>参考文献:
> **参考资料**:
>* C.D. Manning, P. Raghavan and H. Schütze (2008). Introduction to Information Retrieval. Cambridge University Press, pp. 234-265.
>* A. McCallum and K. Nigam (1998). [A comparison of event models for Naive Bayes text classification.](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.46.1529) Proc. AAAI/ICML-98 Workshop on Learning for Text Categorization, pp. 41-48.
>* V. Metsis, I. Androutsopoulos and G. Paliouras (2006). [Spam filtering with Naive Bayes – Which Naive Bayes?](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.61.5542) 3rd Conf. on Email and Anti-Spam (CEAS).
## 1.9.5\. 堆外朴素贝叶斯模型拟合
## 1.9.5. 堆外朴素贝叶斯模型拟合
朴素贝叶斯模型可以解决整个训练集不能导入内存的大规模分类问题。 为了解决这个问题, [`MultinomialNB`](https://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.MultinomialNB.html#sklearn.naive_bayes.MultinomialNB "sklearn.naive_bayes.MultinomialNB"), [`BernoulliNB`](https://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.BernoulliNB.html#sklearn.naive_bayes.BernoulliNB "sklearn.naive_bayes.BernoulliNB"), 和 [`GaussianNB`](https://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.GaussianNB.html#sklearn.naive_bayes.GaussianNB "sklearn.naive_bayes.GaussianNB") 实现了 `partial_fit` 方法,可以动态的增加数据,使用方法与其他分类器的一样,使用示例见 [Out-of-core classification of text documents](https://scikit-learn.org/stable/auto_examples/applications/plot_out_of_core_classification.html#sphx-glr-auto-examples-applications-plot-out-of-core-classification-py) 。所有的朴素贝叶斯分类器都支持样本权重。
......
# 1.10\. 决策树
# 1.10. 决策树
校验者:
        [@文谊](https://github.com/apachecn/scikit-learn-doc-zh)
......@@ -33,7 +33,7 @@
* 有些概念很难被决策树学习到,因为决策树很难清楚的表述这些概念。例如XOR,奇偶或者复用器的问题。
* 如果某些类在问题中占主导地位会使得创建的决策树有偏差。因此,我们建议在拟合前先对数据集进行平衡。
## 1.10.1\. 分类
## 1.10.1. 分类
[`DecisionTreeClassifier`](https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier "sklearn.tree.DecisionTreeClassifier") 是能够在数据集上执行多分类的类,与其他分类器一样,[`DecisionTreeClassifier`](https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier "sklearn.tree.DecisionTreeClassifier") 采用输入两个数组:数组X,用 `[n_samples, n_features]` 的方式来存放训练样本。整数值数组Y,用 `[n_samples]` 来保存训练样本的类标签:
......@@ -105,10 +105,10 @@ array([[ 0., 1.]])
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_iris_0013.png](img/cba233fc4178da6d3fe0b177cbbb6318.jpg)](https://scikit-learn.org/stable/auto_examples/tree/plot_iris.html)
>示例:
> **示例**:
>* [Plot the decision surface of a decision tree on the iris dataset](https://scikit-learn.org/stable/auto_examples/tree/plot_iris.html#sphx-glr-auto-examples-tree-plot-iris-py)
## 1.10.2\. 回归
## 1.10.2. 回归
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_tree_regression_0011.png](img/f0b72920659961ba27aec1da59f3019c.jpg)](https://scikit-learn.org/stable/auto_examples/tree/plot_tree_regression.html)
......@@ -125,10 +125,10 @@ array([ 0.5])
```
>示例:
> **示例**:
>* [Decision Tree Regression](https://scikit-learn.org/stable/auto_examples/tree/plot_tree_regression.html#sphx-glr-auto-examples-tree-plot-tree-regression-py)
## 1.10.3\. 多值输出问题
## 1.10.3. 多值输出问题
一个多值输出问题是一个类似当 Y 是大小为 `[n_samples, n_outputs]` 的2d数组时,有多个输出值需要预测的监督学习问题。
......@@ -137,7 +137,7 @@ array([ 0.5])
* 在叶中存储n个输出值,而不是一个;
* 通过计算所有n个输出的平均减少量来作为分裂标准.
该模块通过在 `DecisionTreeClassifier `:class:`DecisionTreeRegressor` 中实现该策略来支持多输出问题。如果决策树与大小为 `[n_samples, n_outputs]` 的输出数组Y向匹配,则得到的估计器:
该模块通过在 `DecisionTreeClassifier ``DecisionTreeRegressor` 中实现该策略来支持多输出问题。如果决策树与大小为 `[n_samples, n_outputs]` 的输出数组Y向匹配,则得到的估计器:
* ``predict`` 是输出n_output的值
*``predict_proba`` 上输出 n_output 数组列表
......@@ -149,20 +149,20 @@ array([ 0.5])
![sphx_glr_plot_multioutput_face_completion_0011](img/sphx_glr_plot_multioutput_face_completion_0011.png)
>示例:
> **示例**:
>* [Multi-output Decision Tree Regression](https://scikit-learn.org/stable/auto_examples/tree/plot_tree_regression_multioutput.html#sphx-glr-auto-examples-tree-plot-tree-regression-multioutput-py)
>* [Face completion with a multi-output estimators](https://scikit-learn.org/stable/auto_examples/plot_multioutput_face_completion.html#sphx-glr-auto-examples-plot-multioutput-face-completion-py)
>参考:
> **参考资料**:
>* M. Dumont et al, [Fast multi-class image annotation with random subwindows and multiple output randomized trees](http://www.montefiore.ulg.ac.be/services/stochastic/pubs/2009/DMWG09/dumont-visapp09-shortpaper.pdf), International Conference on Computer Vision Theory and Applications 2009
## 1.10.4\. 复杂度分析
## 1.10.4. 复杂度分析
总体来说,用来构建平衡二叉树的运行时间为 ![O(n_{samples}n_{features}\log(n_{samples}))](img/264ba68c53c2e2867b9e307e8b940d49.jpg) 查询时间为 ![O(\log(n_{samples}))](img/ec29f705a6be2ce512a10c266dd755f0.jpg) 。尽管树的构造算法尝试生成平衡树,但它们并不总能保持平衡。假设子树能大概保持平衡,每个节点的成本包括通过 ![O(n_{features})](img/92570652e9c52768c76f5b9cf8f97a28.jpg) 时间复杂度来搜索找到提供熵减小最大的特征。每个节点的花费为 ![O(n_{features}n_{samples}\log(n_{samples}))](img/6c8db7614197ace6a4bf0f437c085e6d.jpg) ,从而使得整个决策树的构造成本为 ![O(n_{features}n_{samples}^{2}\log(n_{samples}))](img/2bf67de05d37f31bd2154fdc96690102.jpg)
Scikit-learn提供了更多有效的方法来创建决策树。初始实现(如上所述)将重新计算沿着给定特征的每个新分割点的类标签直方图(用于分类)或平均值(用于回归)。与分类所有的样本特征,然后再次训练时运行标签计数,可将每个节点的复杂度降低为 ![O(n_{features}\log(n_{samples}))](img/93cdc140e4de4cbb0d093fc7ad5c6a36.jpg) ,则总的成本花费为 ![O(n_{features}n_{samples}\log(n_{samples}))](img/6c8db7614197ace6a4bf0f437c085e6d.jpg) 。这是一种对所有基于树的算法的改进选项。默认情况下,对于梯度提升模型该算法是打开的,一般来说它会让训练速度更快。但对于所有其他算法默认是关闭的,当训练深度很深的树时往往会减慢训练速度。
## 1.10.5\. 实际使用技巧
## 1.10.5. 实际使用技巧
* 对于拥有大量特征的数据决策树会出现过拟合的现象。获得一个合适的样本比例和特征数量十分重要,因为在高维空间中只有少量的样本的树是十分容易过拟合的。
* 考虑事先进行降维( [PCA](decomposition.html#pca) , [ICA](decomposition.html#ica) ,使您的树更好地找到具有分辨性的特征。
......@@ -174,7 +174,7 @@ Scikit-learn提供了更多有效的方法来创建决策树。初始实现(
* 所有的决策树内部使用 `np.float32` 数组 ,如果训练数据不是这种格式,将会复制数据集。
* 如果输入的矩阵X为稀疏矩阵,建议您在调用fit之前将矩阵X转换为稀疏的``csc_matrix`` ,在调用predict之前将 `csr_matrix` 稀疏。当特征在大多数样本中具有零值时,与密集矩阵相比,稀疏矩阵输入的训练时间可以快几个数量级。
## 1.10.6\. 决策树算法: ID3, C4.5, C5.0 和 CART
## 1.10.6. 决策树算法: ID3, C4.5, C5.0 和 CART
所有种类的决策树算法有哪些以及它们之间的区别?scikit-learn 中实现何种算法呢?
......@@ -188,7 +188,7 @@ C5.0 是 Quinlan 根据专有许可证发布的最新版本。它使用更少的
scikit-learn 使用 CART 算法的优化版本。
## 1.10.7\. 数学表达
## 1.10.7. 数学表达
给定训练向量 ![x_i \in R^n](img/02848ebe72029503696b6523e4052c0c.jpg), i=1,…, l 和标签向量 ![y \in R^l](img/405095229d24f3525298dc6f99077666.jpg)。决策树递归地分割空间,例如将有相同标签的样本归为一组。
......@@ -208,7 +208,7 @@ scikit-learn 使用 CART 算法的优化版本。
在 ![Q_{left}(\theta^*)](img/33eb0dacfcc0df16c84bfaed52d31859.jpg) 和 ![Q_{right}(\theta^*)](img/a1bd06d03e764db224f0e10b4f024bdd.jpg) 上递归运算,直到达到最大允许深度,![N_m < \min_{samples}](img/0fec9d3a9833abc417480a03be883b3e.jpg) 或 ![N_m = 1](img/be71aa00cd62f24b4657f7993d1b3a45.jpg)
### 1.10.7.1\. 分类标准
### 1.10.7.1. 分类标准
对于节点 ![m](img/94156b879a7455cb0d516efa9c9c0991.jpg) ,表示具有 ![N_m](img/ee68d82006856c6355aa0dca42cd5054.jpg) 个观测值的区域 ![R_m](img/018a312145ba4dee4c257135644ced91.jpg) ,如果分类结果采用值是 0,1,…,K-1 的值,让
......@@ -228,7 +228,7 @@ Cross-Entropy (交叉熵)
在 ![X_m](img/fe5ed835e0d3407e3f2d694d8bc049a1.jpg) 训练 ![m](img/94156b879a7455cb0d516efa9c9c0991.jpg) 节点上的数据时。
### 1.10.7.2\. 回归标准
### 1.10.7.2. 回归标准
如果目标是连续性的值,那么对于节点 ![m](img/94156b879a7455cb0d516efa9c9c0991.jpg) ,表示具有 ![N_m](img/ee68d82006856c6355aa0dca42cd5054.jpg) 个观测值的区域 ![R_m](img/018a312145ba4dee4c257135644ced91.jpg) ,对于以后的分裂节点的位置的决定常用的最小化标准是均方差和平均绝对误差,前者使用终端节点处的平均值来最小化L2误差,后者使用终端节点处的中值来最小化 L1 误差。
......@@ -248,9 +248,9 @@ H(X_m) = \frac{1}{N_m} \sum_{i \in N_m} |y_i - \bar{y_m}|](img/3b70a99c882760b6d
在 ![X_m](img/fe5ed835e0d3407e3f2d694d8bc049a1.jpg) 训练 ![m](img/94156b879a7455cb0d516efa9c9c0991.jpg) 节点上的数据时。
>示例:
> **示例**:
>* [https://en.wikipedia.org/wiki/Decision_tree_learning](https://en.wikipedia.org/wiki/Decision_tree_learning)
>* [https://en.wikipedia.org/wiki/Predictive_analytics](https://en.wikipedia.org/wiki/Predictive_analytics)
>* L. Breiman, J. Friedman, R. Olshen, and C. Stone. Classification and Regression Trees. Wadsworth, Belmont, CA, 1984.
>* J.R. Quinlan. C4\. 5: programs for machine learning. Morgan Kaufmann, 1993.
>* J.R. Quinlan. C4. 5: programs for machine learning. Morgan Kaufmann, 1993.
>* T. Hastie, R. Tibshirani and J. Friedman. Elements of Statistical Learning, Springer, 2009.
此差异已折叠。
# 1.12\. 多类和多标签算法
# 1.12. 多类和多标签算法
校验者:
        [@溪流-十四号](https://github.com/apachecn/scikit-learn-doc-zh)
......@@ -79,7 +79,7 @@
>**警告**:目前,[`sklearn.metrics`](classes.html#module-sklearn.metrics "sklearn.metrics")中没有评估方法能够支持多输出多类分类任务。
## 1.12.1\. 多标签分类格式
## 1.12.1. 多标签分类格式
在 multilabel learning 中,二元分类任务的合集表示为二进制数组:每一个样本是大小为 (n_samples, n_classes) 的二维数组中的一行二进制值,比如非0元素,表示为对应标签的 子集。 一个数组 `np.array([[1, 0, 0], [0, 1, 1], [0, 0, 0]])` 表示第一个样本属于第 0 个标签,第二个样本属于第一个和第二个标签,第三个样本不属于任何标签。
......@@ -97,11 +97,11 @@ array([[0, 0, 1, 1, 1],
```
## 1.12.2\. 1对其余
## 1.12.2. 1对其余
这个方法也被称为 **1对多**, 在 [`OneVsRestClassifier`](https://scikit-learn.org/stable/modules/generated/sklearn.multiclass.OneVsRestClassifier.html#sklearn.multiclass.OneVsRestClassifier "sklearn.multiclass.OneVsRestClassifier") 模块中执行。 这个方法在于每一个类都将用一个分类器进行拟合。 对于每一个分类器,该类将会和其他所有的类有所区别。除了它的计算效率之外 (只需要 *n_classes* 个分类器), 这种方法的优点是它具有可解释性。 因为每一个类都可以通过有且仅有一个分类器来代表,所以通过检查一个类相关的分类器就可以获得该类的信息。这是最常用的方法,也是一个合理的默认选择。
### 1.12.2.1\. 多类学习
### 1.12.2.1. 多类学习
下面是一个使用 OvR 的一个例子:
......@@ -122,22 +122,22 @@ array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
```
### 1.12.2.2\. 多标签学习
### 1.12.2.2. 多标签学习
[`OneVsRestClassifier`](https://scikit-learn.org/stable/modules/generated/sklearn.multiclass.OneVsRestClassifier.html#sklearn.multiclass.OneVsRestClassifier "sklearn.multiclass.OneVsRestClassifier") 1对其余分类器 也支持 multilabel classification. 要使用该功能,给分类器提供一个指示矩阵,比如 [i,j] 表示第i个样本中的第j个标签。
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_multilabel_0011.png](img/2e06713c93719ff874fb9f4fab7a6fbf.jpg)](https://scikit-learn.org/stable/auto_examples/plot_multilabel.html)
>示例:
> **示例**:
>* [Multilabel classification](https://scikit-learn.org/stable/auto_examples/plot_multilabel.html#sphx-glr-auto-examples-plot-multilabel-py)
## 1.12.3\. 1对1
## 1.12.3. 1对1
[`OneVsOneClassifier`](https://scikit-learn.org/stable/modules/generated/sklearn.multiclass.OneVsOneClassifier.html#sklearn.multiclass.OneVsOneClassifier "sklearn.multiclass.OneVsOneClassifier") 1对1分类器 将会为每一对类别构造出一个分类器,在预测阶段,收到最多投票的类别将会被挑选出来。 当存在结时(两个类具有同样的票数的时候), 1对1分类器会选择总分类置信度最高的类,其中总分类置信度是由下层的二元分类器 计算出的成对置信等级累加而成。
因为这需要训练出 `n_classes * (n_classes - 1) / 2` 个分类器, 由于复杂度为 O(n_classes^2),这个方法通常比 one-vs-the-rest 慢。然而,这个方法也有优点,比如说是在没有很好的缩放 `n_samples` 数据的核方法中。 这是由于每个单独的学习问题只涉及一小部分数据,而 one-vs-the-rest 将会使用 `n_classes` 次完整的数据。
### 1.12.3.1\. 多类别学习
### 1.12.3.1. 多类别学习
下面是一个使用OvO进行多类别学习的例子:
......@@ -158,10 +158,10 @@ array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
```
>参考文献:
> **参考资料**:
>* “Pattern Recognition and Machine Learning. Springer”, Christopher M. Bishop, page 183, (First Edition)
## 1.12.4\. 误差校正输出代码
## 1.12.4. 误差校正输出代码
基于Output-code的方法不同于 one-vs-the-rest 和 one-vs-one。使用这些方法,每一个类将会被映射到欧几里得空间,每一个维度上的值只能为0或者1。另一种解释它的方法是,每一个类被表示为二进制 码(一个 由0 和 1 组成的数组)。保存 location (位置)/ 每一个类的编码的矩阵被称为 code book。编码的大小是前面提到的欧几里得空间的纬度。直观上来说,每一个类应该使用一个唯一的编码,同时,好的 code book 应该能够优化分类的精度。 在实现上,我们使用随机产生的 code book,正如在 [[3]](#id13) 提倡的方式,即使更加详尽的方法可能会在未来被加入其中。
......@@ -173,7 +173,7 @@ array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
比 1 大的数字比 one-vs-the-rest 需要更多的分类器。在这种情况下,一些分类器在理论上会纠正其他分类器的错误,因此命名为 “error-correcting” 。然而在实际上这通常不会发生,因为许多分类器的错误通常意义上来说是相关的。error-correcting output codes 和 bagging 有一个相似的作用效果。
### 1.12.4.1\. 多类别学习
### 1.12.4.1. 多类别学习
下面是一个使用Output-Codes进行多类别学习的例子:
......@@ -196,12 +196,12 @@ array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
```
>参考文献:
> **参考资料**:
>* “Solving multiclass learning problems via error-correcting output codes”, Dietterich T., Bakiri G., Journal of Artificial Intelligence Research 2, 1995.
>* [3] “The error coding method and PICTs”, James G., Hastie T., Journal of Computational and Graphical statistics 7, 1998.
>* “The Elements of Statistical Learning”, Hastie T., Tibshirani R., Friedman J., page 606 (second-edition) 2008.
## 1.12.5\. 多输出回归
## 1.12.5. 多输出回归
多输出回归支持 `MultiOutputRegressor` 可以被添加到任何回归器中。这个策略包括对每个目标拟合一个回归器。因为每一个目标可以被一个回归器精确地表示,通过检查对应的回归器,可以获取关于目标的信息。 因为 `MultiOutputRegressor` 对于每一个目标可以训练出一个回归器,所以它无法利用目标之间的相关度信息。
......@@ -226,7 +226,7 @@ array([[-154.75474165, -147.03498585, -50.03812219],
```
## 1.12.6\. 多输出分类
## 1.12.6. 多输出分类
Multioutput classification 支持能够被添加到任何带有 `MultiOutputClassifier` 标志的分类器中. 这种方法为每一个目标训练一个分类器。 这就允许产生多目标变量分类器。这种类的目的是扩展评估器用于评估一系列目标函数 (f1,f2,f3…,fn) ,这些函数在一个单独的预测矩阵上进行训练以此来预测一系列的响应 (y1,y2,y3…,yn)。
......@@ -261,7 +261,7 @@ array([[2, 2, 0],
```
## 1.12.7\. 链式分类器
## 1.12.7. 链式分类器
Classifier chains (查看 `ClassifierChain`) 是一种集合多个二分类器为一个单独的多标签模型的方法,这种方法能够发掘目标之间的相关性信息。
......@@ -271,5 +271,5 @@ Classifier chains (查看 `ClassifierChain`) 是一种集合多个二分类器
很明显,链的顺序是十分重要的。链上的第一个模型没有关于其他标签的信息,而链上的最后一个模型将会具有所有其他标签的信息。 在一般情况下,我们并不知道链上模型最优的顺序,因此通常会使用许多随机的顺序,将他们的预测求平均。
>参考文献:
> **参考资料**:
>* Jesse Read, Bernhard Pfahringer, Geoff Holmes, Eibe Frank,“Classifier Chains for Multi-label Classification”, 2009.
# 1.13\. 特征选择
# 1.13. 特征选择
校验者:
        [@yuezhao9210](https://github.com/yuezhao9210)
......@@ -9,7 +9,7 @@
[`sklearn.feature_selection`](classes.html#module-sklearn.feature_selection "sklearn.feature_selection") 模块中的类可以用来对样本集进行 feature selection(特征选择)和 dimensionality reduction(降维),这将会提高估计器的准确度或者增强它们在高维数据集上的性能。
## 1.13.1\. 移除低方差特征
## 1.13.1. 移除低方差特征
[`VarianceThreshold`](https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.VarianceThreshold.html#sklearn.feature_selection.VarianceThreshold "sklearn.feature_selection.VarianceThreshold") 是特征选择的一个简单基本方法,它会移除所有那些方差不满足一些阈值的特征。默认情况下,它将会移除所有的零方差特征,即那些在所有的样本上的取值均不变的特征。
......@@ -35,7 +35,7 @@ array([[0, 1],
正如预期一样, `VarianceThreshold` 移除了第一列,它的值为 0 的概率为 ![p = 5/6 > .8](img/dc219bfd2e157456e106676575955251.jpg) 。
## 1.13.2\. 单变量特征选择
## 1.13.2. 单变量特征选择
单变量的特征选择是通过基于单变量的统计测试来选择最好的特征。它可以当做是评估器的预处理步骤。Scikit-learn 将特征选择的内容作为实现了 transform 方法的对象:
......@@ -79,7 +79,7 @@ array([[0, 1],
>* [Univariate Feature Selection](https://scikit-learn.org/stable/auto_examples/feature_selection/plot_feature_selection.html#sphx-glr-auto-examples-feature-selection-plot-feature-selection-py)
>* [Comparison of F-test and mutual information](https://scikit-learn.org/stable/auto_examples/feature_selection/plot_f_test_vs_mi.html#sphx-glr-auto-examples-feature-selection-plot-f-test-vs-mi-py)
## 1.13.3\. 递归式特征消除
## 1.13.3. 递归式特征消除
给定一个外部的估计器,可以对特征赋予一定的权重(比如,线性模型的相关系数),recursive feature elimination ( [`RFE`](https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html#sklearn.feature_selection.RFE "sklearn.feature_selection.RFE") ) 通过考虑越来越小的特征集合来递归的选择特征。 首先,评估器在初始的特征集合上面训练并且每一个特征的重要程度是通过一个 `coef_` 属性 或者 `feature_importances_` 属性来获得。 然后,从当前的特征集合中移除最不重要的特征。在特征集合上不断的重复递归这个步骤,直到最终达到所需要的特征数量为止。 [`RFECV`](https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFECV.html#sklearn.feature_selection.RFECV "sklearn.feature_selection.RFECV") 在一个交叉验证的循环中执行 RFE 来找到最优的特征数量
......@@ -87,7 +87,7 @@ array([[0, 1],
>* [Recursive feature elimination](https://scikit-learn.org/stable/auto_examples/feature_selection/plot_rfe_digits.html#sphx-glr-auto-examples-feature-selection-plot-rfe-digits-py) : 通过递归式特征消除来体现数字分类任务中像素重要性的例子。
>* [Recursive feature elimination with cross-validation](https://scikit-learn.org/stable/auto_examples/feature_selection/plot_rfe_with_cross_validation.html#sphx-glr-auto-examples-feature-selection-plot-rfe-with-cross-validation-py) : 通过递归式特征消除来自动调整交叉验证中选择的特征数。
## 1.13.4\. 使用 SelectFromModel 选取特征
## 1.13.4. 使用 SelectFromModel 选取特征
[`SelectFromModel`](https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectFromModel.html#sklearn.feature_selection.SelectFromModel "sklearn.feature_selection.SelectFromModel") 是一个 meta-transformer(元转换器) ,它可以用来处理任何带有 `coef_` 或者 `feature_importances_` 属性的训练之后的评估器。 如果相关的``coef_`` 或者 `featureimportances` 属性值低于预先设置的阈值,这些特征将会被认为不重要并且移除掉。除了指定数值上的阈值之外,还可以通过给定字符串参数来使用内置的启发式方法找到一个合适的阈值。可以使用的启发式方法有 mean 、 median 以及使用浮点数乘以这些(例如,0.1*mean )。
......@@ -96,7 +96,7 @@ array([[0, 1],
>**示例:**
>* [Feature selection using SelectFromModel and LassoCV](https://scikit-learn.org/stable/auto_examples/feature_selection/plot_select_from_model_boston.html#sphx-glr-auto-examples-feature-selection-plot-select-from-model-boston-py): 从 Boston 数据中自动选择最重要两个特征而不需要提前得知这一信息。
### 1.13.4.1\. 基于 L1 的特征选取
### 1.13.4.1. 基于 L1 的特征选取
[Linear models](/docs/2) 使用 L1 正则化的线性模型会得到稀疏解:他们的许多系数为 0。 当目标是降低使用另一个分类器的数据集的维度, 它们可以与 [`feature_selection.SelectFromModel`](https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectFromModel.html#sklearn.feature_selection.SelectFromModel "sklearn.feature_selection.SelectFromModel") 一起使用来选择非零系数。特别的,可以用于此目的的稀疏评估器有用于回归的 [`linear_model.Lasso`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Lasso.html#sklearn.linear_model.Lasso "sklearn.linear_model.Lasso") , 以及用于分类的 [`linear_model.LogisticRegression`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression "sklearn.linear_model.LogisticRegression") 和 [`svm.LinearSVC`](https://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC "sklearn.svm.LinearSVC")
......@@ -129,7 +129,7 @@ array([[0, 1],
>
>**Reference(参考文献)** Richard G. Baraniuk “Compressive Sensing”, IEEE Signal Processing Magazine [120] July 2007 [http://dsp.rice.edu/sites/dsp.rice.edu/files/cs/baraniukCSlecture07.pdf](http://dsp.rice.edu/sites/dsp.rice.edu/files/cs/baraniukCSlecture07.pdf)
### 1.13.4.2\. 基于 Tree(树)的特征选取
### 1.13.4.2. 基于 Tree(树)的特征选取
基于树的 estimators (查阅 [`sklearn.tree`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.tree) 模块和树的森林 在 [`sklearn.ensemble`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.ensemble) 模块) 可以用来计算特征的重要性,然后可以消除不相关的特征(当与 [`sklearn.feature_selection.SelectFromModel`](https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectFromModel.html#sklearn.feature_selection.SelectFromModel "sklearn.feature_selection.SelectFromModel") 等元转换器一同使用时):
......@@ -156,7 +156,7 @@ array([ 0.04..., 0.05..., 0.4..., 0.4...])
>* [Feature importances with forests of trees](https://scikit-learn.org/stable/auto_examples/ensemble/plot_forest_importances.html#sphx-glr-auto-examples-ensemble-plot-forest-importances-py): 在合成数据上恢复有用特征的示例。
>* [Pixel importances with a parallel forest of trees](https://scikit-learn.org/stable/auto_examples/ensemble/plot_forest_importances_faces.html#sphx-glr-auto-examples-ensemble-plot-forest-importances-faces-py): 在人脸识别数据上的示例。
## 1.13.5\. 特征选取作为 pipeline(管道)的一部分
## 1.13.5. 特征选取作为 pipeline(管道)的一部分
特征选择通常在实际的学习之前用来做预处理。在 scikit-learn 中推荐的方式是使用 :[`sklearn.pipeline.Pipeline`](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.Pipeline.html#sklearn.pipeline.Pipeline "sklearn.pipeline.Pipeline"):
......
# 1.14\. 半监督学习
# 1.14. 半监督学习
校验者:
        [@STAN,废柴0.1](https://github.com/apachecn/scikit-learn-doc-zh)
......@@ -12,7 +12,7 @@
>
>在使用 `fit` 方法训练数据时, 将标识符与已标签化的数据一起分配给未标签化的点是尤其重要的. 实现该标记的方法是使用整数值 ![-1](img/8b3be66a25e0c33787b341667b261360.jpg).
## 1.14.1\. 标签传播
## 1.14.1. 标签传播
标签传播表示半监督图推理算法的几个变体。
......@@ -38,12 +38,12 @@
RBF 核将产生一个完全连接的图形, 它通过密集矩阵在内存中表示。 该矩阵可能非常大, 与算法的每次迭代执行全矩阵乘法计算的成本相结合可导致超长的运行时间。 在另一方面, KNN 核将产生更多的内存友好的稀疏矩阵, 这样可以大幅度的减少运行时间。
>示例
> **示例**
>
>* [Decision boundary of label propagation versus SVM on the Iris dataset](https://scikit-learn.org/stable/auto_examples/semi_supervised/plot_label_propagation_versus_svm_iris.html#sphx-glr-auto-examples-semi-supervised-plot-label-propagation-versus-svm-iris-py)
>* [Label Propagation learning a complex structure](https://scikit-learn.org/stable/auto_examples/semi_supervised/plot_label_propagation_structure.html#sphx-glr-auto-examples-semi-supervised-plot-label-propagation-structure-py)
>* [Label Propagation digits active learning](https://scikit-learn.org/stable/auto_examples/semi_supervised/plot_label_propagation_digits_active_learning.html#sphx-glr-auto-examples-semi-supervised-plot-label-propagation-digits-active-learning-py)
>参考
> **参考资料**
>* [1] Yoshua Bengio, Olivier Delalleau, Nicolas Le Roux. In Semi-Supervised Learning (2006), pp. 193-216
>* [2] Olivier Delalleau, Yoshua Bengio, Nicolas Le Roux. Efficient Non-Parametric Function Induction in Semi-Supervised Learning. AISTAT 2005 [http://research.microsoft.com/en-us/people/nicolasl/efficient_ssl.pdf](http://research.microsoft.com/en-us/people/nicolasl/efficient_ssl.pdf)
# 1.15\. 等式回归
# 1.15. 等式回归
校验者:
        [@STAN,废柴0.1](https://github.com/apachecn/scikit-learn-doc-zh)
......
# 1.16\. 概率校准
# 1.16. 概率校准
校验者:
        [@曲晓峰](https://github.com/apachecn/scikit-learn-doc-zh)
......@@ -54,7 +54,7 @@
该校准导致较低的 log-loss(对数损失). 请注意,替代方案是增加基准估计量的数量, 这将导致对数损失类似的减少.
>参考:
> **参考资料**:
>* Obtaining calibrated probability estimates from decision trees and naive Bayesian classifiers, B. Zadrozny & C. Elkan, ICML 2001
>* Transforming Classifier Scores into Accurate Multiclass Probability Estimates, B. Zadrozny & C. Elkan, (KDD 2002)
>* Probabilistic Outputs for Support Vector Machines and Comparisons to Regularized Likelihood Methods, J. Platt, (1999)
......
# 1.17\. 神经网络模型(有监督)
# 1.17. 神经网络模型(有监督)
校验者:
        [@tiantian1412](https://github.com/tiantian1412)
......@@ -11,7 +11,7 @@
>
>此实现不适用于大规模数据应用。 特别是 scikit-learn 不支持 GPU。如果想要提高运行速度并使用基于 GPU 的实现以及为构建深度学习架构提供更多灵活性的框架,请参阅 [Related Projects](https://scikit-learn.org/stable/related_projects.html#related-projects) 。
## 1.17.1\. 多层感知器
## 1.17.1. 多层感知器
**多层感知器(MLP)** 是一种监督学习算法,通过在数据集上训练来学习函数 ![f(\cdot): R^m \rightarrow R^o](img/fd6f65ce4fb7491d7628d1ce576c19d4.jpg),其中 ![m](img/94156b879a7455cb0d516efa9c9c0991.jpg) 是输入的维数,![o](img/f7f0b321634c8d80ceacdc75ee3c68b6.jpg) 是输出的维数。 给定一组特征 ![X = {x_1, x_2, ..., x_m}](img/d7228aff11bb03497e40badd984560a6.jpg) 和标签 ![y](img/0775c03fc710a24df297dedcec515aaf.jpg) ,它可以学习用于分类或回归的非线性函数。 与逻辑回归不同的是,在输入层和输出层之间,可以有一个或多个非线性层,称为隐藏层。 图1 展示了一个具有标量输出的单隐藏层 MLP。
......@@ -36,7 +36,7 @@
解决这些缺点的方法请参阅 [实用使用技巧](#_1178-实用技巧) 部分。
## 1.17.2\. 分类
## 1.17.2. 分类
[`MLPClassifier`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html#sklearn.neural_network.MLPClassifier "sklearn.neural_network.MLPClassifier") 类实现了通过 [Backpropagation](http://ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithm) 进行训练的多层感知器(MLP)算法。
......@@ -115,17 +115,17 @@ array([[0, 1]])
更多内容请参阅下面的示例和文档 [`MLPClassifier.fit`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html#sklearn.neural_network.MLPClassifier.fit "sklearn.neural_network.MLPClassifier.fit")
>示例:
> **示例**:
>* [Compare Stochastic learning strategies for MLPClassifier](https://scikit-learn.org/stable/auto_examples/neural_networks/plot_mlp_training_curves.html#sphx-glr-auto-examples-neural-networks-plot-mlp-training-curves-py)
>* [Visualization of MLP weights on MNIST](https://scikit-learn.org/stable/auto_examples/neural_networks/plot_mnist_filters.html#sphx-glr-auto-examples-neural-networks-plot-mnist-filters-py)
## 1.17.3\. 回归
## 1.17.3. 回归
[`MLPRegressor`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPRegressor.html#sklearn.neural_network.MLPRegressor "sklearn.neural_network.MLPRegressor") 类多层感知器(MLP)的实现,在使用反向传播进行训练时的输出层没有使用激活函数,也可以看作是使用恒等函数(identity function)作为激活函数。 因此,它使用平方误差作为损失函数,输出是一组连续值。
[`MLPRegressor`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPRegressor.html#sklearn.neural_network.MLPRegressor "sklearn.neural_network.MLPRegressor") 还支持多输出回归,其中一个样本可以有多个目标值。
## 1.17.4\. 正则化
## 1.17.4. 正则化
[`MLPRegressor`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPRegressor.html#sklearn.neural_network.MLPRegressor "sklearn.neural_network.MLPRegressor") 类和 [`MLPClassifier`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html#sklearn.neural_network.MLPClassifier "sklearn.neural_network.MLPClassifier") 类都使用参数 `alpha` 作为正则化( L2 正则化)系数,正则化通过惩罚大数量级的权重值以避免过拟合问题。 下面的图表展示了不同的 alpha 值下的决策函数的变化。
......@@ -133,10 +133,10 @@ array([[0, 1]])
详细信息,请参阅下面的示例。
>示例:
> **示例**:
>* [Varying regularization in Multi-layer Perceptron](https://scikit-learn.org/stable/auto_examples/neural_networks/plot_mlp_alpha.html#sphx-glr-auto-examples-neural-networks-plot-mlp-alpha-py)
## 1.17.5\. 算法
## 1.17.5. 算法
MLP 使用 [Stochastic Gradient Descent(随机梯度下降)(SGD)](https://en.wikipedia.org/wiki/Stochastic_gradient_descent), [Adam](http://arxiv.org/abs/1412.6980), 或者 [L-BFGS](https://en.wikipedia.org/wiki/Limited-memory_BFGS) 进行训练。 随机梯度下降(SGD) 使用关于需要适应的一个参数的损失函数的梯度来更新参数,即
......@@ -156,11 +156,11 @@ L-BFGS 是利用 Hessian 矩阵来近似函数的二阶偏导数的求解器,
如果所选择的方法是 ‘L-BFGS’,训练过程不支持在线学习模式和小批量学习模式。
## 1.17.6\. 复杂度
## 1.17.6. 复杂度
假设有 ![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) 个训练样本, ![m](img/94156b879a7455cb0d516efa9c9c0991.jpg) 个特征, ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 个隐藏层,每个包含 ![h](img/c5f49595b56010ad04fce358940848e5.jpg) 个神经元 - 为简单起见, ![o](img/f7f0b321634c8d80ceacdc75ee3c68b6.jpg) 个输出神经元。 反向传播的时间复杂度是 ![O(n\cdot m \cdot h^k \cdot o \cdot i)](img/9ef5bf146675caa32b298d7e8318fc43.jpg) ,其中 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 是迭代次数。 由于反向传播具有高时间复杂性,最好以较少数量的隐藏层神经元和较少的隐藏层个数开始训练。
## 1.17.7\. 数学公式
## 1.17.7. 数学公式
给出一组训练样本 ![(x_1, y_1), (x_2, y_2), \ldots, (x_n, y_n)](img/ad854ab6b0056f9b521d823a98548d3f.jpg) 其中 ![x_i \in \mathbf{R}^n](img/1f1667a67d885f419222cbd85c70dd56.jpg) , ![y_i \in \{0, 1\}](img/6a8621a4ada40acd48b43436ca6a4527.jpg) ,一个单隐藏层单神经元 MLP 学习到的函数是 ![f(x) = W_2 g(W_1^T x + b_1) + b_2](img/d2fed0ae8e2b987a781ee01a92c31dfb.jpg) ,其中 ![W_1 \in \mathbf{R}^m](img/77eee205b1d286584f4002a39c9b32a3.jpg) 和 ![W_2, b_1, b_2 \in \mathbf{R}](img/855d4e5dae2b0286042ee7eef0c91ab5.jpg) 是模型参数. ![W_1, W_2](img/4609693b88f682790da8203535625471.jpg) 分别是输入层与隐藏层之间和隐藏层与输出层之间的权重, ![b_1, b_2](img/09ed5f467366506cf3b8d425d00db588.jpg) 分别是隐藏层和输出层的偏置值. ![g(\cdot) : R \rightarrow R](img/f7129cf20abc58eaa0e261335a7606a6.jpg) 是激活函数,默认为双曲正切函数。 具体形式如下,
......@@ -196,7 +196,7 @@ MLP 根据特定问题使用不同的损失函数。 二分类问题的损失函
算法停止的条件或者是达到预设的最大迭代次数,或者是损失函数低于某个特定值。
## 1.17.8\. 实用技巧
## 1.17.8. 实用技巧
* 多层感知器对特征的缩放是敏感的,所以它强烈建议您归一化你的数据。 例如,将输入向量 X 的每个属性放缩到到 [0, 1] 或 [-1,+1] ,或者将其标准化使它具有 0 均值和方差 1。注意,为了得到有意义的结果,您必须对测试集也应用 *相同的* 尺度缩放。 您可以使用 `StandardScaler` 进行标准化。
......@@ -213,7 +213,7 @@ MLP 根据特定问题使用不同的损失函数。 二分类问题的损失函
* 最好使用 `GridSearchCV` 找到一个合理的正则化参数 ![\alpha](img/d8b3d5242d513369a44f8bf0c6112744.jpg) ,通常范围是在 `10.0 ** -np.arange(1, 7)`
* 据经验可知,我们观察到 *L-BFGS* 收敛速度是更快的并且是小数据集上更好的解决方案。对于规模相对比较大的数据集,*Adam* 是非常鲁棒的。 它通常会迅速收敛,并得到相当不错的表现。另一方面,如果学习率调整得正确, 使用 momentum 或 nesterov’s momentum 的 *SGD* 可以比这两种算法更好。
## 1.17.9\. 使用 warm_start 的更多控制
## 1.17.9. 使用 warm_start 的更多控制
如果您希望更多地控制 SGD 中的停止标准或学习率,或者想要进行额外的监视,使用 `warm_start=True``max_iter=1` 并且自身迭代可能会有所帮助:
......@@ -228,7 +228,7 @@ MLPClassifier(...
```
>参考文献:
> **参考资料**:
>
>* [“Learning representations by back-propagating errors.”](http://www.iro.umontreal.ca/~pift6266/A06/refs/backprop_old.pdf) Rumelhart, David E., Geoffrey E. Hinton, and Ronald J. Williams.
>* [“Stochastic Gradient Descent”](http://leon.bottou.org/projects/sgd) L. Bottou - Website, 2010.
......
# 2\. 无监督学习
* [2.1\. 高斯混合模型](/docs/20?id=_21-高斯混合模型)
* [2.1.1\. 高斯混合](/docs/20?id=_211-高斯混合)
* [2.1.1.1\. 优缺点 `GaussianMixture`](/docs/20?id=_2111-优缺点-`gaussianmixture`)
* [2.1.1.1.1\. 优点](/docs/20?id=_21111-优点)
* [2.1.1.1.2\. 缺点](/docs/20?id=_21112-缺点)
* [2.1.1.2\. 选择经典高斯混合模型中分量的个数](/docs/20?id=_2112-选择经典高斯混合模型中分量的个数)
* [2.1.1.3\. 估计算法期望最大化(EM)](/docs/20?id=_2113-估计算法期望最大化(em))
* [2.1.2\. 变分贝叶斯高斯混合](/docs/20?id=_212-变分贝叶斯高斯混合)
* [2.1.2.1\. 估计算法: 变分推断(variational inference)](/docs/20?id=_2121-估计算法:-变分推断(variational-inference))
* [2.1.2.1.1\. 优点](/docs/20?id=_21211-优点)
* [2.1.2.1.2\. 缺点](/docs/20?id=_21212-缺点)
* [2.1.2.2\. The Dirichlet Process(狄利克雷过程)](/docs/20?id=_2122-the-dirichlet-process(狄利克雷过程))
* [2.2\. 流形学习](/docs/21?id=_22-流形学习)
* [2.2.1\. 介绍](/docs/21?id=_221-介绍)
* [2.2.2\. Isomap](/docs/21?id=_222-isomap)
* [2.2.2.1\. 复杂度](/docs/21?id=_2221-复杂度)
* [2.2.3\. 局部线性嵌入](/docs/21?id=_223-局部线性嵌入)
* [2.2.3.1\. 复杂度](/docs/21?id=_2231-复杂度)
* [2.2.4\. 改进型局部线性嵌入(MLLE)](/docs/21?id=_224-改进型局部线性嵌入(mlle))
* [2.2.4.1\. 复杂度](/docs/21?id=_2241-复杂度)
* [2.2.5\. 黑塞特征映射(HE)](/docs/21?id=_225-黑塞特征映射(he))
* [2.2.5.1\. 复杂度](/docs/21?id=_2251-复杂度)
* [2.2.6\. 谱嵌入](/docs/21?id=_226-谱嵌入)
* [2.2.6.1\. 复杂度](/docs/21?id=_2261-复杂度)
* [2.2.7\. 局部切空间对齐(LTSA)](/docs/21?id=_227-局部切空间对齐(ltsa))
* [2.2.7.1\. 复杂度](/docs/21?id=_2271-复杂度)
* [2.2.8\. 多维尺度分析(MDS)](/docs/21?id=_228-多维尺度分析(mds))
* [2.2.8.1\. 度量 MDS](/docs/21?id=_2281-度量-mds)
* [2.2.8.2\. 非度量 MDS](/docs/21?id=_2282-非度量-mds)
* [2.2.9\. t 分布随机邻域嵌入(t-SNE)](/docs/21?id=_229-t-分布随机邻域嵌入(t-sne))
* [2.2.9.1\. 优化 t-SNE](/docs/21?id=_2291-优化-t-sne)
* [2.2.9.2\. Barnes-Hut t-SNE](/docs/21?id=_2292-barnes-hut-t-sne)
* [2.2.10\. 实用技巧](/docs/21?id=_2210-实用技巧)
* [2.3\. 聚类](/docs/22?id=_23-聚类)
* [2.3.1\. 聚类方法概述](/docs/22?id=_231-聚类方法概述)
* [2.3.2\. K-means](/docs/22?id=_232-k-means)
* [2.3.2.1\. 小批量 K-Means](/docs/22?id=_2321-小批量-k-means)
* [2.3.3\. Affinity Propagation](/docs/22?id=_233-affinity-propagation)
* [2.3.4\. Mean Shift](/docs/22?id=_234-mean-shift)
* [2.3.5\. Spectral clustering](/docs/22?id=_235-spectral-clustering)
* [2.3.5.1\. 不同的标记分配策略](/docs/22?id=_2351-不同的标记分配策略)
* [2.3.6\. 层次聚类](/docs/22?id=_236-层次聚类)
* [2.3.6.1\. Different linkage type: Ward, complete and average linkage](/docs/22?id=_2361-different-linkage-type:-ward,-complete-and-average-linkage)
* [2.3.6.2\. 添加连接约束](/docs/22?id=_2362-添加连接约束)
* [2.3.6.3\. Varying the metric](/docs/22?id=_2363-varying-the-metric)
* [2.3.7\. DBSCAN](/docs/22?id=_237-dbscan)
* [2.3.8\. Birch](/docs/22?id=_238-birch)
* [2.3.9\. 聚类性能度量](/docs/22?id=_239-聚类性能度量)
* [2.3.9.1\. 调整后的 Rand 指数](/docs/22?id=_2391-调整后的-rand-指数)
* [2.3.9.1.1\. 优点](/docs/22?id=_23911-优点)
* [2.3.9.1.2\. 缺点](/docs/22?id=_23912-缺点)
* [2.3.9.1.3\. 数学表达](/docs/22?id=_23913-数学表达)
* [2.3.9.2\. 基于 Mutual Information (互信息)的分数](/docs/22?id=_2392-基于-mutual-information-(互信息)的分数)
* [2.3.9.2.1\. 优点](/docs/22?id=_23921-优点)
* [2.3.9.2.2\. 缺点](/docs/22?id=_23922-缺点)
* [2.3.9.2.3\. 数学公式](/docs/22?id=_23923-数学公式)
* [2.3.9.3\. 同质性,完整性和 V-measure](/docs/22?id=_2393-同质性,完整性和-v-measure)
* [2.3.9.3.1\. 优点](/docs/22?id=_23931-优点)
* [2.3.9.3.2\. 缺点](/docs/22?id=_23932-缺点)
* [2.3.9.3.3\. 数学表达](/docs/22?id=_23933-数学表达)
* [2.3.9.4\. Fowlkes-Mallows 分数](/docs/22?id=_2394-fowlkes-mallows-分数)
* [2.3.9.4.1\. 优点](/docs/22?id=_23941-优点)
* [2.3.9.4.2\. 缺点](/docs/22?id=_23942-缺点)
* [2.3.9.5\. Silhouette 系数](/docs/22?id=_2395-silhouette-系数)
* [2.3.9.5.1\. 优点](/docs/22?id=_23951-优点)
* [2.3.9.5.2\. 缺点](/docs/22?id=_23952-缺点)
* [2.3.9.6\. Calinski-Harabaz 指数](/docs/22?id=_2396-calinski-harabaz-指数)
* [2.3.9.6.1\. 优点](/docs/22?id=_23961-优点)
* [2.3.9.6.2\. 缺点](/docs/22?id=_23962-缺点)
* [2.4\. 双聚类](/docs/23?id=_24-双聚类)
* [2.4.1\. Spectral Co-Clustering](/docs/23?id=_241-spectral-co-clustering)
* [2.4.1.1\. 数学公式](/docs/23?id=_2411-数学公式)
* [2.4.2\. Spectral Biclustering](/docs/23?id=_242-spectral-biclustering)
* [2.4.2.1\. 数学表示](/docs/23?id=_2421-数学表示)
* [2.4.3\. Biclustering 评测](/docs/23?id=_243-biclustering-评测)
* [2.5\. 分解成分中的信号(矩阵分解问题)](/docs/24?id=_25-分解成分中的信号(矩阵分解问题))
* [2.5.1\. 主成分分析(PCA)](/docs/24?id=_251-主成分分析(pca))
* [2.5.1.1\. 准确的PCA和概率解释(Exact PCA and probabilistic interpretation)](/docs/24?id=_2511-准确的pca和概率解释(exact-pca-and-probabilistic-interpretation))
* [2.5.1.2\. 增量PCA (Incremental PCA)](/docs/24?id=_2512-增量pca-(incremental-pca)
* [2.5.1.3\. PCA 使用随机SVD](/docs/24?id=_2513-pca-使用随机svd)
* [2.5.1.4\. 核 PCA](/docs/24?id=_2514-核-pca)
* [2.5.1.5\. 稀疏主成分分析 ( SparsePCA 和 MiniBatchSparsePCA )](/docs/24?id=_2515-稀疏主成分分析-(-sparsepca-和-minibatchsparsepca-)
* [2.5.2\. 截断奇异值分解和隐语义分析](/docs/24?id=_252-截断奇异值分解和隐语义分析)
* [2.5.3\. 词典学习](/docs/24?id=_253-词典学习)
* [2.5.3.1\. 带有预计算词典的稀疏编码](/docs/24?id=_2531-带有预计算词典的稀疏编码)
* [2.5.3.2\. 通用词典学习](/docs/24?id=_2532-通用词典学习)
* [2.5.3.3\. 小批量字典学习](/docs/24?id=_2533-小批量字典学习)
* [2.5.4\. 因子分析](/docs/24?id=_254-因子分析)
* [2.5.5\. 独立成分分析(ICA)](/docs/24?id=_255-独立成分分析(ica))
* [2.5.6\. 非负矩阵分解(NMF 或 NNMF)](/docs/24?id=_256-非负矩阵分解(nmf-或-nnmf)
* [2.5.6.1\. NMF 与 Frobenius 范数](/docs/24?id=_2561-nmf-与-frobenius-范数)
* [2.5.6.2\. 具有 beta-divergence 的 NMF](/docs/24?id=_2562-具有-beta-divergence-的-nmf)
* [2.5.7\. 隐 Dirichlet 分配(LDA)](/docs/24?id=_257-隐-dirichlet-分配(lda))
* [2.6\. 协方差估计](/docs/25?id=_26-协方差估计)
* [2.6.1\. 经验协方差](/docs/25?id=_261-经验协方差)
* [2.6.2\. 收敛协方差](/docs/25?id=_262-收敛协方差)
* [2.6.2.1\. 基本收敛](/docs/25?id=_2621-基本收敛)
* [2.6.2.2\. Ledoit-Wolf 收敛](/docs/25?id=_2622-ledoit-wolf-收敛)
* [2.6.2.3\. Oracle 近似收缩](/docs/25?id=_2623-oracle-近似收缩)
* [2.6.3\. 稀疏逆协方差](/docs/25?id=_263-稀疏逆协方差)
* [2.6.4\. Robust 协方差估计](/docs/25?id=_264-robust-协方差估计)
* [2.6.4.1\. 最小协方差决定](/docs/25?id=_2641-最小协方差决定)
* [2.11\. 新奇和异常值检测](/docs/26?id=_211-新奇和异常值检测)
* [2.11.1\. Novelty Detection(新奇检测)](/docs/26?id=_2111-novelty-detection(新奇检测))
* [2.11.2\. Outlier Detection(异常值检测)](/docs/26?id=_2112-outlier-detection(异常值检测))
* [2.11.2.1\. Fitting an elliptic envelope(椭圆模型拟合)](/docs/26?id=_21121-fitting-an-elliptic-envelope(椭圆模型拟合))
* [2.11.2.2\. Isolation Forest(隔离森林)](/docs/26?id=_21122-isolation-forest(隔离森林))
* [2.11.2.3\. Local Outlier Factor(局部异常系数)](/docs/26?id=_21123-local-outlier-factor(局部异常系数))
* [2.11.2.4\. 一类支持向量机与椭圆模型与隔离森林与局部异常系数](/docs/26?id=_21124-一类支持向量机与椭圆模型与隔离森林与局部异常系数)
* [2.12\. 密度估计](/docs/27?id=_212-密度估计)
* [2.12.1\. 密度估计: 直方图](/docs/27?id=_2121-密度估计:-直方图)
* [2.12.2\. 核密度估计](/docs/27?id=_2122-核密度估计)
* [2.13\. 神经网络模型(无监督)](/docs/28?id=_213-神经网络模型(无监督))
* [2.13.1\. 限制波尔兹曼机](/docs/28?id=_2131-限制波尔兹曼机)
* [2.13.1.1\. 图形模型和参数化](/docs/28?id=_21311-图形模型和参数化)
* [2.13.1.2\. 伯努利限制玻尔兹曼机](/docs/28?id=_21312-伯努利限制玻尔兹曼机)
* [2.13.1.3\. 随机最大似然学习](/docs/28?id=_21313-随机最大似然学习)
# 2. 无监督学习
* [2.1 高斯混合模型](docs/20.md?id=_21-高斯混合模型)
* [2.1.1 高斯混合](docs/20.md?id=_211-高斯混合)
* [2.1.1.1 优缺点](docs/20.md?id=_2111-优缺点-gaussianmixture)
* [2.1.1.1.1 优点](docs/20.md?id=_21111-优点)
* [2.1.1.1.2 缺点](docs/20.md?id=_21112-缺点)
* [2.1.1.2 选择经典高斯混合模型中分量的个数](docs/20.md?id=_2112-选择经典高斯混合模型中分量的个数)
* [2.1.1.3 估计算法期望最大化(EM)](docs/20.md?id=_2113-估计算法期望最大化(em))
* [2.1.2 变分贝叶斯高斯混合](docs/20.md?id=_212-变分贝叶斯高斯混合)
* [2.1.2.1 估计算法: 变分推断(variational inference)](docs/20.md?id=_2121-估计算法:-变分推断(variational-inference))
* [2.1.2.2. BayesianGaussianMixture下的变分推理的优缺点](docs/20.md?id=_2122-bayesiangaussianmixture-下的变分推理的优缺点)
* [2.1.2.2.1 优点](docs/20.md?id=_21221-优点)
* [2.1.2.2.2 缺点](docs/20.md?id=_21222-缺点)
* [2.1.2.3 The Dirichlet Process(狄利克雷过程)](docs/20.md?id=_2123-the-dirichlet-process(狄利克雷过程))
* [2.2 流形学习](docs/21.md?id=_22-流形学习)
* [2.2.1 介绍](docs/21.md?id=_221-介绍)
* [2.2.2 Isomap](docs/21.md?id=_222-isomap)
* [2.2.2.1 复杂度](docs/21.md?id=_2221-复杂度)
* [2.2.3 局部线性嵌入](docs/21.md?id=_223-局部线性嵌入)
* [2.2.3.1 复杂度](docs/21.md?id=_2231-复杂度)
* [2.2.4 改进型局部线性嵌入(MLLE)](docs/21.md?id=_224-改进型局部线性嵌入(mlle))
* [2.2.4.1 复杂度](docs/21.md?id=_2241-复杂度)
* [2.2.5 黑塞特征映射(HE)](docs/21.md?id=_225-黑塞特征映射(he))
* [2.2.5.1 复杂度](docs/21.md?id=_2251-复杂度)
* [2.2.6 谱嵌入](docs/21.md?id=_226-谱嵌入)
* [2.2.6.1 复杂度](docs/21.md?id=_2261-复杂度)
* [2.2.7 局部切空间对齐(LTSA)](docs/21.md?id=_227-局部切空间对齐(ltsa))
* [2.2.7.1 复杂度](docs/21.md?id=_2271-复杂度)
* [2.2.8 多维尺度分析(MDS)](docs/21.md?id=_228-多维尺度分析(mds))
* [2.2.8.1 度量 MDS](docs/21.md?id=_2281-度量-mds)
* [2.2.8.2 非度量 MDS](docs/21.md?id=_2282-非度量-mds)
* [2.2.9 t 分布随机邻域嵌入(t-SNE)](docs/21.md?id=_229-t-分布随机邻域嵌入(t-sne))
* [2.2.9.1 优化 t-SNE](docs/21.md?id=_2291-优化-t-sne)
* [2.2.9.2 Barnes-Hut t-SNE](docs/21.md?id=_2292-barnes-hut-t-sne)
* [2.2.10 实用技巧](docs/21.md?id=_2210-实用技巧)
* [2.3 聚类](docs/22.md?id=_23-聚类)
* [2.3.1 聚类方法概述](docs/22.md?id=_231-聚类方法概述)
* [2.3.2 K-means](docs/22.md?id=_232-k-means)
* [2.3.2.1 小批量 K-Means](docs/22.md?id=_2321-小批量-k-means)
* [2.3.3 Affinity Propagation](docs/22.md?id=_233-affinity-propagation)
* [2.3.4 Mean Shift](docs/22.md?id=_234-mean-shift)
* [2.3.5 Spectral clustering](docs/22.md?id=_235-spectral-clustering)
* [2.3.5.1 不同的标记分配策略](docs/22.md?id=_2351-不同的标记分配策略)
* [2.3.5.2 谱聚类用于图聚类问题](docs/22.md?id=_2352-谱聚类用于图聚类问题)
* [2.3.6 层次聚类](docs/22.md?id=_236-层次聚类)
* [2.3.6.1 不同连接类型: Ward, complete and average linkage](docs/22.md?id=_2361-不同连接类型:-ward,-complete-and-average-linkage)
* [2.3.6.2 添加连接约束](docs/22.md?id=_2362-添加连接约束)
* [2.3.6.3 Varying the metric](docs/22.md?id=_2363-varying-the-metric)
* [2.3.7 DBSCAN](docs/22.md?id=_237-dbscan)
* [2.3.8 OPTICS](docs/22.md?id=_238-optics)
* [2.3.9 Birch](docs/22.md?id=_239-birch)
* [2.3.10 聚类性能度量](docs/22.md?id=_2310-聚类性能度量)
* [2.3.10.1 调整后的 Rand 指数](docs/22.md?id=_23101-调整后的-rand-指数)
* [2.3.10.1.1 优点](docs/22.md?id=_231011-优点)
* [2.3.10.1.2 缺点](docs/22.md?id=_231012-缺点)
* [2.3.10.1.3 数学表达](docs/22.md?id=_231013-数学表达)
* [2.3.10.2 基于 Mutual Information (互信息)的分数](docs/22.md?id=_23102-基于-mutual-information-(互信息)的分数)
* [2.3.10.2.1 优点](docs/22.md?id=_231021-优点)
* [2.3.10.2.2 缺点](docs/22.md?id=_231022-缺点)
* [2.3.10.2.3 数学公式](docs/22.md?id=_231023-数学公式)
* [2.3.10.3 同质性,完整性和 V-measure](docs/22.md?id=_23103-同质性,完整性和-v-measure)
* [2.3.10.3.1 优点](docs/22.md?id=_231031-优点)
* [2.3.10.3.2 缺点](docs/22.md?id=_231032-缺点)
* [2.3.10.3.3 数学表达](docs/22.md?id=_231033-数学表达)
* [2.3.10.4 Fowlkes-Mallows 分数](docs/22.md?id=_23104-fowlkes-mallows-分数)
* [2.3.10.4.1 优点](docs/22.md?id=_231041-优点)
* [2.3.10.4.2 缺点](docs/22.md?id=_231042-缺点)
* [2.3.10.5 Silhouette 系数](docs/22.md?id=_23105-silhouette-系数)
* [2.3.10.5.1 优点](docs/22.md?id=_231051-优点)
* [2.3.10.5.2 缺点](docs/22.md?id=_231052-缺点)
* [2.3.10.6 Calinski-Harabaz 指数](docs/22.md?id=_23106-calinski-harabaz-指数)
* [2.3.10.6.1 优点](docs/22.md?id=_231061-优点)
* [2.3.10.6.2 缺点](docs/22.md?id=_231062-缺点)
* [2.4 双聚类](docs/23.md?id=_24-双聚类)
* [2.4.1 Spectral Co-Clustering](docs/23.md?id=_241-spectral-co-clustering)
* [2.4.1.1 数学公式](docs/23.md?id=_2411-数学公式)
* [2.4.2 Spectral Biclustering](docs/23.md?id=_242-spectral-biclustering)
* [2.4.2.1 数学表示](docs/23.md?id=_2421-数学表示)
* [2.4.3 Biclustering 评价](docs/23.md?id=_243-biclustering-评价)
* [2.5 分解成分中的信号(矩阵分解问题)](docs/24.md?id=_25-分解成分中的信号(矩阵分解问题))
* [2.5.1 主成分分析(PCA)](docs/24.md?id=_251-主成分分析(pca))
* [2.5.1.1 准确的PCA和概率解释(Exact PCA and probabilistic interpretation)](docs/24.md?id=_2511-准确的pca和概率解释(exact-pca-and-probabilistic-interpretation))
* [2.5.1.2 增量PCA (Incremental PCA)](docs/24.md?id=_2512-增量pca-incremental-pca)
* [2.5.1.3 PCA 使用随机SVD](docs/24.md?id=_2513-pca-使用随机svd)
* [2.5.1.4 核 PCA](docs/24.md?id=_2514-核-pca)
* [2.5.1.5 稀疏主成分分析 ( SparsePCA 和 MiniBatchSparsePCA )](docs/24.md?id=_2515-稀疏主成分分析--sparsepca-和-minibatchsparsepca-)
* [2.5.2 截断奇异值分解和隐语义分析](docs/24.md?id=_252-截断奇异值分解和隐语义分析)
* [2.5.3 词典学习](docs/24.md?id=_253-词典学习)
* [2.5.3.1 带有预计算词典的稀疏编码](docs/24.md?id=_2531-带有预计算词典的稀疏编码)
* [2.5.3.2 通用词典学习](docs/24.md?id=_2532-通用词典学习)
* [2.5.3.3 小批量字典学习](docs/24.md?id=_2533-小批量字典学习)
* [2.5.4 因子分析](docs/24.md?id=_254-因子分析)
* [2.5.5 独立成分分析(ICA)](docs/24.md?id=_255-独立成分分析(ica))
* [2.5.6 非负矩阵分解(NMF 或 NNMF)](docs/24.md?id=_256-非负矩阵分解nmf-或-nnmf)
* [2.5.6.1 NMF 与 Frobenius 范数](docs/24.md?id=_2561-nmf-与-frobenius-范数)
* [2.5.6.2 具有 beta-divergence 的 NMF](docs/24.md?id=_2562-具有-beta-divergence-的-nmf)
* [2.5.7 隐 Dirichlet 分配(LDA)](docs/24.md?id=_257-隐-dirichlet-分配(lda))
* [2.6 协方差估计](docs/25.md?id=_26-协方差估计)
* [2.6.1 经验协方差](docs/25.md?id=_261-经验协方差)
* [2.6.2 收敛协方差](docs/25.md?id=_262-收敛协方差)
* [2.6.2.1 基本收敛](docs/25.md?id=_2621-基本收敛)
* [2.6.2.2 Ledoit-Wolf 收敛](docs/25.md?id=_2622-ledoit-wolf-收敛)
* [2.6.2.3 Oracle 近似收缩](docs/25.md?id=_2623-oracle-近似收缩)
* [2.6.3 稀疏逆协方差](docs/25.md?id=_263-稀疏逆协方差)
* [2.6.4 Robust 协方差估计](docs/25.md?id=_264-robust-协方差估计)
* [2.6.4.1 最小协方差决定](docs/25.md?id=_2641-最小协方差决定)
* [2.7 新奇和异常值检测](docs/26.md?id=_27-新奇和异常值检测)
* [2.7.1 孤立点检测方法一览](docs/26.md?id=_271-孤立点检测方法一览)
* [2.7.2 Novelty Detection(新奇检测)](docs/26.md?id=_272-novelty-detection(新奇检测))
* [2.7.3 Outlier Detection(异常值检测)](docs/26.md?id=_273-outlier-detection(异常值检测))
* [2.7.3.1 Fitting an elliptic envelope(椭圆模型拟合)](docs/26.md?id=_2731-fitting-an-elliptic-envelope(椭圆模型拟合))
* [2.7.3.2 Isolation Forest(隔离森林)](docs/26.md?id=_2732-isolation-forest(隔离森林))
* [2.7.3.3 Local Outlier Factor(局部异常系数)](docs/26.md?id=_2733-local-outlier-factor(局部异常系数))
* [2.7.4 使用LOF进行新奇点检测](docs/26.md?id=_274-使用lof进行新奇点检测)
* [2.8 密度估计](docs/27.md?id=_28-密度估计)
* [2.8.1 密度估计: 直方图](docs/27.md?id=_281-密度估计:-直方图)
* [2.8.2 核密度估计](docs/27.md?id=_282-核密度估计)
* [2.9 神经网络模型(无监督)](docs/28.md?id=_29-神经网络模型(无监督))
* [2.9.1 限制波尔兹曼机](docs/28.md?id=_291-限制波尔兹曼机)
* [2.9.1.1 图形模型和参数化](docs/28.md?id=_2911-图形模型和参数化)
* [2.9.1.2 伯努利限制玻尔兹曼机](docs/28.md?id=_2912-伯努利限制玻尔兹曼机)
* [2.9.1.3 随机最大似然学习](docs/28.md?id=_2913-随机最大似然学习)
此差异已折叠。
# 2.1\. 高斯混合模型
# 2.1. 高斯混合模型
校验者:
        [@why2lyj](https://github.com/why2lyj)
......@@ -17,7 +17,7 @@
对应不同的估算策略,Scikit-learn 实现了不同的类来估算高斯混合模型。 详细描述如下:
## 2.1.1\. 高斯混合
## 2.1.1. 高斯混合
[`GaussianMixture`](https://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture "sklearn.mixture.GaussianMixture") 对象实现了用来拟合高斯混合模型的 [期望最大化](#expectation-maximization) (EM) 算法。它还可以为多变量模型绘制置信区间,同时计算 BIC(Bayesian Information Criterion,贝叶斯信息准则)来评估数据中聚类的数量。 [`GaussianMixture.fit`](https://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture.fit "sklearn.mixture.GaussianMixture.fit") 提供了从训练数据中学习高斯混合模型的方法。
......@@ -27,40 +27,40 @@
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gmm_covariances_0011.png](img/8cc09b4045e2fece3222e52d7333c1e5.jpg)](https://scikit-learn.org/stable/auto_examples/mixture/plot_gmm_covariances.html)
>示例:
> **示例**:
>* 一个利用高斯混合模型在鸢尾花卉数据集(IRIS 数据集)上做聚类的协方差实例,请查阅 [GMM covariances](https://scikit-learn.org/stable/auto_examples/mixture/plot_gmm_covariances.html#sphx-glr-auto-examples-mixture-plot-gmm-covariances-py)
>* 一个绘制密度估计的例子,请查阅 [Density Estimation for a Gaussian mixture](https://scikit-learn.org/stable/auto_examples/mixture/plot_gmm_pdf.html#sphx-glr-auto-examples-mixture-plot-gmm-pdf-py)
### 2.1.1.1\. 优缺点 [`GaussianMixture`](https://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture "sklearn.mixture.GaussianMixture")
### 2.1.1.1. 优缺点 [`GaussianMixture`](https://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture "sklearn.mixture.GaussianMixture")
#### 2.1.1.1.1\. 优点
#### 2.1.1.1.1. 优点
* **速度:** 是混合模型学习算法中最快的算法.
* **无偏差性:** 这个算法仅仅只是最大化可能性,并不会使均值偏向于0,或是使聚类大小偏向于可能适用或者可能不适用的特殊结构。
#### 2.1.1.1.2\. 缺点
#### 2.1.1.1.2. 缺点
* **奇异性:** 当每个混合模型没有足够多的点时,估算协方差变得困难起来,同时算法会发散并且找具有无穷大似然函数值的解,除非人为地对协方差进行正则化。
* **分量的数量:** 这个算法将会总是用所有它能用的分量,所以在没有外部线索的情况下需要留存数据或者用信息理论标准来决定用多少分量。
### 2.1.1.2\. 选择经典高斯混合模型中分量的个数
### 2.1.1.2. 选择经典高斯混合模型中分量的个数
一种高效的方法是利用 BIC(贝叶斯信息准则)来选择高斯混合的分量数。 理论上,它仅当在近似状态下可以恢复正确的分量数(即如果有大量数据可用,并且假设这些数据实际上是一个混合高斯模型独立同分布生成的)。注意:使用 [变分贝叶斯高斯混合](#bgmm) 可以避免高斯混合模型中分量数的选择。
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gmm_selection_0011.png](img/8615ac5c8ea1fb8ae6e726f7659a29e9.jpg)](https://scikit-learn.org/stable/auto_examples/mixture/plot_gmm_selection.html)
>示例:
> **示例**:
>* 一个用典型的高斯混合进行的模型选择的例子,请查阅 [Gaussian Mixture Model Selection](https://scikit-learn.org/stable/auto_examples/mixture/plot_gmm_selection.html#sphx-glr-auto-examples-mixture-plot-gmm-selection-py)
### 2.1.1.3\. 估计算法期望最大化(EM)
### 2.1.1.3. 估计算法期望最大化(EM)
在从无标记的数据中应用高斯混合模型主要的困难在于:通常不知道哪个点来自哪个潜在的分量 (如果可以获取到这些信息,就可以很容易通过相应的数据点,拟合每个独立的高斯分布)。 [期望最大化(Expectation-maximization,EM)](https://en.wikipedia.org/wiki/Expectation%E2%80%93maximization_algorithm) 是一个理论完善的统计算法,其通过迭代方式来解决这个问题。首先,假设一个随机分量 (随机地选择一个中心点,可以用 k-means 算法得到,或者甚至就直接地随便在原点周围选取),并且为每个点计算由模型的每个分量生成的概率。然后,调整模型参数以最大化模型生成这些参数的可能性。重复这个过程,该算法保证过程中的参数总会收敛到局部最优解。
## 2.1.2\. 变分贝叶斯高斯混合
## 2.1.2. 变分贝叶斯高斯混合
[`BayesianGaussianMixture`](https://scikit-learn.org/stable/modules/generated/sklearn.mixture.BayesianGaussianMixture.html#sklearn.mixture.BayesianGaussianMixture "sklearn.mixture.BayesianGaussianMixture") 对象实现了具有变分的高斯混合模型的变体推理算法。 这个API和 [`GaussianMixture`](https://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture "sklearn.mixture.GaussianMixture") 相似。
### 2.1.2.1\. 估计算法: 变分推断(variational inference)
### 2.1.2.1. 估计算法: 变分推断(variational inference)
变分推断是期望最大化(EM)的扩展,它最大化模型证据(包括先验)的下界,而不是数据似然函数。 变分方法的原理与期望最大化相同(二者都是迭代算法,在寻找由混合产生的每个点的概率和根据所分配的点拟合之间两步交替),但是变分方法通过整合先验分布信息来增加正则化限制。 这避免了期望最大化解决方案中常出现的奇异性,但是也对模型带来了微小的偏差。 变分方法计算过程通常明显较慢,但通常不会慢到无法使用。
......@@ -78,21 +78,21 @@
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gmm_sin_0011.png](img/d2b34f499ce1bbd28a276bc0d7afdde1.jpg)](https://scikit-learn.org/stable/auto_examples/mixture/plot_gmm_sin.html)
>示例:
> **示例**:
> * 一个用 [`GaussianMixture`](https://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture "sklearn.mixture.GaussianMixture") 和 [`BayesianGaussianMixture`](https://scikit-learn.org/stable/modules/generated/sklearn.mixture.BayesianGaussianMixture.html#sklearn.mixture.BayesianGaussianMixture "sklearn.mixture.BayesianGaussianMixture") 绘制置信椭圆体的例子, 请查阅 [Gaussian Mixture Model Ellipsoids](https://scikit-learn.org/stable/auto_examples/mixture/plot_gmm.html#sphx-glr-auto-examples-mixture-plot-gmm-py)
> * [Gaussian Mixture Model Sine Curve](https://scikit-learn.org/stable/auto_examples/mixture/plot_gmm_sin.html#sphx-glr-auto-examples-mixture-plot-gmm-sin-py) 这个例子展示了用 [`GaussianMixture`](https://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture "sklearn.mixture.GaussianMixture") 和 [`BayesianGaussianMixture`](https://scikit-learn.org/stable/modules/generated/sklearn.mixture.BayesianGaussianMixture.html#sklearn.mixture.BayesianGaussianMixture "sklearn.mixture.BayesianGaussianMixture") 来拟合正弦波。
> * 一个使用不同的 `weight_concentration_prior_type` 用以不同的 `weight_concentration_prior` 参数值的:class:*BayesianGaussianMixture* 来绘制置信椭圆体的例子。 请查阅 [Concentration Prior Type Analysis of Variation Bayesian Gaussian Mixture](https://scikit-learn.org/stable/auto_examples/mixture/plot_concentration_prior.html#sphx-glr-auto-examples-mixture-plot-concentration-prior-py)
> * 一个使用不同的 `weight_concentration_prior_type` 用以不同的 `weight_concentration_prior` 参数值的 *BayesianGaussianMixture* 来绘制置信椭圆体的例子。 请查阅 [Concentration Prior Type Analysis of Variation Bayesian Gaussian Mixture](https://scikit-learn.org/stable/auto_examples/mixture/plot_concentration_prior.html#sphx-glr-auto-examples-mixture-plot-concentration-prior-py)
### 2.1.2.2. [`BayesianGaussianMixture`](https://scikit-learn.org/stable/modules/generated/sklearn.mixture.BayesianGaussianMixture.html#sklearn.mixture.BayesianGaussianMixture "sklearn.mixture.BayesianGaussianMixture") 下的变分推理的优缺点
#### 2.1.2.2.1\. 优点
#### 2.1.2.2.1. 优点
* **自动选择:**`weight_concentration_prior` 足够小以及 `n_components` 比模型需要的更大时,变分贝叶斯混合模型计算的结果可以让一些混合权重值趋近 0。 这让模型可以自动选择合适的有效分量数。这仅仅需要提供分量的数量上限。但是请注意,“理想” 的激活分量数只在应用场景中比较明确,在数据挖掘参数设置中通常并不明确。
* **对参数数量的敏感度较低:** 与总是用尽可以用的分量,因而将为不同数量的组件产生不同的解决方案有限模型不同,变分推理狄利克雷过程先验变分推理( `weight_concentration_prior_type='dirichlet_process'` )改变参数后结果并不会改变太多,使之更稳定和更少的调优。
* **正则化:** 由于结合了先验信息,变分的解比期望最大化(EM)的解有更少的病理特征(pathological special cases)。
#### 2.1.2.2.2\. 缺点
#### 2.1.2.2.2. 缺点
* **速度:** 变分推理所需要的额外参数化使推理速度变慢,尽管并没有慢很多。
......@@ -100,7 +100,7 @@
* **偏差:** 在推理算法存在许多隐含的偏差(如果用到狄利克雷过程也会有偏差), 每当这些偏差和数据之间不匹配时,用有限模型可能可以拟合更好的模型。
### 2.1.2.3\. The Dirichlet Process(狄利克雷过程)
### 2.1.2.3. The Dirichlet Process(狄利克雷过程)
这里我们描述了狄利克雷过程混合的变分推理算法。狄利克雷过程是在 _具有无限大,无限制的分区数的聚类_ 上的先验概率分布。相比于有限高斯混合模型,变分技术让我们在推理时间几乎没有惩罚(penalty)的情况下纳入了高斯混合模型的先验结构。
......
# 2.2\. 流形学习
# 2.2. 流形学习
校验者:
        [@XuJianzhi](https://github.com/XuJianzhi)
......@@ -17,7 +17,7 @@
流形学习是一种非线性降维方法。其算法基于的思想是:许多数据集的维度过高只是由人为导致的。
## 2.2.1\. 介绍
## 2.2.1. 介绍
高维数据集会非常难以可视化。 虽然可以绘制两维或三维的数据来显示数据的固有结构,但与之等效的高维图不太直观。 为了帮助数据集结构的可视化,必须以某种方式降低维度。
......@@ -31,19 +31,19 @@
流形学习可以被认为是一种将线性框架(如 PCA )推广为对数据中非线性结构敏感的尝试。 虽然存在监督变量,但是典型的流形学习问题是无监督的:它从数据本身学习数据的高维结构,而不使用预定的分类。
>例子:
> **示例**:
>* 参见 [Manifold learning on handwritten digits: Locally Linear Embedding, Isomap…](https://scikit-learn.org/stable/auto_examples/manifold/plot_lle_digits.html#sphx-glr-auto-examples-manifold-plot-lle-digits-py) ,手写数字降维的例子。
>* 参见 [Comparison of Manifold Learning methods](https://scikit-learn.org/stable/auto_examples/manifold/plot_compare_methods.html#sphx-glr-auto-examples-manifold-plot-compare-methods-py) ,玩具 “S曲线” 数据集降维的例子。
以下概述了 scikit-learn 中可用的流形学习实现
## 2.2.2\. Isomap
## 2.2.2. Isomap
流形学习的最早方法之一是 Isomap 算法,等距映射(Isometric Mapping)的缩写。 Isomap 可以被视为多维缩放(Multi-dimensional Scaling:MDS)或核主成分分析(Kernel PCA)的扩展。 Isomap 寻求一个较低维度的嵌入,它保持所有点之间的测量距离。 Isomap 可以通过 [`Isomap`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.Isomap.html#sklearn.manifold.Isomap "sklearn.manifold.Isomap") 对象执行。
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lle_digits_0051.png](img/21937e85250a7aaa8aea86e4fbf93452.jpg)](https://scikit-learn.org/stable/auto_examples/manifold/plot_lle_digits.html)
### 2.2.2.1\. 复杂度
### 2.2.2.1. 复杂度
Isomap 算法包括三个阶段:
......@@ -58,10 +58,10 @@ Isomap 的整体复杂度是 ![O[D \log(k) N \log(N)] + O[N^2(k + \log(N))] + O[
* ![k](img/f93871977da52a6d11045d57c3e18728.jpg) : 最近邻的个数
* ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) : 输出维度
>参考文献:
> **参考资料**:
>* [“A global geometric framework for nonlinear dimensionality reduction”](http://science.sciencemag.org/content/290/5500/2319.full) Tenenbaum, J.B.; De Silva, V.; & Langford, J.C. Science 290 (5500)
## 2.2.3\. 局部线性嵌入
## 2.2.3. 局部线性嵌入
局部线性嵌入(LLE)通过保留局部邻域内的距离来寻求数据的低维投影。 它可以被认为是一系列的局部主成分分析,与全局相比,找到最优的局部非线性嵌入。
......@@ -69,7 +69,7 @@ Isomap 的整体复杂度是 ![O[D \log(k) N \log(N)] + O[N^2(k + \log(N))] + O[
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lle_digits_0061.png](img/017a1400b81bc9ef956adc43050bb5c8.jpg)](https://scikit-learn.org/stable/auto_examples/manifold/plot_lle_digits.html)
### 2.2.3.1\. 复杂度
### 2.2.3.1. 复杂度
标准的 LLE 算法包括三个阶段:
......@@ -84,10 +84,10 @@ Isomap 的整体复杂度是 ![O[D \log(k) N \log(N)] + O[N^2(k + \log(N))] + O[
* ![k](img/f93871977da52a6d11045d57c3e18728.jpg) : 最近邻的个数
* ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) : 输出维度
>参考文献:
> **参考资料**:
>* [“Nonlinear dimensionality reduction by locally linear embedding”](http://www.sciencemag.org/content/290/5500/2323.full) Roweis, S. & Saul, L. Science 290:2323 (2000)
## 2.2.4\. 改进型局部线性嵌入(MLLE)
## 2.2.4. 改进型局部线性嵌入(MLLE)
关于局部线性嵌入(LLE)的一个众所周知的问题是正则化问题。当 neighbors(邻域)的数量多于输入的维度数量时,定义每个局部邻域的矩阵是不满秩的。为解决这个问题,标准的局部线性嵌入算法使用一个任意正则化参数 ![r](img/451ef7ed1a14a6cdc38324c8a5c7c683.jpg) ,它的取值受局部权重矩阵的迹的影响。虽然可以认为 ![r \to 0](img/ab81f225a7e452d651b4888d437d07d2.jpg) ,即解收敛于嵌入情况,但是不保证最优解情况下 ![r > 0](img/8cddd8c0c85ca4a1b6dce8bbf145a8aa.jpg) 。此问题说明,在嵌入时此问题会扭曲流形的内部几何形状,使其失真。
......@@ -95,7 +95,7 @@ Isomap 的整体复杂度是 ![O[D \log(k) N \log(N)] + O[N^2(k + \log(N))] + O[
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lle_digits_0071.png](img/ca04f56b8f8c29e1eec03620f0f601b0.jpg)](https://scikit-learn.org/stable/auto_examples/manifold/plot_lle_digits.html)
### 2.2.4.1\. 复杂度
### 2.2.4.1. 复杂度
MLLE 算法分为三部分:
......@@ -110,16 +110,16 @@ MLLE 算法分为三部分:
* ![k](img/f93871977da52a6d11045d57c3e18728.jpg) : 最近邻域的个数
* ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) : 输出的维度
>参考文献:
> **参考资料**:
>* [“MLLE: Modified Locally Linear Embedding Using Multiple Weights”](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.70.382) Zhang, Z. & Wang, J.
## 2.2.5\. 黑塞特征映射(HE)
## 2.2.5. 黑塞特征映射(HE)
黑塞特征映射 (也称作基于黑塞的 LLE: HLLE )是解决 LLE 正则化问题的另一种方法。在每个用于恢复局部线性结构的邻域内,它会围绕一个基于黑塞的二次型展开。虽然其他实现表明它对数据大小缩放较差,但是 sklearn 实现了一些算法改进,使得在输出低维度时它的损耗可与其他 LLE 变体相媲美。HLLE 可实现为函数 [`locally_linear_embedding`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.locally_linear_embedding.html#sklearn.manifold.locally_linear_embedding "sklearn.manifold.locally_linear_embedding") 或其面向对象的形式 [`LocallyLinearEmbedding`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.LocallyLinearEmbedding.html#sklearn.manifold.LocallyLinearEmbedding "sklearn.manifold.LocallyLinearEmbedding") ,附带关键词 `method = 'hessian'` 。它需满足 `n_neighbors > n_components * (n_components + 3) / 2`
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lle_digits_0081.png](img/01e7c74ccc13a6832f6bfcd46b442a1b.jpg)](https://scikit-learn.org/stable/auto_examples/manifold/plot_lle_digits.html)
### 2.2.5.1\. 复杂度
### 2.2.5.1. 复杂度
HLLE 算法分为三部分:
......@@ -134,14 +134,14 @@ HLLE 算法分为三部分:
* ![k](img/f93871977da52a6d11045d57c3e18728.jpg) : 最近邻域的个数
* ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) : 输出的维度
>参考文献:
> **参考资料**:
>* [“Hessian Eigenmaps: Locally linear embedding techniques for high-dimensional data”](http://www.pnas.org/content/100/10/5591) Donoho, D. & Grimes, C. Proc Natl Acad Sci USA. 100:5591 (2003)
## 2.2.6\. 谱嵌入
## 2.2.6. 谱嵌入
谱嵌入是计算非线性嵌入的一种方法。scikit-learn 执行拉普拉斯特征映射,该映射是用图拉普拉斯的谱分解的方法把数据进行低维表达。这个生成的图可认为是低维流形在高维空间里的离散近似值。基于图的代价函数的最小化确保流形上彼此临近的点被映射后在低维空间也彼此临近,低维空间保持了局部距离。谱嵌入可执行为函数 [`spectral_embedding`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.spectral_embedding.html#sklearn.manifold.spectral_embedding "sklearn.manifold.spectral_embedding") 或它的面向对象的对应形式 [`SpectralEmbedding`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.SpectralEmbedding.html#sklearn.manifold.SpectralEmbedding "sklearn.manifold.SpectralEmbedding")
### 2.2.6.1\. 复杂度
### 2.2.6.1. 复杂度
谱嵌入(拉普拉斯特征映射)算法含三部分:
......@@ -156,16 +156,16 @@ HLLE 算法分为三部分:
* ![k](img/f93871977da52a6d11045d57c3e18728.jpg) : 最近邻域的个数
* ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) : 输出的维度
>参考文献:
> **参考资料**:
>* [“Laplacian Eigenmaps for Dimensionality Reduction and Data Representation”](http://web.cse.ohio-state.edu/~mbelkin/papers/LEM_NC_03.pdf) M. Belkin, P. Niyogi, Neural Computation, June 2003; 15 (6):1373-1396
## 2.2.7\. 局部切空间对齐(LTSA)
## 2.2.7. 局部切空间对齐(LTSA)
尽管局部切空间对齐(LTSA)在技术上并不是 LLE 的变体,但它与 LLE 足够相近,可以放入这个目录。与 LLE 算法关注于保持临点距离不同,LTSA 寻求通过切空间来描述局部几何形状,并(通过)实现全局最优化来对其这些局部切空间,从而学会嵌入。 LTSA 可执行为函数 [`locally_linear_embedding`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.locally_linear_embedding.html#sklearn.manifold.locally_linear_embedding "sklearn.manifold.locally_linear_embedding") 或它的面向对象的对应形式 [`LocallyLinearEmbedding`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.LocallyLinearEmbedding.html#sklearn.manifold.LocallyLinearEmbedding "sklearn.manifold.LocallyLinearEmbedding") ,附带关键词 `method = 'ltsa'`
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lle_digits_0091.png](img/b74decc4f9ee591a92a5281d0187f05a.jpg)](https://scikit-learn.org/stable/auto_examples/manifold/plot_lle_digits.html)
### 2.2.7.1\. 复杂度
### 2.2.7.1. 复杂度
LTSA 算法含三部分:
......@@ -180,10 +180,10 @@ LTSA 算法含三部分:
* ![k](img/f93871977da52a6d11045d57c3e18728.jpg) : 最近邻域的个数
* ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) : 输出的维度
>参考文献:
> **参考资料**:
>* [“Principal manifolds and nonlinear dimensionality reduction via tangent space alignment”](http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.3693) Zhang, Z. & Zha, H. Journal of Shanghai Univ. 8:406 (2004)
## 2.2.8\. 多维尺度分析(MDS)
## 2.2.8. 多维尺度分析(MDS)
[多维尺度分析 Multidimensional scaling](https://en.wikipedia.org/wiki/Multidimensional_scaling)[`MDS`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.MDS.html#sklearn.manifold.MDS "sklearn.manifold.MDS") ) 寻求数据的低维表示,(低维下的)它的距离保持了在初始高维空间中的距离。
......@@ -195,13 +195,13 @@ MDS算法有2类:度量和非度量。在 scikit-learn 中, [`MDS`](https://
设 ![S](img/12ecd862769bee1e71c75c134b6423bb.jpg) 是相似度矩阵,![X](img/43c1fea57579e54f80c0535bc582626f.jpg) 是 ![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) 个输入点的坐标。差异 ![\hat{d}_{ij}](img/223988a8bef489edcaa2f198e5e3a9a5.jpg) 是以某种最佳方式选择的相似度的转换。然后,通过 ![sum_{i < j} d_{ij}(X) - \hat{d}_{ij}(X)](img/ae82b9adb507cb166d4721c004ae5f40.jpg) 定义称为 Stress (应力值)的对象。
### 2.2.8.1\. 度量 MDS
### 2.2.8.1. 度量 MDS
最简单的度量 [`MDS`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.MDS.html#sklearn.manifold.MDS "sklearn.manifold.MDS") 模型称为 _absolute MDS(绝对MDS)_,差异由 ![\hat{d}_{ij} = S_{ij}](img/446d6d36c20a79508f1cc84c737a597b.jpg) 定义。对于绝对 MDS,值 ![S_{ij}](img/bf95d88f4f17676409c7bab64ba036dc.jpg) 应精确地对应于嵌入点的点 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 和 ![j](img/7b215f2882ce8aaa33a97e43ad626314.jpg) 之间的距离。
大多数情况下,差异应设置为 ![\hat{d}_{ij} = b S_{ij}](img/de55c53f911184b6ad3e562a4d694c01.jpg)
### 2.2.8.2\. 非度量 MDS
### 2.2.8.2. 非度量 MDS
非度量 [`MDS`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.MDS.html#sklearn.manifold.MDS "sklearn.manifold.MDS") 关注数据的排序。如果 ![S_{ij} < S_{kl}](img/7ab8c51f211ad5aea8e4e78337ca3624.jpg) ,则嵌入应执行 ![d_{ij} < d_{jk}](img/6a0cf5d5f1d5ad90f9713a46fa55111f.jpg) 。这样执行的一个简单算法是在 ![S_{ij}](img/bf95d88f4f17676409c7bab64ba036dc.jpg) 上使用 ![d_{ij}](img/e0d8dbb9574d5eb264279927dcf8baaf.jpg) 的单调回归,产生与 ![S_{ij}](img/bf95d88f4f17676409c7bab64ba036dc.jpg) 相同顺序的差异 ![\hat{d}_{ij}](img/223988a8bef489edcaa2f198e5e3a9a5.jpg)
......@@ -209,12 +209,12 @@ MDS算法有2类:度量和非度量。在 scikit-learn 中, [`MDS`](https://
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_mds_0011.png](img/fe62193b4391c9f60e373f03623696ac.jpg)](https://scikit-learn.org/stable/auto_examples/manifold/plot_mds.html)
>参考文献:
> **参考资料**:
>* [“Modern Multidimensional Scaling - Theory and Applications”](http://www.springer.com/fr/book/9780387251509) Borg, I.; Groenen P. Springer Series in Statistics (1997)
>* [“Nonmetric multidimensional scaling: a numerical method”](http://link.springer.com/article/10.1007%2FBF02289694) Kruskal, J. Psychometrika, 29 (1964)
>* [“Multidimensional scaling by optimizing goodness of fit to a nonmetric hypothesis”](http://link.springer.com/article/10.1007%2FBF02289565) Kruskal, J. Psychometrika, 29, (1964)
## 2.2.9\. t 分布随机邻域嵌入(t-SNE)
## 2.2.9. t 分布随机邻域嵌入(t-SNE)
t-SNE( [`TSNE`](https://scikit-learn.org/stable/modules/generated/sklearn.manifold.TSNE.html#sklearn.manifold.TSNE "sklearn.manifold.TSNE") )将数据点的相似性转换为概率。原始空间中的相似性表示为高斯联合概率,嵌入空间中的相似性表示为 “学生” 的 t 分布。这允许 t-SNE 对局部结构特别敏感,并且有超过现有技术的一些其它优点:
......@@ -235,7 +235,7 @@ Isomap、LLE 和其它变体最适合展开单个连续低维流形,而 t-SNE
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lle_digits_0131.png](img/afcad7956ba0a3a4a6771ee9810280c2.jpg)](https://scikit-learn.org/stable/auto_examples/manifold/plot_lle_digits.html)
### 2.2.9.1\. 优化 t-SNE
### 2.2.9.1. 优化 t-SNE
t-SNE 的主要目的是实现高维数据的可视化。因此,当数据将嵌入到二维或三维时,它效果最好。
......@@ -253,7 +253,7 @@ t-SNE 的主要目的是实现高维数据的可视化。因此,当数据将
[“如何高效使用 t-SNE”](http://distill.pub/2016/misread-tsne/) 提供了一个关于各种参数效果的很好的讨论,以及用来探索不同参数效果的交互式绘图。
### 2.2.9.2\. Barnes-Hut t-SNE
### 2.2.9.2. Barnes-Hut t-SNE
在此实现的 Barnes-Hut t-SNE 通常比其他流形学习算法慢得多。优化是很困难的,梯度的计算是 ![O[d N log(N)]](img/f60c0101ae8f649bb02ed8b24b30fd83.jpg) ,其中 ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) 是输出维数,![N](img/a44a7c045f2217894a894c482861387a.jpg) 是样本个数。Barnes-Hut 方法在 t-SNE 复杂度为 ![O[d N^2]](img/9642d01a97f06869baba6159e3438677.jpg) 的精确方法上有所改进,但有其他几个显著区别:
......@@ -266,12 +266,12 @@ t-SNE 的主要目的是实现高维数据的可视化。因此,当数据将
还要注意,数字 label 与 t-SNE 发现的自然聚类大致匹配,而 PCA 模型的线性 2D 投影产生标签区域在很大程度上重叠的表示。这是一个强有力的线索,表明该数据可以通过关注局部结构的非线性方法(例如,具有高斯 RBF 核的 SVM )很好地分离。然而,如果不能在二维中用 t-SNE 来可视化分离良好的均匀标记组,并不一定意味着数据不能被监督模型正确地分类。可能是因为 2 维不够低,无法准确表示数据的内部结构。
>参考文献:
> **参考资料**:
>* [“Visualizing High-Dimensional Data Using t-SNE”](http://jmlr.org/papers/v9/vandermaaten08a.html) van der Maaten, L.J.P.; Hinton, G. Journal of Machine Learning Research (2008)
>* [“t-Distributed Stochastic Neighbor Embedding”](http://lvdmaaten.github.io/tsne/) van der Maaten, L.J.P.
>* [“Accelerating t-SNE using Tree-Based Algorithms.”](https://lvdmaaten.github.io/publications/papers/JMLR_2014.pdf) L.J.P. van der Maaten. Journal of Machine Learning Research 15(Oct):3221-3245, 2014.
## 2.2.10\. 实用技巧
## 2.2.10. 实用技巧
* 确保对所有特征使用相同的缩放。因为流形学习方法是基于最近邻搜索的,否则算法的性能可能很差。有关缩放异构数据的方便方法,请参阅 [StandardScaler](preprocessing.html#preprocessing-scaler)
* 由每个例程计算的重构误差可用于选择最佳输出维度。对于嵌入在 ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) 维参数空间中的 ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) 维流形,重构误差将随着 `n_components` 的增加而减小,直到 `n_components == d`
......
此差异已折叠。
# 2.4\. 双聚类
# 2.4. 双聚类
校验者:
        [@udy](https://github.com/apachecn/scikit-learn-doc-zh)
......@@ -47,14 +47,14 @@ array([[ 1, 2],
>**注意**
>Biclustering 在不同的领域有很多其他名称,包括 co-clustering, two-mode clustering, two-way clustering, block clustering, coupled two-way clustering 等.有一些算法的名称,比如 Spectral Co-Clustering algorithm, 反应了这些备用名称。
## 2.4.1\. Spectral Co-Clustering
## 2.4.1. Spectral Co-Clustering
[`SpectralCoclustering`](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.bicluster.SpectralCoclustering.html#sklearn.cluster.bicluster.SpectralCoclustering "sklearn.cluster.bicluster.SpectralCoclustering") 算法找到的 bicluster 的值比相应的其他行和列更高。每一个行和列都只属于一个 bicluster, 所以重新分配行和列,使得分区连续显示对角线上的 high value:
>**注意**
>算法将输入的数据矩阵看做成二分图:该矩阵的行和列对应于两组顶点,每个条目对应于行和列之间的边,该算法近似的进行归一化,对图进行切割,找到更重的子图。
### 2.4.1.1\. 数学公式
### 2.4.1.1. 数学公式
找到最优归一化剪切的近似解,可以通过图形的 Laplacian 的广义特征值分解。 通常这意味着直接使用 Laplacian 矩阵. 如果原始数据矩阵 ![A](img/eeaf066f8cca5064b706ccfc4728323d.jpg) 有形状 ![m
\times n](img/20d6857e752f6ffdfdd20a88c32f837c.jpg), 则对应的 bipartite 图的 Laplacian 矩阵具有形状 ![(m + n) \times (m + n)](img/94f627411c005fe4911552b1dd5b6ff1.jpg)。 但是, 在这种情况直接使用 ![A](img/eeaf066f8cca5064b706ccfc4728323d.jpg) , 因为它更小,更有作用。
......@@ -79,14 +79,14 @@ array([[ 1, 2],
然后 ![Z](img/8f4e82e4dfa89ac81c42992c603a953e.jpg) 的 rows 通过使用 [k-means](clustering.html#k-means) 进行聚类. `n_rows` 标签提供行分区, 剩下的 `n_columns` 标签 提供 列分区。
>例子:
> **示例**:
>* [A demo of the Spectral Co-Clustering algorithm](https://scikit-learn.org/stable/auto_examples/bicluster/plot_spectral_coclustering.html#sphx-glr-auto-examples-bicluster-plot-spectral-coclustering-py): 如何用 bicluster 数据矩阵并应用。
>* [Biclustering documents with the Spectral Co-clustering algorithm](https://scikit-learn.org/stable/auto_examples/bicluster/plot_bicluster_newsgroups.html#sphx-glr-auto-examples-bicluster-plot-bicluster-newsgroups-py):一个在 20 个新闻组数据集中发现 biclusters 的例子
>参考文献:
>* Dhillon, Inderjit S, 2001\. [Co-clustering documents and words using bipartite spectral graph partitioning](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.140.3011).
> **参考资料**:
>* Dhillon, Inderjit S, 2001. [Co-clustering documents and words using bipartite spectral graph partitioning](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.140.3011).
## 2.4.2\. Spectral Biclustering
## 2.4.2. Spectral Biclustering
[`SpectralBiclustering`](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.bicluster.SpectralBiclustering.html#sklearn.cluster.bicluster.SpectralBiclustering "sklearn.cluster.bicluster.SpectralBiclustering") 算法假设输入的数据矩阵具有隐藏的棋盘结构。 具有这种结构的矩阵的行列 可能被分区,使得在笛卡尔积中的 大部分 biclusters 的 row clusters 和 column cluster 是近似恒定的。
......@@ -94,7 +94,7 @@ array([[ 1, 2],
这个算法划分矩阵的行和列,以至于提供一个相应的块状不变的棋盘矩阵,近似于原始矩阵。
### 2.4.2.1\. 数学表示
### 2.4.2.1. 数学表示
输入矩阵 ![A](img/eeaf066f8cca5064b706ccfc4728323d.jpg) 先归一化,使得棋盘模式更明显。有三种方法:
......@@ -118,14 +118,14 @@ j}} + \overline{L_{\cdot \cdot}}](img/d670eea3215462f64d74d9366622a490.jpg)
例如,如果 ![p](img/e2f9b08680b30cfb80102f69264fdd5c.jpg) 奇异值向量被计算,最好按照描述找到 ![q](img/dc074c105944810a277030dfab298376.jpg) , 其中 ![q<p](img/cc9d324e8bc61a67cc1947f73bf5b618.jpg)。 ![U](img/11c00539ec3e5944afd76511830591db.jpg) 列为,the ![q](img/dc074c105944810a277030dfab298376.jpg) 最佳左奇异向量的矩阵, 并且 ![V](img/5303ecbc70bf5189b8785555c03c54ee.jpg) 对于右边是类似的. 要划分行, 将 ![A](img/eeaf066f8cca5064b706ccfc4728323d.jpg) 的 投影到 ![q](img/dc074c105944810a277030dfab298376.jpg) 维空间: ![A * V](img/99988260d9d836d14b2569c2fc921e81.jpg)。 ![m](img/94156b879a7455cb0d516efa9c9c0991.jpg) 行 ![m \times q](img/ccc8bedf9424617c5d6a61fbe9a1cc36.jpg) 矩阵的行作为采样和使用 k-means 的聚类处理产生行标签。 类似地,将列投影到 ![A^{\top} * U](img/c57acf47ae694e71f55f0005d1e52c55.jpg) ,并且对 ![n \times q](img/cd58ff0ab17f3ead1d5179426f2dae50.jpg) 矩阵进行聚类得到列标签。
>示例:
> **示例**:
>* [A demo of the Spectral Biclustering algorithm](https://scikit-learn.org/stable/auto_examples/bicluster/plot_spectral_biclustering.html#sphx-glr-auto-examples-bicluster-plot-spectral-biclustering-py): 一个简单的例子 显示如何生成棋盘矩阵和 bicluster
>参考文献:
>* Kluger, Yuval, et. al., 2003\. [Spectral biclustering of microarray data: coclustering genes and conditions](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.135.1608).
> **参考资料**:
>* Kluger, Yuval, et. al., 2003. [Spectral biclustering of microarray data: coclustering genes and conditions](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.135.1608).
## 2.4.3\. Biclustering 评价
## 2.4.3. Biclustering 评价
有两种评估双组分结果的方法:内部和外部。 诸如群集稳定性等内部措施只依赖于数据和结果本身。 目前在scikit-learn中没有内部的二集群措施。外部措施是指外部信息来源,例如真正的解决方案。 当使用真实数据时,真正的解决方案通常是未知的,但是,由于真正的解决方案是已知的,因此人造数据的双重分析可能对于评估算法非常有用。
......@@ -148,5 +148,5 @@ Jaccard 索引 达到最小值0,当biclusters完全不同时,Jaccard指数
最小共识得分为0,发生在所有 biclusters 完全不相似时。当两组 biclusters 相同时,最大分数为1。
>参考文献:
>* Hochreiter, Bodenhofer, et. al., 2010\. [FABIA: factor analysis for bicluster acquisition](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2881408/).
> **参考资料**:
>* Hochreiter, Bodenhofer, et. al., 2010. [FABIA: factor analysis for bicluster acquisition](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2881408/).
此差异已折叠。
# 2.6\. 协方差估计
# 2.6. 协方差估计
校验者:
        [@李昊伟](https://github.com/apachecn/scikit-learn-doc-zh)
......@@ -11,18 +11,18 @@
我们假设观察是独立的,相同分布的 (i.i.d.)。
# 2.6.1\. 经验协方差
# 2.6.1. 经验协方差
已知数据集的协方差矩阵与经典 _maximum likelihood estimator(最大似然估计)_ (或 “经验协方差”) 很好地近似,条件是与特征数量(描述观测值的变量)相比,观测数量足够大。 更准确地说,样本的最大似然估计是相应的总体协方差矩阵的无偏估计。
样本的经验协方差矩阵可以使用 [`empirical_covariance`](https://scikit-learn.org/stable/modules/generated/sklearn.covariance.empirical_covariance.html#sklearn.covariance.empirical_covariance "sklearn.covariance.empirical_covariance") 包的函数计算 , 或者通过 [`EmpiricalCovariance`](https://scikit-learn.org/stable/modules/generated/sklearn.covariance.EmpiricalCovariance.html#sklearn.covariance.EmpiricalCovariance "sklearn.covariance.EmpiricalCovariance") 使用 [`EmpiricalCovariance.fit`](https://scikit-learn.org/stable/modules/generated/sklearn.covariance.EmpiricalCovariance.html#sklearn.covariance.EmpiricalCovariance.fit "sklearn.covariance.EmpiricalCovariance.fit") 方法将对象与数据样本拟合 。 要注意,取决于数据是否居中,结果会有所不同,所以可能需要准确使用参数 `assume_centered`。 如果使用 `assume_centered=False` ,则结果更准确。且测试集应该具有与训练集相同的均值向量。 如果不是这样,两者都应该使用中心值, `assume_centered=True` 应该使用。
>例子:
> **示例**:
>* See [Shrinkage covariance estimation: LedoitWolf vs OAS and max-likelihood](https://scikit-learn.org/stable/auto_examples/covariance/plot_covariance_estimation.html#sphx-glr-auto-examples-covariance-plot-covariance-estimation-py) for an example on how to fit an [`EmpiricalCovariance`](https://scikit-learn.org/stable/modules/generated/sklearn.covariance.EmpiricalCovariance.html#sklearn.covariance.EmpiricalCovariance "sklearn.covariance.EmpiricalCovariance") object to data.
# 2.6.2\. 收敛协方差
# 2.6.2. 收敛协方差
## 2.6.2.1\. 基本收敛
## 2.6.2.1. 基本收敛
尽管是协方差矩阵的无偏估计, 最大似然估计不是协方差矩阵的特征值的一个很好的估计, 所以从反演得到的精度矩阵是不准确的。 有时,甚至出现数学原因,经验协方差矩阵不能反转。 为了避免这样的反演问题,引入了经验协方差矩阵的一种变换方式:`shrinkage`
......@@ -34,10 +34,10 @@ Tr}\hat{\Sigma}}{p}\rm Id](img/8f62a01deaf67a7f9960d853abd9dcca.jpg).
选择收缩量, ![\alpha](img/d8b3d5242d513369a44f8bf0c6112744.jpg) 相当于设置偏差/方差权衡,下面将讨论。
>示例:
> **示例**:
>* See [Shrinkage covariance estimation: LedoitWolf vs OAS and max-likelihood](https://scikit-learn.org/stable/auto_examples/covariance/plot_covariance_estimation.html#sphx-glr-auto-examples-covariance-plot-covariance-estimation-py) for an example on how to fit a [`ShrunkCovariance`](https://scikit-learn.org/stable/modules/generated/sklearn.covariance.ShrunkCovariance.html#sklearn.covariance.ShrunkCovariance "sklearn.covariance.ShrunkCovariance") object to data.
## 2.6.2.2\. Ledoit-Wolf 收敛
## 2.6.2.2. Ledoit-Wolf 收敛
在他们的 2004 年的论文 [[1]](#id6) 中, O.Ledoit 和 M.Wolf 提出了一个公式, 用来计算优化的收敛系数 ![\alpha](img/d8b3d5242d513369a44f8bf0c6112744.jpg) , 它使得估计协方差和实际协方差矩阵之间的均方差进行最小化。
......@@ -49,13 +49,13 @@ Tr}\hat{\Sigma}}{p}\rm Id](img/8f62a01deaf67a7f9960d853abd9dcca.jpg).
>
>然而,当总体协方差恰好是恒等矩阵(identity matrix)的倍数时,在Ledoit-Wolf过程中就不是这样了。 在这种情况下,Ledoit-Wolf收缩估计值随着样本数的增加而接近1。 这表明,Ledoit-Wolf意义下协方差矩阵的最优估计是恒等式的倍数(multiple of the identity)。 由于总体协方差已经是恒等矩阵的倍数,Ledoit-Wolf解确实是一个合理的估计。
>例子:
> **示例**:
>* See [Shrinkage covariance estimation: LedoitWolf vs OAS and max-likelihood](https://scikit-learn.org/stable/auto_examples/covariance/plot_covariance_estimation.html#sphx-glr-auto-examples-covariance-plot-covariance-estimation-py) 关于如何将 [`LedoitWolf`](https://scikit-learn.org/stable/modules/generated/sklearn.covariance.LedoitWolf.html#sklearn.covariance.LedoitWolf "sklearn.covariance.LedoitWolf") 对象与数据拟合, 并将 Ledoit-Wolf 估计器的性能进行可视化的示例。
>参考文献:
> **参考资料**:
>* [1] O. Ledoit and M. Wolf, “A Well-Conditioned Estimator for Large-Dimensional Covariance Matrices”, Journal of Multivariate Analysis, Volume 88, Issue 2, February 2004, pages 365-411.
## 2.6.2.3\. Oracle 近似收缩
## 2.6.2.3. Oracle 近似收缩
在数据为高斯分布的假设下,Chen et al. 等 [[2]](#id8) 推导出了一个公式,旨在 产生比 Ledoit 和 Wolf 公式具有更小均方差的收敛系数。 所得到的估计器被称为协方差的 Oracle 收缩近似估计器。
......@@ -65,16 +65,16 @@ Tr}\hat{\Sigma}}{p}\rm Id](img/8f62a01deaf67a7f9960d853abd9dcca.jpg).
设定收缩时的偏差方差权衡:比较 Ledoit-Wolf 和 OAS 估计量的选择
>参考文献:
> **参考资料**:
>* [2]Chen et al., “Shrinkage Algorithms for MMSE Covariance Estimation”, IEEE Trans. on Sign. Proc., Volume 58, Issue 10, October 2010.
>示例:
> **示例**:
>* See [Shrinkage covariance estimation: LedoitWolf vs OAS and max-likelihood](https://scikit-learn.org/stable/auto_examples/covariance/plot_covariance_estimation.html#sphx-glr-auto-examples-covariance-plot-covariance-estimation-py) for an example on how to fit an [`OAS`](https://scikit-learn.org/stable/modules/generated/sklearn.covariance.OAS.html#sklearn.covariance.OAS "sklearn.covariance.OAS") object to data.
>* See [Ledoit-Wolf vs OAS estimation](https://scikit-learn.org/stable/auto_examples/covariance/plot_lw_vs_oas.html#sphx-glr-auto-examples-covariance-plot-lw-vs-oas-py) to visualize the Mean Squared Error difference between a [`LedoitWolf`](https://scikit-learn.org/stable/modules/generated/sklearn.covariance.LedoitWolf.html#sklearn.covariance.LedoitWolf "sklearn.covariance.LedoitWolf") and an [`OAS`](https://scikit-learn.org/stable/modules/generated/sklearn.covariance.OAS.html#sklearn.covariance.OAS "sklearn.covariance.OAS") estimator of the covariance.
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lw_vs_oas_0011.png](img/bc35316fd422689a9bc65845d63c1433.jpg)](https://scikit-learn.org/stable/auto_examples/covariance/plot_lw_vs_oas.html)
# 2.6.3\. 稀疏逆协方差
# 2.6.3. 稀疏逆协方差
协方差矩阵的逆矩阵,通常称为精度矩阵(precision matrix),它与部分相关矩阵(partial correlation matrix)成正比。 它给出部分独立性关系。换句话说,如果两个特征在其他特征上有条件地独立, 则精度矩阵中的对应系数将为零。这就是为什么估计一个稀疏精度矩阵是有道理的: 通过从数据中学习独立关系,协方差矩阵的估计能更好处理。这被称为协方差选择。
......@@ -99,20 +99,20 @@ Tr}\hat{\Sigma}}{p}\rm Id](img/8f62a01deaf67a7f9960d853abd9dcca.jpg).
其中:![K](img/e279b8169ddd6581c5606c868ba52fae.jpg) 是要估计的精度矩阵(precision matrix), ![S](img/12ecd862769bee1e71c75c134b6423bb.jpg) 是样本的协方差矩阵。 ![\|K\|_1](img/6122e23454910f4f076c71a84c068291.jpg) 是非对角系数 ![K](img/e279b8169ddd6581c5606c868ba52fae.jpg) (off-diagonal coefficients)的绝对值之和。 用于解决这个问题的算法是来自 Friedman 2008 Biostatistics 论文的 GLasso 算法。 它与 R 语言 `glasso` 包中的算法相同。
>例子:
> **示例**:
>* [Sparse inverse covariance estimation](https://scikit-learn.org/stable/auto_examples/covariance/plot_sparse_cov.html#sphx-glr-auto-examples-covariance-plot-sparse-cov-py):合成数据示例,显示结构的一些恢复,并与其他协方差估计器进行比较。
>* [Visualizing the stock market structure](https://scikit-learn.org/stable/auto_examples/applications/plot_stock_market.html#sphx-glr-auto-examples-applications-plot-stock-market-py): 真实股票市场数据示例,查找哪些信号最相关。
>参考文献:
> **参考资料**:
>* Friedman et al, [“Sparse inverse covariance estimation with the graphical lasso”](http://biostatistics.oxfordjournals.org/content/9/3/432.short), Biostatistics 9, pp 432, 2008
# 2.6.4\. Robust 协方差估计
# 2.6.4. Robust 协方差估计
实际数据集通常是会有测量或记录错误。合格但不常见的观察也可能出于各种原因。 每个不常见的观察称为异常值。 上面提出的经验协方差估计器和收缩协方差估计器对数据中异常观察值非常敏感。 因此,应该使用更好的协方差估计(robust covariance estimators)来估算其真实数据集的协方差。 或者,可以使用更好的协方差估计器(robust covariance estimators)来执行异常值检测, 并根据数据的进一步处理,丢弃/降低某些观察值。
`sklearn.covariance` 包实现了 robust estimator of covariance, 即 Minimum Covariance Determinant [3]。
## 2.6.4.1\. 最小协方差决定
## 2.6.4.1. 最小协方差决定
最小协方差决定(Minimum Covariance Determinant)估计器是 由 P.J. Rousseeuw 在 [[3]](#id14) 中引入的数据集协方差的鲁棒估计 (robust estimator)。 这个想法是找出一个给定比例(h)的 “好” 观察值,它们不是离群值, 且可以计算其经验协方差矩阵。 然后将该经验协方差矩阵重新缩放以补偿所执行的观察选择(”consistency step(一致性步骤)”)。 计算最小协方差决定估计器后,可以根据其马氏距离(Mahalanobis distance)给出观测值的权重, 这导致数据集的协方差矩阵的重新加权估计(”reweighting step(重新加权步骤)”)。
......@@ -120,11 +120,11 @@ Rousseeuw 和 Van Driessen [[4]](#id15) 开发了 FastMCD 算法,以计算最
Raw估计可通过 [`MinCovDet`](https://scikit-learn.org/stable/modules/generated/sklearn.covariance.MinCovDet.html#sklearn.covariance.MinCovDet "sklearn.covariance.MinCovDet") 对象的 `raw_location_``raw_covariance_` 属性获得。
>参考文献:
> **参考资料**:
>* [3] P. J. Rousseeuw. Least median of squares regression. J. Am Stat Ass, 79:871, 1984.
>* [4] A Fast Algorithm for the Minimum Covariance Determinant Estimator, 1999, American Statistical Association and the American Society for Quality, TECHNOMETRICS.
>例子:
> **示例**:
>* See [Robust vs Empirical covariance estimate](https://scikit-learn.org/stable/auto_examples/covariance/plot_robust_vs_empirical_covariance.html#sphx-glr-auto-examples-covariance-plot-robust-vs-empirical-covariance-py) 关于如何将对象 [`MinCovDet`](https://scikit-learn.org/stable/modules/generated/sklearn.covariance.MinCovDet.html#sklearn.covariance.MinCovDet "sklearn.covariance.MinCovDet") 与数据拟合的示例, 尽管存在异常值,但估计结果仍然比较准确。
>* See [Robust covariance estimation and Mahalanobis distances relevance](https://scikit-learn.org/stable/auto_examples/covariance/plot_mahalanobis_distances.html#sphx-glr-auto-examples-covariance-plot-mahalanobis-distances-py) 马氏距离(Mahalanobis distance),针对协方差估计器 [`EmpiricalCovariance`](https://scikit-learn.org/stable/modules/generated/sklearn.covariance.EmpiricalCovariance.html#sklearn.covariance.EmpiricalCovariance "sklearn.covariance.EmpiricalCovariance") 和 [`MinCovDet`](https://scikit-learn.org/stable/modules/generated/sklearn.covariance.MinCovDet.html#sklearn.covariance.MinCovDet "sklearn.covariance.MinCovDet") 之间的差异进行可视化。(所以我们得到了精度矩阵的更好估计)
......
# 2.7\. 新奇和异常值检测
# 2.7. 新奇和异常值检测
校验者:
        [@RyanZhiNie](https://github.com/RyanZhiNie)
......@@ -54,7 +54,7 @@ estimator.decision_function(X_test)
|`decision_function` | 不可用 | 只能用于新数据 |
|`score_samples` | 用 `negative_outlier_factor_` | 只能用于新数据 |
## 2.7.1\. 孤立点检测方法一览
## 2.7.1. 孤立点检测方法一览
下面这个示例针对scikit-learn 中的所有孤立点检测算法进行了对比。 局部异常因子(LOF) 没有在图的背景上画出决策边界,因为在孤立点检测中使用LOF时 它没有 predict 方法可以用在新数据上(见上面表格)。
......@@ -62,10 +62,10 @@ estimator.decision_function(X_test)
[ensemble.IsolationForest](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.IsolationForest.html#sklearn.ensemble.IsolationForest)[neighbors.LocalOutlierFactor](https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.LocalOutlierFactor.html#sklearn.neighbors.LocalOutlierFactor) 在这里所用的数据集上表现得相当好。 [svm.OneClassSVM](https://scikit-learn.org/stable/modules/generated/sklearn.svm.OneClassSVM.html#sklearn.svm.OneClassSVM) 类对outliers本来就很敏感, 因此在outlier的检测中表现的不是很好。最后, [covariance.EllipticEnvelope](https://scikit-learn.org/stable/modules/generated/sklearn.covariance.EllipticEnvelope.html#sklearn.covariance.EllipticEnvelope) 类 假定了数据是服从高斯分布的且要学习一个椭圆(ellipse)。关于这个对比试验中各种estimators的更多详细信息,请参考[ Comparing anomaly detection algorithms for outlier detection on toy datasets](https://scikit-learn.org/stable/auto_examples/plot_anomaly_comparison.html#sphx-glr-auto-examples-plot-anomaly-comparison-py)和后续小节。
>示例:
> **示例**:
>* 查看[ Comparing anomaly detection algorithms for outlier detection on toy datasets](https://scikit-learn.org/stable/auto_examples/plot_anomaly_comparison.html#sphx-glr-auto-examples-plot-anomaly-comparison-py)以对比 [svm.OneClassSVM](https://scikit-learn.org/stable/modules/generated/sklearn.svm.OneClassSVM.html#sklearn.svm.OneClassSVM), [ensemble.IsolationForest](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.IsolationForest.html#sklearn.ensemble.IsolationForest), [neighbors.LocalOutlierFactor](https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.LocalOutlierFactor.html#sklearn.neighbors.LocalOutlierFactor) 和 [covariance.EllipticEnvelope](https://scikit-learn.org/stable/modules/generated/sklearn.covariance.EllipticEnvelope.html#sklearn.covariance.EllipticEnvelope) 的表现.
## 2.7.2\. Novelty Detection(新奇检测)
## 2.7.2. Novelty Detection(新奇检测)
考虑一个来自同一分布的数据集,以 ![p](img/e2f9b08680b30cfb80102f69264fdd5c.jpg) 个特征描述、有 ![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) 个观测。 现在考虑我们再往该数据集中添加一个观测。 如果新观测与原有观测有很大差异,我们就可以怀疑它是否是内围值吗? (即是否来自同一分布?)或者相反,如果新观测与原有观测很相似,我们就无法将其与原有观测区分开吗? 这就是新奇检测工具和方法所解决的问题。
......@@ -73,20 +73,20 @@ estimator.decision_function(X_test)
One-Class SVM(一类支持向量机)已经由 Schölkopf 等人采用以实现新奇检测,并在 [支持向量机](svm.html#svm) 模块的 [`svm.OneClassSVM`](https://scikit-learn.org/stable/modules/generated/sklearn.svm.OneClassSVM.html#sklearn.svm.OneClassSVM "sklearn.svm.OneClassSVM") 对象中实现。 需要选择 kernel 和 scalar 参数来定义边界。 通常选择 RBF kernel,即使没有确切的公式或算法来设置其带宽参数。 这是 scikit-learn 实现中的默认值。 ![\nu](img/f996477bc9806499e6b6a1ea4d9ae8eb.jpg) 参数,也称为一类支持向量机的边沿,对应于在边界之外找到新的但内围的观测的概率。
>参考文献:
> **参考资料**:
>* [Estimating the support of a high-dimensional distribution](http://dl.acm.org/citation.cfm?id=1119749) Schölkopf, Bernhard, et al. Neural computation 13.7 (2001): 1443-1471.
>示例:
> **示例**:
>* 参见 [One-class SVM with non-linear kernel (RBF)](https://scikit-learn.org/stable/auto_examples/svm/plot_oneclass.html#sphx-glr-auto-examples-svm-plot-oneclass-py) ,通过 [`svm.OneClassSVM`](https://scikit-learn.org/stable/modules/generated/sklearn.svm.OneClassSVM.html#sklearn.svm.OneClassSVM "sklearn.svm.OneClassSVM") 对象学习一些数据来将边界可视化。
* [Species distribution modeling](https://scikit-learn.org/stable/auto_examples/applications/plot_species_distribution_modeling.html#sphx-glr-auto-examples-applications-plot-species-distribution-modeling-py)
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_oneclass_0011.png](img/b29b59eca5c581c3f54d92c1671f2b2e.jpg)](https://scikit-learn.org/stable/auto_examples/svm/plot_oneclass.html)
## 2.7.3\. Outlier Detection(异常值检测)
## 2.7.3. Outlier Detection(异常值检测)
异常值检测类似于新奇检测,其目的是将内围观测的中心与一些被称为 “异常值” 的污染数据进行分离。 然而,在异常值检测的情况下,我们没有干净且适用于训练任何工具的数据集来代表内围观测的总体。
### 2.7.3.1\. Fitting an elliptic envelope(椭圆模型拟合)
### 2.7.3.1. Fitting an elliptic envelope(椭圆模型拟合)
实现异常值检测的一种常见方式是假设内围数据来自已知分布(例如,数据服从高斯分布)。 从这个假设来看,我们通常试图定义数据的 “形状”,并且可以将异常观测定义为足够远离拟合形状的观测。
......@@ -96,13 +96,13 @@ scikit-learn 提供了 [`covariance.EllipticEnvelope`](https://scikit-learn.org/
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_mahalanobis_distances_0011.png](img/89807b9fa9f5924b027486f280324b1a.jpg)](https://scikit-learn.org/stable/auto_examples/covariance/plot_mahalanobis_distances.html)
>示例:
> **示例**:
>* 参见 [Robust covariance estimation and Mahalanobis distances relevance](https://scikit-learn.org/stable/auto_examples/covariance/plot_mahalanobis_distances.html#sphx-glr-auto-examples-covariance-plot-mahalanobis-distances-py) 说明对位置和协方差使用标准估计 ([`covariance.EmpiricalCovariance`](https://scikit-learn.org/stable/modules/generated/sklearn.covariance.EmpiricalCovariance.html#sklearn.covariance.EmpiricalCovariance "sklearn.covariance.EmpiricalCovariance")) 或稳健估计 ([`covariance.MinCovDet`](https://scikit-learn.org/stable/modules/generated/sklearn.covariance.MinCovDet.html#sklearn.covariance.MinCovDet "sklearn.covariance.MinCovDet")) 来评估观测的异常程度的差异。
>参考文献:
> **参考资料**:
>* Rousseeuw, P.J., Van Driessen, K. “A fast algorithm for the minimum covariance determinant estimator” Technometrics 41(3), 212 (1999)
### 2.7.3.2\. Isolation Forest(隔离森林)
### 2.7.3.2. Isolation Forest(隔离森林)
在高维数据集中实现异常值检测的一种有效方法是使用随机森林。[`ensemble.IsolationForest`](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.IsolationForest.html#sklearn.ensemble.IsolationForest "sklearn.ensemble.IsolationForest") 通过随机选择特征然后随机选择所选特征的最大值和最小值之间的分割值来隔离观测。
......@@ -130,14 +130,14 @@ scikit-learn 提供了 [`covariance.EllipticEnvelope`](https://scikit-learn.org/
>>> clf.fit(X) # fit the added trees
```
>示例:
> **示例**:
>* 参见 [IsolationForest example](https://scikit-learn.org/stable/auto_examples/ensemble/plot_isolation_forest.html#sphx-glr-auto-examples-ensemble-plot-isolation-forest-py) 说明隔离森林的用法。
>* 参见 [Outlier detection with several methods.](https://scikit-learn.org/stable/auto_examples/covariance/plot_outlier_detection.html#sphx-glr-auto-examples-covariance-plot-outlier-detection-py) 比较 [`ensemble.IsolationForest`](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.IsolationForest.html#sklearn.ensemble.IsolationForest "sklearn.ensemble.IsolationForest") 与 [`neighbors.LocalOutlierFactor`](https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.LocalOutlierFactor.html#sklearn.neighbors.LocalOutlierFactor "sklearn.neighbors.LocalOutlierFactor"), [`svm.OneClassSVM`](https://scikit-learn.org/stable/modules/generated/sklearn.svm.OneClassSVM.html#sklearn.svm.OneClassSVM "sklearn.svm.OneClassSVM") (调整为执行类似异常值检测的方法)和基于协方差使用 [`covariance.EllipticEnvelope`](https://scikit-learn.org/stable/modules/generated/sklearn.covariance.EllipticEnvelope.html#sklearn.covariance.EllipticEnvelope "sklearn.covariance.EllipticEnvelope") 进行异常值检测。
>参考文献:
>* Liu, Fei Tony, Ting, Kai Ming and Zhou, Zhi-Hua. “Isolation forest.” Data Mining, 2008\. ICDM‘08\. Eighth IEEE International Conference on.
> **参考资料**:
>* Liu, Fei Tony, Ting, Kai Ming and Zhou, Zhi-Hua. “Isolation forest.” Data Mining, 2008. ICDM‘08. Eighth IEEE International Conference on.
### 2.7.3.3\. Local Outlier Factor(局部异常系数)
### 2.7.3.3. Local Outlier Factor(局部异常系数)
对中等高维数据集实现异常值检测的另一种有效方法是使用局部异常系数(LOF)算法。
......@@ -155,14 +155,14 @@ LOF 算法的优点是考虑到数据集的局部和全局属性:即使在异
[![sphx_glr_plot_lof_outlier_detection_0011.png](img/sphx_glr_plot_lof_outlier_detection_0011.png)](https://scikit-learn.org/stable/auto_examples/neighbors/sphx_glr_plot_lof_outlier_detection.html)
>示例:
> **示例**:
>* 参见 [Anomaly detection with Local Outlier Factor (LOF)](https://scikit-learn.org/stable/auto_examples/neighbors/plot_lof.html#sphx-glr-auto-examples-neighbors-plot-lof-py) 的 [`neighbors.LocalOutlierFactor`](https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.LocalOutlierFactor.html#sklearn.neighbors.LocalOutlierFactor "sklearn.neighbors.LocalOutlierFactor") 使用说明。
>* 参见 [Outlier detection with several methods.](https://scikit-learn.org/stable/auto_examples/covariance/plot_outlier_detection.html#sphx-glr-auto-examples-covariance-plot-outlier-detection-py) 与其它异常检测方法进行比较。
>参考文献:
> **参考资料**:
>* Breunig, Kriegel, Ng, and Sander (2000) [LOF: identifying density-based local outliers.](http://www.dbs.ifi.lmu.de/Publikationen/Papers/LOF.pdf) Proc. ACM SIGMOD
## 2.7.4\. 使用LOF进行新奇点检测
## 2.7.4. 使用LOF进行新奇点检测
如果要用 [neighbors.LocalOutlierFactor](https://www.studyai.cn/modules/generated/sklearn.neighbors.LocalOutlierFactor.html#sklearn.neighbors.LocalOutlierFactor) 类进行新奇点检测, 即对新的未见过的样本 预测其标签或计算其异常性得分, 你可以在实例化这个估计器的时候将其`novelty`参数设为 True ,这一步必须要在拟合之前完成:
```py
......
# 2.8\. 密度估计
# 2.8. 密度估计
校验者:
        [@不将就](https://github.com/apachecn/scikit-learn-doc-zh)
......@@ -9,7 +9,7 @@
密度估计是一个非常简单的概念,大多数人已经熟悉了其中一种常用的密度估计技术:直方图。
## 2.8.1\. 密度估计: 直方图
## 2.8.1. 密度估计: 直方图
直方图是一种简单的数据可视化方法,其中定义了组( bins ),并且统计了每个组( bin )中的数据点的数量。在下图的左上角中可以看到一个直方图的例子:
......@@ -21,7 +21,7 @@
这个可视化是核密度估计的一个例子,该例中用的是一种”顶帽”核(即每个点上的方块)。我们可以通过使用一种更平滑的核来得到一个更平滑的分布。上图右下角展示了一个高斯核密度估计,其中每个点都给总的分布贡献一条高斯曲线。结果是从数据中得到了一个平滑的密度估计,并且可作为一个强大的非参数模型用来估计这些点的分布。
## 2.8.2\. 核密度估计
## 2.8.2. 核密度估计
[`sklearn.neighbors.KernelDensity`](https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KernelDensity.html#sklearn.neighbors.KernelDensity "sklearn.neighbors.KernelDensity") 实现了 scikit-learn 中的核密度估计,它使用 Ball Tree 或 KD Tree 来进行高效查询(有关这些讨论请参见 [最近邻](neighbors.html#neighbors) )。尽管为了简单起见上述示例采用的是一维数据集,但实际上核密度估计能够用在任意维度上, 不过在实际应用中,维数灾难会导致其在高维上的性能降低。
......@@ -88,7 +88,7 @@ array([-0.41075698, -0.41075698, -0.41076071, -0.41075698, -0.41075698,
“新”数据由输入数据线性组合而成,其权重根据 KDE 模型按概率给出。
>示例:
> **示例**:
>* [Simple 1D Kernel Density Estimation](https://scikit-learn.org/stable/auto_examples/neighbors/plot_kde_1d.html#sphx-glr-auto-examples-neighbors-plot-kde-1d-py): 一维简单核密度估计的计算。
>* [Kernel Density Estimation](https://scikit-learn.org/stable/auto_examples/neighbors/plot_digits_kde_sampling.html#sphx-glr-auto-examples-neighbors-plot-digits-kde-sampling-py): 使用核密度估计来学习手写数字数据生成模型,以及使用该模型绘制新样本的示例
>* [Kernel Density Estimate of Species Distributions](https://scikit-learn.org/stable/auto_examples/neighbors/plot_species_kde.html#sphx-glr-auto-examples-neighbors-plot-species-kde-py): 使用Haversine距离度量来显示地理空间数据的核密度估计示例.
# 2.9\. 神经网络模型(无监督)
# 2.9. 神经网络模型(无监督)
校验者:
        [@不将就](https://github.com/apachecn/scikit-learn-doc-zh)
......@@ -6,7 +6,7 @@
翻译者:
        [@夜神月](https://github.com/apachecn/scikit-learn-doc-zh)
## 2.9.1\. 限制波尔兹曼机
## 2.9.1. 限制波尔兹曼机
Restricted Boltzmann machines (RBM)(限制玻尔兹曼机)是基于概率模型的无监督非线性特征学习器。当用 RBM 或 RBMs 中的层次结构提取的特征在馈入线性分类器(如线性支持向量机或感知机)时通常会获得良好的结果。
......@@ -18,10 +18,10 @@ RBM 尝试使用特定图形模型最大化数据的可能性。所使用的参
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_rbm_logistic_classification_0011.png](img/3af1cb0026efe5789c3acf3669ff5bc6.jpg)](https://scikit-learn.org/stable/auto_examples/neural_networks/plot_rbm_logistic_classification.html)
>示例:
> **示例**:
>* [Restricted Boltzmann Machine features for digit classification](https://scikit-learn.org/stable/auto_examples/neural_networks/plot_rbm_logistic_classification.html#sphx-glr-auto-examples-neural-networks-plot-rbm-logistic-classification-py)
### 2.9.1.1\. 图形模型和参数化
### 2.9.1.1. 图形模型和参数化
RBM 的图形模型是一个全连接的二分图(fully-connected bipartite graph)。
......@@ -45,7 +45,7 @@ RBM 的图形模型是一个全连接的二分图(fully-connected bipartite gr
二分图结构允许使用高效的块吉比斯采样(block Gibbs sampling)进行推断。
### 2.9.1.2\. 伯努利限制玻尔兹曼机
### 2.9.1.2. 伯努利限制玻尔兹曼机
[`BernoulliRBM`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.BernoulliRBM.html#sklearn.neural_network.BernoulliRBM "sklearn.neural_network.BernoulliRBM") 中,所有单位都是二进制随机单元。 这意味着输入数据应该是二进制的,或者在 0 和 1 之间的实数值表示可见单元活跃或不活跃的概率。 这是一个很好的字符识别模型,其中的关注点是哪些像素是活跃的,哪些不是。 对于自然场景的图像,它不再适合,因为背景,深度和相邻像素的趋势取相同的值。
......@@ -59,7 +59,7 @@ RBM 的图形模型是一个全连接的二分图(fully-connected bipartite gr
![\sigma(x) = \frac{1}{1 + e^{-x}}](img/f1c8c9b812ae1b6ec189eda900e47269.jpg)
### 2.9.1.3\. 随机最大似然学习
### 2.9.1.3. 随机最大似然学习
[`BernoulliRBM`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.BernoulliRBM.html#sklearn.neural_network.BernoulliRBM "sklearn.neural_network.BernoulliRBM") 函数中实现的学习算法被称为随机最大似然(Stochastic Maximum Likelihood (SML))或持续对比发散(Persistent Contrastive Divergence (PCD))。由于数据的似然函数的形式,直接优化最大似然是不可行的:
......@@ -73,6 +73,6 @@ RBM 的图形模型是一个全连接的二分图(fully-connected bipartite gr
持续的对比分歧解决这个问题。而不是每次需要梯度启动一个新的链,并且只执行一个 Gibbs 采样步骤,在 PCD 中,我们保留了在每个权重更新之后更新的 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) Gibbs 步长的多个链(幻想粒子)。这使得颗粒更彻底地探索空间.
>参考文献:
> **参考资料**:
>* [“A fast learning algorithm for deep belief nets”](http://www.cs.toronto.edu/~hinton/absps/fastnc.pdf) G. Hinton, S. Osindero, Y.-W. Teh, 2006
>* [“Training Restricted Boltzmann Machines using Approximations to the Likelihood Gradient”](http://www.cs.toronto.edu/~tijmen/pcd/pcd.pdf) T. Tieleman, 2008
# 3. 模型选择和评估
* [3.1 交叉验证:评估估算器的表现](docs/30.md?id=_31-交叉验证:评估估算器的表现)
* [3.1.1 计算交叉验证的指标](docs/30.md?id=_311-计算交叉验证的指标)
* [3.1.1.1 cross_validate 函数和多度量评估](docs/30.md?id=_3111-cross_validate-函数和多度量评估)
* [3.1.1.2 通过交叉验证获取预测](docs/30.md?id=_3112-通过交叉验证获取预测)
* [3.1.2 交叉验证迭代器](docs/30.md?id=_312-交叉验证迭代器)
* [3.1.2.1 交叉验证迭代器–循环遍历数据](docs/30.md?id=_3121-交叉验证迭代器–循环遍历数据)
* [3.1.2.1.1 K 折](docs/30.md?id=_31211-k-折)
* [3.1.2.1.2 重复 K-折交叉验证](docs/30.md?id=_31212-重复-k-折交叉验证)
* [3.1.2.1.3 留一交叉验证 (LOO)](docs/30.md?id=_31213-留一交叉验证-loo)
* [3.1.2.1.4 留 P 交叉验证 (LPO)](docs/30.md?id=_31214-留-p-交叉验证-lpo)
* [3.1.2.1.5 随机排列交叉验证 a.k.a. Shuffle & Split](docs/30.md?id=_31215-随机排列交叉验证-aka-shuffle-&-split)
* [3.1.2.2 基于类标签、具有分层的交叉验证迭代器](docs/30.md?id=_3122-基于类标签、具有分层的交叉验证迭代器)
* [3.1.2.2.1 分层 k 折](docs/30.md?id=_31221-分层-k-折)
* [3.1.2.2.2 分层随机 Split](docs/30.md?id=_31222-分层随机-split)
* [3.1.2.3 用于分组数据的交叉验证迭代器](docs/30.md?id=_3123-用于分组数据的交叉验证迭代器)
* [3.1.2.3.1 组 k-fold](docs/30.md?id=_31231-组-k-fold)
* [3.1.2.3.2 留一组交叉验证](docs/30.md?id=_31232-留一组交叉验证)
* [3.1.2.3.3 留 P 组交叉验证](docs/30.md?id=_31233-留-p-组交叉验证)
* [3.1.2.3.4 Group Shuffle Split](docs/30.md?id=_31234-group-shuffle-split)
* [3.1.2.4 预定义的折叠 / 验证集](docs/30.md?id=_3124-预定义的折叠-/-验证集)
* [3.1.2.5 交叉验证在时间序列数据中应用](docs/30.md?id=_3125-交叉验证在时间序列数据中应用)
* [3.1.2.5.1 时间序列分割](docs/30.md?id=_31251-时间序列分割)
* [3.1.3 A note on shuffling](docs/30.md?id=_313-a-note-on-shuffling)
* [3.1.4 交叉验证和模型选择](docs/30.md?id=_314-交叉验证和模型选择)
* [3.2 调整估计器的超参数](docs/31.md?id=_32-调整估计器的超参数)
* [3.2.1 网格追踪法–穷尽的网格搜索](docs/31.md?id=_321-网格追踪法–穷尽的网格搜索)
* [3.2.2 随机参数优化](docs/31.md?id=_322-随机参数优化)
* [3.2.3 参数搜索技巧](docs/31.md?id=_323-参数搜索技巧)
* [3.2.3.1 指定目标度量](docs/31.md?id=_3231-指定目标度量)
* [3.2.3.2 为评估指定多个指标](docs/31.md?id=_3232-为评估指定多个指标)
* [3.2.3.3 复合估计和参数空间](docs/31.md?id=_3233-复合估计和参数空间)
* [3.2.3.4 模型选择:开发和评估](docs/31.md?id=_3234-模型选择:开发和评估)
* [3.2.3.5 并行机制](docs/31.md?id=_3235-并行机制)
* [3.2.3.6 对故障的鲁棒性](docs/31.md?id=_3236-对故障的鲁棒性)
* [3.2.4 暴力参数搜索的替代方案](docs/31.md?id=_324-暴力参数搜索的替代方案)
* [3.2.4.1 模型特定交叉验证](docs/31.md?id=_3241-模型特定交叉验证)
* [3.2.4.2 信息标准](docs/31.md?id=_3242-信息标准)
* [3.2.4.3 出袋估计](docs/31.md?id=_3243-出袋估计)
* [3.3 模型评估: 量化预测的质量](docs/32.md?id=_33-模型评估:-量化预测的质量)
* [3.3.1 `scoring` 参数: 定义模型评估规则](docs/32.md?id=_331-`scoring`-参数:-定义模型评估规则)
* [3.3.1.1 常见场景: 预定义值](docs/32.md?id=_3311-常见场景:-预定义值)
* [3.3.1.2 根据 metric 函数定义您的评分策略](docs/32.md?id=_3312-根据-metric-函数定义您的评分策略)
* [3.3.1.3 实现自己的记分对象](docs/32.md?id=_3313-实现自己的记分对象)
* [3.3.1.4 使用多个指数评估](docs/32.md?id=_3314-使用多个指数评估)
* [3.3.2 分类指标](docs/32.md?id=_332-分类指标)
* [3.3.2.1 从二分到多分类和 multilabel](docs/32.md?id=_3321-从二分到多分类和-multilabel)
* [3.3.2.2 精确度得分](docs/32.md?id=_3322-精确度得分)
* [3.3.2.3 Balanced accuracy score](docs/32.md?id=_3323-balanced-accuracy-score)
* [3.3.2.4 Cohen’s kappa](docs/32.md?id=_3324-cohen’s-kappa)
* [3.3.2.5 混淆矩阵](docs/32.md?id=_3325-混淆矩阵)
* [3.3.2.6 分类报告](docs/32.md?id=_3326-分类报告)
* [3.3.2.7 汉明损失](docs/32.md?id=_3327-汉明损失)
* [3.3.2.8 精准,召回和 F-measures](docs/32.md?id=_3328-精准,召回和-f-measures)
* [3.3.2.8.1 二分类](docs/32.md?id=_33281-二分类)
* [3.3.2.8.2 多类和多标签分类](docs/32.md?id=_33282-多类和多标签分类)
* [3.3.2.9 Jaccard 相似系数 score](docs/32.md?id=_3329-jaccard-相似系数-score)
* [3.3.2.10 Hinge loss](docs/32.md?id=_33210-hinge-loss)
* [3.3.2.11 Log 损失](docs/32.md?id=_33211-log-损失)
* [3.3.2.12 马修斯相关系数](docs/32.md?id=_33212-马修斯相关系数)
* [3.3.2.13 多标记混淆矩阵](docs/32.md?id=_33213-多标记混淆矩阵)
* [3.3.2.14 Receiver operating characteristic (ROC)](docs/32.md?id=_33214-receiver-operating-characteristic-roc)
* [3.3.2.15 零一损失](docs/32.md?id=_33215-零一损失)
* [3.3.2.16 Brier 分数损失](docs/32.md?id=_33216-brier-分数损失)
* [3.3.3 多标签排名指标](docs/32.md?id=_333-多标签排名指标)
* [3.3.3.1 覆盖误差](docs/32.md?id=_3331-覆盖误差)
* [3.3.3.2 标签排名平均精度](docs/32.md?id=_3332-标签排名平均精度)
* [3.3.3.3 排序损失](docs/32.md?id=_3333-排序损失)
* [3.3.4 回归指标](docs/32.md?id=_334-回归指标)
* [3.3.4.1 解释方差得分](docs/32.md?id=_3341-解释方差得分)
* [3.3.4.2 最大误差](docs/32.md?id=_3342-最大误差)
* [3.3.4.3 平均绝对误差](docs/32.md?id=_3343-平均绝对误差)
* [3.3.4.4 均方误差](docs/32.md?id=_3344-均方误差)
* [3.3.4.5 均方误差对数](docs/32.md?id=_3345-均方误差对数)
* [3.3.4.6 中位绝对误差](docs/32.md?id=_3346-中位绝对误差)
* [3.3.4.7 R² score, 可决系数](docs/32.md?id=_3347-r²-score,-可决系数)
* [3.3.5 聚类指标](docs/32.md?id=_335-聚类指标)
* [3.3.6 虚拟估计](docs/32.md?id=_336-虚拟估计)
* [3.4 模型持久化](docs/33.md?id=_34-模型持久化)
* [3.4.1 持久化示例](docs/33.md?id=_341-持久化示例)
* [3.4.2 安全性和可维护性的局限性](docs/33.md?id=_342-安全性和可维护性的局限性)
* [3.5 验证曲线: 绘制分数以评估模型](docs/34.md?id=_35-验证曲线:-绘制分数以评估模型)
* [3.5.1 验证曲线](docs/34.md?id=_351-验证曲线)
* [3.5.2 学习曲线](docs/34.md?id=_352-学习曲线)
# 1.2\. 线性和二次判别分析
# 1.2. 线性和二次判别分析
校验者:
        [@AnybodyHome](https://github.com/AnybodyHome)
......@@ -18,17 +18,17 @@ Linear Discriminant Analysis(线性判别分析)([`discriminant_analysis.Lin
> 示例:
>* [Linear and Quadratic Discriminant Analysis with covariance ellipsoid](https://scikit-learn.org/stable/auto_examples/classification/plot_lda_qda.html): LDA和QDA在特定数据上的对比
## 1.2.1\. 使用线性判别分析来降维
## 1.2.1. 使用线性判别分析来降维
[`discriminant_analysis.LinearDiscriminantAnalysis`](https://scikit-learn.org/stable/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis) 通过把输入的数据投影到由最大化类之间分离的方向所组成的线性子空间,可以执行有监督降维(详细的内容见下面的数学推导)。输出的维度必然会比原来的类别数量更少的。因此它总体而言是十分强大的降维方式,同样也仅仅在多分类环境下才能感觉到。
实现方式在 [`discriminant_analysis.LinearDiscriminantAnalysis.transform`](https://scikit-learn.org/stable/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis.transform) 中。关于维度的数量可以通过 `n_components` 参数来调节。 值得注意的是,这个参数不会对 [`discriminant_analysis.LinearDiscriminantAnalysis.fit`](https://scikit-learn.org/stable/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis.fit) 或者 [`discriminant_analysis.LinearDiscriminantAnalysis.predict`](https://scikit-learn.org/stable/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis.predict) 产生影响。
>示例:
> **示例**:
>
>[Comparison of LDA and PCA 2D projection of Iris dataset](https://scikit-learn.org/stable/auto_examples/decomposition/plot_pca_vs_lda.html#sphx-glr-auto-examples-decomposition-plot-pca-vs-lda-py): 在 Iris 数据集对比 LDA 和 PCA 之间的降维差异
## 1.2.2\. LDA 和 QDA 分类器的数学公式
## 1.2.2. LDA 和 QDA 分类器的数学公式
LDA 和 QDA 都是源于简单的概率模型,这些模型对于每一个类别 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 的相关分布 ![P(X|y=k)](img/a71a1d9e35b09d284da476b2175edf6f.jpg) 都可以通过贝叶斯定理所获得。
......@@ -56,7 +56,7 @@ LDA 和 QDA 都是源于简单的概率模型,这些模型对于每一个类
>
>如果在QDA模型中假设协方差矩阵是对角的,则输入被假设为在每个类中是条件独立的,所得的分类器等同于高斯朴素贝叶斯分类器 [`naive_bayes.GaussianNB`](https://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.GaussianNB.html#sklearn.naive_bayes.GaussianNB) 相同。
## 1.2.3\. LDA 的降维数学公式
## 1.2.3. LDA 的降维数学公式
为了理解 LDA 在降维上的应用,从上面解释的 LDA 分类规则的几何重构开始是十分有用的。我们用 ![K](img/e279b8169ddd6581c5606c868ba52fae.jpg) 表示目标类别的总数。 由于在 LDA 中我们假设所有类别都有相同估计的协方差 ![\Sigma](img/2ca002ed0f4e27f9040d3f3ec58fbb38.jpg) ,所以我们可重新调节数据从而让协方差相同。
......@@ -66,7 +66,7 @@ LDA 和 QDA 都是源于简单的概率模型,这些模型对于每一个类
通过投影到线性子空间 ![H_L](img/7df17fc33fdb4c71b329c593ad30f47e.jpg) 上,我们可以进一步将维数减少到一个选定的 ![L](img/639e82f3829a0ad677110cc33a028c98.jpg) ,从而使投影后的 ![\mu^*_k](img/d6293957048ac05c3ae0dfac9949537c.jpg) 的方差最大化(实际上,为了实现转换类均值 ![\mu^*_k](img/d6293957048ac05c3ae0dfac9949537c.jpg),我们正在做一种形式的 PCA)。 这里的 ![L](img/639e82f3829a0ad677110cc33a028c98.jpg) 对应于 [`discriminant_analysis.LinearDiscriminantAnalysis.transform`](https://scikit-learn.org/stable/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis.transform) 方法中使用的 `n_components` 参数。 详情参考 参考文献[3] 。
## 1.2.4\. Shrinkage(收缩)
## 1.2.4. Shrinkage(收缩)
收缩是一种在训练样本数量相比特征而言很小的情况下可以提升的协方差矩阵预测(准确性)的工具。 在这个情况下,经验样本协方差是一个很差的预测器。收缩 LDA 可以通过设置 [`discriminant_analysis.LinearDiscriminantAnalysis`](https://scikit-learn.org/stable/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis) 类的 `shrinkage` 参数为 ‘auto’ 来实现。
......@@ -74,7 +74,7 @@ LDA 和 QDA 都是源于简单的概率模型,这些模型对于每一个类
**[![shrinkage](img/d5021b539c18587624a07ef6df00f585.jpg)](https://scikit-learn.org/stable/auto_examples/classification/plot_lda.html)**
## 1.2.5\. 预估算法
## 1.2.5. 预估算法
默认的 solver 是 ‘svd’。它可以进行classification (分类) 以及 transform (转换),而且它不会依赖于协方差矩阵的计算(结果)。这在特征数量特别大的时候十分具有优势。然而,’svd’ solver 无法与 shrinkage (收缩)同时使用。
......@@ -86,6 +86,6 @@ LDA 和 QDA 都是源于简单的概率模型,这些模型对于每一个类
>
>* [Normal and Shrinkage Linear Discriminant Analysis for classification](https://scikit-learn.org/stable/auto_examples/classification/plot_lda.html#sphx-glr-auto-examples-classification-plot-lda-py): Comparison of LDA classifiers with and without shrinkage.
>参考文献:
> **参考资料**:
> * [3] “The Elements of Statistical Learning”, Hastie T., Tibshirani R., Friedman J., Section 4.3, p.106-119, 2008.
> * [4] Ledoit O, Wolf M. Honey, I Shrunk the Sample Covariance Matrix. The Journal of Portfolio Management 30(4), 110-119, 2004.
此差异已折叠。
# 3.2. 调整估计器的超参数
校验者:
        [@想和太阳肩并肩](https://github.com/apachecn/scikit-learn-doc-zh)
翻译者:
        [@\S^R^Y/](https://github.com/apachecn/scikit-learn-doc-zh)
超参数,即不直接在估计器内学习的参数。在 scikit-learn 包中,它们作为估计器类中构造函数的参数进行传递。典型的例子有:用于支持向量分类器的 `C``kernel``gamma` ,用于Lasso的 `alpha` 等。
搜索超参数空间以便获得最好 [交叉验证](https://scikit-learn.org/stable//modules/cross_validation.html#cross-validation) 分数的方法是可能的而且是值得提倡的。
通过这种方式,构造估计器时被提供的任何参数或许都能被优化。具体来说,要获取到给定估计器的所有参数的名称和当前值,使用:
```py
estimator.get_params()
```
搜索包括:
* 估计器(回归器或分类器,例如 `sklearn.svm.SVC()`)
* 参数空间
* 搜寻或采样候选的方法
* 交叉验证方案
* [计分函数](#_3231-指定目标度量)
有些模型支持专业化的、高效的参数搜索策略, [描述如下](#alternative-cv) 。在 scikit-learn 包中提供了两种采样搜索候选的通用方法:对于给定的值, [GridSearchCV](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html#sklearn.model_selection.GridSearchCV) 考虑了所有参数组合;而 [RandomizedSearchCV](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html#sklearn.model_selection.RandomizedSearchCV) 可以从具有指定分布的参数空间中抽取给定数量的候选。介绍完这些工具后,我们将详细介绍适用于这两种方法的 [最佳实践](#_323-参数搜索技巧)
**注意**,通常这些参数的一小部分会对模型的预测或计算性能有很大的影响,而其他参数可以保留为其默认值。 建议阅读估计器类的相关文档,以更好地了解其预期行为,可能的话还可以阅读下引用的文献。
## 3.2.1. 网格追踪法–穷尽的网格搜索
`GridSearchCV` 提供的网格搜索从通过 `param_grid` 参数确定的网格参数值中全面生成候选。例如,下面的 `param_grid`:
```py
param_grid = [
{'C': [1, 10, 100, 1000], 'kernel': ['linear']},
{'C': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']},
]
```
探索两个网格的详细解释: 一个具有线性内核并且C在[1,10,100,1000]中取值; 另一个具有RBF内核,C值的交叉乘积范围在[1,10,100,1000],gamma在[0.001,0.0001]中取值。
`GridSearchCV` 实例实现了常用估计器 API:当在数据集上“拟合”时,参数值的所有可能的组合都会被评估,从而计算出最佳的组合。
> **示例**:
>* 有关在数字数据集上的网格搜索计算示例,请参阅 [基于交叉验证的网格搜索参数估计](https://scikit-learn.org/stable//auto_examples/model_selection/plot_grid_search_digits.html#sphx-glr-auto-examples-model-selection-plot-grid-search-digits-py)。
>* 有关来自文本文档特征提取器(n-gram计数向量化器和TF-IDF变换器)的网格搜索耦合参数与分类器(这里是使用具有弹性网格的SGD训练的线性SVM 或L2惩罚)使用 *pipeline.Pipeline* 示例,请参阅 [用于文本特征提取和评估的示例管道](https://scikit-learn.org/stable//auto_examples/model_selection/grid_search_text_feature_extraction.html#sphx-glr-auto-examples-model-selection-grid-search-text-feature-extraction-py)。
>* 有关iris数据集的交叉验证循环中的网格搜索示例, 请参阅 [嵌套与非嵌套交叉验证](https://scikit-learn.org/stable//auto_examples/model_selection/plot_nested_cross_validation_iris.html#sphx-glr-auto-examples-model-selection-plot-nested-cross-validation-iris-py)。
>* 有关用于同时评估多个指标的GridSearchCV示例,请参阅 [cross_val_score 与 GridSearchCV 多指标评价的实证研究](https://scikit-learn.org/stable//auto_examples/model_selection/plot_multi_metric_evaluation.html#sphx-glr-auto-examples-model-selection-plot-multi-metric-evaluation-py)。
## 3.2.2. 随机参数优化
尽管使用参数设置的网格法是目前最广泛使用的参数优化方法, 其他搜索方法也具有更有利的性能。 [RandomizedSearchCV](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html#sklearn.model_selection.RandomizedSearchCV) 实现了对参数的随机搜索, 其中每个设置都是从可能的参数值的分布中进行取样。 这对于穷举搜索有两个主要优势:
* 可以选择独立于参数个数和可能值的预算
* 添加不影响性能的参数不会降低效率
指定如何取样的参数是使用字典完成的, 非常类似于为 `GridSearchCV` 指定参数。 此外, 通过 `n_iter` 参数指定计算预算, 即取样候选项数或取样迭代次数。 对于每个参数, 可以指定在可能值上的分布或离散选择的列表 (均匀取样):
```py
{'C': scipy.stats.expon(scale=100), 'gamma': scipy.stats.expon(scale=.1),
'kernel': ['rbf'], 'class_weight':['balanced', None]}
```
本示例使用 `scipy.stats` 模块, 它包含许多用于采样参数的有用分布, 如 `expon``gamma``uniform` 或者 `randint`。 原则上, 任何函数都可以通过提供一个 `rvs` (随机变量样本)方法来采样一个值。 对 `rvs` 函数的调用应在连续调用中提供来自可能参数值的独立随机样本。
>**警告**
>
>scipy 0.16之前的版本不允许指定随机状态,而是使用`np.random`来产生随机状态,或是使用`np.random.set`来指定状态.然而在scikit-learn 0.18以后,如果scipy版本大于0.16,则[sklearn.model_selection](https://scikit-learn.org/stable//modules/classes.html#module-sklearn.model_selection)可以通过用户指定来获得随机状态
对于连续参数 (如上面提到的 `C` ),指定连续分布以充分利用随机化是很重要的。这样,有助于 `n_iter` 总是趋向于更精细的搜索。
> **示例**:
>
>* 随机搜索和网格搜索的使用和效率的比较: [有关随机搜索和网格搜索超参数估计的对比](https://scikit-learn.org/stable//auto_examples/model_selection/plot_randomized_search.html#sphx-glr-auto-examples-model-selection-plot-randomized-search-py)
>引用:
>* Bergstra, J. and Bengio, Y., Random search for hyper-parameter optimization, The Journal of Machine Learning Research (2012)
## 3.2.3. 参数搜索技巧
### 3.2.3.1. 指定目标度量
默认情况下, 参数搜索使用估计器的评分函数来评估(衡量)参数设置。 比如 [sklearn.metrics.accuracy_score](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.accuracy_score.html#sklearn.metrics.accuracy_score) 用于分类和 [sklearn.metrics.r2_score](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.r2_score.html#sklearn.metrics.r2_score) 用于回归。 对于一些应用, 其他评分函数将会更加适合 (例如在不平衡的分类, 精度评分往往是信息不足的)。 一个可选的评分功能可以通过评分参数指定给 `GridSearchCV``RandomizedSearchCV` 和许多下文将要描述的、专业化的交叉验证工具。 有关详细信息, 请参阅 [评分参数:定义模型评估规则](doc/32)
### 3.2.3.2. 为评估指定多个指标
`GridSearchCV``RandomizedSearchCV` 允许为评分参数指定多个指标。
多指标评分可以被指定为一个预先定义分数名称字符串列表或者是一个得分手名字到得分手的函数或预先定义的记分员名字的映射字典。 有关详细信息, 请参阅 [多指标评估](docs/33)
在指定多个指标时,必须将 `refit` 参数设置为要在其中找到 `best_params_`,并用于在整个数据集上构建 `best_estimator_` 的度量标准(字符串)。 如果搜索不应该 refit, 则设置 `refit=False`。在使用多个度量值时,如果将 refit 保留为默认值,不会导致结果错误。
有关示例用法, 请参见 [cross_val_score 与 GridSearchCV 多指标评价的实证研究](https://scikit-learn.org/stable/auto_examples/model_selection/plot_multi_metric_evaluation.html#sphx-glr-auto-examples-model-selection-plot-multi-metric-evaluation-py)
### 3.2.3.3. 复合估计和参数空间
[管道:链式评估器](docs/57) 描述了如何使用这些工具搜索参数空间构建链式评估器。
### 3.2.3.4. 模型选择:开发和评估
通过评估各种参数设置,可以将模型选择视为使用标记数据训练网格参数的一种方法。
在评估结果模型时, 重要的是在网格搜索过程中未看到的 held-out 样本数据上执行以下操作: 建议将数据拆分为开发集 (**development set**,供 `GridSearchCV` 实例使用)和评估集(**evaluation set**)来计算性能指标。
这可以通过使用效用函数 [train_test_split](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html#sklearn.model_selection.train_test_split) 来完成。
### 3.2.3.5. 并行机制
`GridSearchCV``RandomizedSearchCV` 可以独立地评估每个参数设置。如果您的OS支持,通过使用关键字 `n_jobs=-1` 可以使计算并行运行。 有关详细信息, 请参见函数签名。
### 3.2.3.6. 对故障的鲁棒性
某些参数设置可能导致无法 `fit` 数据的一个或多个折叠。 默认情况下, 这将导致整个搜索失败, 即使某些参数设置可以完全计算。 设置 `error_score=0` (或`=np.NaN`) 将使程序对此类故障具有鲁棒性,发出警告并将该折叠的分数设置为0(或`NaN`), 但可以完成搜索。
## 3.2.4. 暴力参数搜索的替代方案
### 3.2.4.1. 模型特定交叉验证
某些模型可以与参数的单个值的估计值一样有效地适应某一参数范围内的数据。 此功能可用于执行更有效的交叉验证, 用于此参数的模型选择。
该策略最常用的参数是编码正则化矩阵强度的参数。在这种情况下, 我们称之为, 计算估计器的正则化路径(**regularization path**)。
以下是这些模型的列表:
|模型 |描述 |
|---|---|
| [`linear_model.ElasticNetCV`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.ElasticNetCV.html#sklearn.linear_model.ElasticNetCV "sklearn.linear_model.ElasticNetCV")([l1_ratio, eps, …]) | Elastic Net model with iterative fitting along a regularization path |
| [`linear_model.LarsCV`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LarsCV.html#sklearn.linear_model.LarsCV "sklearn.linear_model.LarsCV")([fit_intercept, …]) | Cross-validated Least Angle Regression model |
| [`linear_model.LassoCV`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LassoCV.html#sklearn.linear_model.LassoCV "sklearn.linear_model.LassoCV")([eps, n_alphas, …]) | Lasso linear model with iterative fitting along a regularization path |
| [`linear_model.LassoLarsCV`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LassoLarsCV.html#sklearn.linear_model.LassoLarsCV "sklearn.linear_model.LassoLarsCV")([fit_intercept, …]) | Cross-validated Lasso, using the LARS algorithm |
| [`linear_model.LogisticRegressionCV`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegressionCV.html#sklearn.linear_model.LogisticRegressionCV "sklearn.linear_model.LogisticRegressionCV")([Cs, …]) | Logistic Regression CV (aka logit, MaxEnt) classifier. |
| [`linear_model.MultiTaskElasticNetCV`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.MultiTaskElasticNetCV.html#sklearn.linear_model.MultiTaskElasticNetCV "sklearn.linear_model.MultiTaskElasticNetCV")([…]) | Multi-task L1/L2 ElasticNet with built-in cross-validation. |
| [`linear_model.MultiTaskLassoCV`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.MultiTaskLassoCV.html#sklearn.linear_model.MultiTaskLassoCV "sklearn.linear_model.MultiTaskLassoCV")([eps, …]) | Multi-task L1/L2 Lasso with built-in cross-validation. |
| [`linear_model.OrthogonalMatchingPursuitCV`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.OrthogonalMatchingPursuitCV.html#sklearn.linear_model.OrthogonalMatchingPursuitCV "sklearn.linear_model.OrthogonalMatchingPursuitCV")([…]) | Cross-validated Orthogonal Matching Pursuit model (OMP) |
| [`linear_model.RidgeCV`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.RidgeCV.html#sklearn.linear_model.RidgeCV "sklearn.linear_model.RidgeCV")([alphas, …]) | Ridge regression with built-in cross-validation. |
| [`linear_model.RidgeClassifierCV`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.RidgeClassifierCV.html#sklearn.linear_model.RidgeClassifierCV "sklearn.linear_model.RidgeClassifierCV")([alphas, …]) | Ridge classifier with built-in cross-validation. |
### 3.2.4.2. 信息标准
一些模型通过计算一个正则化路径 (代替使用交叉验证得出数个参数), 可以给出正则化参数最优估计的信息理论闭包公式。
以下是从 Akaike 信息标准 (AIC) 或贝叶斯信息标准 (可用于自动选择模型) 中受益的模型列表:
|模型 |描述 |
|---|---|
| [`linear_model.LassoLarsIC`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LassoLarsIC.html#sklearn.linear_model.LassoLarsIC "sklearn.linear_model.LassoLarsIC")([criterion, …]) | Lasso model fit with Lars using BIC or AIC for model selection |
### 3.2.4.3. 出袋估计
当使用基于装袋的集合方法时,即使用具有替换的采样产生新的训练集,部分训练集保持不用。 对于集合中的每个分类器,训练集的不同部分被忽略。
这个省略的部分可以用来估计泛化误差,而不必依靠单独的验证集。 此估计是”免费的”,因为不需要额外的数据,可以用于模型选择。
目前该方法已经实现的类以下几个:
|方法 |描述 |
|---|---|
| [`ensemble.RandomForestClassifier`](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier "sklearn.ensemble.RandomForestClassifier")([…]) | A random forest classifier. |
| [`ensemble.RandomForestRegressor`](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestRegressor.html#sklearn.ensemble.RandomForestRegressor "sklearn.ensemble.RandomForestRegressor")([…]) | A random forest regressor. |
| [`ensemble.ExtraTreesClassifier`](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.ExtraTreesClassifier.html#sklearn.ensemble.ExtraTreesClassifier "sklearn.ensemble.ExtraTreesClassifier")([…]) | An extra-trees classifier. |
| [`ensemble.ExtraTreesRegressor`](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.ExtraTreesRegressor.html#sklearn.ensemble.ExtraTreesRegressor "sklearn.ensemble.ExtraTreesRegressor")([n_estimators, …]) | An extra-trees regressor. |
| [`ensemble.GradientBoostingClassifier`](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html#sklearn.ensemble.GradientBoostingClassifier "sklearn.ensemble.GradientBoostingClassifier")([loss, …]) | Gradient Boosting for classification. |
| [`ensemble.GradientBoostingRegressor`](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingRegressor.html#sklearn.ensemble.GradientBoostingRegressor "sklearn.ensemble.GradientBoostingRegressor")([loss, …]) | Gradient Boosting for regression. |
此差异已折叠。
# 3\. 模型选择和评估
* [3.1\. 交叉验证:评估估算器的表现](/docs/34?id=_31-交叉验证:评估估算器的表现)
* [3.1.1\. 计算交叉验证的指标](/docs/34?id=_311-计算交叉验证的指标)
* [3.1.1.1\. cross_validate 函数和多度量评估](/docs/34?id=_3111-cross_validate-函数和多度量评估)
* [3.1.1.2\. 通过交叉验证获取预测](/docs/34?id=_3112-通过交叉验证获取预测)
* [3.1.2\. 交叉验证迭代器](/docs/34?id=_312-交叉验证迭代器)
* [3.1.3\. 交叉验证迭代器–循环遍历数据](/docs/34?id=_313-交叉验证迭代器–循环遍历数据)
* [3.1.3.1\. K 折](/docs/34?id=_3131-k-折)
* [3.1.3.2\. 重复 K-折交叉验证](/docs/34?id=_3132-重复-k-折交叉验证)
* [3.1.3.3\. 留一交叉验证 (LOO)](/docs/34?id=_3133-留一交叉验证-(loo)
* [3.1.3.4\. 留 P 交叉验证 (LPO)](/docs/34?id=_3134-留-p-交叉验证-(lpo)
* [3.1.3.5\. 随机排列交叉验证 a.k.a. Shuffle & Split](/docs/34?id=_3135-随机排列交叉验证-aka-shuffle-&-split)
* [3.1.4\. 基于类标签、具有分层的交叉验证迭代器](/docs/34?id=_314-基于类标签、具有分层的交叉验证迭代器)
* [3.1.4.1\. 分层 k 折](/docs/34?id=_3141-分层-k-折)
* [3.1.4.2\. 分层随机 Split](/docs/34?id=_3142-分层随机-split)
* [3.1.5\. 用于分组数据的交叉验证迭代器](/docs/34?id=_315-用于分组数据的交叉验证迭代器)
* [3.1.5.1\. 组 k-fold](/docs/34?id=_3151-组-k-fold)
* [3.1.5.2\. 留一组交叉验证](/docs/34?id=_3152-留一组交叉验证)
* [3.1.5.3\. 留 P 组交叉验证](/docs/34?id=_3153-留-p-组交叉验证)
* [3.1.5.4\. Group Shuffle Split](/docs/34?id=_3154-group-shuffle-split)
* [3.1.6\. 预定义的折叠 / 验证集](/docs/34?id=_316-预定义的折叠-/-验证集)
* [3.1.7\. 交叉验证在时间序列数据中应用](/docs/34?id=_317-交叉验证在时间序列数据中应用)
* [3.1.7.1\. 时间序列分割](/docs/34?id=_3171-时间序列分割)
* [3.1.8\. A note on shuffling](/docs/34?id=_318-a-note-on-shuffling)
* [3.1.9\. 交叉验证和模型选择](/docs/34?id=_319-交叉验证和模型选择)
* [3.2\. 调整估计器的超参数](/docs/35?id=_32-调整估计器的超参数)
* [3.2.1\. 网格追踪法–穷尽的网格搜索](/docs/35?id=_321-网格追踪法–穷尽的网格搜索)
* [3.2.2\. 随机参数优化](/docs/35?id=_322-随机参数优化)
* [3.2.3\. 参数搜索技巧](/docs/35?id=_323-参数搜索技巧)
* [3.2.3.1\. 指定目标度量](/docs/35?id=_3231-指定目标度量)
* [3.2.3.2\. 为评估指定多个指标](/docs/35?id=_3232-为评估指定多个指标)
* [3.2.3.3\. 复合估计和参数空间](/docs/35?id=_3233-复合估计和参数空间)
* [3.2.3.4\. 模型选择:开发和评估](/docs/35?id=_3234-模型选择:开发和评估)
* [3.2.3.5\. 并行机制](/docs/35?id=_3235-并行机制)
* [3.2.3.6\. 对故障的鲁棒性](/docs/35?id=_3236-对故障的鲁棒性)
* [3.2.4\. 暴力参数搜索的替代方案](/docs/35?id=_324-暴力参数搜索的替代方案)
* [3.2.4.1\. 模型特定交叉验证](/docs/35?id=_3241-模型特定交叉验证)
* [3.2.4.1.1\. `sklearn.linear_model`.ElasticNetCV](/docs/35?id=_32411-`sklearnlinear_model`elasticnetcv)
* [3.2.4.1.2\. `sklearn.linear_model`.LarsCV](/docs/35?id=_32412-`sklearnlinear_model`larscv)
* [3.2.4.1.3\. `sklearn.linear_model`.LassoCV](/docs/35?id=_32413-`sklearnlinear_model`lassocv)
* [3.2.4.1.3.1\. Examples using `sklearn.linear_model.LassoCV`](/docs/35?id=_324131-examples-using-`sklearnlinear_modellassocv`)
* [3.2.4.1.4\. `sklearn.linear_model`.LassoLarsCV](/docs/35?id=_32414-`sklearnlinear_model`lassolarscv)
* [3.2.4.1.4.1\. Examples using `sklearn.linear_model.LassoLarsCV`](/docs/35?id=_324141-examples-using-`sklearnlinear_modellassolarscv`)
* [3.2.4.1.5\. `sklearn.linear_model`.LogisticRegressionCV](/docs/35?id=_32415-`sklearnlinear_model`logisticregressioncv)
* [3.2.4.1.6\. `sklearn.linear_model`.MultiTaskElasticNetCV](/docs/35?id=_32416-`sklearnlinear_model`multitaskelasticnetcv)
* [3.2.4.1.7\. `sklearn.linear_model`.MultiTaskLassoCV](/docs/35?id=_32417-`sklearnlinear_model`multitasklassocv)
* [3.2.4.1.8\. `sklearn.linear_model`.OrthogonalMatchingPursuitCV](/docs/35?id=_32418-`sklearnlinear_model`orthogonalmatchingpursuitcv)
* [3.2.4.1.8.1\. Examples using `sklearn.linear_model.OrthogonalMatchingPursuitCV`](/docs/35?id=_324181-examples-using-`sklearnlinear_modelorthogonalmatchingpursuitcv`)
* [3.2.4.1.9\. `sklearn.linear_model`.RidgeCV](/docs/35?id=_32419-`sklearnlinear_model`ridgecv)
* [3.2.4.1.9.1\. Examples using `sklearn.linear_model.RidgeCV`](/docs/35?id=_324191-examples-using-`sklearnlinear_modelridgecv`)
* [3.2.4.1.10\. `sklearn.linear_model`.RidgeClassifierCV](/docs/35?id=_324110-`sklearnlinear_model`ridgeclassifiercv)
* [3.2.4.2\. 信息标准](/docs/35?id=_3242-信息标准)
* [3.2.4.2.1\. `sklearn.linear_model`.LassoLarsIC](/docs/35?id=_32421-`sklearnlinear_model`lassolarsic)
* [3.2.4.2.1.1\. Examples using `sklearn.linear_model.LassoLarsIC`](/docs/35?id=_324211-examples-using-`sklearnlinear_modellassolarsic`)
* [3.2.4.3\. 出袋估计](/docs/35?id=_3243-出袋估计)
* [3.2.4.3.1\. `sklearn.ensemble`.RandomForestClassifier](/docs/35?id=_32431-`sklearnensemble`randomforestclassifier)
* [3.2.4.3.1.1\. Examples using `sklearn.ensemble.RandomForestClassifier`](/docs/35?id=_324311-examples-using-`sklearnensemblerandomforestclassifier`)
* [3.2.4.3.2\. `sklearn.ensemble`.RandomForestRegressor](/docs/35?id=_32432-`sklearnensemble`randomforestregressor)
* [3.2.4.3.2.1\. Examples using `sklearn.ensemble.RandomForestRegressor`](/docs/35?id=_324321-examples-using-`sklearnensemblerandomforestregressor`)
* [3.2.4.3.3\. `sklearn.ensemble`.ExtraTreesClassifier](/docs/35?id=_32433-`sklearnensemble`extratreesclassifier)
* [3.2.4.3.3.1\. Examples using `sklearn.ensemble.ExtraTreesClassifier`](/docs/35?id=_324331-examples-using-`sklearnensembleextratreesclassifier`)
* [3.2.4.3.4\. `sklearn.ensemble`.ExtraTreesRegressor](/docs/35?id=_32434-`sklearnensemble`extratreesregressor)
* [3.2.4.3.4.1\. Examples using `sklearn.ensemble.ExtraTreesRegressor`](/docs/35?id=_324341-examples-using-`sklearnensembleextratreesregressor`)
* [3.2.4.3.5\. `sklearn.ensemble`.GradientBoostingClassifier](/docs/35?id=_32435-`sklearnensemble`gradientboostingclassifier)
* [3.2.4.3.5.1\. Examples using `sklearn.ensemble.GradientBoostingClassifier`](/docs/35?id=_324351-examples-using-`sklearnensemblegradientboostingclassifier`)
* [3.2.4.3.6\. `sklearn.ensemble`.GradientBoostingRegressor](/docs/35?id=_32436-`sklearnensemble`gradientboostingregressor)
* [3.2.4.3.6.1\. Examples using `sklearn.ensemble.GradientBoostingRegressor`](/docs/35?id=_324361-examples-using-`sklearnensemblegradientboostingregressor`)
* [3.3\. 模型评估: 量化预测的质量](/docs/36?id=_33-模型评估:-量化预测的质量)
* [3.3.1\. `scoring` 参数: 定义模型评估规则](/docs/36?id=_331-`scoring`-参数:-定义模型评估规则)
* [3.3.1.1\. 常见场景: 预定义值](/docs/36?id=_3311-常见场景:-预定义值)
* [3.3.1.2\. 根据 metric 函数定义您的评分策略](/docs/36?id=_3312-根据-metric-函数定义您的评分策略)
* [3.3.1.3\. 实现自己的记分对象](/docs/36?id=_3313-实现自己的记分对象)
* [3.3.1.4\. 使用多个指数评估](/docs/36?id=_3314-使用多个指数评估)
* [3.3.2\. 分类指标](/docs/36?id=_332-分类指标)
* [3.3.2.1\. 从二分到多分类和 multilabel](/docs/36?id=_3321-从二分到多分类和-multilabel)
* [3.3.2.2\. 精确度得分](/docs/36?id=_3322-精确度得分)
* [3.3.2.3\. Cohen’s kappa](/docs/36?id=_3323-cohen’s-kappa)
* [3.3.2.4\. 混淆矩阵](/docs/36?id=_3324-混淆矩阵)
* [3.3.2.5\. 分类报告](/docs/36?id=_3325-分类报告)
* [3.3.2.6\. 汉明损失](/docs/36?id=_3326-汉明损失)
* [3.3.2.7\. Jaccard 相似系数 score](/docs/36?id=_3327-jaccard-相似系数-score)
* [3.3.2.8\. 精准,召回和 F-measures](/docs/36?id=_3328-精准,召回和-f-measures)
* [3.3.2.8.1\. 二分类](/docs/36?id=_33281-二分类)
* [3.3.2.8.2\. 多类和多标签分类](/docs/36?id=_33282-多类和多标签分类)
* [3.3.2.9\. Hinge loss](/docs/36?id=_3329-hinge-loss)
* [3.3.2.10\. Log 损失](/docs/36?id=_33210-log-损失)
* [3.3.2.11\. 马修斯相关系数](/docs/36?id=_33211-马修斯相关系数)
* [3.3.2.12\. Receiver operating characteristic (ROC)](/docs/36?id=_33212-receiver-operating-characteristic-(roc)
* [3.3.2.13\. 零一损失](/docs/36?id=_33213-零一损失)
* [3.3.2.14\. Brier 分数损失](/docs/36?id=_33214-brier-分数损失)
* [3.3.3\. 多标签排名指标](/docs/36?id=_333-多标签排名指标)
* [3.3.3.1\. 覆盖误差](/docs/36?id=_3331-覆盖误差)
* [3.3.3.2\. 标签排名平均精度](/docs/36?id=_3332-标签排名平均精度)
* [3.3.3.3\. 排序损失](/docs/36?id=_3333-排序损失)
* [3.3.4\. 回归指标](/docs/36?id=_334-回归指标)
* [3.3.4.1\. 解释方差得分](/docs/36?id=_3341-解释方差得分)
* [3.3.4.2\. 平均绝对误差](/docs/36?id=_3342-平均绝对误差)
* [3.3.4.3\. 均方误差](/docs/36?id=_3343-均方误差)
* [3.3.4.4\. 均方误差对数](/docs/36?id=_3344-均方误差对数)
* [3.3.4.5\. 中位绝对误差](/docs/36?id=_3345-中位绝对误差)
* [3.3.4.6\. R² score, 可决系数](/docs/36?id=_3346-r²-score,-可决系数)
* [3.3.5\. 聚类指标](/docs/36?id=_335-聚类指标)
* [3.3.6\. 虚拟估计](/docs/36?id=_336-虚拟估计)
* [3.4\. 模型持久化](/docs/37?id=_34-模型持久化)
* [3.4.1\. 持久化示例](/docs/37?id=_341-持久化示例)
* [3.4.2\. 安全性和可维护性的局限性](/docs/37?id=_342-安全性和可维护性的局限性)
* [3.5\. 验证曲线: 绘制分数以评估模型](/docs/38?id=_35-验证曲线:-绘制分数以评估模型)
* [3.5.1\. 验证曲线](/docs/38?id=_351-验证曲线)
* [3.5.2\. 学习曲线](/docs/38?id=_352-学习曲线)
\ No newline at end of file
# 3.4. 模型持久化
校验者:
        [@why2lyj(Snow Wang)](https://github.com/why2lyj)
        [@小瑶](https://github.com/apachecn/scikit-learn-doc-zh)
翻译者:
        [@那伊抹微笑](https://github.com/apachecn/scikit-learn-doc-zh)
在训练完 scikit-learn 模型之后,最好有一种方法来将模型持久化以备将来使用,而无需重新训练。 以下部分为您提供了有关如何使用 pickle 来持久化模型的示例。 在使用 pickle 序列化时,我们还将回顾一些安全性和可维护性方面的问题。
pickle的另一种方法是使用[相关项目](https://scikit-learn.org/stable/related_projects.html#related-projects)中列出的模型导出工具之一将模型导出为另一种格式。与pickle不同,一旦导出,就不能恢复完整的Scikit-learn estimator对象,但是可以部署模型进行预测,通常可以使用支持开放模型交换格式的工具,如“[ONNX](https://scikit-learn.org/stable/modules/model_persistence.html#id2)”或“[PMML](https://scikit-learn.org/stable/modules/model_persistence.html#id4)”。
## 3.4.1. 持久化示例
可以通过使用 Python 的内置持久化模型将训练好的模型保存在 scikit 中,它名为 [pickle](https://docs.python.org/2/library/pickle.html):
```py
>>> from sklearn import svm
>>> from sklearn import datasets
>>> clf = svm.SVC()
>>> iris = datasets.load_iris()
>>> X, y = iris.data, iris.target
>>> clf.fit(X, y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf',
max_iter=-1, probability=False, random_state=None, shrinking=True,
tol=0.001, verbose=False)
>>> import pickle
>>> s = pickle.dumps(clf)
>>> clf2 = pickle.loads(s)
>>> clf2.predict(X[0:1])
array([0])
>>> y[0]
0
```
在这个 scikit 的特殊示例中,使用 joblib 来替换 pickle(`joblib.dump` & `joblib.load`)可能会更有意思,这对于内部带有 numpy 数组的对象来说更为高效, 通常情况下适合 scikit-learn estimators(预估器),但是也只能是 pickle 到硬盘而不是字符串:
```py
>>> from sklearn.externals import joblib
>>> joblib.dump(clf, 'filename.pkl')
```
之后你可以使用以下方式回调 pickled model 可能在另一个 Python 进程中):
```py
>>> clf = joblib.load('filename.pkl')
```
>**注意**
>`joblib.dump` 和 `joblib.load` 函数也接收类似 file-like 的对象而不是文件名。 更多有关使用 Joblib 来持久化数据的信息可以参阅 [这里](https://pythonhosted.org/joblib/persistence.html).
## 3.4.2. 安全性和可维护性的局限性
pickle(和通过扩展的 joblib),在安全性和可维护性方面存在一些问题。 有以下原因,
* 绝对不要使用未经 pickle 的不受信任的数据,因为它可能会在加载时执行恶意代码。
* 虽然一个版本的 scikit-learn 模型可以在其他版本中加载,但这完全不建议并且也是不可取的。 还应该了解到,对于这些数据执行的操作可能会产生不同及意想不到的结果。
为了用以后版本的 scikit-learn 来重构类似的模型, 额外的元数据应该随着 pickled model 一起被保存:
* 训练数据,例如:引用不可变的快照
* 用于生成模型的 python 源代码
* scikit-learn 的各版本以及各版本对应的依赖包
* 在训练数据的基础上获得的交叉验证得分
这样可以检查交叉验证得分是否与以前相同。
由于模型内部表示可能在两种不同架构上不一样,因此不支持在一个架构上转储模型并将其加载到另一个体系架构上。
如果您想要了解更多关于这些问题以及其它可能的序列化方法,请参阅这个 [Alex Gaynor 的演讲](http://pyvideo.org/video/2566/pickles-are-for-delis-not-software).
此差异已折叠。
# 3.2\. 调整估计器的超参数
校验者:
        [@想和太阳肩并肩](https://github.com/apachecn/scikit-learn-doc-zh)
翻译者:
        [@\S^R^Y/](https://github.com/apachecn/scikit-learn-doc-zh)
超参数,即不直接在估计器内学习的参数。在 scikit-learn 包中,它们作为估计器类中构造函数的参数进行传递。典型的例子有:用于支持向量分类器的 `C``kernel``gamma` ,用于Lasso的 `alpha` 等。
搜索超参数空间以便获得最好 [交叉验证](http://sklearn.apachecn.org/cn/0.19.0/modules/cross_validation.html#cross-validation) 分数的方法是可能的而且是值得提倡的。
通过这种方式,构造估计器时被提供的任何参数或许都能被优化。具体来说,要获取到给定估计器的所有参数的名称和当前值,使用:
```py
estimator.get_params()
```
搜索包括:
* 估计器(回归器或分类器,例如 `sklearn.svm.SVC()`)
* 参数空间
* 搜寻或采样候选的方法
* 交叉验证方案
* [计分函数](#gridsearch-scoring)
有些模型支持专业化的、高效的参数搜索策略, [描述如下](#alternative-cv) 。在 scikit-learn 包中提供了两种采样搜索候选的通用方法:对于给定的值, [GridSearchCV](http://sklearn.apachecn.org/cn/0.19.0/modules/generated/sklearn.model_selection.GridSearchCV.html#sklearn.model_selection.GridSearchCV) 考虑了所有参数组合;而 [RandomizedSearchCV](http://sklearn.apachecn.org/cn/0.19.0/modules/generated/sklearn.model_selection.RandomizedSearchCV.html#sklearn.model_selection.RandomizedSearchCV) 可以从具有指定分布的参数空间中抽取给定数量的候选。介绍完这些工具后,我们将详细介绍适用于这两种方法的 [最佳实践](#grid-search-tips)
**注意**,通常这些参数的一小部分会对模型的预测或计算性能有很大的影响,而其他参数可以保留为其默认值。 建议阅读估计器类的相关文档,以更好地了解其预期行为,可能的话还可以阅读下引用的文献。
## 3.2.1\. 网格追踪法–穷尽的网格搜索
`GridSearchCV` 提供的网格搜索从通过 `param_grid` 参数确定的网格参数值中全面生成候选。例如,下面的 `param_grid`:
```py
param_grid = [
{'C': [1, 10, 100, 1000], 'kernel': ['linear']},
{'C': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']},
]
```
探索两个网格的详细解释: 一个具有线性内核并且C在[1,10,100,1000]中取值; 另一个具有RBF内核,C值的交叉乘积范围在[1,10,100,1000],gamma在[0.001,0.0001]中取值。
`GridSearchCV` 实例实现了常用估计器 API:当在数据集上“拟合”时,参数值的所有可能的组合都会被评估,从而计算出最佳的组合。
示例:
* 有关在数字数据集上的网格搜索计算示例,请参阅 [基于交叉验证的网格搜索参数估计](http://sklearn.apachecn.org/cn/0.19.0/auto_examples/model_selection/plot_grid_search_digits.html#sphx-glr-auto-examples-model-selection-plot-grid-search-digits-py)
* 有关来自文本文档特征提取器(n-gram计数向量化器和TF-IDF变换器)的网格搜索耦合参数与分类器(这里是使用具有弹性网格的SGD训练的线性SVM 或L2惩罚)使用 *pipeline.Pipeline* 示例,请参阅 [用于文本特征提取和评估的示例管道](http://sklearn.apachecn.org/cn/0.19.0/auto_examples/model_selection/grid_search_text_feature_extraction.html#sphx-glr-auto-examples-model-selection-grid-search-text-feature-extraction-py)
* 有关iris数据集的交叉验证循环中的网格搜索示例, 请参阅 [嵌套与非嵌套交叉验证](http://sklearn.apachecn.org/cn/0.19.0/auto_examples/model_selection/plot_nested_cross_validation_iris.html#sphx-glr-auto-examples-model-selection-plot-nested-cross-validation-iris-py)
* 有关用于同时评估多个指标的GridSearchCV示例,请参阅 [cross_val_score 与 GridSearchCV 多指标评价的实证研究](http://sklearn.apachecn.org/cn/0.19.0/auto_examples/model_selection/plot_multi_metric_evaluation.html#sphx-glr-auto-examples-model-selection-plot-multi-metric-evaluation-py)
## 3.2.2\. 随机参数优化
尽管使用参数设置的网格法是目前最广泛使用的参数优化方法, 其他搜索方法也具有更有利的性能。 [RandomizedSearchCV](http://sklearn.apachecn.org/cn/0.19.0/modules/generated/sklearn.model_selection.RandomizedSearchCV.html#sklearn.model_selection.RandomizedSearchCV) 实现了对参数的随机搜索, 其中每个设置都是从可能的参数值的分布中进行取样。 这对于穷举搜索有两个主要优势:
* 可以选择独立于参数个数和可能值的预算
* 添加不影响性能的参数不会降低效率
指定如何取样的参数是使用字典完成的, 非常类似于为 `GridSearchCV` 指定参数。 此外, 通过 `n_iter` 参数指定计算预算, 即取样候选项数或取样迭代次数。 对于每个参数, 可以指定在可能值上的分布或离散选择的列表 (均匀取样):
```py
{'C': scipy.stats.expon(scale=100), 'gamma': scipy.stats.expon(scale=.1),
'kernel': ['rbf'], 'class_weight':['balanced', None]}
```
本示例使用 `scipy.stats` 模块, 它包含许多用于采样参数的有用分布, 如 `expon``gamma``uniform` 或者 `randint`。 原则上, 任何函数都可以通过提供一个 `rvs` (随机变量样本)方法来采样一个值。 对 `rvs` 函数的调用应在连续调用中提供来自可能参数值的独立随机样本。
> Warning
>
> The distributions in `scipy.stats` prior to version scipy 0.16 do not allow specifying a random state. Instead, they use the global numpy random state, that can be seeded via `np.random.seed` or set using `np.random.set_state`. However, beginning scikit-learn 0.18, the [sklearn.model_selection](http://sklearn.apachecn.org/cn/0.19.0/modules/classes.html#module-sklearn.model_selection) module sets the random state provided by the user if scipy >= 0.16 is also available.
对于连续参数 (如上面提到的 `C` ),指定连续分布以充分利用随机化是很重要的。这样,有助于 `n_iter` 总是趋向于更精细的搜索。
示例:
* 随机搜索和网格搜索的使用和效率的比较: [有关随机搜索和网格搜索超参数估计的对比](http://sklearn.apachecn.org/cn/0.19.0/auto_examples/model_selection/plot_randomized_search.html#sphx-glr-auto-examples-model-selection-plot-randomized-search-py)
引用:
* Bergstra, J. and Bengio, Y., Random search for hyper-parameter optimization, The Journal of Machine Learning Research (2012)
## 3.2.3\. 参数搜索技巧
### 3.2.3.1\. 指定目标度量
默认情况下, 参数搜索使用估计器的评分函数来评估(衡量)参数设置。 比如 [sklearn.metrics.accuracy_score](http://sklearn.apachecn.org/cn/0.19.0/modules/generated/sklearn.metrics.accuracy_score.html#sklearn.metrics.accuracy_score) 用于分类和 [sklearn.metrics.r2_score](http://sklearn.apachecn.org/cn/0.19.0/modules/generated/sklearn.metrics.r2_score.html#sklearn.metrics.r2_score) 用于回归。 对于一些应用, 其他评分函数将会更加适合 (例如在不平衡的分类, 精度评分往往是信息不足的)。 一个可选的评分功能可以通过评分参数指定给 `GridSearchCV``RandomizedSearchCV` 和许多下文将要描述的、专业化的交叉验证工具。 有关详细信息, 请参阅 [评分参数:定义模型评估规则](http://sklearn.apachecn.org/cn/0.19.0/modules/model_evaluation.html#scoring-parameter)
### 3.2.3.2\. 为评估指定多个指标
`GridSearchCV``RandomizedSearchCV` 允许为评分参数指定多个指标。
多指标评分可以被指定为一个预先定义分数名称字符串列表或者是一个得分手名字到得分手的函数或预先定义的记分员名字的映射字典。 有关详细信息, 请参阅 [多指标评估](http://sklearn.apachecn.org/cn/0.19.0/modules/model_evaluation.html#multimetric-scoring)
在指定多个指标时,必须将 `refit` 参数设置为要在其中找到 `best_params_`,并用于在整个数据集上构建 `best_estimator_` 的度量标准(字符串)。 如果搜索不应该 refit, 则设置 `refit=False`。在使用多个度量值时,如果将 refit 保留为默认值,不会导致结果错误。
有关示例用法, 请参见 [cross_val_score 与 GridSearchCV 多指标评价的实证研究](http://sklearn.apachecn.org/cn/0.19.0/auto_examples/model_selection/plot_multi_metric_evaluation.html#sphx-glr-auto-examples-model-selection-plot-multi-metric-evaluation-py)
### 3.2.3.3\. 复合估计和参数空间
[管道:链式评估器](http://sklearn.apachecn.org/cn/0.19.0/modules/pipeline.html#pipeline) 描述了如何使用这些工具搜索参数空间构建链式评估器。
### 3.2.3.4\. 模型选择:开发和评估
通过评估各种参数设置,可以将模型选择视为使用标记数据训练网格参数的一种方法。
在评估结果模型时, 重要的是在网格搜索过程中未看到的 held-out 样本数据上执行以下操作: 建议将数据拆分为开发集 (**development set**,供 `GridSearchCV` 实例使用)和评估集(**evaluation set**)来计算性能指标。
这可以通过使用效用函数 [train_test_split](http://sklearn.apachecn.org/cn/0.19.0/modules/generated/sklearn.model_selection.train_test_split.html#sklearn.model_selection.train_test_split) 来完成。
### 3.2.3.5\. 并行机制
`GridSearchCV``RandomizedSearchCV` 可以独立地评估每个参数设置。如果您的OS支持,通过使用关键字 `n_jobs=-1` 可以使计算并行运行。 有关详细信息, 请参见函数签名。
### 3.2.3.6\. 对故障的鲁棒性
某些参数设置可能导致无法 `fit` 数据的一个或多个折叠。 默认情况下, 这将导致整个搜索失败, 即使某些参数设置可以完全计算。 设置 `error_score=0` (或`=np.NaN`) 将使程序对此类故障具有鲁棒性,发出警告并将该折叠的分数设置为0(或`NaN`), 但可以完成搜索。
## 3.2.4\. 暴力参数搜索的替代方案
### 3.2.4.1\. 模型特定交叉验证
某些模型可以与参数的单个值的估计值一样有效地适应某一参数范围内的数据。 此功能可用于执行更有效的交叉验证, 用于此参数的模型选择。
该策略最常用的参数是编码正则化矩阵强度的参数。在这种情况下, 我们称之为, 计算估计器的正则化路径(**regularization path**)。
以下是这些模型的列表:
| [`linear_model.ElasticNetCV`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.ElasticNetCV.html#sklearn.linear_model.ElasticNetCV "sklearn.linear_model.ElasticNetCV")([l1_ratio, eps, …]) | Elastic Net model with iterative fitting along a regularization path |
| [`linear_model.LarsCV`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LarsCV.html#sklearn.linear_model.LarsCV "sklearn.linear_model.LarsCV")([fit_intercept, …]) | Cross-validated Least Angle Regression model |
| [`linear_model.LassoCV`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LassoCV.html#sklearn.linear_model.LassoCV "sklearn.linear_model.LassoCV")([eps, n_alphas, …]) | Lasso linear model with iterative fitting along a regularization path |
| [`linear_model.LassoLarsCV`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LassoLarsCV.html#sklearn.linear_model.LassoLarsCV "sklearn.linear_model.LassoLarsCV")([fit_intercept, …]) | Cross-validated Lasso, using the LARS algorithm |
| [`linear_model.LogisticRegressionCV`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegressionCV.html#sklearn.linear_model.LogisticRegressionCV "sklearn.linear_model.LogisticRegressionCV")([Cs, …]) | Logistic Regression CV (aka logit, MaxEnt) classifier. |
| [`linear_model.MultiTaskElasticNetCV`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.MultiTaskElasticNetCV.html#sklearn.linear_model.MultiTaskElasticNetCV "sklearn.linear_model.MultiTaskElasticNetCV")([…]) | Multi-task L1/L2 ElasticNet with built-in cross-validation. |
| [`linear_model.MultiTaskLassoCV`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.MultiTaskLassoCV.html#sklearn.linear_model.MultiTaskLassoCV "sklearn.linear_model.MultiTaskLassoCV")([eps, …]) | Multi-task L1/L2 Lasso with built-in cross-validation. |
| [`linear_model.OrthogonalMatchingPursuitCV`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.OrthogonalMatchingPursuitCV.html#sklearn.linear_model.OrthogonalMatchingPursuitCV "sklearn.linear_model.OrthogonalMatchingPursuitCV")([…]) | Cross-validated Orthogonal Matching Pursuit model (OMP) |
| [`linear_model.RidgeCV`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.RidgeCV.html#sklearn.linear_model.RidgeCV "sklearn.linear_model.RidgeCV")([alphas, …]) | Ridge regression with built-in cross-validation. |
| [`linear_model.RidgeClassifierCV`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.RidgeClassifierCV.html#sklearn.linear_model.RidgeClassifierCV "sklearn.linear_model.RidgeClassifierCV")([alphas, …]) | Ridge classifier with built-in cross-validation. |
### 3.2.4.2\. 信息标准
一些模型通过计算一个正则化路径 (代替使用交叉验证得出数个参数), 可以给出正则化参数最优估计的信息理论闭包公式。
以下是从 Akaike 信息标准 (AIC) 或贝叶斯信息标准 (可用于自动选择模型) 中受益的模型列表:
| [`linear_model.LassoLarsIC`](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LassoLarsIC.html#sklearn.linear_model.LassoLarsIC "sklearn.linear_model.LassoLarsIC")([criterion, …]) | Lasso model fit with Lars using BIC or AIC for model selection |
### 3.2.4.3\. 出袋估计
当使用基于装袋的集合方法时,即使用具有替换的采样产生新的训练集,部分训练集保持不用。 对于集合中的每个分类器,训练集的不同部分被忽略。
这个省略的部分可以用来估计泛化误差,而不必依靠单独的验证集。 此估计是”免费的”,因为不需要额外的数据,可以用于模型选择。
目前该方法已经实现的类以下几个:
| [`ensemble.RandomForestClassifier`](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier "sklearn.ensemble.RandomForestClassifier")([…]) | A random forest classifier. |
| [`ensemble.RandomForestRegressor`](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestRegressor.html#sklearn.ensemble.RandomForestRegressor "sklearn.ensemble.RandomForestRegressor")([…]) | A random forest regressor. |
| [`ensemble.ExtraTreesClassifier`](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.ExtraTreesClassifier.html#sklearn.ensemble.ExtraTreesClassifier "sklearn.ensemble.ExtraTreesClassifier")([…]) | An extra-trees classifier. |
| [`ensemble.ExtraTreesRegressor`](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.ExtraTreesRegressor.html#sklearn.ensemble.ExtraTreesRegressor "sklearn.ensemble.ExtraTreesRegressor")([n_estimators, …]) | An extra-trees regressor. |
| [`ensemble.GradientBoostingClassifier`](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html#sklearn.ensemble.GradientBoostingClassifier "sklearn.ensemble.GradientBoostingClassifier")([loss, …]) | Gradient Boosting for classification. |
| [`ensemble.GradientBoostingRegressor`](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingRegressor.html#sklearn.ensemble.GradientBoostingRegressor "sklearn.ensemble.GradientBoostingRegressor")([loss, …]) | Gradient Boosting for regression. |
\ No newline at end of file
# 4. 检验
* [4.1 部分依赖图](docs/36.md)
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
# 1.3\. 内核岭回归
# 1.3. 内核岭回归
校验者:
        [@不吃曲奇的趣多多](https://github.com/apachecn/scikit-learn-doc-zh)
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
# 4.8\. 预测目标 (`y`) 的转换
# 5.9. 预测目标 (`y`) 的转换
校验者:
        [@FontTian](https://github.com/FontTian)
......@@ -6,7 +6,9 @@
翻译者:
        [@程威](https://github.com/apachecn/scikit-learn-doc-zh)
## 4.8.1\. 标签二值化
本章要介绍的这些变换器不是被用于特征的,而是只被用于变换监督学习的目标。 如果你希望变换预测目标以进行学习,但是在原始空间中评估模型,请参考[回归中的目标转换](docs/38?id=_512-回归中的目标转换)
## 5.9.1. 标签二值化
[`LabelBinarizer`](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelBinarizer.html#sklearn.preprocessing.LabelBinarizer "sklearn.preprocessing.LabelBinarizer") 是一个用来从多类别列表创建标签矩阵的工具类:
......@@ -35,7 +37,7 @@ array([1, 2, 3])
```
## 4.8.2\. 标签编码
## 5.9.2. 标签编码
[`LabelEncoder`](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html#sklearn.preprocessing.LabelEncoder "sklearn.preprocessing.LabelEncoder") 是一个可以用来将标签规范化的工具类,它可以将标签的编码值范围限定在[0,n_classes-1]. 这在编写高效的Cython程序时是非常有用的. [`LabelEncoder`](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html#sklearn.preprocessing.LabelEncoder "sklearn.preprocessing.LabelEncoder") 可以如下使用:
......@@ -66,4 +68,4 @@ array([2, 2, 1])
>>> list(le.inverse_transform([2, 2, 1]))
['tokyo', 'tokyo', 'paris']
```
\ No newline at end of file
```
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
......@@ -55,13 +55,13 @@ $ python
```py
>>> print(digits.data)
[[ 0\. 0\. 5\. ..., 0\. 0\. 0.]
[ 0\. 0\. 0\. ..., 10\. 0\. 0.]
[ 0\. 0\. 0\. ..., 16\. 9\. 0.]
[[ 0. 0. 5. ..., 0. 0. 0.]
[ 0. 0. 0. ..., 10. 0. 0.]
[ 0. 0. 0. ..., 16. 9. 0.]
...,
[ 0\. 0\. 1\. ..., 6\. 0\. 0.]
[ 0\. 0\. 2\. ..., 12\. 0\. 0.]
[ 0\. 0\. 10\. ..., 12\. 1\. 0.]]
[ 0. 0. 1. ..., 6. 0. 0.]
[ 0. 0. 2. ..., 12. 0. 0.]
[ 0. 0. 10. ..., 12. 1. 0.]]
```
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册