未验证 提交 d0e51a5c 编写于 作者: 片刻小哥哥's avatar 片刻小哥哥 提交者: GitHub

Merge pull request #409 from jiangzhonglian/master

删除历史版本,将最新版本 0.21.3 移动到master目录下

要显示的变更太多。

To preserve performance only 1000 of 1000+ files are displayed.
# scikit-learn (sklearn) 官方文档中文版
# <center>scikit-learn (sklearn) 官方文档中文版</center>
![](docs/img/scikit-learn-logo.png)
![](img/logo/scikit-learn-logo.png)
<center>scikit-learn 是基于 Python 语言的机器学习工具</center>
scikit-learn (sklearn) 是基于 Python 语言的机器学习工具
1. 简单高效的数据挖掘和数据分析工具
2. 可供大家在各种环境中重复使用
......@@ -12,12 +12,8 @@
<br/>
<table>
<tr align="center">
<td><a title="sklearn 0.21.3 中文翻译" href="https://sklearn.apachecn.org/docs/0.21.3" target="_blank"><font size="5">sklearn 0.21.3 中文翻译</font></a></td>
</tr>
<tr align="center">
<td><a title="sklearn 0.19.x 中文翻译" href="https://sklearn.apachecn.org/docs/0.19.x" target="_blank"><font size="5">sklearn 0.19.x 中文翻译</font></a></td>
</tr>
<tr align="center">
<td><a title="sklearn 0.21.3[master] 中文文档" href="https://sklearn.apachecn.org/docs/master" target="_blank"><font size="5">sklearn 0.21.3 中文文档</font></a></td>
<td><a title="sklearn 0.21.3[master] 中文案例" href="https://sklearn.apachecn.org/docs/examples" target="_blank"><font size="5">sklearn 0.21.3 中文翻译</font></a></td>
<td><a title="sklearn 英文官网" href="https://scikit-learn.org" target="_blank"><font size="5">sklearn 英文官网</font></a></td>
</tr>
</table>
......@@ -31,85 +27,91 @@
## 目录
* [安装 scikit-learn](docs/0.21.3/62.md)
* [安装 scikit-learn](docs/master/62.md)
* 用户指南
* [1. 监督学习](docs/0.21.3/1.md)
* [1.1. 广义线性模型](docs/0.21.3/2.md)
* [1.2. 线性和二次判别分析](docs/0.21.3/3.md)
* [1.3. 内核岭回归](docs/0.21.3/4.md)
* [1.4. 支持向量机](docs/0.21.3/5.md)
* [1.5. 随机梯度下降](docs/0.21.3/6.md)
* [1.6. 最近邻](docs/0.21.3/7.md)
* [1.7. 高斯过程](docs/0.21.3/8.md)
* [1.8. 交叉分解](docs/0.21.3/9.md)
* [1.9. 朴素贝叶斯](docs/0.21.3/10.md)
* [1.10. 决策树](docs/0.21.3/11.md)
* [1.11. 集成方法](docs/0.21.3/12.md)
* [1.12. 多类和多标签算法](docs/0.21.3/13.md)
* [1.13. 特征选择](docs/0.21.3/14.md)
* [1.14. 半监督学习](docs/0.21.3/15.md)
* [1.15. 等式回归](docs/0.21.3/16.md)
* [1.16. 概率校准](docs/0.21.3/17.md)
* [1.17. 神经网络模型(有监督)](docs/0.21.3/18.md)
* [2. 无监督学习](docs/0.21.3/19.md)
* [2.1. 高斯混合模型](docs/0.21.3/20.md)
* [2.2. 流形学习](docs/0.21.3/21.md)
* [2.3. 聚类](docs/0.21.3/22.md)
* [2.4. 双聚类](docs/0.21.3/23.md)
* [2.5. 分解成分中的信号(矩阵分解问题)](docs/0.21.3/24.md)
* [2.6. 协方差估计](docs/0.21.3/25.md)
* [2.7. 新奇和异常值检测](docs/0.21.3/26.md)
* [2.8. 密度估计](docs/0.21.3/27.md)
* [2.9. 神经网络模型(无监督)](docs/0.21.3/28.md)
* [3. 模型选择和评估](docs/0.21.3/29.md)
* [3.1. 交叉验证:评估估算器的表现](docs/0.21.3/30.md)
* [3.2. 调整估计器的超参数](docs/0.21.3/31.md)
* [3.3. 模型评估: 量化预测的质量](docs/0.21.3/32.md)
* [3.4. 模型持久化](docs/0.21.3/33.md)
* [3.5. 验证曲线: 绘制分数以评估模型](docs/0.21.3/34.md)
* [4. 检验](docs/0.21.3/35.md)
* [4.1. 部分依赖图](docs/0.21.3/36.md)
* [5. 数据集转换](docs/0.21.3/37.md)
* [5.1. Pipeline(管道)和 FeatureUnion(特征联合): 合并的评估器](docs/0.21.3/38.md)
* [5.2. 特征提取](docs/0.21.3/39.md)
* [5.3 预处理数据](docs/0.21.3/40.md)
* [5.4 缺失值插补](docs/0.21.3/41.md)
* [5.5. 无监督降维](docs/0.21.3/42.md)
* [5.6. 随机投影](docs/0.21.3/43.md)
* [5.7. 内核近似](docs/0.21.3/44.md)
* [5.8. 成对的矩阵, 类别和核函数](docs/0.21.3/45.md)
* [5.9. 预测目标 (`y`) 的转换](docs/0.21.3/46.md)
* [6. 数据集加载工具](docs/0.21.3/47.md)
* [6.1. 通用数据集 API](docs/0.21.3/47.md)
* [6.2. 玩具数据集](docs/0.21.3/47.md)
* [6.3 真实世界中的数据集](docs/0.21.3/47.md)
* [6.4. 样本生成器](docs/0.21.3/47.md)
* [6.5. 加载其他数据集](docs/0.21.3/47.md)
* [7. 使用scikit-learn计算](docs/0.21.3/48.md)
* [7.1. 大规模计算的策略: 更大量的数据](docs/0.21.3/48.md)
* [7.2. 计算性能](docs/0.21.3/48.md)
* [7.3. 并行性、资源管理和配置](docs/0.21.3/48.md)
* [教程](docs/0.21.3/50.md)
* [使用 scikit-learn 介绍机器学习](docs/0.21.3/51.md)
* [关于科学数据处理的统计学习教程](docs/0.21.3/52.md)
* [机器学习: scikit-learn 中的设置以及预估对象](docs/0.21.3/53.md)
* [监督学习:从高维观察预测输出变量](docs/0.21.3/54.md)
* [模型选择:选择估计量及其参数](docs/0.21.3/55.md)
* [无监督学习: 寻求数据表示](docs/0.21.3/56.md)
* [把它们放在一起](docs/0.21.3/57.md)
* [寻求帮助](docs/0.21.3/58.md)
* [处理文本数据](docs/0.21.3/59.md)
* [选择正确的评估器(estimator.md)](docs/0.21.3/60.md)
* [外部资源,视频和谈话](docs/0.21.3/61.md)
* [1. 监督学习](docs/master/1.md)
* [1.1. 广义线性模型](docs/master/2.md)
* [1.2. 线性和二次判别分析](docs/master/3.md)
* [1.3. 内核岭回归](docs/master/4.md)
* [1.4. 支持向量机](docs/master/5.md)
* [1.5. 随机梯度下降](docs/master/6.md)
* [1.6. 最近邻](docs/master/7.md)
* [1.7. 高斯过程](docs/master/8.md)
* [1.8. 交叉分解](docs/master/9.md)
* [1.9. 朴素贝叶斯](docs/master/10.md)
* [1.10. 决策树](docs/master/11.md)
* [1.11. 集成方法](docs/master/12.md)
* [1.12. 多类和多标签算法](docs/master/13.md)
* [1.13. 特征选择](docs/master/14.md)
* [1.14. 半监督学习](docs/master/15.md)
* [1.15. 等式回归](docs/master/16.md)
* [1.16. 概率校准](docs/master/17.md)
* [1.17. 神经网络模型(有监督)](docs/master/18.md)
* [2. 无监督学习](docs/master/19.md)
* [2.1. 高斯混合模型](docs/master/20.md)
* [2.2. 流形学习](docs/master/21.md)
* [2.3. 聚类](docs/master/22.md)
* [2.4. 双聚类](docs/master/23.md)
* [2.5. 分解成分中的信号(矩阵分解问题)](docs/master/24.md)
* [2.6. 协方差估计](docs/master/25.md)
* [2.7. 新奇和异常值检测](docs/master/26.md)
* [2.8. 密度估计](docs/master/27.md)
* [2.9. 神经网络模型(无监督)](docs/master/28.md)
* [3. 模型选择和评估](docs/master/29.md)
* [3.1. 交叉验证:评估估算器的表现](docs/master/30.md)
* [3.2. 调整估计器的超参数](docs/master/31.md)
* [3.3. 模型评估: 量化预测的质量](docs/master/32.md)
* [3.4. 模型持久化](docs/master/33.md)
* [3.5. 验证曲线: 绘制分数以评估模型](docs/master/34.md)
* [4. 检验](docs/master/35.md)
* [4.1. 部分依赖图](docs/master/36.md)
* [5. 数据集转换](docs/master/37.md)
* [5.1. Pipeline(管道)和 FeatureUnion(特征联合): 合并的评估器](docs/master/38.md)
* [5.2. 特征提取](docs/master/39.md)
* [5.3 预处理数据](docs/master/40.md)
* [5.4 缺失值插补](docs/master/41.md)
* [5.5. 无监督降维](docs/master/42.md)
* [5.6. 随机投影](docs/master/43.md)
* [5.7. 内核近似](docs/master/44.md)
* [5.8. 成对的矩阵, 类别和核函数](docs/master/45.md)
* [5.9. 预测目标 (`y`) 的转换](docs/master/46.md)
* [6. 数据集加载工具](docs/master/47.md)
* [6.1. 通用数据集 API](docs/master/47.md)
* [6.2. 玩具数据集](docs/master/47.md)
* [6.3 真实世界中的数据集](docs/master/47.md)
* [6.4. 样本生成器](docs/master/47.md)
* [6.5. 加载其他数据集](docs/master/47.md)
* [7. 使用scikit-learn计算](docs/master/48.md)
* [7.1. 大规模计算的策略: 更大量的数据](docs/master/48.md)
* [7.2. 计算性能](docs/master/48.md)
* [7.3. 并行性、资源管理和配置](docs/master/48.md)
* [教程](docs/master/50.md)
* [使用 scikit-learn 介绍机器学习](docs/master/51.md)
* [关于科学数据处理的统计学习教程](docs/master/52.md)
* [机器学习: scikit-learn 中的设置以及预估对象](docs/master/53.md)
* [监督学习:从高维观察预测输出变量](docs/master/54.md)
* [模型选择:选择估计量及其参数](docs/master/55.md)
* [无监督学习: 寻求数据表示](docs/master/56.md)
* [把它们放在一起](docs/master/57.md)
* [寻求帮助](docs/master/58.md)
* [处理文本数据](docs/master/59.md)
* [选择正确的评估器(estimator.md)](docs/master/60.md)
* [外部资源,视频和谈话](docs/master/61.md)
* [API 参考](https://scikit-learn.org/stable/modules/classes.html)
* [常见问题](docs/0.21.3/63.md)
* [时光轴](docs/0.21.3/64.md)
* [常见问题](docs/master/63.md)
* [时光轴](docs/master/64.md)
## 历史版本
* [scikit-learn (sklearn) 0.19 官方文档中文版](https://github.com/apachecn/scikit-learn-doc-zh/tree/0.19.x)
* [scikit-learn (sklearn) 0.19 官方文档中文版](https://github.com/apachecn/sklearn-doc-zh/tree/master/docs/0.19.x.zip)
* [scikit-learn (sklearn) 0.18 官方文档中文版](http://cwiki.apachecn.org/pages/viewpage.action?pageId=10030181)
如何编译使用历史版本:
* 解压 `0.19.x.zip` 文件夹
*`master/img` 的图片资源, 复制到 `0.19.x` 里面去
* gitbook 正常编译过程,可以使用 `sh run_website.sh`
## 贡献指南
项目当前处于校对阶段,请查看[贡献指南](CONTRIBUTING.md),并在[整体进度](https://github.com/apachecn/sklearn-doc-zh/issues/352)中领取任务。
......@@ -146,18 +148,30 @@
[【0.19.X】贡献者名单](https://github.com/apachecn/sklearn-doc-zh/issues/354)
## **项目协议**
以各项目协议为准。
ApacheCN 账号下没有协议的项目,一律视为 [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh)
## 建议反馈
* 在我们的 [apachecn/pytorch-doc-zh](https://github.com/apachecn/sklearn-doc-zh) github 上提 issue.
* 发邮件到 Email: `apachecn@163.com`.
* 在我们的 [QQ群-搜索: 交流方式](https://github.com/apachecn/home) 中联系群主/管理员即可.
## **项目协议**
* **最近有很多人联系我们,关于内容授权问题!**
* 开源是指知识应该重在传播和迭代(而不是禁止别人转载)
* 不然你TM在GitHub开源,然后又说不让转载,你TM有病吧!
* 禁止商业化,符合协议规范,备注地址来源,**重点: 不需要**发邮件给我们申请
* ApacheCN 账号下没有协议的项目,一律视为 [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh)
温馨提示:
* 对于个人想自己copy一份再更新的人
* 我也是有这样的经历,但是这种激情维持不了几个月,就泄气了!
* 不仅浪费了你的心血,还浪费了更多人看到你的翻译成果!很可惜!你觉得呢?
* 个人的建议是: fork -> pull requests 到 `https://github.com/apachecn/sklearn-doc-zh`
* 那为什么要选择 `ApacheCN` 呢?
* 因为我们做翻译这事情是觉得开心和装逼,比较纯粹!
* 你如果喜欢,你可以来参与/甚至负责这个项目,没人任何学历和背景的限制
## 赞助我们
<img src="http://data.apachecn.org/img/about/donate.jpg" alt="微信&支付宝" />
* [安装 scikit-learn](docs/0.21.3/62.md)
* [安装 scikit-learn](docs/master/62.md)
* 用户指南
* [1. 监督学习](docs/0.21.3/1.md)
* [1.1. 广义线性模型](docs/0.21.3/2.md)
* [1.2. 线性和二次判别分析](docs/0.21.3/3.md)
* [1.3. 内核岭回归](docs/0.21.3/4.md)
* [1.4. 支持向量机](docs/0.21.3/5.md)
* [1.5. 随机梯度下降](docs/0.21.3/6.md)
* [1.6. 最近邻](docs/0.21.3/7.md)
* [1.7. 高斯过程](docs/0.21.3/8.md)
* [1.8. 交叉分解](docs/0.21.3/9.md)
* [1.9. 朴素贝叶斯](docs/0.21.3/10.md)
* [1.10. 决策树](docs/0.21.3/11.md)
* [1.11. 集成方法](docs/0.21.3/12.md)
* [1.12. 多类和多标签算法](docs/0.21.3/13.md)
* [1.13. 特征选择](docs/0.21.3/14.md)
* [1.14. 半监督学习](docs/0.21.3/15.md)
* [1.15. 等式回归](docs/0.21.3/16.md)
* [1.16. 概率校准](docs/0.21.3/17.md)
* [1.17. 神经网络模型(有监督)](docs/0.21.3/18.md)
* [2. 无监督学习](docs/0.21.3/19.md)
* [2.1. 高斯混合模型](docs/0.21.3/20.md)
* [2.2. 流形学习](docs/0.21.3/21.md)
* [2.3. 聚类](docs/0.21.3/22.md)
* [2.4. 双聚类](docs/0.21.3/23.md)
* [2.5. 分解成分中的信号(矩阵分解问题)](docs/0.21.3/24.md)
* [2.6. 协方差估计](docs/0.21.3/25.md)
* [2.7. 新奇和异常值检测](docs/0.21.3/26.md)
* [2.8. 密度估计](docs/0.21.3/27.md)
* [2.9. 神经网络模型(无监督)](docs/0.21.3/28.md)
* [3. 模型选择和评估](docs/0.21.3/29.md)
* [3.1. 交叉验证:评估估算器的表现](docs/0.21.3/30.md)
* [3.2. 调整估计器的超参数](docs/0.21.3/31.md)
* [3.3. 模型评估: 量化预测的质量](docs/0.21.3/32.md)
* [3.4. 模型持久化](docs/0.21.3/33.md)
* [3.5. 验证曲线: 绘制分数以评估模型](docs/0.21.3/34.md)
* [4. 检验](docs/0.21.3/35.md)
* [4.1. 部分依赖图](docs/0.21.3/36.md)
* [5. 数据集转换](docs/0.21.3/37.md)
* [5.1. Pipeline(管道)和 FeatureUnion(特征联合): 合并的评估器](docs/0.21.3/38.md)
* [5.2. 特征提取](docs/0.21.3/39.md)
* [5.3 预处理数据](docs/0.21.3/40.md)
* [5.4 缺失值插补](docs/0.21.3/41.md)
* [5.5. 无监督降维](docs/0.21.3/42.md)
* [5.6. 随机投影](docs/0.21.3/43.md)
* [5.7. 内核近似](docs/0.21.3/44.md)
* [5.8. 成对的矩阵, 类别和核函数](docs/0.21.3/45.md)
* [5.9. 预测目标 (`y`) 的转换](docs/0.21.3/46.md)
* [6. 数据集加载工具](docs/0.21.3/47.md)
* [6.1. 通用数据集 API](docs/0.21.3/47.md)
* [6.2. 玩具数据集](docs/0.21.3/47.md)
* [6.3 真实世界中的数据集](docs/0.21.3/47.md)
* [6.4. 样本生成器](docs/0.21.3/47.md)
* [6.5. 加载其他数据集](docs/0.21.3/47.md)
* [7. 使用scikit-learn计算](docs/0.21.3/48.md)
* [7.1. 大规模计算的策略: 更大量的数据](docs/0.21.3/48.md)
* [7.2. 计算性能](docs/0.21.3/48.md)
* [7.3. 并行性、资源管理和配置](docs/0.21.3/48.md)
* [教程](docs/0.21.3/50.md)
* [使用 scikit-learn 介绍机器学习](docs/0.21.3/51.md)
* [关于科学数据处理的统计学习教程](docs/0.21.3/52.md)
* [机器学习: scikit-learn 中的设置以及预估对象](docs/0.21.3/53.md)
* [监督学习:从高维观察预测输出变量](docs/0.21.3/54.md)
* [模型选择:选择估计量及其参数](docs/0.21.3/55.md)
* [无监督学习: 寻求数据表示](docs/0.21.3/56.md)
* [把它们放在一起](docs/0.21.3/57.md)
* [寻求帮助](docs/0.21.3/58.md)
* [处理文本数据](docs/0.21.3/59.md)
* [选择正确的评估器(estimator.md)](docs/0.21.3/60.md)
* [外部资源,视频和谈话](docs/0.21.3/61.md)
* [1. 监督学习](docs/master/1.md)
* [1.1. 广义线性模型](docs/master/2.md)
* [1.2. 线性和二次判别分析](docs/master/3.md)
* [1.3. 内核岭回归](docs/master/4.md)
* [1.4. 支持向量机](docs/master/5.md)
* [1.5. 随机梯度下降](docs/master/6.md)
* [1.6. 最近邻](docs/master/7.md)
* [1.7. 高斯过程](docs/master/8.md)
* [1.8. 交叉分解](docs/master/9.md)
* [1.9. 朴素贝叶斯](docs/master/10.md)
* [1.10. 决策树](docs/master/11.md)
* [1.11. 集成方法](docs/master/12.md)
* [1.12. 多类和多标签算法](docs/master/13.md)
* [1.13. 特征选择](docs/master/14.md)
* [1.14. 半监督学习](docs/master/15.md)
* [1.15. 等式回归](docs/master/16.md)
* [1.16. 概率校准](docs/master/17.md)
* [1.17. 神经网络模型(有监督)](docs/master/18.md)
* [2. 无监督学习](docs/master/19.md)
* [2.1. 高斯混合模型](docs/master/20.md)
* [2.2. 流形学习](docs/master/21.md)
* [2.3. 聚类](docs/master/22.md)
* [2.4. 双聚类](docs/master/23.md)
* [2.5. 分解成分中的信号(矩阵分解问题)](docs/master/24.md)
* [2.6. 协方差估计](docs/master/25.md)
* [2.7. 新奇和异常值检测](docs/master/26.md)
* [2.8. 密度估计](docs/master/27.md)
* [2.9. 神经网络模型(无监督)](docs/master/28.md)
* [3. 模型选择和评估](docs/master/29.md)
* [3.1. 交叉验证:评估估算器的表现](docs/master/30.md)
* [3.2. 调整估计器的超参数](docs/master/31.md)
* [3.3. 模型评估: 量化预测的质量](docs/master/32.md)
* [3.4. 模型持久化](docs/master/33.md)
* [3.5. 验证曲线: 绘制分数以评估模型](docs/master/34.md)
* [4. 检验](docs/master/35.md)
* [4.1. 部分依赖图](docs/master/36.md)
* [5. 数据集转换](docs/master/37.md)
* [5.1. Pipeline(管道)和 FeatureUnion(特征联合): 合并的评估器](docs/master/38.md)
* [5.2. 特征提取](docs/master/39.md)
* [5.3 预处理数据](docs/master/40.md)
* [5.4 缺失值插补](docs/master/41.md)
* [5.5. 无监督降维](docs/master/42.md)
* [5.6. 随机投影](docs/master/43.md)
* [5.7. 内核近似](docs/master/44.md)
* [5.8. 成对的矩阵, 类别和核函数](docs/master/45.md)
* [5.9. 预测目标 (`y`) 的转换](docs/master/46.md)
* [6. 数据集加载工具](docs/master/47.md)
* [6.1. 通用数据集 API](docs/master/47.md)
* [6.2. 玩具数据集](docs/master/47.md)
* [6.3 真实世界中的数据集](docs/master/47.md)
* [6.4. 样本生成器](docs/master/47.md)
* [6.5. 加载其他数据集](docs/master/47.md)
* [7. 使用scikit-learn计算](docs/master/48.md)
* [7.1. 大规模计算的策略: 更大量的数据](docs/master/48.md)
* [7.2. 计算性能](docs/master/48.md)
* [7.3. 并行性、资源管理和配置](docs/master/48.md)
* [教程](docs/master/50.md)
* [使用 scikit-learn 介绍机器学习](docs/master/51.md)
* [关于科学数据处理的统计学习教程](docs/master/52.md)
* [机器学习: scikit-learn 中的设置以及预估对象](docs/master/53.md)
* [监督学习:从高维观察预测输出变量](docs/master/54.md)
* [模型选择:选择估计量及其参数](docs/master/55.md)
* [无监督学习: 寻求数据表示](docs/master/56.md)
* [把它们放在一起](docs/master/57.md)
* [寻求帮助](docs/master/58.md)
* [处理文本数据](docs/master/59.md)
* [选择正确的评估器(estimator.md)](docs/master/60.md)
* [外部资源,视频和谈话](docs/master/61.md)
* [API 参考](https://scikit-learn.org/stable/modules/classes.html)
* [常见问题](docs/0.21.3/63.md)
* [时光轴](docs/0.21.3/64.md)
* [常见问题](docs/master/63.md)
* [时光轴](docs/master/64.md)
google.com, pub-3565452474788507, DIRECT, f08c47fec0942fa0
\ No newline at end of file
文件已添加
# 1\. 监督学习
* [1.1\. 广义线性模型](/docs/2?id=_11-广义线性模型)
* [1.1.1\. 普通最小二乘法](/docs/2?id=_111-普通最小二乘法)
* [1.1.1.1\. 普通最小二乘法复杂度](/docs/2?id=_1111-普通最小二乘法复杂度)
* [1.1.2\. 岭回归](/docs/2?id=_112-岭回归)
* [1.1.2.1\. 岭回归的复杂度](/docs/2?id=_1121-岭回归的复杂度)
* [1.1.2.2\. 设置正则化参数:广义交叉验证](/docs/2?id=_1122-设置正则化参数:广义交叉验证)
* [1.1.3\. Lasso](/docs/2?id=_113-lasso)
* [1.1.3.1\. 设置正则化参数](/docs/2?id=_1131-设置正则化参数)
* [1.1.3.1.1\. 使用交叉验证](/docs/2?id=_11311-使用交叉验证)
* [1.1.3.1.2\. 基于信息标准的模型选择](/docs/2?id=_11312-基于信息标准的模型选择)
* [1.1.3.1.3\. 与 SVM 的正则化参数的比较](/docs/2?id=_11313-与-svm-的正则化参数的比较)
* [1.1.4\. 多任务 Lasso](/docs/2?id=_114-多任务-lasso)
* [1.1.5\. 弹性网络](/docs/2?id=_115-弹性网络)
* [1.1.6\. 多任务弹性网络](/docs/2?id=_116-多任务弹性网络)
* [1.1.7\. 最小角回归](/docs/2?id=_117-最小角回归)
* [1.1.8\. LARS Lasso](/docs/2?id=_118-lars-lasso)
* [1.1.8.1\. 数学表达式](/docs/2?id=_1181-数学表达式)
* [1.1.9\. 正交匹配追踪法(OMP)](/docs/2?id=_119-正交匹配追踪法(omp))
* [1.1.10\. 贝叶斯回归](/docs/2?id=_1110-贝叶斯回归)
* [1.1.10.1\. 贝叶斯岭回归](/docs/2?id=_11101-贝叶斯岭回归)
* [1.1.10.2\. 主动相关决策理论 - ARD](/docs/2?id=_11102-主动相关决策理论---ard)
* [1.1.11\. logistic 回归](/docs/2?id=_1111-logistic-回归)
* [1.1.12\. 随机梯度下降, SGD](/docs/2?id=_1112-随机梯度下降,-sgd)
* [1.1.13\. Perceptron(感知器)](/docs/2?id=_1113-perceptron(感知器))
* [1.1.14\. Passive Aggressive Algorithms(被动攻击算法)](/docs/2?id=_1114-passive-aggressive-algorithms(被动攻击算法))
* [1.1.15\. 稳健回归(Robustness regression): 处理离群点(outliers)和模型错误](/docs/2?id=_1115-稳健回归(robustness-regression):-处理离群点(outliers)和模型错误)
* [1.1.15.1\. 各种使用场景与相关概念](/docs/2?id=_11151-各种使用场景与相关概念)
* [1.1.15.2\. RANSAC: 随机抽样一致性算法(RANdom SAmple Consensus)](/docs/2?id=_11152-ransac:-随机抽样一致性算法(random-sample-consensus))
* [1.1.15.2.1\. 算法细节](/docs/2?id=_111521-算法细节)
* [1.1.15.3\. Theil-Sen 预估器: 广义中值估计器(generalized-median-based estimator)](/docs/2?id=_11153-theil-sen-预估器:-广义中值估计器(generalized-median-based-estimator))
* [1.1.15.3.1\. 算法理论细节](/docs/2?id=_111531-算法理论细节)
* [1.1.15.4\. Huber 回归](/docs/2?id=_11154-huber-回归)
* [1.1.15.5\. 注意](/docs/2?id=_11155-注意)
* [1.1.16\. 多项式回归:用基函数展开线性模型](/docs/2?id=_1116-多项式回归:用基函数展开线性模型)
* [1.2\. 线性和二次判别分析](/docs/3?id=_12-线性和二次判别分析)
* [1.2.1\. 使用线性判别分析来降维](/docs/3?id=_121-使用线性判别分析来降维)
* [1.2.2\. LDA 和 QDA 分类器的数学公式](/docs/3?id=_122-lda-和-qda-分类器的数学公式)
* [1.2.3\. LDA 的降维数学公式](/docs/3?id=_123-lda-的降维数学公式)
* [1.2.4\. Shrinkage(收缩)](/docs/3?id=_124-shrinkage(收缩))
* [1.2.5\. 预估算法](/docs/3?id=_125-预估算法)
* [1.3\. 内核岭回归](/docs/4?id=_13-内核岭回归)
* [1.4\. 支持向量机](/docs/5?id=_14-支持向量机)
* [1.4.1\. 分类](/docs/5?id=_141-分类)
* [1.4.1.1\. 多元分类](/docs/5?id=_1411-多元分类)
* [1.4.1.2\. 得分和概率](/docs/5?id=_1412-得分和概率)
* [1.4.1.3\. 非均衡问题](/docs/5?id=_1413-非均衡问题)
* [1.4.2\. 回归](/docs/5?id=_142-回归)
* [1.4.3\. 密度估计, 异常(novelty)检测](/docs/5?id=_143-密度估计,-异常(novelty)检测)
* [1.4.4\. 复杂度](/docs/5?id=_144-复杂度)
* [1.4.5\. 使用诀窍](/docs/5?id=_145-使用诀窍)
* [1.4.6\. 核函数](/docs/5?id=_146-核函数)
* [1.4.6.1\. 自定义核](/docs/5?id=_1461-自定义核)
* [1.4.6.1.1\. 使用 python 函数作为内核](/docs/5?id=_14611-使用-python-函数作为内核)
* [1.4.6.1.2\. 使用 Gram 矩阵](/docs/5?id=_14612-使用-gram-矩阵)
* [1.4.6.1.3\. RBF 内核参数](/docs/5?id=_14613-rbf-内核参数)
* [1.4.7\. 数学公式](/docs/5?id=_147-数学公式)
* [1.4.7.1\. SVC](/docs/5?id=_1471-svc)
* [1.4.7.2\. NuSVC](/docs/5?id=_1472-nusvc)
* [1.4.7.3\. SVR](/docs/5?id=_1473-svr)
* [1.4.8\. 实现细节](/docs/5?id=_148-实现细节)
* [1.5\. 随机梯度下降](/docs/6?id=_15-随机梯度下降)
* [1.5.1\. 分类](/docs/6?id=_151-分类)
* [1.5.2\. 回归](/docs/6?id=_152-回归)
* [1.5.3\. 稀疏数据的随机梯度下降](/docs/6?id=_153-稀疏数据的随机梯度下降)
* [1.5.4\. 复杂度](/docs/6?id=_154-复杂度)
* [1.5.5\. 实用小贴士](/docs/6?id=_155-实用小贴士)
* [1.5.6\. 数学描述](/docs/6?id=_156-数学描述)
* [1.5.6.1\. SGD](/docs/6?id=_1561-sgd)
* [1.5.7\. 实现细节](/docs/6?id=_157-实现细节)
* [1.6\. 最近邻](/docs/7?id=_16-最近邻)
* [1.6.1\. 无监督最近邻](/docs/7?id=_161-无监督最近邻)
* [1.6.1.1\. 找到最近邻](/docs/7?id=_1611-找到最近邻)
* [1.6.1.2\. KDTree 和 BallTree 类](/docs/7?id=_1612-kdtree-和-balltree-类)
* [1.6.2\. 最近邻分类](/docs/7?id=_162-最近邻分类)
* [1.6.3\. 最近邻回归](/docs/7?id=_163-最近邻回归)
* [1.6.4\. 最近邻算法](/docs/7?id=_164-最近邻算法)
* [1.6.4.1\. 暴力计算](/docs/7?id=_1641-暴力计算)
* [1.6.4.2\. K-D 树](/docs/7?id=_1642-k-d-树)
* [1.6.4.3\. Ball 树](/docs/7?id=_1643-ball-树)
* [1.6.4.4\. 最近邻算法的选择](/docs/7?id=_1644-最近邻算法的选择)
* [1.6.4.5\. `leaf_size` 的影响](/docs/7?id=_1645-`leaf_size`-的影响)
* [1.6.5\. 最近质心分类](/docs/7?id=_165-最近质心分类)
* [1.6.5.1\. 最近缩小质心](/docs/7?id=_1651-最近缩小质心)
* [1.7\. 高斯过程](/docs/8?id=_17-高斯过程)
* [1.7.1\. 高斯过程回归(GPR)](/docs/8?id=_171-高斯过程回归(gpr))
* [1.7.2\. GPR 示例](/docs/8?id=_172-gpr-示例)
* [1.7.2.1\. 具有噪声级的 GPR 估计](/docs/8?id=_1721-具有噪声级的-gpr-估计)
* [1.7.2.2\. GPR 和内核岭回归(Kernel Ridge Regression)的比较](/docs/8?id=_1722-gpr-和内核岭回归(kernel-ridge-regression的比较)
* [1.7.2.3\. Mauna Loa CO2 数据中的 GRR](/docs/8?id=_1723-mauna-loa-co2-数据中的-grr)
* [1.7.3\. 高斯过程分类(GPC)](/docs/8?id=_173-高斯过程分类(gpc))
* [1.7.4\. GPC 示例](/docs/8?id=_174-gpc-示例)
* [1.7.4.1\. GPC 概率预测](/docs/8?id=_1741-gpc-概率预测)
* [1.7.4.2\. GPC 在 XOR 数据集上的举例说明](/docs/8?id=_1742-gpc-在-xor-数据集上的举例说明)
* [1.7.4.3\. iris 数据集上的高斯过程分类(GPC)](/docs/8?id=_1743-iris-数据集上的高斯过程分类(gpc))
* [1.7.5\. 高斯过程内核](/docs/8?id=_175-高斯过程内核)
* [1.7.5.1\. 高斯过程内核 API](/docs/8?id=_1751-高斯过程内核-api)
* [1.7.5.2\. 基础内核](/docs/8?id=_1752-基础内核)
* [1.7.5.3\. 内核操作](/docs/8?id=_1753-内核操作)
* [1.7.5.4\. 径向基函数内核](/docs/8?id=_1754-径向基函数内核)
* [1.7.5.5\. Matérn 内核](/docs/8?id=_1755-matérn-内核)
* [1.7.5.6\. 有理二次内核](/docs/8?id=_1756-有理二次内核)
* [1.7.5.7\. 正弦平方内核](/docs/8?id=_1757-正弦平方内核)
* [1.7.5.8\. 点乘内核](/docs/8?id=_1758-点乘内核)
* [1.7.5.9\. 参考文献](/docs/8?id=_1759-参考文献)
* [1.7.6\. 传统高斯过程](/docs/8?id=_176-传统高斯过程)
* [1.7.6.1\. 回归实例介绍](/docs/8?id=_1761-回归实例介绍)
* [1.7.6.2\. 噪声数据拟合](/docs/8?id=_1762-噪声数据拟合)
* [1.7.6.3\. 数学形式](/docs/8?id=_1763-数学形式)
* [1.7.6.3.1\. 初始假设](/docs/8?id=_17631-初始假设)
* [1.7.6.3.2\. 最佳线性无偏预测(BLUP)](/docs/8?id=_17632-最佳线性无偏预测(blup))
* [1.7.6.3.3\. 经验最佳线性无偏估计(EBLUP)](/docs/8?id=_17633-经验最佳线性无偏估计(eblup))
* [1.7.6.4\. 关联模型](/docs/8?id=_1764-关联模型)
* [1.7.6.5\. 回归模型](/docs/8?id=_1765-回归模型)
* [1.7.6.6\. 实现细节](/docs/8?id=_1766-实现细节)
* [1.8\. 交叉分解](/docs/9?id=_18-交叉分解)
* [1.9\. 朴素贝叶斯](/docs/10?id=_19-朴素贝叶斯)
* [1.9.1\. 高斯朴素贝叶斯](/docs/10?id=_191-高斯朴素贝叶斯)
* [1.9.2\. 多项分布朴素贝叶斯](/docs/10?id=_192-多项分布朴素贝叶斯)
* [1.9.3\. 伯努利朴素贝叶斯](/docs/10?id=_193-伯努利朴素贝叶斯)
* [1.9.4\. 堆外朴素贝叶斯模型拟合](/docs/10?id=_194-堆外朴素贝叶斯模型拟合)
* [1.10\. 决策树](/docs/11?id=_110-决策树)
* [1.10.1\. 分类](/docs/11?id=_1101-分类)
* [1.10.2\. 回归](/docs/11?id=_1102-回归)
* [1.10.3\. 多值输出问题](/docs/11?id=_1103-多值输出问题)
* [1.10.4\. 复杂度分析](/docs/11?id=_1104-复杂度分析)
* [1.10.5\. 实际使用技巧](/docs/11?id=_1105-实际使用技巧)
* [1.10.6\. 决策树算法: ID3, C4.5, C5.0 和 CART](/docs/11?id=_1106-决策树算法:-id3,-c45,-c50-和-cart)
* [1.10.7\. 数学表达](/docs/11?id=_1107-数学表达)
* [1.10.7.1\. 分类标准](/docs/11?id=_11071-分类标准)
* [1.10.7.2\. 回归标准](/docs/11?id=_11072-回归标准)
* [1.11\. 集成方法](/docs/12?id=_111-集成方法)
* [1.11.1\. Bagging meta-estimator(Bagging 元估计器)](/docs/12?id=_1111-bagging-meta-estimator(bagging-元估计器))
* [1.11.2\. 由随机树组成的森林](/docs/12?id=_1112-由随机树组成的森林)
* [1.11.2.1\. 随机森林](/docs/12?id=_11121-随机森林)
* [1.11.2.2\. 极限随机树](/docs/12?id=_11122-极限随机树)
* [1.11.2.3\. 参数](/docs/12?id=_11123-参数)
* [1.11.2.4\. 并行化](/docs/12?id=_11124-并行化)
* [1.11.2.5\. 特征重要性评估](/docs/12?id=_11125-特征重要性评估)
* [1.11.2.6\. 完全随机树嵌入](/docs/12?id=_11126-完全随机树嵌入)
* [1.11.3\. AdaBoost](/docs/12?id=_1113-adaboost)
* [1.11.3.1\. 使用方法](/docs/12?id=_11131-使用方法)
* [1.11.4\. Gradient Tree Boosting(梯度树提升)](/docs/12?id=_1114-gradient-tree-boosting(梯度树提升))
* [1.11.4.1\. 分类](/docs/12?id=_11141-分类)
* [1.11.4.2\. 回归](/docs/12?id=_11142-回归)
* [1.11.4.3\. 训练额外的弱学习器](/docs/12?id=_11143-训练额外的弱学习器)
* [1.11.4.4\. 控制树的大小](/docs/12?id=_11144-控制树的大小)
* [1.11.4.5\. Mathematical formulation(数学公式)](/docs/12?id=_11145-mathematical-formulation(数学公式))
* [1.11.4.5.1\. Loss Functions(损失函数)](/docs/12?id=_111451-loss-functions(损失函数))
* [1.11.4.6\. Regularization(正则化)](/docs/12?id=_11146-regularization(正则化))
* [1.11.4.6.1\. 收缩率 (Shrinkage)](/docs/12?id=_111461-收缩率-(shrinkage)
* [1.11.4.6.2\. 子采样 (Subsampling)](/docs/12?id=_111462-子采样-(subsampling)
* [1.11.4.7\. Interpretation(解释性)](/docs/12?id=_11147-interpretation(解释性))
* [1.11.4.7.1\. Feature importance(特征重要性)](/docs/12?id=_111471-feature-importance(特征重要性))
* [1.11.4.7.2\. Partial dependence(部分依赖)](/docs/12?id=_111472-partial-dependence(部分依赖))
* [1.11.5\. Voting Classifier(投票分类器)](/docs/12?id=_1115-voting-classifier(投票分类器))
* [1.11.5.1\. 多数类标签 (又称为 多数/硬投票)](/docs/12?id=_11151-多数类标签-(又称为-多数/硬投票)
* [1.11.5.1.1\. 用法](/docs/12?id=_111511-用法)
* [1.11.5.2\. 加权平均概率 (软投票)](/docs/12?id=_11152-加权平均概率-(软投票))
* [1.11.5.3\. 投票分类器(VotingClassifier)在网格搜索(GridSearch)应用](/docs/12?id=_11153-投票分类器(votingclassifier)在网格搜索(gridsearch)应用)
* [1.11.5.3.1\. 用法](/docs/12?id=_111531-用法)
* [1.12\. 多类和多标签算法](/docs/13?id=_112-多类和多标签算法)
* [1.12.1\. 多标签分类格式](/docs/13?id=_1121-多标签分类格式)
* [1.12.2\. 1对其余](/docs/13?id=_1122-1对其余)
* [1.12.2.1\. 多类学习](/docs/13?id=_11221-多类学习)
* [1.12.2.2\. 多标签学习](/docs/13?id=_11222-多标签学习)
* [1.12.3\. 1对1](/docs/13?id=_1123-1对1)
* [1.12.3.1\. 多类别学习](/docs/13?id=_11231-多类别学习)
* [1.12.4\. 误差校正输出代码](/docs/13?id=_1124-误差校正输出代码)
* [1.12.4.1\. 多类别学习](/docs/13?id=_11241-多类别学习)
* [1.12.5\. 多输出回归](/docs/13?id=_1125-多输出回归)
* [1.12.6\. 多输出分类](/docs/13?id=_1126-多输出分类)
* [1.12.7\. 链式分类器](/docs/13?id=_1127-链式分类器)
* [1.13\. 特征选择](/docs/14?id=_113-特征选择)
* [1.13.1\. 移除低方差特征](/docs/14?id=_1131-移除低方差特征)
* [1.13.2\. 单变量特征选择](/docs/14?id=_1132-单变量特征选择)
* [1.13.3\. 递归式特征消除](/docs/14?id=_1133-递归式特征消除)
* [1.13.4\. 使用 SelectFromModel 选取特征](/docs/14?id=_1134-使用-selectfrommodel-选取特征)
* [1.13.4.1\. 基于 L1 的特征选取](/docs/14?id=_11341-基于-l1-的特征选取)
* [1.13.4.2\. 基于 Tree(树)的特征选取](/docs/14?id=_11342-基于-tree(树)的特征选取)
* [1.13.5\. 特征选取作为 pipeline(管道)的一部分](/docs/14?id=_1135-特征选取作为-pipeline(管道)的一部分)
* [1.14\. 半监督学习](/docs/15?id=_114-半监督学习)
* [1.14.1\. 标签传播](/docs/15?id=_1141-标签传播)
* [1.15\. 等式回归](/docs/16?id=_115-等式回归)
* [1.16\. 概率校准](/docs/17?id=_116-概率校准)
* [1.17\. 神经网络模型(有监督)](/docs/18?id=_117-神经网络模型(有监督))
* [1.17.1\. 多层感知器](/docs/18?id=_1171-多层感知器)
* [1.17.2\. 分类](/docs/18?id=_1172-分类)
* [1.17.3\. 回归](/docs/18?id=_1173-回归)
* [1.17.4\. 正则化](/docs/18?id=_1174-正则化)
* [1.17.5\. 算法](/docs/18?id=_1175-算法)
* [1.17.6\. 复杂度](/docs/18?id=_1176-复杂度)
* [1.17.7\. 数学公式](/docs/18?id=_1177-数学公式)
* [1.17.8\. 实用技巧](/docs/18?id=_1178-实用技巧)
* [1.17.9\. 使用 warm_start 的更多控制](/docs/18?id=_1179-使用-warm_start-的更多控制)
\ No newline at end of file
# 1.9\. 朴素贝叶斯
校验者:
        [@Kyrie](https://github.com/apachecn/scikit-learn-doc-zh)
翻译者:
        [@TWITCH](https://github.com/apachecn/scikit-learn-doc-zh)
朴素贝叶斯方法是基于贝叶斯定理的一组有监督学习算法,即“简单”地假设每对特征之间相互独立。 给定一个类别 ![y](img/0775c03fc710a24df297dedcec515aaf.jpg) 和一个从 ![x_1](img/f15b9946d9078749f894a78579dc6778.jpg) 到 ![x_n](img/14f6506599a88a5297ea712fa70eece4.jpg) 的相关的特征向量, 贝叶斯定理阐述了以下关系:
![P(y \mid x_1, \dots, x_n) = \frac{P(y) P(x_1, \dots x_n \mid y)}
{P(x_1, \dots, x_n)}](img/32f500a4e2eba65727c1e003699dff90.jpg)
使用简单(naive)的假设-每对特征之间都相互独立:
![P(x_i | y, x_1, \dots, x_{i-1}, x_{i+1}, \dots, x_n) = P(x_i | y) ,](img/9fd83615429a9be9e5698d35bec8642a.jpg)
对于所有的 :math: &lt;cite&gt;i&lt;/cite&gt; ,这个关系式可以简化为
![P(y \mid x_1, \dots, x_n) = \frac{P(y) \prod_{i=1}^{n} P(x_i \mid y)}
{P(x_1, \dots, x_n)}](img/1c12ea7ea179efd16ce513645034d41a.jpg)
由于在给定的输入中 ![P(x_1, \dots, x_n)](img/03dc262433e357325639af531c5bf70e.jpg) 是一个常量,我们使用下面的分类规则:
![P(y \mid x_1, \dots, x_n) \propto P(y) \prod_{i=1}^{n} P(x_i \mid y)
\Downarrow
\hat{y} = \arg\max_y P(y) \prod_{i=1}^{n} P(x_i \mid y),](img/983133e80141fbf289a10f379c11b34f.jpg)
我们可以使用最大后验概率(Maximum A Posteriori, MAP) 来估计 ![P(y)](img/d41288778c3d66bcae947c3078469126.jpg) 和 ![P(x_i \mid y)](img/db23fadfab6b660dbfa2934c4536beb1.jpg) ; 前者是训练集中类别 ![y](img/0775c03fc710a24df297dedcec515aaf.jpg) 的相对频率。
各种各样的的朴素贝叶斯分类器的差异大部分来自于处理 ![P(x_i \mid y)](img/db23fadfab6b660dbfa2934c4536beb1.jpg) 分布时的所做的假设不同。
尽管其假设过于简单,在很多实际情况下,朴素贝叶斯工作得很好,特别是文档分类和垃圾邮件过滤。这些工作都要求 一个小的训练集来估计必需参数。(至于为什么朴素贝叶斯表现得好的理论原因和它适用于哪些类型的数据,请参见下面的参考。)
相比于其他更复杂的方法,朴素贝叶斯学习器和分类器非常快。 分类条件分布的解耦意味着可以独立单独地把每个特征视为一维分布来估计。这样反过来有助于缓解维度灾难带来的问题。
另一方面,尽管朴素贝叶斯被认为是一种相当不错的分类器,但却不是好的估计器(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\. 高斯朴素贝叶斯
[`GaussianNB`](generated/sklearn.naive_bayes.GaussianNB.html#sklearn.naive_bayes.GaussianNB "sklearn.naive_bayes.GaussianNB") 实现了运用于分类的高斯朴素贝叶斯算法。特征的可能性(即概率)假设为高斯分布:
![P(x_i \mid y) &= \frac{1}{\sqrt{2\pi\sigma^2_y}} \exp\left(-\frac{(x_i - \mu_y)^2}{2\sigma^2_y}\right)](img/92c470d884176abfcc29a5218ccf0aef.jpg)
参数 ![\sigma_y](img/abd232bd41a9d1b51021b788e2a82dd9.jpg) 和 ![\mu_y](img/1d57cc4e24d28b8283f98bda247d84e7.jpg) 使用最大似然法估计。
```py
>>> from sklearn import datasets
>>> iris = datasets.load_iris()
>>> from sklearn.naive_bayes import GaussianNB
>>> gnb = GaussianNB()
>>> y_pred = gnb.fit(iris.data, iris.target).predict(iris.data)
>>> print("Number of mislabeled points out of a total %d points : %d"
... % (iris.data.shape[0],(iris.target != y_pred).sum()))
Number of mislabeled points out of a total 150 points : 6
```
## 1.9.2\. 多项分布朴素贝叶斯
[`MultinomialNB`](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)
参数 ![\theta_y](img/bbdbd3f496f907578ff01cc798adde74.jpg) 使用平滑过的最大似然估计法来估计,即相对频率计数:
![\hat{\theta}_{yi} = \frac{ N_{yi} + \alpha}{N_y + \alpha n}](img/cb5a89fd247e8cbbea21b00a12d188e6.jpg)
```py
式中 训练集 特征 在类 中出现的次数
```
![N_{y} = \sum_{i=1}^{|T|} N_{yi}](img/da31be9c84ea7617ab534b511701d650.jpg) 是类 ![y](img/0775c03fc710a24df297dedcec515aaf.jpg) 中出现所有特征的计数总和。
先验平滑因子 ![\alpha \ge 0](img/43fc75930300610d8cb41a8d15899c15.jpg) 应用于在学习样本中没有出现的特征,以防在将来的计算中出现0概率输出。 把 ![\alpha = 1](img/3e0dffeddefe6ba1e809bd9b6276c771.jpg) 被称为拉普拉斯平滑(Lapalce smoothing),而 ![\alpha &lt; 1](img/8fe0d726b364f224c93e31cd3248a1f6.jpg) 被称为利德斯通(Lidstone smoothing)。
## 1.9.3\. 伯努利朴素贝叶斯
[`BernoulliNB`](generated/sklearn.naive_bayes.BernoulliNB.html#sklearn.naive_bayes.BernoulliNB "sklearn.naive_bayes.BernoulliNB") 实现了用于多重伯努利分布数据的朴素贝叶斯训练和分类算法,即有多个特征,但每个特征 都假设是一个二元 (Bernoulli, boolean) 变量。 因此,这类算法要求样本以二元值特征向量表示;如果样本含有其他类型的数据, 一个 `BernoulliNB` 实例会将其二值化(取决于 `binarize` 参数)。
伯努利朴素贝叶斯的决策规则基于
![P(x_i \mid y) = P(i \mid y) x_i + (1 - P(i \mid y)) (1 - x_i)](img/375fd0c32c15c4547b00ae36c0ec0a6a.jpg)
与多项分布朴素贝叶斯的规则不同 伯努利朴素贝叶斯明确地惩罚类 ![y](img/0775c03fc710a24df297dedcec515aaf.jpg) 中没有出现作为预测因子的特征 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) ,而多项分布分布朴素贝叶斯只是简单地忽略没出现的特征。
在文本分类的例子中,词频向量(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.4\. 堆外朴素贝叶斯模型拟合
朴素贝叶斯模型可以解决整个训练集不能导入内存的大规模分类问题。 为了解决这个问题, [`MultinomialNB`](generated/sklearn.naive_bayes.MultinomialNB.html#sklearn.naive_bayes.MultinomialNB "sklearn.naive_bayes.MultinomialNB"), [`BernoulliNB`](generated/sklearn.naive_bayes.BernoulliNB.html#sklearn.naive_bayes.BernoulliNB "sklearn.naive_bayes.BernoulliNB"), 和 [`GaussianNB`](generated/sklearn.naive_bayes.GaussianNB.html#sklearn.naive_bayes.GaussianNB "sklearn.naive_bayes.GaussianNB") 实现了 `partial_fit` 方法,可以动态的增加数据,使用方法与其他分类器的一样,使用示例见 [Out-of-core classification of text documents](../auto_examples/applications/plot_out_of_core_classification.html#sphx-glr-auto-examples-applications-plot-out-of-core-classification-py) 。所有的朴素贝叶斯分类器都支持样本权重。
`fit` 方法不同,首次调用 `partial_fit` 方法需要传递一个所有期望的类标签的列表。
对于 scikit-learn 中可用方案的概览,另见 [out-of-core learning](scaling_strategies.html#scaling-strategies) 文档。
所有朴素贝叶斯模型调用 `partial_fit` 都会引入一些计算开销。推荐让数据快越大越好,其大小与 RAM 中可用内存大小相同。
\ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
# 1.13\. 特征选择
校验者:
        [@yuezhao9210](https://github.com/yuezhao9210)
        [@BWM-蜜蜂](https://github.com/apachecn/scikit-learn-doc-zh)
翻译者:
        [@v](https://github.com/apachecn/scikit-learn-doc-zh)
[`sklearn.feature_selection`](classes.html#module-sklearn.feature_selection "sklearn.feature_selection") 模块中的类可以用来对样本集进行 feature selection(特征选择)和 dimensionality reduction(降维),这将会提高估计器的准确度或者增强它们在高维数据集上的性能。
## 1.13.1\. 移除低方差特征
[`VarianceThreshold`](generated/sklearn.feature_selection.VarianceThreshold.html#sklearn.feature_selection.VarianceThreshold "sklearn.feature_selection.VarianceThreshold") 是特征选择的一个简单基本方法,它会移除所有那些方差不满足一些阈值的特征。默认情况下,它将会移除所有的零方差特征,即那些在所有的样本上的取值均不变的特征。
例如,假设我们有一个特征是布尔值的数据集,我们想要移除那些在整个数据集中特征值为0或者为1的比例超过80%的特征。布尔特征是伯努利( Bernoulli )随机变量,变量的方差为
![\mathrm{Var}[X] = p(1 - p)](img/468283fb7514d3373112cb7db7c43356.jpg)
因此,我们可以使用阈值 [``](#id3).8 * (1 - .8)``进行选择:
```py
>>> from sklearn.feature_selection import VarianceThreshold
>>> X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]
>>> sel = VarianceThreshold(threshold=(.8 * (1 - .8)))
>>> sel.fit_transform(X)
array([[0, 1],
[1, 0],
[0, 0],
[1, 1],
[1, 0],
[1, 1]])
```
正如预期一样, `VarianceThreshold` 移除了第一列,它的值为 0 的概率为 ![p = 5/6 &gt; .8](img/dc219bfd2e157456e106676575955251.jpg) 。
## 1.13.2\. 单变量特征选择
单变量的特征选择是通过基于单变量的统计测试来选择最好的特征。它可以当做是评估器的预处理步骤。Scikit-learn 将特征选择的内容作为实现了 transform 方法的对象:
> * [`SelectKBest`](generated/sklearn.feature_selection.SelectKBest.html#sklearn.feature_selection.SelectKBest "sklearn.feature_selection.SelectKBest") 移除那些除了评分最高的 K 个特征之外的所有特征
> * [`SelectPercentile`](generated/sklearn.feature_selection.SelectPercentile.html#sklearn.feature_selection.SelectPercentile "sklearn.feature_selection.SelectPercentile") 移除除了用户指定的最高得分百分比之外的所有特征
> * 对每个特征应用常见的单变量统计测试: 假阳性率(false positive rate) [`SelectFpr`](generated/sklearn.feature_selection.SelectFpr.html#sklearn.feature_selection.SelectFpr "sklearn.feature_selection.SelectFpr"), 伪发现率(false discovery rate) [`SelectFdr`](generated/sklearn.feature_selection.SelectFdr.html#sklearn.feature_selection.SelectFdr "sklearn.feature_selection.SelectFdr") , 或者族系误差(family wise error) [`SelectFwe`](generated/sklearn.feature_selection.SelectFwe.html#sklearn.feature_selection.SelectFwe "sklearn.feature_selection.SelectFwe") 。
> * [`GenericUnivariateSelect`](generated/sklearn.feature_selection.GenericUnivariateSelect.html#sklearn.feature_selection.GenericUnivariateSelect "sklearn.feature_selection.GenericUnivariateSelect") 允许使用可配置方法来进行单变量特征选择。它允许超参数搜索评估器来选择最好的单变量特征。
例如下面的实例,我们可以使用 ![\chi^2](img/c019126f38fb92a868a7155bd707a5f8.jpg) 检验样本集来选择最好的两个特征:
```py
>>> from sklearn.datasets import load_iris
>>> from sklearn.feature_selection import SelectKBest
>>> from sklearn.feature_selection import chi2
>>> iris = load_iris()
>>> X, y = iris.data, iris.target
>>> X.shape
(150, 4)
>>> X_new = SelectKBest(chi2, k=2).fit_transform(X, y)
>>> X_new.shape
(150, 2)
```
这些对象将得分函数作为输入,返回单变量的得分和 p 值 (或者仅仅是 [`SelectKBest`](generated/sklearn.feature_selection.SelectKBest.html#sklearn.feature_selection.SelectKBest "sklearn.feature_selection.SelectKBest") 和 [`SelectPercentile`](generated/sklearn.feature_selection.SelectPercentile.html#sklearn.feature_selection.SelectPercentile "sklearn.feature_selection.SelectPercentile") 的分数):
> * 对于回归: [`f_regression`](generated/sklearn.feature_selection.f_regression.html#sklearn.feature_selection.f_regression "sklearn.feature_selection.f_regression") , [`mutual_info_regression`](generated/sklearn.feature_selection.mutual_info_regression.html#sklearn.feature_selection.mutual_info_regression "sklearn.feature_selection.mutual_info_regression")
> * 对于分类: [`chi2`](generated/sklearn.feature_selection.chi2.html#sklearn.feature_selection.chi2 "sklearn.feature_selection.chi2") , [`f_classif`](generated/sklearn.feature_selection.f_classif.html#sklearn.feature_selection.f_classif "sklearn.feature_selection.f_classif") , [`mutual_info_classif`](generated/sklearn.feature_selection.mutual_info_classif.html#sklearn.feature_selection.mutual_info_classif "sklearn.feature_selection.mutual_info_classif")
这些基于 F-test 的方法计算两个随机变量之间的线性相关程度。另一方面,mutual information methods(互信息)能够计算任何种类的统计相关性,但是作为非参数的方法,互信息需要更多的样本来进行准确的估计。
稀疏数据的特征选择
```py
如果你使用的是稀疏的数据 (例如数据可以由稀疏矩阵来表示),
```
[`chi2`](generated/sklearn.feature_selection.chi2.html#sklearn.feature_selection.chi2 "sklearn.feature_selection.chi2") , [`mutual_info_regression`](generated/sklearn.feature_selection.mutual_info_regression.html#sklearn.feature_selection.mutual_info_regression "sklearn.feature_selection.mutual_info_regression") , [`mutual_info_classif`](generated/sklearn.feature_selection.mutual_info_classif.html#sklearn.feature_selection.mutual_info_classif "sklearn.feature_selection.mutual_info_classif") 可以处理数据并保持它的稀疏性。
Warning
不要使用一个回归评分函数来处理分类问题,你会得到无用的结果。
Examples:
* [Univariate Feature Selection](../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](../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\. 递归式特征消除
给定一个外部的估计器,可以对特征赋予一定的权重(比如,线性模型的相关系数),recursive feature elimination ( [`RFE`](generated/sklearn.feature_selection.RFE.html#sklearn.feature_selection.RFE "sklearn.feature_selection.RFE") ) 通过考虑越来越小的特征集合来递归的选择特征。 首先,评估器在初始的特征集合上面训练并且每一个特征的重要程度是通过一个 `coef_` 属性 或者 `feature_importances_` 属性来获得。 然后,从当前的特征集合中移除最不重要的特征。在特征集合上不断的重复递归这个步骤,直到最终达到所需要的特征数量为止。 [`RFECV`](generated/sklearn.feature_selection.RFECV.html#sklearn.feature_selection.RFECV "sklearn.feature_selection.RFECV") 在一个交叉验证的循环中执行 RFE 来找到最优的特征数量
示例:
* [Recursive feature elimination](../auto_examples/feature_selection/plot_rfe_digits.html#sphx-glr-auto-examples-feature-selection-plot-rfe-digits-py) : 通过递归式特征消除来体现数字分类任务中像素重要性的例子。
* [Recursive feature elimination with cross-validation](../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 选取特征
[`SelectFromModel`](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 )。
有关如何使用的例子,可以参阅下面的例子。
Examples
* [Feature selection using SelectFromModel and LassoCV](../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 的特征选取
[Linear models](linear_model.html#linear-model) 使用 L1 正则化的线性模型会得到稀疏解:他们的许多系数为 0。 当目标是降低使用另一个分类器的数据集的维度, 它们可以与 [`feature_selection.SelectFromModel`](generated/sklearn.feature_selection.SelectFromModel.html#sklearn.feature_selection.SelectFromModel "sklearn.feature_selection.SelectFromModel") 一起使用来选择非零系数。特别的,可以用于此目的的稀疏评估器有用于回归的 [`linear_model.Lasso`](generated/sklearn.linear_model.Lasso.html#sklearn.linear_model.Lasso "sklearn.linear_model.Lasso") , 以及用于分类的 [`linear_model.LogisticRegression`](generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression "sklearn.linear_model.LogisticRegression") 和 [`svm.LinearSVC`](generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC "sklearn.svm.LinearSVC")
```py
>>> from sklearn.svm import LinearSVC
>>> from sklearn.datasets import load_iris
>>> from sklearn.feature_selection import SelectFromModel
>>> iris = load_iris()
>>> X, y = iris.data, iris.target
>>> X.shape
(150, 4)
>>> lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, y)
>>> model = SelectFromModel(lsvc, prefit=True)
>>> X_new = model.transform(X)
>>> X_new.shape
(150, 3)
```
在 SVM 和逻辑回归中,参数 C 是用来控制稀疏性的:小的 C 会导致少的特征被选择。使用 Lasso,alpha 的值越大,越少的特征会被选择。
示例:
* [Classification of text documents using sparse features](../auto_examples/text/document_classification_20newsgroups.html#sphx-glr-auto-examples-text-document-classification-20newsgroups-py): 不同算法的比较,当使用 L1 正则化的特征选择在文件分类任务上。
**L1-recovery 和 compressive sensing(压缩感知)**
当选择了正确的 alpha 值以后, [Lasso](linear_model.html#lasso) 可以仅通过少量观察点便恢复完整的非零特征, 假设特定的条件可以被满足的话。特别的,数据量需要 “足够大” ,不然 L1 模型的表现将缺乏保障。 “足够大” 的定义取决于非零系数的个数、特征数量的对数值、噪音的数量、非零系数的最小绝对值、 以及设计矩阵(design maxtrix) X 的结构。特征矩阵必须有特定的性质,如数据不能过度相关。
关于如何选择 alpha 值没有固定的规则。alpha 值可以通过交叉验证来确定( `LassoCV` 或者 `LassoLarsCV` ),尽管这可能会导致欠惩罚的模型:包括少量的无关变量对于预测值来说并非致命的。相反的, BIC( `LassoLarsIC` )倾向于给定高 alpha 值。
**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(树)的特征选取
基于树的 estimators (查阅 [`sklearn.tree`](classes.html#module-sklearn.tree "sklearn.tree") 模块和树的森林 在 [`sklearn.ensemble`](classes.html#module-sklearn.ensemble "sklearn.ensemble") 模块) 可以用来计算特征的重要性,然后可以消除不相关的特征(当与 [`sklearn.feature_selection.SelectFromModel`](generated/sklearn.feature_selection.SelectFromModel.html#sklearn.feature_selection.SelectFromModel "sklearn.feature_selection.SelectFromModel") 等元转换器一同使用时):
```py
>>> from sklearn.ensemble import ExtraTreesClassifier
>>> from sklearn.datasets import load_iris
>>> from sklearn.feature_selection import SelectFromModel
>>> iris = load_iris()
>>> X, y = iris.data, iris.target
>>> X.shape
(150, 4)
>>> clf = ExtraTreesClassifier()
>>> clf = clf.fit(X, y)
>>> clf.feature_importances_
array([ 0.04..., 0.05..., 0.4..., 0.4...])
>>> model = SelectFromModel(clf, prefit=True)
>>> X_new = model.transform(X)
>>> X_new.shape
(150, 2)
```
示例:
* [Feature importances with forests of trees](../auto_examples/ensemble/plot_forest_importances.html#sphx-glr-auto-examples-ensemble-plot-forest-importances-py): 在合成数据上恢复有用特征的示例。
* [Pixel importances with a parallel forest of trees](../auto_examples/ensemble/plot_forest_importances_faces.html#sphx-glr-auto-examples-ensemble-plot-forest-importances-faces-py): 在人脸识别数据上的示例。
## 1.13.5\. 特征选取作为 pipeline(管道)的一部分
特征选择通常在实际的学习之前用来做预处理。在 scikit-learn 中推荐的方式是使用 :[`sklearn.pipeline.Pipeline`](generated/sklearn.pipeline.Pipeline.html#sklearn.pipeline.Pipeline "sklearn.pipeline.Pipeline"):
```py
clf = Pipeline([
('feature_selection', SelectFromModel(LinearSVC(penalty="l1"))),
('classification', RandomForestClassifier())
])
clf.fit(X, y)
```
在这段代码中,我们利用 [`sklearn.svm.LinearSVC`](generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC "sklearn.svm.LinearSVC") 和 [`sklearn.feature_selection.SelectFromModel`](generated/sklearn.feature_selection.SelectFromModel.html#sklearn.feature_selection.SelectFromModel "sklearn.feature_selection.SelectFromModel") 来评估特征的重要性并且选择出相关的特征。 然后,在转化后的输出中使用一个 [`sklearn.ensemble.RandomForestClassifier`](generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier "sklearn.ensemble.RandomForestClassifier") 分类器,比如只使用相关的特征。你也可以使用其他特征选择的方法和可以提供评估特征重要性的分类器来执行相似的操作。 请查阅 [`sklearn.pipeline.Pipeline`](generated/sklearn.pipeline.Pipeline.html#sklearn.pipeline.Pipeline "sklearn.pipeline.Pipeline") 来了解更多的实例。
\ No newline at end of file
# 1.14\. 半监督学习
校验者:
        [@STAN,废柴0.1](https://github.com/apachecn/scikit-learn-doc-zh)
翻译者:
        [@那伊抹微笑](https://github.com/apachecn/scikit-learn-doc-zh)
[半监督学习](https://en.wikipedia.org/wiki/Semi-supervised_learning) 适用于在训练数据上的一些样本数据没有贴上标签的情况。 [`sklearn.semi_supervised`](classes.html#module-sklearn.semi_supervised "sklearn.semi_supervised") 中的半监督估计, 能够利用这些附加的未标记数据来更好地捕获底层数据分布的形状,并将其更好地类推到新的样本。 当我们有非常少量的已标签化的点和大量的未标签化的点时,这些算法表现均良好。
&lt;cite&gt;y&lt;/cite&gt; 中含有未标记的数据
在使用 `fit` 方法训练数据时, 将标识符与已标签化的数据一起分配给未标签化的点是尤其重要的. 实现该标记的方法是使用整数值 ![-1](img/8b3be66a25e0c33787b341667b261360.jpg).
## 1.14.1\. 标签传播
标签传播表示半监督图推理算法的几个变体。
```py
该模型的一些特性如下:
```
* 可用于分类和回归任务
* Kernel methods to project data into alternate dimensional spaces
&lt;cite&gt;scikit-learn&lt;/cite&gt; 提供了两种标签传播模型: [`LabelPropagation`](generated/sklearn.semi_supervised.LabelPropagation.html#sklearn.semi_supervised.LabelPropagation "sklearn.semi_supervised.LabelPropagation")[`LabelSpreading`](generated/sklearn.semi_supervised.LabelSpreading.html#sklearn.semi_supervised.LabelSpreading "sklearn.semi_supervised.LabelSpreading") 。 两者都通过在输入的 dataset(数据集)中的所有 items(项)上构建 similarity graph (相似图)来进行工作。
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_label_propagation_structure_0011.png](img/f38f84b73c7da2884c38bdfca1a38b1c.jpg)](../auto_examples/semi_supervised/plot_label_propagation_structure.html)
**标签传播说明:** _未标签化的观察值结构与 class(类)结构一致, 因此可以将 class(类)标签传播到训练集的未标签化的观察值_
[`LabelPropagation`](generated/sklearn.semi_supervised.LabelPropagation.html#sklearn.semi_supervised.LabelPropagation "sklearn.semi_supervised.LabelPropagation")[`LabelSpreading`](generated/sklearn.semi_supervised.LabelSpreading.html#sklearn.semi_supervised.LabelSpreading "sklearn.semi_supervised.LabelSpreading") 在对图形的相似性矩阵, 以及对标签分布的 clamping effect(夹持效应)的修改方面不太一样。 Clamping 允许算法在一定程度上改变真实标签化数据的权重。 该 [`LabelPropagation`](generated/sklearn.semi_supervised.LabelPropagation.html#sklearn.semi_supervised.LabelPropagation "sklearn.semi_supervised.LabelPropagation") 算法执行输入标签的 hard clamping, 这意味着 ![\alpha=0](img/1ff751c4de3bbad5543f0dbbad73dd35.jpg) 。 这些 clamping factor 可以不是很严格的, 例如 ![\alpha=0.2](img/db30d43fd890d5f28b84a667ddfbb39d.jpg) , 这意味着我们将始终保留原始标签分配的 80%, 但该算法可以将其分布的置信度改变在 20% 以内。
[`LabelPropagation`](generated/sklearn.semi_supervised.LabelPropagation.html#sklearn.semi_supervised.LabelPropagation "sklearn.semi_supervised.LabelPropagation") 使用原始相似性矩阵从未修改的数据来构建。 [`LabelSpreading`](generated/sklearn.semi_supervised.LabelSpreading.html#sklearn.semi_supervised.LabelSpreading "sklearn.semi_supervised.LabelSpreading") 最小化具有正则化属性的损耗函数, 因此它通常更适用于噪声数据。 该算法在原始图形的修改版本上进行迭代, 并通过计算 normalized graph Laplacian matrix (归一化图拉普拉斯矩阵)来对边缘的权重进行归一化。 此过程也用于 [Spectral clustering](clustering.html#spectral-clustering)
标签传播模型有两种内置的 kernel methods(核函数)。 kernel (核)的选择会影响算法的可扩展性和性能。 以下是可用的:
> * rbf (![\exp(-\gamma |x-y|^2), \gamma &gt; 0](img/26f66401927461c0129b7f4ad33e5322.jpg)). ![\gamma](img/6552bde3d3999c1a9728016416932af7.jpg) 通过关键字 gamma 来指定。
> * knn (![1[x' \in kNN(x)]](img/6db85b1ad926d9ad860d58629ff5f235.jpg)). ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 通过关键字 n_neighbors 来指定。
RBF 核将产生一个完全连接的图形, 它通过密集矩阵在内存中表示。 该矩阵可能非常大, 与算法的每次迭代执行全矩阵乘法计算的成本相结合可导致超长的运行时间。 在另一方面, KNN 核将产生更多的内存友好的稀疏矩阵, 这样可以大幅度的减少运行时间。
例子
* [Decision boundary of label propagation versus SVM on the Iris dataset](../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](../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](../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)
\ No newline at end of file
# 1.15\. 等式回归
校验者:
        [@STAN,废柴0.1](https://github.com/apachecn/scikit-learn-doc-zh)
翻译者:
        [@Damon](https://github.com/apachecn/scikit-learn-doc-zh)
[`IsotonicRegression`](generated/sklearn.isotonic.IsotonicRegression.html#sklearn.isotonic.IsotonicRegression "sklearn.isotonic.IsotonicRegression") 类对数据进行非降函数拟合. 它解决了如下的问题:
> 最小化 ![\sum_i w_i (y_i - \hat{y}_i)^2](img/156554c81cfe5f0230627ac0487fd07f.jpg)
>
> 服从于 ![\hat{y}_{min} = \hat{y}_1 \le \hat{y}_2 ... \le \hat{y}_n = \hat{y}_{max}](img/6c446734a6837b7541db12e2b55f1a2b.jpg)
其中每一个 ![w_i](img/6689aa593e8e42bb5c2caa474e642b5f.jpg) 是 strictly 正数而且每个 ![y_i](img/4a22ca544916918b2358e5fc7c71b8e6.jpg) 是任意实 数. 它生成一个由平方误差接近的不减元素组成的向量.实际上这一些元素形成 一个分段线性的函数.
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_isotonic_regression_0011.png](img/87ae31ef4f2e7b4385b9a25aa8fed533.jpg)](../auto_examples/plot_isotonic_regression.html)
\ No newline at end of file
# 1.16\. 概率校准
校验者:
        [@曲晓峰](https://github.com/apachecn/scikit-learn-doc-zh)
        [@小瑶](https://github.com/apachecn/scikit-learn-doc-zh)
翻译者:
        [@那伊抹微笑](https://github.com/apachecn/scikit-learn-doc-zh)
执行分类时, 您经常希望不仅可以预测类标签, 还要获得相应标签的概率. 这个概率给你一些预测的信心. 一些模型可以给你贫乏的概率估计, 有些甚至不支持概率预测. 校准模块可以让您更好地校准给定模型的概率, 或添加对概率预测的支持.
精确校准的分类器是概率分类器, 其可以将 predict_proba 方法的输出直接解释为 confidence level(置信度级别). 例如,一个经过良好校准的(二元的)分类器应该对样本进行分类, 使得在给出一个接近 0.8 的 prediction_proba 值的样本中, 大约 80% 实际上属于正类. 以下图表比较了校准不同分类器的概率预测的良好程度:
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_compare_calibration_0011.png](img/2490002eaeb5d875d22825fc267ef925.jpg)](../auto_examples/calibration/plot_compare_calibration.html)
[`LogisticRegression`](generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression "sklearn.linear_model.LogisticRegression") 默认情况下返回良好的校准预测, 因为它直接优化了 log-loss(对数损失)情况. 相反,其他方法返回 biased probabilities(偏倚概率); 每种方法有不同的偏差:
* [`GaussianNB`](generated/sklearn.naive_bayes.GaussianNB.html#sklearn.naive_bayes.GaussianNB "sklearn.naive_bayes.GaussianNB") 往往将概率推到 0 或 1(注意直方图中的计数). 这主要是因为它假设特征在给定类别的条件下是独立的, 在该数据集中不包含 2 个冗余特征.
* [`RandomForestClassifier`](generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier "sklearn.ensemble.RandomForestClassifier") 解释了相反的行为:直方图在约 0.2 和 0.9 的概率时显示峰值, 而接近 0 或 1 的概率非常罕见. Niculescu-Mizil 和 Caruana [4] 给出了一个解释:”诸如 bagging 和 random forests(随机森林)的方法, 从基本模型的平均预测中可能难以将预测置于 0 和 1 附近, 因为基础模型的变化会偏离预测值, 它们应该接近于零或偏离这些值, 因为预测被限制在 [0,1] 的间隔, 由方差引起的误差往往是靠近 0 和 1 的一边, 例如,如果一个模型应该对于一个案例,预测 p = 0,bagging 可以实现的唯一方法是假设所有的 bagging 树预测为零. 如果我们在 bagging 树上增加噪声, 这种噪声将导致一些树预测大于 0 的值, 因此将 bagging 的平均预测从 0 移开. 我们用随机森林最强烈地观察到这种效应, 因为用随机森林训练的 base-level 树由于特征划分而具有相对较高的方差. 因此,校准曲线也被称为可靠性图 (Wilks 1995 [5] _) 显示了一种典型的 sigmoid 形状, 表明分类器可以更多地信任其 “直觉”, 并通常将接近 0 或 1 的概率返回.
* 线性支持向量分类 ([`LinearSVC`](generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC "sklearn.svm.LinearSVC")) 显示了作为 RandomForestClassifier 更多的 Sigmoid 曲线, 这是经典的最大边距方法 (compare Niculescu-Mizil and Caruana [[4]](#id3)), 其重点是靠近决策边界的 hard samples(支持向量).
提供了执行概率预测校准的两种方法: 基于 Platt 的 Sigmoid 模型的参数化方法和基于 isotonic regression(保序回归)的非参数方法 ([`sklearn.isotonic`](classes.html#module-sklearn.isotonic "sklearn.isotonic")). 对于不用于模型拟合的新数据, 应进行概率校准. 类 [`CalibratedClassifierCV`](generated/sklearn.calibration.CalibratedClassifierCV.html#sklearn.calibration.CalibratedClassifierCV "sklearn.calibration.CalibratedClassifierCV") 使用交叉验证生成器, 并对每个拆分模型参数对训练样本和测试样本的校准进行估计. 然后对折叠预测的概率进行平均. 已经安装的分类器可以通过:class:&lt;cite&gt;CalibratedClassifierCV&lt;/cite&gt; 传递参数 cv =”prefit” 这种方式进行校准. 在这种情况下, 用户必须手动注意模型拟合和校准的数据是不相交的.
以下图像展示了概率校准的好处. 第一个图像显示一个具有 2 个类和 3 个数据块的数据集. 中间的数据块包含每个类的随机样本. 此数据块中样本的概率应为 0.5.
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_calibration_0011.png](img/6a0ac3a1f45ae7072f58ae85160eca33.jpg)](../auto_examples/calibration/plot_calibration.html)
以下图像使用没有校准的高斯朴素贝叶斯分类器, 使用 sigmoid 校准和非参数的等渗校准来显示上述估计概率的数据. 可以观察到, 非参数模型为中间样本提供最准确的概率估计, 即0.5.
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_calibration_0021.png](img/b7a68272ceb9cb09f48103e44f469470.jpg)](../auto_examples/calibration/plot_calibration.html)
对具有20个特征的100.000个样本(其中一个用于模型拟合)进行二元分类的人造数据集进行以下实验. 在 20个 特征中,只有 2 个是信息量, 10 个是冗余的. 该图显示了使用逻辑回归获得的估计概率, 线性支持向量分类器(SVC)和具有 sigmoid 校准和 sigmoid 校准的线性 SVC. 校准性能使用 Brier score [`brier_score_loss`](generated/sklearn.metrics.brier_score_loss.html#sklearn.metrics.brier_score_loss "sklearn.metrics.brier_score_loss") 来计算, 请看下面的图例(越销越好).
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_calibration_curve_0021.png](img/0563dd4e7c322dfdafde0770d8a9dc4a.jpg)](../auto_examples/calibration/plot_calibration_curve.html)
这里可以观察到, 逻辑回归被很好地校准, 因为其曲线几乎是对角线. 线性 SVC 的校准曲线或可靠性图具有 sigmoid 曲线, 这是一个典型的不够自信的分类器. 在 LinearSVC 的情况下, 这是 hinge loss 的边缘属性引起的, 这使得模型集中在靠近决策边界(支持向量)的 hard samples(硬样本)上. 这两种校准都可以解决这个问题, 并产生几乎相同的结果. 下图显示了高斯朴素贝叶斯在相同数据上的校准曲线, 具有两种校准, 也没有校准.
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_calibration_curve_0011.png](img/dd9b7456f8406b6fac80cfd3ca11ccfc.jpg)](../auto_examples/calibration/plot_calibration_curve.html)
可以看出, 高斯朴素贝叶斯的表现非常差, 但是以线性 SVC 的方式也是如此. 尽管线性 SVC 显示了 sigmoid 校准曲线, 但高斯朴素贝叶斯校准曲线具有转置的 sigmoid 结构. 这对于过分自信的分类器来说是非常经典的. 在这种情况下,分类器的过度自信是由违反朴素贝叶斯特征独立假设的冗余特征引起的.
用等渗回归法对高斯朴素贝叶斯概率的校准可以解决这个问题, 从几乎对角线校准曲线可以看出. Sigmoid 校准也略微改善了 brier 评分, 尽管不如非参数等渗校准那样强烈. 这是 sigmoid 校准的固有限制,其参数形式假定为 sigmoid ,而不是转置的 sigmoid 曲线. 然而, 非参数等渗校准模型没有这样强大的假设, 并且可以处理任何形状, 只要有足够的校准数据. 通常,在校准曲线为 sigmoid 且校准数据有限的情况下, sigmoid 校准是优选的, 而对于非 sigmoid 校准曲线和大量数据可用于校准的情况,等渗校准是优选的.
[`CalibratedClassifierCV`](generated/sklearn.calibration.CalibratedClassifierCV.html#sklearn.calibration.CalibratedClassifierCV "sklearn.calibration.CalibratedClassifierCV") 也可以处理涉及两个以上类的分类任务, 如果基本估计器可以这样做的话. 在这种情况下, 分类器是以一对一的方式分别对每个类进行校准. 当预测未知数据的概率时, 分别预测每个类的校准概率. 由于这些概率并不总是一致, 因此执行后处理以使它们归一化.
下一个图像说明了 Sigmoid 校准如何改变 3 类分类问题的预测概率. 说明是标准的 2-simplex,其中三个角对应于三个类. 箭头从未校准分类器预测的概率向量指向在保持验证集上的 sigmoid 校准之后由同一分类器预测的概率向量. 颜色表示实例的真实类(red: class 1, green: class 2, blue: class 3).
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_calibration_multiclass_0001.png](img/7ea4ef13cdad8ec1dea90fc195d058b1.jpg)](../auto_examples/calibration/plot_calibration_multiclass.html)
基础分类器是具有 25 个基本估计器(树)的随机森林分类器. 如果这个分类器对所有 800 个训练数据点进行了训练, 那么它的预测过于自信, 从而导致了大量的对数损失. 校准在 600 个数据点上训练的相同分类器, 其余 200 个数据点上的 method =’sigmoid’ 减少了预测的置信度, 即将概率向量从单面的边缘向中心移动:
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_calibration_multiclass_0011.png](img/ef59d065ac32862cd7527b0c3fcf7956.jpg)](../auto_examples/calibration/plot_calibration_multiclass.html)
该校准导致较低的 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)
| [[4]](#id2) | Predicting Good Probabilities with Supervised Learning, A. Niculescu-Mizil & R. Caruana, ICML 2005 |
| [5] | On the combination of forecast probabilities for consecutive precipitation periods. Wea. Forecasting, 5, 640–650., Wilks, D. S., 1990a |
\ No newline at end of file
# 1.17\. 神经网络模型(有监督)
校验者:
        [@tiantian1412](https://github.com/tiantian1412)
        [@火星](https://github.com/apachecn/scikit-learn-doc-zh)
翻译者:
        [@A](https://github.com/apachecn/scikit-learn-doc-zh)
Warning
此实现不适用于大规模数据应用。 特别是 scikit-learn 不支持 GPU。如果想要提高运行速度并使用基于 GPU 的实现以及为构建深度学习架构提供更多灵活性的框架,请参阅 [Related Projects](../related_projects.html#related-projects)
## 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。
[![http://sklearn.apachecn.org/cn/0.19.0/_images/multilayerperceptron_network.png](img/a060693e746caf8e0ff030ed5411520f.jpg)](http://sklearn.apachecn.org/cn/0.19.0/_images/multilayerperceptron_network.png)
**图1:单隐藏层MLP.**
最左层的输入层由一组代表输入特征的神经元 ![\{x_i | x_1, x_2, ..., x_m\}](img/3cc550ecff73666ed35ae1efee48b4f4.jpg) 组成。 每个隐藏层中的神经元将前一层的值进行加权线性求和转换 ![w_1x_1 + w_2x_2 + ... + w_mx_m](img/f1fb5834480bfa9770be94da12bbd514.jpg) ,再通过非线性激活函数 ![g(\cdot):R \rightarrow R](img/80a5660d27392922e501744cab3623da.jpg) - 比如双曲正切函数 tanh 。 输出层接收到的值是最后一个隐藏层的输出经过变换而来的。
该模块包含公共属性 `coefs_``intercepts_``coefs_` 是一系列权重矩阵,其中下标为 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 的权重矩阵表示第 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 层和第 ![i+1](img/4aafe42b7f9cf8d06d93b9246d01bbfd.jpg) 层之间的权重。 `intercepts_` 是一系列偏置向量,其中的下标为 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 的向量表示添加到第 ![i+1](img/4aafe42b7f9cf8d06d93b9246d01bbfd.jpg) 层的偏置值。
多层感知器的优点:
> * 可以学习得到非线性模型。
> * 使用``partial_fit`` 可以学习得到实时模型(在线学习)。
多层感知器(MLP)的缺点:
> * 具有隐藏层的 MLP 具有非凸的损失函数,它有不止一个的局部最小值。 因此不同的随机权重初始化会导致不同的验证集准确率。
> * MLP 需要调试一些超参数,例如隐藏层神经元的数量、层数和迭代轮数。
> * MLP 对特征归一化很敏感.
解决这些缺点的方法请参阅 [实用使用技巧](#mlp-tips) 部分。
## 1.17.2\. 分类
> [`MLPClassifier`](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)算法。
MLP 在两个 array 上进行训练:大小为 (n_samples, n_features) 的 array X 储存表示训练样本的浮点型特征向量; 大小为 (n_samples,) 的 array y 储存训练样本的目标值(类别标签):
```py
>>> from sklearn.neural_network import MLPClassifier
>>> X = [[0., 0.], [1., 1.]]
>>> y = [0, 1]
>>> clf = MLPClassifier(solver='lbfgs', alpha=1e-5,
... hidden_layer_sizes=(5, 2), random_state=1)
...
>>> clf.fit(X, y)
MLPClassifier(activation='relu', alpha=1e-05, batch_size='auto',
beta_1=0.9, beta_2=0.999, early_stopping=False,
epsilon=1e-08, hidden_layer_sizes=(5, 2), learning_rate='constant',
learning_rate_init=0.001, max_iter=200, momentum=0.9,
nesterovs_momentum=True, power_t=0.5, random_state=1, shuffle=True,
solver='lbfgs', tol=0.0001, validation_fraction=0.1, verbose=False,
warm_start=False)
```
拟合(训练)后,该模型可以预测新样本的标签:
```py
>>> clf.predict([[2., 2.], [-1., -2.]])
array([1, 0])
```
MLP 可以为训练数据拟合一个非线性模型。 `clf.coefs_` 包含了构建模型的权值矩阵:
```py
>>> [coef.shape for coef in clf.coefs_]
[(2, 5), (5, 2), (2, 1)]
```
目前, [`MLPClassifier`](generated/sklearn.neural_network.MLPClassifier.html#sklearn.neural_network.MLPClassifier "sklearn.neural_network.MLPClassifier") 只支持交叉熵损失函数,通过运行 `predict_proba` 方法进行概率估计。
MLP 算法使用的是反向传播的方式。 更准确地说,它使用了通过反向传播计算得到的梯度和某种形式的梯度下降来进行训练。 对于分类来说,它最小化交叉熵损失函数,为每个样本 ![x](img/5c82dbae35dc43d2f556f9f284d9d184.jpg) 给出一个向量形式的概率估计 ![P(y|x)](img/3cca81fd08a4732dc7061cd246b323ed.jpg)
```py
>>> clf.predict_proba([[2., 2.], [1., 2.]])
array([[ 1.967...e-04, 9.998...-01],
[ 1.967...e-04, 9.998...-01]])
```
[`MLPClassifier`](generated/sklearn.neural_network.MLPClassifier.html#sklearn.neural_network.MLPClassifier "sklearn.neural_network.MLPClassifier") 通过应用 [Softmax](https://en.wikipedia.org/wiki/Softmax_activation_function) 作为输出函数来支持多分类。
此外,该模型支持 [多标签分类](multiclass.html#multiclass) ,一个样本可能属于多个类别。 对于每个类,原始输出经过 logistic 函数变换后,大于或等于 0.5 的值将进为 1,否则为 0。 对于样本的预测输出,值为 1 的索引位置表示该样本的分类类别:
```py
>>> X = [[0., 0.], [1., 1.]]
>>> y = [[0, 1], [1, 1]]
>>> clf = MLPClassifier(solver='lbfgs', alpha=1e-5,
... hidden_layer_sizes=(15,), random_state=1)
...
>>> clf.fit(X, y)
MLPClassifier(activation='relu', alpha=1e-05, batch_size='auto',
beta_1=0.9, beta_2=0.999, early_stopping=False,
epsilon=1e-08, hidden_layer_sizes=(15,), learning_rate='constant',
learning_rate_init=0.001, max_iter=200, momentum=0.9,
nesterovs_momentum=True, power_t=0.5, random_state=1, shuffle=True,
solver='lbfgs', tol=0.0001, validation_fraction=0.1, verbose=False,
warm_start=False)
>>> clf.predict([[1., 2.]])
array([[1, 1]])
>>> clf.predict([[0., 0.]])
array([[0, 1]])
```
更多内容请参阅下面的示例和文档 [`MLPClassifier.fit`](generated/sklearn.neural_network.MLPClassifier.html#sklearn.neural_network.MLPClassifier.fit "sklearn.neural_network.MLPClassifier.fit")
示例:
* [Compare Stochastic learning strategies for MLPClassifier](../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](../auto_examples/neural_networks/plot_mnist_filters.html#sphx-glr-auto-examples-neural-networks-plot-mnist-filters-py)
## 1.17.3\. 回归
[`MLPRegressor`](generated/sklearn.neural_network.MLPRegressor.html#sklearn.neural_network.MLPRegressor "sklearn.neural_network.MLPRegressor") 类多层感知器(MLP)的实现,在使用反向传播进行训练时的输出层没有使用激活函数,也可以看作是使用恒等函数(identity function)作为激活函数。 因此,它使用平方误差作为损失函数,输出是一组连续值。
[`MLPRegressor`](generated/sklearn.neural_network.MLPRegressor.html#sklearn.neural_network.MLPRegressor "sklearn.neural_network.MLPRegressor") 还支持多输出回归,其中一个样本可以有多个目标值。
## 1.17.4\. 正则化
[`MLPRegressor`](generated/sklearn.neural_network.MLPRegressor.html#sklearn.neural_network.MLPRegressor "sklearn.neural_network.MLPRegressor") 类和 [`MLPClassifier`](generated/sklearn.neural_network.MLPClassifier.html#sklearn.neural_network.MLPClassifier "sklearn.neural_network.MLPClassifier") 类都使用参数 `alpha` 作为正则化( L2 正则化)系数,正则化通过惩罚大数量级的权重值以避免过拟合问题。 下面的图表展示了不同的 alpha 值下的决策函数的变化。
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_mlp_alpha_0011.png](img/cfe45a2d171ae9c5933cd6d48cd48cb0.jpg)](../auto_examples/neural_networks/plot_mlp_alpha.html)
详细信息,请参阅下面的示例。
示例:
* [Varying regularization in Multi-layer Perceptron](../auto_examples/neural_networks/plot_mlp_alpha.html#sphx-glr-auto-examples-neural-networks-plot-mlp-alpha-py)
## 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) 使用关于需要适应的一个参数的损失函数的梯度来更新参数,即
![w \leftarrow w - \eta (\alpha \frac{\partial R(w)}{\partial w}
+ \frac{\partial Loss}{\partial w})](img/cdc5ef75d769259ef0537940296ab0b4.jpg)
其中 ![\eta](img/fe1d79339349f9b6263e123094ffce7b.jpg) 是控制训练过程参数更新步长的学习率(learning rate)。 ![Loss](img/16622481c2bbb001363e20660b549ae9.jpg) 是损失函数(loss function)。
更多细节可以在这个文档中找到 [SGD](http://scikit-learn.org/stable/modules/sgd.html)
Adam 类似于 SGD,因为它是 stochastic optimizer (随机优化器),但它可以根据低阶矩的自适应估计自动调整参数更新的量。
使用 SGD 或 Adam ,训练过程支持在线模式和小批量学习模式。
L-BFGS 是利用 Hessian 矩阵来近似函数的二阶偏导数的求解器,它使用 Hessian 的逆矩阵来近似进行参数更新。 该实现使用 Scipy 版本的 [L-BFGS](http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin_l_bfgs_b.html)
如果所选择的方法是 ‘L-BFGS’,训练过程不支持在线学习模式和小批量学习模式。
## 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\. 数学公式
给出一组训练样本 ![(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) 是激活函数,默认为双曲正切函数。 具体形式如下,
![g(z)= \frac{e^z-e^{-z}}{e^z+e^{-z}}](img/f72a2f9f160a11abc8568b72386776fe.jpg)
对于二分类, ![f(x)](img/da2ce2d49bbab0c389600d1c82fccf9b.jpg) 经过 logistic 函数 ![g(z)=1/(1+e^{-z})](img/05c3632395ec8941c82954de930b9d3e.jpg) 得到 0 到 1 之间的输出值。 阈值设置为 0.5 ,输出大于等于 0.5 的样本分到 positive class (正类),其他的分为 negative class (负类)。
如果多于两类,则 ![f(x)](img/da2ce2d49bbab0c389600d1c82fccf9b.jpg) 本身将是一个大小为 (n_classes,) 的向量。 它需要经过 softmax 函数而不是 logistic 函数进行变换,具体形式如下,
![\text{softmax}(z)_i = \frac{\exp(z_i)}{\sum_{l=1}^k\exp(z_l)}](img/2d4c303729e327500afa8bdb343713ff.jpg)
其中 ![z_i](img/e0532dc18cc4c92c2b39f4b29d33cd13.jpg) 表示 softmax 函数的第 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 个输入的元素,它对应于第 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 类, ![K](img/e279b8169ddd6581c5606c868ba52fae.jpg) 是类别的数量。 计算结果是样本 ![x](img/5c82dbae35dc43d2f556f9f284d9d184.jpg) 属于每个类别的概率的向量。 最终输出的分类结果是具有最高概率的类别。
在回归问题中,输出依然是 ![f(x)](img/da2ce2d49bbab0c389600d1c82fccf9b.jpg) ;因此,输出激活函数就是恒等函数。
MLP 根据特定问题使用不同的损失函数。 二分类问题的损失函数的是交叉熵,具体形式如下,
![Loss(\hat{y},y,W) = -y \ln {\hat{y}} - (1-y) \ln{(1-\hat{y})} + \alpha ||W||_2^2](img/a201561ab545f4fd9cba5a2e0eae9a94.jpg)
其中 ![\alpha ||W||_2^2](img/1f7b275b5002d3772b809055d9199f91.jpg) 是 L2 正则化的模型复杂度惩罚项; ![\alpha &gt; 0](img/11cde057716cf1a820780a60c8ffa8e4.jpg) 这个非负的超参数控制惩罚的程度。
对于回归问题,MLP 使用平方误差损失函数,具体形式如下,
![Loss(\hat{y},y,W) = \frac{1}{2}||\hat{y} - y ||_2^2 + \frac{\alpha}{2} ||W||_2^2](img/929e25fd2cb34bf9709d68d266786fd3.jpg)
从随机初始化权重开始,多层感知器(MLP)不断更新这些权重值来最小化损失函数。计算完损失之后,从输出层到前面各层进行反向传播,更新权重参数的值,旨在减小损失函数。
在梯度下降中,计算得到损失函数关于每个权重的梯度 ![\nabla Loss_{W}](img/9ca39b9e9aa5f1a4660e45f3c9b5ef7b.jpg) 并从权重 ![W](img/369b6e6bd43ee84fe99e14c8d78cdc9f.jpg) 中减掉。用公式表示为,
![W^{i+1} = W^i - \epsilon \nabla {Loss}_{W}^{i}](img/92e5a41435bd53653e9ad36f030cbd61.jpg)
其中 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 是当前迭代步数, ![\epsilon](img/58ef9e1b5d2ee139dcb588a3879ca1a6.jpg) 是大于 0 学习率。
算法停止的条件或者是达到预设的最大迭代次数,或者是损失函数低于某个特定值。
## 1.17.8\. 实用技巧
> * 多层感知器对特征的缩放是敏感的,所以它强烈建议您归一化你的数据。 例如,将输入向量 X 的每个属性放缩到到 [0, 1] 或 [-1,+1] ,或者将其标准化使它具有 0 均值和方差 1。
>
> 注意,为了得到有意义的结果,您必须对测试集也应用 _相同的_ 尺度缩放。 您可以使用 `StandardScaler` 进行标准化。
>
> &gt; ```py
> &gt; &gt;&gt;&gt; from sklearn.preprocessing import StandardScaler
> &gt; &gt;&gt;&gt; scaler = StandardScaler()
> &gt; &gt;&gt;&gt; # Don't cheat - fit only on training data
> &gt; &gt;&gt;&gt; scaler.fit(X_train)
> &gt; &gt;&gt;&gt; X_train = scaler.transform(X_train)
> &gt; &gt;&gt;&gt; # apply same transformation to test data
> &gt; &gt;&gt;&gt; X_test = scaler.transform(X_test)
> &gt;
> &gt; ```
> &gt;
> &gt; 另一个推荐的方法是在 `Pipeline` 中使用的 `StandardScaler` 。
>
> * 最好使用 `GridSearchCV` 找到一个合理的正则化参数 ![\alpha](img/d8b3d5242d513369a44f8bf0c6112744.jpg) ,通常范围是在 `10.0 ** -np.arange(1, 7)` 。
> * 据经验可知,我们观察到 &lt;cite&gt;L-BFGS&lt;/cite&gt; 收敛速度是更快的并且是小数据集上更好的解决方案。对于规模相对比较大的数据集,&lt;cite&gt;Adam&lt;/cite&gt; 是非常鲁棒的。 它通常会迅速收敛,并得到相当不错的表现。
>
> 另一方面,如果学习率调整得正确, 使用 momentum 或 nesterov’s momentum 的 &lt;cite&gt;SGD&lt;/cite&gt; 可以比这两种算法更好。
## 1.17.9\. 使用 warm_start 的更多控制
如果您希望更多地控制 SGD 中的停止标准或学习率,或者想要进行额外的监视,使用 `warm_start=True``max_iter=1` 并且自身迭代可能会有所帮助:
```py
>>> X = [[0., 0.], [1., 1.]]
>>> y = [0, 1]
>>> clf = MLPClassifier(hidden_layer_sizes=(15,), random_state=1, max_iter=1, warm_start=True)
>>> for i in range(10):
... clf.fit(X, y)
... # additional monitoring / inspection
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.
* [“Backpropagation”](http://ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithm) Andrew Ng, Jiquan Ngiam, Chuan Yu Foo, Yifan Mai, Caroline Suen - Website, 2011.
* [“Efficient BackProp”](http://yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf) Y. LeCun, L. Bottou, G. Orr, K. Müller - In Neural Networks: Tricks of the Trade 1998.
* [“Adam: A method for stochastic optimization.”](http://arxiv.org/pdf/1412.6980v8.pdf) Kingma, Diederik, and Jimmy Ba. arXiv preprint arXiv:1412.6980 (2014).
\ No newline at end of file
# 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.7\. 经验协方差](/docs/26?id=_27-经验协方差)
* [2.8\. 收敛协方差](/docs/27?id=_28-收敛协方差)
* [2.8.1\. 基本收敛](/docs/27?id=_281-基本收敛)
* [2.8.2\. Ledoit-Wolf 收敛](/docs/27?id=_282-ledoit-wolf-收敛)
* [2.8.3\. Oracle 近似收缩](/docs/27?id=_283-oracle-近似收缩)
* [2.9\. 稀疏逆协方差](/docs/28?id=_29-稀疏逆协方差)
* [2.10\. Robust 协方差估计](/docs/29?id=_210-robust-协方差估计)
* [2.10.1\. 最小协方差决定](/docs/29?id=_2101-最小协方差决定)
* [2.11\. 新奇和异常值检测](/docs/30?id=_211-新奇和异常值检测)
* [2.11.1\. Novelty Detection(新奇检测)](/docs/30?id=_2111-novelty-detection(新奇检测))
* [2.11.2\. Outlier Detection(异常值检测)](/docs/30?id=_2112-outlier-detection(异常值检测))
* [2.11.2.1\. Fitting an elliptic envelope(椭圆模型拟合)](/docs/30?id=_21121-fitting-an-elliptic-envelope(椭圆模型拟合))
* [2.11.2.2\. Isolation Forest(隔离森林)](/docs/30?id=_21122-isolation-forest(隔离森林))
* [2.11.2.3\. Local Outlier Factor(局部异常系数)](/docs/30?id=_21123-local-outlier-factor(局部异常系数))
* [2.11.2.4\. 一类支持向量机与椭圆模型与隔离森林与局部异常系数](/docs/30?id=_21124-一类支持向量机与椭圆模型与隔离森林与局部异常系数)
* [2.12\. 密度估计](/docs/31?id=_212-密度估计)
* [2.12.1\. 密度估计: 直方图](/docs/31?id=_2121-密度估计:-直方图)
* [2.12.2\. 核密度估计](/docs/31?id=_2122-核密度估计)
* [2.13\. 神经网络模型(无监督)](/docs/32?id=_213-神经网络模型(无监督))
* [2.13.1\. 限制波尔兹曼机](/docs/32?id=_2131-限制波尔兹曼机)
* [2.13.1.1\. 图形模型和参数化](/docs/32?id=_21311-图形模型和参数化)
* [2.13.1.2\. 伯努利限制玻尔兹曼机](/docs/32?id=_21312-伯努利限制玻尔兹曼机)
* [2.13.1.3\. 随机最大似然学习](/docs/32?id=_21313-随机最大似然学习)
\ No newline at end of file
此差异已折叠。
# 2.1\. 高斯混合模型
校验者:
        [@why2lyj](https://github.com/why2lyj)
        [@Shao Y.](https://github.com/apachecn/scikit-learn-doc-zh)
翻译者:
        [@glassy](https://github.com/apachecn/scikit-learn-doc-zh)
`sklearn.mixture` 是一个应用高斯混合模型进行非监督学习的包,支持 diagonal,spherical,tied,full 四种协方差矩阵 (注:diagonal 指每个分量有各自不同对角协方差矩阵, spherical 指每个分量有各自不同的简单协方差矩阵, tied 指所有分量有相同的标准协方差矩阵, full 指每个分量有各自不同的标准协方差矩阵),它对数据进行抽样,并且根据数据估计模型。同时包也提供了相关支持,来帮助用户决定合适的分量数(分量个数)。 _(译注:在高斯混合模型中,我们将每一个高斯分布称为一个分量,即 component )_
> [![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gmm_pdf_0011.png](img/ac23b915eb44e4fa668b8d56785e2c20.jpg)](../auto_examples/mixture/plot_gmm_pdf.html)
>
> **二分量高斯混合模型:** _数据点,以及模型的等概率线。_
高斯混合模型是一个假设所有的数据点都是生成于一个混合的有限数量的并且未知参数的高斯分布的概率模型。 我们可以将混合模型看作是 k-means 聚类算法的推广,它利用了关于数据的协方差结构以及潜在高斯中心的信息。
对应不同的估算策略,Scikit-learn 实现了不同的类来估算高斯混合模型。 详细描述如下:
## 2.1.1\. 高斯混合
> [`GaussianMixture`](generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture "sklearn.mixture.GaussianMixture") 对象实现了用来拟合高斯混合模型的 [期望最大化](#expectation-maximization) (EM) 算法。它还可以为多变量模型绘制置信区间,同时计算 BIC(Bayesian Information Criterion,贝叶斯信息准则)来评估数据中聚类的数量。 [`GaussianMixture.fit`](generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture.fit "sklearn.mixture.GaussianMixture.fit") 提供了从训练数据中学习高斯混合模型的方法。
给定测试数据,通过使用 [`GaussianMixture.predict`](generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture.predict "sklearn.mixture.GaussianMixture.predict") 方法,可以为每个样本分配最有可能对应的高斯分布。
[`GaussianMixture`](generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture "sklearn.mixture.GaussianMixture") 方法中自带了不同的选项来约束不同估类的协方差:spherical,diagonal,tied 或 full 协方差。
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gmm_covariances_0011.png](img/8cc09b4045e2fece3222e52d7333c1e5.jpg)](../auto_examples/mixture/plot_gmm_covariances.html)
示例:
* 一个利用高斯混合模型在鸢尾花卉数据集(IRIS 数据集)上做聚类的协方差实例,请查阅 [GMM covariances](../auto_examples/mixture/plot_gmm_covariances.html#sphx-glr-auto-examples-mixture-plot-gmm-covariances-py)
* 一个绘制密度估计的例子,请查阅 [Density Estimation for a Gaussian mixture](../auto_examples/mixture/plot_gmm_pdf.html#sphx-glr-auto-examples-mixture-plot-gmm-pdf-py)
### 2.1.1.1\. 优缺点 [`GaussianMixture`](generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture "sklearn.mixture.GaussianMixture")
#### 2.1.1.1.1\. 优点
| 速度: | 是混合模型学习算法中最快的算法。 |
| --- | --- |
| 无偏差性: | 这个算法仅仅只是最大化可能性,并不会使均值偏向于0,或是使聚类大小偏向于可能适用或者可能不适用的特殊结构。 |
| --- | --- |
#### 2.1.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)](../auto_examples/mixture/plot_gmm_selection.html)
示例:
* 一个用典型的高斯混合进行的模型选择的例子,请查阅 [Gaussian Mixture Model Selection](../auto_examples/mixture/plot_gmm_selection.html#sphx-glr-auto-examples-mixture-plot-gmm-selection-py)
### 2.1.1.3\. 估计算法期望最大化(EM)
在从无标记的数据中应用高斯混合模型主要的困难在于:通常不知道哪个点来自哪个潜在的分量 (如果可以获取到这些信息,就可以很容易通过相应的数据点,拟合每个独立的高斯分布)。 [期望最大化(Expectation-maximization,EM)](https://en.wikipedia.org/wiki/Expectation%E2%80%93maximization_algorithm) 是一个理论完善的统计算法,其通过迭代方式来解决这个问题。首先,假设一个随机分量 (随机地选择一个中心点,可以用 k-means 算法得到,或者甚至就直接地随便在原点周围选取),并且为每个点计算由模型的每个分量生成的概率。然后,调整模型参数以最大化模型生成这些参数的可能性。重复这个过程,该算法保证过程中的参数总会收敛到局部最优解。
## 2.1.2\. 变分贝叶斯高斯混合
> [`BayesianGaussianMixture`](generated/sklearn.mixture.BayesianGaussianMixture.html#sklearn.mixture.BayesianGaussianMixture "sklearn.mixture.BayesianGaussianMixture") 对象实现了具有变分的高斯混合模型的变体推理算法。 这个API和 [`GaussianMixture`](generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture "sklearn.mixture.GaussianMixture") 相似。
### 2.1.2.1\. 估计算法: 变分推断(variational inference)
变分推断是期望最大化(EM)的扩展,它最大化模型证据(包括先验)的下界,而不是数据似然函数。 变分方法的原理与期望最大化相同(二者都是迭代算法,在寻找由混合产生的每个点的概率和根据所分配的点拟合之间两步交替),但是变分方法通过整合先验分布信息来增加正则化限制。 这避免了期望最大化解决方案中常出现的奇异性,但是也对模型带来了微小的偏差。 变分方法计算过程通常明显较慢,但通常不会慢到无法使用。
由于它的贝叶斯特性,变分算法比预期最大化(EM)需要更多的超参数(即先验分布中的参数),其中最重要的就是 浓度参数 `weight_concentration_prior` 。指定一个低浓度先验,将会使模型将大部分的权重放在少数分量上, 其余分量的权重则趋近 0。而高浓度先验将使混合模型中的大部分分量都有一定的权重。 [`BayesianGaussianMixture`](generated/sklearn.mixture.BayesianGaussianMixture.html#sklearn.mixture.BayesianGaussianMixture "sklearn.mixture.BayesianGaussianMixture") 类的参数实现提出了两种权重分布先验: 一种是利用 Dirichlet distribution(狄利克雷分布)的有限混合模型,另一种是利用 Dirichlet Process(狄利克雷过程)的无限混合模型。 在实际应用上,狄利克雷过程推理算法是近似的,并且使用具有固定最大分量数的截尾分布(称之为 Stick-breaking representation)。使用的分量数实际上几乎总是取决于数据。
下图比较了不同类型的权重浓度先验(参数 `weight_concentration_prior_type` ) 不同的 `weight_concentration_prior` 的值获得的结果。 在这里,我们可以发现 `weight_concentration_prior` 参数的值对获得的有效的激活分量数(即权重较大的分量的数量)有很大影响。 我们也能注意到当先验是 ‘dirichlet_distribution’ 类型时,大的浓度权重先验会导致更均匀的权重,然而 ‘dirichlet_process’ 类型(默认类型)却不是这样。
**[![plot_bgmm](img/d7151d4911c077ded512eba1c6cd2bb0.jpg)](../auto_examples/mixture/plot_concentration_prior.html) [![plot_dpgmm](img/ed352c0fca166fdaa12d7da93676df50.jpg)](../auto_examples/mixture/plot_concentration_prior.html)**
下面的例子将具有固定数量分量的高斯混合模型与 Dirichlet process prior(狄利克雷过程先验)的变分高斯混合模型进行比较。 这里,典型高斯混合模型被指定由 2 个聚类组成的有 5 个分量的数据集。 我们可以看到,具有狄利克雷过程的变分高斯混合可以将自身限制在 2 个分量,而高斯混合必须按照用户先验设置的固定数量的分量来拟合数据。 在例子中,用户选择了 `n_components=5` ,这与真正的试用数据集(toy dataset)的生成分量不符。 稍微观察就能注意到,狄利克雷过程先验的变分高斯混合模型可以采取保守的立场,并且只适合一个分量。
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gmm_0011.png](img/c009aed89f1926875e5637127af6000c.jpg)](../auto_examples/mixture/plot_gmm.html)
在下图中,我们将拟合一个并不能被高斯混合模型很好描述的数据集。 调整 [`BayesianGaussianMixture`](generated/sklearn.mixture.BayesianGaussianMixture.html#sklearn.mixture.BayesianGaussianMixture "sklearn.mixture.BayesianGaussianMixture") 类的参数 `weight_concentration_prior` ,这个参数决定了用来拟合数据的分量数。我们在最后两个图上展示了从两个混合结果产生的随机抽样。
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gmm_sin_0011.png](img/d2b34f499ce1bbd28a276bc0d7afdde1.jpg)](../auto_examples/mixture/plot_gmm_sin.html)
示例:
> * 一个用 [`GaussianMixture`](generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture "sklearn.mixture.GaussianMixture") 和 [`BayesianGaussianMixture`](generated/sklearn.mixture.BayesianGaussianMixture.html#sklearn.mixture.BayesianGaussianMixture "sklearn.mixture.BayesianGaussianMixture") 绘制置信椭圆体的例子, 请查阅 [Gaussian Mixture Model Ellipsoids](../auto_examples/mixture/plot_gmm.html#sphx-glr-auto-examples-mixture-plot-gmm-py)
> * [Gaussian Mixture Model Sine Curve](../auto_examples/mixture/plot_gmm_sin.html#sphx-glr-auto-examples-mixture-plot-gmm-sin-py) 这个例子展示了用 [`GaussianMixture`](generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture "sklearn.mixture.GaussianMixture") 和 [`BayesianGaussianMixture`](generated/sklearn.mixture.BayesianGaussianMixture.html#sklearn.mixture.BayesianGaussianMixture "sklearn.mixture.BayesianGaussianMixture") 来拟合正弦波。
> * 一个使用不同的 `weight_concentration_prior_type` 用以不同的 `weight_concentration_prior` 参数值的:class:&lt;cite&gt;BayesianGaussianMixture&lt;/cite&gt; 来绘制置信椭圆体的例子。 请查阅 [Concentration Prior Type Analysis of Variation Bayesian Gaussian Mixture](../auto_examples/mixture/plot_concentration_prior.html#sphx-glr-auto-examples-mixture-plot-concentration-prior-py)
[`BayesianGaussianMixture`](generated/sklearn.mixture.BayesianGaussianMixture.html#sklearn.mixture.BayesianGaussianMixture "sklearn.mixture.BayesianGaussianMixture") 下的变分推理的优缺点
* * *
#### 2.1.2.1.1\. 优点
| 自动选择: | 当 `weight_concentration_prior` 足够小以及 `n_components` 比模型需要的更大时,变分贝叶斯混合模型计算的结果可以让一些混合权重值趋近 0。 这让模型可以自动选择合适的有效分量数。这仅仅需要提供分量的数量上限。但是请注意,“理想” 的激活分量数只在应用场景中比较明确,在数据挖掘参数设置中通常并不明确。 |
| --- | --- |
| 对参数数量的敏感度较低: | 与总是用尽可以用的分量,因而将为不同数量的组件产生不同的解决方案有限模型不同,变分推理狄利克雷过程先验变分推理( `weight_concentration_prior_type='dirichlet_process'` )改变参数后结果并不会改变太多,使之更稳定和更少的调优。 |
| --- | --- |
| 正则化: | 由于结合了先验信息,变分的解比期望最大化(EM)的解有更少的病理特征(pathological special cases)。 |
| --- | --- |
#### 2.1.2.1.2\. 缺点
| 速度: | 变分推理所需要的额外参数化使推理速度变慢,尽管并没有慢很多。 |
| --- | --- |
| 超参数: | 这个算法需要一个额外的可能需要通过交叉验证进行实验调优的超参数。 |
| --- | --- |
| 偏差: | 在推理算法存在许多隐含的偏差(如果用到狄利克雷过程也会有偏差), 每当这些偏差和数据之间不匹配时,用有限模型可能可以拟合更好的模型。 |
| --- | --- |
### 2.1.2.2\. The Dirichlet Process(狄利克雷过程)
这里我们描述了狄利克雷过程混合的变分推理算法。狄利克雷过程是在 _具有无限大,无限制的分区数的聚类_ 上的先验概率分布。相比于有限高斯混合模型,变分技术让我们在推理时间几乎没有惩罚(penalty)的情况下纳入了高斯混合模型的先验结构。
一个重要的问题是狄利克雷过程是如何实现用无限的,无限制的聚类数,并且结果仍然是一致的。 本文档不做出完整的解释,但是你可以看这里 [stick breaking process](https://en.wikipedia.org/wiki/Dirichlet_process#The_stick-breaking_process) 来帮助你理解它。折棍(stick breaking)过程是狄利克雷过程的衍生。我们每次从一个单位长度的 stick 开始,且每一步都折断剩下的一部分。每次,我们把每个 stick 的长度联想成落入一组混合的点的比例。 最后,为了表示无限混合,我们联想成最后每个 stick 的剩下的部分到没有落入其他组的点的比例。 每段的长度是随机变量,概率与浓度参数成比例。较小的浓度值将单位长度分成较大的 stick 段(即定义更集中的分布)。较高的浓度值将生成更小的 stick 段(即增加非零权重的分量数)。
狄利克雷过程的变分推理技术,在对该无限混合模型进行有限近似情形下,仍然可以运用。 用户不必事先指定想要的分量数,只需要指定浓度参数和混合分量数的上界(假定上界高于“真实”的分量数,仅仅影响算法复杂度,而不是实际上使用的分量数)。
\ No newline at end of file
此差异已折叠。
此差异已折叠。
# 2.4\. 双聚类
校验者:
        [@udy](https://github.com/apachecn/scikit-learn-doc-zh)
翻译者:
        [@程威](https://github.com/apachecn/scikit-learn-doc-zh)
Biclustering 可以使用 [`sklearn.cluster.bicluster`](classes.html#module-sklearn.cluster.bicluster "sklearn.cluster.bicluster") 模块。 Biclustering 算法对数据矩阵的行列同时进行聚类。 同时对行列进行聚类称之为 biclusters。 每一次聚类都会通过原始数据矩阵的一些属性确定一个子矩阵。
例如, 一个矩阵 `(10, 10)` , 一个 bicluster 聚类,有三列二行,就是一个子矩阵 `(3, 2)`
```py
>>> import numpy as np
>>> data = np.arange(100).reshape(10, 10)
>>> rows = np.array([0, 2, 3])[:, np.newaxis]
>>> columns = np.array([1, 2])
>>> data[rows, columns]
array([[ 1, 2],
[21, 22],
[31, 32]])
```
为了可视化, 给定一个 bicluster 聚类,数据矩阵的行列可以重新分配,使得 bi-cluster 是连续的。
算法在如何定义 bicluster 方面有一些不同,常见类型包括:
* 不变的 values , 不变的 rows, 或者不变的 columns。
* 异常高的或者低的值。
* 低方差的子矩阵。
* 相关的 rows 或者 columns。
算法在分配给 bicluster 行列的方式不同, 会导致不同的 bicluster 结构。 当行和列分成分区时,会发生对角线或者棋盘结构。
如果每一行和每一列同属于一种 bicluster ,就重新排列数据矩阵的行和列,会使得 bicluster 呈现对角线。 下面是一个例子,此结构的biclusters 具有比其他行列更高的平均值:
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_spectral_coclustering_0031.png](img/9812effbd6ddac1053fd0b63ebe8c2fb.jpg)](../auto_examples/bicluster/images/sphx_glr_plot_spectral_coclustering_003.png)
在棋盘结构的例子中, 每一行属于所有的列类别, 每一列属于所有的行类别。 下面是一个例子,每个 bicluster 中的值差异较小:
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_spectral_biclustering_0031.png](img/4e0d8935ff82f26fc3a46a3202bd1fa3.jpg)](../auto_examples/bicluster/images/sphx_glr_plot_spectral_biclustering_003.png)
在拟合模型之后, 可以在 `rows_``columns_` 属性中找到行列 cluster membership 。 `rows_[i]` 是一个二进制的向量, 就是属于 bicluster `i` 的一行。 同样的, `columns_[i]` 就表示属于 bicluster `i` 的列。
一些模块也有 `row_labels_``column_labels_` 属性。 这些模块对行列进行分区, 例如对角线或者棋盘 bicluster 结构。
Note
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
> [`SpectralCoclustering`](generated/sklearn.cluster.bicluster.SpectralCoclustering.html#sklearn.cluster.bicluster.SpectralCoclustering "sklearn.cluster.bicluster.SpectralCoclustering") 算法找到的 bicluster 的值比相应的其他行和列更高。
每一个行和列都只属于一个 bicluster, 所以重新分配行和列,使得分区连续显示对角线上的 high value:
Note
算法将输入的数据矩阵看做成二分图:该矩阵的行和列对应于两组顶点,每个条目对应于行和列之间的边,该算法近似的进行归一化,对图进行切割,找到更重的子图。
### 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) , 因为它更小,更有作用。
输入矩阵 ![A](img/eeaf066f8cca5064b706ccfc4728323d.jpg) 被预处理如下:
![A_n = R^{-1/2} A C^{-1/2}](img/def4737951f9990642e65b2403941350.jpg)
![R](img/0fccbdc535b0a4d8003725e8ad606561.jpg) 是 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 对角线矩阵,和 ![\sum_{j} A_{ij}](img/f9e7fc3940e2875bf542aeda657d0718.jpg) 相同, ![C](img/4b6d782a67ac392e97215c46b7590bf7.jpg) 是 ![j](img/7b215f2882ce8aaa33a97e43ad626314.jpg) 的对角吸纳矩阵,等同于 ![\sum_{i} A_{ij}](img/38437ee82743c886e2ebfbb5bd5e0c89.jpg)
奇异值分解, ![A_n = U \Sigma V^\top](img/93074566222e67121a8ab55e90d8e1af.jpg) , 提供了 ![A](img/eeaf066f8cca5064b706ccfc4728323d.jpg) 行列的分区. 左边的奇异值向量给予行分区,右边的奇异值向量给予列分区。
![\ell = \lceil \log_2 k \rceil](img/5e45807b4775fcfaca64f6363102dc5e.jpg) 奇异值向量从第二个开始, 提供所需的分区信息。 这些用于形成矩阵 :&lt;cite&gt;Z&lt;/cite&gt;:
![Z = \begin{bmatrix} R^{-1/2} U \\\\
C^{-1/2} V
\end{bmatrix}](img/33d1bf322bf0f6046a1145dbc264803b.jpg)
![U](img/11c00539ec3e5944afd76511830591db.jpg) 的列是 ![u_2, \dots, u_{\ell +1}](img/1fc7cc5cbdba693962c7708456165810.jpg), 和 ![V](img/5303ecbc70bf5189b8785555c03c54ee.jpg) 相似 。
然后 ![Z](img/8f4e82e4dfa89ac81c42992c603a953e.jpg) 的 rows 通过使用 [k-means](clustering.html#k-means) 进行聚类. `n_rows` 标签提供行分区, 剩下的 `n_columns` 标签 提供 列分区。
例子:
* [A demo of the Spectral Co-Clustering algorithm](../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](../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).
## 2.4.2\. Spectral Biclustering
> [`SpectralBiclustering`](generated/sklearn.cluster.bicluster.SpectralBiclustering.html#sklearn.cluster.bicluster.SpectralBiclustering "sklearn.cluster.bicluster.SpectralBiclustering") 算法假设输入的数据矩阵具有隐藏的棋盘结构。 具有这种结构的矩阵的行列 可能被分区,使得在笛卡尔积中的 大部分 biclusters 的 row clusters 和 column cluster 是近似恒定的。
例如,如果有两个row 分区和三个列分区,每一行属于三个 bicluster ,每一列属于两个 bicluster。
这个算法划分矩阵的行和列,以至于提供一个相应的块状不变的棋盘矩阵,近似于原始矩阵。
### 2.4.2.1\. 数学表示
输入矩阵 ![A](img/eeaf066f8cca5064b706ccfc4728323d.jpg) 先归一化,使得棋盘模式更明显。有三种方法:
1. _独立的行和列归一化_, as in Spectral Co-Clustering. 这个方法使得行和一个常数相加,列和变量相加。
2. **Bistochastization**: 重复行和列归一化直到收敛。该方法使得行和列都相加
   相同的常数。
1. **Log 归一化**: 计算数据矩阵的对数 ![L =
\log A](img/515ee7781876d7344cc383bb43cb30ea.jpg). 列就是 ![\overline{L_{i \cdot}}](img/7ba11d33e68a1e32f2d8d9387bbc1eba.jpg), 行就是 ![\overline{L_{\cdot j}}](img/dc8f095e63b3defdb85fcf54d7d2d8c2.jpg), 总体上来看 ![\overline{L_{\cdot
\cdot}}](img/a0bb00db4979d538e9ca2f0a8b423286.jpg) of ![L](img/639e82f3829a0ad677110cc33a028c98.jpg) 被计算的. 最后矩阵通过下面的公式计算
![K_{ij} = L_{ij} - \overline{L_{i \cdot}} - \overline{L_{\cdot
j}} + \overline{L_{\cdot \cdot}}](img/d670eea3215462f64d74d9366622a490.jpg)
归一化后,首先少量的奇异值向量被计算,只是在 Spectral Co-Clustering 算法中。
如果使用 log 归一化,则所有的奇异向量都是有意义的。但是, 如果是独立的归一化或双曲线化 被使用,第一个奇异矢量, ![u_1](img/d35b85fc7ddd819b1fec30a6ef410fc9.jpg) 和 ![v_1](img/4b64f9acb85d7f2b6169e5a58f255e44.jpg)。 会被丢弃。 从现在开始, “first” 奇异值向量与 ![u_2 \dots u_{p+1}](img/0d0c4e4a12f6e3bb90bf30161951dcc5.jpg) 和 ![v_2 \dots v_{p+1}](img/522bc8957a5d77edbdc533813dbef086.jpg) 相关,除了日志归一化的情况。
给定这些奇异值向量, 将他们排序,通过分段常数向量保证最佳近似。 使用一维 k-means 找到每个向量的近似值 并使用欧几里得距离得分。 Some subset of 最好的左右奇异值向量的子集被选择。 下一步, 数据预计到这个最佳子集的奇异向量和聚类。
例如,如果 ![p](img/e2f9b08680b30cfb80102f69264fdd5c.jpg) 奇异值向量被计算,最好按照描述找到 ![q](img/dc074c105944810a277030dfab298376.jpg) , 其中 ![q&lt;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](../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).
## 2.4.3\. Biclustering 评测
有两种评估双组分结果的方法:内部和外部。 诸如群集稳定性等内部措施只依赖于数据和结果本身。 目前在scikit-learn中没有内部的二集群措施。外部措施是指外部信息来源,例如真正的解决方案。 当使用真实数据时,真正的解决方案通常是未知的,但是,由于真正的解决方案是已知的,因此人造数据的双重分析可能对于评估算法非常有用。
为了将一组已发现的双组分与一组真正的双组分进行比较, 需要两个相似性度量:单个双色团体的相似性度量,以及将这些个体相似度结合到总分中的方法。
为了比较单个双核,已经采用了几种措施。现在,只有Jaccard索引被实现:
![J(A, B) = \frac{|A \cap B|}{|A| + |B| - |A \cap B|}](img/287e15c4b3d9b3f227fdc8e364609382.jpg)
```py
biclusters, 是交叉点的元素的数量
```
Jaccard 索引 达到最小值0,当 biclusters 不重叠的时候,并且当他们相同干的时候,最大值为1。
有些方法已经开发出来,用来比较两个 biclusters 的数据集。 从现在开始 之后 [`consensus_score`](generated/sklearn.metrics.consensus_score.html#sklearn.metrics.consensus_score "sklearn.metrics.consensus_score") (Hochreiter et. al., 2010) 是可以用:
1. 使用 Jaccard 索引或类似措施,计算 biclusters 的 bicluster 相似性。
2. 以一对一的方式将 bicluster 分从一组分配给另一组,以最大化其相似性的总和。该步骤使用匈牙利算法执行。
3. 相似性的最终总和除以较大集合的大小。
最小共识得分为0,发生在所有 biclusters 完全不相似时。当两组 biclusters 相同时,最大分数为1。
参考文献:
* Hochreiter, Bodenhofer, et. al., 2010\. [FABIA: factor analysis for bicluster acquisition](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2881408/).
\ No newline at end of file
此差异已折叠。
# 2.6\. 协方差估计
校验者:
        [@李昊伟](https://github.com/apachecn/scikit-learn-doc-zh)
        [@小瑶](https://github.com/apachecn/scikit-learn-doc-zh)
翻译者:
        [@柠檬](https://github.com/apachecn/scikit-learn-doc-zh)
许多统计问题在某一时刻需要估计一个总体的协方差矩阵,这可以看作是对数据集散点图形状的估计。 大多数情况下,基于样本的估计(基于其属性,如尺寸,结构,均匀性), 对估计质量有很大影响。 &lt;cite&gt;sklearn.covariance&lt;/cite&gt; 方法的目的是 提供一个能在各种设置下准确估计总体协方差矩阵的工具。
我们假设观察是独立的,相同分布的 (i.i.d.)。
\ No newline at end of file
# 2.7\. 经验协方差
已知数据集的协方差矩阵与经典 _maximum likelihood estimator(最大似然估计)_ (或 “经验协方差”) 很好地近似,条件是与特征数量(描述观测值的变量)相比,观测数量足够大。 更准确地说,样本的最大似然估计是相应的总体协方差矩阵的无偏估计。
样本的经验协方差矩阵可以使用 [`empirical_covariance`](generated/sklearn.covariance.empirical_covariance.html#sklearn.covariance.empirical_covariance "sklearn.covariance.empirical_covariance") 包的函数计算 , 或者通过 [`EmpiricalCovariance`](generated/sklearn.covariance.EmpiricalCovariance.html#sklearn.covariance.EmpiricalCovariance "sklearn.covariance.EmpiricalCovariance") 使用 [`EmpiricalCovariance.fit`](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](../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`](generated/sklearn.covariance.EmpiricalCovariance.html#sklearn.covariance.EmpiricalCovariance "sklearn.covariance.EmpiricalCovariance") object to data.
\ No newline at end of file
{% raw %}
# 2.8\. 收敛协方差
## 2.8.1\. 基本收敛
尽管是协方差矩阵的无偏估计, 最大似然估计不是协方差矩阵的特征值的一个很好的估计, 所以从反演得到的精度矩阵是不准确的。 有时,甚至出现数学原因,经验协方差矩阵不能反转。 为了避免这样的反演问题,引入了经验协方差矩阵的一种变换方式:`shrinkage`
在 scikit-learn 中,该变换(具有用户定义的收缩系数) 可以直接应用于使用 [`shrunk_covariance`](generated/sklearn.covariance.shrunk_covariance.html#sklearn.covariance.shrunk_covariance "sklearn.covariance.shrunk_covariance") 方法预先计算协方差。 此外,协方差的收缩估计可以用 [`ShrunkCovariance`](generated/sklearn.covariance.ShrunkCovariance.html#sklearn.covariance.ShrunkCovariance "sklearn.covariance.ShrunkCovariance") 对象 及其 [`ShrunkCovariance.fit`](generated/sklearn.covariance.ShrunkCovariance.html#sklearn.covariance.ShrunkCovariance.fit "sklearn.covariance.ShrunkCovariance.fit") 方法拟合到数据中。 再次,根据数据是否居中,结果会不同,所以可能要准确使用参数 `assume_centered`
在数学上,这种收缩在于减少经验协方差矩阵的最小和最大特征值之间的比率。 可以通过简单地根据给定的偏移量移动每个特征值来完成, 这相当于找到协方差矩阵的l2惩罚的最大似然估计器(l2-penalized Maximum Likelihood Estimator)。在实践中,收缩归结为简单的凸变换: ![\Sigma_{\rm
shrunk} = (1-\alpha)\hat{\Sigma} + \alpha\frac{{\rm
Tr}\hat{\Sigma}}{p}\rm Id](img/8f62a01deaf67a7f9960d853abd9dcca.jpg).
选择收缩量, ![\alpha](img/d8b3d5242d513369a44f8bf0c6112744.jpg) 相当于设置偏差/方差权衡,下面将讨论。
示例:
* See [Shrinkage covariance estimation: LedoitWolf vs OAS and max-likelihood](../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`](generated/sklearn.covariance.ShrunkCovariance.html#sklearn.covariance.ShrunkCovariance "sklearn.covariance.ShrunkCovariance") object to data.
## 2.8.2\. Ledoit-Wolf 收敛
在他们的 2004 年的论文 [[1]](#id6) 中, O.Ledoit 和 M.Wolf 提出了一个公式, 用来计算优化的收敛系数 ![\alpha](img/d8b3d5242d513369a44f8bf0c6112744.jpg) , 它使得估计协方差和实际协方差矩阵之间的均方差进行最小化。
&lt;cite&gt;sklearn.covariance&lt;/cite&gt; 包中,可以使用 [`ledoit_wolf`](generated/sklearn.covariance.ledoit_wolf.html#sklearn.covariance.ledoit_wolf "sklearn.covariance.ledoit_wolf") 函数来计算样本的 基于 Ledoit-Wolf estimator 的协方差, 或者可以针对同样的样本 通过拟合 [`LedoitWolf`](generated/sklearn.covariance.LedoitWolf.html#sklearn.covariance.LedoitWolf "sklearn.covariance.LedoitWolf") 对象来获得。
例子:
* See [Shrinkage covariance estimation: LedoitWolf vs OAS and max-likelihood](../auto_examples/covariance/plot_covariance_estimation.html#sphx-glr-auto-examples-covariance-plot-covariance-estimation-py) 关于如何将 [`LedoitWolf`](generated/sklearn.covariance.LedoitWolf.html#sklearn.covariance.LedoitWolf "sklearn.covariance.LedoitWolf") 对象与数据拟合, 并将 Ledoit-Wolf 估计器的性能进行可视化的示例。
参考文献:
| [[1]](#id5) | 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.8.3\. Oracle 近似收缩
在数据为高斯分布的假设下,Chen et al. 等 [[2]](#id8) 推导出了一个公式,旨在 产生比 Ledoit 和 Wolf 公式具有更小均方差的收敛系数。 所得到的估计器被称为协方差的 Oracle 收缩近似估计器。
&lt;cite&gt;sklearn.covariance&lt;/cite&gt; 包中, OAS 估计的协方差可以使用函数 [`oas`](generated/sklearn.covariance.oas.html#sklearn.covariance.oas "sklearn.covariance.oas") 对样本进行计算,或者可以通过将 [`OAS`](generated/sklearn.covariance.OAS.html#sklearn.covariance.OAS "sklearn.covariance.OAS") 对象拟合到相同的样本来获得。
[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_covariance_estimation_0011.png](img/7f37b8cd4340f3d0981f518f14670c26.jpg)](../auto_examples/covariance/plot_covariance_estimation.html)
设定收缩时的偏差方差权衡:比较 Ledoit-Wolf 和 OAS 估计量的选择
参考文献:
| [[2]](#id7) | 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](../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`](generated/sklearn.covariance.OAS.html#sklearn.covariance.OAS "sklearn.covariance.OAS") object to data.
* See [Ledoit-Wolf vs OAS estimation](../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`](generated/sklearn.covariance.LedoitWolf.html#sklearn.covariance.LedoitWolf "sklearn.covariance.LedoitWolf") and an [`OAS`](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)](../auto_examples/covariance/plot_lw_vs_oas.html)
{% endraw %}
\ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册