diff --git a/README.md b/README.md index 2759b9b53f5223544361ebbeed579ebb7421f605..06cd474afe5c78378c8a14880166f2717f446a04 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# scikit-learn (sklearn) 官方文档中文版 +#
scikit-learn (sklearn) 官方文档中文版
-![](docs/img/scikit-learn-logo.png) +![](img/logo/scikit-learn-logo.png) -
scikit-learn 是基于 Python 语言的机器学习工具
+scikit-learn (sklearn) 是基于 Python 语言的机器学习工具 1. 简单高效的数据挖掘和数据分析工具 2. 可供大家在各种环境中重复使用 @@ -12,12 +12,8 @@
- - - - - - + +
sklearn 0.21.3 中文翻译
sklearn 0.19.x 中文翻译
sklearn 0.21.3 中文文档sklearn 0.21.3 中文翻译 sklearn 英文官网
@@ -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` 呢? +* 因为我们做翻译这事情是觉得开心和装逼,比较纯粹! +* 你如果喜欢,你可以来参与/甚至负责这个项目,没人任何学历和背景的限制 + ## 赞助我们 微信&支付宝 diff --git a/SUMMARY.md b/SUMMARY.md index 8bb97ea8943c808d57be066a97b34d99066780ff..064a6dbbf2a93cf3aa666d948a4f9fc90753c8c9 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -1,73 +1,73 @@ -* [安装 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) diff --git a/ads.txt b/ads.txt new file mode 100644 index 0000000000000000000000000000000000000000..7e31cf1f69f6c0cb2f7d03f1a12212b5cc83bda8 --- /dev/null +++ b/ads.txt @@ -0,0 +1 @@ +google.com, pub-3565452474788507, DIRECT, f08c47fec0942fa0 \ No newline at end of file diff --git a/docs/0.19.x.zip b/docs/0.19.x.zip new file mode 100644 index 0000000000000000000000000000000000000000..eb1fa1dccd7accedded468197589f2d2a0dbf5f1 Binary files /dev/null and b/docs/0.19.x.zip differ diff --git a/docs/0.19.x/1.md b/docs/0.19.x/1.md deleted file mode 100755 index db1804738780d3a8cd2fd76749d43461c86d5ddd..0000000000000000000000000000000000000000 --- a/docs/0.19.x/1.md +++ /dev/null @@ -1,196 +0,0 @@ -# 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 diff --git a/docs/0.19.x/10.md b/docs/0.19.x/10.md deleted file mode 100755 index 77c9ff3c9570a249ff40c8246c0a457538951a3d..0000000000000000000000000000000000000000 --- a/docs/0.19.x/10.md +++ /dev/null @@ -1,110 +0,0 @@ -# 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: <cite>i</cite> ,这个关系式可以简化为 - - -![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 < 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 diff --git a/docs/0.19.x/11.md b/docs/0.19.x/11.md deleted file mode 100755 index ed5e13bd0cd2f2a64fcd6d21bace8eb82fc8ff09..0000000000000000000000000000000000000000 --- a/docs/0.19.x/11.md +++ /dev/null @@ -1,283 +0,0 @@ -# 1.10\. 决策树 - -校验者: -        [@文谊](https://github.com/apachecn/scikit-learn-doc-zh) -        [@皮卡乒的皮卡乓](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@I Remember](https://github.com/apachecn/scikit-learn-doc-zh) - -**Decision Trees (DTs)** 是一种用来 [classification](#tree-classification) 和 [regression](#tree-regression) 的无参监督学习方法。其目的是创建一种模型从数据特征中学习简单的决策规则来预测一个目标变量的值。 - -例如,在下面的图片中,决策树通过if-then-else的决策规则来学习数据从而估测数一个正弦图像。决策树越深入,决策规则就越复杂并且对数据的拟合越好。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_tree_regression_0011.png](img/f0b72920659961ba27aec1da59f3019c.jpg)](../auto_examples/tree/plot_tree_regression.html) - -决策树的优势: - -> * 便于理解和解释。树的结构可以可视化出来。 -> -> > * 训练需要的数据少。其他机器学习模型通常需要数据规范化,比如构建虚拟变量和移除缺失值,不过请注意,这种模型不支持缺失值。 -> -> * 由于训练决策树的数据点的数量导致了决策树的使用开销呈指数分布(训练树模型的时间复杂度是参与训练数据点的对数值)。 -> * 能够处理数值型数据和分类数据。其他的技术通常只能用来专门分析某一种变量类型的数据集。详情请参阅算法。 -> * 能够处理多路输出的问题。 -> * 使用白盒模型。如果某种给定的情况在该模型中是可以观察的,那么就可以轻易的通过布尔逻辑来解释这种情况。相比之下,在黑盒模型中的结果就是很难说明清 楚地。 -> * 可以通过数值统计测试来验证该模型。这对事解释验证该模型的可靠性成为可能。 -> * 即使该模型假设的结果与真实模型所提供的数据有些违反,其表现依旧良好。 - -决策树的缺点包括: - -> * 决策树模型容易产生一个过于复杂的模型,这样的模型对数据的泛化性能会很差。这就是所谓的过拟合.一些策略像剪枝、设置叶节点所需的最小样本数或设置数的最大深度是避免出现 该问题最为有效地方法。 -> * 决策树可能是不稳定的,因为数据中的微小变化可能会导致完全不同的树生成。这个问题可以通过决策树的集成来得到缓解 -> * 在多方面性能最优和简单化概念的要求下,学习一棵最优决策树通常是一个NP难问题。因此,实际的决策树学习算法是基于启发式算法,例如在每个节点进 行局部最优决策的贪心算法。这样的算法不能保证返回全局最优决策树。这个问题可以通过集成学习来训练多棵决策树来缓解,这多棵决策树一般通过对特征和样本有放回的随机采样来生成。 -> * 有些概念很难被决策树学习到,因为决策树很难清楚的表述这些概念。例如XOR,奇偶或者复用器的问题。 -> * 如果某些类在问题中占主导地位会使得创建的决策树有偏差。因此,我们建议在拟合前先对数据集进行平衡。 - -## 1.10.1\. 分类 - -[`DecisionTreeClassifier`](generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier "sklearn.tree.DecisionTreeClassifier") 是能够在数据集上执行多分类的类,与其他分类器一样,[`DecisionTreeClassifier`](generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier "sklearn.tree.DecisionTreeClassifier") 采用输入两个数组:数组X,用 `[n_samples, n_features]` 的方式来存放训练样本。整数值数组Y,用 `[n_samples]` 来保存训练样本的类标签: - -```py ->>> from sklearn import tree ->>> X = [[0, 0], [1, 1]] ->>> Y = [0, 1] ->>> clf = tree.DecisionTreeClassifier() ->>> clf = clf.fit(X, Y) - -``` - -执行通过之后,可以使用该模型来预测样本类别: - -```py ->>> clf.predict([[2., 2.]]) -array([1]) - -``` - -另外,也可以预测每个类的概率,这个概率是叶中相同类的训练样本的分数: - -```py ->>> clf.predict_proba([[2., 2.]]) -array([[ 0., 1.]]) - -``` - -[`DecisionTreeClassifier`](generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier "sklearn.tree.DecisionTreeClassifier") 既能用于二分类(其中标签为[-1,1])也能用于多分类(其中标签为[0,…,k-1])。使用Lris数据集,我们可以构造一个决策树,如下所示: - -```py ->>> from sklearn.datasets import load_iris ->>> from sklearn import tree ->>> iris = load_iris() ->>> clf = tree.DecisionTreeClassifier() ->>> clf = clf.fit(iris.data, iris.target) - -``` - -经过训练,我们可以使用 [`export_graphviz`](generated/sklearn.tree.export_graphviz.html#sklearn.tree.export_graphviz "sklearn.tree.export_graphviz") 导出器以 [Graphviz](http://www.graphviz.org/) 格式导出决策树. 如果你是用 [conda](http://conda.io) 来管理包,那么安装 graphviz 二进制文件和 python 包可以用以下指令安装 - -> conda install python-graphviz - -或者,可以从 graphviz 项目主页下载 graphviz 的二进制文件,并从 pypi 安装 Python 包装器,并安装 <cite>pip install graphviz</cite> .以下是在整个 iris 数据集上训练的上述树的 graphviz 导出示例; 其结果被保存在 <cite>iris.pdf</cite> 中: - -```py - >>> import graphviz # doctest: +SKIP - >>> dot_data = tree.export_graphviz(clf, out_file=None) # doctest: +SKIP - >>> graph = graphviz.Source(dot_data) # doctest: +SKIP - >>> graph.render("iris") # doctest: +SKIP - -:func:`export_graphviz` 出导出还支持各种美化,包括通过他们的类着色节点(或回归值),如果需要,使用显式变量和类名。Jupyter notebook也可以自动找出相同的模块:: - - >>> dot_data = tree.export_graphviz(clf, out_file=None, # doctest: +SKIP - feature_names=iris.feature_names, # doctest: +SKIP - class_names=iris.target_names, # doctest: +SKIP - filled=True, rounded=True, # doctest: +SKIP - special_characters=True) # doctest: +SKIP - >>> graph = graphviz.Source(dot_data) # doctest: +SKIP - >>> graph # doctest: +SKIP - -``` - -![http://sklearn.apachecn.org/cn/0.19.0/_images/iris.svg](img/eac4cdf0a783ddcd7098023e25bb16ef.jpg) - -执行通过之后,可以使用该模型预测样品类别: - -```py ->>> clf.predict(iris.data[:1, :]) -array([0]) - -``` - -或者,可以根据决策树叶子树里训练样本中的相同类的分数,使得类预测成为可能: - -```py ->>> clf.predict_proba(iris.data[:1, :]) -array([[ 1., 0., 0.]]) - -``` - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_iris_0013.png](img/cba233fc4178da6d3fe0b177cbbb6318.jpg)](../auto_examples/tree/plot_iris.html) - -示例: - -* [Plot the decision surface of a decision tree on the iris dataset](../auto_examples/tree/plot_iris.html#sphx-glr-auto-examples-tree-plot-iris-py) - -## 1.10.2\. 回归 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_tree_regression_0011.png](img/f0b72920659961ba27aec1da59f3019c.jpg)](../auto_examples/tree/plot_tree_regression.html) - -决策树通过使用 [`DecisionTreeRegressor`](generated/sklearn.tree.DecisionTreeRegressor.html#sklearn.tree.DecisionTreeRegressor "sklearn.tree.DecisionTreeRegressor") 类也可以用来解决回归问题。如在分类设置中,拟合方法将数组X和数组y作为参数,只有在这种情况下,y数组预期才是浮点值: - -```py ->>> from sklearn import tree ->>> X = [[0, 0], [2, 2]] ->>> y = [0.5, 2.5] ->>> clf = tree.DecisionTreeRegressor() ->>> clf = clf.fit(X, y) ->>> clf.predict([[1, 1]]) -array([ 0.5]) - -``` - -示例: - -* [Decision Tree Regression](../auto_examples/tree/plot_tree_regression.html#sphx-glr-auto-examples-tree-plot-tree-regression-py) - -## 1.10.3\. 多值输出问题 - -一个多值输出问题是一个类似当 Y 是大小为 `[n_samples, n_outputs]` 的2d数组时,有多个输出值需要预测的监督学习问题。 - -当输出值之间没有关联时,一个很简单的处理该类型的方法是建立一个n独立模型,即每个模型对应一个输出,然后使用这些模型来独立地预测n个输出中的每一个。然而,由于可能与相同输入相关的输出值本身是相关的,所以通常更好的方法是构建能够同时预测所有n个输出的单个模型。首先,因为仅仅是建立了一个模型所以训练时间会更短。第二,最终模型的泛化性能也会有所提升。对于决策树,这一策略可以很容易地用于多输出问题。 这需要以下更改: - -> * 在叶中存储n个输出值,而不是一个; -> * 通过计算所有n个输出的平均减少量来作为分裂标准. - -该模块通过在 `DecisionTreeClassifier `和 :class:`DecisionTreeRegressor` 中实现该策略来支持多输出问题。如果决策树与大小为 `[n_samples, n_outputs]` 的输出数组Y向匹配,则得到的估计器将: - -```py -* ``predict`` 是输出n_output的值 - -* 在 ``predict_proba`` 上输出 n_output 数组列表 - -``` - -用多输出决策树进行回归分析 [Multi-output Decision Tree Regression](../auto_examples/tree/plot_tree_regression_multioutput.html#sphx-glr-auto-examples-tree-plot-tree-regression-multioutput-py) 。 在该示例中,输入X是单个实数值,并且输出Y是X的正弦和余弦。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_tree_regression_multioutput_0011.png](img/c6b27df44672e7fa50d1d81ffbbebfbd.jpg)](../auto_examples/tree/plot_tree_regression_multioutput.html) - -使用多输出树进行分类,在 [Face completion with a multi-output estimators](../auto_examples/plot_multioutput_face_completion.html#sphx-glr-auto-examples-plot-multioutput-face-completion-py) 中进行了演示。 在该示例中,输入X是面的上半部分的像素,并且输出Y是这些面的下半部分的像素。 - -[](../auto_examples/plot_multioutput_face_completion.html) - -示例: - -* [Multi-output Decision Tree Regression](../auto_examples/tree/plot_tree_regression_multioutput.html#sphx-glr-auto-examples-tree-plot-tree-regression-multioutput-py) -* [Face completion with a multi-output estimators](../auto_examples/plot_multioutput_face_completion.html#sphx-glr-auto-examples-plot-multioutput-face-completion-py) - -参考: - -* M. Dumont et al, [Fast multi-class image annotation with random subwindows and multiple output randomized trees](http://www.montefiore.ulg.ac.be/services/stochastic/pubs/2009/DMWG09/dumont-visapp09-shortpaper.pdf), International Conference on Computer Vision Theory and Applications 2009 - -## 1.10.4\. 复杂度分析 - -总体来说,用来构建平衡二叉树的运行时间为 ![O(n_{samples}n_{features}\log(n_{samples}))](img/264ba68c53c2e2867b9e307e8b940d49.jpg) 查询时间为 ![O(\log(n_{samples}))](img/ec29f705a6be2ce512a10c266dd755f0.jpg) 。尽管树的构造算法尝试生成平衡树,但它们并不总能保持平衡。假设子树能大概保持平衡,每个节点的成本包括通过 ![O(n_{features})](img/92570652e9c52768c76f5b9cf8f97a28.jpg) 时间复杂度来搜索找到提供熵减小最大的特征。每个节点的花费为 ![O(n_{features}n_{samples}\log(n_{samples}))](img/6c8db7614197ace6a4bf0f437c085e6d.jpg) ,从而使得整个决策树的构造成本为 ![O(n_{features}n_{samples}^{2}\log(n_{samples}))](img/2bf67de05d37f31bd2154fdc96690102.jpg) 。 - -Scikit-learn提供了更多有效的方法来创建决策树。初始实现(如上所述)将重新计算沿着给定特征的每个新分割点的类标签直方图(用于分类)或平均值(用于回归)。与分类所有的样本特征,然后再次训练时运行标签计数,可将每个节点的复杂度降低为 ![O(n_{features}\log(n_{samples}))](img/93cdc140e4de4cbb0d093fc7ad5c6a36.jpg) ,则总的成本花费为 ![O(n_{features}n_{samples}\log(n_{samples}))](img/6c8db7614197ace6a4bf0f437c085e6d.jpg) 。这是一种对所有基于树的算法的改进选项。默认情况下,对于梯度提升模型该算法是打开的,一般来说它会让训练速度更快。但对于所有其他算法默认是关闭的,当训练深度很深的树时往往会减慢训练速度。 - -## 1.10.5\. 实际使用技巧 - -> > * 对于拥有大量特征的数据决策树会出现过拟合的现象。获得一个合适的样本比例和特征数量十分重要,因为在高维空间中只有少量的样本的树是十分容易过拟合的。 -> > * 考虑事先进行降维( [PCA](decomposition.html#pca) , [ICA](decomposition.html#ica) ,使您的树更好地找到具有分辨性的特征。 -> > * 通过 `export` 功能可以可视化您的决策树。使用 `max_depth=3` 作为初始树深度,让决策树知道如何适应您的数据,然后再增加树的深度。 -> > * 请记住,填充树的样本数量会增加树的每个附加级别。使用 `max_depth` 来控制输的大小防止过拟合。 -> > * 通过使用 `min_samples_split` 和 `min_samples_leaf` 来控制叶节点上的样本数量。当这个值很小时意味着生成的决策树将会过拟合,然而当这个值很大时将会不利于决策树的对样本的学习。所以尝试 `min_samples_leaf=5` 作为初始值。如果样本的变化量很大,可以使用浮点数作为这两个参数中的百分比。两者之间的主要区别在于 `min_samples_leaf` 保证叶结点中最少的采样数,而 `min_samples_split` 可以创建任意小的叶子,尽管在文献中 `min_samples_split` 更常见。 -> > * 在训练之前平衡您的数据集,以防止决策树偏向于主导类.可以通过从每个类中抽取相等数量的样本来进行类平衡,或者优选地通过将每个类的样本权重 (`sample_weight`) 的和归一化为相同的值。还要注意的是,基于权重的预修剪标准 (`min_weight_fraction_leaf`) 对于显性类别的偏倚偏小,而不是不了解样本权重的标准,如 `min_samples_leaf` 。 -> -> * 如果样本被加权,则使用基于权重的预修剪标准 `min_weight_fraction_leaf` 来优化树结构将更容易,这确保叶节点包含样本权重的总和的至少一部分。 -> * 所有的决策树内部使用 `np.float32` 数组 ,如果训练数据不是这种格式,将会复制数据集。 -> * 如果输入的矩阵X为稀疏矩阵,建议您在调用fit之前将矩阵X转换为稀疏的``csc_matrix`` ,在调用predict之前将 `csr_matrix` 稀疏。当特征在大多数样本中具有零值时,与密集矩阵相比,稀疏矩阵输入的训练时间可以快几个数量级。 - -## 1.10.6\. 决策树算法: ID3, C4.5, C5.0 和 CART - -所有种类的决策树算法有哪些以及它们之间的区别?scikit-learn 中实现何种算法呢? - -ID3(Iterative Dichotomiser 3)由 Ross Quinlan 在1986年提出。该算法创建一个多路树,找到每个节点(即以贪心的方式)分类特征,这将产生分类目标的最大信息增益。决策树发展到其最大尺寸,然后通常利用剪枝来提高树对未知数据的泛华能力。 - -C4.5 是 ID3 的后继者,并且通过动态定义将连续属性值分割成一组离散间隔的离散属性(基于数字变量),消除了特征必须被明确分类的限制。C4.5 将训练的树(即,ID3算法的输出)转换成 if-then 规则的集合。然后评估每个规则的这些准确性,以确定应用它们的顺序。如果规则的准确性没有改变,则需要决策树的树枝来解决。 - -C5.0 是 Quinlan 根据专有许可证发布的最新版本。它使用更少的内存,并建立比 C4.5 更小的规则集,同时更准确。 - -CART(Classification and Regression Trees (分类和回归树))与 C4.5 非常相似,但它不同之处在于它支持数值目标变量(回归),并且不计算规则集。CART 使用在每个节点产生最大信息增益的特征和阈值来构造二叉树。 - -scikit-learn 使用 CART 算法的优化版本。 - -## 1.10.7\. 数学表达 - -给定训练向量 ![x_i \in R^n](img/02848ebe72029503696b6523e4052c0c.jpg), i=1,…, l 和标签向量 ![y \in R^l](img/405095229d24f3525298dc6f99077666.jpg)。决策树递归地分割空间,例如将有相同标签的样本归为一组。 - -将 ![m](img/94156b879a7455cb0d516efa9c9c0991.jpg) 节点上的数据用 ![Q](img/87dfb2676632ee8a92713f4861ccc84e.jpg) 来表示。每一个候选组 ![\theta = (j, t_m)](img/c3567127ff1f678758b338a50e9c4880.jpg) 包含一个特征 ![j](img/7b215f2882ce8aaa33a97e43ad626314.jpg) 和阈值 ![t_m](img/264dc5b617a5aa98151c4ea6975e9a90.jpg) 将,数据分成 ![Q_{left}(\theta)](img/32246af90101d1607825a589ebea6880.jpg) 和 ![Q_{right}(\theta)](img/6c70b46b88f05e00e292f1a0f98d2aa8.jpg) 子集。 - - -![Q_{left}(\theta) = {(x, y) | x_j <= t_m} -Q_{right}(\theta) = Q \setminus Q_{left}(\theta)](img/d5a26fae0e652d4e951d9ec9ae1a01e5.jpg) - - -使用不纯度函数 ![H()](img/b382a1d99ddfadf17b35d32b0b156b5b.jpg) 计算 ![m](img/94156b879a7455cb0d516efa9c9c0991.jpg) 处的不纯度,其选择取决于正在解决的任务(分类或回归) - - -![G(Q, \theta) = \frac{n_{left}}{N_m} H(Q_{left}(\theta)) -+ \frac{n_{right}}{N_m} H(Q_{right}(\theta))](img/c57c1c5b116586e218fdaa3d0696d246.jpg) - - -选择使不纯度最小化的参数 - -![\theta^* = \operatorname{argmin}_\theta G(Q, \theta)](img/af78ae4aadd0f0961cf4d9564897b1ff.jpg) - -重新计算子集 ![Q_{left}(\theta^*)](img/33eb0dacfcc0df16c84bfaed52d31859.jpg) 和 ![Q_{right}(\theta^*)](img/a1bd06d03e764db224f0e10b4f024bdd.jpg) ,直到达到最大允许深度,![N_m < \min_{samples}](img/0fec9d3a9833abc417480a03be883b3e.jpg) 或 ![N_m = 1](img/be71aa00cd62f24b4657f7993d1b3a45.jpg)。 - -### 1.10.7.1\. 分类标准 - -对于节点 ![m](img/94156b879a7455cb0d516efa9c9c0991.jpg) ,表示具有 ![N_m](img/ee68d82006856c6355aa0dca42cd5054.jpg) 个观测值的区域 ![R_m](img/018a312145ba4dee4c257135644ced91.jpg) ,如果分类结果采用值是 0,1,…,K-1 的值,让 - -![p_{mk} = 1/ N_m \sum_{x_i \in R_m} I(y_i = k)](img/17430579d0bcbef3e2d99eba470792c8.jpg) - -是节点 ![m](img/94156b879a7455cb0d516efa9c9c0991.jpg) 中k类观测的比例通常用来处理杂质的方法是Gini - -![H(X_m) = \sum_k p_{mk} (1 - p_{mk})](img/c236b4ae30d04ba7fae7fa499a2ba9ea.jpg) - -Cross-Entropy (交叉熵) - -![H(X_m) = - \sum_k p_{mk} \log(p_{mk})](img/a539f6901c50549f8d30f6d7f6f3e177.jpg) - -和 Misclassification (错误分类) - -![H(X_m) = 1 - \max(p_{mk})](img/b146555411b22bcf0ad73d4720455038.jpg) - -在 ![X_m](img/fe5ed835e0d3407e3f2d694d8bc049a1.jpg) 训练 ![m](img/94156b879a7455cb0d516efa9c9c0991.jpg) 节点上的数据时。 - -### 1.10.7.2\. 回归标准 - -如果目标是连续性的值,那么对于节点 ![m](img/94156b879a7455cb0d516efa9c9c0991.jpg) ,表示具有 ![N_m](img/ee68d82006856c6355aa0dca42cd5054.jpg) 个观测值的区域 ![R_m](img/018a312145ba4dee4c257135644ced91.jpg) ,对于以后的分裂节点的位置的决定常用的最小化标准是均方差和平均绝对误差,前者使用终端节点处的平均值来最小化L2误差,后者使用终端节点处的中值来最小化 L1 误差。 - -Mean Squared Error (均方误差): - - -![c_m = \frac{1}{N_m} \sum_{i \in N_m} y_i -H(X_m) = \frac{1}{N_m} \sum_{i \in N_m} (y_i - c_m)^2](img/0cd05229735908f0f99e59deb90a4434.jpg) - - -Mean Absolute Error(平均绝对误差): - - -![\bar{y_m} = \frac{1}{N_m} \sum_{i \in N_m} y_i -H(X_m) = \frac{1}{N_m} \sum_{i \in N_m} |y_i - \bar{y_m}|](img/3b70a99c882760b6d8ed230e145ed742.jpg) - - -在 ![X_m](img/fe5ed835e0d3407e3f2d694d8bc049a1.jpg) 训练 ![m](img/94156b879a7455cb0d516efa9c9c0991.jpg) 节点上的数据时。 - -示例: - -* [https://en.wikipedia.org/wiki/Decision_tree_learning](https://en.wikipedia.org/wiki/Decision_tree_learning) -* [https://en.wikipedia.org/wiki/Predictive_analytics](https://en.wikipedia.org/wiki/Predictive_analytics) -* L. Breiman, J. Friedman, R. Olshen, and C. Stone. Classification and Regression Trees. Wadsworth, Belmont, CA, 1984. -* J.R. Quinlan. C4\. 5: programs for machine learning. Morgan Kaufmann, 1993. -* T. Hastie, R. Tibshirani and J. Friedman. Elements of Statistical Learning, Springer, 2009. \ No newline at end of file diff --git a/docs/0.19.x/12.md b/docs/0.19.x/12.md deleted file mode 100755 index 941f51f841af76619ca5fb3830ba001bdbe9300c..0000000000000000000000000000000000000000 --- a/docs/0.19.x/12.md +++ /dev/null @@ -1,723 +0,0 @@ -# 1.11\. 集成方法 - -校验者: -        [@Dream on dreamer.](https://github.com/apachecn/scikit-learn-doc-zh) -        [@zehuichen123](https://github.com/zehuichen123) -        [@JanzenLiu](https://github.com/JanzenLiu) -        [@小瑶](https://github.com/apachecn/scikit-learn-doc-zh) -        [@\S^R^Y/](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@StupidStalker](https://github.com/apachecn/scikit-learn-doc-zh) -        [@文谊](https://github.com/apachecn/scikit-learn-doc-zh) -        [@t9UhoI](https://github.com/apachecn/scikit-learn-doc-zh) - -`注意,在本文中 bagging 和 boosting 为了更好的保留原文意图,不进行翻译` `estimator->估计器  base estimator->基估计器` - -**集成方法** 的目标是把多个使用给定学习算法构建的基估计器的预测结果结合起来,从而获得比单个估计器更好的泛化能力/鲁棒性。 - -集成方法通常分为两种: - -* **平均方法**,该方法的原理是构建多个独立的估计器,然后取它们的预测结果的平均。一般来说组合之后的估计器是会比单个估计器要好的,因为它的方差减小了。 - - **示例:** [Bagging 方法](#bagging) , [随机森林](#forest) , … - -* 相比之下,在 **boosting 方法** 中,基估计器是依次构建的,并且每一个基估计器都尝试去减少组合估计器的偏差。这种方法主要目的是为了结合多个弱模型,使集成的模型更加强大。 - - **示例:** [AdaBoost](#adaboost) , [梯度提升树](#gradient-boosting) , … - -## 1.11.1\. Bagging meta-estimator(Bagging 元估计器) - -在集成算法中,bagging 方法会在原始训练集的随机子集上构建一类黑盒估计器的多个实例,然后把这些估计器的预测结果结合起来形成最终的预测结果。 该方法通过在构建模型的过程中引入随机性,来减少基估计器的方差(例如,决策树)。 在多数情况下,bagging 方法提供了一种非常简单的方式来对单一模型进行改进,而无需修改背后的算法。 因为 bagging 方法可以减小过拟合,所以通常在强分类器和复杂模型上使用时表现的很好(例如,完全决策树,fully developed decision trees),相比之下 boosting 方法则在弱模型上表现更好(例如,浅层决策树,shallow decision trees)。 - -bagging 方法有很多种,其主要区别在于随机抽取训练子集的方法不同: - -> * 如果抽取的数据集的随机子集是样例的随机子集,我们叫做粘贴 (Pasting) [[B1999]](#b1999) 。 -> * 如果样例抽取是有放回的,我们称为 Bagging [[B1996]](#b1996) 。 -> * 如果抽取的数据集的随机子集是特征的随机子集,我们叫做随机子空间 (Random Subspaces) [[H1998]](#h1998) 。 -> * 最后,如果基估计器构建在对于样本和特征抽取的子集之上时,我们叫做随机补丁 (Random Patches) [[LG2012]](#lg2012) 。 - -在 scikit-learn 中,bagging 方法使用统一的 [`BaggingClassifier`](generated/sklearn.ensemble.BaggingClassifier.html#sklearn.ensemble.BaggingClassifier "sklearn.ensemble.BaggingClassifier") 元估计器(或者 [`BaggingRegressor`](generated/sklearn.ensemble.BaggingRegressor.html#sklearn.ensemble.BaggingRegressor "sklearn.ensemble.BaggingRegressor") ),输入的参数和随机子集抽取策略由用户指定。`max_samples` 和 `max_features` 控制着子集的大小(对于样例和特征), `bootstrap` 和 `bootstrap_features` 控制着样例和特征的抽取是有放回还是无放回的。 当使用样本子集时,通过设置 `oob_score=True` ,可以使用袋外(out-of-bag)样本来评估泛化精度。下面的代码片段说明了如何构造一个 `KNeighborsClassifier` 估计器的 bagging 集成实例,每一个基估计器都建立在 50% 的样本随机子集和 50% 的特征随机子集上。 - -```py ->>> from sklearn.ensemble import BaggingClassifier ->>> from sklearn.neighbors import KNeighborsClassifier ->>> bagging = BaggingClassifier(KNeighborsClassifier(), -... max_samples=0.5, max_features=0.5) - -``` - -示例: - -* [Single estimator versus bagging: bias-variance decomposition](../auto_examples/ensemble/plot_bias_variance.html#sphx-glr-auto-examples-ensemble-plot-bias-variance-py) - -参考文献 - -| [[B1999]](#id2) | L. Breiman, “Pasting small votes for classification in large databases and on-line”, Machine Learning, 36(1), 85-103, 1999. | - -| [[B1996]](#id3) | L. Breiman, “Bagging predictors”, Machine Learning, 24(2), 123-140, 1996. | - -| [[H1998]](#id4) | T. Ho, “The random subspace method for constructing decision forests”, Pattern Analysis and Machine Intelligence, 20(8), 832-844, 1998. | - -| [[LG2012]](#id5) | G. Louppe and P. Geurts, “Ensembles on Random Patches”, Machine Learning and Knowledge Discovery in Databases, 346-361, 2012. | - -## 1.11.2\. 由随机树组成的森林 - -[`sklearn.ensemble`](classes.html#module-sklearn.ensemble "sklearn.ensemble") 模块包含两个基于 [随机决策树](tree.html#tree) 的平均算法: RandomForest 算法和 Extra-Trees 算法。 这两种算法都是专门为树而设计的扰动和组合技术(perturb-and-combine techniques) [[B1998]](#b1998) 。 这种技术通过在分类器构造过程中引入随机性来创建一组不同的分类器。集成分类器的预测结果就是单个分类器预测结果的平均值。 - -与其他分类器一样,森林分类器必须拟合(fit)两个数组: 保存训练样本的数组(或稀疏或稠密的)X,大小为 `[n_samples, n_features]`,和 保存训练样本目标值(类标签)的数组 Y,大小为 `[n_samples]`: - -```py ->>> from sklearn.ensemble import RandomForestClassifier ->>> X = [[0, 0], [1, 1]] ->>> Y = [0, 1] ->>> clf = RandomForestClassifier(n_estimators=10) ->>> clf = clf.fit(X, Y) - -``` - -同 [决策树](tree.html#tree) 一样,随机森林算法(forests of trees)也能用来解决 [多输出问题](tree.html#tree-multioutput) (如果 Y 的大小是 `[n_samples, n_outputs])` )。 - -### 1.11.2.1\. 随机森林 - -在随机森林中(参见 [`RandomForestClassifier`](generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier "sklearn.ensemble.RandomForestClassifier") 和 [`RandomForestRegressor`](generated/sklearn.ensemble.RandomForestRegressor.html#sklearn.ensemble.RandomForestRegressor "sklearn.ensemble.RandomForestRegressor") 类), 集成模型中的每棵树构建时的样本都是由训练集经过有放回抽样得来的(例如,自助采样法-bootstrap sample,这里采用西瓜书中的译法)。 另外,在构建树的过程中进行结点分割时,选择的分割点不再是所有特征中最佳分割点,而是特征的一个随机子集中的最佳分割点。 由于这种随机性,森林的偏差通常会有略微的增大(相对于单个非随机树的偏差),但是由于取了平均,其方差也会减小,通常能够补偿偏差的增加,从而产生一个总体上更好的模型。 - -与原始文献 [[B2001]](#b2001) 不同的是,scikit-learn 的实现是取每个分类器预测概率的平均,而不是让每个分类器对类别进行投票。 - -### 1.11.2.2\. 极限随机树 - -在极限随机树中(参见 [`ExtraTreesClassifier`](generated/sklearn.ensemble.ExtraTreesClassifier.html#sklearn.ensemble.ExtraTreesClassifier "sklearn.ensemble.ExtraTreesClassifier") 和 [`ExtraTreesRegressor`](generated/sklearn.ensemble.ExtraTreesRegressor.html#sklearn.ensemble.ExtraTreesRegressor "sklearn.ensemble.ExtraTreesRegressor") 类), 计算分割点方法中的随机性进一步增强。 在随机森林中,使用的特征是候选特征的随机子集;不同于寻找最具有区分度的阈值, 这里的阈值是针对每个候选特征随机生成的,并且选择这些随机生成的阈值中的最佳者作为分割规则。 这种做法通常能够减少一点模型的方差,代价则是略微地增大偏差: - -```py ->>> from sklearn.model_selection import cross_val_score ->>> from sklearn.datasets import make_blobs ->>> from sklearn.ensemble import RandomForestClassifier ->>> from sklearn.ensemble import ExtraTreesClassifier ->>> from sklearn.tree import DecisionTreeClassifier - -``` - -```py ->>> X, y = make_blobs(n_samples=10000, n_features=10, centers=100, -... random_state=0) - -``` - -```py ->>> clf = DecisionTreeClassifier(max_depth=None, min_samples_split=2, -... random_state=0) ->>> scores = cross_val_score(clf, X, y) ->>> scores.mean() -0.97... - -``` - -```py ->>> clf = RandomForestClassifier(n_estimators=10, max_depth=None, -... min_samples_split=2, random_state=0) ->>> scores = cross_val_score(clf, X, y) ->>> scores.mean() -0.999... - -``` - -```py ->>> clf = ExtraTreesClassifier(n_estimators=10, max_depth=None, -... min_samples_split=2, random_state=0) ->>> scores = cross_val_score(clf, X, y) ->>> scores.mean() > 0.999 -True - -``` - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_forest_iris_0011.png](img/ee5d94bdc1dac94ab975f3db18552505.jpg)](../auto_examples/ensemble/plot_forest_iris.html) - -### 1.11.2.3\. 参数 - -使用这些方法时要调整的参数主要是 `n_estimators` 和 `max_features`。 前者(n_estimators)是森林里树的数量,通常数量越大,效果越好,但是计算时间也会随之增加。 此外要注意,当树的数量超过一个临界值之后,算法的效果并不会很显著地变好。 后者(max_features)是分割节点时考虑的特征的随机子集的大小。 这个值越低,方差减小得越多,但是偏差的增大也越多。 根据经验,回归问题中使用 `max_features = n_features` , 分类问题使用 `max_features = sqrt(n_features` (其中 `n_features` 是特征的个数)是比较好的默认值。 `max_depth = None` 和 `min_samples_split = 2` 结合通常会有不错的效果(即生成完全的树)。 请记住,这些(默认)值通常不是最佳的,同时还可能消耗大量的内存,最佳参数值应由交叉验证获得。 另外,请注意,在随机森林中,默认使用自助采样法(`bootstrap = True`), 然而 extra-trees 的默认策略是使用整个数据集(`bootstrap = False`)。 当使用自助采样法方法抽样时,泛化精度是可以通过剩余的或者袋外的样本来估算的,设置 `oob_score = True` 即可实现。 - -提示: - -默认参数下模型复杂度是:`O(M*N*log(N))` , 其中 `M` 是树的数目, `N` 是样本数。 可以通过设置以下参数来降低模型复杂度: `min_samples_split` , `min_samples_leaf` , `max_leaf_nodes`` 和 ``max_depth` 。 - -### 1.11.2.4\. 并行化 - -最后,这个模块还支持树的并行构建和预测结果的并行计算,这可以通过 `n_jobs` 参数实现。 如果设置 `n_jobs = k` ,则计算被划分为 `k` 个作业,并运行在机器的 `k` 个核上。 如果设置 `n_jobs = -1` ,则使用机器的所有核。 注意由于进程间通信具有一定的开销,这里的提速并不是线性的(即,使用 `k` 个作业不会快 `k` 倍)。 当然,在建立大量的树,或者构建单个树需要相当长的时间(例如,在大数据集上)时,(通过并行化)仍然可以实现显著的加速。 - -示例: - -* [Plot the decision surfaces of ensembles of trees on the iris dataset](../auto_examples/ensemble/plot_forest_iris.html#sphx-glr-auto-examples-ensemble-plot-forest-iris-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) -* [Face completion with a multi-output estimators](../auto_examples/plot_multioutput_face_completion.html#sphx-glr-auto-examples-plot-multioutput-face-completion-py) - -参考文献 - -| [[B2001]](#id9) | - -1. Breiman, “Random Forests”, Machine Learning, 45(1), 5-32, 2001. - - | - -| [[B1998]](#id7) | - -1. Breiman, “Arcing Classifiers”, Annals of Statistics 1998. - - | - -* P. Geurts, D. Ernst., and L. Wehenkel, “Extremely randomized trees”, Machine Learning, 63(1), 3-42, 2006. - -### 1.11.2.5\. 特征重要性评估 - -特征对目标变量预测的相对重要性可以通过(树中的决策节点的)特征使用的相对顺序(即深度)来进行评估。 决策树顶部使用的特征对更大一部分输入样本的最终预测决策做出贡献;因此,可以使用接受每个特征对最终预测的贡献的样本比例来评估该 **特征的相对重要性** 。 - -通过对多个随机树中的 **预期贡献率** (expected activity rates) **取平均**,可以减少这种估计的 **方差** ,并将其用于特征选择。 - -下面的例子展示了一个面部识别任务中每个像素的相对重要性,其中重要性由颜色(的深浅)来表示,使用的模型是 [`ExtraTreesClassifier`](generated/sklearn.ensemble.ExtraTreesClassifier.html#sklearn.ensemble.ExtraTreesClassifier "sklearn.ensemble.ExtraTreesClassifier") 。 - -[![https://scikit-learn.org/stable/_images/sphx_glr_plot_forest_importances_faces_001.png](../Images/69bbc745b66051792cd1b5166ce18420.jpg)](../auto_examples/ensemble/plot_forest_importances_faces.html) - -实际上,对于训练完成的模型这些估计值存储在 `feature_importances_` 属性中。 这是一个大小为 `(n_features,)` 的数组,其每个元素值为正,并且总和为 1.0。一个元素的值越高,其对应的特征对预测函数的贡献越大。 - -示例: - -* [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) -* [Feature importances with forests of trees](../auto_examples/ensemble/plot_forest_importances.html#sphx-glr-auto-examples-ensemble-plot-forest-importances-py) - -### 1.11.2.6\. 完全随机树嵌入 - -[`RandomTreesEmbedding`](generated/sklearn.ensemble.RandomTreesEmbedding.html#sklearn.ensemble.RandomTreesEmbedding "sklearn.ensemble.RandomTreesEmbedding") 实现了一个无监督的数据转换。 通过由完全随机树构成的森林,[`RandomTreesEmbedding`](generated/sklearn.ensemble.RandomTreesEmbedding.html#sklearn.ensemble.RandomTreesEmbedding "sklearn.ensemble.RandomTreesEmbedding") 使用数据最终归属的叶子节点的索引值(编号)对数据进行编码。 该索引以 one-of-K 方式编码,最终形成一个高维的稀疏二进制编码。 这种编码可以被非常高效地计算出来,并且可以作为其他学习任务的基础。 编码的大小和稀疏度可以通过选择树的数量和每棵树的最大深度来确定。对于集成中的每棵树的每个节点包含一个实例(校对者注:这里真的没搞懂)。 编码的大小(维度)最多为 `n_estimators * 2 ** max_depth` ,即森林中的叶子节点的最大数。 - -由于相邻数据点更可能位于树的同一叶子中,该变换可以作为一种隐式地非参数密度估计。 - -示例: - -* [Hashing feature transformation using Totally Random Trees](../auto_examples/ensemble/plot_random_forest_embedding.html#sphx-glr-auto-examples-ensemble-plot-random-forest-embedding-py) -* [Manifold learning on handwritten digits: Locally Linear Embedding, Isomap…](../auto_examples/manifold/plot_lle_digits.html#sphx-glr-auto-examples-manifold-plot-lle-digits-py) 比较了手写体数字的非线性降维技术。 -* [Feature transformations with ensembles of trees](../auto_examples/ensemble/plot_feature_transformation.html#sphx-glr-auto-examples-ensemble-plot-feature-transformation-py) 比较了基于树的有监督和无监督特征变换. - -See also - -[流形学习](manifold.html#manifold) 方法也可以用于特征空间的非线性表示, 以及降维. - -## 1.11.3\. AdaBoost - -模型 [`sklearn.ensemble`](classes.html#module-sklearn.ensemble "sklearn.ensemble") 包含了流行的提升算法 AdaBoost, 这个算法是由 Freund and Schapire 在 1995 年提出来的 [[FS1995]](#fs1995). - -AdaBoost 的核心思想是用反复修改的数据(校对者注:主要是修正数据的权重)来训练一系列的弱学习器(一个弱学习器模型仅仅比随机猜测好一点, 比如一个简单的决策树),由这些弱学习器的预测结果通过加权投票(或加权求和)的方式组合, 得到我们最终的预测结果。在每一次所谓的提升(boosting)迭代中,数据的修改由应用于每一个训练样本的(新) 的权重 ![w_1](img/da928d409a2cf1615368a82030e09380.jpg), ![w_2](img/b8c91e64943f8e5e311a51bc901a2c7e.jpg), …, ![w_N](img/a9cd44019704ddd9877089f25d6a229e.jpg) 组成(校对者注:即修改每一个训练样本应用于新一轮学习器的权重)。 初始化时,将所有弱学习器的权重都设置为 ![w_i = 1/N](img/8ae33567ac5e4d4e9b1b14ae12220ea9.jpg) ,因此第一次迭代仅仅是通过原始数据训练出一个弱学习器。在接下来的 连续迭代中,样本的权重逐个地被修改,学习算法也因此要重新应用这些已经修改的权重。在给定的一个迭代中, 那些在上一轮迭代中被预测为错误结果的样本的权重将会被增加,而那些被预测为正确结果的样本的权 重将会被降低。随着迭代次数的增加,那些难以预测的样例的影响将会越来越大,每一个随后的弱学习器都将 会被强迫更加关注那些在之前被错误预测的样例 [[HTF]](#htf). - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_adaboost_hastie_10_2_0011.png](img/f5291f866455b62cd6c68f419444e5cf.jpg)](../auto_examples/ensemble/plot_adaboost_hastie_10_2.html) - -AdaBoost 既可以用在分类问题也可以用在回归问题中: - -> * 对于 multi-class 分类, [`AdaBoostClassifier`](generated/sklearn.ensemble.AdaBoostClassifier.html#sklearn.ensemble.AdaBoostClassifier "sklearn.ensemble.AdaBoostClassifier") 实现了 AdaBoost-SAMME 和 AdaBoost-SAMME.R [[ZZRH2009]](#zzrh2009). -> * 对于回归, [`AdaBoostRegressor`](generated/sklearn.ensemble.AdaBoostRegressor.html#sklearn.ensemble.AdaBoostRegressor "sklearn.ensemble.AdaBoostRegressor") 实现了 AdaBoost.R2 [[D1997]](#d1997). - -### 1.11.3.1\. 使用方法 - -下面的例子展示了如何训练一个包含 100 个弱学习器的 AdaBoost 分类器: - -```py ->>> from sklearn.model_selection import cross_val_score ->>> from sklearn.datasets import load_iris ->>> from sklearn.ensemble import AdaBoostClassifier - ->>> iris = load_iris() ->>> clf = AdaBoostClassifier(n_estimators=100) ->>> scores = cross_val_score(clf, iris.data, iris.target) ->>> scores.mean() -0.9... - -``` - -弱学习器的数量由参数 `n_estimators` 来控制。 `learning_rate` 参数用来控制每个弱学习器对 最终的结果的贡献程度(校对者注:其实应该就是控制每个弱学习器的权重修改速率,这里不太记得了,不确定)。 弱学习器默认使用决策树。不同的弱学习器可以通过参数 `base_estimator` 来指定。 获取一个好的预测结果主要需要调整的参数是 `n_estimators` 和 `base_estimator` 的复杂度 (例如:对于弱学习器为决策树的情况,树的深度 `max_depth` 或叶子节点的最小样本数 `min_samples_leaf` 等都是控制树的复杂度的参数) - -示例: - -* [Discrete versus Real AdaBoost](../auto_examples/ensemble/plot_adaboost_hastie_10_2.html#sphx-glr-auto-examples-ensemble-plot-adaboost-hastie-10-2-py) 使用 AdaBoost-SAMME 和 AdaBoost-SAMME.R 比较 decision stump, decision tree(决策树)和 boosted decision stump(增强决策树)的分类错误。 -* [Multi-class AdaBoosted Decision Trees](../auto_examples/ensemble/plot_adaboost_multiclass.html#sphx-glr-auto-examples-ensemble-plot-adaboost-multiclass-py) 展示了 AdaBoost-SAMME 和 AdaBoost-SAMME.R 在 multi-class (多类)问题上的性能。 -* [Two-class AdaBoost](../auto_examples/ensemble/plot_adaboost_twoclass.html#sphx-glr-auto-examples-ensemble-plot-adaboost-twoclass-py) 展示了使用 AdaBoost-SAMME 的非线性可分两类问题的决策边界和决策函数值。 -* [Decision Tree Regression with AdaBoost](../auto_examples/ensemble/plot_adaboost_regression.html#sphx-glr-auto-examples-ensemble-plot-adaboost-regression-py) 使用 AdaBoost.R2 算法证明了回归。 - -参考文献: - -| [[FS1995]](#id16) | Y. Freund, and R. Schapire, “A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting”, 1997. | - -| [[ZZRH2009]](#id18) | J. Zhu, H. Zou, S. Rosset, T. Hastie. “Multi-class AdaBoost”, 2009. | - -| [[D1997]](#id19) | - -1. Drucker. “Improving Regressors using Boosting Techniques”, 1997. - - | - -| [[HTF]](#id17) | T. Hastie, R. Tibshirani and J. Friedman, “Elements of Statistical Learning Ed. 2”, Springer, 2009. | - -## 1.11.4\. Gradient Tree Boosting(梯度树提升) - -[Gradient Tree Boosting](https://en.wikipedia.org/wiki/Gradient_boosting) 或梯度提升回归树(GBRT)是对于任意的可微损失函数的提升算法的泛化。 GBRT 是一个准确高效的现有程序, 它既能用于分类问题也可以用于回归问题。梯度树提升模型被应用到各种领域,包括网页搜索排名和生态领域。 - -GBRT 的优点: - -> * 对混合型数据的自然处理(异构特征) -> * 强大的预测能力 -> * 在输出空间中对异常点的鲁棒性(通过具有鲁棒性的损失函数实现) - -GBRT 的缺点: - -> * 可扩展性差(校对者注:此处的可扩展性特指在更大规模的数据集/复杂度更高的模型上使用的能力,而非我们通常说的功能的扩展性;GBRT 支持自定义的损失函数,从这个角度看它的扩展性还是很强的!)。由于提升算法的有序性(也就是说下一步的结果依赖于上一步),因此很难做并行. - -模块 [`sklearn.ensemble`](classes.html#module-sklearn.ensemble "sklearn.ensemble") 通过梯度提升树提供了分类和回归的方法. - -### 1.11.4.1\. 分类 - -[`GradientBoostingClassifier`](generated/sklearn.ensemble.GradientBoostingClassifier.html#sklearn.ensemble.GradientBoostingClassifier "sklearn.ensemble.GradientBoostingClassifier") 既支持二分类又支持多分类问题。 下面的例子展示了如何训练一个包含 100 个决策树弱学习器的梯度提升分类器: - -```py ->>> from sklearn.datasets import make_hastie_10_2 ->>> from sklearn.ensemble import GradientBoostingClassifier - ->>> X, y = make_hastie_10_2(random_state=0) ->>> X_train, X_test = X[:2000], X[2000:] ->>> y_train, y_test = y[:2000], y[2000:] - ->>> clf = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, -... max_depth=1, random_state=0).fit(X_train, y_train) ->>> clf.score(X_test, y_test) -0.913... - -``` - -弱学习器(例如:回归树)的数量由参数 `n_estimators` 来控制;每个树的大小可以通过由参数 `max_depth` 设置树的深度,或者由参数 `max_leaf_nodes` 设置叶子节点数目来控制。 `learning_rate` 是一个在 (0,1] 之间的超参数,这个参数通过 shrinkage(缩减步长) 来控制过拟合。 - -Note - -超过两类的分类问题需要在每一次迭代时推导 `n_classes` 个回归树。因此,所有的需要推导的树数量等于 `n_classes * n_estimators` 。对于拥有大量类别的数据集我们强烈推荐使用 [`RandomForestClassifier`](generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier "sklearn.ensemble.RandomForestClassifier") 来代替 [`GradientBoostingClassifier`](generated/sklearn.ensemble.GradientBoostingClassifier.html#sklearn.ensemble.GradientBoostingClassifier "sklearn.ensemble.GradientBoostingClassifier") 。 - -### 1.11.4.2\. 回归 - -对于回归问题 [`GradientBoostingRegressor`](generated/sklearn.ensemble.GradientBoostingRegressor.html#sklearn.ensemble.GradientBoostingRegressor "sklearn.ensemble.GradientBoostingRegressor") 支持一系列 [different loss functions](#gradient-boosting-loss) ,这些损失函数可以通过参数 `loss` 来指定;对于回归问题默认的损失函数是最小二乘损失函数( `'ls'` )。 - -```py ->>> import numpy as np ->>> from sklearn.metrics import mean_squared_error ->>> from sklearn.datasets import make_friedman1 ->>> from sklearn.ensemble import GradientBoostingRegressor - ->>> X, y = make_friedman1(n_samples=1200, random_state=0, noise=1.0) ->>> X_train, X_test = X[:200], X[200:] ->>> y_train, y_test = y[:200], y[200:] ->>> est = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, -... max_depth=1, random_state=0, loss='ls').fit(X_train, y_train) ->>> mean_squared_error(y_test, est.predict(X_test)) -5.00... - -``` - -下图展示了应用损失函数为最小二乘损失,基学习器个数为 500 的 [`GradientBoostingRegressor`](generated/sklearn.ensemble.GradientBoostingRegressor.html#sklearn.ensemble.GradientBoostingRegressor "sklearn.ensemble.GradientBoostingRegressor") 来处理 [`sklearn.datasets.load_boston`](generated/sklearn.datasets.load_boston.html#sklearn.datasets.load_boston "sklearn.datasets.load_boston") 数据集的结果。左图表示每一次迭代的训练误差和测试误差。每一次迭代的训练误差保存在提升树模型的 `train_score_` 属性中,每一次迭代的测试误差能够通过 [`staged_predict`](generated/sklearn.ensemble.GradientBoostingRegressor.html#sklearn.ensemble.GradientBoostingRegressor.staged_predict "sklearn.ensemble.GradientBoostingRegressor.staged_predict") 方法获取,该方法返回一个生成器,用来产生每一 个迭代的预测结果。类似下面这样的图表,可以用于决定最优的树的数量,从而进行提前停止。右图表示每个特征的重要性,它 可以通过 `feature_importances_` 属性来获取. - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gradient_boosting_regression_0011.png](img/b68e95efa751d5e14b6517cff553419b.jpg)](../auto_examples/ensemble/plot_gradient_boosting_regression.html) - -示例: - -* [Gradient Boosting regression](../auto_examples/ensemble/plot_gradient_boosting_regression.html#sphx-glr-auto-examples-ensemble-plot-gradient-boosting-regression-py) -* [Gradient Boosting Out-of-Bag estimates](../auto_examples/ensemble/plot_gradient_boosting_oob.html#sphx-glr-auto-examples-ensemble-plot-gradient-boosting-oob-py) - -### 1.11.4.3\. 训练额外的弱学习器 - -> [`GradientBoostingRegressor`](generated/sklearn.ensemble.GradientBoostingRegressor.html#sklearn.ensemble.GradientBoostingRegressor "sklearn.ensemble.GradientBoostingRegressor") 和 [`GradientBoostingClassifier`](generated/sklearn.ensemble.GradientBoostingClassifier.html#sklearn.ensemble.GradientBoostingClassifier "sklearn.ensemble.GradientBoostingClassifier") 都支持设置参数 `warm_start=True` ,这样设置允许我们在已经训练的模型上面添加更多的估计器。 - -```py ->>> _ = est.set_params(n_estimators=200, warm_start=True) # set warm_start and new nr of trees ->>> _ = est.fit(X_train, y_train) # fit additional 100 trees to est ->>> mean_squared_error(y_test, est.predict(X_test)) -3.84... - -``` - -### 1.11.4.4\. 控制树的大小 - -回归树基学习器的大小定义了可以被梯度提升模型捕捉到的变量(即特征)相互作用(即多个特征共同对预测产生影响)的程度。 通常一棵深度为 `h` 的树能捕获到秩为 `h` 的相互作用。这里有两种控制单棵回归树大小的方法。 - -如果你指定 `max_depth=h` ,那么将会产生一个深度为 `h` 的完全二叉树。这棵树将会有(至多) `2**h` 个叶子节点和 `2**h - 1` 个切分节点。 - -另外,你能通过参数 `max_leaf_nodes` 指定叶子节点的数量来控制树的大小。在这种情况下,树将会使用最优优先搜索来生成,这种搜索方式是通过每次选取对不纯度提升最大的节点来展开。一棵 `max_leaf_nodes=k` 的树拥有 `k - 1` 个切分节点,因此可以模拟秩最高达到 `max_leaf_nodes - 1` 的相互作用(即 `max_leaf_nodes - 1` 个特征共同决定预测值)。 - -我们发现 `max_leaf_nodes=k` 可以给出与 `max_depth=k-1` 品质相当的结果,但是其训练速度明显更快,同时也会以多一点的训练误差作为代价。参数 `max_leaf_nodes` 对应于文章 [[F2001]](#f2001) 中梯度提升章节中的变量 `J` ,同时与 R 语言的 gbm 包的参数 `interaction.depth` 相关,两者间的关系是 `max_leaf_nodes == interaction.depth + 1` 。 - -### 1.11.4.5\. Mathematical formulation(数学公式) - -GBRT 可以认为是以下形式的可加模型: - -> ```py -> -> ![F(x) = \sum_{m=1}^{M} \gamma_m h_m(x)](img/3405852dc63c9a78447d479784f1ee7e.jpg) -> -> ``` - -其中 ![h_m(x)](img/a0fc07cc08abaf336142bf23fb4f5cc2.jpg) 是基本函数,在提升算法场景中它通常被称作 _weak learners_ 。梯度树提升算法(Gradient Tree Boosting)使用固定大小 的 [decision trees](tree.html#tree) 作为弱分类器,决策树本身拥有的一些特性使它能够在提升过程中变得有价值, 即处理混合类型数据以及构建具有复杂功能模型的能力. - -与其他提升算法类似, GBRT 利用前向分步算法思想构建加法模型: - -> ```py -> -> ![F_m(x) = F_{m-1}(x) + \gamma_m h_m(x)](img/842c30bfbcf39ee4d2ac5d7587f7168c.jpg) -> -> ``` - -在每一个阶段中,基于当前模型 ![F_{m-1}](img/841ad1e8353dcbf5fed2a58b2008873f.jpg) 和拟合函数 ![F_{m-1}(x_i)](img/401b1228a76ba9190680851b9d095653.jpg) 选择合适的决策树函数 ![h_m(x)](img/a0fc07cc08abaf336142bf23fb4f5cc2.jpg) ,从而最小化损失函数 ![L](img/639e82f3829a0ad677110cc33a028c98.jpg) 。 - -> ```py -> -> ![F_m(x) = F_{m-1}(x) + \arg\min_{h} \sum_{i=1}^{n} L(y_i, -> F_{m-1}(x_i) - h(x))](img/887928b507a2f01847b6ae5f5b0e733f.jpg) -> -> ``` - -初始模型 ![F_{0}](img/5d8cf5fcf13a72776158a787bc29143c.jpg) 是问题的具体,对于最小二乘回归,通常选择目标值的平均值. - -Note - -初始化模型也能够通过 `init` 参数来指定,但传递的对象需要实现 `fit` 和 `predict` 函数。 - -梯度提升(Gradient Boosting)尝试通过最速下降法以数字方式解决这个最小化问题.最速下降方向是在当前模型 ![F_{m-1}](img/841ad1e8353dcbf5fed2a58b2008873f.jpg) 下的损失函数的负梯度方向,其中模型 ![F_{m-1}](img/841ad1e8353dcbf5fed2a58b2008873f.jpg) 可以计算任何可微损失函数: - -> ```py -> -> ![F_m(x) = F_{m-1}(x) + \gamma_m \sum_{i=1}^{n} \nabla_F L(y_i, -> F_{m-1}(x_i))](img/995e683eac95f8e8e65d96c6516858e7.jpg) -> -> ``` - -其中步长 ![\gamma_m](img/7d32ef1e04f69e63d69e04b09b973946.jpg) 通过如下方式线性搜索获得: - -> ```py -> -> ![\gamma_m = \arg\min_{\gamma} \sum_{i=1}^{n} L(y_i, F_{m-1}(x_i) -> - \gamma \frac{\partial L(y_i, F_{m-1}(x_i))}{\partial F_{m-1}(x_i)})](img/4341393efadcef482cea0dd54509e011.jpg) -> -> ``` - -该算法处理分类和回归问题不同之处在于具体损失函数的使用。 - -#### 1.11.4.5.1\. Loss Functions(损失函数) - -以下是目前支持的损失函数,具体损失函数可以通过参数 `loss` 指定: - -> * 回归 (Regression) -> * Least squares ( `'ls'` ): 由于其优越的计算性能,该损失函数成为回归算法中的自然选择。 初始模型 (校对者注:即损失函数的初始值,下同) 通过目标值的均值给出。 -> * Least absolute deviation ( `'lad'` ): 回归中具有鲁棒性的损失函数,初始模型通过目 标值的中值给出。 -> * Huber ( `'huber'` ): 回归中另一个具有鲁棒性的损失函数,它是最小二乘和最小绝对偏差两者的结合. 其利用 `alpha` 来控制模型对于异常点的敏感度(详细介绍请参考 [[F2001]](#f2001)). -> * Quantile ( `'quantile'` ): 分位数回归损失函数.用 `0 < alpha < 1` 来指定分位数这个损 失函数可以用来产生预测间隔。(详见 [Prediction Intervals for Gradient Boosting Regression](../auto_examples/ensemble/plot_gradient_boosting_quantile.html#sphx-glr-auto-examples-ensemble-plot-gradient-boosting-quantile-py) )。 -> * 分类 (Classification) -> * Binomial deviance (`'deviance'`): 对于二分类问题(提供概率估计)即负的二项 log 似然损失函数。模型以 log 的比值比来初始化。 -> * Multinomial deviance (`'deviance'`): 对于多分类问题的负的多项log似然损失函数具有 `n_classes` 个互斥的类。提供概率估计。 初始模型由每个类的先验概率给出.在每一次迭代中 `n_classes` 回归树被构建,这使得 GBRT 在处理多类别数据集时相当低效。 -> * Exponential loss (`'exponential'`): 与 [`AdaBoostClassifier`](generated/sklearn.ensemble.AdaBoostClassifier.html#sklearn.ensemble.AdaBoostClassifier "sklearn.ensemble.AdaBoostClassifier") 具有相同的损失函数。与 `'deviance'` 相比,对被错误标记的样本的鲁棒性较差,仅用于在二分类问题。 - -### 1.11.4.6\. Regularization(正则化) - -#### 1.11.4.6.1\. 收缩率 (Shrinkage) - -[[F2001]](#f2001) 提出一个简单的正则化策略,通过一个因子 ![\nu](img/f996477bc9806499e6b6a1ea4d9ae8eb.jpg) 来衡量每个弱分类器对于最终结果的贡献: - -![F_m(x) = F_{m-1}(x) + \nu \gamma_m h_m(x)](img/10ce8fc56aa233e3e9cec9776dc315e6.jpg) - -参数 ![\nu](img/f996477bc9806499e6b6a1ea4d9ae8eb.jpg) 由于它可以控制梯度下降的步长, 因此也叫作 **learning rate** ,它可以通过 `learning_rate` 参数来设置. - -在训练一定数量的弱分类器时,参数 `learning_rate` 和参数 `n_estimators` 之间有很强的制约关系。 较小的 `learning_rate` 需要大量的弱分类器才能维持训练误差的稳定。经验表明数值较小的 `learning_rate` 将会得到更好的测试误差。 [[HTF2009]](#htf2009) 推荐把 `learning_rate` 设置为一个较小的常数 (例如: `learning_rate <= 0.1` )同时通过提前停止策略来选择合适的 `n_estimators` . 有关 `learning_rate` 和 `n_estimators` 更详细的讨论可以参考 [[R2007]](#r2007). - -#### 1.11.4.6.2\. 子采样 (Subsampling) - -[[F1999]](#f1999) 提出了随机梯度提升,这种方法将梯度提升(gradient boosting)和 bootstrap averaging(bagging) 相结合。在每次迭代中,基分类器是通过抽取所有可利用训练集中一小部分的 `subsample` 训练得到的子样本采用无放回的方式采样。 `subsample` 参数的值一般设置为 0.5 。 - -下图表明了收缩与否和子采样对于模型拟合好坏的影响。我们可以明显看到指定收缩率比没有收缩拥有更好的表现。而将子采样和收缩率相结合能进一步的提高模型的准确率。相反,使用子采样而不使用收缩的结果十分糟糕。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gradient_boosting_regularization_0011.png](img/ae1e2652c240448ae994f4b236379d6d.jpg)](../auto_examples/ensemble/plot_gradient_boosting_regularization.html) - -另一个减少方差的策略是特征子采样,这种方法类似于 [`RandomForestClassifier`](generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier "sklearn.ensemble.RandomForestClassifier") 中的随机分割。子采样的特征数可以通过参数 `max_features` 来控制。 - -Note - -采用一个较小的 `max_features` 值能大大缩减模型的训练时间。 - -随机梯度提升允许计算测试偏差的袋外估计值(Out-of-bag),方法是计算那些不在自助采样之内的样本偏差的改进。这个改进保存在属性 `oob_improvement_` 中 `oob_improvement_[i]` 如果将第 i 步添加到当前预测中,则可以改善 OOB 样本的损失。袋外估计可以使用在模型选择中,例如决定最优迭代次数。 OOB 估计通常都很悲观,因此我们推荐使用交叉验证来代替它,而当交叉验证太耗时时我们就只能使用 OOB 了。 - -示例: - -* [Gradient Boosting regularization](../auto_examples/ensemble/plot_gradient_boosting_regularization.html#sphx-glr-auto-examples-ensemble-plot-gradient-boosting-regularization-py) -* [Gradient Boosting Out-of-Bag estimates](../auto_examples/ensemble/plot_gradient_boosting_oob.html#sphx-glr-auto-examples-ensemble-plot-gradient-boosting-oob-py) -* [OOB Errors for Random Forests](../auto_examples/ensemble/plot_ensemble_oob.html#sphx-glr-auto-examples-ensemble-plot-ensemble-oob-py) - -### 1.11.4.7\. Interpretation(解释性) - -通过简单地可视化树结构可以很容易地解释单个决策树,然而对于梯度提升模型来说,一般拥有数百棵/种回归树,将每一棵树都可视化来解释整个模型是很困难的。幸运的是,有很多关于总结和解释梯度提升模型的技术。 - -#### 1.11.4.7.1\. Feature importance(特征重要性) - -通常情况下每个特征对于预测目标的影响是不同的.在很多情形下大多数特征和预测结果是无关的。当解释一个模型时,第一个问题通常是:这些重要的特征是什么?他们如何在预测目标方面产生积极的影响的? - -单个决策树本质上是通过选择最佳切分点来进行特征选择.这个信息可以用来评定每个特征的重要性。基本思想是:在树的分割点中使用的特征越频繁,特征越重要。 这个特征重要性的概念可以通过简单地平均每棵树的特征重要性来扩展到决策树集合。(详见 [特征重要性评估](#random-forest-feature-importance) )。 - -对于一个训练好的梯度提升模型,其特征重要性分数可以通过属性 `feature_importances_` 查看: - -```py ->>> from sklearn.datasets import make_hastie_10_2 ->>> from sklearn.ensemble import GradientBoostingClassifier - ->>> X, y = make_hastie_10_2(random_state=0) ->>> clf = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, -... max_depth=1, random_state=0).fit(X, y) ->>> clf.feature_importances_ -array([ 0.11, 0.1 , 0.11, ... - -``` - -示例: - -* [Gradient Boosting regression](../auto_examples/ensemble/plot_gradient_boosting_regression.html#sphx-glr-auto-examples-ensemble-plot-gradient-boosting-regression-py) - -#### 1.11.4.7.2\. Partial dependence(部分依赖) - -部分依赖图(PDP)展示了目标响应和一系列目标特征的依赖关系,同时边缘化了其他所有特征值(候选特征)。 直觉上,我们可以将部分依赖解释为作为目标特征函数 [[2]](#id36) 的预期目标响应 [[1]](#id35) 。 - -由于人类感知能力的限制,目标特征的设置必须小一点(通常是1到2),因此目标特征通常在最重要的特征中选择。 - -下图展示了加州住房数据集的四个单向和一个双向部分依赖图: - -[![https://scikit-learn.org/stable/_images/sphx_glr_plot_partial_dependence_001.png](../Images/163f83188195d81958bfb733b7a3daa2.jpg)](../auto_examples/ensemble/plot_partial_dependence.html) - -单向 PDPs 告诉我们目标响应和目标特征的相互影响(例如:线性或者非线性)。上图中的左上图展示了一个地区的中等收入对中等房价的影响。我们可以清楚的看到两者之间是线性相关的。 - -具有两个目标特征的 PDPs 显示这两个特征之间的相互影响。例如:上图中两个变量的 PDP 展示了房价中位数与房屋年龄和每户平均入住人数之间的依赖关系。我们能清楚的看到这两个特征之间的影响:对于每户入住均值而言,当其值大于 2 时,房价与房屋年龄几乎是相对独立的,而其值小于 2 的时,房价对房屋年龄的依赖性就会很强。 - -模型 `partial_dependence` 提供了一个便捷的函数 [`plot_partial_dependence`](generated/sklearn.ensemble.partial_dependence.plot_partial_dependence.html#sklearn.ensemble.partial_dependence.plot_partial_dependence "sklearn.ensemble.partial_dependence.plot_partial_dependence") 来产生单向或双向部分依赖图。在下图的例子中我们展示如何创建一个部分依赖的网格图:特征值介于 `0` 和 `1` 的两个单向依赖 PDPs 和一个在两个特征间的双向 PDPs: - -```py ->>> from sklearn.datasets import make_hastie_10_2 ->>> from sklearn.ensemble import GradientBoostingClassifier ->>> from sklearn.ensemble.partial_dependence import plot_partial_dependence - ->>> X, y = make_hastie_10_2(random_state=0) ->>> clf = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, -... max_depth=1, random_state=0).fit(X, y) ->>> features = [0, 1, (0, 1)] ->>> fig, axs = plot_partial_dependence(clf, X, features) - -``` - -对于多类别的模型,你需要通过 `label` 参数设置类别标签来创建 PDPs: - -```py ->>> from sklearn.datasets import load_iris ->>> iris = load_iris() ->>> mc_clf = GradientBoostingClassifier(n_estimators=10, -... max_depth=1).fit(iris.data, iris.target) ->>> features = [3, 2, (3, 2)] ->>> fig, axs = plot_partial_dependence(mc_clf, X, features, label=0) - -``` - -如果你需要部分依赖函数的原始值而不是图,你可以调用 [`partial_dependence`](generated/sklearn.ensemble.partial_dependence.partial_dependence.html#sklearn.ensemble.partial_dependence.partial_dependence "sklearn.ensemble.partial_dependence.partial_dependence") 函数: - -```py ->>> from sklearn.ensemble.partial_dependence import partial_dependence - ->>> pdp, axes = partial_dependence(clf, [0], X=X) ->>> pdp -array([[ 2.46643157, 2.46643157, ... ->>> axes -[array([-1.62497054, -1.59201391, ... - -``` - -该函数允许通过 `grid` 参数指定应该被评估的部分依赖函数的的目标特征值或可以十分便利地通过设置 `X` 参数从而在训练数据中自动创建 `grid` 。如果 `X` 被给出,函数返回的 `axes` 为每个目标特征提供轴。 - -对于 `grid` 中的每一个 ‘目标’ 特征值,部分依赖函数需要边缘化一棵树中所有候选特征的可能值的预测。 在决策树中,这个函数可以在不参考训练数据的情况下被高效的评估,对于每一网格点执行加权遍历: 如果切分点包含 ‘目标’ 特征,遍历其相关的左分支或相关的右分支,否则就遍历两个分支。每一个分支将被通过进入该分支的训练样本的占比加权, 最后,部分依赖通过所有访问的叶节点的权重的平均值给出。组合树(tree ensembles)的整体结果,需要对每棵树的结果再次平均得到。 - -注解 (Footnotes) - -| [[1]](#id34) | 对于损失函数为deviance的分类问题,其目标响应为 logit(p) 。 | - -| [[2]](#id33) | 更精确的来说,这里指在产生初始化模型后,对于目标响应的期望;部分依赖图并不包括 `init` 模型。 | - -示例: - -* [Partial Dependence Plots](../auto_examples/ensemble/plot_partial_dependence.html#sphx-glr-auto-examples-ensemble-plot-partial-dependence-py) - -参考 - -| [F2001] | _([1](#id26), [2](#id27), [3](#id28))_ J. Friedman, “Greedy Function Approximation: A Gradient Boosting Machine”, The Annals of Statistics, Vol. 29, No. 5, 2001. | - -| [[F1999]](#id31) | - -1. Friedman, “Stochastic Gradient Boosting”, 1999 - - | - -| [[HTF2009]](#id29) | - -1. Hastie, R. Tibshirani and J. Friedman, “Elements of Statistical Learning Ed. 2”, Springer, 2009. - - | - -| [[R2007]](#id30) | - -1. Ridgeway, “Generalized Boosted Models: A guide to the gbm package”, 2007 - - | - -## 1.11.5\. Voting Classifier(投票分类器) - -`VotingClassifier` (投票分类器)的原理是结合了多个不同的机器学习分类器,并且采用多数表决(majority vote)(硬投票) 或者平均预测概率(软投票)的方式来预测分类标签。 这样的分类器可以用于一组同样表现良好的模型,以便平衡它们各自的弱点。 - -### 1.11.5.1\. 多数类标签 (又称为 多数/硬投票) - -在多数投票中,对于每个特定样本的预测类别标签是所有单独分类器预测的类别标签中票数占据多数(模式)的类别标签。 - -例如,如果给定样本的预测是 - -* classifier 1 -> class 1 -* classifier 2 -> class 1 -* classifier 3 -> class 2 - -类别 1 占据多数,通过 `voting='hard'` 参数设置投票分类器为多数表决方式,会得到该样本的预测结果是类别 1 。 - -在平局的情况下,投票分类器(VotingClassifier)将根据升序排序顺序选择类标签。 例如,场景如下: - -* classifier 1 -> class 2 -* classifier 2 -> class 1 - -这种情况下, class 1 将会被指定为该样本的类标签。 - -#### 1.11.5.1.1\. 用法 - -以下示例显示如何训练多数规则分类器: - -```py ->>> from sklearn import datasets ->>> from sklearn.model_selection import cross_val_score ->>> from sklearn.linear_model import LogisticRegression ->>> from sklearn.naive_bayes import GaussianNB ->>> from sklearn.ensemble import RandomForestClassifier ->>> from sklearn.ensemble import VotingClassifier - -``` - -```py ->>> iris = datasets.load_iris() ->>> X, y = iris.data[:, 1:3], iris.target - -``` - -```py ->>> clf1 = LogisticRegression(random_state=1) ->>> clf2 = RandomForestClassifier(random_state=1) ->>> clf3 = GaussianNB() - -``` - -```py ->>> eclf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('gnb', clf3)], voting='hard') - -``` - -```py ->>> for clf, label in zip([clf1, clf2, clf3, eclf], ['Logistic Regression', 'Random Forest', 'naive Bayes', 'Ensemble']): -... scores = cross_val_score(clf, X, y, cv=5, scoring='accuracy') -... print("Accuracy: %0.2f (+/- %0.2f) [%s]" % (scores.mean(), scores.std(), label)) -Accuracy: 0.90 (+/- 0.05) [Logistic Regression] -Accuracy: 0.93 (+/- 0.05) [Random Forest] -Accuracy: 0.91 (+/- 0.04) [naive Bayes] -Accuracy: 0.95 (+/- 0.05) [Ensemble] - -``` - -### 1.11.5.2\. 加权平均概率 (软投票) - -与多数投票(硬投票)相比,软投票将类别标签返回为预测概率之和的 argmax 。 - -具体的权重可以通过权重参数 `weights` 分配给每个分类器。当提供权重参数 `weights` 时,收集每个分类器的预测分类概率, 乘以分类器权重并取平均值。然后将具有最高平均概率的类别标签确定为最终类别标签。 - -为了用一个简单的例子来说明这一点,假设我们有 3 个分类器和一个 3 类分类问题,我们给所有分类器赋予相等的权重:w1 = 1,w2 = 1,w3 = 1 。 - -样本的加权平均概率计算如下: - -| 分类器 | 类别 1 | 类别 2 | 类别 3 | -| --- | --- | --- | --- | -| 分类器 1 | w1 * 0.2 | w1 * 0.5 | w1 * 0.3 | -| 分类器 2 | w2 * 0.6 | w2 * 0.3 | w2 * 0.1 | -| 分类器 3 | w3 * 0.3 | w3 * 0.4 | w3 * 0.3 | -| 加权平均的结果 | 0.37 | 0.4 | 0.23 | - -这里可以看出,预测的类标签是 2,因为它具有最大的平均概率. - -下边的示例程序说明了当软投票分类器(soft VotingClassifier)是基于线性支持向量机(linear SVM)、决策树(Decision Tree)、K 近邻(K-nearest)分类器时,决策域可能的变化情况: - -```py ->>> from sklearn import datasets ->>> from sklearn.tree import DecisionTreeClassifier ->>> from sklearn.neighbors import KNeighborsClassifier ->>> from sklearn.svm import SVC ->>> from itertools import product ->>> from sklearn.ensemble import VotingClassifier - -``` - -```py ->>> # Loading some example data ->>> iris = datasets.load_iris() ->>> X = iris.data[:, [0,2]] ->>> y = iris.target - -``` - -```py ->>> # Training classifiers ->>> clf1 = DecisionTreeClassifier(max_depth=4) ->>> clf2 = KNeighborsClassifier(n_neighbors=7) ->>> clf3 = SVC(kernel='rbf', probability=True) ->>> eclf = VotingClassifier(estimators=[('dt', clf1), ('knn', clf2), ('svc', clf3)], voting='soft', weights=[2,1,2]) - -``` - -```py ->>> clf1 = clf1.fit(X,y) ->>> clf2 = clf2.fit(X,y) ->>> clf3 = clf3.fit(X,y) ->>> eclf = eclf.fit(X,y) - -``` - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_voting_decision_regions_0011.png](img/e02e680946360c19e1cee28c92173bc4.jpg)](../auto_examples/ensemble/plot_voting_decision_regions.html) - -### 1.11.5.3\. 投票分类器(VotingClassifier)在网格搜索(GridSearch)应用 - -为了调整每个估计器的超参数, <cite>VotingClassifier</cite> 也可以和 <cite>GridSearch</cite> 一起使用: - -```py ->>> from sklearn.model_selection import GridSearchCV ->>> clf1 = LogisticRegression(random_state=1) ->>> clf2 = RandomForestClassifier(random_state=1) ->>> clf3 = GaussianNB() ->>> eclf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('gnb', clf3)], voting='soft') - ->>> params = {'lr__C': [1.0, 100.0], 'rf__n_estimators': [20, 200],} - ->>> grid = GridSearchCV(estimator=eclf, param_grid=params, cv=5) ->>> grid = grid.fit(iris.data, iris.target) - -``` - -#### 1.11.5.3.1\. 用法 - -为了通过预测的类别概率来预测类别标签(投票分类器中的 scikit-learn estimators 必须支持 `predict_proba` 方法): - -```py ->>> eclf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('gnb', clf3)], voting='soft') - -``` - -可选地,也可以为单个分类器提供权重: - -```py ->>> eclf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('gnb', clf3)], voting='soft', weights=[2,5,1]) - -``` diff --git a/docs/0.19.x/13.md b/docs/0.19.x/13.md deleted file mode 100755 index 5955493695846ce8626201e5dd51eb4b01ac4371..0000000000000000000000000000000000000000 --- a/docs/0.19.x/13.md +++ /dev/null @@ -1,300 +0,0 @@ -# 1.12\. 多类和多标签算法 - -校验者: -        [@溪流-十四号](https://github.com/apachecn/scikit-learn-doc-zh) -        [@大魔王飞仙](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@v](https://github.com/apachecn/scikit-learn-doc-zh) - -Warning - -All classifiers in scikit-learn do multiclass classification out-of-the-box. You don’t need to use the [`sklearn.multiclass`](classes.html#module-sklearn.multiclass "sklearn.multiclass") module unless you want to experiment with different multiclass strategies. - -[`sklearn.multiclass`](classes.html#module-sklearn.multiclass "sklearn.multiclass") 模块采用了 _元评估器_ ,通过把``多类`` 和 `多标签` 分类问题分解为 二元分类问题去解决。这同样适用于多目标回归问题。 - -* **Multiclass classification** **多类分类** 意味着一个分类任务需要对多于两个类的数据进行分类。比如,对一系列的橘子, - -苹果或者梨的图片进行分类。多类分类假设每一个样本有且仅有一个标签:一个水果可以被归类为苹果,也可以 是梨,但不能同时被归类为两类。 - -* **Multilabel classification** **多标签分类** 给每一个样本分配一系列标签。这可以被认为是预测不 - -相互排斥的数据点的属性,例如与文档类型相关的主题。一个文本可以归类为任意类别,例如可以同时为政治、金融、 教育相关或者不属于以上任何类别。 - -* **Multioutput regression** **多输出分类** 为每个样本分配一组目标值。这可以认为是预测每一个样本的多个属性, - -比如说一个具体地点的风的方向和大小。 - -* **Multioutput-multiclass classification** and **multi-task classification** [**](#id2)多输出-多类分类和 - -```py -多任务分类** 意味着单个的评估器要解决多个联合的分类任务。这是只考虑二分类的 multi-label classification -``` - -> 和 multi-class classification 任务的推广。 _此类问题输出的格式是一个二维数组或者一个稀疏矩阵。_ - -每个输出变量的标签集合可以是各不相同的。比如说,一个样本可以将“梨”作为一个输出变量的值,这个输出变 量在一个含有“梨”、“苹果”等水果种类的有限集合中取可能的值;将“蓝色”或者“绿色”作为第二个输出变量的值, 这个输出变量在一个含有“绿色”、“红色”、“蓝色”等颜色种类的有限集合中取可能的值… - -这意味着任何处理 multi-output multiclass or multi-task classification 任务的分类器,在特殊的 情况下支持 multi-label classification 任务。Multi-task classification 与具有不同模型公式 的 multi-output classification 相似。详细情况请查阅相关的分类器的文档。 - -所有的 scikit-learn 分类器都能处理 multiclass classification 任务, 但是 [`sklearn.multiclass`](classes.html#module-sklearn.multiclass "sklearn.multiclass") 提供的元评估器允许改变在处理超过两类数据时的方式,因为这会对分类器的性能产生影响 (无论是在泛化误差或者所需要的计算资源方面) - -下面是按照 scikit-learn 策略分组的分类器的总结,如果你使用其中的一个,则不需要此类中的元评估器,除非你想要自定义的多分类方式。 - -* **固有的多类分类器:** - * [`sklearn.naive_bayes.BernoulliNB`](generated/sklearn.naive_bayes.BernoulliNB.html#sklearn.naive_bayes.BernoulliNB "sklearn.naive_bayes.BernoulliNB") - * [`sklearn.tree.DecisionTreeClassifier`](generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier "sklearn.tree.DecisionTreeClassifier") - * [`sklearn.tree.ExtraTreeClassifier`](generated/sklearn.tree.ExtraTreeClassifier.html#sklearn.tree.ExtraTreeClassifier "sklearn.tree.ExtraTreeClassifier") - * [`sklearn.ensemble.ExtraTreesClassifier`](generated/sklearn.ensemble.ExtraTreesClassifier.html#sklearn.ensemble.ExtraTreesClassifier "sklearn.ensemble.ExtraTreesClassifier") - * [`sklearn.naive_bayes.GaussianNB`](generated/sklearn.naive_bayes.GaussianNB.html#sklearn.naive_bayes.GaussianNB "sklearn.naive_bayes.GaussianNB") - * [`sklearn.neighbors.KNeighborsClassifier`](generated/sklearn.neighbors.KNeighborsClassifier.html#sklearn.neighbors.KNeighborsClassifier "sklearn.neighbors.KNeighborsClassifier") - * [`sklearn.semi_supervised.LabelPropagation`](generated/sklearn.semi_supervised.LabelPropagation.html#sklearn.semi_supervised.LabelPropagation "sklearn.semi_supervised.LabelPropagation") - * [`sklearn.semi_supervised.LabelSpreading`](generated/sklearn.semi_supervised.LabelSpreading.html#sklearn.semi_supervised.LabelSpreading "sklearn.semi_supervised.LabelSpreading") - * [`sklearn.discriminant_analysis.LinearDiscriminantAnalysis`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis "sklearn.discriminant_analysis.LinearDiscriminantAnalysis") - * [`sklearn.svm.LinearSVC`](generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC "sklearn.svm.LinearSVC") (setting multi_class=”crammer_singer”) - * [`sklearn.linear_model.LogisticRegression`](generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression "sklearn.linear_model.LogisticRegression") (setting multi_class=”multinomial”) - * [`sklearn.linear_model.LogisticRegressionCV`](generated/sklearn.linear_model.LogisticRegressionCV.html#sklearn.linear_model.LogisticRegressionCV "sklearn.linear_model.LogisticRegressionCV") (setting multi_class=”multinomial”) - * [`sklearn.neural_network.MLPClassifier`](generated/sklearn.neural_network.MLPClassifier.html#sklearn.neural_network.MLPClassifier "sklearn.neural_network.MLPClassifier") - * [`sklearn.neighbors.NearestCentroid`](generated/sklearn.neighbors.NearestCentroid.html#sklearn.neighbors.NearestCentroid "sklearn.neighbors.NearestCentroid") - * [`sklearn.discriminant_analysis.QuadraticDiscriminantAnalysis`](generated/sklearn.discriminant_analysis.QuadraticDiscriminantAnalysis.html#sklearn.discriminant_analysis.QuadraticDiscriminantAnalysis "sklearn.discriminant_analysis.QuadraticDiscriminantAnalysis") - * [`sklearn.neighbors.RadiusNeighborsClassifier`](generated/sklearn.neighbors.RadiusNeighborsClassifier.html#sklearn.neighbors.RadiusNeighborsClassifier "sklearn.neighbors.RadiusNeighborsClassifier") - * [`sklearn.ensemble.RandomForestClassifier`](generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier "sklearn.ensemble.RandomForestClassifier") - * [`sklearn.linear_model.RidgeClassifier`](generated/sklearn.linear_model.RidgeClassifier.html#sklearn.linear_model.RidgeClassifier "sklearn.linear_model.RidgeClassifier") - * [`sklearn.linear_model.RidgeClassifierCV`](generated/sklearn.linear_model.RidgeClassifierCV.html#sklearn.linear_model.RidgeClassifierCV "sklearn.linear_model.RidgeClassifierCV") -* **1对1的多类分类器:** - * [`sklearn.svm.NuSVC`](generated/sklearn.svm.NuSVC.html#sklearn.svm.NuSVC "sklearn.svm.NuSVC") - * [`sklearn.svm.SVC`](generated/sklearn.svm.SVC.html#sklearn.svm.SVC "sklearn.svm.SVC"). - * [`sklearn.gaussian_process.GaussianProcessClassifier`](generated/sklearn.gaussian_process.GaussianProcessClassifier.html#sklearn.gaussian_process.GaussianProcessClassifier "sklearn.gaussian_process.GaussianProcessClassifier") (setting multi_class = “one_vs_one”) -* **1对多的多类分类器:** - * [`sklearn.ensemble.GradientBoostingClassifier`](generated/sklearn.ensemble.GradientBoostingClassifier.html#sklearn.ensemble.GradientBoostingClassifier "sklearn.ensemble.GradientBoostingClassifier") - * [`sklearn.gaussian_process.GaussianProcessClassifier`](generated/sklearn.gaussian_process.GaussianProcessClassifier.html#sklearn.gaussian_process.GaussianProcessClassifier "sklearn.gaussian_process.GaussianProcessClassifier") (setting multi_class = “one_vs_rest”) - * [`sklearn.svm.LinearSVC`](generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC "sklearn.svm.LinearSVC") (setting multi_class=”ovr”) - * [`sklearn.linear_model.LogisticRegression`](generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression "sklearn.linear_model.LogisticRegression") (setting multi_class=”ovr”) - * [`sklearn.linear_model.LogisticRegressionCV`](generated/sklearn.linear_model.LogisticRegressionCV.html#sklearn.linear_model.LogisticRegressionCV "sklearn.linear_model.LogisticRegressionCV") (setting multi_class=”ovr”) - * [`sklearn.linear_model.SGDClassifier`](generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier "sklearn.linear_model.SGDClassifier") - * [`sklearn.linear_model.Perceptron`](generated/sklearn.linear_model.Perceptron.html#sklearn.linear_model.Perceptron "sklearn.linear_model.Perceptron") - * [`sklearn.linear_model.PassiveAggressiveClassifier`](generated/sklearn.linear_model.PassiveAggressiveClassifier.html#sklearn.linear_model.PassiveAggressiveClassifier "sklearn.linear_model.PassiveAggressiveClassifier") -* **支持多标签分类的分类器:** - * [`sklearn.tree.DecisionTreeClassifier`](generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier "sklearn.tree.DecisionTreeClassifier") - * [`sklearn.tree.ExtraTreeClassifier`](generated/sklearn.tree.ExtraTreeClassifier.html#sklearn.tree.ExtraTreeClassifier "sklearn.tree.ExtraTreeClassifier") - * [`sklearn.ensemble.ExtraTreesClassifier`](generated/sklearn.ensemble.ExtraTreesClassifier.html#sklearn.ensemble.ExtraTreesClassifier "sklearn.ensemble.ExtraTreesClassifier") - * [`sklearn.neighbors.KNeighborsClassifier`](generated/sklearn.neighbors.KNeighborsClassifier.html#sklearn.neighbors.KNeighborsClassifier "sklearn.neighbors.KNeighborsClassifier") - * [`sklearn.neural_network.MLPClassifier`](generated/sklearn.neural_network.MLPClassifier.html#sklearn.neural_network.MLPClassifier "sklearn.neural_network.MLPClassifier") - * [`sklearn.neighbors.RadiusNeighborsClassifier`](generated/sklearn.neighbors.RadiusNeighborsClassifier.html#sklearn.neighbors.RadiusNeighborsClassifier "sklearn.neighbors.RadiusNeighborsClassifier") - * [`sklearn.ensemble.RandomForestClassifier`](generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier "sklearn.ensemble.RandomForestClassifier") - * [`sklearn.linear_model.RidgeClassifierCV`](generated/sklearn.linear_model.RidgeClassifierCV.html#sklearn.linear_model.RidgeClassifierCV "sklearn.linear_model.RidgeClassifierCV") -* **支持多类-多输出分类的分类器:** - * [`sklearn.tree.DecisionTreeClassifier`](generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier "sklearn.tree.DecisionTreeClassifier") - * [`sklearn.tree.ExtraTreeClassifier`](generated/sklearn.tree.ExtraTreeClassifier.html#sklearn.tree.ExtraTreeClassifier "sklearn.tree.ExtraTreeClassifier") - * [`sklearn.ensemble.ExtraTreesClassifier`](generated/sklearn.ensemble.ExtraTreesClassifier.html#sklearn.ensemble.ExtraTreesClassifier "sklearn.ensemble.ExtraTreesClassifier") - * [`sklearn.neighbors.KNeighborsClassifier`](generated/sklearn.neighbors.KNeighborsClassifier.html#sklearn.neighbors.KNeighborsClassifier "sklearn.neighbors.KNeighborsClassifier") - * [`sklearn.neighbors.RadiusNeighborsClassifier`](generated/sklearn.neighbors.RadiusNeighborsClassifier.html#sklearn.neighbors.RadiusNeighborsClassifier "sklearn.neighbors.RadiusNeighborsClassifier") - * [`sklearn.ensemble.RandomForestClassifier`](generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier "sklearn.ensemble.RandomForestClassifier") - -Warning - -At present, no metric in [`sklearn.metrics`](classes.html#module-sklearn.metrics "sklearn.metrics") supports the multioutput-multiclass classification task. - -## 1.12.1\. 多标签分类格式 - -在 multilabel learning 中,二元分类任务的合集表示为二进制数组:每一个样本是大小为 (n_samples, n_classes) 的二维数组中的一行二进制值,比如非0元素,表示为对应标签的 子集。 一个数组 `np.array([[1, 0, 0], [0, 1, 1], [0, 0, 0]])` 表示第一个样本属于第 0 个标签,第二个样本属于第一个和第二个标签,第三个样本不属于任何标签。 - -通过一系列的标签来产生多标签数据可能更为直观。 [`MultiLabelBinarizer`](generated/sklearn.preprocessing.MultiLabelBinarizer.html#sklearn.preprocessing.MultiLabelBinarizer "sklearn.preprocessing.MultiLabelBinarizer") 转换器可以用来在标签接口和格式指示器接口之间进行转换。 - -```py ->>> from sklearn.preprocessing import MultiLabelBinarizer ->>> y = [[2, 3, 4], [2], [0, 1, 3], [0, 1, 2, 3, 4], [0, 1, 2]] ->>> MultiLabelBinarizer().fit_transform(y) -array([[0, 0, 1, 1, 1], - [0, 0, 1, 0, 0], - [1, 1, 0, 1, 0], - [1, 1, 1, 1, 1], - [1, 1, 1, 0, 0]]) - -``` - -## 1.12.2\. 1对其余 - -这个方法也被称为 **1对多**, 在 [`OneVsRestClassifier`](generated/sklearn.multiclass.OneVsRestClassifier.html#sklearn.multiclass.OneVsRestClassifier "sklearn.multiclass.OneVsRestClassifier") 模块中执行。 这个方法在于每一个类都将用一个分类器进行拟合。 对于每一个分类器,该类将会和其他所有的类有所区别。除了它的计算效率之外 (只需要 <cite>n_classes</cite> 个分类器), 这种方法的优点是它具有可解释性。 因为每一个类都可以通过有且仅有一个分类器来代表,所以通过检查一个类相关的分类器就可以获得该类的信息。这是最常用的方法,也是一个合理的默认选择。 - -### 1.12.2.1\. 多类学习 - -下面是一个使用 OvR 的一个例子: - -```py ->>> from sklearn import datasets ->>> from sklearn.multiclass import OneVsRestClassifier ->>> from sklearn.svm import LinearSVC ->>> iris = datasets.load_iris() ->>> X, y = iris.data, iris.target ->>> OneVsRestClassifier(LinearSVC(random_state=0)).fit(X, y).predict(X) -array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]) - -``` - -### 1.12.2.2\. 多标签学习 - -[`OneVsRestClassifier`](generated/sklearn.multiclass.OneVsRestClassifier.html#sklearn.multiclass.OneVsRestClassifier "sklearn.multiclass.OneVsRestClassifier") 1对其余分类器 也支持 multilabel classification. 要使用该功能,给分类器提供一个指示矩阵,比如 [i,j] 表示第i个样本中的第j个标签。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_multilabel_0011.png](img/2e06713c93719ff874fb9f4fab7a6fbf.jpg)](../auto_examples/plot_multilabel.html) - -示例: - -* [Multilabel classification](../auto_examples/plot_multilabel.html#sphx-glr-auto-examples-plot-multilabel-py) - -## 1.12.3\. 1对1 - -[`OneVsOneClassifier`](generated/sklearn.multiclass.OneVsOneClassifier.html#sklearn.multiclass.OneVsOneClassifier "sklearn.multiclass.OneVsOneClassifier") 1对1分类器 将会为每一对类别构造出一个分类器,在预测阶段,收到最多投票的类别将会被挑选出来。 当存在结时(两个类具有同样的票数的时候), 1对1分类器会选择总分类置信度最高的类,其中总分类置信度是由下层的二元分类器 计算出的成对置信等级累加而成。 - -因为这需要训练出 `n_classes * (n_classes - 1) / 2` 个分类器, 由于复杂度为 O(n_classes^2),这个方法通常比 one-vs-the-rest 慢。然而,这个方法也有优点,比如说是在没有很好的缩放 `n_samples` 数据的核方法中。 这是由于每个单独的学习问题只涉及一小部分数据,而 one-vs-the-rest 将会使用 `n_classes` 次完整的数据。 - -### 1.12.3.1\. 多类别学习 - -Below is an example of multiclass learning using OvO: - -```py ->>> from sklearn import datasets ->>> from sklearn.multiclass import OneVsOneClassifier ->>> from sklearn.svm import LinearSVC ->>> iris = datasets.load_iris() ->>> X, y = iris.data, iris.target ->>> OneVsOneClassifier(LinearSVC(random_state=0)).fit(X, y).predict(X) -array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]) - -``` - -参考文献: - -* “Pattern Recognition and Machine Learning. Springer”, Christopher M. Bishop, page 183, (First Edition) - -## 1.12.4\. 误差校正输出代码 - -基于Output-code的方法不同于 one-vs-the-rest 和 one-vs-one。使用这些方法,每一个类将会被映射到欧几里得空间,每一个维度上的值只能为0或者1。另一种解释它的方法是,每一个类被表示为二进制 码(一个 由0 和 1 组成的数组)。保存 location (位置)/ 每一个类的编码的矩阵被称为 code book。编码的大小是前面提到的欧几里得空间的纬度。直观上来说,每一个类应该使用一个唯一的编码,同时,好的 code book 应该能够优化分类的精度。 在实现上,我们使用随机产生的 code book,正如在 [[3]](#id13) 提倡的方式,即使更加详尽的方法可能会在未来被加入其中。 - -在训练时,code book 每一位的二分类器将会被训练。在预测时,分类器将映射到类空间中选中的点的附近。 - -在 [`OutputCodeClassifier`](generated/sklearn.multiclass.OutputCodeClassifier.html#sklearn.multiclass.OutputCodeClassifier "sklearn.multiclass.OutputCodeClassifier"), `code_size` 属性允许用户设置将会用到的分类器的数量。 它是类别总数的百分比。 - -在 0 或 1 之中的一个数字会比 one-vs-the-rest 使用更少的分类器。理论上 `log2(n_classes) / n_classes` 足以明确表示每个类。然而在实际情况中,这也许会导致不太好的精确度,因为 `log2(n_classes)` 小于 n_classes. - -比 1 大的数字比 one-vs-the-rest 需要更多的分类器。在这种情况下,一些分类器在理论上会纠正其他分类器的错误,因此命名为 “error-correcting” 。然而在实际上这通常不会发生,因为许多分类器的错误通常意义上来说是相关的。error-correcting output codes 和 bagging 有一个相似的作用效果。 - -### 1.12.4.1\. 多类别学习 - -Below is an example of multiclass learning using Output-Codes: - -```py ->>> from sklearn import datasets ->>> from sklearn.multiclass import OutputCodeClassifier ->>> from sklearn.svm import LinearSVC ->>> iris = datasets.load_iris() ->>> X, y = iris.data, iris.target ->>> clf = OutputCodeClassifier(LinearSVC(random_state=0), -... code_size=2, random_state=0) ->>> clf.fit(X, y).predict(X) -array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 1, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]) - -``` - -参考文献: - -* “Solving multiclass learning problems via error-correcting output codes”, Dietterich T., Bakiri G., Journal of Artificial Intelligence Research 2, 1995. - -| [[3]](#id11) | “The error coding method and PICTs”, James G., Hastie T., Journal of Computational and Graphical statistics 7, 1998. | - -* “The Elements of Statistical Learning”, Hastie T., Tibshirani R., Friedman J., page 606 (second-edition) 2008. - -## 1.12.5\. 多输出回归 - -多输出回归支持 `MultiOutputRegressor` 可以被添加到任何回归器中。这个策略包括对每个目标拟合一个回归器。因为每一个目标可以被一个回归器精确地表示,通过检查对应的回归器,可以获取关于目标的信息。 因为 `MultiOutputRegressor` 对于每一个目标可以训练出一个回归器,所以它无法利用目标之间的相关度信息。 - -以下是 multioutput regression(多输出回归)的示例: - -```py ->>> from sklearn.datasets import make_regression ->>> from sklearn.multioutput import MultiOutputRegressor ->>> from sklearn.ensemble import GradientBoostingRegressor ->>> X, y = make_regression(n_samples=10, n_targets=3, random_state=1) ->>> MultiOutputRegressor(GradientBoostingRegressor(random_state=0)).fit(X, y).predict(X) -array([[-154.75474165, -147.03498585, -50.03812219], - [ 7.12165031, 5.12914884, -81.46081961], - [-187.8948621 , -100.44373091, 13.88978285], - [-141.62745778, 95.02891072, -191.48204257], - [ 97.03260883, 165.34867495, 139.52003279], - [ 123.92529176, 21.25719016, -7.84253 ], - [-122.25193977, -85.16443186, -107.12274212], - [ -30.170388 , -94.80956739, 12.16979946], - [ 140.72667194, 176.50941682, -17.50447799], - [ 149.37967282, -81.15699552, -5.72850319]]) - -``` - -## 1.12.6\. 多输出分类 - -Multioutput classification 支持能够被添加到任何带有 `MultiOutputClassifier` 标志的分类器中. 这种方法为每一个目标训练一个分类器。 这就允许产生多目标变量分类器。这种类的目的是扩展评估器用于评估一系列目标函数 (f1,f2,f3…,fn) ,这些函数在一个单独的预测矩阵上进行训练以此来预测一系列的响应 (y1,y2,y3…,yn)。 - -下面是多输出分类的一个例子: - -```py ->>> from sklearn.datasets import make_classification ->>> from sklearn.multioutput import MultiOutputClassifier ->>> from sklearn.ensemble import RandomForestClassifier ->>> from sklearn.utils import shuffle ->>> import numpy as np ->>> X, y1 = make_classification(n_samples=10, n_features=100, n_informative=30, n_classes=3, random_state=1) ->>> y2 = shuffle(y1, random_state=1) ->>> y3 = shuffle(y1, random_state=2) ->>> Y = np.vstack((y1, y2, y3)).T ->>> n_samples, n_features = X.shape # 10,100 ->>> n_outputs = Y.shape[1] # 3 ->>> n_classes = 3 ->>> forest = RandomForestClassifier(n_estimators=100, random_state=1) ->>> multi_target_forest = MultiOutputClassifier(forest, n_jobs=-1) ->>> multi_target_forest.fit(X, Y).predict(X) -array([[2, 2, 0], - [1, 2, 1], - [2, 1, 0], - [0, 0, 2], - [0, 2, 1], - [0, 0, 2], - [1, 1, 0], - [1, 1, 1], - [0, 0, 2], - [2, 0, 0]]) - -``` - -## 1.12.7\. 链式分类器 - -Classifier chains (查看 `ClassifierChain`) 是一种集合多个二分类器为一个单独的多标签模型的方法,这种方法能够发掘目标之间的相关性信息。 - -对于有 N 个类的多标签分类问题,为 N 个二元分类器分配 0 到 N-1 之间的一个整数。这些整数定义了模型在 chain 中的顺序。将每个分类器拟合可用的训练数据与真实的类别标签,标签数字相对较小。 - -当进行预测时,真正的标签将无法使用。相反,每一个模型的预测结果将会传递给链上的下一个模型作为特征来进行使用。 - -很明显,链的顺序是十分重要的。链上的第一个模型没有关于其他标签的信息,而链上的最后一个模型将会具有所有其他标签的信息。 在一般情况下,我们并不知道链上模型最优的顺序,因此通常会使用许多随机的顺序,将他们的预测求平均。 - -参考文献: - -```py -Jesse Read, Bernhard Pfahringer, Geoff Holmes, Eibe Frank, -``` - -“Classifier Chains for Multi-label Classification”, 2009. \ No newline at end of file diff --git a/docs/0.19.x/14.md b/docs/0.19.x/14.md deleted file mode 100755 index ee1cea6aba6fd227329a25a30660a9128574ecf6..0000000000000000000000000000000000000000 --- a/docs/0.19.x/14.md +++ /dev/null @@ -1,180 +0,0 @@ -# 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 > .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 diff --git a/docs/0.19.x/15.md b/docs/0.19.x/15.md deleted file mode 100755 index 6c7f688cf61dcd667ecbc96a38fdcd1d315bab7f..0000000000000000000000000000000000000000 --- a/docs/0.19.x/15.md +++ /dev/null @@ -1,52 +0,0 @@ -# 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") 中的半监督估计, 能够利用这些附加的未标记数据来更好地捕获底层数据分布的形状,并将其更好地类推到新的样本。 当我们有非常少量的已标签化的点和大量的未标签化的点时,这些算法表现均良好。 - -<cite>y</cite> 中含有未标记的数据 - -在使用 `fit` 方法训练数据时, 将标识符与已标签化的数据一起分配给未标签化的点是尤其重要的. 实现该标记的方法是使用整数值 ![-1](img/8b3be66a25e0c33787b341667b261360.jpg). - -## 1.14.1\. 标签传播 - -标签传播表示半监督图推理算法的几个变体。 - -```py -该模型的一些特性如下: -``` - -* 可用于分类和回归任务 -* Kernel methods to project data into alternate dimensional spaces - -<cite>scikit-learn</cite> 提供了两种标签传播模型: [`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 > 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 diff --git a/docs/0.19.x/16.md b/docs/0.19.x/16.md deleted file mode 100755 index e8f143316fb5902c4d863e64496dc39bc4fb5093..0000000000000000000000000000000000000000 --- a/docs/0.19.x/16.md +++ /dev/null @@ -1,16 +0,0 @@ -# 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 diff --git a/docs/0.19.x/17.md b/docs/0.19.x/17.md deleted file mode 100755 index 9bb529ceb9378270d578aba811b40a78e00bc4f2..0000000000000000000000000000000000000000 --- a/docs/0.19.x/17.md +++ /dev/null @@ -1,65 +0,0 @@ -# 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:<cite>CalibratedClassifierCV</cite> 传递参数 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 diff --git a/docs/0.19.x/18.md b/docs/0.19.x/18.md deleted file mode 100755 index 2022369e1bdf264264e288ac7e5bff1ff0f67476..0000000000000000000000000000000000000000 --- a/docs/0.19.x/18.md +++ /dev/null @@ -1,245 +0,0 @@ -# 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 > 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` 进行标准化。 -> -> > ```py -> > >>> from sklearn.preprocessing import StandardScaler -> > >>> scaler = StandardScaler() -> > >>> # Don't cheat - fit only on training data -> > >>> scaler.fit(X_train) -> > >>> X_train = scaler.transform(X_train) -> > >>> # apply same transformation to test data -> > >>> X_test = scaler.transform(X_test) -> > -> > ``` -> > -> > 另一个推荐的方法是在 `Pipeline` 中使用的 `StandardScaler` 。 -> -> * 最好使用 `GridSearchCV` 找到一个合理的正则化参数 ![\alpha](img/d8b3d5242d513369a44f8bf0c6112744.jpg) ,通常范围是在 `10.0 ** -np.arange(1, 7)` 。 -> * 据经验可知,我们观察到 <cite>L-BFGS</cite> 收敛速度是更快的并且是小数据集上更好的解决方案。对于规模相对比较大的数据集,<cite>Adam</cite> 是非常鲁棒的。 它通常会迅速收敛,并得到相当不错的表现。 -> -> 另一方面,如果学习率调整得正确, 使用 momentum 或 nesterov’s momentum 的 <cite>SGD</cite> 可以比这两种算法更好。 - -## 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 diff --git a/docs/0.19.x/19.md b/docs/0.19.x/19.md deleted file mode 100755 index d9391b935cf1786fb4793fbc12aa2bdc45479c83..0000000000000000000000000000000000000000 --- a/docs/0.19.x/19.md +++ /dev/null @@ -1,119 +0,0 @@ -# 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 diff --git a/docs/0.19.x/2.md b/docs/0.19.x/2.md deleted file mode 100755 index d7e947cceffdfbe041dccb2bb65e003270b66d3e..0000000000000000000000000000000000000000 --- a/docs/0.19.x/2.md +++ /dev/null @@ -1,781 +0,0 @@ -{% raw %} -# 1.1\. 广义线性模型 - -校验者: -        [@专业吹牛逼的小明](https://github.com/apachecn/scikit-learn-doc-zh) -        [@Gladiator](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@瓜牛](https://github.com/apachecn/scikit-learn-doc-zh) -        [@年纪大了反应慢了](https://github.com/apachecn/scikit-learn-doc-zh) -        [@Hazekiah](https://github.com/apachecn/scikit-learn-doc-zh) -        [@BWM-蜜蜂](https://github.com/apachecn/scikit-learn-doc-zh) - -下面是一组用于回归的方法,其中目标值 y 是输入变量 x 的线性组合。 在数学概念中,如果 ![\hat{y}](img/047826f1c2e6f2687b304cb5217be8d8.jpg) 是预测值。 - -![\hat{y}(w, x) = w_0 + w_1 x_1 + ... + w_p x_p](img/4ee9f6c666393981b6458e54c3ec89d0.jpg) - -在整个模块中,我们定义向量 ![w = (w_1,..., w_p)](img/b003858334d1ad594207911e84219151.jpg) 作为 `coef_` ,定义 ![w_0](img/57e15e43b846791e47a202e1a9a5d8ce.jpg) 作为 `intercept_` 。 - -如果需要使用广义线性模型进行分类,请参阅 [logistic 回归](#logistic-regression) 。 - -## 1.1.1\. 普通最小二乘法 - -[`LinearRegression`](generated/sklearn.linear_model.LinearRegression.html#sklearn.linear_model.LinearRegression "sklearn.linear_model.LinearRegression") 拟合一个带有系数 ![w = (w_1, ..., w_p)](img/3f5adc0c9b0e51a0759ed6ac49f94431.jpg) 的线性模型,使得数据集实际观测数据和预测数据(估计值)之间的残差平方和最小。其数学表达式为: - -![\underset{w}{min\,} {|| X w - y||_2}^2](img/1b6228a71a038f66ac7b8a2743adf4e7.jpg) - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_ols_0011.png](img/af7b81123e6cdf0b42acec802041beef.jpg)](../auto_examples/linear_model/plot_ols.html) - -[`LinearRegression`](generated/sklearn.linear_model.LinearRegression.html#sklearn.linear_model.LinearRegression "sklearn.linear_model.LinearRegression") 会调用 `fit` 方法来拟合数组 X, y,并且将线性模型的系数 ![w](img/8a58e8df6a985a3273e39bac7dd72b1f.jpg) 存储在其成员变量 `coef_` 中: - -```py ->>> from sklearn import linear_model ->>> reg = linear_model.LinearRegression() ->>> reg.fit ([[0, 0], [1, 1], [2, 2]], [0, 1, 2]) -LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False) ->>> reg.coef_ -array([ 0.5, 0.5]) - -``` - -然而,对于普通最小二乘的系数估计问题,其依赖于模型各项的相互独立性。当各项是相关的,且设计矩阵 ![X](img/43c1fea57579e54f80c0535bc582626f.jpg) 的各列近似线性相关,那么,设计矩阵会趋向于奇异矩阵,这会导致最小二乘估计对于随机误差非常敏感,产生很大的方差。例如,在没有实验设计的情况下收集到的数据,这种多重共线性(multicollinearity)的情况可能真的会出现。 - -示例: - -* [Linear Regression Example](../auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) - -### 1.1.1.1\. 普通最小二乘法复杂度 - -该方法使用 X 的奇异值分解来计算最小二乘解。如果 X 是一个 size 为 (n, p) 的矩阵,设 ![n \geq p](img/7a7a32bd2dd0da3d117c39efc7e35dd3.jpg) ,则该方法的复杂度为 ![O(n p^2)](img/e761380fca8200d40164e77965652982.jpg) - -## 1.1.2\. 岭回归 - -[`Ridge`](generated/sklearn.linear_model.Ridge.html#sklearn.linear_model.Ridge "sklearn.linear_model.Ridge") 回归通过对系数的大小施加惩罚来解决 [普通最小二乘法](#ordinary-least-squares) 的一些问题。 岭系数最小化的是带罚项的残差平方和, - -![\underset{w}{min\,} {{|| X w - y||_2}^2 + \alpha {||w||_2}^2}](img/c7e49892dca2f0df35d1261a276693f2.jpg) - -其中, ![\alpha \geq 0](img/a4775baaa990a4fbffcfc2688e3b5578.jpg) 是控制系数收缩量的复杂性参数: ![\alpha](img/d8b3d5242d513369a44f8bf0c6112744.jpg) 的值越大,收缩量越大,这样系数对共线性的鲁棒性也更强。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_ridge_path_0011.png](img/a4a20739f22e7059a927ba615ec373da.jpg)](../auto_examples/linear_model/plot_ridge_path.html) - -与其他线性模型一样, [`Ridge`](generated/sklearn.linear_model.Ridge.html#sklearn.linear_model.Ridge "sklearn.linear_model.Ridge") 用 `fit` 方法将模型系数 ![w](img/8a58e8df6a985a3273e39bac7dd72b1f.jpg) 存储在其 `coef_` 成员中: - -```py ->>> from sklearn import linear_model ->>> reg = linear_model.Ridge (alpha = .5) ->>> reg.fit ([[0, 0], [0, 0], [1, 1]], [0, .1, 1]) -Ridge(alpha=0.5, copy_X=True, fit_intercept=True, max_iter=None, - normalize=False, random_state=None, solver='auto', tol=0.001) ->>> reg.coef_ -array([ 0.34545455, 0.34545455]) ->>> reg.intercept_ -0.13636... - -``` - -示例: - -* :ref:[`](#id5)sphx_glr_auto_examples_linear_model_plot_ridge_path.py`( 作为正则化的函数,绘制岭系数 ) -* :ref:[`](#id7)sphx_glr_auto_examples_text_document_classification_20newsgroups.py`( 使用稀疏特征的文本文档分类 ) - -### 1.1.2.1\. 岭回归的复杂度 - -这种方法与 [普通最小二乘法](#ordinary-least-squares) 的复杂度是相同的. - -### 1.1.2.2\. 设置正则化参数:广义交叉验证 - -[`RidgeCV`](generated/sklearn.linear_model.RidgeCV.html#sklearn.linear_model.RidgeCV "sklearn.linear_model.RidgeCV") 通过内置的 Alpha 参数的交叉验证来实现岭回归。 该对象与 GridSearchCV 的使用方法相同,只是它默认为 Generalized Cross-Validation(广义交叉验证 GCV),这是一种有效的留一验证方法(LOO-CV): - -```py ->>> from sklearn import linear_model ->>> reg = linear_model.RidgeCV(alphas=[0.1, 1.0, 10.0]) ->>> reg.fit([[0, 0], [0, 0], [1, 1]], [0, .1, 1]) -RidgeCV(alphas=[0.1, 1.0, 10.0], cv=None, fit_intercept=True, scoring=None, - normalize=False) ->>> reg.alpha_ -0.1 - -``` - -参考 - -* “Notes on Regularized Least Squares”, Rifkin & Lippert ([technical report](http://cbcl.mit.edu/projects/cbcl/publications/ps/MIT-CSAIL-TR-2007-025.pdf), [course slides](http://www.mit.edu/~9.520/spring07/Classes/rlsslides.pdf)). - -## 1.1.3\. Lasso - -The [`Lasso`](generated/sklearn.linear_model.Lasso.html#sklearn.linear_model.Lasso "sklearn.linear_model.Lasso") 是估计稀疏系数的线性模型。 它在一些情况下是有用的,因为它倾向于使用具有较少参数值的情况,有效地减少给定解决方案所依赖变量的数量。 因此,Lasso 及其变体是压缩感知领域的基础。 在一定条件下,它可以恢复一组非零权重的精确集(见 [Compressive sensing: tomography reconstruction with L1 prior (Lasso)](../auto_examples/applications/plot_tomography_l1_reconstruction.html#sphx-glr-auto-examples-applications-plot-tomography-l1-reconstruction-py) )。 - -在数学公式表达上,它由一个带有 ![\ell_1](img/3bf32d926cdf24f440b6b831f0d9cc37.jpg) 先验的正则项的线性模型组成。 其最小化的目标函数是: - -![\underset{w}{min\,} { \frac{1}{2n_{samples}} ||X w - y||_2 ^ 2 + \alpha ||w||_1}](img/187eddee2de4e12860dc001c5f74b2b4.jpg) - -lasso estimate 解决了加上罚项 ![\alpha ||w||_1](img/b2ea359213f8f5b01eead0821e29e856.jpg) 的最小二乘法的最小化,其中, ![\alpha](img/d8b3d5242d513369a44f8bf0c6112744.jpg) 是一个常数, ![||w||_1](img/62eb544f1f6e234c61099fea1517300b.jpg) 是参数向量的 ![\ell_1](img/3bf32d926cdf24f440b6b831f0d9cc37.jpg)-norm 范数。 - -[`Lasso`](generated/sklearn.linear_model.Lasso.html#sklearn.linear_model.Lasso "sklearn.linear_model.Lasso") 类的实现使用了 coordinate descent (坐标下降算法)来拟合系数。 查看 [最小角回归](#least-angle-regression) ,这是另一种方法: - -```py ->>> from sklearn import linear_model ->>> reg = linear_model.Lasso(alpha = 0.1) ->>> reg.fit([[0, 0], [1, 1]], [0, 1]) -Lasso(alpha=0.1, copy_X=True, fit_intercept=True, max_iter=1000, - normalize=False, positive=False, precompute=False, random_state=None, - selection='cyclic', tol=0.0001, warm_start=False) ->>> reg.predict([[1, 1]]) -array([ 0.8]) - -``` - -对于较低级别的任务,同样有用的是函数 [`lasso_path`](generated/sklearn.linear_model.lasso_path.html#sklearn.linear_model.lasso_path "sklearn.linear_model.lasso_path") 。它能够通过搜索所有可能的路径上的值来计算系数。 - -举例: - -* [Lasso and Elastic Net for Sparse Signals](../auto_examples/linear_model/plot_lasso_and_elasticnet.html#sphx-glr-auto-examples-linear-model-plot-lasso-and-elasticnet-py) (稀疏信号的 lasso 和弹性网) -* [Compressive sensing: tomography reconstruction with L1 prior (Lasso)](../auto_examples/applications/plot_tomography_l1_reconstruction.html#sphx-glr-auto-examples-applications-plot-tomography-l1-reconstruction-py) (压缩感知:L1 先验(Lasso)的断层扫描重建) - -Note - -**Feature selection with Lasso(使用 Lasso 进行特征选择)** - -由于 Lasso 回归产生稀疏模型,因此可以用于执行特征选择,详见 [基于 L1 的特征选取](feature_selection.html#l1-feature-selection) (基于 L1 的特征选择)。 - -### 1.1.3.1\. 设置正则化参数 - -> `alpha` 参数控制估计系数的稀疏度。 - -#### 1.1.3.1.1\. 使用交叉验证 - -scikit-learn 通过交叉验证来公开设置 Lasso `alpha` 参数的对象: [`LassoCV`](generated/sklearn.linear_model.LassoCV.html#sklearn.linear_model.LassoCV "sklearn.linear_model.LassoCV") 和 [`LassoLarsCV`](generated/sklearn.linear_model.LassoLarsCV.html#sklearn.linear_model.LassoLarsCV "sklearn.linear_model.LassoLarsCV")。 [`LassoLarsCV`](generated/sklearn.linear_model.LassoLarsCV.html#sklearn.linear_model.LassoLarsCV "sklearn.linear_model.LassoLarsCV") 是基于下面解释的 [最小角回归](#least-angle-regression) 算法。 - -对于具有许多线性回归的高维数据集, [`LassoCV`](generated/sklearn.linear_model.LassoCV.html#sklearn.linear_model.LassoCV "sklearn.linear_model.LassoCV") 最常见。 然而,[`LassoLarsCV`](generated/sklearn.linear_model.LassoLarsCV.html#sklearn.linear_model.LassoLarsCV "sklearn.linear_model.LassoLarsCV") 在寻找 <cite>alpha</cite> 参数值上更具有优势,而且如果样本数量与特征数量相比非常小时,通常 [`LassoLarsCV`](generated/sklearn.linear_model.LassoLarsCV.html#sklearn.linear_model.LassoLarsCV "sklearn.linear_model.LassoLarsCV") 比 [`LassoCV`](generated/sklearn.linear_model.LassoCV.html#sklearn.linear_model.LassoCV "sklearn.linear_model.LassoCV") 要快。 - -**[![lasso_cv_1](img/035f009eecfdebf82b493f797843a919.jpg)](../auto_examples/linear_model/plot_lasso_model_selection.html) [![lasso_cv_2](img/ab2096ee4087e644cca732d92d241edf.jpg)](../auto_examples/linear_model/plot_lasso_model_selection.html)** - -#### 1.1.3.1.2\. 基于信息标准的模型选择 - -有多种选择时,估计器 [`LassoLarsIC`](generated/sklearn.linear_model.LassoLarsIC.html#sklearn.linear_model.LassoLarsIC "sklearn.linear_model.LassoLarsIC") 建议使用 Akaike information criterion (Akaike 信息准则)(AIC)和 Bayes Information criterion (贝叶斯信息准则)(BIC)。 当使用 k-fold 交叉验证时,正则化路径只计算一次而不是 k + 1 次,所以找到 α 的最优值是一种计算上更便宜的替代方法。 然而,这样的标准需要对解决方案的自由度进行适当的估计,对于大样本(渐近结果)导出,并假设模型是正确的,即数据实际上是由该模型生成的。 当问题严重受限(比样本更多的特征)时,他们也倾向于打破。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lasso_model_selection_0011.png](img/e7a07569c8c6af174aa061b9f8921065.jpg)](../auto_examples/linear_model/plot_lasso_model_selection.html) - -示例: - -* :ref:[`](#id15)sphx_glr_auto_examples_linear_model_plot_lasso_model_selection.py`(Lasso 型号选择:交叉验证/AIC/BIC) - -#### 1.1.3.1.3\. 与 SVM 的正则化参数的比较 - -`alpha` 和 SVM 的正则化参数``C`` 之间的等式关系是 `alpha = 1 / C` 或者 `alpha = 1 / (n_samples * C)` ,并依赖于估计器和模型优化的确切的目标函数。 .. _multi_task_lasso: - -## 1.1.4\. 多任务 Lasso - -> [`MultiTaskLasso`](generated/sklearn.linear_model.MultiTaskLasso.html#sklearn.linear_model.MultiTaskLasso "sklearn.linear_model.MultiTaskLasso") 是一个估计多元回归稀疏系数的线性模型: `y` 是一个 `(n_samples, n_tasks)` 的二维数组,其约束条件和其他回归问题(也称为任务)是一样的,都是所选的特征值。 - -下图比较了通过使用简单的 Lasso 或 MultiTaskLasso 得到的 W 中非零的位置。 Lasso 估计产生分散的非零值,而 MultiTaskLasso 的一整列都是非零的。 - -**[![multi_task_lasso_1](img/0449a2a9bce6d759e7253da7d17fa938.jpg)](../auto_examples/linear_model/plot_multi_task_lasso_support.html) [![multi_task_lasso_2](img/3b1e10150e98ef95e977c12ad0607620.jpg)](../auto_examples/linear_model/plot_multi_task_lasso_support.html)** - -**拟合 time-series model (时间序列模型),强制任何活动的功能始终处于活动状态。** - -示例: - -* [Joint feature selection with multi-task Lasso](../auto_examples/linear_model/plot_multi_task_lasso_support.html#sphx-glr-auto-examples-linear-model-plot-multi-task-lasso-support-py) (联合功能选择与多任务 Lasso) - -在数学上,它由一个线性模型组成,以混合的 ![\ell_1](img/3bf32d926cdf24f440b6b831f0d9cc37.jpg) ![\ell_2](img/8851bd0fe9749b4841b30cee41fb040d.jpg) 作为正则化器进行训练。目标函数最小化是: - -![\underset{w}{min\,} { \frac{1}{2n_{samples}} ||X W - Y||_{Fro} ^ 2 + \alpha ||W||_{21}}](img/aba64ff85b1f99c5d1c4f8e1ace15f89.jpg) - -其中 ![Fro](img/987fc6b717a40e57a95fb79a8e809309.jpg) 表示 Frobenius 标准: - -![||A||_{Fro} = \sqrt{\sum_{ij} a_{ij}^2}](img/9259b19a18f30f67db9e45b8c0b361c7.jpg) - -并且 ![\ell_1](img/3bf32d926cdf24f440b6b831f0d9cc37.jpg) ![\ell_2](img/8851bd0fe9749b4841b30cee41fb040d.jpg) 读取为: - -![||A||_{2 1} = \sum_i \sqrt{\sum_j a_{ij}^2}](img/2f373d871220ee042a8c2ee44e6fff3a.jpg) - -[`MultiTaskLasso`](generated/sklearn.linear_model.MultiTaskLasso.html#sklearn.linear_model.MultiTaskLasso "sklearn.linear_model.MultiTaskLasso") 类的实现使用了坐标下降作为拟合系数的算法。 - -## 1.1.5\. 弹性网络 - -`弹性网络` 是一种使用 L1, L2 范数作为先验正则项训练的线性回归模型。 这种组合允许学习到一个只有少量参数是非零稀疏的模型,就像 [`Lasso`](generated/sklearn.linear_model.Lasso.html#sklearn.linear_model.Lasso "sklearn.linear_model.Lasso") 一样,但是它仍然保持 一些像 [`Ridge`](generated/sklearn.linear_model.Ridge.html#sklearn.linear_model.Ridge "sklearn.linear_model.Ridge") 的正则性质。我们可利用 `l1_ratio` 参数控制 L1 和 L2 的凸组合。 - -弹性网络在很多特征互相联系的情况下是非常有用的。Lasso 很可能只随机考虑这些特征中的一个,而弹性网络更倾向于选择两个。 - -在实践中,Lasso 和 Ridge 之间权衡的一个优势是它允许在循环过程(Under rotate)中继承 Ridge 的稳定性。 - -在这里,最小化的目标函数是 - - -![\underset{w}{min\,} { \frac{1}{2n_{samples}} ||X w - y||_2 ^ 2 + \alpha \rho ||w||_1 + -\frac{\alpha(1-\rho)}{2} ||w||_2 ^ 2}](img/9b9ee41d276ad49322856b95cb6c7e43.jpg) - - -![https://scikit-learn.org/stable/_images/sphx_glr_plot_lasso_coordinate_descent_path_001.png:target:../auto_examples/linear_model/plot_lasso_coordinate_descent_path.html:align:center:scale:50%](../Images/aa0c61cd560f0fdab4fe10c7b12e5082.jpg) - -[`ElasticNetCV`](generated/sklearn.linear_model.ElasticNetCV.html#sklearn.linear_model.ElasticNetCV "sklearn.linear_model.ElasticNetCV") 类可以通过交叉验证来设置参数 `alpha` ( ![\alpha](img/d8b3d5242d513369a44f8bf0c6112744.jpg) ) 和 `l1_ratio` ( ![\rho](img/b91e4507d9fd7068b02f689d697f8714.jpg) ) 。 - -示例: - -* [Lasso and Elastic Net for Sparse Signals](../auto_examples/linear_model/plot_lasso_and_elasticnet.html#sphx-glr-auto-examples-linear-model-plot-lasso-and-elasticnet-py) -* [Lasso and Elastic Net](../auto_examples/linear_model/plot_lasso_coordinate_descent_path.html#sphx-glr-auto-examples-linear-model-plot-lasso-coordinate-descent-path-py) - -## 1.1.6\. 多任务弹性网络 - -> [`MultiTaskElasticNet`](generated/sklearn.linear_model.MultiTaskElasticNet.html#sklearn.linear_model.MultiTaskElasticNet "sklearn.linear_model.MultiTaskElasticNet") 是一个对多回归问题估算稀疏参数的弹性网络: `Y` 是一个二维数组,形状是 `(n_samples,n_tasks)`。 其限制条件是和其他回归问题一样,是选择的特征,也称为 tasks 。 - -从数学上来说, 它包含一个混合的 ![\ell_1](img/3bf32d926cdf24f440b6b831f0d9cc37.jpg) ![\ell_2](img/8851bd0fe9749b4841b30cee41fb040d.jpg) 先验和 ![\ell_2](img/8851bd0fe9749b4841b30cee41fb040d.jpg) 先验为正则项训练的线性模型 目标函数就是最小化: - - -![\underset{W}{min\,} { \frac{1}{2n_{samples}} ||X W - Y||_{Fro}^2 + \alpha \rho ||W||_{2 1} + -\frac{\alpha(1-\rho)}{2} ||W||_{Fro}^2}](img/a1670c1fcb5b7ad10830f43812ed50da.jpg) - - -在 [`MultiTaskElasticNet`](generated/sklearn.linear_model.MultiTaskElasticNet.html#sklearn.linear_model.MultiTaskElasticNet "sklearn.linear_model.MultiTaskElasticNet") 类中的实现采用了坐标下降法求解参数。 - -在 [`MultiTaskElasticNetCV`](generated/sklearn.linear_model.MultiTaskElasticNetCV.html#sklearn.linear_model.MultiTaskElasticNetCV "sklearn.linear_model.MultiTaskElasticNetCV") 中可以通过交叉验证来设置参数 `alpha` ( ![\alpha](img/d8b3d5242d513369a44f8bf0c6112744.jpg) ) 和 `l1_ratio` ( ![\rho](img/b91e4507d9fd7068b02f689d697f8714.jpg) ) 。 - -## 1.1.7\. 最小角回归 - -最小角回归 (LARS) 是对高维数据的回归算法, 由 Bradley Efron, Trevor Hastie, Iain Johnstone 和 Robert Tibshirani 开发完成。 LARS 和逐步回归很像。在每一步,它寻找与响应最有关联的 预测。当有很多预测有相同的关联时,它没有继续利用相同的预测,而是在这些预测中找出应该等角的方向。 - -LARS的优点: - -> * 当 p >> n,该算法数值运算上非常有效。(例如当维度的数目远超点的个数) -> * 它在计算上和前向选择一样快,和普通最小二乘法有相同的运算复杂度。 -> * 它产生了一个完整的分段线性的解决路径,在交叉验证或者其他相似的微调模型的方法上非常有用。 -> * 如果两个变量对响应几乎有相等的联系,则它们的系数应该有相似的增长率。因此这个算法和我们直觉 上的判断一样,而且还更加稳定。 -> * 它很容易修改并为其他估算器生成解,比如Lasso。 - -LARS 的缺点: - -> * 因为 LARS 是建立在循环拟合剩余变量上的,所以它对噪声非常敏感。这个问题,在 2004 年统计年鉴的文章由 Weisberg 详细讨论。 - -LARS 模型可以在 [`Lars`](generated/sklearn.linear_model.Lars.html#sklearn.linear_model.Lars "sklearn.linear_model.Lars") ,或者它的底层实现 [`lars_path`](generated/sklearn.linear_model.lars_path.html#sklearn.linear_model.lars_path "sklearn.linear_model.lars_path") 中被使用。 - -## 1.1.8\. LARS Lasso - -[`LassoLars`](generated/sklearn.linear_model.LassoLars.html#sklearn.linear_model.LassoLars "sklearn.linear_model.LassoLars") 是一个使用 LARS 算法的 lasso 模型,不同于基于坐标下降法的实现,它可以得到一个精确解,也就是一个关于自身参数标准化后的一个分段线性解。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lasso_lars_0011.png](img/05459a925be9207abbb2f72203e48cf2.jpg)](../auto_examples/linear_model/plot_lasso_lars.html) - -```py ->>> from sklearn import linear_model ->>> reg = linear_model.LassoLars(alpha=.1) ->>> reg.fit([[0, 0], [1, 1]], [0, 1]) -LassoLars(alpha=0.1, copy_X=True, eps=..., fit_intercept=True, - fit_path=True, max_iter=500, normalize=True, positive=False, - precompute='auto', verbose=False) ->>> reg.coef_ -array([ 0.717157..., 0\. ]) - -``` - -示例: - -* [Lasso path using LARS](../auto_examples/linear_model/plot_lasso_lars.html#sphx-glr-auto-examples-linear-model-plot-lasso-lars-py) - -Lars 算法提供了一个几乎无代价的沿着正则化参数的系数的完整路径,因此常利用函数 [`lars_path`](generated/sklearn.linear_model.lars_path.html#sklearn.linear_model.lars_path "sklearn.linear_model.lars_path") 来取回路径。 - -### 1.1.8.1\. 数学表达式 - -该算法和逐步回归非常相似,但是它没有在每一步包含变量,它估计的参数是根据与 其他剩余变量的联系来增加的。 - -在 LARS 的解中,没有给出一个向量的结果,而是给出一条曲线,显示参数向量的 L1 范式的每个值的解。 完全的参数路径存在 `coef_path_` 下。它的 size 是 (n_features, max_features+1)。 其中第一列通常是全 0 列。 - -参考文献: - -* Original Algorithm is detailed in the paper [Least Angle Regression](http://www-stat.stanford.edu/~hastie/Papers/LARS/LeastAngle_2002.pdf) by Hastie et al. - -## 1.1.9\. 正交匹配追踪法(OMP) - -> [`OrthogonalMatchingPursuit`](generated/sklearn.linear_model.OrthogonalMatchingPursuit.html#sklearn.linear_model.OrthogonalMatchingPursuit "sklearn.linear_model.OrthogonalMatchingPursuit") (正交匹配追踪法)和 [`orthogonal_mp`](generated/sklearn.linear_model.orthogonal_mp.html#sklearn.linear_model.orthogonal_mp "sklearn.linear_model.orthogonal_mp") - -使用了 OMP 算法近似拟合了一个带限制的线性模型,该限制影响于模型的非 0 系数(例:L0 范数)。 - -就像最小角回归一样,作为一个前向特征选择方法,正交匹配追踪法可以近似一个固定非 0 元素的最优向量解: - - -![\text{arg\,min\,} ||y - X\gamma||_2^2 \text{ subject to } \ -||\gamma||_0 \leq n_{nonzero\_coefs}](img/ed70b000f50fb169ffe20ca2979e4a75.jpg) - - -正交匹配追踪法也可以针对一个特殊的误差而不是一个特殊的非零系数的个数。可以表示为: - - -![\text{arg\,min\,} ||\gamma||_0 \text{ subject to } ||y-X\gamma||_2^2 \ -\leq \text{tol}](img/6b7248d635f4161b925734dbc60de37a.jpg) - - -OMP 是基于每一步的贪心算法,其每一步元素都是与当前残差高度相关的。它跟较为简单的匹配追踪(MP)很相似,但是相比 MP 更好,在每一次迭代中,可以利用正交投影到之前选择的字典元素重新计算残差。 - -示例: - -* [Orthogonal Matching Pursuit](../auto_examples/linear_model/plot_omp.html#sphx-glr-auto-examples-linear-model-plot-omp-py) - -参考文献: - -* [http://www.cs.technion.ac.il/~ronrubin/Publications/KSVD-OMP-v2.pdf](http://www.cs.technion.ac.il/~ronrubin/Publications/KSVD-OMP-v2.pdf) -* [Matching pursuits with time-frequency dictionaries](http://blanche.polytechnique.fr/~mallat/papiers/MallatPursuit93.pdf), S. G. Mallat, Z. Zhang, - -## 1.1.10\. 贝叶斯回归 - -贝叶斯回归可以用于在预估阶段的参数正则化: 正则化参数的选择不是通过人为的选择,而是通过手动调节数据值来实现。 - -上述过程可以通过引入 [无信息先验](https://en.wikipedia.org/wiki/Non-informative_prior#Uninformative_priors) 于模型中的超参数来完成。 在 <cite>岭回归</cite> 中使用的 ![\ell_{2}](img/e473a2606f078eaa7b86800b11f4d62b.jpg) 正则项相当于在 ![w](img/8a58e8df6a985a3273e39bac7dd72b1f.jpg) 为高斯先验条件下,且此先验的精确度为 ![\lambda^{-1}](img/7f35ead97a9f7be07b87ff7b860bcab9.jpg) 求最大后验估计。在这里,我们没有手工调参数 lambda ,而是让他作为一个变量,通过数据中估计得到。 - -为了得到一个全概率模型,输出 ![y](img/0775c03fc710a24df297dedcec515aaf.jpg) 也被认为是关于 ![X w](img/827de4e90947894fc96dd0432ff0d7dd.jpg) 的高斯分布。 - -![p(y|X,w,\alpha) = \mathcal{N}(y|X w,\alpha)](img/eaf558e2c8d1fbd5426664c1698d80bd.jpg) - -Alpha 在这里也是作为一个变量,通过数据中估计得到。 - -贝叶斯回归有如下几个优点: - -> * 它能根据已有的数据进行改变。 -> * 它能在估计过程中引入正则项。 - -贝叶斯回归有如下缺点: - -> * 它的推断过程是非常耗时的。 - -参考文献 - -* 一个对于贝叶斯方法的很好的介绍 C. Bishop: Pattern Recognition and Machine learning -* 详细介绍原创算法的一本书 <cite>Bayesian learning for neural networks</cite> by Radford M. Neal - -### 1.1.10.1\. 贝叶斯岭回归 - -> [`BayesianRidge`](generated/sklearn.linear_model.BayesianRidge.html#sklearn.linear_model.BayesianRidge "sklearn.linear_model.BayesianRidge") 利用概率模型估算了上述的回归问题,其先验参数 ![w](img/8a58e8df6a985a3273e39bac7dd72b1f.jpg) 是由以下球面高斯公式得出的: - - -![p(w|\lambda) = -\mathcal{N}(w|0,\lambda^{-1}\bold{I_{p}})](img/971b86cde9801a3bb1a80af70bd05466.jpg) - - -先验参数 ![\alpha](img/d8b3d5242d513369a44f8bf0c6112744.jpg) 和 ![\lambda](img/0f92bc682b050115d03c625ce770c77d.jpg) 一般是服从 [gamma 分布](https://en.wikipedia.org/wiki/Gamma_distribution) , 这个分布与高斯成共轭先验关系。 - -得到的模型一般称为 _贝叶斯岭回归_, 并且这个与传统的 [`Ridge`](generated/sklearn.linear_model.Ridge.html#sklearn.linear_model.Ridge "sklearn.linear_model.Ridge") 非常相似。参数 ![w](img/8a58e8df6a985a3273e39bac7dd72b1f.jpg) , ![\alpha](img/d8b3d5242d513369a44f8bf0c6112744.jpg) 和 ![\lambda](img/0f92bc682b050115d03c625ce770c77d.jpg) 是在模型拟合的时候一起被估算出来的。 剩下的超参数就是 关于:math:<cite>alpha</cite> 和 ![\lambda](img/0f92bc682b050115d03c625ce770c77d.jpg) 的 gamma 分布的先验了。 它们通常被选择为 _无信息先验_ 。模型参数的估计一般利用最大 _边缘似然对数估计_ 。 - -默认 ![\alpha_1 = \alpha_2 = \lambda_1 = \lambda_2 = 10^{-6}](img/76530e85b09bd8385fad05337b968caf.jpg). - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_bayesian_ridge_0011.png](img/947ae691edda29c53c3b962665b052c6.jpg)](../auto_examples/linear_model/plot_bayesian_ridge.html) - -贝叶斯岭回归用来解决回归问题: - -```py ->>> from sklearn import linear_model ->>> X = [[0., 0.], [1., 1.], [2., 2.], [3., 3.]] ->>> Y = [0., 1., 2., 3.] ->>> reg = linear_model.BayesianRidge() ->>> reg.fit(X, Y) -BayesianRidge(alpha_1=1e-06, alpha_2=1e-06, compute_score=False, copy_X=True, - fit_intercept=True, lambda_1=1e-06, lambda_2=1e-06, n_iter=300, - normalize=False, tol=0.001, verbose=False) - -``` - -在模型训练完成后,可以用来预测新值: - -```py ->>> reg.predict ([[1, 0.]]) -array([ 0.50000013]) - -``` - -权值 ![w](img/8a58e8df6a985a3273e39bac7dd72b1f.jpg) 可以被这样访问: - -```py ->>> reg.coef_ -array([ 0.49999993, 0.49999993]) - -``` - -由于贝叶斯框架的缘故,权值与 [普通最小二乘法](#ordinary-least-squares) 产生的不太一样。 但是,贝叶斯岭回归对病态问题(ill-posed)的鲁棒性要更好。 - -示例: - -* [Bayesian Ridge Regression](../auto_examples/linear_model/plot_bayesian_ridge.html#sphx-glr-auto-examples-linear-model-plot-bayesian-ridge-py) - -参考文献 - -* 更多细节可以参考 [Bayesian Interpolation](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.27.9072&rep=rep1&type=pdf) by MacKay, David J. C. - -### 1.1.10.2\. 主动相关决策理论 - ARD - -> [`ARDRegression`](generated/sklearn.linear_model.ARDRegression.html#sklearn.linear_model.ARDRegression "sklearn.linear_model.ARDRegression") (主动相关决策理论)和 [`Bayesian Ridge Regression`_](#id51) 非常相似, - -```py -但是会导致一个更加稀疏的权重 [1] [2] 。 -``` - -[`ARDRegression`](generated/sklearn.linear_model.ARDRegression.html#sklearn.linear_model.ARDRegression "sklearn.linear_model.ARDRegression") 提出了一个不同的 ![w](img/8a58e8df6a985a3273e39bac7dd72b1f.jpg) 的先验假设。具体来说,就是弱化了高斯分布为球形的假设。 - -它采用 ![w](img/8a58e8df6a985a3273e39bac7dd72b1f.jpg) 分布是与轴平行的椭圆高斯分布。 - -也就是说,每个权值 ![w_{i}](img/848835d5b40c5bd74a6e592a65eed5d6.jpg) 从一个中心在 0 点,精度为 ![\lambda_{i}](img/fcf31635bf1c46833111df71ab92b68e.jpg) 的高斯分布中采样得到的。 - -![p(w|\lambda) = \mathcal{N}(w|0,A^{-1})](img/7afe3c56e3473a3a7f18cf983ed5e79c.jpg) - -并且 ![diag \; (A) = \lambda = \{\lambda_{1},...,\lambda_{p}\}](img/5db611c8f58fbd9a9776c013656a16ff.jpg). - -与 [`Bayesian Ridge Regression`_](#id53) 不同, 每个 ![w_{i}](img/848835d5b40c5bd74a6e592a65eed5d6.jpg) 都有一个标准差 ![\lambda_i](img/fc333385a9012524b39bc23303de30d4.jpg) 。所有 ![\lambda_i](img/fc333385a9012524b39bc23303de30d4.jpg) 的先验分布 由超参数 ![\lambda_1](img/a6334506478d6feb4025038294ccfa00.jpg) 、 ![\lambda_2](img/535f86af715e90b9c394e3cbf53d99eb.jpg) 确定的相同的 gamma 分布确定。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_ard_0011.png](img/8aca5aa85ff13bf8e8687220b137f9d3.jpg)](../auto_examples/linear_model/plot_ard.html) - -ARD 也被称为 _稀疏贝叶斯学习_ 或 _相关向量机_ [[3]](#id32) [[4]](#id33) 。 - -示例: - -* [Automatic Relevance Determination Regression (ARD)](../auto_examples/linear_model/plot_ard.html#sphx-glr-auto-examples-linear-model-plot-ard-py) - -参考文献: - -| [[1]](#id26) | Christopher M. Bishop: Pattern Recognition and Machine Learning, Chapter 7.2.1 | - -| [[2]](#id27) | David Wipf and Srikantan Nagarajan: [A new view of automatic relevance determination](http://papers.nips.cc/paper/3372-a-new-view-of-automatic-relevance-determination.pdf) | - -| [[3]](#id28) | Michael E. Tipping: [Sparse Bayesian Learning and the Relevance Vector Machine](http://www.jmlr.org/papers/volume1/tipping01a/tipping01a.pdf) | - -| [[4]](#id29) | Tristan Fletcher: [Relevance Vector Machines explained](http://www.tristanfletcher.co.uk/RVM%20Explained.pdf) | - -## 1.1.11\. logistic 回归 - -logistic 回归,虽然名字里有 “回归” 二字,但实际上是解决分类问题的一类线性模型。在某些文献中,logistic 回归又被称作 logit 回归,maximum-entropy classification(MaxEnt,最大熵分类),或 log-linear classifier(对数线性分类器)。该模型利用函数 [logistic function](https://en.wikipedia.org/wiki/Logistic_function) 将单次试验(single trial)的可能结果输出为概率。 - -scikit-learn 中 logistic 回归在 [`LogisticRegression`](generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression "sklearn.linear_model.LogisticRegression") 类中实现了二分类(binary)、一对多分类(one-vs-rest)及多项式 logistic 回归,并带有可选的 L1 和 L2 正则化。 - -作为优化问题,带 L2 罚项的二分类 logistic 回归要最小化以下代价函数(cost function): - -![\underset{w, c}{min\,} \frac{1}{2}w^T w + C \sum_{i=1}^n \log(\exp(- y_i (X_i^T w + c)) + 1) .](img/203c5a2c58d6567a86dbc86faa92209e.jpg) - -类似地,带 L1 正则的 logistic 回归解决的是如下优化问题: - -![\underset{w, c}{min\,} \|w\|_1 + C \sum_{i=1}^n \log(\exp(- y_i (X_i^T w + c)) + 1) .](img/d7ff3091308658ce388554d420581459.jpg) - -在 [`LogisticRegression`](generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression "sklearn.linear_model.LogisticRegression") 类中实现了这些优化算法: “liblinear”, “newton-cg”, “lbfgs”, “sag” 和 “saga”。 - -“liblinear” 应用了坐标下降算法(Coordinate Descent, CD),并基于 scikit-learn 内附的高性能 C++ 库 [LIBLINEAR library](http://www.csie.ntu.edu.tw/~cjlin/liblinear/) 实现。不过 CD 算法训练的模型不是真正意义上的多分类模型,而是基于 “one-vs-rest” 思想分解了这个优化问题,为每个类别都训练了一个二元分类器。因为实现在底层使用该求解器的 [`LogisticRegression`](generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression "sklearn.linear_model.LogisticRegression") 实例对象表面上看是一个多元分类器。 [`sklearn.svm.l1_min_c`](generated/sklearn.svm.l1_min_c.html#sklearn.svm.l1_min_c "sklearn.svm.l1_min_c") 可以计算使用 L1 罚项时 C 的下界,以避免模型为空(即全部特征分量的权重为零)。 - -“lbfgs”, “sag” 和 “newton-cg” solvers (求解器)只支持 L2 惩罚项,对某些高维数据收敛更快。这些求解器的参数 [`](#id34)multi_class`设为 “multinomial” 即可训练一个真正的多项式 logistic 回归 [[5]](#id39) ,其预测的概率比默认的 “one-vs-rest” 设定更为准确。 - -“sag” 求解器基于平均随机梯度下降算法(Stochastic Average Gradient descent) [[6]](#id40)。在大数据集上的表现更快,大数据集指样本量大且特征数多。 - -“saga” 求解器 [[7]](#id41) 是 “sag” 的一类变体,它支持非平滑(non-smooth)的 L1 正则选项 `penalty="l1"` 。因此对于稀疏多项式 logistic 回归 ,往往选用该求解器。 - -一言以蔽之,选用求解器可遵循如下规则: - -| Case | Solver | -| --- | --- | -| L1正则 | “liblinear” or “saga” | -| 多项式损失(multinomial loss) | “lbfgs”, “sag”, “saga” or “newton-cg” | -| 大数据集(<cite>n_samples</cite>) | “sag” or “saga” | - -“saga” 一般都是最佳的选择,但出于一些历史遗留原因默认的是 “liblinear” 。 - -对于大数据集,还可以用 [`SGDClassifier`](generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier "sklearn.linear_model.SGDClassifier") ,并使用对数损失(’log’ loss) - -示例: - -* [L1 Penalty and Sparsity in Logistic Regression](../auto_examples/linear_model/plot_logistic_l1_l2_sparsity.html#sphx-glr-auto-examples-linear-model-plot-logistic-l1-l2-sparsity-py) -* [Path with L1- Logistic Regression](../auto_examples/linear_model/plot_logistic_path.html#sphx-glr-auto-examples-linear-model-plot-logistic-path-py) -* [Plot multinomial and One-vs-Rest Logistic Regression](../auto_examples/linear_model/plot_logistic_multinomial.html#sphx-glr-auto-examples-linear-model-plot-logistic-multinomial-py) -* [Multiclass sparse logisitic regression on newgroups20](../auto_examples/linear_model/plot_sparse_logistic_regression_20newsgroups.html#sphx-glr-auto-examples-linear-model-plot-sparse-logistic-regression-20newsgroups-py) -* [MNIST classfification using multinomial logistic + L1](../auto_examples/linear_model/plot_sparse_logistic_regression_mnist.html#sphx-glr-auto-examples-linear-model-plot-sparse-logistic-regression-mnist-py) - -与 liblinear 的区别: - -当 `fit_intercept=False` 拟合得到的 `coef_` 或者待预测的数据为零时,用 `solver=liblinear` 的 [`LogisticRegression`](generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression "sklearn.linear_model.LogisticRegression") 或 `LinearSVC` 与直接使用外部 liblinear 库预测得分会有差异。这是因为, 对于 `decision_function` 为零的样本, [`LogisticRegression`](generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression "sklearn.linear_model.LogisticRegression") 和 `LinearSVC` 将预测为负类,而 liblinear 预测为正类。 注意,设定了 `fit_intercept=False` ,又有很多样本使得 `decision_function` 为零的模型,很可能会欠拟合,其表现往往比较差。建议您设置 `fit_intercept=True` 并增大 `intercept_scaling` 。 - -Note - -**利用稀疏 logistic 回归进行特征选择** - -> 带 L1 罚项的 logistic 回归 将得到稀疏模型(sparse model),相当于进行了特征选择(feature selection),详情参见 [基于 L1 的特征选取](feature_selection.html#l1-feature-selection) 。 - -[`LogisticRegressionCV`](generated/sklearn.linear_model.LogisticRegressionCV.html#sklearn.linear_model.LogisticRegressionCV "sklearn.linear_model.LogisticRegressionCV") 对 logistic 回归 的实现内置了交叉验证(cross-validation),可以找出最优的参数 C 。”newton-cg”, “sag”, “saga” 和 “lbfgs” 在高维数据上更快,因为采用了热启动(warm-starting)。 在多分类设定下,若 <cite>multi_class</cite> 设为 “ovr” ,会为每类求一个最佳的 C 值;若 <cite>multi_class</cite> 设为 “multinomial” ,会通过交叉熵损失(cross-entropy loss)求出一个最佳 C 值。 - -参考文献: - -| [[5]](#id36) | Christopher M. Bishop: Pattern Recognition and Machine Learning, Chapter 4.3.4 | - -| [[6]](#id37) | Mark Schmidt, Nicolas Le Roux, and Francis Bach: [Minimizing Finite Sums with the Stochastic Average Gradient.](https://hal.inria.fr/hal-00860051/document) | - -| [[7]](#id38) | Aaron Defazio, Francis Bach, Simon Lacoste-Julien: [SAGA: A Fast Incremental Gradient Method With Support for Non-Strongly Convex Composite Objectives.](https://arxiv.org/abs/1407.0202) | - -## 1.1.12\. 随机梯度下降, SGD - -随机梯度下降是拟合线性模型的一个简单而高效的方法。在样本量(和特征数)很大时尤为有用。 方法 `partial_fit` 可用于 online learning (在线学习)或基于 out-of-core learning (外存的学习) - -[`SGDClassifier`](generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier "sklearn.linear_model.SGDClassifier") 和 [`SGDRegressor`](generated/sklearn.linear_model.SGDRegressor.html#sklearn.linear_model.SGDRegressor "sklearn.linear_model.SGDRegressor") 分别用于拟合分类问题和回归问题的线性模型,可使用不同的(凸)损失函数,支持不同的罚项。 例如,设定 `loss="log"` ,则 [`SGDClassifier`](generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier "sklearn.linear_model.SGDClassifier") 拟合一个逻辑斯蒂回归模型,而 `loss="hinge"` 拟合线性支持向量机(SVM)。 - -参考文献 - -* [随机梯度下降](sgd.html#sgd) - -## 1.1.13\. Perceptron(感知器) - -[`Perceptron`](generated/sklearn.linear_model.Perceptron.html#sklearn.linear_model.Perceptron "sklearn.linear_model.Perceptron") 是适用于大规模学习的一种简单算法。默认情况下: - -> * 不需要设置学习率(learning rate)。 -> * 不需要正则化处理。 -> * 仅使用错误样本更新模型。 - -最后一点表明使用合页损失(hinge loss)的感知机比 SGD 略快,所得模型更稀疏。 - -## 1.1.14\. Passive Aggressive Algorithms(被动攻击算法) - -被动攻击算法是大规模学习的一类算法。和感知机类似,它也不需要设置学习率,不过比感知机多出一个正则化参数 `C` 。 - -对于分类问题, [`PassiveAggressiveClassifier`](generated/sklearn.linear_model.PassiveAggressiveClassifier.html#sklearn.linear_model.PassiveAggressiveClassifier "sklearn.linear_model.PassiveAggressiveClassifier") 可设定 `loss='hinge'` (PA-I)或 `loss='squared_hinge'` (PA-II)。对于回归问题, [`PassiveAggressiveRegressor`](generated/sklearn.linear_model.PassiveAggressiveRegressor.html#sklearn.linear_model.PassiveAggressiveRegressor "sklearn.linear_model.PassiveAggressiveRegressor") 可设置 `loss='epsilon_insensitive'` (PA-I)或 `loss='squared_epsilon_insensitive'` (PA-II)。 - -参考文献: - -* [“Online Passive-Aggressive Algorithms”](http://jmlr.csail.mit.edu/papers/volume7/crammer06a/crammer06a.pdf) K. Crammer, O. Dekel, J. Keshat, S. Shalev-Shwartz, Y. Singer - JMLR 7 (2006) - -## 1.1.15\. 稳健回归(Robustness regression): 处理离群点(outliers)和模型错误 - -稳健回归(robust regression)特别适用于回归模型包含损坏数据(corrupt data)的情况,如离群点或模型中的错误。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_theilsen_0011.png](img/9d2e3befcfa08a4b6a7cfed8dadbd5c0.jpg)](../auto_examples/linear_model/plot_theilsen.html) - -### 1.1.15.1\. 各种使用场景与相关概念 - -处理包含离群点的数据时牢记以下几点: - -* **离群值在 X 上还是在 y 方向上**? - - | 离群值在 y 方向上 | 离群值在 X 方向上 | - | --- | --- | - | [![y_outliers](img/51d70ae60903891457d75099cc46e450.jpg)](../auto_examples/linear_model/plot_robust_fit.html) | [![X_outliers](img/bee2cb707f91d8e36ae11638b6698fe4.jpg)](../auto_examples/linear_model/plot_robust_fit.html) | - -* **离群点的比例 vs. 错误的量级(amplitude)** - - 离群点的数量很重要,离群程度也同样重要。 - -稳健拟合(robust fitting)的一个重要概念是崩溃点(breakdown point),即拟合模型(仍准确预测)所能承受的离群值最大比例。 - -注意,在高维数据条件下( <cite>n_features</cite> 大),一般而言很难完成稳健拟合,很可能完全不起作用。 - -**折中: 预测器的选择** - -> Scikit-learn提供了三种稳健回归的预测器(estimator): [RANSAC](#ransac-regression) , [Theil Sen](#theil-sen-regression) 和 [HuberRegressor](#huber-regression) -> -> * [HuberRegressor](#huber-regression) 一般快于 [RANSAC](#ransac-regression) 和 [Theil Sen](#theil-sen-regression) ,除非样本数很大,即 `n_samples` >> `n_features` 。 这是因为 [RANSAC](#ransac-regression) 和 [Theil Sen](#theil-sen-regression) 都是基于数据的较小子集进行拟合。但使用默认参数时, [Theil Sen](#theil-sen-regression) 和 [RANSAC](#ransac-regression) 可能不如 [HuberRegressor](#huber-regression) 鲁棒。 -> * [RANSAC](#ransac-regression) 比 [Theil Sen](#theil-sen-regression) 更快,在样本数量上的伸缩性(适应性)更好。 -> * [RANSAC](#ransac-regression) 能更好地处理y方向的大值离群点(通常情况下)。 -> * [Theil Sen](#theil-sen-regression) 能更好地处理x方向中等大小的离群点,但在高维情况下无法保证这一特点。 - -实在决定不了的话,请使用 [RANSAC](#ransac-regression) - -### 1.1.15.2\. RANSAC: 随机抽样一致性算法(RANdom SAmple Consensus) - -随机抽样一致性算法(RANdom SAmple Consensus, RANSAC)利用全体数据中局内点(inliers)的一个随机子集拟合模型。 - -RANSAC 是一种非确定性算法,以一定概率输出一个可能的合理结果,依赖于迭代次数(参数 <cite>max_trials</cite> )。这种算法主要解决线性或非线性回归问题,在计算机视觉摄影测绘领域尤为流行。 - -算法从全体样本输入中分出一个局内点集合,全体样本可能由于测量错误或对数据的假设错误而含有噪点、离群点。最终的模型仅从这个局内点集合中得出。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_ransac_0011.png](img/658840c7508dc5a73ca6180323904862.jpg)](../auto_examples/linear_model/plot_ransac.html) - -#### 1.1.15.2.1\. 算法细节 - -每轮迭代执行以下步骤: - -1. 从原始数据中抽样 `min_samples` 数量的随机样本,检查数据是否合法(见 `is_data_valid` )。 -2. 用一个随机子集拟合模型( `base_estimator.fit` )。检查模型是否合法(见 `is_model_valid` )。 -3. 计算预测模型的残差(residual),将全体数据分成局内点和离群点( `base_estimator.predict(X) - y` ) - -> * 绝对残差小于 `residual_threshold` 的全体数据认为是局内点。 - -1. 若局内点样本数最大,保存当前模型为最佳模型。以免当前模型离群点数量恰好相等(而出现未定义情况),规定仅当数值大于当前最值时认为是最佳模型。 - -上述步骤或者迭代到最大次数( `max_trials` ),或者某些终止条件满足时停下(见 `stop_n_inliers` 和 `stop_score` )。最终模型由之前确定的最佳模型的局内点样本(一致性集合,consensus set)预测。 - -函数 `is_data_valid` 和 `is_model_valid` 可以识别出随机样本子集中的退化组合(degenerate combinations)并予以丢弃(reject)。即便不需要考虑退化情况,也会使用 `is_data_valid` ,因为在拟合模型之前调用它能得到更高的计算性能。 - -示例: - -* [Robust linear model estimation using RANSAC](../auto_examples/linear_model/plot_ransac.html#sphx-glr-auto-examples-linear-model-plot-ransac-py) -* [Robust linear estimator fitting](../auto_examples/linear_model/plot_robust_fit.html#sphx-glr-auto-examples-linear-model-plot-robust-fit-py) - -参考文献: - -* [https://en.wikipedia.org/wiki/RANSAC](https://en.wikipedia.org/wiki/RANSAC) -* [“Random Sample Consensus: A Paradigm for Model Fitting with Applications to Image Analysis and Automated Cartography”](http://www.cs.columbia.edu/~belhumeur/courses/compPhoto/ransac.pdf) Martin A. Fischler and Robert C. Bolles - SRI International (1981) -* [“Performance Evaluation of RANSAC Family”](http://www.bmva.org/bmvc/2009/Papers/Paper355/Paper355.pdf) Sunglok Choi, Taemin Kim and Wonpil Yu - BMVC (2009) - -### 1.1.15.3\. Theil-Sen 预估器: 广义中值估计器(generalized-median-based estimator) - -[`TheilSenRegressor`](generated/sklearn.linear_model.TheilSenRegressor.html#sklearn.linear_model.TheilSenRegressor "sklearn.linear_model.TheilSenRegressor") 估计器:使用中位数在多个维度泛化,对多元异常值更具有鲁棒性,但问题是,随着维数的增加,估计器的准确性在迅速下降。准确性的丢失,导致在高维上的估计值比不上普通的最小二乘法。 - -示例: - -* [Theil-Sen Regression](../auto_examples/linear_model/plot_theilsen.html#sphx-glr-auto-examples-linear-model-plot-theilsen-py) -* [Robust linear estimator fitting](../auto_examples/linear_model/plot_robust_fit.html#sphx-glr-auto-examples-linear-model-plot-robust-fit-py) - -参考文献: - -* [https://en.wikipedia.org/wiki/Theil%E2%80%93Sen_estimator](https://en.wikipedia.org/wiki/Theil%E2%80%93Sen_estimator) - -#### 1.1.15.3.1\. 算法理论细节 - -[`TheilSenRegressor`](generated/sklearn.linear_model.TheilSenRegressor.html#sklearn.linear_model.TheilSenRegressor "sklearn.linear_model.TheilSenRegressor") 在渐近效率和无偏估计方面足以媲美 [Ordinary Least Squares (OLS)](#ordinary-least-squares) (普通最小二乘法(OLS))。与 OLS 不同的是, Theil-Sen 是一种非参数方法,这意味着它没有对底层数据的分布假设。由于 Theil-Sen 是基于中值的估计,它更适合于损坏的数据即离群值。 在单变量的设置中,Theil-Sen 在简单的线性回归的情况下,其崩溃点大约 29.3% ,这意味着它可以容忍任意损坏的数据高达 29.3% 。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_theilsen_0011.png](img/9d2e3befcfa08a4b6a7cfed8dadbd5c0.jpg)](../auto_examples/linear_model/plot_theilsen.html) - -scikit-learn 中实现的 [`TheilSenRegressor`](generated/sklearn.linear_model.TheilSenRegressor.html#sklearn.linear_model.TheilSenRegressor "sklearn.linear_model.TheilSenRegressor") 是多元线性回归模型的推广 [[8]](#f1) ,利用了空间中值方法,它是多维中值的推广 [[9]](#f2) 。 - -关于时间复杂度和空间复杂度,Theil-Sen 的尺度根据 - -![\binom{n_{samples}}{n_{subsamples}}](img/00af2cbeb1deda7098a17d0491060339.jpg) - -这使得它不适用于大量样本和特征的问题。因此,可以选择一个亚群的大小来限制时间和空间复杂度,只考虑所有可能组合的随机子集。 - -示例: - -* [Theil-Sen Regression](../auto_examples/linear_model/plot_theilsen.html#sphx-glr-auto-examples-linear-model-plot-theilsen-py) - -参考文献: - -| [[8]](#id46) | Xin Dang, Hanxiang Peng, Xueqin Wang and Heping Zhang: [Theil-Sen Estimators in a Multiple Linear Regression Model.](http://home.olemiss.edu/~xdang/papers/MTSE.pdf) | - -| [[9]](#id47) | - -1. Kärkkäinen and S. Äyrämö: [On Computation of Spatial Median for Robust Data Mining.](http://users.jyu.fi/~samiayr/pdf/ayramo_eurogen05.pdf) - - | - -### 1.1.15.4\. Huber 回归 - -[`HuberRegressor`](generated/sklearn.linear_model.HuberRegressor.html#sklearn.linear_model.HuberRegressor "sklearn.linear_model.HuberRegressor") 与 [`Ridge`](generated/sklearn.linear_model.Ridge.html#sklearn.linear_model.Ridge "sklearn.linear_model.Ridge") 不同,因为它对于被分为异常值的样本应用了一个线性损失。如果这个样品的绝对误差小于某一阈值,样品就被分为内围值。 它不同于 [`TheilSenRegressor`](generated/sklearn.linear_model.TheilSenRegressor.html#sklearn.linear_model.TheilSenRegressor "sklearn.linear_model.TheilSenRegressor") 和 [`RANSACRegressor`](generated/sklearn.linear_model.RANSACRegressor.html#sklearn.linear_model.RANSACRegressor "sklearn.linear_model.RANSACRegressor") ,因为它没有忽略异常值的影响,并分配给它们较小的权重。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_huber_vs_ridge_001.png](img/d06a11a8d6ed2efac238ab0bdbd33326.jpg)](../auto_examples/linear_model/plot_huber_vs_ridge.html) - -这个 [`HuberRegressor`](generated/sklearn.linear_model.HuberRegressor.html#sklearn.linear_model.HuberRegressor "sklearn.linear_model.HuberRegressor") 最小化的损失函数是: - -![\underset{w, \sigma}{min\,} {\sum_{i=1}^n\left(\sigma + H_m\left(\frac{X_{i}w - y_{i}}{\sigma}\right)\sigma\right) + \alpha {||w||_2}^2}](img/dfab82d3a21680e5b6d3898a02dc6e01.jpg) - -其中 - - -![H_m(z) = \begin{cases} - z^2, & \text {if } |z| < \epsilon, \\ - 2\epsilon|z| - \epsilon^2, & \text{otherwise} -\end{cases}](img/37e4251726a37bc02df4ef4390572e9a.jpg) - - -建议设置参数 `epsilon` 为 1.35 以实现 95% 统计效率。 - -### 1.1.15.5\. 注意 - -[`HuberRegressor`](generated/sklearn.linear_model.HuberRegressor.html#sklearn.linear_model.HuberRegressor "sklearn.linear_model.HuberRegressor") 与将损失设置为 <cite>huber</cite> 的 [`SGDRegressor`](generated/sklearn.linear_model.SGDRegressor.html#sklearn.linear_model.SGDRegressor "sklearn.linear_model.SGDRegressor") 并不相同,体现在以下方面的使用方式上。 - -* [`HuberRegressor`](generated/sklearn.linear_model.HuberRegressor.html#sklearn.linear_model.HuberRegressor "sklearn.linear_model.HuberRegressor") 是标度不变性的. 一旦设置了 `epsilon` , 通过不同的值向上或向下缩放 `X` 和 `y` ,就会跟以前一样对异常值产生同样的鲁棒性。相比 [`SGDRegressor`](generated/sklearn.linear_model.SGDRegressor.html#sklearn.linear_model.SGDRegressor "sklearn.linear_model.SGDRegressor") 其中 `epsilon` 在 `X` 和 `y` 被缩放的时候必须再次设置。 -* [`HuberRegressor`](generated/sklearn.linear_model.HuberRegressor.html#sklearn.linear_model.HuberRegressor "sklearn.linear_model.HuberRegressor") 应该更有效地使用在小样本数据,同时 [`SGDRegressor`](generated/sklearn.linear_model.SGDRegressor.html#sklearn.linear_model.SGDRegressor "sklearn.linear_model.SGDRegressor") 需要一些训练数据的 passes 来产生一致的鲁棒性。 - -示例: - -* [HuberRegressor vs Ridge on dataset with strong outliers](../auto_examples/linear_model/plot_huber_vs_ridge.html#sphx-glr-auto-examples-linear-model-plot-huber-vs-ridge-py) - -参考文献: - -* Peter J. Huber, Elvezio M. Ronchetti: Robust Statistics, Concomitant scale estimates, pg 172 - -另外,这个估计是不同于 R 实现的 Robust Regression ([http://www.ats.ucla.edu/stat/r/dae/rreg.htm](http://www.ats.ucla.edu/stat/r/dae/rreg.htm)) ,因为 R 实现加权最小二乘,权重考虑到每个样本并基于残差大于某一阈值的量。 - -## 1.1.16\. 多项式回归:用基函数展开线性模型 - -机器学习中一种常见的模式,是使用线性模型训练数据的非线性函数。这种方法保持了一般快速的线性方法的性能,同时允许它们适应更广泛的数据范围。 - -例如,可以通过构造系数的 **polynomial features** 来扩展一个简单的线性回归。在标准线性回归的情况下,你可能有一个类似于二维数据的模型: - -![\hat{y}(w, x) = w_0 + w_1 x_1 + w_2 x_2](img/76814b51cd880ede8da9a2b5ad3d4143.jpg) - -如果我们想把抛物面拟合成数据而不是平面,我们可以结合二阶多项式的特征,使模型看起来像这样: - -![\hat{y}(w, x) = w_0 + w_1 x_1 + w_2 x_2 + w_3 x_1 x_2 + w_4 x_1^2 + w_5 x_2^2](img/5656d5270c0ee866d09e2b271ed04a67.jpg) - -观察到这 _还是一个线性模型_ (这有时候是令人惊讶的): 看到这个,想象创造一个新的变量 - -![z = [x_1, x_2, x_1 x_2, x_1^2, x_2^2]](img/642372b631f22b9db0dc4f30d9ab67e6.jpg) - -有了这些重新标记的数据,我们可以将问题写成 - -![\hat{y}(w, x) = w_0 + w_1 z_1 + w_2 z_2 + w_3 z_3 + w_4 z_4 + w_5 z_5](img/b2996ad4866e8a26c7ba42c0229385af.jpg) - -我们看到,所得的 _polynomial regression_ 与我们上文所述线性模型是同一类(即关于 ![w](img/8a58e8df6a985a3273e39bac7dd72b1f.jpg) 是线性的),因此可以用同样的方法解决。通过用这些基函数建立的高维空间中的线性拟合,该模型具有灵活性,可以适应更广泛的数据范围。 - -这里是一个例子,使用不同程度的多项式特征将这个想法应用于一维数据: - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_polynomial_interpolation_0011.png](img/cda529a3abe8af421f1f218b1a390091.jpg)](../auto_examples/linear_model/plot_polynomial_interpolation.html) - -这个图是使用 [`PolynomialFeatures`](generated/sklearn.preprocessing.PolynomialFeatures.html#sklearn.preprocessing.PolynomialFeatures "sklearn.preprocessing.PolynomialFeatures") 预创建。该预处理器将输入数据矩阵转换为给定度的新数据矩阵。使用方法如下: - -```py ->>> from sklearn.preprocessing import PolynomialFeatures ->>> import numpy as np ->>> X = np.arange(6).reshape(3, 2) ->>> X -array([[0, 1], - [2, 3], - [4, 5]]) ->>> poly = PolynomialFeatures(degree=2) ->>> poly.fit_transform(X) -array([[ 1., 0., 1., 0., 0., 1.], - [ 1., 2., 3., 4., 6., 9.], - [ 1., 4., 5., 16., 20., 25.]]) - -``` - -`X` 的特征已经从 ![[x_1, x_2]](img/58d06eb9b8003c392af19e09ce5ab1a4.jpg) 转换到 ![[1, x_1, x_2, x_1^2, x_1 x_2, x_2^2]](img/6b474f60cd7fcc77b4a950334fc6483f.jpg), 并且现在可以用在任何线性模型。 - -这种预处理可以通过 [Pipeline](pipeline.html#pipeline) 工具进行简化。可以创建一个表示简单多项式回归的单个对象,使用方法如下所示: - -```py ->>> from sklearn.preprocessing import PolynomialFeatures ->>> from sklearn.linear_model import LinearRegression ->>> from sklearn.pipeline import Pipeline ->>> import numpy as np ->>> model = Pipeline([('poly', PolynomialFeatures(degree=3)), -... ('linear', LinearRegression(fit_intercept=False))]) ->>> # fit to an order-3 polynomial data ->>> x = np.arange(5) ->>> y = 3 - 2 * x + x ** 2 - x ** 3 ->>> model = model.fit(x[:, np.newaxis], y) ->>> model.named_steps['linear'].coef_ -array([ 3., -2., 1., -1.]) - -``` - -利用多项式特征训练的线性模型能够准确地恢复输入多项式系数。 - -在某些情况下,没有必要包含任何单个特征的更高的幂,只需要相乘最多 ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) 个不同的特征即可,所谓 _interaction features(交互特征)_ 。这些可通过设定 [`PolynomialFeatures`](generated/sklearn.preprocessing.PolynomialFeatures.html#sklearn.preprocessing.PolynomialFeatures "sklearn.preprocessing.PolynomialFeatures") 的 `interaction_only=True` 得到。 - -例如,当处理布尔属性,对于所有 ![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) ![x_i^n = x_i](img/4d1bc681619acee3db7da4d570bcb4cd.jpg) ,因此是无用的;但 ![x_i x_j](img/53fd9843c9af9a7ea05df92bce997456.jpg) 代表两布尔结合。这样我们就可以用线性分类器解决异或问题: - -```py ->>> from sklearn.linear_model import Perceptron ->>> from sklearn.preprocessing import PolynomialFeatures ->>> import numpy as np ->>> X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) ->>> y = X[:, 0] ^ X[:, 1] ->>> y -array([0, 1, 1, 0]) ->>> X = PolynomialFeatures(interaction_only=True).fit_transform(X).astype(int) ->>> X -array([[1, 0, 0, 0], - [1, 0, 1, 0], - [1, 1, 0, 0], - [1, 1, 1, 1]]) ->>> clf = Perceptron(fit_intercept=False, max_iter=10, tol=None, -... shuffle=False).fit(X, y) - -``` - -分类器的 “predictions” 是完美的: - -```py ->>> clf.predict(X) -array([0, 1, 1, 0]) ->>> clf.score(X, y) -1.0 - -``` -{% endraw %} \ No newline at end of file diff --git a/docs/0.19.x/20.md b/docs/0.19.x/20.md deleted file mode 100755 index 8b12bb63b1d3f21a5d155b533fb685dddd6c814e..0000000000000000000000000000000000000000 --- a/docs/0.19.x/20.md +++ /dev/null @@ -1,124 +0,0 @@ -# 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:<cite>BayesianGaussianMixture</cite> 来绘制置信椭圆体的例子。 请查阅 [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 diff --git a/docs/0.19.x/21.md b/docs/0.19.x/21.md deleted file mode 100755 index d424d46ea4a083c385af37224efea580d7e19308..0000000000000000000000000000000000000000 --- a/docs/0.19.x/21.md +++ /dev/null @@ -1,286 +0,0 @@ -# 2.2\. 流形学习 - -校验者: -        [@XuJianzhi](https://github.com/XuJianzhi) -        [@RyanZhiNie](https://github.com/RyanZhiNie) -        [@羊三](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@XuJianzhi](https://github.com/XuJianzhi) -        [@羊三](https://github.com/apachecn/scikit-learn-doc-zh) -Look for the bare necessitiesThe simple bare necessitiesForget about your worries and your strifeI mean the bare necessitiesOld Mother Nature’s recipesThat bring the bare necessities of life– Baloo的歌 [奇幻森林][![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_compare_methods_0011.png](img/fe9e5bb155154914f761d6497915e9cb.jpg)](../auto_examples/manifold/plot_compare_methods.html) - -流形学习是一种非线性降维方法。其算法基于的思想是:许多数据集的维度过高只是由人为导致的。 - -## 2.2.1\. 介绍 - -高维数据集会非常难以可视化。 虽然可以绘制两维或三维的数据来显示数据的固有结构,但与之等效的高维图不太直观。 为了帮助数据集结构的可视化,必须以某种方式降低维度。 - -通过对数据的随机投影来实现降维是最简单的方法。 虽然这样做能实现数据结构一定程度的可视化,但随机选择投影仍有许多有待改进之处。 在随机投影中,数据中更有趣的结构很可能会丢失。 - -**[![digits_img](img/35a2693b8dbfe5cf9335dc2659c6ef96.jpg)](../auto_examples/manifold/plot_lle_digits.html) [![projected_img](img/015fcf78112c08948e66bb51171ae137.jpg)](../auto_examples/manifold/plot_lle_digits.html)** - -为了解决这一问题,一些监督和无监督的线性降维框架被设计出来,如主成分分析(PCA),独立成分分析,线性判别分析等。 这些算法定义了明确的规定来选择数据的“有趣的”线性投影。 它们虽然强大,但是会经常错失数据中重要的非线性结构。 - -**[![PCA_img](img/93d2f2876517637396e99e36132252f3.jpg)](../auto_examples/manifold/plot_lle_digits.html) [![LDA_img](img/4953c9da8999e3eb76b63a4dd0432896.jpg)](../auto_examples/manifold/plot_lle_digits.html)** - -流形学习可以被认为是一种将线性框架(如 PCA )推广为对数据中非线性结构敏感的尝试。 虽然存在监督变量,但是典型的流形学习问题是无监督的:它从数据本身学习数据的高维结构,而不使用预定的分类。 - -例子: - -* 参见 [Manifold learning on handwritten digits: Locally Linear Embedding, Isomap…](../auto_examples/manifold/plot_lle_digits.html#sphx-glr-auto-examples-manifold-plot-lle-digits-py) ,手写数字降维的例子。 -* 参见 [Comparison of Manifold Learning methods](../auto_examples/manifold/plot_compare_methods.html#sphx-glr-auto-examples-manifold-plot-compare-methods-py) ,玩具 “S曲线” 数据集降维的例子。 - -以下概述了 scikit-learn 中可用的流形学习实现 - -## 2.2.2\. Isomap - -流形学习的最早方法之一是 Isomap 算法,等距映射(Isometric Mapping)的缩写。 Isomap 可以被视为多维缩放(Multi-dimensional Scaling:MDS)或核主成分分析(Kernel PCA)的扩展。 Isomap 寻求一个较低维度的嵌入,它保持所有点之间的测量距离。 Isomap 可以通过 [`Isomap`](generated/sklearn.manifold.Isomap.html#sklearn.manifold.Isomap "sklearn.manifold.Isomap") 对象执行。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lle_digits_0051.png](img/21937e85250a7aaa8aea86e4fbf93452.jpg)](../auto_examples/manifold/plot_lle_digits.html) - -### 2.2.2.1\. 复杂度 - -Isomap 算法包括三个阶段: - -1. **最近邻搜索.** Isomap 使用 [`sklearn.neighbors.BallTree`](generated/sklearn.neighbors.BallTree.html#sklearn.neighbors.BallTree "sklearn.neighbors.BallTree") 进行有效的近邻搜索。 对于 ![D](img/e03066df748abd9273db055cb79f0f01.jpg) 维中 ![N](img/a44a7c045f2217894a894c482861387a.jpg) 个点的 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 个最近邻,代价约为 ![O[D \log(k) N \log(N)]](img/7b0e2ed0273c0a1650cc9f78eabe93c4.jpg) -2. **最短路径图搜索.** 最有效的已知算法是 Dijkstra 算法或 Floyd-Warshall 算法,其复杂度分别是约 ![O[N^2(k + \log(N))]](img/d459482314974b92f7f44cc36d6eae3e.jpg) 和 ![O[N^3]](img/1a1bc66f06af187108d4250f068748c9.jpg) 。 用户可通过使用 isomap 的 path_method 关键字选择该算法。 如果未指定,则代码尝试为输入数据选择最佳算法。 -3. **部分特征值分解.** 对应于 ![N \times N](img/3bdd2a9b74f6a2e0db32e159c63ffec0.jpg) isomap核中 ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) 个最大特征值的特征向量,进行嵌入编码。 对于密集求解器,代价约为 ![O[d N^2]](img/9642d01a97f06869baba6159e3438677.jpg) 。 通常可以使用 ARPACK 求解器来减少代价。 用户可通过使用 isomap 的 path_method 关键字指定特征求解器。 如果未指定,则代码尝试为输入数据选择最佳算法。 - -Isomap 的整体复杂度是 ![O[D \log(k) N \log(N)] + O[N^2(k + \log(N))] + O[d N^2]](img/ccd727d4b039d28f8146546bd5f614b3.jpg). - -* ![N](img/a44a7c045f2217894a894c482861387a.jpg) : 训练数据点的个数 -* ![D](img/e03066df748abd9273db055cb79f0f01.jpg) : 输入维度 -* ![k](img/f93871977da52a6d11045d57c3e18728.jpg) : 最近邻的个数 -* ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) : 输出维度 - -参考文献: - -* [“A global geometric framework for nonlinear dimensionality reduction”](http://science.sciencemag.org/content/290/5500/2319.full) Tenenbaum, J.B.; De Silva, V.; & Langford, J.C. Science 290 (5500) - -## 2.2.3\. 局部线性嵌入 - -局部线性嵌入(LLE)通过保留局部邻域内的距离来寻求数据的低维投影。 它可以被认为是一系列的局部主成分分析,与全局相比,找到最优的局部非线性嵌入。 - -局部线性嵌入可以使用 [`locally_linear_embedding`](generated/sklearn.manifold.locally_linear_embedding.html#sklearn.manifold.locally_linear_embedding "sklearn.manifold.locally_linear_embedding") 函数或其面向对象的等效方法 [`LocallyLinearEmbedding`](generated/sklearn.manifold.LocallyLinearEmbedding.html#sklearn.manifold.LocallyLinearEmbedding "sklearn.manifold.LocallyLinearEmbedding") 来实现。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lle_digits_0061.png](img/017a1400b81bc9ef956adc43050bb5c8.jpg)](../auto_examples/manifold/plot_lle_digits.html) - -### 2.2.3.1\. 复杂度 - -标准的 LLE 算法包括三个阶段: - -1. **最邻近搜索**. 参见上述 Isomap 讨论。 -2. **构造权重矩阵**. ![O[D N k^3]](img/ca22762150e0516b4847c03efd5ebf6d.jpg). LLE 权重矩阵的构造包括每个 ![N](img/a44a7c045f2217894a894c482861387a.jpg) 局部邻域的 ![k \times k](img/2a96390b6e7eb8fc07579c2f9066fc4d.jpg) 线性方程的解 -3. **部分特征值分解**. 参见上述 Isomap 讨论。 - -标准 LLE 的整体复杂度是 ![O[D \log(k) N \log(N)] + O[D N k^3] + O[d N^2]](img/5daa1b5d6a3d63020722cb0f4b41eee2.jpg). - -* ![N](img/a44a7c045f2217894a894c482861387a.jpg) : 训练数据点的个数 -* ![D](img/e03066df748abd9273db055cb79f0f01.jpg) : 输入维度 -* ![k](img/f93871977da52a6d11045d57c3e18728.jpg) : 最近邻的个数 -* ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) : 输出维度 - -参考文献: - -* [“Nonlinear dimensionality reduction by locally linear embedding”](http://www.sciencemag.org/content/290/5500/2323.full) Roweis, S. & Saul, L. Science 290:2323 (2000) - -## 2.2.4\. 改进型局部线性嵌入(MLLE) - -关于局部线性嵌入(LLE)的一个众所周知的问题是正则化问题。当 neighbors(邻域)的数量多于输入的维度数量时,定义每个局部邻域的矩阵是不满秩的。为解决这个问题,标准的局部线性嵌入算法使用一个任意正则化参数 ![r](img/451ef7ed1a14a6cdc38324c8a5c7c683.jpg) ,它的取值受局部权重矩阵的迹的影响。虽然可以认为 ![r \to 0](img/ab81f225a7e452d651b4888d437d07d2.jpg) ,即解收敛于嵌入情况,但是不保证最优解情况下 ![r > 0](img/8cddd8c0c85ca4a1b6dce8bbf145a8aa.jpg) 。此问题说明,在嵌入时此问题会扭曲流形的内部几何形状,使其失真。 - -解决正则化问题的一种方法是对邻域使用多个权重向量。这就是改进型局部线性嵌入(MLLE)算法的精髓。MLLE 可被执行于函数 [`locally_linear_embedding`](generated/sklearn.manifold.locally_linear_embedding.html#sklearn.manifold.locally_linear_embedding "sklearn.manifold.locally_linear_embedding") ,或者面向对象的副本 [`LocallyLinearEmbedding`](generated/sklearn.manifold.LocallyLinearEmbedding.html#sklearn.manifold.LocallyLinearEmbedding "sklearn.manifold.LocallyLinearEmbedding") ,附带关键词 `method = 'modified'` 。它需要满足 `n_neighbors > n_components` 。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lle_digits_0071.png](img/ca04f56b8f8c29e1eec03620f0f601b0.jpg)](../auto_examples/manifold/plot_lle_digits.html) - -### 2.2.4.1\. 复杂度 - -MLLE 算法分为三部分: - -1. **近邻搜索**。与标准 LLE 的相同。 -2. **权重矩阵构造**。大约是 ![O[D N k^3] + O[N (k-D) k^2]](img/d7f26dee1f8849176f6438863fb775fb.jpg) 。该式第一项恰好等于标准 LLE 算法的复杂度。该式第二项与由多个权重来构造权重矩阵相关。在实践中,(在第二步中)构造 MLLE 权重矩阵(对复杂度)增加的影响,比第一步和第三步的小。 -3. **部分特征值分解**。与标准 LLE 的相同。 - -综上,MLLE 的复杂度为 ![O[D \log(k) N \log(N)] + O[D N k^3] + O[N (k-D) k^2] + O[d N^2]](img/efb0c43ded3d4bdfb4b1d2092c8ee446.jpg) 。 - -* ![N](img/a44a7c045f2217894a894c482861387a.jpg) : 训练集数据点的个数 -* ![D](img/e03066df748abd9273db055cb79f0f01.jpg) : 输入维度 -* ![k](img/f93871977da52a6d11045d57c3e18728.jpg) : 最近邻域的个数 -* ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) : 输出的维度 - -参考文献: - -* [“MLLE: Modified Locally Linear Embedding Using Multiple Weights”](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.70.382) Zhang, Z. & Wang, J. - -## 2.2.5\. 黑塞特征映射(HE) - -黑塞特征映射 (也称作基于黑塞的 LLE: HLLE )是解决 LLE 正则化问题的另一种方法。在每个用于恢复局部线性结构的邻域内,它会围绕一个基于黑塞的二次型展开。虽然其他实现表明它对数据大小缩放较差,但是 sklearn 实现了一些算法改进,使得在输出低维度时它的损耗可与其他 LLE 变体相媲美。HLLE 可实现为函数 [`locally_linear_embedding`](generated/sklearn.manifold.locally_linear_embedding.html#sklearn.manifold.locally_linear_embedding "sklearn.manifold.locally_linear_embedding") 或其面向对象的形式 [`LocallyLinearEmbedding`](generated/sklearn.manifold.LocallyLinearEmbedding.html#sklearn.manifold.LocallyLinearEmbedding "sklearn.manifold.LocallyLinearEmbedding") ,附带关键词 `method = 'hessian'` 。它需满足 `n_neighbors > n_components * (n_components + 3) / 2` 。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lle_digits_0081.png](img/01e7c74ccc13a6832f6bfcd46b442a1b.jpg)](../auto_examples/manifold/plot_lle_digits.html) - -### 2.2.5.1\. 复杂度 - -HLLE 算法分为三部分: - -1. **近邻搜索**。与标准 LLE 的相同。 -2. **权重矩阵构造**. 大约是 ![O[D N k^3] + O[N d^6]](img/f8e0c6c9a82bcbf369e2d0b7fc7aba8d.jpg) 。其中第一项与标准 LLE 相似。第二项来自于局部黑塞估计量的一个 QR 分解。 -3. **部分特征值分解**。与标准 LLE 的相同。 - -综上,HLLE 的复杂度为 ![O[D \log(k) N \log(N)] + O[D N k^3] + O[N d^6] + O[d N^2]](img/2ad6b07024498864a0ce275913a42d9f.jpg) 。 - -* ![N](img/a44a7c045f2217894a894c482861387a.jpg) : 训练集数据点的个数 -* ![D](img/e03066df748abd9273db055cb79f0f01.jpg) : 输入维度 -* ![k](img/f93871977da52a6d11045d57c3e18728.jpg) : 最近邻域的个数 -* ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) : 输出的维度 - -参考文献: - -* [“Hessian Eigenmaps: Locally linear embedding techniques for high-dimensional data”](http://www.pnas.org/content/100/10/5591) Donoho, D. & Grimes, C. Proc Natl Acad Sci USA. 100:5591 (2003) - -## 2.2.6\. 谱嵌入 - -谱嵌入是计算非线性嵌入的一种方法。scikit-learn 执行拉普拉斯特征映射,该映射是用图拉普拉斯的谱分解的方法把数据进行低维表达。这个生成的图可认为是低维流形在高维空间里的离散近似值。基于图的代价函数的最小化确保流形上彼此临近的点被映射后在低维空间也彼此临近,低维空间保持了局部距离。谱嵌入可执行为函数 [`spectral_embedding`](generated/sklearn.manifold.spectral_embedding.html#sklearn.manifold.spectral_embedding "sklearn.manifold.spectral_embedding") 或它的面向对象的对应形式 [`SpectralEmbedding`](generated/sklearn.manifold.SpectralEmbedding.html#sklearn.manifold.SpectralEmbedding "sklearn.manifold.SpectralEmbedding") 。 - -### 2.2.6.1\. 复杂度 - -谱嵌入(拉普拉斯特征映射)算法含三部分: - -1. **加权图结构**。把原输入数据转换为用相似(邻接)矩阵表达的图表达。 -2. **图拉普拉斯结构**。非规格化的图拉普拉斯是按 ![L = D - A](img/49b0512284893ed2ca56a2b8c0b7d0b5.jpg) 构造,并按 ![L = D^{-\frac{1}{2}} (D - A) D^{-\frac{1}{2}}](img/4bb6ac59e053fd48275c31c9af35b2d1.jpg) 规格化的。 -3. **部分特征值分解**。在图拉普拉斯上进行特征值分解。 - -综上,谱嵌入的复杂度是 ![O[D \log(k) N \log(N)] + O[D N k^3] + O[d N^2]](img/5daa1b5d6a3d63020722cb0f4b41eee2.jpg) 。 - -* ![N](img/a44a7c045f2217894a894c482861387a.jpg) : 训练集数据点的个数 -* ![D](img/e03066df748abd9273db055cb79f0f01.jpg) : 输入维度 -* ![k](img/f93871977da52a6d11045d57c3e18728.jpg) : 最近邻域的个数 -* ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) : 输出的维度 - -参考文献: - -* [“Laplacian Eigenmaps for Dimensionality Reduction and Data Representation”](http://web.cse.ohio-state.edu/~mbelkin/papers/LEM_NC_03.pdf) M. Belkin, P. Niyogi, Neural Computation, June 2003; 15 (6):1373-1396 - -## 2.2.7\. 局部切空间对齐(LTSA) - -尽管局部切空间对齐(LTSA)在技术上并不是 LLE 的变体,但它与 LLE 足够相近,可以放入这个目录。与 LLE 算法关注于保持临点距离不同,LTSA 寻求通过切空间来描述局部几何形状,并(通过)实现全局最优化来对其这些局部切空间,从而学会嵌入。 LTSA 可执行为函数 [`locally_linear_embedding`](generated/sklearn.manifold.locally_linear_embedding.html#sklearn.manifold.locally_linear_embedding "sklearn.manifold.locally_linear_embedding") 或它的面向对象的对应形式 [`LocallyLinearEmbedding`](generated/sklearn.manifold.LocallyLinearEmbedding.html#sklearn.manifold.LocallyLinearEmbedding "sklearn.manifold.LocallyLinearEmbedding") ,附带关键词 `method = 'ltsa'` 。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lle_digits_0091.png](img/b74decc4f9ee591a92a5281d0187f05a.jpg)](../auto_examples/manifold/plot_lle_digits.html) - -### 2.2.7.1\. 复杂度 - -LTSA 算法含三部分: - -1. **近邻搜索**。与标准 LLE 的相同。 -2. **加权矩阵构造**。大约是 ![O[D N k^3] + O[k^2 d]](img/8c187292cd29fea23a4983db349e7545.jpg) 。其中第一项与标准 LLE 相似。 -3. **部分特征值分解**。同于标准 LLE 。 - -综上,复杂度是 ![O[D \log(k) N \log(N)] + O[D N k^3] + O[k^2 d] + O[d N^2]](img/fa48fa696e5242bb078fb786e6dc24c3.jpg) 。 - -* ![N](img/a44a7c045f2217894a894c482861387a.jpg) : 训练集数据点的个数 -* ![D](img/e03066df748abd9273db055cb79f0f01.jpg) : 输入维度 -* ![k](img/f93871977da52a6d11045d57c3e18728.jpg) : 最近邻域的个数 -* ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) : 输出的维度 - -参考文献: - -* [“Principal manifolds and nonlinear dimensionality reduction via tangent space alignment”](http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.3693) Zhang, Z. & Zha, H. Journal of Shanghai Univ. 8:406 (2004) - -## 2.2.8\. 多维尺度分析(MDS) - -[多维尺度分析 Multidimensional scaling](https://en.wikipedia.org/wiki/Multidimensional_scaling) ( [`MDS`](generated/sklearn.manifold.MDS.html#sklearn.manifold.MDS "sklearn.manifold.MDS") ) 寻求数据的低维表示,(低维下的)它的距离保持了在初始高维空间中的距离。 - -一般来说,(MDS)是一种用来分析在几何空间距离相似或相异数据的技术。MDS 尝试将相似或相异的数据建模为几何空间距离。这些数据可以是物体间的相似等级,也可是分子的作用频率,还可以是国家简单贸易指数。 - -MDS算法有2类:度量和非度量。在 scikit-learn 中, [`MDS`](generated/sklearn.manifold.MDS.html#sklearn.manifold.MDS "sklearn.manifold.MDS") 类中二者都有。在度量 MDS 中,输入相似度矩阵源自度量(并因此遵从三角形不等式),输出两点之间的距离被设置为尽可能接近相似度或相异度的数据。在非度量版本中,算法尝试保持距离的控制,并因此寻找在所嵌入空间中的距离和相似/相异之间的单调关系。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lle_digits_0101.png](img/12ab1980b4b3f069be032c0d4f1184ed.jpg)](../auto_examples/manifold/plot_lle_digits.html) - -设 ![S](img/12ecd862769bee1e71c75c134b6423bb.jpg) 是相似度矩阵,![X](img/43c1fea57579e54f80c0535bc582626f.jpg) 是 ![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) 个输入点的坐标。差异 ![\hat{d}_{ij}](img/223988a8bef489edcaa2f198e5e3a9a5.jpg) 是以某种最佳方式选择的相似度的转换。然后,通过 ![sum_{i < j} d_{ij}(X) - \hat{d}_{ij}(X)](img/ae82b9adb507cb166d4721c004ae5f40.jpg) 定义称为 Stress (应力值)的对象。 - -### 2.2.8.1\. 度量 MDS - -最简单的度量 [`MDS`](generated/sklearn.manifold.MDS.html#sklearn.manifold.MDS "sklearn.manifold.MDS") 模型称为 _absolute MDS(绝对MDS)_,差异由 ![\hat{d}_{ij} = S_{ij}](img/446d6d36c20a79508f1cc84c737a597b.jpg) 定义。对于绝对 MDS,值 ![S_{ij}](img/bf95d88f4f17676409c7bab64ba036dc.jpg) 应精确地对应于嵌入点的点 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 和 ![j](img/7b215f2882ce8aaa33a97e43ad626314.jpg) 之间的距离。 - -大多数情况下,差异应设置为 ![\hat{d}_{ij} = b S_{ij}](img/de55c53f911184b6ad3e562a4d694c01.jpg) 。 - -### 2.2.8.2\. 非度量 MDS - -非度量 [`MDS`](generated/sklearn.manifold.MDS.html#sklearn.manifold.MDS "sklearn.manifold.MDS") 关注数据的排序。如果 ![S_{ij} < S_{kl}](img/7ab8c51f211ad5aea8e4e78337ca3624.jpg) ,则嵌入应执行 ![d_{ij} < d_{jk}](img/6a0cf5d5f1d5ad90f9713a46fa55111f.jpg) 。这样执行的一个简单算法是在 ![S_{ij}](img/bf95d88f4f17676409c7bab64ba036dc.jpg) 上使用 ![d_{ij}](img/e0d8dbb9574d5eb264279927dcf8baaf.jpg) 的单调回归,产生与 ![S_{ij}](img/bf95d88f4f17676409c7bab64ba036dc.jpg) 相同顺序的差异 ![\hat{d}_{ij}](img/223988a8bef489edcaa2f198e5e3a9a5.jpg) 。 - -此问题的 a trivial solution(一个平凡解)是把所有点设置到原点上。为了避免这种情况,将差异 ![S_{ij}](img/bf95d88f4f17676409c7bab64ba036dc.jpg) 标准化。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_mds_0011.png](img/fe62193b4391c9f60e373f03623696ac.jpg)](../auto_examples/manifold/plot_mds.html) - -参考文献: - -* [“Modern Multidimensional Scaling - Theory and Applications”](http://www.springer.com/fr/book/9780387251509) Borg, I.; Groenen P. Springer Series in Statistics (1997) -* [“Nonmetric multidimensional scaling: a numerical method”](http://link.springer.com/article/10.1007%2FBF02289694) Kruskal, J. Psychometrika, 29 (1964) -* [“Multidimensional scaling by optimizing goodness of fit to a nonmetric hypothesis”](http://link.springer.com/article/10.1007%2FBF02289565) Kruskal, J. Psychometrika, 29, (1964) - -## 2.2.9\. t 分布随机邻域嵌入(t-SNE) - -t-SNE( [`TSNE`](generated/sklearn.manifold.TSNE.html#sklearn.manifold.TSNE "sklearn.manifold.TSNE") )将数据点的相似性转换为概率。原始空间中的相似性表示为高斯联合概率,嵌入空间中的相似性表示为 “学生” 的 t 分布。这允许 t-SNE 对局部结构特别敏感,并且有超过现有技术的一些其它优点: - -* 在一个单一映射上以多种比例显示结构 -* 显示位于多个、不同的流形或聚类中的数据 -* 减轻在中心聚集的趋势 - -Isomap、LLE 和其它变体最适合展开单个连续低维流形,而 t-SNE 将侧重于数据的局部结构,并倾向于提取聚类的局部样本组,就像S曲线示例中突出显示的那样。这种基于局部结构对样本进行分组的能力可能有助于在视觉上同时解开包括多个流形的数据集,如数字数据集中的情况。 - -原始空间和嵌入空间中的联合概率的 Kullback-Leibler(KL) 散度将通过梯度下降而最小化。注意,KL 发散不是凸的,即具有不同初始化的多次重新开始将以KL发散的局部最小值结束。因此,尝试不同的开始值并选择具有最低KL散度的嵌入有时是有用的。 - -使用 t - SNE 的缺点大致如下: - -* t-SNE 的计算成本很高,在百万样本数据集上可能需要几个小时,而PCA将在几秒或几分钟内完成同样工作。 -* Barnes-Hut t-SNE 方法仅限于二维或三维嵌入。 -* 该算法是随机的,不同种子的多次重新开始可以产生不同的嵌入。然而,以最小的误差选择嵌入是完全合理的。 -* 未明确保留全局结构。用PCA初始化点(使用 <cite>init=’pca’</cite> ),可以减轻此问题。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lle_digits_0131.png](img/afcad7956ba0a3a4a6771ee9810280c2.jpg)](../auto_examples/manifold/plot_lle_digits.html) - -### 2.2.9.1\. 优化 t-SNE - -t-SNE 的主要目的是实现高维数据的可视化。因此,当数据将嵌入到二维或三维时,它效果最好。 - -优化KL发散有时可能有点棘手。有五个参数控制 t-SNE 的优化,因此可能也控制最终嵌入的质量: - -* 复杂度 -* 早期增长因子 -* 学习率 -* 最大迭代次数 -* 角度(不在精确方法中使用) - -复杂度(perplexity)定义为 ![k=2^(S)](img/81dfab5bd4f0d37601684acb3d714e9d.jpg) ,其中 ![S](img/12ecd862769bee1e71c75c134b6423bb.jpg) 是条件概率分布的香农熵。k 面色子的复杂度是 k ,因此 k 实际上是生成条件概率时 t-SNE 考虑的最近邻域的个数。复杂度越大导致有越多的近邻域,则对小结构越不敏感。相反地,越低的复杂度考虑越少的邻域,并因此忽略越多的全局信息而越关注局部邻域。当数据集的大小变大时,需要更多的点来获得局部邻域的合理样本,因此可能需要更大的复杂度。类似地,噪声越大的数据集需要越大的复杂度来包含足够的局部邻域,以超出背景噪声。 - -最大迭代次数通常足够高,不需要任何调整。优化分为两个阶段:早期增长阶段和最终优化阶段。在早期增长中,原始空间中的联合概率将通过与给定因子相乘而被人为地增加。越大的因子导致数据中的自然聚类之间的差距越大。如果因子过高,KL 发散可能在此阶段增加。通常不需要对其进行调谐。学习率是一个关键参数。如果梯度太低,下降会陷入局部极小值。如果过高,KL发散将在优化阶段增加。可以在 Laurens van derMaaten 的常见问题解答中找到更多提示(见参考资料)。最后一个参数角度是性能和精度之间的折衷。角度越大意味着我们可以通过单个点来近似的区域越大,从而导致越快的速度,但结果越不准确。 - -[“如何高效使用 t-SNE”](http://distill.pub/2016/misread-tsne/) 提供了一个关于各种参数效果的很好的讨论,以及用来探索不同参数效果的交互式绘图。 - -### 2.2.9.2\. Barnes-Hut t-SNE - -在此实现的 Barnes-Hut t-SNE 通常比其他流形学习算法慢得多。优化是很困难的,梯度的计算是 ![O[d N log(N)]](img/f60c0101ae8f649bb02ed8b24b30fd83.jpg) ,其中 ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) 是输出维数,![N](img/a44a7c045f2217894a894c482861387a.jpg) 是样本个数。Barnes-Hut 方法在 t-SNE 复杂度为 ![O[d N^2]](img/9642d01a97f06869baba6159e3438677.jpg) 的精确方法上有所改进,但有其他几个显著区别: - -* Barnes-Hut 实现仅在目标维度为3或更小时才有效。构建可视化时,2D 案例是典型的。 -* Barnes-Hut 仅适用于密集的输入数据。稀疏数据矩阵只能用精确方法嵌入,或者可以通过密集的低阶投影来近似,例如使用 [`sklearn.decomposition.TruncatedSVD`](generated/sklearn.decomposition.TruncatedSVD.html#sklearn.decomposition.TruncatedSVD "sklearn.decomposition.TruncatedSVD") -* Barnes-Hut 是精确方法的近似。近似使用 angle 作为参数,因此当参数 method=”exact” 时,angle 参数无效。 -* Barnes-Hut 的拓展性很高。Barnes-Hut 可用于嵌入数十万个数据点,而精确方法只能处理数千个样本,再多就很困难了。 - -出于可视化目的( t-SNE 的主要使用情况),强烈建议使用 Barnes-Hut 方法。精确的 t-SNE 方法可用于检验高维空间中嵌入的理论性质,但由于计算约束而仅限于小数据集。 - -还要注意,数字 label 与 t-SNE 发现的自然聚类大致匹配,而 PCA 模型的线性 2D 投影产生标签区域在很大程度上重叠的表示。这是一个强有力的线索,表明该数据可以通过关注局部结构的非线性方法(例如,具有高斯 RBF 核的 SVM )很好地分离。然而,如果不能在二维中用 t-SNE 来可视化分离良好的均匀标记组,并不一定意味着数据不能被监督模型正确地分类。可能是因为 2 维不够低,无法准确表示数据的内部结构。 - -参考文献: - -* [“Visualizing High-Dimensional Data Using t-SNE”](http://jmlr.org/papers/v9/vandermaaten08a.html) van der Maaten, L.J.P.; Hinton, G. Journal of Machine Learning Research (2008) -* [“t-Distributed Stochastic Neighbor Embedding”](http://lvdmaaten.github.io/tsne/) van der Maaten, L.J.P. -* [“Accelerating t-SNE using Tree-Based Algorithms.”](https://lvdmaaten.github.io/publications/papers/JMLR_2014.pdf) L.J.P. van der Maaten. Journal of Machine Learning Research 15(Oct):3221-3245, 2014. - -## 2.2.10\. 实用技巧 - -* 确保对所有特征使用相同的缩放。因为流形学习方法是基于最近邻搜索的,否则算法的性能可能很差。有关缩放异构数据的方便方法,请参阅 [StandardScaler](preprocessing.html#preprocessing-scaler) 。 -* 由每个例程计算的重构误差可用于选择最佳输出维度。对于嵌入在 ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) 维参数空间中的 ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) 维流形,重构误差将随着 `n_components` 的增加而减小,直到 `n_components == d` 。 -* 注意,噪声数据可以对流形造成“短路”,其实质上充当了一个桥梁,用于连接流形的不同部分,否则(没有这样的“桥梁”)这些流形将被很好地划分开。噪声和/或不完全数据的流形学习是一个活跃的研究领域。 -* 某些输入配置可能导致奇异加权矩阵,例如,当数据集中的两个以上点完全相同时,或者当数据被分割成不连续的组时。在这种情况下, `solver='arpack'` 将无法找到空空间。解决这一问题的最简单方法是使用 `solver='dense'` ,它将在一个奇异矩阵上进行,尽管它可能因为输入点的数量而非常缓慢。或者,人们可以尝试理解奇异的来源:如果它是由于不相交的集合,增加 `n_neighbors` 可能有所帮助;如果是由于数据集中的相同点,则删除这些点可能有所帮助。 - -See also - -[完全随机树嵌入](ensemble.html#random-trees-embedding) 也可以用于得到特征空间的非线性表示,另外它不用降维。 \ No newline at end of file diff --git a/docs/0.19.x/22.md b/docs/0.19.x/22.md deleted file mode 100755 index 5a4e56aa3189ad800710f65196e8c96cc56b1a05..0000000000000000000000000000000000000000 --- a/docs/0.19.x/22.md +++ /dev/null @@ -1,881 +0,0 @@ -# 2.3\. 聚类 - -校验者: -        [@花开无声](https://github.com/apachecn/scikit-learn-doc-zh) -        [@小瑶](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@小瑶](https://github.com/apachecn/scikit-learn-doc-zh) -        [@krokyin](https://github.com/apachecn/scikit-learn-doc-zh) - -未标记的数据的 [Clustering(聚类)](https://en.wikipedia.org/wiki/Cluster_analysis) 可以使用模块 [`sklearn.cluster`](classes.html#module-sklearn.cluster "sklearn.cluster") 来实现。 - -每个 clustering algorithm (聚类算法)有两个变体: 一个是 class, 它实现了 `fit` 方法来学习 train data(训练数据)的 clusters(聚类),还有一个 function(函数),是给定 train data(训练数据),返回与不同 clusters(聚类)对应的整数标签 array(数组)。对于 class(类),training data(训练数据)上的标签可以在 `labels_` 属性中找到。 - -输入数据 - -需要注意的一点是,该模块中实现的算法可以采用不同种类的 matrix (矩阵)作为输入。所有这些都接受 shape `[n_samples, n_features]` 的标准数据矩阵。 这些可以从以下的 [`sklearn.feature_extraction`](classes.html#module-sklearn.feature_extraction "sklearn.feature_extraction") 模块的 classes (类)中获得。对于 [`AffinityPropagation`](generated/sklearn.cluster.AffinityPropagation.html#sklearn.cluster.AffinityPropagation "sklearn.cluster.AffinityPropagation"), [`SpectralClustering`](generated/sklearn.cluster.SpectralClustering.html#sklearn.cluster.SpectralClustering "sklearn.cluster.SpectralClustering") 和 [`DBSCAN`](generated/sklearn.cluster.DBSCAN.html#sklearn.cluster.DBSCAN "sklearn.cluster.DBSCAN") 也可以输入 shape `[n_samples, n_samples]` 的相似矩阵。这些可以从 [`sklearn.metrics.pairwise`](classes.html#module-sklearn.metrics.pairwise "sklearn.metrics.pairwise") 模块中的函数获得。 - -## 2.3.1\. 聚类方法概述 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_cluster_comparison_0011.png](img/153aceb3cdac953277c6c840339ac023.jpg)](../auto_examples/cluster/plot_cluster_comparison.html) - -在 scikit-learn 中的 clustering algorithms (聚类算法)的比较 - -| Method name(方法名称) | Parameters(参数) | Scalability(可扩展性) | Usecase(使用场景) | Geometry (metric used)(几何图形(公制使用)) | -| --- | --- | --- | --- | --- | -| [K-Means(K-均值)](#k-means) | number of clusters(聚类形成的簇的个数) | 非常大的 `n_samples`, 中等的 `n_clusters` 使用 [MiniBatch code(MiniBatch 代码)](#mini-batch-kmeans) | 通用, 均匀的 cluster size(簇大小), flat geometry(平面几何), 不是太多的 clusters(簇) | Distances between points(点之间的距离) | -| [Affinity propagation](#affinity-propagation) | damping(阻尼), sample preference(样本偏好) | Not scalable with n_samples(n_samples 不可扩展) | Many clusters, uneven cluster size, non-flat geometry(许多簇,不均匀的簇大小,非平面几何) | Graph distance (e.g. nearest-neighbor graph)(图形距离(例如,最近邻图)) | -| [Mean-shift](#mean-shift) | bandwidth(带宽) | Not scalable with `n_samples` (不可扩展的 `n_samples`) | Many clusters, uneven cluster size, non-flat geometry(许多簇,不均匀的簇大小,非平面几何) | Distances between points(点之间的距离) | -| [Spectral clustering](#spectral-clustering) | number of clusters(簇的个数) | 中等的 `n_samples`, 小的 `n_clusters` | Few clusters, even cluster size, non-flat geometry(几个簇,均匀的簇大小,非平面几何) | Graph distance (e.g. nearest-neighbor graph)(图形距离(例如最近邻图)) | -| [Ward hierarchical clustering](#hierarchical-clustering) | number of clusters(簇的个数) | 大的 `n_samples` 和 `n_clusters` | Many clusters, possibly connectivity constraints(很多的簇,可能连接限制) | Distances between points(点之间的距离) | -| [Agglomerative clustering](#hierarchical-clustering) | number of clusters(簇的个数), linkage type(链接类型), distance(距离) | 大的 `n_samples` 和 `n_clusters` | Many clusters, possibly connectivity constraints, non Euclidean distances(很多簇,可能连接限制,非欧几里得距离) | Any pairwise distance(任意成对距离) | -| [DBSCAN](#dbscan) | neighborhood size(neighborhood 的大小) | 非常大的 `n_samples`, 中等的 `n_clusters` | Non-flat geometry, uneven cluster sizes(非平面几何,不均匀的簇大小) | Distances between nearest points(最近点之间的距离) | -| [Gaussian mixtures(高斯混合)](mixture.html#mixture) | many(很多) | Not scalable(不可扩展) | Flat geometry, good for density estimation(平面几何,适用于密度估计) | Mahalanobis distances to centers(Mahalanobis 与中心的距离) | -| [Birch](#birch) | branching factor(分支因子), threshold(阈值), optional global clusterer(可选全局簇). | 大的 `n_clusters` 和 `n_samples` | Large dataset, outlier removal, data reduction.(大数据集,异常值去除,数据简化) | Euclidean distance between points(点之间的欧式距离) | - -当 clusters (簇)具有 specific shape (特殊的形状),即 non-flat manifold(非平面 manifold),并且标准欧几里得距离不是正确的 metric (度量标准)时,Non-flat geometry clustering (非平面几何聚类)是非常有用的。这种情况出现在上图的两个顶行中。 - -用于 clustering (聚类)的 Gaussian mixture models (高斯混合模型),专用于 mixture models (混合模型)描述在 [文档的另一章节](mixture.html#mixture) 。可以将 KMeans 视为具有 equal covariance per component (每个分量相等协方差)的 Gaussian mixture model (高斯混合模型)的特殊情况。 - -## 2.3.2\. K-means - -[`KMeans`](generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans "sklearn.cluster.KMeans") 算法通过试图分离 n groups of equal variance(n 个相等方差组)的样本来聚集数据,minimizing (最小化)称为 [inertia](inertia) 或者 within-cluster sum-of-squares (簇内和平方)的 criterion (标准)。 该算法需要指定 number of clusters (簇的数量)。它可以很好地 scales (扩展)到 large number of samples(大量样本),并已经被广泛应用于许多不同领域的应用领域。 - -k-means 算法将一组 ![N](img/a44a7c045f2217894a894c482861387a.jpg) 样本 ![X](img/43c1fea57579e54f80c0535bc582626f.jpg) 划分成 ![K](img/e279b8169ddd6581c5606c868ba52fae.jpg) 不相交的 clusters (簇) ![C](img/4b6d782a67ac392e97215c46b7590bf7.jpg), 每个都用 cluster (该簇)中的样本的均值 ![\mu_j](img/38320089278fc639e640f3f772eac6b1.jpg) 描述。 这个 means (均值)通常被称为 cluster(簇)的 “centroids(质心)”; 注意,它们一般不是从 ![X](img/43c1fea57579e54f80c0535bc582626f.jpg) 中挑选出的点,虽然它们是处在同一个 space(空间)。 K-means(K-均值)算法旨在选择最小化 _inertia(惯性)_ 或 within-cluster sum of squared(簇内和的平方和)的标准的 centroids(质心): - -![\sum_{i=0}^{n}\min_{\mu_j \in C}(||x_j - \mu_i||^2)](img/c46633c42aaa3e030b14d90aadb323fc.jpg) - -Inertia(惯性), 或 the within-cluster sum of squares(簇内和平方差) criterion(标准),可以被认为是 internally coherent clusters (内部想干聚类)的 measure (度量)。 它有各种缺点: - -* Inertia(惯性)假设 clusters (簇)是 convex(凸)的和 isotropic (各项同性),这并不是总是这样。它对 elongated clusters (细长的簇)或具有不规则形状的 manifolds 反应不佳。 -* Inertia(惯性)不是一个 normalized metric(归一化度量): 我们只知道 lower values (较低的值)是更好的,并且 零 是最优的。但是在 very high-dimensional spaces (非常高维的空间)中,欧几里得距离往往会变得 inflated (膨胀)(这就是所谓的 “curse of dimensionality (维度诅咒/维度惩罚)”)。在 k-means 聚类之前运行诸如 [PCA](PCA) 之类的 dimensionality reduction algorithm (降维算法)可以减轻这个问题并加快计算速度。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_kmeans_assumptions_0011.png](img/d97ae32100e54dfed8139aef0fcc9b68.jpg)](../auto_examples/cluster/plot_kmeans_assumptions.html) - -K-means 通常被称为 Lloyd’s algorithm(劳埃德算法)。在基本术语中,算法有三个步骤。、 第一步是选择 initial centroids (初始质心),最基本的方法是从 ![X](img/43c1fea57579e54f80c0535bc582626f.jpg) 数据集中选择 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 个样本。初始化完成后,K-means 由两个其他步骤之间的循环组成。 第一步将每个样本分配到其 nearest centroid (最近的质心)。第二步通过取分配给每个先前质心的所有样本的平均值来创建新的质心。计算旧的和新的质心之间的差异,并且算法重复这些最后的两个步骤,直到该值小于阈值。换句话说,算法重复这个步骤,直到质心不再显著移动。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_kmeans_digits_0011.png](img/8a76c85f2de3d3777fe72f5d8e32e0cf.jpg)](../auto_examples/cluster/plot_kmeans_digits.html) - -K-means 相当于具有 small, all-equal, diagonal covariance matrix (小的全对称协方差矩阵)的 expectation-maximization algorithm (期望最大化算法)。 - -该算法也可以通过 [`Voronoi diagrams(Voronoi图)<https://en.wikipedia.org/wiki/Voronoi_diagram>`_](#id42) 的概念来理解。首先使用 current centroids (当前质心)计算点的 Voronoi 图。 Voronoi 图中的每个 segment (段)都成为一个 separate cluster (单独的簇)。其次,centroids(质心)被更新为每个 segment (段)的 mean(平均值)。然后,该算法重复此操作,直到满足停止条件。 通常情况下,当 iterations (迭代)之间的 objective function (目标函数)的相对减小小于给定的 tolerance value (公差值)时,算法停止。在此实现中不是这样: 当质心移动小于 tolerance (公差)时,迭代停止。 - -给定足够的时间,K-means 将总是收敛的,但这可能是 local minimum (局部最小)的。这很大程度上取决于 initialization of the centroids (质心的初始化)。 因此,通常会进行几次 different initializations of the centroids (初始化不同质心)的计算。帮助解决这个问题的一种方法是 k-means++ 初始化方案,它已经在 scikit-learn 中实现(使用 `init='k-means++'` 参数)。 这将初始化 centroids (质心)(通常)彼此远离,导致比随机初始化更好的结果,如参考文献所示。 - -可以给出一个参数,以允许 K-means 并行运行,称为 `n_jobs`。给这个参数一个正值使用许多处理器(默认值: 1)。值 -1 使用所有可用的处理器,-2 使用一个,等等。Parallelization (并行化)通常以 cost of memory(内存的代价)加速计算(在这种情况下,需要存储多个质心副本,每个作业使用一个)。 - -Warning - -当 <cite>numpy</cite> 使用 <cite>Accelerate</cite> 框架时,K-Means 的并行版本在 OS X 上损坏。这是 expected behavior (预期的行为): <cite>Accelerate</cite> 可以在 fork 之后调用,但是您需要使用 Python binary(二进制)(该多进程在 posix 下不执行)来执行子进程。 - -K-means 可用于 vector quantization (矢量量化)。这是使用以下类型的 trained model (训练模型)的变换方法实现的 [`KMeans`](generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans "sklearn.cluster.KMeans") 。 - -示例: - -* [Demonstration of k-means assumptions](../auto_examples/cluster/plot_kmeans_assumptions.html#sphx-glr-auto-examples-cluster-plot-kmeans-assumptions-py): 演示 k-means 是否 performs intuitively (直观执行),何时不执行 -* [A demo of K-Means clustering on the handwritten digits data](../auto_examples/cluster/plot_kmeans_digits.html#sphx-glr-auto-examples-cluster-plot-kmeans-digits-py): 聚类手写数字 - -参考: - -* [“k-means++: The advantages of careful seeding”](http://ilpubs.stanford.edu:8090/778/1/2006-13.pdf) Arthur, David, and Sergei Vassilvitskii, _Proceedings of the eighteenth annual ACM-SIAM symposium on Discrete algorithms_, Society for Industrial and Applied Mathematics (2007) - -### 2.3.2.1\. 小批量 K-Means - -[`MiniBatchKMeans`](generated/sklearn.cluster.MiniBatchKMeans.html#sklearn.cluster.MiniBatchKMeans "sklearn.cluster.MiniBatchKMeans") 是 [`KMeans`](generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans "sklearn.cluster.KMeans") 算法的一个变体,它使用 mini-batches (小批量)来减少计算时间,同时仍然尝试优化相同的 objective function (目标函数)。 Mini-batches(小批量)是输入数据的子集,在每次 training iteration (训练迭代)中 randomly sampled (随机抽样)。这些小批量大大减少了融合到本地解决方案所需的计算量。 与其他降低 k-means 收敛时间的算法相反,mini-batch k-means 产生的结果通常只比标准算法略差。 - -该算法在两个主要步骤之间进行迭代,类似于 vanilla k-means 。 在第一步, ![b](img/6ae91fb0f3221b92d2dd4e22204d8008.jpg) 样本是从数据集中随机抽取的,形成一个 mini-batch (小批量)。然后将它们分配到最近的 centroid(质心)。 在第二步,centroids (质心)被更新。与 k-means 相反,这是在每个样本的基础上完成的。对于 mini-batch (小批量)中的每个样本,通过取样本的 streaming average (流平均值)和分配给该质心的所有先前样本来更新分配的质心。 这具有随时间降低 centroid (质心)的 rate (变化率)的效果。执行这些步骤直到达到收敛或达到预定次数的迭代。 - -[`MiniBatchKMeans`](generated/sklearn.cluster.MiniBatchKMeans.html#sklearn.cluster.MiniBatchKMeans "sklearn.cluster.MiniBatchKMeans") 收敛速度比 [`KMeans`](generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans "sklearn.cluster.KMeans") ,但是结果的质量会降低。在实践中,质量差异可能相当小,如示例和引用的参考。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_mini_batch_kmeans_0011.png](img/c851b3cdef3493f17f70f7249928e34b.jpg)](../auto_examples/cluster/plot_mini_batch_kmeans.html) - -示例: - -* [Comparison of the K-Means and MiniBatchKMeans clustering algorithms](../auto_examples/cluster/plot_mini_batch_kmeans.html#sphx-glr-auto-examples-cluster-plot-mini-batch-kmeans-py): KMeans 与 MiniBatchKMeans 的比较 -* [Clustering text documents using k-means](../auto_examples/text/document_clustering.html#sphx-glr-auto-examples-text-document-clustering-py): 使用 sparse MiniBatchKMeans (稀疏 MiniBatchKMeans)的文档聚类 -* [Online learning of a dictionary of parts of faces](../auto_examples/cluster/plot_dict_face_patches.html#sphx-glr-auto-examples-cluster-plot-dict-face-patches-py) - -参考: - -* [“Web Scale K-Means clustering”](http://www.eecs.tufts.edu/~dsculley/papers/fastkmeans.pdf) D. Sculley, _Proceedings of the 19th international conference on World wide web_ (2010) - -## 2.3.3\. Affinity Propagation - -[`AffinityPropagation`](generated/sklearn.cluster.AffinityPropagation.html#sklearn.cluster.AffinityPropagation "sklearn.cluster.AffinityPropagation") AP聚类是通过在样本对之间发送消息直到收敛来创建聚类。然后使用少量示例样本作为聚类中心来描述数据集, 聚类中心是数据集中最能代表一类数据的样本。在样本对之间发送的消息表示一个样本作为另一个样本的示例样本的 适合程度,适合程度值在根据通信的反馈不断更新。更新迭代直到收敛,完成聚类中心的选取,因此也给出了最终聚类。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_affinity_propagation_0011.png](img/12867664a0e0e6047ee303c542b4deac.jpg)](../auto_examples/cluster/plot_affinity_propagation.html) - -```py -Affinity Propagation 算法比较有趣的是可以根据提供的数据决定聚类的数目。 因此有两个比较重要的参数 -``` - -_preference_, 决定使用多少个示例样本 [*](#id6)damping factor*(阻尼因子) 减少吸引信息和归属信息以防止 更新减少吸引度和归属度信息时数据振荡。 - -AP聚类算法主要的缺点是算法的复杂度. AP聚类算法的时间复杂度是 ![O(N^2 T)](img/2af4d75ca07ede34c7d38b8f7708723d.jpg), 其中 ![N](img/a44a7c045f2217894a894c482861387a.jpg) 是样本的个数 , ![T](img/c4373cf7ea98d1425608569103286d28.jpg) 是收敛之前迭代的次数. 如果使用密集的相似性矩阵空间复杂度是 ![O(N^2)](img/ff5428ca3c50ed06f5162ad194377188.jpg) 如果使用稀疏的相似性矩阵空间复杂度可以降低。 这使得AP聚类最适合中小型数据集。 - -示例: - -* [Demo of affinity propagation clustering algorithm](../auto_examples/cluster/plot_affinity_propagation.html#sphx-glr-auto-examples-cluster-plot-affinity-propagation-py): Affinity Propagation on a synthetic 2D datasets with 3 classes. -* [Visualizing the stock market structure](../auto_examples/applications/plot_stock_market.html#sphx-glr-auto-examples-applications-plot-stock-market-py) Affinity Propagation on Financial time series to find groups of companies - -**Algorithm description(算法描述):** 样本之间传递的信息有两种。 第一种是 responsibility(吸引信息) ![r(i, k)](img/d7b279566c62332b11d20ca6ff026505.jpg), 样本 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 适合作为样本 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 的聚类中心的程度。 - -第二种是 availability(归属信息) ![a(i, k)](img/725082a3e3f2eacec65e9c1435a6960d.jpg) 样本 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 选择样本 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 作为聚类中心的适合程度,并且考虑其他所有样本选取 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 做为聚类中心的合适程度。 通过这个方法,选取示例样本作为聚类中心如果 (1) 该样本与其许多样本相似,并且 (2) 被许多样本选取 为它们自己的示例样本。 - -样本 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 对样本 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 吸引度计算公式: - -![r(i, k) \leftarrow s(i, k) - max [ a(i, k') + s(i, k') \forall k' \neq k ]](img/8dab78bd2e80188f99e0c88c4c83472a.jpg) - -其中 ![s(i, k)](img/f8d66dde73704b8821db5322592a0cc2.jpg) 是样本 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 和样本 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 之间的相似度。 样本 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 作为样本 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 的示例样本的合适程度: - -![a(i, k) \leftarrow min [0, r(k, k) + \sum_{i'~s.t.~i' \notin \{i, k\}}{r(i', k)}]](img/851c667ab0811688c25c6819aafacba0.jpg) - -算法开始时 ![r](img/451ef7ed1a14a6cdc38324c8a5c7c683.jpg) 和 ![a](img/578c95150175e4efdf851fe66d503079.jpg) 都被置 0,然后开始迭代计算直到收敛。 为了防止更新数据时出现数据振荡,在迭代过程中引入阻尼因子 ![\lambda](img/0f92bc682b050115d03c625ce770c77d.jpg) : - -![r_{t+1}(i, k) = \lambda\cdot r_{t}(i, k) + (1-\lambda)\cdot r_{t+1}(i, k)](img/f1fa822436569807fdc9dca5d2879d99.jpg) - -![a_{t+1}(i, k) = \lambda\cdot a_{t}(i, k) + (1-\lambda)\cdot a_{t+1}(i, k)](img/1ae6d373d81c5f3f50905f336b4a070a.jpg) - -其中 ![t](img/12b2c1da1f9041738fa7153efc651372.jpg) 迭代的次数。 - -## 2.3.4\. Mean Shift - -[`MeanShift`](generated/sklearn.cluster.MeanShift.html#sklearn.cluster.MeanShift "sklearn.cluster.MeanShift") 算法旨在于发现一个样本密度平滑的 _blobs_ 。 均值漂移算法是基于质心的算法,通过更新质心的候选位置为所选定区域的偏移均值。 然后,这些候选者在后处理阶段被过滤以消除近似重复,从而形成最终质心集合。 - -给定第 ![t](img/12b2c1da1f9041738fa7153efc651372.jpg) 次迭代中的候选质心 ![x_i](img/cf52655ee609af9f3c27c06448a5bf67.jpg) , 候选质心的位置将被安装如下公式更新: - -![x_i^{t+1} = x_i^t + m(x_i^t)](img/be2b3bbef9fe377c6f748dd05355b58b.jpg) - -其中 ![N(x_i)](img/f35f174b5f70ab18c19107e3f0fbe889.jpg) 是围绕 ![x_i](img/cf52655ee609af9f3c27c06448a5bf67.jpg) 周围一个给定距离范围内的样本空间 and ![m](img/94156b879a7455cb0d516efa9c9c0991.jpg) 是 _mean shift_ vector(均值偏移向量) 是所有质心中指向 点密度增加最多的区域的偏移向量。使用以下等式计算,有效地将质心更新为其邻域内样本的平均值: - -![m(x_i) = \frac{\sum_{x_j \in N(x_i)}K(x_j - x_i)x_j}{\sum_{x_j \in N(x_i)}K(x_j - x_i)}](img/97f450040417800904df33c9702d2c66.jpg) - -算法自动设定聚类的数目,取代依赖参数 `bandwidth``(带宽),带宽是决定搜索区域的size的参数。 这个参数可以手动设置,但是如果没有设置,可以使用提供的评估函数 ``estimate_bandwidth` 进行评估。 - -该算法不是高度可扩展的,因为在执行算法期间需要执行多个最近邻搜索。 该算法保证收敛,但是当 质心的变化较小时,算法将停止迭代。 - -通过找到给定样本的最近质心来给新样本打上标签。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_mean_shift_0011.png](img/7304e7fb0302be38d7fa1688bcd14df4.jpg)](../auto_examples/cluster/plot_mean_shift.html) - -示例: - -* [A demo of the mean-shift clustering algorithm](../auto_examples/cluster/plot_mean_shift.html#sphx-glr-auto-examples-cluster-plot-mean-shift-py): Mean Shift clustering on a synthetic 2D datasets with 3 classes. - -参考: - -* [“Mean shift: A robust approach toward feature space analysis.”](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.76.8968&rep=rep1&type=pdf) D. Comaniciu and P. Meer, _IEEE Transactions on Pattern Analysis and Machine Intelligence_ (2002) - -## 2.3.5\. Spectral clustering - -[`SpectralClustering`](generated/sklearn.cluster.SpectralClustering.html#sklearn.cluster.SpectralClustering "sklearn.cluster.SpectralClustering") 是在样本之间进行亲和力矩阵的低维度嵌入,其实是低维空间中的 KMeans。 如果亲和度矩阵稀疏,则这是非常有效的并且 [pyamg](http://pyamg.org/) module 以及安装好。 SpectralClustering 需要指定聚类数。这个算法适用于聚类数少时,在聚类数多是不建议使用。 - -对于两个聚类,它解决了相似图上的 [normalised cuts](http://people.eecs.berkeley.edu/~malik/papers/SM-ncut.pdf) 问题: 将图形切割成两个,使得切割的边缘的重量比每个簇内的边缘的权重小。在图像处理时,这个标准是特别有趣的: 图像的顶点是像素,相似图的边缘是图像的渐变函数。 - -**[![noisy_img](img/bb0a3257b0276e1ade46d7fa84c49ad0.jpg)](../auto_examples/cluster/plot_segmentation_toy.html) [![segmented_img](img/5ec012661471fa940c27472afcce01a2.jpg)](../auto_examples/cluster/plot_segmentation_toy.html)** - -Warning - -Transforming distance to well-behaved similarities - -请注意,如果你的相似矩阵的值分布不均匀,例如:存在负值或者距离矩阵并不表示相似性 spectral problem 将会变得奇异,并且不能解决。 在这种情况下,建议对矩阵的 entries 进行转换。比如在符号距离有符号的情况下通常使用 heat kernel: - -```py -similarity = np.exp(-beta * distance / distance.std()) - -``` - -请看这样一个应用程序的例子。 - -示例: - -* [Spectral clustering for image segmentation](../auto_examples/cluster/plot_segmentation_toy.html#sphx-glr-auto-examples-cluster-plot-segmentation-toy-py): Segmenting objects from a noisy background using spectral clustering. -* [Segmenting the picture of a raccoon face in regions](../auto_examples/cluster/plot_face_segmentation.html#sphx-glr-auto-examples-cluster-plot-face-segmentation-py): Spectral clustering to split the image of the raccoon face in regions. - -### 2.3.5.1\. 不同的标记分配策略 - -可以使用不同的分配策略, 对应于 `assign_labels` 参数 [`SpectralClustering`](generated/sklearn.cluster.SpectralClustering.html#sklearn.cluster.SpectralClustering "sklearn.cluster.SpectralClustering")。 `"kmeans"` 可以匹配更精细的数据细节,但是可能更加不稳定。 特别是,除非你设置 `random_state` 否则可能无法复现运行的结果 ,因为它取决于随机初始化。另一方, 使用 `"discretize"` 策略是 100% 可以复现的,但是它往往会产生相当均匀的几何形状的边缘。 - -| `assign_labels="kmeans"` | `assign_labels="discretize"` | -| --- | --- | -| [![face_kmeans](img/3579ce0b5c145fb891d865367eeba3ac.jpg)](../auto_examples/cluster/plot_face_segmentation.html) | [![face_discretize](img/1ff26934befcf3ca9623f1e729a8824c.jpg)](../auto_examples/cluster/plot_face_segmentation.html) | - -参考: - -* [“A Tutorial on Spectral Clustering”](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.165.9323) Ulrike von Luxburg, 2007 -* [“Normalized cuts and image segmentation”](http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.160.2324) Jianbo Shi, Jitendra Malik, 2000 -* [“A Random Walks View of Spectral Segmentation”](http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.33.1501) Marina Meila, Jianbo Shi, 2001 -* [“On Spectral Clustering: Analysis and an algorithm”](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.19.8100) Andrew Y. Ng, Michael I. Jordan, Yair Weiss, 2001 - -## 2.3.6\. 层次聚类 - -Hierarchical clustering 是一个常用的聚类算法,它通过不断的合并或者分割来构建聚类。 聚类的层次被表示成树(或者 dendrogram(树形图))。树根是拥有所有样本的唯一聚类,叶子是仅有一个样本的聚类。 请参照 [Wikipedia page](https://en.wikipedia.org/wiki/Hierarchical_clustering) 查看更多细节。 - -The [`AgglomerativeClustering`](generated/sklearn.cluster.AgglomerativeClustering.html#sklearn.cluster.AgglomerativeClustering "sklearn.cluster.AgglomerativeClustering") 使用自下而上的方法进行层次聚类:开始是每一个对象是一个聚类, 并且聚类别相继合并在一起。 linkage criteria 确定用于合并的策略的度量: - -* **Ward** 最小化所有聚类内的平方差总和。这是一种 variance-minimizing (方差最小化)的优化方向, 这是与k-means 的目标函数相似的优化方法,但是用 agglomerative hierarchical(聚类分层)的方法处理。 -* **Maximum** 或 **complete linkage** 最小化聚类对两个样本之间的最大距离。 -* **Average linkage** 最小化聚类两个聚类中样本距离的平均值。 - -[`AgglomerativeClustering`](generated/sklearn.cluster.AgglomerativeClustering.html#sklearn.cluster.AgglomerativeClustering "sklearn.cluster.AgglomerativeClustering") 在于连接矩阵联合使用时,也可以扩大到大量的样本,但是 在样本之间没有添加连接约束时,计算代价很大:每一个步骤都要考虑所有可能的合并。 - -[`FeatureAgglomeration`](generated/sklearn.cluster.FeatureAgglomeration.html#sklearn.cluster.FeatureAgglomeration "sklearn.cluster.FeatureAgglomeration") - -The [`FeatureAgglomeration`](generated/sklearn.cluster.FeatureAgglomeration.html#sklearn.cluster.FeatureAgglomeration "sklearn.cluster.FeatureAgglomeration") 使用 agglomerative clustering 将看上去相似的 特征组合在一起,从而减少特征的数量。这是一个降维工具, 请参照 [无监督降维](unsupervised_reduction.html#data-reduction)。 - -### 2.3.6.1\. Different linkage type: Ward, complete and average linkage - -[`AgglomerativeClustering`](generated/sklearn.cluster.AgglomerativeClustering.html#sklearn.cluster.AgglomerativeClustering "sklearn.cluster.AgglomerativeClustering") 支持 Ward, average, and complete linkage 策略. - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_digits_linkage_0011.png](img/8dcf0f01f9d255c37e21948ad3821885.jpg)](../auto_examples/cluster/plot_digits_linkage.html) [![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_digits_linkage_0021.png](img/eada6f59eaee0a758bddb97b44835751.jpg)](../auto_examples/cluster/plot_digits_linkage.html) [![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_digits_linkage_0031.png](img/165303a7d56136efa39130cd3cd9539e.jpg)](../auto_examples/cluster/plot_digits_linkage.html) - -Agglomerative cluster 存在 “rich get richer” 现象导致聚类大小不均匀。这方面 complete linkage 是最坏的策略,Ward 给出了最规则的大小。然而,在 Ward 中 affinity (or distance used in clustering) 不能被改变,对于 non Euclidean metrics 来说 average linkage 是一个好的选择。 - -示例: - -* [Various Agglomerative Clustering on a 2D embedding of digits](../auto_examples/cluster/plot_digits_linkage.html#sphx-glr-auto-examples-cluster-plot-digits-linkage-py): exploration of the different linkage strategies in a real dataset. - -### 2.3.6.2\. 添加连接约束 - -[`AgglomerativeClustering`](generated/sklearn.cluster.AgglomerativeClustering.html#sklearn.cluster.AgglomerativeClustering "sklearn.cluster.AgglomerativeClustering") 中一个有趣的特点是可以使用 connectivity matrix(连接矩阵) 将连接约束添加到算法中(只有相邻的聚类可以合并到一起),连接矩阵为每一个样本给定了相邻的样本。 例如,在 swiss-roll 的例子中,连接约束禁止在不相邻的 swiss roll 上合并,从而防止形成在 roll 上 重复折叠的聚类。 - -**[![unstructured](img/63f146cd209ad922f402bf81bfdeb621.jpg)](../auto_examples/cluster/plot_ward_structured_vs_unstructured.html) [![structured](img/50bc02ed6fb21594c72e30d1a33bbf89.jpg)](../auto_examples/cluster/plot_ward_structured_vs_unstructured.html)** - -这些约束对于强加一定的局部结构是很有用的,但是这也使得算法更快,特别是当样本数量巨大时。 - -连通性的限制是通过连接矩阵来实现的:一个 scipy sparse matrix(稀疏矩阵),仅在一行和 一列的交集处具有应该连接在一起的数据集的索引。这个矩阵可以通过 a-priori information (先验信息) 构建:例如,你可能通过仅仅将从一个连接指向另一个的链接合并页面来聚类页面。也可以从数据中学习到, - -> 例如使用 [`sklearn.neighbors.kneighbors_graph`](generated/sklearn.neighbors.kneighbors_graph.html#sklearn.neighbors.kneighbors_graph "sklearn.neighbors.kneighbors_graph") 限制与最临近的合并 :ref:[`](#id13)this example - -```py -`, 或者使用 -``` - -[`sklearn.feature_extraction.image.grid_to_graph`](generated/sklearn.feature_extraction.image.grid_to_graph.html#sklearn.feature_extraction.image.grid_to_graph "sklearn.feature_extraction.image.grid_to_graph") 仅合并图像上相邻的像素点, 例如 [raccoon face](../auto_examples/cluster/plot_face_ward_segmentation.html#sphx-glr-auto-examples-cluster-plot-face-ward-segmentation-py) 。 - -示例: - -* [A demo of structured Ward hierarchical clustering on a raccoon face image](../auto_examples/cluster/plot_face_ward_segmentation.html#sphx-glr-auto-examples-cluster-plot-face-ward-segmentation-py): Ward clustering to split the image of a raccoon face in regions. -* [Hierarchical clustering: structured vs unstructured ward](../auto_examples/cluster/plot_ward_structured_vs_unstructured.html#sphx-glr-auto-examples-cluster-plot-ward-structured-vs-unstructured-py): Example of Ward algorithm on a swiss-roll, comparison of structured approaches versus unstructured approaches. -* [Feature agglomeration vs. univariate selection](../auto_examples/cluster/plot_feature_agglomeration_vs_univariate_selection.html#sphx-glr-auto-examples-cluster-plot-feature-agglomeration-vs-univariate-selection-py): Example of dimensionality reduction with feature agglomeration based on Ward hierarchical clustering. -* [Agglomerative clustering with and without structure](../auto_examples/cluster/plot_agglomerative_clustering.html#sphx-glr-auto-examples-cluster-plot-agglomerative-clustering-py) - -Warning - -**Connectivity constraints with average and complete linkage** - -Connectivity constraints 和 complete or average linkage 可以增强 agglomerative clustering 中的 ‘rich getting richer’ 现象。特别是,如果建立的是 [`sklearn.neighbors.kneighbors_graph`](generated/sklearn.neighbors.kneighbors_graph.html#sklearn.neighbors.kneighbors_graph "sklearn.neighbors.kneighbors_graph")。 在少量聚类的限制中, 更倾向于给出一些 macroscopically occupied clusters 并且几乎是空的 (讨论内容请查看 [Agglomerative clustering with and without structure](../auto_examples/cluster/plot_agglomerative_clustering.html#sphx-glr-auto-examples-cluster-plot-agglomerative-clustering-py))。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_agglomerative_clustering_0011.png](img/1ce6ae6c075734e41812dc91b67d16e5.jpg)](../auto_examples/cluster/plot_agglomerative_clustering.html) [![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_agglomerative_clustering_0021.png](img/59420186f988199ba986eefc023fb637.jpg)](../auto_examples/cluster/plot_agglomerative_clustering.html) [![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_agglomerative_clustering_0031.png](img/1fc92e9d8efa5433f7346284592e9ea0.jpg)](../auto_examples/cluster/plot_agglomerative_clustering.html) [![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_agglomerative_clustering_0041.png](img/d61124c62424b8a8d38adc3c41bb71f6.jpg)](../auto_examples/cluster/plot_agglomerative_clustering.html) - -### 2.3.6.3\. Varying the metric - -Average and complete linkage 可以使用各种距离 (or affinities), 特别是 Euclidean distance (_l2_), Manhattan distance(曼哈顿距离)(or Cityblock(城市区块距离), or _l1_), cosine distance(余弦距离), - -> 或者任何预先计算的 affinity matrix(亲和度矩阵). - -* _l1_ distance 有利于稀疏特征或者稀疏噪声: 例如很多特征都是0,就想在文本挖掘中使用 rare words 一样。 -* _cosine_ distance 非常有趣因为它对全局放缩是一样的。 - -选择度量标准的方针是使得不同类样本之间距离最大化,并且最小化同类样本之间的距离。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_agglomerative_clustering_metrics_0051.png](img/423f64b70bdfeba3566e0bbcca01c277.jpg)](../auto_examples/cluster/plot_agglomerative_clustering_metrics.html) [![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_agglomerative_clustering_metrics_0061.png](img/5a5de287d8a2c74dd12f86219cc19697.jpg)](../auto_examples/cluster/plot_agglomerative_clustering_metrics.html) [![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_agglomerative_clustering_metrics_0071.png](img/27449ee75d40c9391b04e2ca48c4d83b.jpg)](../auto_examples/cluster/plot_agglomerative_clustering_metrics.html) - -示例: - -* [Agglomerative clustering with different metrics](../auto_examples/cluster/plot_agglomerative_clustering_metrics.html#sphx-glr-auto-examples-cluster-plot-agglomerative-clustering-metrics-py) - -## 2.3.7\. DBSCAN - -The [`DBSCAN`](generated/sklearn.cluster.DBSCAN.html#sklearn.cluster.DBSCAN "sklearn.cluster.DBSCAN") 算法将聚类视为被低密度区域分隔的高密度区域。由于这个相当普遍的观点, DBSCAN发现的聚类可以是任何形状的,与假设聚类是 convex shaped 的 K-means 相反。 DBSCAN 的核心概念是 _core samples_, 是指位于高密度区域的样本。 因此一个聚类是一组核心样本,每个核心样本彼此靠近(通过一定距离度量测量) 和一组接近核心样本的非核心样本(但本身不是核心样本)。算法中的两个参数, `min_samples` 和 `eps`,正式的定义了我们所说的 [*](#id16)dense*(稠密)。较高的 `min_samples` 或者 - -> 较低的 [``](#id18)eps``表示形成聚类所需的较高密度。 - -更正式的,我们定义核心样本是指数据集中的一个样本,存在 `min_samples` 个其他样本在 `eps` 距离范围内,这些样本被定为为核心样本的邻居 _neighbors_ 。这告诉我们核心样本在向量空间稠密的区域。 一个聚类是一个核心样本的集合,可以通过递归来构建,选取一个核心样本,查找它所有的 neighbors (邻居样本) 中的核心样本,然后查找 _their_ (新获取的核心样本)的 neighbors (邻居样本)中的核心样本,递归这个过程。 聚类中还具有一组非核心样本,它们是集群中核心样本的邻居的样本,但本身并不是核心样本。 显然,这些样本位于聚类的边缘。 - -```py -根据定义,任何核心样本都是聚类的一部分,任何不是核心样本并且和任意一个核心样本距离都大于 -``` - -`eps` 的样本将被视为异常值。 - -在下图中,颜色表示聚类成员属性,大圆圈表示算法发现的核心样本。 较小的圈子是仍然是群集的 一部分的非核心样本。 此外,异常值由下面的黑点表示。 - -**[![dbscan_results](img/9997b300f697e018f955724f7106ad09.jpg)](../auto_examples/cluster/plot_dbscan.html)** - -示例: - -* [Demo of DBSCAN clustering algorithm](../auto_examples/cluster/plot_dbscan.html#sphx-glr-auto-examples-cluster-plot-dbscan-py) - -实现 - -DBSCAN 算法是具有确定性的,当以相同的顺序给出相同的数据时总是形成相同的聚类。 然而,当以不同的顺序提供数据时聚类的结果可能不相同。首先,即使核心样本总是被 分配给相同的聚类,这些集群的标签将取决于数据中遇到这些样本的顺序。第二个更重 要的是,非核心样本的聚类可能因数据顺序而有所不同。 当一个非核心样本距离两个核心样本的距离都小于 `eps` 时,就会发生这种情况。 通过三角不等式可知,这两个核心样本距离一定大于 `eps` 或者处于同一个聚类中。 非核心样本将被非配到首先查找到改样本的类别,因此结果将取决于数据的顺序。 - -当前版本使用 ball trees 和 kd-trees 来确定领域,这样避免了计算全部的距离矩阵 (0.14 之前的 scikit-learn 版本计算全部的距离矩阵)。保留使用 custom metrics (自定义指标)的可能性。细节请参照 `NearestNeighbors`。 - -大量样本的内存消耗 - -默认的实现方式并没有充分利用内存,因为在不使用 kd-trees 或者 ball-trees 的情况下构建一个 完整的相似度矩阵(e.g. 使用稀疏矩阵)。这个矩阵将消耗 n^2 个浮点数。 解决这个问题的几种机制: - -* A sparse radius neighborhood graph (稀疏半径邻域图)(其中缺少条目被假定为距离超出eps) 可以以高效的方式预先编译,并且可以使用 `metric='precomputed'` 来运行 dbscan。 - -* 数据可以压缩,当数据中存在准确的重复时,可以删除这些重复的数据,或者使用BIRCH。 任何。然后仅需要使用相对少量的样本来表示大量的点。当训练DBSCAN时,可以提供一个 - - > `sample_weight` 参数。 - -引用: - -* “A Density-Based Algorithm for Discovering Clusters in Large Spatial Databases with Noise” Ester, M., H. P. Kriegel, J. Sander, and X. Xu, In Proceedings of the 2nd International Conference on Knowledge Discovery and Data Mining, Portland, OR, AAAI Press, pp. 226–231\. 1996 - -## 2.3.8\. Birch - -The [`Birch`](generated/sklearn.cluster.Birch.html#sklearn.cluster.Birch "sklearn.cluster.Birch") 为提供的数据构建一颗 Characteristic Feature Tree (CFT,聚类特征树)。 数据实质上是被有损压缩成一组 Characteristic Feature nodes (CF Nodes,聚类特征节点)。 CF Nodes 中有一部分子聚类被称为 Characteristic Feature subclusters (CF Subclusters), 并且这些位于非终端位置的CF Subclusters 可以拥有 CF Nodes 作为孩子节点。 - -CF Subclusters 保存用于聚类的必要信息,防止将整个输入数据保存在内存中。 这些信息包括: - -* Number of samples in a subcluster(子聚类中样本数). -* Linear Sum - A n-dimensional vector holding the sum of all samples(保存所有样本和的n维向量) -* Squared Sum - Sum of the squared L2 norm of all samples(所有样本的L2 norm的平方和). -* Centroids - To avoid recalculation linear sum / n_samples(为了防止重复计算 linear sum / n_samples). -* Squared norm of the centroids(质心的 Squared norm ). - -Birch 算法有两个参数,即 threshold (阈值)和 branching factor 分支因子。Branching factor (分支因子) 限制了一个节点中的子集群的数量 ,threshold (簇半径阈值)限制了新加入的样本和存在与现有子集群中样本的最大距离。 - -该算法可以视为将一个实例或者数据简化的方法,因为它将输入的数据简化到可以直接从CFT的叶子结点中获取的一组子聚类。 这种简化的数据可以通过将其馈送到global clusterer(全局聚类)来进一步处理。Global clusterer(全局聚类)可以 通过 [``](#id21)n_clusters``来设置。 - -如果 `n_clusters` 被设置为 None,将直接读取叶子结点中的子聚类,否则,global clustering(全局聚类) 将逐步标记他的 subclusters 到 global clusters (labels) 中,样本将被映射到 距离最近的子聚类的global label中。 - -**算法描述:** - -* 一个新的样本作为一个CF Node 被插入到 CF Tree 的根节点。然后将其合并到根节点的子聚类中去,使得合并后子聚类 拥有最小的半径,子聚类的选取受 threshold 和 branching factor 的约束。如果子聚类也拥有孩子节点,则重复执 行这个步骤直到到达叶子结点。在叶子结点中找到最近的子聚类以后,递归的更新这个子聚类及其父聚类的属性。 -* 如果合并了新样本和最近的子聚类获得的子聚类半径大约square of the threshold(阈值的平方), 并且子聚类的数量大于branching factor(分支因子),则将为这个样本分配一个临时空间。 最远的两个子聚类被选取,剩下的子聚类按照之间的距离分为两组作为被选取的两个子聚类的孩子节点。 -* If this split node has a parent subcluster and there is room for a new subcluster, then the parent is split into two. If there is no room, then this node is again split into two and the process is continued recursively, till it reaches the root. 如果拆分的节点有一个 parent subcluster ,并且有一个容纳一个新的子聚类的空间,那么父聚类拆分成两个。 如果没有空间容纳一个新的聚类,那么这个节点将被再次拆分,依次向上检查父节点是否需要分裂, 如果需要按叶子节点方式相同分裂。 - -**Birch or MiniBatchKMeans?** - -> * Birch 在高维数据上表现不好。一条经验法则,如果 `n_features` 大于20,通常使用 MiniBatchKMeans 更好。 -> * 如果需要减少数据实例的数量,或者如果需要大量的子聚类作为预处理步骤或者其他, Birch 比 MiniBatchKMeans 更有用。 - -**How to use partial_fit?** - -为了避免对 global clustering 的计算,每次调用建议使用 `partial_fit` 。 - -> 1. 初始化 `n_clusters=None` 。 -> 2. 通过多次调用 partial_fit 训练所以的数据。 -> 3. 设置 `n_clusters` 为所需值,通过使用 `brc.set_params(n_clusters=n_clusters)` 。 -> 4. 最后不需要参数调用 `partial_fit` , 例如 `brc.partial_fit()` 执行全局聚类。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_birch_vs_minibatchkmeans_0011.png](img/d9ac7cfff134bd66e853020e32d76f5c.jpg)](../auto_examples/cluster/plot_birch_vs_minibatchkmeans.html) - -参考: - -* Tian Zhang, Raghu Ramakrishnan, Maron Livny BIRCH: An efficient data clustering method for large databases. [http://www.cs.sfu.ca/CourseCentral/459/han/papers/zhang96.pdf](http://www.cs.sfu.ca/CourseCentral/459/han/papers/zhang96.pdf) -* Roberto Perdisci JBirch - Java implementation of BIRCH clustering algorithm [https://code.google.com/archive/p/jbirch](https://code.google.com/archive/p/jbirch) - -## 2.3.9\. 聚类性能度量 - -度量聚类算法的性能不是简单的统计错误的数量或计算监督分类算法中的 precision (准确率)和 recall (召回率)。 特别地,任何 evaluation metric (度量指标)不应该考虑到 cluster labels (簇标签)的绝对值,而是如果这个簇定义类似于某些 ground truth set of classes 或者满足某些假设,使得属于同一个类的成员更类似于根据某些 similarity metric (相似性度量)的不同类的成员。 - -### 2.3.9.1\. 调整后的 Rand 指数 - -考虑到 the ground truth class 赋值 `labels_true` 和相同样本 `labels_pred` 的聚类算法分配的知识,**adjusted Rand index** 是一个函数,用于测量两个 assignments (任务)的 **similarity(相似度)** ,忽略 permutations (排列)和 **with chance normalization(使用机会规范化)**: - -```py ->>> from sklearn import metrics ->>> labels_true = [0, 0, 0, 1, 1, 1] ->>> labels_pred = [0, 0, 1, 1, 2, 2] - ->>> metrics.adjusted_rand_score(labels_true, labels_pred) -0.24... - -``` - -可以在预测的标签中 permute (排列) 0 和 1,重命名为 2 到 3, 得到相同的分数: - -```py ->>> labels_pred = [1, 1, 0, 0, 3, 3] ->>> metrics.adjusted_rand_score(labels_true, labels_pred) -0.24... - -``` - -另外, [`adjusted_rand_score`](generated/sklearn.metrics.adjusted_rand_score.html#sklearn.metrics.adjusted_rand_score "sklearn.metrics.adjusted_rand_score") 是 **symmetric(对称的)** : 交换参数不会改变 score (得分)。它可以作为 **consensus measure(共识度量)**: - -```py ->>> metrics.adjusted_rand_score(labels_pred, labels_true) -0.24... - -``` - -完美的标签得分为 1.0 - -```py ->>> labels_pred = labels_true[:] ->>> metrics.adjusted_rand_score(labels_true, labels_pred) -1.0 - -``` - -坏 (e.g. independent labelings(独立标签)) 有负数 或 接近于 0.0 分: - -```py ->>> labels_true = [0, 1, 2, 0, 3, 4, 5, 1] ->>> labels_pred = [1, 1, 0, 0, 2, 2, 2, 2] ->>> metrics.adjusted_rand_score(labels_true, labels_pred) --0.12... - -``` - -#### 2.3.9.1.1\. 优点 - -* **Random (uniform) label assignments have a ARI score close to 0.0(随机(统一)标签分配的 ARI 评分接近于 0.0)** 对于 `n_clusters` 和 `n_samples` 的任何值(这不是原始的 Rand index 或者 V-measure 的情况)。 -* **Bounded range(范围是有界的) [-1, 1]**: negative values (负值)是坏的 (独立性标签), 类似的聚类有一个 positive ARI (正的 ARI), 1.0 是完美的匹配得分。 -* **No assumption is made on the cluster structure(对簇的结构不需作出任何假设)**: 可以用于比较聚类算法,例如 k-means,其假定 isotropic blob shapes 与可以找到具有 “folded” shapes 的聚类的 spectral clustering algorithms(谱聚类算法)的结果。 - -#### 2.3.9.1.2\. 缺点 - -* 与 inertia 相反,**ARI requires knowledge of the ground truth classes(ARI 需要 ground truth classes 的相关知识)** ,而在实践中几乎不可用,或者需要人工标注者手动分配(如在监督学习环境中)。 - - 然而,ARI 还可以在 purely unsupervised setting (纯粹无监督的设置中)作为可用于 聚类模型选择(TODO)的共识索引的构建块。 - -示例: - -* [Adjustment for chance in clustering performance evaluation](../auto_examples/cluster/plot_adjusted_for_chance_measures.html#sphx-glr-auto-examples-cluster-plot-adjusted-for-chance-measures-py): 分析数据集大小对随机分配聚类度量值的影响。 - -#### 2.3.9.1.3\. 数学表达 - -如果 C 是一个 ground truth class assignment(任务), K 是簇的个数,我们定义 ![a](img/578c95150175e4efdf851fe66d503079.jpg) 和 ![b](img/6ae91fb0f3221b92d2dd4e22204d8008.jpg) 如: - -* ![a](img/578c95150175e4efdf851fe66d503079.jpg), 在 C 中的相同集合的与 K 中的相同集合中的元素的对数 -* ![b](img/6ae91fb0f3221b92d2dd4e22204d8008.jpg), 在 C 中的不同集合与 K 中的不同集合中的元素的对数 - -原始(未经调整)的 Rand index 则由下式给出: - -![\text{RI} = \frac{a + b}{C_2^{n_{samples}}}](img/070018458bf56c0d94293de45828e878.jpg) - -其中 ![C_2^{n_{samples}}](img/0ce3ae4e9a8bbd17b08f5fae78d60f21.jpg) 是数据集中可能的 pairs (数据对)的总数(不排序)。 - -然而,RI 评分不能保证 random label assignments (随机标签任务)将获得接近零的值(特别是如果簇的数量与采样数量相同的数量级)。 - -为了抵消这种影响,我们可以通过定义 adjusted Rand index (调整后的 Rand index)来 discount(折现) 随机标签的预期 RI ![E[\text{RI}]](img/7881dd425f1090aadc25eca46dc0daec.jpg) ,如下所示: - -![\text{ARI} = \frac{\text{RI} - E[\text{RI}]}{\max(\text{RI}) - E[\text{RI}]}](img/8f4f76678eb50ebccaba25e86961ff3e.jpg) - -参考 - -* [Comparing Partitions](http://link.springer.com/article/10.1007%2FBF01908075) L. Hubert and P. Arabie, Journal of Classification 1985 -* [Wikipedia entry for the adjusted Rand index](https://en.wikipedia.org/wiki/Rand_index#Adjusted_Rand_index) - -### 2.3.9.2\. 基于 Mutual Information (互信息)的分数 - -考虑到 ground truth class assignments (标定过的真实数据类分配) `labels_true` 的知识和相同样本 `labels_pred` 的聚类算法分配, **Mutual Information** 是测量两者 **agreement** 分配的函数,忽略 permutations(排列)。 这种测量方案的两个不同的标准化版本可用,**Normalized Mutual Information(NMI)** 和 **Adjusted Mutual Information(AMI)**。NMI 经常在文献中使用,而 AMI 最近被提出,并且 **normalized against chance**: - -```py ->>> from sklearn import metrics ->>> labels_true = [0, 0, 0, 1, 1, 1] ->>> labels_pred = [0, 0, 1, 1, 2, 2] - ->>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) -0.22504... - -``` - -可以在 predicted labels (预测的标签)中 permute (排列) 0 和 1, 重命名为 2 到 3 并得到相同的得分: - -```py ->>> labels_pred = [1, 1, 0, 0, 3, 3] ->>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) -0.22504... - -``` - -全部的,[`mutual_info_score`](generated/sklearn.metrics.mutual_info_score.html#sklearn.metrics.mutual_info_score "sklearn.metrics.mutual_info_score"), [`adjusted_mutual_info_score`](generated/sklearn.metrics.adjusted_mutual_info_score.html#sklearn.metrics.adjusted_mutual_info_score "sklearn.metrics.adjusted_mutual_info_score") 和 [`normalized_mutual_info_score`](generated/sklearn.metrics.normalized_mutual_info_score.html#sklearn.metrics.normalized_mutual_info_score "sklearn.metrics.normalized_mutual_info_score") 是 symmetric(对称的): 交换参数不会更改分数。因此,它们可以用作 **consensus measure**: - -```py ->>> metrics.adjusted_mutual_info_score(labels_pred, labels_true) -0.22504... - -``` - -完美标签得分是 1.0: - -```py ->>> labels_pred = labels_true[:] ->>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) -1.0 - ->>> metrics.normalized_mutual_info_score(labels_true, labels_pred) -1.0 - -``` - -这对于 `mutual_info_score` 是不正确的,因此更难判断: - -```py ->>> metrics.mutual_info_score(labels_true, labels_pred) -0.69... - -``` - -坏的 (例如 independent labelings(独立标签)) 具有非正分数: - -```py ->>> labels_true = [0, 1, 2, 0, 3, 4, 5, 1] ->>> labels_pred = [1, 1, 0, 0, 2, 2, 2, 2] ->>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) --0.10526... - -``` - -#### 2.3.9.2.1\. 优点 - -* **Random (uniform) label assignments have a AMI score close to 0.0(随机(统一)标签分配的AMI评分接近0.0)** 对于 `n_clusters` 和 `n_samples` 的任何值(这不是原始 Mutual Information 或者 V-measure 的情况)。 -* **Bounded range(有界范围) [0, 1]**: 接近 0 的值表示两个主要独立的标签分配,而接近 1 的值表示重要的一致性。此外,正好 0 的值表示 **purely(纯粹)** 独立标签分配,正好为 1 的 AMI 表示两个标签分配相等(有或者没有 permutation)。 -* **No assumption is made on the cluster structure(对簇的结构没有作出任何假设)**: 可以用于比较聚类算法,例如 k-means,其假定 isotropic blob shapes 与可以找到具有 “folded” shapes 的聚类的 spectral clustering algorithms (频谱聚类算法)的结果。 - -#### 2.3.9.2.2\. 缺点 - -* 与 inertia 相反,**MI-based measures require the knowledge of the ground truth classes(MI-based measures 需要了解 ground truth classes)** ,而在实践中几乎不可用,或者需要人工标注或手动分配(如在监督学习环境中)。 - - 然而,基于 MI-based measures (基于 MI 的测量方式)也可用于纯无人监控的设置,作为可用于聚类模型选择的 Consensus Index (共识索引)的构建块。 - -* NMI 和 MI 没有调整机会。 - -示例: - -* [Adjustment for chance in clustering performance evaluation](../auto_examples/cluster/plot_adjusted_for_chance_measures.html#sphx-glr-auto-examples-cluster-plot-adjusted-for-chance-measures-py): 分析数据集大小对随机分配聚类度量值的影响。 此示例还包括 Adjusted Rand Index。 - -#### 2.3.9.2.3\. 数学公式 - -假设两个标签分配(相同的 N 个对象),![U](img/11c00539ec3e5944afd76511830591db.jpg) 和 ![V](img/5303ecbc70bf5189b8785555c03c54ee.jpg)。 它们的 entropy (熵)是一个 partition set (分区集合)的不确定性量,定义如下: - -![H(U) = - \sum_{i=1}^{|U|}P(i)\log(P(i))](img/07610ee9d3a524eb0a3fb7ae409614c1.jpg) - -其中 ![P(i) = |U_i| / N](img/18906a7fe0c5d78e0a291e472ded58ce.jpg) 是从 ![U](img/11c00539ec3e5944afd76511830591db.jpg) 中随机选取的对象到类 ![U_i](img/59100a001bb4b110e00f7ddf1354cd5b.jpg) 的概率。同样对于 ![V](img/5303ecbc70bf5189b8785555c03c54ee.jpg): - -![H(V) = - \sum_{j=1}^{|V|}P'(j)\log(P'(j))](img/b4e752f6314fe52f8c066964d26145a8.jpg) - -使用 ![P'(j) = |V_j| / N](img/e270fdc1fb7cabab295d31d189d77258.jpg). ![U](img/11c00539ec3e5944afd76511830591db.jpg) 和 ![V](img/5303ecbc70bf5189b8785555c03c54ee.jpg) 之间的 mutual information (MI) 由下式计算: - -![\text{MI}(U, V) = \sum_{i=1}^{|U|}\sum_{j=1}^{|V|}P(i, j)\log\left(\frac{P(i,j)}{P(i)P'(j)}\right)](img/352bc5f9f9d6aefcdaf8deca4f7964ff.jpg) - -其中 ![P(i, j) = |U_i \cap V_j| / N](img/b67ce2997477f658a6a39026c01e07c4.jpg) 是随机选择的对象落入两个类的概率 ![U_i](img/59100a001bb4b110e00f7ddf1354cd5b.jpg) 和 ![V_j](img/22f3a10ad9acceb77ea6193f945b11cf.jpg) 。 - -也可以用设定的基数表达式表示: - -![\text{MI}(U, V) = \sum_{i=1}^{|U|} \sum_{j=1}^{|V|} \frac{|U_i \cap V_j|}{N}\log\left(\frac{N|U_i \cap V_j|}{|U_i||V_j|}\right)](img/170bd587959dabf132e4e0f39fa0a7b7.jpg) - -normalized (归一化) mutual information 被定义为 - -![\text{NMI}(U, V) = \frac{\text{MI}(U, V)}{\sqrt{H(U)H(V)}}](img/7695a05e60c9dc0ec13f779fc19da966.jpg) - -mutual information 的价值以及 normalized variant (标准化变量)的值不会因 chance (机会)而被调整,随着不同标签(clusters(簇))的数量的增加,不管标签分配之间的 “mutual information” 的实际数量如何,都会趋向于增加。 - -mutual information 的期望值可以用 Vinh, Epps 和 Bailey,(2009) 的以下公式来计算。在这个方程式中, ![a_i = |U_i|](img/f3893160388ee4203c313659d729cef0.jpg) (![U_i](img/59100a001bb4b110e00f7ddf1354cd5b.jpg) 中元素的数量) 和 ![b_j = |V_j|](img/e2bd3aaa1586d4d17301f7fe016eefd7.jpg) (![V_j](img/22f3a10ad9acceb77ea6193f945b11cf.jpg) 中元素的数量). - - -![E[\text{MI}(U,V)]=\sum_{i=1}^|U| \sum_{j=1}^|V| \sum_{n_{ij}=(a_i+b_j-N)^+ -}^{\min(a_i, b_j)} \frac{n_{ij}}{N}\log \left( \frac{ N.n_{ij}}{a_i b_j}\right) -\frac{a_i!b_j!(N-a_i)!(N-b_j)!}{N!n_{ij}!(a_i-n_{ij})!(b_j-n_{ij})! -(N-a_i-b_j+n_{ij})!}](img/942734d190e4b1d2c51b0e2ee6c24428.jpg) - - -使用期望值, 然后可以使用与 adjusted Rand index 相似的形式来计算调整后的 mutual information: - -![\text{AMI} = \frac{\text{MI} - E[\text{MI}]}{\max(H(U), H(V)) - E[\text{MI}]}](img/17689bafe240fb42feab1cca674b5b88.jpg) - -参考 - -* Strehl, Alexander, and Joydeep Ghosh (2002). “Cluster ensembles – a knowledge reuse framework for combining multiple partitions”. Journal of Machine Learning Research 3: 583–617. [doi:10.1162/153244303321897735](http://strehl.com/download/strehl-jmlr02.pdf). -* Vinh, Epps, and Bailey, (2009). “Information theoretic measures for clusterings comparison”. Proceedings of the 26th Annual International Conference on Machine Learning - ICML ‘09. [doi:10.1145/1553374.1553511](https://dl.acm.org/citation.cfm?doid=1553374.1553511). ISBN 9781605585161. -* Vinh, Epps, and Bailey, (2010). Information Theoretic Measures for Clusterings Comparison: Variants, Properties, Normalization and Correction for Chance, JMLR [http://jmlr.csail.mit.edu/papers/volume11/vinh10a/vinh10a.pdf](http://jmlr.csail.mit.edu/papers/volume11/vinh10a/vinh10a.pdf) -* [Wikipedia entry for the (normalized) Mutual Information](https://en.wikipedia.org/wiki/Mutual_Information) -* [Wikipedia entry for the Adjusted Mutual Information](https://en.wikipedia.org/wiki/Adjusted_Mutual_Information) - -### 2.3.9.3\. 同质性,完整性和 V-measure - -鉴于样本的 ground truth class assignments (标定过的真实数据类分配)的知识,可以使用 conditional entropy (条件熵)分析来定义一些 intuitive metric(直观的度量)。 - -特别是 Rosenberg 和 Hirschberg (2007) 为任何 cluster (簇)分配定义了以下两个理想的目标: - -* **homogeneity(同质性)**: 每个簇只包含一个类的成员 -* **completeness(完整性)**: 给定类的所有成员都分配给同一个簇。 - -我们可以把这些概念作为分数 [`homogeneity_score`](generated/sklearn.metrics.homogeneity_score.html#sklearn.metrics.homogeneity_score "sklearn.metrics.homogeneity_score") 和 [`completeness_score`](generated/sklearn.metrics.completeness_score.html#sklearn.metrics.completeness_score "sklearn.metrics.completeness_score") 。两者均在 0.0 以下 和 1.0 以上(越高越好): - -```py ->>> from sklearn import metrics ->>> labels_true = [0, 0, 0, 1, 1, 1] ->>> labels_pred = [0, 0, 1, 1, 2, 2] - ->>> metrics.homogeneity_score(labels_true, labels_pred) -0.66... - ->>> metrics.completeness_score(labels_true, labels_pred) -0.42... - -``` - -称为 **V-measure** 的 harmonic mean 由以下函数计算 [`v_measure_score`](generated/sklearn.metrics.v_measure_score.html#sklearn.metrics.v_measure_score "sklearn.metrics.v_measure_score"): - -```py ->>> metrics.v_measure_score(labels_true, labels_pred) -0.51... - -``` - -V-measure 实际上等于上面讨论的 mutual information (NMI) 由 label entropies [[B2011]](#b2011) (标准熵 [[B2011]](#b2011)) 的总和 normalized (归一化)。 - -Homogeneity(同质性), completeness(完整性) and V-measure 可以立即计算 [`homogeneity_completeness_v_measure`](generated/sklearn.metrics.homogeneity_completeness_v_measure.html#sklearn.metrics.homogeneity_completeness_v_measure "sklearn.metrics.homogeneity_completeness_v_measure") 如下: - -```py ->>> metrics.homogeneity_completeness_v_measure(labels_true, labels_pred) -... -(0.66..., 0.42..., 0.51...) - -``` - -以下聚类分配稍微好一些,因为它是同构但不完整的: - -```py ->>> labels_pred = [0, 0, 0, 1, 2, 2] ->>> metrics.homogeneity_completeness_v_measure(labels_true, labels_pred) -... -(1.0, 0.68..., 0.81...) - -``` - -Note - -[`v_measure_score`](generated/sklearn.metrics.v_measure_score.html#sklearn.metrics.v_measure_score "sklearn.metrics.v_measure_score") 是 **symmetric(对称的)**: 它可以用于评估同一数据集上两个 independent assignments (独立赋值)的 **agreement(协议)**。 - -这不是这样的 [`completeness_score`](generated/sklearn.metrics.completeness_score.html#sklearn.metrics.completeness_score "sklearn.metrics.completeness_score") 和 [`homogeneity_score`](generated/sklearn.metrics.homogeneity_score.html#sklearn.metrics.homogeneity_score "sklearn.metrics.homogeneity_score"): 两者的关系是被这样约束着: - -```py -homogeneity_score(a, b) == completeness_score(b, a) - -``` - -#### 2.3.9.3.1\. 优点 - -* **Bounded scores(分数是有界的)**: 0.0 是最坏的, 1.0 是一个完美的分数. -* Intuitive interpretation(直观解释): 具有不良 V-measure 的聚类可以在 **qualitatively analyzed in terms of homogeneity and completeness(在同质性和完整性方面进行定性分析)** 以更好地感知到作业完成的错误类型。 -* **No assumption is made on the cluster structure(对簇的结构没有作出任何假设)**: 可以用于比较聚类算法,例如 k-means ,其假定 isotropic blob shapes 与可以找到具有 “folded” shapes 的聚类的 spectral clustering algorithms (频谱聚类算法)的结果。 - -#### 2.3.9.3.2\. 缺点 - -* 以前引入的 metrics (度量标准)**not normalized with regards to random labeling(并不是随机标记的标准化的)**: 这意味着,根据 number of samples (样本数量),clusters (簇)和 ground truth classes (标定过的真实数据类),完全随机的标签并不总是产生 homogeneity (同质性),completeness(完整性)和 hence v-measure 的相同值。特别是 **random labeling won’t yield zero scores especially when the number of clusters is large(随机标记不会产生零分,特别是当集群数量大时)**。 - - 当样本数量超过 1000,簇的数量小于 10 时,可以安全地忽略此问题。**For smaller sample sizes or larger number of clusters it is safer to use an adjusted index such as the Adjusted Rand Index (ARI)(对于较小的样本数量或者较大数量的簇,使用 adjusted index 例如 Adjusted Rand Index (ARI))**。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_adjusted_for_chance_measures_0011.png](img/77e9cd089beb314666ac8397f95afc0a.jpg)](../auto_examples/cluster/plot_adjusted_for_chance_measures.html) - -* 这些 metrics (指标) **require the knowledge of the ground truth classes(需要标定过的真实数据类的知识)**,而在实践中几乎不可用,或需要人工标注来人工分配(如在受监督的学习环境中)。 - -示例: - -* [Adjustment for chance in clustering performance evaluation](../auto_examples/cluster/plot_adjusted_for_chance_measures.html#sphx-glr-auto-examples-cluster-plot-adjusted-for-chance-measures-py): 分析数据集大小对随机分配聚类度量值的影响。 - -#### 2.3.9.3.3\. 数学表达 - -Homogeneity(同质性) 和 completeness(完整性) 的得分由下面公式给出: - -![h = 1 - \frac{H(C|K)}{H(C)}](img/148aed7690723555d32f36019c3d6948.jpg) - -![c = 1 - \frac{H(K|C)}{H(K)}](img/b714492d7f23932738745c4ed05fe7ae.jpg) - -其中 ![H(C|K)](img/c9f28da3986a32d6c1421f357d52b9fa.jpg) 是 **给定簇分配的类的 conditional entropy (条件熵)** ,由下式给出: - - -![H(C|K) = - \sum_{c=1}^{|C|} \sum_{k=1}^{|K|} \frac{n_{c,k}}{n} -\cdot \log\left(\frac{n_{c,k}}{n_k}\right)](img/e18ade3134bef595ea6ddf488ff9557a.jpg) - - -并且 ![H(C)](img/be4190a760361bd7ae65c77218465778.jpg) 是 **entropy of the classes(类的熵)**,并且由下式给出: - -![H(C) = - \sum_{c=1}^{|C|} \frac{n_c}{n} \cdot \log\left(\frac{n_c}{n}\right)](img/8c43dd6816e66709ef3f9d681ec3941a.jpg) - -![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) 个样本总数, ![n_c](img/21e9f42c5b6730d593e37a11c6ffb13a.jpg) 和 ![n_k](img/6042b714de932f6ed841e71bfe9acede.jpg) 分别属于 ![c](img/d5c9a11453ea30a1be50a1034052bd6b.jpg) 类和簇 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 的样本数,最后 ![n_{c,k}](img/0acf1512409eb0a9a90102698304fd52.jpg) 分配给簇 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 的类 ![c](img/d5c9a11453ea30a1be50a1034052bd6b.jpg) 的样本数。 - -**conditional entropy of clusters given class(给定类的条件熵)** ![H(K|C)](img/05588cdc4e82289930a92b0097f67d2d.jpg) 和 **entropy of clusters(类的熵)** ![H(K)](img/5062c88fba7988fa39aca3bc91857721.jpg) 以 symmetric manner (对称方式)定义。 - -Rosenberg 和 Hirschberg 进一步定义 **V-measure** 作为 **harmonic mean of homogeneity and completeness(同质性和完整性的 harmonic mean)**: - -![v = 2 \cdot \frac{h \cdot c}{h + c}](img/611639bdcfd73c857a43842913d6e826.jpg) - -参考 - -* [V-Measure: A conditional entropy-based external cluster evaluation measure](http://aclweb.org/anthology/D/D07/D07-1043.pdf) Andrew Rosenberg and Julia Hirschberg, 2007 - -| [B2011] | _([1](#id30), [2](#id31))_ [Identication and Characterization of Events in Social Media](http://www.cs.columbia.edu/~hila/hila-thesis-distributed.pdf), Hila Becker, PhD Thesis. | - -### 2.3.9.4\. Fowlkes-Mallows 分数 - -当样本的已标定的真实数据的类别分配已知时,可以使用 Fowlkes-Mallows index (Fowlkes-Mallows 指数)([`sklearn.metrics.fowlkes_mallows_score`](generated/sklearn.metrics.fowlkes_mallows_score.html#sklearn.metrics.fowlkes_mallows_score "sklearn.metrics.fowlkes_mallows_score")) 。Fowlkes-Mallows 分数 FMI 被定义为 geometric mean of the pairwise precision (成对的准确率)和 recall (召回率)的几何平均值: - -![\text{FMI} = \frac{\text{TP}}{\sqrt{(\text{TP} + \text{FP}) (\text{TP} + \text{FN})}}](img/403595258114953d3411fd1bfbf335f8.jpg) - -其中的 `TP` 是 **True Positive(真正例)** 的数量(即,真实标签和预测标签中属于相同簇的点对数),`FP` 是 **False Positive(假正例)** (即,在真实标签中属于同一簇的点对数,而不在预测标签中),`FN` 是 **False Negative(假负例)** 的数量(即,预测标签中属于同一簇的点对数,而不在真实标签中)。 - -score (分数)范围为 0 到 1。较高的值表示两个簇之间的良好相似性。 - -```py ->>> from sklearn import metrics ->>> labels_true = [0, 0, 0, 1, 1, 1] ->>> labels_pred = [0, 0, 1, 1, 2, 2] - -``` - -```py ->>> metrics.fowlkes_mallows_score(labels_true, labels_pred) -0.47140... - -``` - -可以在 predicted labels (预测的标签)中 permute (排列) 0 和 1 ,重命名为 2 到 3 并得到相同的得分: - -```py ->>> labels_pred = [1, 1, 0, 0, 3, 3] - ->>> metrics.fowlkes_mallows_score(labels_true, labels_pred) -0.47140... - -``` - -完美的标签得分是 1.0: - -```py ->>> labels_pred = labels_true[:] ->>> metrics.fowlkes_mallows_score(labels_true, labels_pred) -1.0 - -``` - -坏的(例如 independent labelings (独立标签))的标签得分为 0: - -```py ->>> labels_true = [0, 1, 2, 0, 3, 4, 5, 1] ->>> labels_pred = [1, 1, 0, 0, 2, 2, 2, 2] ->>> metrics.fowlkes_mallows_score(labels_true, labels_pred) -0.0 - -``` - -#### 2.3.9.4.1\. 优点 - -* **Random (uniform) label assignments have a FMI score close to 0.0(随机(统一)标签分配 FMI 得分接近于 0.0)** 对于 `n_clusters` 和 `n_samples` 的任何值(对于原始 Mutual Information 或例如 V-measure 而言)。 -* **Bounded range(有界范围) [0, 1]**: 接近于 0 的值表示两个标签分配在很大程度上是独立的,而接近于 1 的值表示 significant agreement 。此外,正好为 0 的值表示 **purely** 独立标签分配,正好为 1 的 AMI 表示两个标签分配相等(有或者没有 permutation (排列))。 -* **No assumption is made on the cluster structure(对簇的结构没有作出任何假设)**: 可以用于比较诸如 k-means 的聚类算法,其将假设 isotropic blob shapes 与能够找到具有 “folded” shapes 的簇的 spectral clustering algorithms (频谱聚类算法)的结果相结合。 - -#### 2.3.9.4.2\. 缺点 - -* 与 inertia(习惯)相反,**FMI-based measures require the knowledge of the ground truth classes(基于 FMI 的测量方案需要了解已标注的真是数据的类)** ,而几乎不用于实践和需要人工标注者的手动任务(如在监督学习的学习环境中)。 - -参考 - -* E. B. Fowkles and C. L. Mallows, 1983\. “A method for comparing two hierarchical clusterings”. Journal of the American Statistical Association. [http://wildfire.stat.ucla.edu/pdflibrary/fowlkes.pdf](http://wildfire.stat.ucla.edu/pdflibrary/fowlkes.pdf) -* [Wikipedia entry for the Fowlkes-Mallows Index](https://en.wikipedia.org/wiki/Fowlkes-Mallows_index) - -### 2.3.9.5\. Silhouette 系数 - -如果标注过的真实数据的标签不知道,则必须使用模型本身进行度量。Silhouette Coefficient ([`sklearn.metrics.silhouette_score`](generated/sklearn.metrics.silhouette_score.html#sklearn.metrics.silhouette_score "sklearn.metrics.silhouette_score")) 是一个这样的评估的例子,其中较高的 Silhouette Coefficient 得分与具有更好定义的聚类的模型相关。Silhouette Coefficient 是为每个样本定义的,由两个得分组成: - -* **a**: 样本与同一类别中所有其他点之间的平均距离。 -* **b**: 样本与 _下一个距离最近的簇_ 中的所有其他点之间的平均距离。 - -然后将单个样本的 Silhouette 系数 _s_ 给出为: - -![s = \frac{b - a}{max(a, b)}](img/8f839ebe5b506fef19bd8cc121b3f557.jpg) - -给定一组样本的 Silhouette 系数作为每个样本的 Silhouette 系数的平均值。 - -```py ->>> from sklearn import metrics ->>> from sklearn.metrics import pairwise_distances ->>> from sklearn import datasets ->>> dataset = datasets.load_iris() ->>> X = dataset.data ->>> y = dataset.target - -``` - -在正常使用情况下,将 Silhouette 系数应用于聚类分析的结果。 - -```py ->>> import numpy as np ->>> from sklearn.cluster import KMeans ->>> kmeans_model = KMeans(n_clusters=3, random_state=1).fit(X) ->>> labels = kmeans_model.labels_ ->>> metrics.silhouette_score(X, labels, metric='euclidean') -... -0.55... - -``` - -参考 - -* Peter J. Rousseeuw (1987). “Silhouettes: a Graphical Aid to the Interpretation and Validation of Cluster Analysis”. Computational and Applied Mathematics 20: 53–65. [doi:10.1016/0377-0427(87)90125-7](http://dx.doi.org/10.1016/0377-0427(87)90125-7). - -#### 2.3.9.5.1\. 优点 - -* 对于不正确的 clustering (聚类),分数为 -1 , highly dense clustering (高密度聚类)为 +1 。零点附近的分数表示 overlapping clusters (重叠的聚类)。 -* 当 clusters (簇)密集且分离较好时,分数更高,这与 cluster (簇)的标准概念有关。 - -#### 2.3.9.5.2\. 缺点 - -* convex clusters(凸的簇)的 Silhouette Coefficient 通常比其他类型的 cluster (簇)更高,例如通过 DBSCAN 获得的基于密度的 cluster(簇)。 - -示例: - -* [Selecting the number of clusters with silhouette analysis on KMeans clustering](../auto_examples/cluster/plot_kmeans_silhouette_analysis.html#sphx-glr-auto-examples-cluster-plot-kmeans-silhouette-analysis-py) : 在这个例子中,silhouette 分析用于为 n_clusters 选择最佳值. - -### 2.3.9.6\. Calinski-Harabaz 指数 - -如果不知道真实数据的类别标签,则可以使用 Calinski-Harabaz 指数 ([`sklearn.metrics.calinski_harabaz_score`](generated/sklearn.metrics.calinski_harabaz_score.html#sklearn.metrics.calinski_harabaz_score "sklearn.metrics.calinski_harabaz_score")) 来评估模型,其中较高的 Calinski-Harabaz 的得分与具有更好定义的聚类的模型相关。 - -对于 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 簇,Calinski-Harabaz 得分 ![s](img/0faa297883831c0432cf4d72960eeb6c.jpg) 是作为 between-clusters dispersion mean (簇间色散平均值)与 within-cluster dispersion(群内色散之间)的比值给出的: - -![s(k) = \frac{\mathrm{Tr}(B_k)}{\mathrm{Tr}(W_k)} \times \frac{N - k}{k - 1}](img/af875bce0483bd18603c4d247e6a3745.jpg) - -其中 ![B_K](img/71581bfc44b992a82bd0bc7a6eee38f4.jpg) 是 between group dispersion matrix (组间色散矩阵), ![W_K](img/9127c3e2b5748eee602354fed5570605.jpg) 是由以下定义的 within-cluster dispersion matrix (群内色散矩阵): - -![W_k = \sum_{q=1}^k \sum_{x \in C_q} (x - c_q) (x - c_q)^T](img/a24e299927ed136dd98d6c87904c973d.jpg) - -![B_k = \sum_q n_q (c_q - c) (c_q - c)^T](img/7e8b544e8ce168b079607ff9674a2c91.jpg) - -![N](img/a44a7c045f2217894a894c482861387a.jpg) 为数据中的点数,![C_q](img/03aa3da890dedc42b04c1df154062257.jpg) 为 cluster (簇) ![q](img/dc074c105944810a277030dfab298376.jpg) 中的点集, ![c_q](img/385a9104b38457eeb59acf86cf974472.jpg) 为 cluster(簇) ![q](img/dc074c105944810a277030dfab298376.jpg) 的中心, ![c](img/d5c9a11453ea30a1be50a1034052bd6b.jpg) 为 ![E](img/5bb034cee5851ab5105aca4c40a4e16e.jpg) 的中心, ![n_q](img/33b99b5c21f0cf5b03e92fe60cbe6ad0.jpg) 为 cluster(簇) ![q](img/dc074c105944810a277030dfab298376.jpg) 中的点数。 - -```py ->>> from sklearn import metrics ->>> from sklearn.metrics import pairwise_distances ->>> from sklearn import datasets ->>> dataset = datasets.load_iris() ->>> X = dataset.data ->>> y = dataset.target - -``` - -在正常使用情况下,将 Calinski-Harabaz index (Calinski-Harabaz 指数)应用于 cluster analysis (聚类分析)的结果。 - -```py ->>> import numpy as np ->>> from sklearn.cluster import KMeans ->>> kmeans_model = KMeans(n_clusters=3, random_state=1).fit(X) ->>> labels = kmeans_model.labels_ ->>> metrics.calinski_harabaz_score(X, labels) -560.39... - -``` - -#### 2.3.9.6.1\. 优点 - -* 当 cluster (簇)密集且分离较好时,分数更高,这与一个标准的 cluster(簇)有关。 -* 得分计算很快 - -#### 2.3.9.6.2\. 缺点 - -* 凸的簇的 Calinski-Harabaz index(Calinski-Harabaz 指数)通常高于其他类型的 cluster(簇),例如通过 DBSCAN 获得的基于密度的 cluster(簇)。 - -参考 - -* Caliński, T., & Harabasz, J. (1974). “A dendrite method for cluster analysis”. Communications in Statistics-theory and Methods 3: 1-27. [doi:10.1080/03610926.2011.560741](http://dx.doi.org/10.1080/03610926.2011.560741). \ No newline at end of file diff --git a/docs/0.19.x/23.md b/docs/0.19.x/23.md deleted file mode 100755 index 0b8d259c6153bda7e4ba397bd519045b66de29b9..0000000000000000000000000000000000000000 --- a/docs/0.19.x/23.md +++ /dev/null @@ -1,165 +0,0 @@ -# 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) 奇异值向量从第二个开始, 提供所需的分区信息。 这些用于形成矩阵 :<cite>Z</cite>: - - -![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<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 diff --git a/docs/0.19.x/24.md b/docs/0.19.x/24.md deleted file mode 100755 index 7bcbd8b6364abfe0fcc838efcc871a997ff26f4a..0000000000000000000000000000000000000000 --- a/docs/0.19.x/24.md +++ /dev/null @@ -1,446 +0,0 @@ -# 2.5\. 分解成分中的信号(矩阵分解问题) - -校验者: -        [@武器大师一个挑俩](https://github.com/apachecn/scikit-learn-doc-zh) -        [@png](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@柠檬](https://github.com/apachecn/scikit-learn-doc-zh) -        [@片刻](https://github.com/apachecn/scikit-learn-doc-zh) - -## 2.5.1\. 主成分分析(PCA) - -### 2.5.1.1\. 准确的PCA和概率解释(Exact PCA and probabilistic interpretation) - -PCA 用于对一组连续正交分量中的多变量数据集进行方差最大方向的分解。 在 scikit-learn 中, [`PCA`](generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA "sklearn.decomposition.PCA") 被实现为一个变换对象, 通过 `fit` 方法可以降维成 <cite>n</cite> 个成分, 并且可以将新的数据投影(project, 亦可理解为分解)到这些成分中。 - -可选参数 `whiten=True` 使得可以将数据投影到奇异(singular)空间上,同时将每个成分缩放到单位方差。 如果下游模型对信号的各向同性作出强烈的假设,这通常是有用的,例如,使用RBF内核的 SVM 算法和 K-Means 聚类算法。 - -以下是iris数据集的一个示例,该数据集包含4个特征, 通过PCA降维后投影到方差最大的二维空间上: - -![https://scikit-learn.org/stable/_images/sphx_glr_plot_pca_vs_lda_001.png:target:../auto_examples/decomposition/plot_pca_vs_lda.html:align:center:scale:75%](../Images/6479476ebd2e5d741f1a712f671fccb6.jpg) - -[`PCA`](generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA "sklearn.decomposition.PCA") 对象还提供了 PCA 的概率解释, 其可以基于其解释的方差量给出数据的可能性。 - -可以通过在交叉验证(cross-validation)中使用 <cite>score</cite> 方法来实现: - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_pca_vs_fa_model_selection_0011.png](img/1c25ce7b0d4e2c7da1f0e73d2565c431.jpg)](../auto_examples/decomposition/plot_pca_vs_fa_model_selection.html) - -例子: - -* [Comparison of LDA and PCA 2D projection of Iris dataset](../auto_examples/decomposition/plot_pca_vs_lda.html#sphx-glr-auto-examples-decomposition-plot-pca-vs-lda-py) -* [Model selection with Probabilistic PCA and Factor Analysis (FA)](../auto_examples/decomposition/plot_pca_vs_fa_model_selection.html#sphx-glr-auto-examples-decomposition-plot-pca-vs-fa-model-selection-py) - -### 2.5.1.2\. 增量PCA (Incremental PCA) - -[`PCA`](generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA "sklearn.decomposition.PCA") 对象非常有用, 但对大型数据集有一定的限制。 最大的限制是 [`PCA`](generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA "sklearn.decomposition.PCA") 仅支持批处理,这意味着所有要处理的数据必须适合主内存。 [`IncrementalPCA`](generated/sklearn.decomposition.IncrementalPCA.html#sklearn.decomposition.IncrementalPCA "sklearn.decomposition.IncrementalPCA") 对象使用不同的处理形式使之允许部分计算, 这一形式几乎和 [`PCA`](generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA "sklearn.decomposition.PCA") 以小型批处理方式处理数据的方法完全匹配。 [`IncrementalPCA`](generated/sklearn.decomposition.IncrementalPCA.html#sklearn.decomposition.IncrementalPCA "sklearn.decomposition.IncrementalPCA") 可以通过以下方式实现核外(out-of-core)主成分分析: - -> * 使用 `partial_fit` 方法从本地硬盘或网络数据库中以此获取数据块。 -> * 通过 `numpy.memmap` 在一个 memory mapped file 上使用 fit 方法。 -> -> [`IncrementalPCA`](generated/sklearn.decomposition.IncrementalPCA.html#sklearn.decomposition.IncrementalPCA "sklearn.decomposition.IncrementalPCA") 仅存储成分和噪声方差的估计值,并按顺序递增地更新解释方差比([explained_variance_ratio_](#id28))。 - -这就是为什么内存使用取决于每个批次的样本数,而不是数据集中要处理的样本数。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_incremental_pca_0011.png](img/e84b0861711b65f28923da7c268645e7.jpg)](../auto_examples/decomposition/plot_incremental_pca.html)[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_incremental_pca_0021.png](img/22c1b7663568bf6c404a07778507a93e.jpg)](../auto_examples/decomposition/plot_incremental_pca.html) - -Examples: - -* [Incremental PCA](../auto_examples/decomposition/plot_incremental_pca.html#sphx-glr-auto-examples-decomposition-plot-incremental-pca-py) - -### 2.5.1.3\. PCA 使用随机SVD - -通过丢弃具有较低奇异值的奇异向量成分,将数据降维到低维空间并保留大部分方差是非常有意义的。 - -例如,如果我们使用64x64像素的灰度级图像进行人脸识别,数据的维数为4096, 在这样大的数据上训练含RBF内核的支持向量机是很慢的。 此外我们知道数据本质上的维度远低于4096,因为人脸的所有照片都看起来有点相似。 样本位于许多的很低维度(例如约200维)。PCA算法可以用于线性变换数据,同时降低维数并同时保留大部分方差。 - -在这种情况下,使用可选参数 `svd_solver='randomized'` 的 [`PCA`](generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA "sklearn.decomposition.PCA") 是非常有用的。 因为我们将要丢弃大部分奇异值,所以对我们将保留并实际执行变换的奇异向量进行近似估计的有限的计算更有效。 - -例如:以下显示了来自 Olivetti 数据集的 16 个样本肖像(以 0.0 为中心)。 右侧是前 16 个奇异向量重画为肖像。因为我们只需要使用大小为 ![n_{samples} = 400](img/eba6c21adbb5d5905624446cc970a7d3.jpg) 和 ![n_{features} = 64 \times 64 = 4096](img/f34cef4cb73bfa4cbe2f9b4300a8940c.jpg) 的数据集的前 16 个奇异向量, 使得计算时间小于 1 秒。 - -**[![orig_img](../Images/4b3d9c4467b467af3714ba45c54e5c2e.jpg)](../auto_examples/decomposition/plot_faces_decomposition.html) [![pca_img](../Images/9a55689143b2e4d90adcdfe1f95b9ffd.jpg)](../auto_examples/decomposition/plot_faces_decomposition.html)** - -注意:使用可选参数 `svd_solver='randomized'` ,在 [`PCA`](generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA "sklearn.decomposition.PCA") 中我们还需要给出输入低维空间大小 `n_components` 。 - -如果我们注意到: ![n_{\max} = \max(n_{\mathrm{samples}}, n_{\mathrm{features}})](img/a6dba4aa006d4689de18a4de5acaa949.jpg) 且 ![n_{\min} = \min(n_{\mathrm{samples}}, n_{\mathrm{features}})](img/c3c22734435fdd94f6819708bc55d8a6.jpg), 对于PCA中实施的确切方式,随机 [`PCA`](generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA "sklearn.decomposition.PCA") 的时间复杂度是:![O(n_{\max}^2 \cdot n_{\mathrm{components}})](img/3a876d35f8a2c82a19a71b0fd52f7153.jpg) , 而不是 ![O(n_{\max}^2 \cdot n_{\min})](img/38a411931f9f49e71b888f7998427122.jpg) 。 - -对于确切的方式,随机 [`PCA`](generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA "sklearn.decomposition.PCA") 的内存占用量正比于 ![2 \cdot n_{\max} \cdot n_{\mathrm{components}}](img/e7a3ba1e52e7e8add5e2c14602a92e3a.jpg) , 而不是 ![n_{\max}\cdot n_{\min}](img/d3c1bd7a2bac2e7cc22203e423d56e7e.jpg) - -注意:选择参数 `svd_solver='randomized'` 的 [`PCA`](generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA "sklearn.decomposition.PCA"),在执行 `inverse_transform` 时, 并不是 `transform` 的确切的逆变换操作(即使 参数设置为默认的 `whiten=False`) - -例子: - -* [Faces recognition example using eigenfaces and SVMs](../auto_examples/applications/plot_face_recognition.html#sphx-glr-auto-examples-applications-plot-face-recognition-py) -* [Faces dataset decompositions](../auto_examples/decomposition/plot_faces_decomposition.html#sphx-glr-auto-examples-decomposition-plot-faces-decomposition-py) - -参考文献: - -* [“Finding structure with randomness: Stochastic algorithms for constructing approximate matrix decompositions”](http://arxiv.org/abs/0909.4061) Halko, et al., 2009 - -### 2.5.1.4\. 核 PCA - -[`KernelPCA`](generated/sklearn.decomposition.KernelPCA.html#sklearn.decomposition.KernelPCA "sklearn.decomposition.KernelPCA") 是 PCA 的扩展,通过使用核方法实现非线性降维(dimensionality reduction) (参阅 [成对的矩阵, 类别和核函数](metrics.html#metrics))。 它具有许多应用,包括去噪, 压缩和结构化预测( structured prediction ) (kernel dependency estimation(内核依赖估计))。 - -> [`KernelPCA`](generated/sklearn.decomposition.KernelPCA.html#sklearn.decomposition.KernelPCA "sklearn.decomposition.KernelPCA") 支持 `transform` 和 `inverse_transform` 。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_kernel_pca_0011.png](img/64ecb0afa71752378a987a33e1e4e76f.jpg)](../auto_examples/decomposition/plot_kernel_pca.html) - -示例: - -* [Kernel PCA](../auto_examples/decomposition/plot_kernel_pca.html#sphx-glr-auto-examples-decomposition-plot-kernel-pca-py) - -### 2.5.1.5\. 稀疏主成分分析 ( SparsePCA 和 MiniBatchSparsePCA ) - -[`SparsePCA`](generated/sklearn.decomposition.SparsePCA.html#sklearn.decomposition.SparsePCA "sklearn.decomposition.SparsePCA") 是 PCA 的一个变体,目的是提取能最好地重建数据的稀疏组分集合。 - -小批量稀疏 PCA ( [`MiniBatchSparsePCA`](generated/sklearn.decomposition.MiniBatchSparsePCA.html#sklearn.decomposition.MiniBatchSparsePCA "sklearn.decomposition.MiniBatchSparsePCA") ) 是一个 [`SparsePCA`](generated/sklearn.decomposition.SparsePCA.html#sklearn.decomposition.SparsePCA "sklearn.decomposition.SparsePCA") 的变种,它速度更快但准确度有所降低。对于给定的迭代次数,通过迭代该组特征的小块来达到速度的增加。 - -Principal component analysis(主成分分析) ([`PCA`](generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA "sklearn.decomposition.PCA")) 的缺点在于,通过该方法提取的成分具有唯一的密度表达式,即当表示为原始变量的线性组合时,它们具有非零系数,使之难以解释。在许多情况下,真正的基础组件可以更自然地想象为稀疏向量; 例如在面部识别中,每个组件可能自然地映射到面部的某个部分。 - -稀疏的主成分产生更简洁、可解释的表达式,明确强调了样本之间的差异性来自哪些原始特征。 - -以下示例说明了使用稀疏 PCA 提取 Olivetti 人脸数据集中的 16 个组分。可以看出正则化项产生了许多零。此外,数据的自然结构导致了非零系数垂直相邻 (vertically adjacent)。该模型不会在数学上强制执行: 每个组分都是一个向量 ![h \in \mathbf{R}^{4096}](img/0fac1c7ec23344da41ff45485bb3ac12.jpg),除非人性化地的可视化为 64x64 像素的图像,否则没有垂直相邻性的概念。 下面显示的组分看起来局部化(appear local)是数据的内在结构的影响,这种局部模式使重建误差最小化。有一种考虑到邻接性和不同结构类型的导致稀疏的规范(sparsity-inducing norms),参见 [[Jen09]](#jen09) 对这种方法进行了解。 有关如何使用稀疏 PCA 的更多详细信息,请参阅下面的示例部分。 更多关于 Sparse PCA 使用的内容,参见示例部分,如下: - -**[![pca_img](../Images/9a55689143b2e4d90adcdfe1f95b9ffd.jpg)](../auto_examples/decomposition/plot_faces_decomposition.html) [![spca_img](../Images/aba080a369ca542a90a264a04dd518c5.jpg)](../auto_examples/decomposition/plot_faces_decomposition.html)** - -请注意,有多种不同的计算稀疏PCA 问题的公式。 这里使用的方法基于 [[Mrl09]](#mrl09) 。优化问题的解决是一个带有惩罚项(L1范数的) ![\ell_1](img/3bf32d926cdf24f440b6b831f0d9cc37.jpg) 的一个 PCA 问题(dictionary learning(字典学习)): - - -![(U^*, V^*) = \underset{U, V}{\operatorname{arg\,min\,}} & \frac{1}{2} - ||X-UV||_2^2+\alpha||V||_1 \\ - \text{subject to\,} & ||U_k||_2 = 1 \text{ for all } - 0 \leq k < n_{components}](img/d6d6e6638cd01ead4811579660e36b44.jpg) - - -导致稀疏(sparsity-inducing)的 ![\ell_1](img/3bf32d926cdf24f440b6b831f0d9cc37.jpg) 规范也可以避免当训练样本很少时从噪声中学习成分。可以通过超参数 `alpha` 来调整惩罚程度(从而减少稀疏度)。值较小会导致温和的正则化因式分解,而较大的值将许多系数缩小到零。 - -Note - -虽然本着在线算法的精神, [`MiniBatchSparsePCA`](generated/sklearn.decomposition.MiniBatchSparsePCA.html#sklearn.decomposition.MiniBatchSparsePCA "sklearn.decomposition.MiniBatchSparsePCA") 类不实现 `partial_fit` , 因为在线算法沿特征方向,而不是样本方向。 - -示例: - -* [Faces dataset decompositions](../auto_examples/decomposition/plot_faces_decomposition.html#sphx-glr-auto-examples-decomposition-plot-faces-decomposition-py) - -参考文献: - -| [[Mrl09]](#id5) | [“Online Dictionary Learning for Sparse Coding”](http://www.di.ens.fr/sierra/pdfs/icml09.pdf) J. Mairal, F. Bach, J. Ponce, G. Sapiro, 2009 | - -| [[Jen09]](#id4) | [“Structured Sparse Principal Component Analysis”](www.di.ens.fr/~fbach/sspca_AISTATS2010.pdf) R. Jenatton, G. Obozinski, F. Bach, 2009 | - -## 2.5.2\. 截断奇异值分解和隐语义分析 - -[`TruncatedSVD`](generated/sklearn.decomposition.TruncatedSVD.html#sklearn.decomposition.TruncatedSVD "sklearn.decomposition.TruncatedSVD") 实现了一个奇异值分解(SVD)的变体,它只计算 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 个最大的奇异值,其中 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 是用户指定的参数。 - -当截断的 SVD被应用于 term-document矩阵(由 `CountVectorizer` 或 `TfidfVectorizer` 返回)时,这种转换被称为 [latent semantic analysis](http://nlp.stanford.edu/IR-book/pdf/18lsi.pdf) (LSA), 因为它将这样的矩阵转换为低纬度的 “semantic(语义)” 空间。 特别地是 LSA 能够抵抗同义词和多义词的影响(两者大致意味着每个单词有多重含义),这导致 term-document 矩阵过度稀疏,并且在诸如余弦相似性的度量下表现出差的相似性。 - -Note - -LSA 也被称为隐语义索引 LSI,尽管严格地说它是指在持久索引(persistent indexes)中用于信息检索的目的。 - -数学表示中, 训练样本 ![X](img/43c1fea57579e54f80c0535bc582626f.jpg) 用截断的SVD产生一个低秩的( low-rank)近似值 ![X](img/43c1fea57579e54f80c0535bc582626f.jpg) : - -![X \approx X_k = U_k \Sigma_k V_k^\top](img/21b6e31779ad3b1a382b13e65ec917c7.jpg) - -在这个操作之后,![U_k \Sigma_k^\top](img/dedef2ddd0f96df639d4c85fffb9bbd5.jpg) 是转换后的训练集,其中包括 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 个特征(在 API 中被称为 `n_components` )。 - -还需要转换一个测试集 ![X](img/43c1fea57579e54f80c0535bc582626f.jpg), 我们乘以 ![V_k](img/cc41a8d314f9b97ecdf236aa0c21d984.jpg): - -![X' = X V_k](img/6081a672a0d5d6cc7563c531599dde91.jpg) - -Note - -自然语言处理(NLP) 和信息检索(IR) 文献中的 LSA 的大多数处理方式是交换矩阵 ![X](img/43c1fea57579e54f80c0535bc582626f.jpg) 的坐标轴,使其具有 `n_features` × `n_samples` 的形状。 我们以 scikit-learn API 相匹配的不同方式呈现 LSA, 但是找到的奇异值是相同的。 - -[`TruncatedSVD`](generated/sklearn.decomposition.TruncatedSVD.html#sklearn.decomposition.TruncatedSVD "sklearn.decomposition.TruncatedSVD") 非常类似于 [`PCA`](generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA "sklearn.decomposition.PCA"), 但不同之处在于它工作在样本矩阵 ![X](img/43c1fea57579e54f80c0535bc582626f.jpg) 而不是它们的协方差矩阵。 当从特征值中减去 ![X](img/43c1fea57579e54f80c0535bc582626f.jpg) 的每列(每个特征per-feature)的均值时,在得到的矩阵上应用 truncated SVD 相当于 PCA 。 实际上,这意味着 [`TruncatedSVD`](generated/sklearn.decomposition.TruncatedSVD.html#sklearn.decomposition.TruncatedSVD "sklearn.decomposition.TruncatedSVD") 转换器(transformer)接受 `scipy.sparse` 矩阵,而不需要对它们进行密集(density),因为即使对于中型大小文档的集合,密集化 (densifying)也可能填满内存。 - -虽然 [`TruncatedSVD`](generated/sklearn.decomposition.TruncatedSVD.html#sklearn.decomposition.TruncatedSVD "sklearn.decomposition.TruncatedSVD") 转换器(transformer)可以在任何(稀疏的)特征矩阵上工作,但还是建议在 LSA/document 处理设置中,在 tf–idf 矩阵上的原始频率计数使用它。 特别地,应该打开子线性缩放(sublinear scaling)和逆文档频率(inverse document frequency) (`sublinear_tf=True, use_idf=True`) 以使特征值更接近于高斯分布,补偿 LSA 对文本数据的错误假设。 - -示例: - -* [Clustering text documents using k-means](../auto_examples/text/document_clustering.html#sphx-glr-auto-examples-text-document-clustering-py) - -参考文献: - -* Christopher D. Manning, Prabhakar Raghavan and Hinrich Schütze (2008), _Introduction to Information Retrieval_, Cambridge University Press, chapter 18: [Matrix decompositions & latent semantic indexing](http://nlp.stanford.edu/IR-book/pdf/18lsi.pdf) - -## 2.5.3\. 词典学习 - -### 2.5.3.1\. 带有预计算词典的稀疏编码 - -[`SparseCoder`](generated/sklearn.decomposition.SparseCoder.html#sklearn.decomposition.SparseCoder "sklearn.decomposition.SparseCoder") 对象是一个估计器 (estimator),可以用来将信号转换成一个固定的预计算的词典内原子(atoms)的稀疏线性组合(sparse linear combination),如离散小波基( discrete wavelet basis ) 。 因此,该对象不实现 `fit` 方法。该转换相当于一个稀疏编码问题: 将数据的表示为尽可能少的词典原子的线性组合。 词典学习的所有变体实现以下变换方法,可以通过 `transform_method` 初始化参数进行控制: - -* Orthogonal matching pursuit(追求正交匹配) ([正交匹配追踪法(OMP)](linear_model.html#omp)) -* Least-angle regression (最小角度回归)([最小角回归](linear_model.html#least-angle-regression)) -* Lasso computed by least-angle regression(最小角度回归的Lasso 计算) -* Lasso using coordinate descent ( 使用坐标下降的Lasso)([Lasso](linear_model.html#lasso)) -* Thresholding(阈值) - -阈值方法速度非常快,但是不能产生精确的重建。 它们在分类任务的文献中已被证明是有用的。对于图像重建任务,追求正交匹配可以产生最精确、无偏的重建。 - -词典学习对象通过 `split_code` 参数提供稀疏编码结果中的正值和负值分离的可能性。当使用词典学习来提取将用于监督学习的特征时,这是有用的,因为它允许学习算法将不同的权重从正加载(loading)分配给相应的负加载的特定原子。 - -单个样本的分割编码具有长度 `2 * n_components` ,并使用以下规则构造: 首先,计算长度为 `n_components` 的常规编码。然后, `split_code` 的第一个 `n_components` 条目将用正常编码向量的正部分填充。分割编码的第二部分用编码向量的负部分填充,只有一个正号。因此, split_code 是非负的。 - -示例: - -* [Sparse coding with a precomputed dictionary](../auto_examples/decomposition/plot_sparse_coding.html#sphx-glr-auto-examples-decomposition-plot-sparse-coding-py) - -### 2.5.3.2\. 通用词典学习 - -词典学习( [`DictionaryLearning`](generated/sklearn.decomposition.DictionaryLearning.html#sklearn.decomposition.DictionaryLearning "sklearn.decomposition.DictionaryLearning") ) 是一个矩阵因式分解问题,相当于找到一个在拟合数据的稀疏编码中表现良好的(通常是过完备的(overcomplete))词典。 - -将数据表示为来自过完备词典的原子的稀疏组合被认为是哺乳动物初级视觉皮层的工作方式。 因此,应用于图像补丁的词典学习已被证明在诸如图像完成、修复和去噪,以及有监督的识别图像处理任务中表现良好的结果。 - -词典学习是通过交替更新稀疏编码来解决的优化问题,作为解决多个 Lasso 问题的一个解决方案,考虑到字典固定,然后更新字典以最好地适合稀疏编码。 - - -![(U^*, V^*) = \underset{U, V}{\operatorname{arg\,min\,}} & \frac{1}{2} - ||X-UV||_2^2+\alpha||U||_1 \\ - \text{subject to\,} & ||V_k||_2 = 1 \text{ for all } - 0 \leq k < n_{\mathrm{atoms}}](img/9b4b00422c0cec29f80a03fe1d772100.jpg) - - -**[![pca_img2](../Images/9a55689143b2e4d90adcdfe1f95b9ffd.jpg)](../auto_examples/decomposition/plot_faces_decomposition.html) [![dict_img2](../Images/86f7969b00fb3d0914f0bababac102a0.jpg)](../auto_examples/decomposition/plot_faces_decomposition.html)** - -在使用这样一个过程来拟合词典之后,变换只是一个稀疏的编码步骤,与所有的词典学习对象共享相同的实现。(参见 [带有预计算词典的稀疏编码](#sparsecoder))。 - -以下图像显示了字典学习是如何从浣熊脸部的部分图像中提取的4x4像素图像补丁中进行词典学习的。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_image_denoising_0011.png](img/1cde7e5f92efe9056f9f53e23ea04102.jpg)](../auto_examples/decomposition/plot_image_denoising.html) - -示例: - -* [Image denoising using dictionary learning](../auto_examples/decomposition/plot_image_denoising.html#sphx-glr-auto-examples-decomposition-plot-image-denoising-py) - -参考文献: - -* [“Online dictionary learning for sparse coding”](http://www.di.ens.fr/sierra/pdfs/icml09.pdf) J. Mairal, F. Bach, J. Ponce, G. Sapiro, 2009 - -### 2.5.3.3\. 小批量字典学习 - -[`MiniBatchDictionaryLearning`](generated/sklearn.decomposition.MiniBatchDictionaryLearning.html#sklearn.decomposition.MiniBatchDictionaryLearning "sklearn.decomposition.MiniBatchDictionaryLearning") 实现了更快、更适合大型数据集的字典学习算法,其运行速度更快,但准确度有所降低。 - -默认情况下,[`MiniBatchDictionaryLearning`](generated/sklearn.decomposition.MiniBatchDictionaryLearning.html#sklearn.decomposition.MiniBatchDictionaryLearning "sklearn.decomposition.MiniBatchDictionaryLearning") 将数据分成小批量,并通过在指定次数的迭代中循环使用小批量,以在线方式进行优化。但是,目前它没有实现停止条件。 - -估计器还实现了 `partial_fit`, 它通过在一个小批处理中仅迭代一次来更新字典。 当在线学习的数据从一开始就不容易获得,或者数据超出内存时,可以使用这种迭代方法。 - -[![https://scikit-learn.org/stable/_images/sphx_glr_plot_dict_face_patches_001.png](../Images/b335c88114c4fec7e72304006810c82c.jpg)](../auto_examples/cluster/plot_dict_face_patches.html) - -**字典学习聚类** - -注意,当使用字典学习来提取表示(例如,用于稀疏编码)时,聚类可以是学习字典的良好中间方法。 例如,[`MiniBatchKMeans`](generated/sklearn.cluster.MiniBatchKMeans.html#sklearn.cluster.MiniBatchKMeans "sklearn.cluster.MiniBatchKMeans") 估计器能高效计算并使用 `partial_fit` 方法实现在线学习。 - -示例: 在线学习面部部分的字典 [Online learning of a dictionary of parts of faces](../auto_examples/cluster/plot_dict_face_patches.html#sphx-glr-auto-examples-cluster-plot-dict-face-patches-py) - -## 2.5.4\. 因子分析 - -在无监督的学习中,我们只有一个数据集 ![X = \{x_1, x_2, \dots, x_n\}](img/ddb7802ca4af9cffa650eec942feb790.jpg). 这个数据集如何在数学上描述? ![X](img/43c1fea57579e54f80c0535bc582626f.jpg) 的一个非常简单的连续隐变量模型 - -![x_i = W h_i + \mu + \epsilon](img/75a6f2c15bfb418edcb993c4e27873d0.jpg) - -矢量 ![h_i](img/3d52bf36b893b26195748e89c94273f0.jpg) 被称为 “隐性的”,因为它是不可观察的。 ![\epsilon](img/58ef9e1b5d2ee139dcb588a3879ca1a6.jpg) 被认为是符合高斯分布的噪声项,平均值为 0,协方差为 ![\Psi](img/36f54997ff4df647587d1bfd2ddb3ee2.jpg) (即 ![\epsilon \sim \mathcal{N}(0, \Psi)](img/e5012484ffa6afb2c720d363b39a36b0.jpg)), ![\mu](img/b6cea83c1722562f844aebd98fb3f59d.jpg) 是偏移向量。 这样一个模型被称为 “生成的”,因为它描述了如何从 ![h_i](img/3d52bf36b893b26195748e89c94273f0.jpg) 生成 ![x_i](img/cf52655ee609af9f3c27c06448a5bf67.jpg) 。 如果我们使用所有的 ![x_i](img/cf52655ee609af9f3c27c06448a5bf67.jpg) 作为列来形成一个矩阵 ![\mathbf{X}](img/36aff9afacf42a6a0b903bb6cd3409dc.jpg) ,并将所有的 ![h_i](img/3d52bf36b893b26195748e89c94273f0.jpg) 作为矩阵 ![\mathbf{H}](img/a243fb2cabe46c32a3a66214f514d623.jpg) 的列, 那么我们可以写(适当定义的 ![\mathbf{M}](img/4e6d5ce51d78cff57187dc09b6710a7c.jpg) 和 ![\mathbf{E}](img/355df435a05593b653d7d988c06e5d3c.jpg) ): - -![\mathbf{X} = W \mathbf{H} + \mathbf{M} + \mathbf{E}](img/337f0e255aa71dafb655629cb09a0c14.jpg) - -换句话说,我们 _分解_ 矩阵 ![\mathbf{X}](img/36aff9afacf42a6a0b903bb6cd3409dc.jpg). 如果给出 ![h_i](img/3d52bf36b893b26195748e89c94273f0.jpg),上述方程自动地表示以下概率解释: - -![p(x_i|h_i) = \mathcal{N}(Wh_i + \mu, \Psi)](img/d47bd99afb1d5dd3bff5b9809371c476.jpg) - -对于一个完整的概率模型,我们还需要隐变量 ![h](img/c5f49595b56010ad04fce358940848e5.jpg) 的先验分布。 最直接的假设(基于高斯分布的良好性质)是 ![h \sim \mathcal{N}(0, \mathbf{I})](img/55f40b1e092983fff81024042966adec.jpg). 这产生一个高斯分布作为 ![x](img/5c82dbae35dc43d2f556f9f284d9d184.jpg) 的边际分布: - -![p(x) = \mathcal{N}(\mu, WW^T + \Psi)](img/b6a1f98637a242005be08bb10541a524.jpg) - -现在,在没有任何进一步假设的前提下,隐变量 ![h](img/c5f49595b56010ad04fce358940848e5.jpg) 是多余的 – ![x](img/5c82dbae35dc43d2f556f9f284d9d184.jpg) 完全可以用均值和协方差来建模。 我们需要对这两个参数之一进行更具体的构造。 一个简单的附加假设是将误差协方差 ![\Psi](img/36f54997ff4df647587d1bfd2ddb3ee2.jpg) 构造成如下: - -* ![\Psi = \sigma^2 \mathbf{I}](img/cd8ca25fe0dc0cc43949bcaa5d2674c2.jpg): 这个假设能推导出 [`PCA`](generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA "sklearn.decomposition.PCA") 的概率模型。 -* ![\Psi = \mathrm{diag}(\psi_1, \psi_2, \dots, \psi_n)](img/e64298b4d9439c3db54eeddbf3d92b4b.jpg): 这个模型称为 [`FactorAnalysis`](generated/sklearn.decomposition.FactorAnalysis.html#sklearn.decomposition.FactorAnalysis "sklearn.decomposition.FactorAnalysis"), 一个经典的统计模型。 矩阵W有时称为 “因子加载矩阵”。 - -两个模型基都基于高斯分布是低阶协方差矩阵的假设。 因为这两个模型都是概率性的,所以它们可以集成到更复杂的模型中, 例如因子分析器的混合。如果隐变量基于非高斯分布,则得到完全不同的模型(例如, [`FastICA`](generated/sklearn.decomposition.FastICA.html#sklearn.decomposition.FastICA "sklearn.decomposition.FastICA") )。 - -因子分析 _可以_ 产生与 :class:[`](#id13)PCA`类似的成分(例如其加载矩阵的列)。 然而,这些成分没有通用的性质(例如它们是否是正交的): - -**[![pca_img3](../Images/9a55689143b2e4d90adcdfe1f95b9ffd.jpg)](../auto_examples/decomposition/plot_faces_decomposition.html) [![fa_img3](../Images/1f8c02d4fdbdbcaa014972bca5620cf3.jpg)](../auto_examples/decomposition/plot_faces_decomposition.html)** - -因子分析( [`PCA`](generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA "sklearn.decomposition.PCA") ) 的主要优点是可以独立地对输入空间的每个方向(异方差噪声)的方差建模: - -[![https://scikit-learn.org/stable/_images/sphx_glr_plot_faces_decomposition_008.png](../Images/67f62308a1f409829599e546c843d53f.jpg)](../auto_examples/decomposition/plot_faces_decomposition.html) - -在异方差噪声存在的情况下,这可以比概率 PCA 作出更好的模型选择: - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_pca_vs_fa_model_selection_0021.png](img/30fc2a610fc7de5c19317e1fc584765f.jpg)](../auto_examples/decomposition/plot_pca_vs_fa_model_selection.html) - -示例: - -* [Model selection with Probabilistic PCA and Factor Analysis (FA)](../auto_examples/decomposition/plot_pca_vs_fa_model_selection.html#sphx-glr-auto-examples-decomposition-plot-pca-vs-fa-model-selection-py) - -## 2.5.5\. 独立成分分析(ICA) - -独立分量分析将多变量信号分解为独立性最强的加性子组件。 它通过 [`Fast ICA`](generated/sklearn.decomposition.FastICA.html#sklearn.decomposition.FastICA "sklearn.decomposition.FastICA") 算法在 scikit-learn 中实现。 ICA 通常不用于降低维度,而是用于分离叠加信号。 由于 ICA 模型不包括噪声项,因此要使模型正确,必须使用白化。 这可以在内部调节白化参数或手动使用 PCA 的一种变体。 - -ICA 通常用于分离混合信号(称为 _盲源分离_ 的问题),如下例所示: - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_ica_blind_source_separation_0011.png](img/61a79d63783315d8e68d8ecf1324105f.jpg)](../auto_examples/decomposition/plot_ica_blind_source_separation.html) - -ICA 也可以用于具有稀疏子成分的非线性分解: - -**[![pca_img4](../Images/9a55689143b2e4d90adcdfe1f95b9ffd.jpg)](../auto_examples/decomposition/plot_faces_decomposition.html) [![ica_img4](../Images/390e2bdab30b6e7421082f13e8cfd6b0.jpg)](../auto_examples/decomposition/plot_faces_decomposition.html)** - -示例: - -* [Blind source separation using FastICA](../auto_examples/decomposition/plot_ica_blind_source_separation.html#sphx-glr-auto-examples-decomposition-plot-ica-blind-source-separation-py) -* [FastICA on 2D point clouds](../auto_examples/decomposition/plot_ica_vs_pca.html#sphx-glr-auto-examples-decomposition-plot-ica-vs-pca-py) -* [Faces dataset decompositions](../auto_examples/decomposition/plot_faces_decomposition.html#sphx-glr-auto-examples-decomposition-plot-faces-decomposition-py) - -## 2.5.6\. 非负矩阵分解(NMF 或 NNMF) - -### 2.5.6.1\. NMF 与 Frobenius 范数 - -[`NMF`](generated/sklearn.decomposition.NMF.html#sklearn.decomposition.NMF "sklearn.decomposition.NMF") [[1]](#id22) 是在数据和分量是非负情况下的另一种降维方法。 在数据矩阵不包含负值的情况下,可以插入 [`NMF`](generated/sklearn.decomposition.NMF.html#sklearn.decomposition.NMF "sklearn.decomposition.NMF") 而不是 [`PCA`](generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA "sklearn.decomposition.PCA") 或其变体。 通过优化 ![X](img/43c1fea57579e54f80c0535bc582626f.jpg) 与矩阵乘积 ![WH](img/d822c46462e0ffda4dd99f74a070b6b3.jpg) 之间的距离 ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) ,可以将样本 ![X](img/43c1fea57579e54f80c0535bc582626f.jpg) 分解为两个非负矩阵 ![W](img/369b6e6bd43ee84fe99e14c8d78cdc9f.jpg) 和 ![H](img/9ad9b5d15124615ced9c9721a8ef4d3b.jpg)。 最广泛使用的距离函数是 Frobenius 平方范数,它是欧几里德范数到矩阵的推广: - -![d_{\mathrm{Fro}}(X, Y) = \frac{1}{2} ||X - Y||_{\mathrm{Fro}}^2 = \frac{1}{2} \sum_{i,j} (X_{ij} - {Y}_{ij})^2](img/ad946e6478bb10e60ac9663066f26ee8.jpg) - -与 [`PCA`](generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA "sklearn.decomposition.PCA") 不同,通过叠加分量而不减去,以加法方式获得向量的表示。这种加性模型对于表示图像和文本是有效的。 - -> [Hoyer, 2004] [[2]](#id23) 研究表明,当处于一定约束时,[`NMF`](generated/sklearn.decomposition.NMF.html#sklearn.decomposition.NMF "sklearn.decomposition.NMF") 可以产生数据集基于某子部分的表示,从而获得可解释的模型。 - -以下示例展示了与 PCA 特征面相比, [`NMF`](generated/sklearn.decomposition.NMF.html#sklearn.decomposition.NMF "sklearn.decomposition.NMF") 从 Olivetti 面部数据集中的图像中发现的16个稀疏组件。 - -Unlike [`PCA`](generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA "sklearn.decomposition.PCA"), the representation of a vector is obtained in an additive fashion, by superimposing the components, without subtracting. Such additive models are efficient for representing images and text. - -**[![pca_img5](../Images/9a55689143b2e4d90adcdfe1f95b9ffd.jpg)](../auto_examples/decomposition/plot_faces_decomposition.html) [![nmf_img5](../Images/bc08d23c9d8a06975f20eb514faae9ef.jpg)](../auto_examples/decomposition/plot_faces_decomposition.html)** - -`init` 属性确定了应用的初始化方法,这对方法的性能有很大的影响。 [`NMF`](generated/sklearn.decomposition.NMF.html#sklearn.decomposition.NMF "sklearn.decomposition.NMF") 实现了非负双奇异值分解方法。NNDSVD [[4]](#id24) 基于两个 SVD 过程,一个近似数据矩阵, 使用单位秩矩阵的代数性质,得到的部分SVD因子的其他近似正部分。 基本的 NNDSVD 算法更适合稀疏分解。其变体 NNDSVDa(全部零值替换为所有元素的平均值)和 NNDSVDar(零值替换为比数据平均值除以100小的随机扰动)在稠密情况时推荐使用。 - -请注意,乘法更新 (‘mu’) 求解器无法更新初始化中存在的零,因此当与引入大量零的基本 NNDSVD 算法联合使用时, 会导致较差的结果; 在这种情况下,应优先使用 NNDSVDa 或 NNDSVDar。 - -也可以通过设置 `init="random"`,使用正确缩放的随机非负矩阵初始化 [`NMF`](generated/sklearn.decomposition.NMF.html#sklearn.decomposition.NMF "sklearn.decomposition.NMF") 。 整数种子或 `RandomState` 也可以传递给 `random_state` 以控制重现性。 - -在 [`NMF`](generated/sklearn.decomposition.NMF.html#sklearn.decomposition.NMF "sklearn.decomposition.NMF") 中,L1 和 L2 先验可以被添加到损失函数中以使模型正规化。 L2 先验使用 Frobenius 范数,而L1 先验使用 L1 范数。与 `ElasticNet` 一样, 我们通过 `l1_ratio` (![\rho](img/b91e4507d9fd7068b02f689d697f8714.jpg)) 参数和正则化强度参数 `alpha` (![\alpha](img/d8b3d5242d513369a44f8bf0c6112744.jpg)) 来控制 L1 和 L2 的组合。那么先验项是: - - -![\alpha \rho ||W||_1 + \alpha \rho ||H||_1 -+ \frac{\alpha(1-\rho)}{2} ||W||_{\mathrm{Fro}} ^ 2 -+ \frac{\alpha(1-\rho)}{2} ||H||_{\mathrm{Fro}} ^ 2](img/be8c80153a3cafbe4309f1fe3b62d96b.jpg) - - -正则化目标函数为: - - -![d_{\mathrm{Fro}}(X, WH) -+ \alpha \rho ||W||_1 + \alpha \rho ||H||_1 -+ \frac{\alpha(1-\rho)}{2} ||W||_{\mathrm{Fro}} ^ 2 -+ \frac{\alpha(1-\rho)}{2} ||H||_{\mathrm{Fro}} ^ 2](img/2c1da71c882c95ba6660cdad0d976f6d.jpg) - - -[`NMF`](generated/sklearn.decomposition.NMF.html#sklearn.decomposition.NMF "sklearn.decomposition.NMF") 正则化 W 和 H . 公共函数 `non_negative_factorization` 允许通过 `regularization` 属性进行更精细的控制,将 仅W ,仅H 或两者正规化。 - -### 2.5.6.2\. 具有 beta-divergence 的 NMF - -如前所述,最广泛使用的距离函数是平方 Frobenius 范数,这是欧几里得范数到矩阵的推广: - -![d_{\mathrm{Fro}}(X, Y) = \frac{1}{2} ||X - Y||_{Fro}^2 = \frac{1}{2} \sum_{i,j} (X_{ij} - {Y}_{ij})^2](img/3776f899ba5f1d7432c553c6c3aae381.jpg) - -其他距离函数可用于 NMF,例如(广义) Kullback-Leibler(KL) 散度,也称为 I-divergence: - -![d_{KL}(X, Y) = \sum_{i,j} (X_{ij} \log(\frac{X_{ij}}{Y_{ij}}) - X_{ij} + Y_{ij})](img/33f1b6fb64999d2af571c675b7f17f34.jpg) - -或者, Itakura-Saito(IS) divergence: - -![d_{IS}(X, Y) = \sum_{i,j} (\frac{X_{ij}}{Y_{ij}} - \log(\frac{X_{ij}}{Y_{ij}}) - 1)](img/345ab99b5a1246fb019e249dae570191.jpg) - -这三个距离函数是 beta-divergence 函数族的特殊情况,其参数分别为 ![\beta = 2, 1, 0](img/c63c614232be2789284b906792195a15.jpg) [[6]](#id26) 。 beta-divergence 定义如下: - -![d_{\beta}(X, Y) = \sum_{i,j} \frac{1}{\beta(\beta - 1)}(X_{ij}^\beta + (\beta-1)Y_{ij}^\beta - \beta X_{ij} Y_{ij}^{\beta - 1})](img/1da4a8f74cdb166cdc91e2f691cf3ac5.jpg) - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_beta_divergence_0011.png](img/10bfda066ccebace59b1d11135e10196.jpg)](../auto_examples/decomposition/plot_beta_divergence.html) - -请注意,在 ![\beta \in (0; 1)](img/a19f2294e2649252ad2b5766d295e75e.jpg) 上定义无效,仅仅在 ![d_{KL}](img/8c4beae51da320d8fffd739a9e9e3852.jpg) 和 ![d_{IS}](img/aee8fc1c253da16851991ef3ceff663b.jpg) 的上可以分别连续扩展。 - -[`NMF`](generated/sklearn.decomposition.NMF.html#sklearn.decomposition.NMF "sklearn.decomposition.NMF") 使用 Coordinate Descent (‘cd’) [[5]](#id25) 和乘法更新 (‘mu’) [[6]](#id26) 来实现两个求解器。 ‘mu’ 求解器可以优化每个 beta-divergence,包括 Frobenius 范数 (![\beta=2](img/6875a3a68e07bfa51a631f014fcf8a4f.jpg)) , (广义) Kullback-Leibler divergence (![\beta=1](img/04388b884d40fc8b56559b6c2364e7ce.jpg)) 和Itakura-Saito divergence(beta = 0) )。 请注意,对于 ![\beta \in (1; 2)](img/67f9d3900eb064f6354d23271f16c2b0.jpg),’mu’ 求解器明显快于 ![\beta](img/533e54759d696211ebe7819cc107d3bc.jpg) 的其他值。 还要注意,使用负数(或0,即 ‘itakura-saito’ ) ![\beta](img/533e54759d696211ebe7819cc107d3bc.jpg),输入矩阵不能包含零值。 - -‘cd’ 求解器只能优化 Frobenius 范数。由于 NMF 的潜在非凸性,即使优化相同的距离函数, 不同的求解器也可能会收敛到不同的最小值。 - -NMF最适用于 `fit_transform` 方法,该方法返回矩阵W.矩阵 H 被 `components_` 属性中存储到拟合模型中; 方法 `transform` 将基于这些存储的组件分解新的矩阵 X_new: - -```py ->>> import numpy as np ->>> X = np.array([[1, 1], [2, 1], [3, 1.2], [4, 1], [5, 0.8], [6, 1]]) ->>> from sklearn.decomposition import NMF ->>> model = NMF(n_components=2, init='random', random_state=0) ->>> W = model.fit_transform(X) ->>> H = model.components_ ->>> X_new = np.array([[1, 0], [1, 6.1], [1, 0], [1, 4], [3.2, 1], [0, 4]]) ->>> W_new = model.transform(X_new) - -``` - -示例: - -* [Faces dataset decompositions](../auto_examples/decomposition/plot_faces_decomposition.html#sphx-glr-auto-examples-decomposition-plot-faces-decomposition-py) -* [Topic extraction with Non-negative Matrix Factorization and Latent Dirichlet Allocation](../auto_examples/applications/plot_topics_extraction_with_nmf_lda.html#sphx-glr-auto-examples-applications-plot-topics-extraction-with-nmf-lda-py) -* [Beta-divergence loss functions](../auto_examples/decomposition/plot_beta_divergence.html#sphx-glr-auto-examples-decomposition-plot-beta-divergence-py) - -参考文献: - -| [[1]](#id16) | [“Learning the parts of objects by non-negative matrix factorization”](http://www.columbia.edu/~jwp2128/Teaching/W4721/papers/nmf_nature.pdf) D. Lee, S. Seung, 1999 | - -| [[2]](#id17) | [“Non-negative Matrix Factorization with Sparseness Constraints”](http://www.jmlr.org/papers/volume5/hoyer04a/hoyer04a.pdf) P. Hoyer, 2004 | - -| [[4]](#id18) | [“SVD based initialization: A head start for nonnegative matrix factorization”](http://scgroup.hpclab.ceid.upatras.gr/faculty/stratis/Papers/HPCLAB020107.pdf) C. Boutsidis, E. Gallopoulos, 2008 | - -| [[5]](#id20) | [“Fast local algorithms for large scale nonnegative matrix and tensor factorizations.”](http://www.bsp.brain.riken.jp/publications/2009/Cichocki-Phan-IEICE_col.pdf) A. Cichocki, P. Anh-Huy, 2009 | - -| [6] | _([1](#id19), [2](#id21))_ [“Algorithms for nonnegative matrix factorization with the beta-divergence”](http://http://arxiv.org/pdf/1010.1763v3.pdf) C. Fevotte, J. Idier, 2011 | - -## 2.5.7\. 隐 Dirichlet 分配(LDA) - -隐 Dirichlet 分配是离散数据集(如文本语料库)的集合的生成概率模型。 它也是一个主题模型,用于从文档集合中发现抽象主题。 - -LDA 的图形模型是一个三层贝叶斯模型: - -![http://sklearn.apachecn.org/cn/0.19.0/_images/lda_model_graph.png](img/30641b10b766d35775b6bbb4d21e74b7.jpg) - -当建模文本语料库时,该模型假设具有 ![D](img/e03066df748abd9273db055cb79f0f01.jpg) 文档和 ![K](img/e279b8169ddd6581c5606c868ba52fae.jpg) 主题的语料库的以下生成过程: - -> 1. 对于每个主题 ![k](img/f93871977da52a6d11045d57c3e18728.jpg),绘制 ![\beta_k \sim \mathrm{Dirichlet}(\eta),\: k =1...K](img/0333d4e1607c1cab19f576a212267ec1.jpg) -> 2. 对于每个文档 ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg),绘制 ![\theta_d \sim \mathrm{Dirichlet}(\alpha), \: d=1...D](img/7f1cafe91ec3b94b27f8759724287242.jpg) -> 3. 对于文档 ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) 中的每个单词 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg): -> -> > 1. 绘制主题索引 ![z_{di} \sim \mathrm{Multinomial}(\theta_d)](img/4a733ee899c074bde7a4d5292c9fc83e.jpg) -> > 2. 绘制观察词 ![w_{ij} \sim \mathrm{Multinomial}(beta_{z_{di}}.)](img/526e2da298d085b5fd557f49433d4143.jpg) - -对于参数估计,后验分布为: - - -![p(z, \theta, \beta |w, \alpha, \eta) = - \frac{p(z, \theta, \beta|\alpha, \eta)}{p(w|\alpha, \eta)}](img/5d0c433dc4dc7ca883ac8173e6e2096f.jpg) - - -由于后验分布难以处理,变体贝叶斯方法使用更简单的分布 ![q(z,\theta,\beta | \lambda, \phi, \gamma)](img/8fae035cff5a2ccfbc80e38fab4907cd.jpg) 近似, 并且优化了这些变体参数 ![\lambda](img/0f92bc682b050115d03c625ce770c77d.jpg), ![\phi](img/ff5e98366afa13070d3b410c55a80db1.jpg), ![\gamma](img/6552bde3d3999c1a9728016416932af7.jpg) 最大化Evidence Lower Bound (ELBO): - - -![\log\: P(w | \alpha, \eta) \geq L(w,\phi,\gamma,\lambda) \overset{\triangle}{=} - E_{q}[\log\:p(w,z,\theta,\beta|\alpha,\eta)] - E_{q}[\log\:q(z, \theta, \beta)]](img/6d8b62cf31afb168e2b2acb89d6abccd.jpg) - - -最大化 ELBO 相当于最小化 ![q(z,\theta,\beta)](img/2c2dcc83fc38e46810a36e59b2614a5c.jpg) 和后验 ![p(z, \theta, \beta |w, \alpha, \eta)](img/7efe29500f4af973643a15b3ed29a926.jpg) 之间的 Kullback-Leibler(KL) 散度。 - -[`LatentDirichletAllocation`](generated/sklearn.decomposition.LatentDirichletAllocation.html#sklearn.decomposition.LatentDirichletAllocation "sklearn.decomposition.LatentDirichletAllocation") 实现在线变体贝叶斯算法,支持在线和批量更新方法。 批处理方法在每次完全传递数据后更新变分变量,在线方法从小批量数据点中更新变体变量。 - -Note - -虽然在线方法保证收敛到局部最优点,最优点的质量和收敛速度可能取决于与小批量大小和学习率相关的属性。 - -当 [`LatentDirichletAllocation`](generated/sklearn.decomposition.LatentDirichletAllocation.html#sklearn.decomposition.LatentDirichletAllocation "sklearn.decomposition.LatentDirichletAllocation") 应用于 “document-term” 矩阵时,矩阵将被分解为 “topic-term” 矩阵和 “document-topic” 矩阵。 虽然 “topic-term” 矩阵在模型中被存储为 `components_` ,但是可以通过 `transform` 方法计算 “document-topic” 矩阵。 - -[`LatentDirichletAllocation`](generated/sklearn.decomposition.LatentDirichletAllocation.html#sklearn.decomposition.LatentDirichletAllocation "sklearn.decomposition.LatentDirichletAllocation") 还实现了 `partial_fit` 方法。这可用于当数据被顺序提取时. - -示例: - -* [Topic extraction with Non-negative Matrix Factorization and Latent Dirichlet Allocation](../auto_examples/applications/plot_topics_extraction_with_nmf_lda.html#sphx-glr-auto-examples-applications-plot-topics-extraction-with-nmf-lda-py) - -参考: - -* [“Latent Dirichlet Allocation”](https://www.cs.princeton.edu/~blei/papers/BleiNgJordan2003.pdf) D. Blei, A. Ng, M. Jordan, 2003 -* [“Online Learning for Latent Dirichlet Allocation”](https://www.cs.princeton.edu/~blei/papers/HoffmanBleiBach2010b.pdf) M. Hoffman, D. Blei, F. Bach, 2010 -* [“Stochastic Variational Inference”](http://www.columbia.edu/~jwp2128/Papers/HoffmanBleiWangPaisley2013.pdf) M. Hoffman, D. Blei, C. Wang, J. Paisley, 2013 \ No newline at end of file diff --git a/docs/0.19.x/25.md b/docs/0.19.x/25.md deleted file mode 100755 index d5888ce0d719242a0a054ce931ead56350153b91..0000000000000000000000000000000000000000 --- a/docs/0.19.x/25.md +++ /dev/null @@ -1,11 +0,0 @@ -# 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) - -许多统计问题在某一时刻需要估计一个总体的协方差矩阵,这可以看作是对数据集散点图形状的估计。 大多数情况下,基于样本的估计(基于其属性,如尺寸,结构,均匀性), 对估计质量有很大影响。 <cite>sklearn.covariance</cite> 方法的目的是 提供一个能在各种设置下准确估计总体协方差矩阵的工具。 - -我们假设观察是独立的,相同分布的 (i.i.d.)。 \ No newline at end of file diff --git a/docs/0.19.x/26.md b/docs/0.19.x/26.md deleted file mode 100755 index 8a95f69ab9289978493c672458a25ac69f02ea37..0000000000000000000000000000000000000000 --- a/docs/0.19.x/26.md +++ /dev/null @@ -1,9 +0,0 @@ -# 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 diff --git a/docs/0.19.x/27.md b/docs/0.19.x/27.md deleted file mode 100755 index 49e5a1affccf1fcc021f921ad086c8dd9510d15e..0000000000000000000000000000000000000000 --- a/docs/0.19.x/27.md +++ /dev/null @@ -1,54 +0,0 @@ -{% 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) , 它使得估计协方差和实际协方差矩阵之间的均方差进行最小化。 - -在 <cite>sklearn.covariance</cite> 包中,可以使用 [`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 收缩近似估计器。 - -在 <cite>sklearn.covariance</cite> 包中, 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 diff --git a/docs/0.19.x/28.md b/docs/0.19.x/28.md deleted file mode 100755 index 6c11dc062ae480170eb617efe5567a7d0a82d4b0..0000000000000000000000000000000000000000 --- a/docs/0.19.x/28.md +++ /dev/null @@ -1,43 +0,0 @@ -# 2.9\. 稀疏逆协方差 - -协方差矩阵的逆矩阵,通常称为精度矩阵(precision matrix),它与部分相关矩阵(partial correlation matrix)成正比。 它给出部分独立性关系。换句话说,如果两个特征在其他特征上有条件地独立, 则精度矩阵中的对应系数将为零。这就是为什么估计一个稀疏精度矩阵是有道理的: 通过从数据中学习独立关系,协方差矩阵的估计能更好处理。这被称为协方差选择。 - -在小样本的情况,即 `n_samples` 是数量级 `n_features` 或更小, 稀疏的逆协方差估计往往比收敛的协方差估计更好。 然而,在相反的情况下,或者对于非常相关的数据,它们可能在数值上不稳定。 此外,与收敛估算不同,稀疏估计器能够恢复非对角线结构 (off-diagonal structure)。 - -[`GraphLasso`](generated/sklearn.covariance.GraphLasso.html#sklearn.covariance.GraphLasso "sklearn.covariance.GraphLasso") 估计器使用 L1 惩罚执行关于精度矩阵的稀疏性: `alpha` 参数越高,精度矩阵的稀疏性越大。 相应的 [`GraphLassoCV`](generated/sklearn.covariance.GraphLassoCV.html#sklearn.covariance.GraphLassoCV "sklearn.covariance.GraphLassoCV") 对象使用交叉验证来自动设置 `alpha` 参数。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_sparse_cov_0011.png](img/7c9ce57d4e2ba5270352f4e118af7fac.jpg)](../auto_examples/covariance/plot_sparse_cov.html) - -Note - -**结构恢复** - -从数据中的相关性恢复图形结构是一个具有挑战性的事情。如果您对这种恢复感兴趣,请记住: - -* 相关矩阵的恢复比协方差矩阵更容易:在运行 [`GraphLasso`](generated/sklearn.covariance.GraphLasso.html#sklearn.covariance.GraphLasso "sklearn.covariance.GraphLasso") 前先标准化观察值 -* 如果底层图具有比平均节点更多的连接节点,则算法将错过其中一些连接。 -* 如果您的观察次数与底层图形中的边数相比不大,则不会恢复。 -* 即使您具有良好的恢复条件,通过交叉验证(例如使用GraphLassoCV对象)选择的 Alpha 参数将导致选择太多边。 然而,相关边缘将具有比不相关边缘更重的权重。 - -数学公式如下: - - -![\hat{K} = \mathrm{argmin}_K \big( - \mathrm{tr} S K - \mathrm{log} \mathrm{det} K - + \alpha \|K\|_1 - \big)](img/43996aff9311511e6e2f81912a249c7e.jpg) - - -其中:![K](img/e279b8169ddd6581c5606c868ba52fae.jpg) 是要估计的精度矩阵(precision matrix), ![S](img/12ecd862769bee1e71c75c134b6423bb.jpg) 是样本的协方差矩阵。 ![\|K\|_1](img/6122e23454910f4f076c71a84c068291.jpg) 是非对角系数 ![K](img/e279b8169ddd6581c5606c868ba52fae.jpg) (off-diagonal coefficients)的绝对值之和。 用于解决这个问题的算法是来自 Friedman 2008 Biostatistics 论文的 GLasso 算法。 它与 R 语言 `glasso` 包中的算法相同。 - -例子: - -* [Sparse inverse covariance estimation](../auto_examples/covariance/plot_sparse_cov.html#sphx-glr-auto-examples-covariance-plot-sparse-cov-py): - -合成数据示例,显示结构的一些恢复,并与其他协方差估计器进行比较。 - -* [Visualizing the stock market structure](../auto_examples/applications/plot_stock_market.html#sphx-glr-auto-examples-applications-plot-stock-market-py): 真实股票市场数据示例,查找哪些信号最相关。 - -参考文献: - -* Friedman et al, [“Sparse inverse covariance estimation with the graphical lasso”](http://biostatistics.oxfordjournals.org/content/9/3/432.short), Biostatistics 9, pp 432, 2008 \ No newline at end of file diff --git a/docs/0.19.x/29.md b/docs/0.19.x/29.md deleted file mode 100755 index ddac141361a48748d649415c646d2985998066d1..0000000000000000000000000000000000000000 --- a/docs/0.19.x/29.md +++ /dev/null @@ -1,28 +0,0 @@ -# 2.10\. Robust 协方差估计 - -实际数据集通常是会有测量或记录错误。合格但不常见的观察也可能出于各种原因。 每个不常见的观察称为异常值。 上面提出的经验协方差估计器和收缩协方差估计器对数据中异常观察值非常敏感。 因此,应该使用更好的协方差估计(robust covariance estimators)来估算其真实数据集的协方差。 或者,可以使用更好的协方差估计器(robust covariance estimators)来执行异常值检测, 并根据数据的进一步处理,丢弃/降低某些观察值。 - -`sklearn.covariance` 包实现了 robust estimator of covariance, 即 Minimum Covariance Determinant [[3]](#id14) 。 - -## 2.10.1\. 最小协方差决定 - -最小协方差决定(Minimum Covariance Determinant)估计器是 由 P.J. Rousseeuw 在 [[3]](#id14) 中引入的数据集协方差的鲁棒估计 (robust estimator)。 这个想法是找出一个给定比例(h)的 “好” 观察值,它们不是离群值, 且可以计算其经验协方差矩阵。 然后将该经验协方差矩阵重新缩放以补偿所执行的观察选择(”consistency step(一致性步骤)”)。 计算最小协方差决定估计器后,可以根据其马氏距离(Mahalanobis distance)给出观测值的权重, 这导致数据集的协方差矩阵的重新加权估计(”reweighting step(重新加权步骤)”)。 - -Rousseeuw 和 Van Driessen [[4]](#id15) 开发了 FastMCD 算法,以计算最小协方差决定因子(Minimum Covariance Determinant)。 在 scikit-learn 中,该算法在将 MCD 对象拟合到数据时应用。FastMCD 算法同时计算数据集位置的鲁棒估计。 - -Raw估计可通过 [`MinCovDet`](generated/sklearn.covariance.MinCovDet.html#sklearn.covariance.MinCovDet "sklearn.covariance.MinCovDet") 对象的 `raw_location_` 和 `raw_covariance_` 属性获得。 - -参考文献: - -| [3] | _([1](#id10), [2](#id12))_ P. J. Rousseeuw. Least median of squares regression. J. Am Stat Ass, 79:871, 1984. | - -| [[4]](#id13) | A Fast Algorithm for the Minimum Covariance Determinant Estimator, 1999, American Statistical Association and the American Society for Quality, TECHNOMETRICS. | - -例子: - -* See [Robust vs Empirical covariance estimate](../auto_examples/covariance/plot_robust_vs_empirical_covariance.html#sphx-glr-auto-examples-covariance-plot-robust-vs-empirical-covariance-py) 关于如何将对象 [`MinCovDet`](generated/sklearn.covariance.MinCovDet.html#sklearn.covariance.MinCovDet "sklearn.covariance.MinCovDet") 与数据拟合的示例, 尽管存在异常值,但估计结果仍然比较准确。 -* See [Robust covariance estimation and Mahalanobis distances relevance](../auto_examples/covariance/plot_mahalanobis_distances.html#sphx-glr-auto-examples-covariance-plot-mahalanobis-distances-py) 马氏距离(Mahalanobis distance),针对协方差估计器 [`EmpiricalCovariance`](generated/sklearn.covariance.EmpiricalCovariance.html#sklearn.covariance.EmpiricalCovariance "sklearn.covariance.EmpiricalCovariance") 和 [`MinCovDet`](generated/sklearn.covariance.MinCovDet.html#sklearn.covariance.MinCovDet "sklearn.covariance.MinCovDet") 之间的差异进行可视化。(所以我们得到了精度矩阵的更好估计) - -| Influence of outliers on location and covariance estimates | Separating inliers from outliers using a Mahalanobis distance | -| --- | --- | -| [![robust_vs_emp](img/e1b4d08b93d1d222e96d99475a766281.jpg)](../auto_examples/covariance/plot_robust_vs_empirical_covariance.html) | [![mahalanobis](img/89807b9fa9f5924b027486f280324b1a.jpg)](../auto_examples/covariance/plot_mahalanobis_distances.html) | \ No newline at end of file diff --git a/docs/0.19.x/3.md b/docs/0.19.x/3.md deleted file mode 100755 index 5bc041f8bc95f71473fc7a665e8d37b7e428cbac..0000000000000000000000000000000000000000 --- a/docs/0.19.x/3.md +++ /dev/null @@ -1,99 +0,0 @@ -# 1.2\. 线性和二次判别分析 - -校验者: -        [@AnybodyHome](https://github.com/AnybodyHome) -        [@numpy](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@FAME](https://github.com/apachecn/scikit-learn-doc-zh) - -Linear Discriminant Analysis(线性判别分析)([`discriminant_analysis.LinearDiscriminantAnalysis`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis "sklearn.discriminant_analysis.LinearDiscriminantAnalysis")) 和 Quadratic Discriminant Analysis (二次判别分析)([`discriminant_analysis.QuadraticDiscriminantAnalysis`](generated/sklearn.discriminant_analysis.QuadraticDiscriminantAnalysis.html#sklearn.discriminant_analysis.QuadraticDiscriminantAnalysis "sklearn.discriminant_analysis.QuadraticDiscriminantAnalysis")) 是两个经典的分类器。 正如他们名字所描述的那样,他们分别代表了线性决策平面和二次决策平面。 - -这些分类器十分具有吸引力,因为他们可以很容易计算得到闭式解(即解析解),其天生具有多分类的特性,在实践中已经被证明很有效,并且无需调参。 - -**[![ldaqda](img/d49c17958d641e42faa6fd3a46ac860a.jpg)](../auto_examples/classification/plot_lda_qda.html)** - -以上这些图像展示了 Linear Discriminant Analysis (线性判别分析)以及 Quadratic Discriminant Analysis (二次判别分析)的决策边界。其中,最后一行表明了线性判别分析只能学习线性边界, 而二次判别分析则可以学习二次边界,因此它相对而言更加灵活。 - -示例: - -[Linear and Quadratic Discriminant Analysis with covariance ellipsoid](../auto_examples/classification/plot_lda_qda.html#sphx-glr-auto-examples-classification-plot-lda-qda-py): LDA和QDA在特定数据上的对比 - -## 1.2.1\. 使用线性判别分析来降维 - -[`discriminant_analysis.LinearDiscriminantAnalysis`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis "sklearn.discriminant_analysis.LinearDiscriminantAnalysis") 通过把输入的数据投影到由最大化类之间分离的方向所组成的线性子空间,可以执行有监督降维(详细的内容见下面的数学推导)。输出的维度必然会比原来的类别数量更少的。因此它总体而言是十分强大的降维方式,同样也仅仅在多分类环境下才能感觉到。 - -实现方式在 [`discriminant_analysis.LinearDiscriminantAnalysis.transform`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis.transform "sklearn.discriminant_analysis.LinearDiscriminantAnalysis.transform") 中。关于维度的数量可以通过 `n_components` 参数来调节。 值得注意的是,这个参数不会对 [`discriminant_analysis.LinearDiscriminantAnalysis.fit`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis.fit "sklearn.discriminant_analysis.LinearDiscriminantAnalysis.fit") 或者 [`discriminant_analysis.LinearDiscriminantAnalysis.predict`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis.predict "sklearn.discriminant_analysis.LinearDiscriminantAnalysis.predict") 产生影响。 - -示例: - -[Comparison of LDA and PCA 2D projection of Iris dataset](../auto_examples/decomposition/plot_pca_vs_lda.html#sphx-glr-auto-examples-decomposition-plot-pca-vs-lda-py): 在 Iris 数据集对比 LDA 和 PCA 之间的降维差异 - -## 1.2.2\. LDA 和 QDA 分类器的数学公式 - -LDA 和 QDA 都是源于简单的概率模型,这些模型对于每一个类别 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 的相关分布 ![P(X|y=k)](img/a71a1d9e35b09d284da476b2175edf6f.jpg) 都可以通过贝叶斯定理所获得。 - -![P(y=k | X) = \frac{P(X | y=k) P(y=k)}{P(X)} = \frac{P(X | y=k) P(y = k)}{ \sum_{l} P(X | y=l) \cdot P(y=l)}](img/accc37ed7ec2ed38ec70c71f5d6aeebe.jpg) - -我们选择最大化条件概率的类别 ![k](img/f93871977da52a6d11045d57c3e18728.jpg). - -更具体地说,对于线性以及二次判别分析, ![P(X|y)](img/85f7fc9836edfbdcd2a7533674940b46.jpg) 被建模成密度多变量高斯分布: - -![p(X | y=k) = \frac{1}{(2\pi)^n |\Sigma_k|^{1/2}}\exp\left(-\frac{1}{2} (X-\mu_k)^t \Sigma_k^{-1} (X-\mu_k)\right)](img/6f25bd1d6d3abb565ca3007f8ac1d855.jpg) - -为了把该模型作为分类器使用,我们只需要从训练数据中估计出类的先验概率 ![P(y=k)](img/a25320a2e009abd4269f291f85062a5d.jpg) (通过每个类 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 的实例的比例得到) 类别均值 ![\mu_k](img/fdff527ccbac4fd87c2ca9c4bed5fce2.jpg) (通过经验样本的类别均值得到)以及协方差矩阵(通过经验样本的类别协方差或者正则化的估计器 estimator 得到: 见下面的 shrinkage 章节)。 - -```py -在 LDA 中,每个类别 的高斯分布共享相同的协方差矩阵: for all 。这导致了两者之间的线性决策表面,这可以通过比较对数概率比看出来 -``` - -![\log[P(y=k | X) / P(y=l | X)]](img/fd132d0faf19fdc76254a6317ed1acfd.jpg) 。 - -![\log\left(\frac{P(y=k|X)}{P(y=l | X)}\right) = 0 \Leftrightarrow (\mu_k-\mu_l)\Sigma^{-1} X = \frac{1}{2} (\mu_k^t \Sigma^{-1} \mu_k - \mu_l^t \Sigma^{-1} \mu_l)](img/2a0c137e7b86ad939e131293a273579b.jpg) - -在 QDA 中,没有关于高斯协方差矩阵 ![\Sigma_k](img/ffecfca02992b6a85e966c9440cb40dd.jpg) 的假设,因此有了二次决策平面. 更多细节见 [[3]](#id7) . - -Note - -**与高斯朴素贝叶斯的关系** - -如果在QDA模型中假设协方差矩阵是对角的,则输入被假设为在每个类中是条件独立的,所得的分类器等同于高斯朴素贝叶斯分类器 [`naive_bayes.GaussianNB`](generated/sklearn.naive_bayes.GaussianNB.html#sklearn.naive_bayes.GaussianNB "sklearn.naive_bayes.GaussianNB") 相同。 - -## 1.2.3\. LDA 的降维数学公式 - -为了理解 LDA 在降维上的应用,从上面解释的 LDA 分类规则的几何重构开始是十分有用的。我们用 ![K](img/e279b8169ddd6581c5606c868ba52fae.jpg) 表示目标类别的总数。 由于在 LDA 中我们假设所有类别都有相同估计的协方差 ![\Sigma](img/2ca002ed0f4e27f9040d3f3ec58fbb38.jpg) ,所以我们可重新调节数据从而让协方差相同。 - -![X^* = D^{-1/2}U^t X\text{ with }\Sigma = UDU^t](img/7682696b3b598c55d49ca030059f0a18.jpg) - -```py -在缩放之后对数据点进行分类相当于找到与欧几里得距离中的数据点最接近的估计类别均值。但是它也可以在投影到 个由所有 个类生成的仿射子空间 -``` - -![H_K](img/499e262369261799dec950eb33da9ccf.jpg) 之后完成。这也表明,LDA 分类器中存在一个利用线性投影到 ![K-1](img/7ce09555ac9e490df7f81ef7eb0e58e8.jpg) 个维度空间的降维工具。 - -通过投影到线性子空间 ![H_L](img/7df17fc33fdb4c71b329c593ad30f47e.jpg) 上,我们可以进一步将维数减少到一个选定的 ![L](img/639e82f3829a0ad677110cc33a028c98.jpg) ,从而使投影后的 ![\mu^*_k](img/d6293957048ac05c3ae0dfac9949537c.jpg) 的方差最大化(实际上,为了实现转换类均值 ![\mu^*_k](img/d6293957048ac05c3ae0dfac9949537c.jpg),我们正在做一种形式的 PCA)。 这里的 ![L](img/639e82f3829a0ad677110cc33a028c98.jpg) 对应于 [`discriminant_analysis.LinearDiscriminantAnalysis.transform`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis.transform "sklearn.discriminant_analysis.LinearDiscriminantAnalysis.transform") 方法中使用的 `n_components` 参数。 详情参考 [[3]](#id7) 。 - -## 1.2.4\. Shrinkage(收缩) - -收缩是一种在训练样本数量相比特征而言很小的情况下可以提升的协方差矩阵预测(准确性)的工具。 在这个情况下,经验样本协方差是一个很差的预测器。收缩 LDA 可以通过设置 [`discriminant_analysis.LinearDiscriminantAnalysis`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis "sklearn.discriminant_analysis.LinearDiscriminantAnalysis") 类的 `shrinkage` 参数为 ‘auto’ 来实现。 - -`shrinkage` parameter (收缩参数)的值同样也可以手动被设置为 0-1 之间。特别地,0 值对应着没有收缩(这意味着经验协方差矩阵将会被使用), 而 1 值则对应着完全使用收缩(意味着方差的对角矩阵将被当作协方差矩阵的估计)。设置该参数在两个极端值之间会估计一个(特定的)协方差矩阵的收缩形式 - -**[![shrinkage](img/d5021b539c18587624a07ef6df00f585.jpg)](../auto_examples/classification/plot_lda.html)** - -## 1.2.5\. 预估算法 - -默认的 solver 是 ‘svd’。它可以进行classification (分类) 以及 transform (转换),而且它不会依赖于协方差矩阵的计算(结果)。这在特征数量特别大的时候十分具有优势。然而,’svd’ solver 无法与 shrinkage (收缩)同时使用。 - -‘lsqr’ solver 则是一个高效的算法,它仅用于分类使用。它支持 shrinkage (收缩)。 - -‘eigen’(特征) solver 是基于 class scatter (类散度)与 class scatter ratio (类内离散率)之间的优化。 它可以被用于 classification (分类)以及 transform (转换),此外它还同时支持收缩。然而,该解决方案需要计算协方差矩阵,因此它可能不适用于具有大量特征的情况。 - -Examples: - -[Normal and Shrinkage Linear Discriminant Analysis for classification](../auto_examples/classification/plot_lda.html#sphx-glr-auto-examples-classification-plot-lda-py): Comparison of LDA classifiers with and without shrinkage. - -References: - -| [3] | _([1](#id4), [2](#id5))_ “The Elements of Statistical Learning”, Hastie T., Tibshirani R., Friedman J., Section 4.3, p.106-119, 2008. | - -| [4] | Ledoit O, Wolf M. Honey, I Shrunk the Sample Covariance Matrix. The Journal of Portfolio Management 30(4), 110-119, 2004. | \ No newline at end of file diff --git a/docs/0.19.x/30.md b/docs/0.19.x/30.md deleted file mode 100755 index c4383acb7c8b147210a79d2b5b27d0be1d8bb9a9..0000000000000000000000000000000000000000 --- a/docs/0.19.x/30.md +++ /dev/null @@ -1,138 +0,0 @@ -# 2.11\. 新奇和异常值检测 - -校验者: -        [@RyanZhiNie](https://github.com/RyanZhiNie) -        [@羊三](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@羊三](https://github.com/apachecn/scikit-learn-doc-zh) - -许多应用需要能够对新观测进行判断,判断其是否与现有观测服从同一分布(即新观测为内围值),相反则被认为不服从同一分布(即新观测为异常值)。 通常,这种能力被用于清理实际的数据集。必须做出两种重要区分: - - -| 新奇检测: | 训练数据未被异常值污染,我们对于新观测中的异常情况有兴趣检测。 | -| --- | --- | -| 异常值检测: | 训练数据包含异常值,我们需要拟合出训练数据的中心模式,以忽略有偏差的观测。 | -| --- | --- | - -scikit-learn项目提供了一套可用于新奇或异常值检测的机器学习工具。 该策略是以无监督的方式学习数据中的对象来实现的: - -```py -estimator.fit(X_train) - -``` - -然后可以使用 <cite>predict</cite> 方法将新观测归为内围值或异常值: - -```py -estimator.predict(X_test) - -``` - -内围值被标记为1,而异常值被标记为-1。 - -## 2.11.1\. Novelty Detection(新奇检测) - -考虑一个来自同一分布的数据集,以 ![p](img/e2f9b08680b30cfb80102f69264fdd5c.jpg) 个特征描述、有 ![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) 个观测。 现在考虑我们再往该数据集中添加一个观测。 如果新观测与原有观测有很大差异,我们就可以怀疑它是否是内围值吗? (即是否来自同一分布?)或者相反,如果新观测与原有观测很相似,我们就无法将其与原有观测区分开吗? 这就是新奇检测工具和方法所解决的问题。 - -一般来说,它将要学习出一个粗略且紧密的边界,界定出初始观测分布的轮廓,绘制在相互嵌入的 ![p](img/e2f9b08680b30cfb80102f69264fdd5c.jpg) 维空间中。 那么,如果后续的观测在边界划分的子空间内,则它们被认为来自与初始观测相同的总体。 否则,如果它们在边界之外,我们可以说就我们评估中给定的置信度而言,它们是异常值。 - -One-Class SVM(一类支持向量机)已经由 Schölkopf 等人采用以实现新奇检测,并在 [支持向量机](svm.html#svm) 模块的 [`svm.OneClassSVM`](generated/sklearn.svm.OneClassSVM.html#sklearn.svm.OneClassSVM "sklearn.svm.OneClassSVM") 对象中实现。 需要选择 kernel 和 scalar 参数来定义边界。 通常选择 RBF kernel,即使没有确切的公式或算法来设置其带宽参数。 这是 scikit-learn 实现中的默认值。 ![\nu](img/f996477bc9806499e6b6a1ea4d9ae8eb.jpg) 参数,也称为一类支持向量机的边沿,对应于在边界之外找到新的但内围的观测的概率。 - -参考文献: - -* [Estimating the support of a high-dimensional distribution](http://dl.acm.org/citation.cfm?id=1119749) Schölkopf, Bernhard, et al. Neural computation 13.7 (2001): 1443-1471. - -例子: - -* 参见 [One-class SVM with non-linear kernel (RBF)](../auto_examples/svm/plot_oneclass.html#sphx-glr-auto-examples-svm-plot-oneclass-py) ,通过 [`svm.OneClassSVM`](generated/sklearn.svm.OneClassSVM.html#sklearn.svm.OneClassSVM "sklearn.svm.OneClassSVM") 对象学习一些数据来将边界可视化。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_oneclass_0011.png](img/b29b59eca5c581c3f54d92c1671f2b2e.jpg)](../auto_examples/svm/plot_oneclass.html) - -## 2.11.2\. Outlier Detection(异常值检测) - -异常值检测类似于新奇检测,其目的是将内围观测的中心与一些被称为 “异常值” 的污染数据进行分离。 然而,在异常值检测的情况下,我们没有干净且适用于训练任何工具的数据集来代表内围观测的总体。 - -### 2.11.2.1\. Fitting an elliptic envelope(椭圆模型拟合) - -实现异常值检测的一种常见方式是假设内围数据来自已知分布(例如,数据服从高斯分布)。 从这个假设来看,我们通常试图定义数据的 “形状”,并且可以将异常观测定义为足够远离拟合形状的观测。 - -scikit-learn 提供了 [`covariance.EllipticEnvelope`](generated/sklearn.covariance.EllipticEnvelope.html#sklearn.covariance.EllipticEnvelope "sklearn.covariance.EllipticEnvelope") 对象,它能拟合出数据的稳健协方差估计,从而为中心数据点拟合出一个椭圆,忽略中心模式之外的点。 - -例如,假设内围数据服从高斯分布,它将稳健地(即不受异常值的影响)估计内围位置和协方差。 从该估计得到的马氏距离用于得出异常度量。 该策略如下图所示。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_mahalanobis_distances_0011.png](img/89807b9fa9f5924b027486f280324b1a.jpg)](../auto_examples/covariance/plot_mahalanobis_distances.html) - -示例: - -* 参见 [Robust covariance estimation and Mahalanobis distances relevance](../auto_examples/covariance/plot_mahalanobis_distances.html#sphx-glr-auto-examples-covariance-plot-mahalanobis-distances-py) 说明对位置和协方差使用标准估计 ([`covariance.EmpiricalCovariance`](generated/sklearn.covariance.EmpiricalCovariance.html#sklearn.covariance.EmpiricalCovariance "sklearn.covariance.EmpiricalCovariance")) 或稳健估计 ([`covariance.MinCovDet`](generated/sklearn.covariance.MinCovDet.html#sklearn.covariance.MinCovDet "sklearn.covariance.MinCovDet")) 来评估观测的异常程度的差异。 - -参考文献: - -* Rousseeuw, P.J., Van Driessen, K. “A fast algorithm for the minimum covariance determinant estimator” Technometrics 41(3), 212 (1999) - -### 2.11.2.2\. Isolation Forest(隔离森林) - -```py -在高维数据集中实现异常值检测的一种有效方法是使用随机森林。 -``` - -[`ensemble.IsolationForest`](generated/sklearn.ensemble.IsolationForest.html#sklearn.ensemble.IsolationForest "sklearn.ensemble.IsolationForest") 通过随机选择特征然后随机选择所选特征的最大值和最小值之间的分割值来隔离观测。 - -由于递归划分可以由树形结构表示,因此隔离样本所需的分割次数等同于从根节点到终止节点的路径长度。 - -在这样的随机树的森林中取平均的路径长度是数据正态性和我们的决策功能的量度。 - -随机划分能为异常观测产生明显的较短路径。 因此,当随机树的森林共同为特定样本产生较短的路径长度时,这些样本就很有可能是异常观测。 - -该策略如下图所示。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_isolation_forest_0011.png](img/769ae28b43c9c1f02556a7d6d878c7e0.jpg)](../auto_examples/ensemble/plot_isolation_forest.html) - -例子: - -* 参见 [IsolationForest example](../auto_examples/ensemble/plot_isolation_forest.html#sphx-glr-auto-examples-ensemble-plot-isolation-forest-py) 说明隔离森林的用法。 -* 参见 [Outlier detection with several methods.](../auto_examples/covariance/plot_outlier_detection.html#sphx-glr-auto-examples-covariance-plot-outlier-detection-py) 比较 [`ensemble.IsolationForest`](generated/sklearn.ensemble.IsolationForest.html#sklearn.ensemble.IsolationForest "sklearn.ensemble.IsolationForest") 与 [`neighbors.LocalOutlierFactor`](generated/sklearn.neighbors.LocalOutlierFactor.html#sklearn.neighbors.LocalOutlierFactor "sklearn.neighbors.LocalOutlierFactor"), [`svm.OneClassSVM`](generated/sklearn.svm.OneClassSVM.html#sklearn.svm.OneClassSVM "sklearn.svm.OneClassSVM") (调整为执行类似异常值检测的方法)和基于协方差使用 [`covariance.EllipticEnvelope`](generated/sklearn.covariance.EllipticEnvelope.html#sklearn.covariance.EllipticEnvelope "sklearn.covariance.EllipticEnvelope") 进行异常值检测。 - -参考文献: - -* Liu, Fei Tony, Ting, Kai Ming and Zhou, Zhi-Hua. “Isolation forest.” Data Mining, 2008\. ICDM‘08\. Eighth IEEE International Conference on. - -### 2.11.2.3\. Local Outlier Factor(局部异常系数) - -对中等高维数据集实现异常值检测的另一种有效方法是使用局部异常系数(LOF)算法。 - -> [`neighbors.LocalOutlierFactor`](generated/sklearn.neighbors.LocalOutlierFactor.html#sklearn.neighbors.LocalOutlierFactor "sklearn.neighbors.LocalOutlierFactor") (LOF)算法计算出反映观测异常程度的得分(称为局部异常系数)。 它测量给定数据点相对于其邻近点的局部密度偏差。 算法思想是检测出具有比其邻近点明显更低密度的样本。 - -实际上,局部密度从 k 个最近邻得到。 观测数据的 LOF 得分等于其 k 个最近邻的平均局部密度与其本身密度的比值:正常情况预期具有与其近邻类似的局部密度,而异常数据 则预计比局部密度要小得多。 - -考虑的k个近邻数(别名参数 n_neighbors )通常选择 1) 大于聚类必须包含的对象最小数量,以便其它对象相对于该聚类成为局部异常值,并且 2) 小于可能成为局部异常值对象的最大数量。 在实践中,这样的信息通常不可用,并且使 n_neighbors = 20 似乎通常都能很好地工作。 当异常值的比例较高时(即大于 10% 时,如下面的例子),n_neighbors 应该较大(在下面的例子中,n_neighbors = 35)。 - -LOF 算法的优点是考虑到数据集的局部和全局属性:即使在异常样本具有不同潜在密度的数据集中,它也能够表现得很好。 问题不在于样本是如何被分离的,而是样本与周围近邻的分离程度有多大。 - -该策略如下图所示。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_lof_0011.png](img/7a958d3bae3db42cc0811b186bbc4e00.jpg)](../auto_examples/neighbors/plot_lof.html) - -示例: - -* 参见 [Anomaly detection with Local Outlier Factor (LOF)](../auto_examples/neighbors/plot_lof.html#sphx-glr-auto-examples-neighbors-plot-lof-py) 的 [`neighbors.LocalOutlierFactor`](generated/sklearn.neighbors.LocalOutlierFactor.html#sklearn.neighbors.LocalOutlierFactor "sklearn.neighbors.LocalOutlierFactor") 使用说明。 -* 参见 [Outlier detection with several methods.](../auto_examples/covariance/plot_outlier_detection.html#sphx-glr-auto-examples-covariance-plot-outlier-detection-py) 与其它异常检测方法进行比较。 - -参考文献: - -* Breunig, Kriegel, Ng, and Sander (2000) [LOF: identifying density-based local outliers.](http://www.dbs.ifi.lmu.de/Publikationen/Papers/LOF.pdf) Proc. ACM SIGMOD - -### 2.11.2.4\. 一类支持向量机与椭圆模型与隔离森林与局部异常系数 - -严格来说, One-class SVM (一类支持向量机)不是异常值检测方法,而是一种新奇检测方法:其训练集不应该被异常值污染,因为算法可能将它们拟合。 也就是说,高维度的异常值检测或对数据分布不做任何假设是非常具有挑战性的, 而一类支持向量机在这些情况下产生出有用的结果。 - -下面的例子说明了当数据越来越不单峰时, [`covariance.EllipticEnvelope`](generated/sklearn.covariance.EllipticEnvelope.html#sklearn.covariance.EllipticEnvelope "sklearn.covariance.EllipticEnvelope") 的表现越来越差。 [`svm.OneClassSVM`](generated/sklearn.svm.OneClassSVM.html#sklearn.svm.OneClassSVM "sklearn.svm.OneClassSVM") 在具有多种模式的数据上表现得更好, [`ensemble.IsolationForest`](generated/sklearn.ensemble.IsolationForest.html#sklearn.ensemble.IsolationForest "sklearn.ensemble.IsolationForest") 和 [`neighbors.LocalOutlierFactor`](generated/sklearn.neighbors.LocalOutlierFactor.html#sklearn.neighbors.LocalOutlierFactor "sklearn.neighbors.LocalOutlierFactor") 在每种情况下都表现良好。 - -**Comparing One-class SVM, Isolation Forest, LOF, and Elliptic Envelope** -| 对于中心化和椭圆形的内围模式, [`svm.OneClassSVM`](generated/sklearn.svm.OneClassSVM.html#sklearn.svm.OneClassSVM "sklearn.svm.OneClassSVM") 不适用于内围总体的旋转对称性。 此外,它拟合了一小部分存在于训练集中的异常值。 相反,基于拟合 [`covariance.EllipticEnvelope`](generated/sklearn.covariance.EllipticEnvelope.html#sklearn.covariance.EllipticEnvelope "sklearn.covariance.EllipticEnvelope") 的决策规则学习出一个椭圆,对于内围分布拟合良好。 [`ensemble.IsolationForest`](generated/sklearn.ensemble.IsolationForest.html#sklearn.ensemble.IsolationForest "sklearn.ensemble.IsolationForest") 和 [`neighbors.LocalOutlierFactor`](generated/sklearn.neighbors.LocalOutlierFactor.html#sklearn.neighbors.LocalOutlierFactor "sklearn.neighbors.LocalOutlierFactor") 也表现良好。 | [![outlier1](img/84298218bd1f4087ce7f8d55a4de1843.jpg)](../auto_examples/covariance/plot_outlier_detection.html) | -| 由于内围分布变为双峰,所以 [`covariance.EllipticEnvelope`](generated/sklearn.covariance.EllipticEnvelope.html#sklearn.covariance.EllipticEnvelope "sklearn.covariance.EllipticEnvelope") 对内围数据拟合得不好。 但是,我们可以看到 [`ensemble.IsolationForest`](generated/sklearn.ensemble.IsolationForest.html#sklearn.ensemble.IsolationForest "sklearn.ensemble.IsolationForest"), [`svm.OneClassSVM`](generated/sklearn.svm.OneClassSVM.html#sklearn.svm.OneClassSVM "sklearn.svm.OneClassSVM") 和 [`neighbors.LocalOutlierFactor`](generated/sklearn.neighbors.LocalOutlierFactor.html#sklearn.neighbors.LocalOutlierFactor "sklearn.neighbors.LocalOutlierFactor") 难以检测双峰,而且 [`svm.OneClassSVM`](generated/sklearn.svm.OneClassSVM.html#sklearn.svm.OneClassSVM "sklearn.svm.OneClassSVM") 往往会过拟合:因为它没有内围模型, 便随机地把一些异常值当做内围值聚类在某个区域。 | [![outlier2](img/d7e5ca264ffbd335db57ba194e2a5d0f.jpg)](../auto_examples/covariance/plot_outlier_detection.html) | -| 如果内围分布极度不正态,则 [`svm.OneClassSVM`](generated/sklearn.svm.OneClassSVM.html#sklearn.svm.OneClassSVM "sklearn.svm.OneClassSVM"), [`ensemble.IsolationForest`](generated/sklearn.ensemble.IsolationForest.html#sklearn.ensemble.IsolationForest "sklearn.ensemble.IsolationForest") 和 [`neighbors.LocalOutlierFactor`](generated/sklearn.neighbors.LocalOutlierFactor.html#sklearn.neighbors.LocalOutlierFactor "sklearn.neighbors.LocalOutlierFactor") 能构造出合理的近似结果, 而 [`covariance.EllipticEnvelope`](generated/sklearn.covariance.EllipticEnvelope.html#sklearn.covariance.EllipticEnvelope "sklearn.covariance.EllipticEnvelope") 完全失败。 | [![outlier3](img/9e49f9c5d629711b032b027324d531b9.jpg)](../auto_examples/covariance/plot_outlier_detection.html) | - -示例: - -* 参见 [Outlier detection with several methods.](../auto_examples/covariance/plot_outlier_detection.html#sphx-glr-auto-examples-covariance-plot-outlier-detection-py) 比较 [`svm.OneClassSVM`](generated/sklearn.svm.OneClassSVM.html#sklearn.svm.OneClassSVM "sklearn.svm.OneClassSVM") (调整为执行类似异常值检测的方法), [`ensemble.IsolationForest`](generated/sklearn.ensemble.IsolationForest.html#sklearn.ensemble.IsolationForest "sklearn.ensemble.IsolationForest"), [`neighbors.LocalOutlierFactor`](generated/sklearn.neighbors.LocalOutlierFactor.html#sklearn.neighbors.LocalOutlierFactor "sklearn.neighbors.LocalOutlierFactor") 和基于协方差使用 [`covariance.EllipticEnvelope`](generated/sklearn.covariance.EllipticEnvelope.html#sklearn.covariance.EllipticEnvelope "sklearn.covariance.EllipticEnvelope") 进行异常值检测。 \ No newline at end of file diff --git a/docs/0.19.x/31.md b/docs/0.19.x/31.md deleted file mode 100755 index c97aad7878522a1edd75203eec352805b583810c..0000000000000000000000000000000000000000 --- a/docs/0.19.x/31.md +++ /dev/null @@ -1,95 +0,0 @@ -# 2.12\. 密度估计 - -校验者: -        [@不将就](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@Xi](https://github.com/apachecn/scikit-learn-doc-zh) - -密度估计在无监督学习,特征工程和数据建模之间划分了界线。一些最流行和最有用的密度估计方法是混合模型,如高斯混合( [`sklearn.mixture.GaussianMixture`](generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture "sklearn.mixture.GaussianMixture") ), 和基于邻近的方法( [`sklearn.neighbors.KernelDensity`](generated/sklearn.neighbors.KernelDensity.html#sklearn.neighbors.KernelDensity "sklearn.neighbors.KernelDensity") ),如核密度估计。 [clustering](clustering.html#clustering) 一节中更充分地讨论了高斯混合,因为此方法也用作为一种无监督聚类方案。 - -密度估计是一个非常简单的概念,大多数人已经熟悉了其中一种常用的密度估计技术:直方图。 - -## 2.12.1\. 密度估计: 直方图 - -直方图是一种简单的数据可视化方法,其中定义了组( bins ),并且统计了每个组( bin )中的数据点的数量。在下图的左上角中可以看到一个直方图的例子: - -**[![hist_to_kde](img/10a8344b866fca53744b728ef788a668.jpg)](../auto_examples/neighbors/plot_kde_1d.html)** - -然而,直方图的一个主要问题是组( binning )的选择可能会对得到的可视化结果造成不相称的影响。考虑上图中右上角的图, 它显示了相同数据下组( bins )向右移动后的直方图。这两个可视化的结果看起来完全不同,可能会导致对数据作出不同的解释。 - -直观地说,你也可以把一个直方图看成由一堆块组成,每个点上放一个块,通过在合适的网格空间中堆积这些块,我们就可以得到直方图。但是,如果不是把这些块堆叠在一个规则的网格上,而是把每个块的中心定位在它所代表的点上,然后把每个位置的总高度相加呢?这样可以得到如上图左 下角所示的可视化.它可能不像直方图那样整洁,但是由数据决定块的位置意味着它能更好地表示基本的数据。 - -这个可视化是核密度估计的一个例子,该例中用的是一种”顶帽”核(即每个点上的方块)。我们可以通过使用一种更平滑的核来得到一个更平滑的分布。上图右下角展示了一个高斯核密度估计,其中每个点都给总的分布贡献一条高斯曲线。结果是从数据中得到了一个平滑的密度估计,并且可作为一个强大的非参数模型用来估计这些点的分布。 - -## 2.12.2\. 核密度估计 - -[`sklearn.neighbors.KernelDensity`](generated/sklearn.neighbors.KernelDensity.html#sklearn.neighbors.KernelDensity "sklearn.neighbors.KernelDensity") 实现了 scikit-learn 中的核密度估计,它使用 Ball Tree 或 KD Tree 来进行高效查询(有关这些讨论请参见 [最近邻](neighbors.html#neighbors) )。尽管为了简单起见上述示例采用的是一维数据集,但实际上核密度估计能够用在任意维度上, 不过在实际应用中,维数灾难会导致其在高维上的性能降低。 - -如下图所示, 从双峰分布中绘制了100个点,并展示了选用三个不同核的核密度估计: - -**[![kde_1d_distribution](img/dda3ed622f104bd7e6abffbcb1691998.jpg)](../auto_examples/neighbors/plot_kde_1d.html)** - -图中可以很明显地看到核的形状如何影响结果分布的平滑度. 使用 scikit-learn 核密度估计的方法如下所示: - -```py ->>> from sklearn.neighbors.kde import KernelDensity ->>> import numpy as np ->>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]) ->>> kde = KernelDensity(kernel='gaussian', bandwidth=0.2).fit(X) ->>> kde.score_samples(X) -array([-0.41075698, -0.41075698, -0.41076071, -0.41075698, -0.41075698, - -0.41076071]) - -``` - -如上所示,这里我们选用的是高斯核 `kernel='gaussian'` .在数学上,核是由带宽参数 ![h](img/c5f49595b56010ad04fce358940848e5.jpg) 控制的正值函数 ![K(x;h)](img/3dae1c97513f643047c2e33ee90ca8b5.jpg) . 给定核的形状后,在一组点 ![x_i; i=1\cdots N](img/fae30a190cd9e5f5d06f534d956df5f5.jpg) 内的 ![y](img/0775c03fc710a24df297dedcec515aaf.jpg) 点处的密度估计由下式给出: - -![\rho_K(y) = \sum_{i=1}^{N} K((y - x_i) / h)](img/8c8211edce4dbaeb44032f8d71a12135.jpg) - -这里的带宽作为平滑参数,用来平衡结果中偏差和方差的值。 大的带宽会导致非常平滑(即高偏差)密度分布,而小的带宽则导致不平滑(即高方差)密度分布。 - -[`sklearn.neighbors.KernelDensity`](generated/sklearn.neighbors.KernelDensity.html#sklearn.neighbors.KernelDensity "sklearn.neighbors.KernelDensity") 实现了一些常见形状的核, 如下图所示: - -**[![kde_kernels](img/f1fc9ca63c663059f76c2af6729189d1.jpg)](../auto_examples/neighbors/plot_kde_1d.html)** - -这些核的形式如下所示: - -* Gaussian kernel (`kernel = 'gaussian'`) - - ![K(x; h) \propto \exp(- \frac{x^2}{2h^2} )](img/a960dd9452e5e5da7b211f6fdc120a0d.jpg) - -* Tophat kernel (`kernel = 'tophat'`) - - ![K(x; h) \propto 1](img/2a58cf81e4ccf9022d6033557d49aed5.jpg) if ![x < h](img/7d1d547b1a46ad827caeb7f0e85b213d.jpg) - -* Epanechnikov kernel (`kernel = 'epanechnikov'`) - - ![K(x; h) \propto 1 - \frac{x^2}{h^2}](img/088266f72839f4195c9058dfd17d778b.jpg) - -* Exponential kernel (`kernel = 'exponential'`) - - ![K(x; h) \propto \exp(-x/h)](img/3944d32654b4bf939d248b496f950b10.jpg) - -* Linear kernel (`kernel = 'linear'`) - - ![K(x; h) \propto 1 - x/h](img/81da9e05103270be5e500ebc67cd1b45.jpg) if ![x < h](img/7d1d547b1a46ad827caeb7f0e85b213d.jpg) - -* Cosine kernel (`kernel = 'cosine'`) - - ![K(x; h) \propto \cos(\frac{\pi x}{2h})](img/6b0371e0d33eebe00fe5ec3d59de5b43.jpg) 如果 ![x < h](img/7d1d547b1a46ad827caeb7f0e85b213d.jpg) - -核密度估计可以与任何有效的距离度量一起使用(可用度量列表请参见 [`sklearn.neighbors.DistanceMetric`](generated/sklearn.neighbors.DistanceMetric.html#sklearn.neighbors.DistanceMetric "sklearn.neighbors.DistanceMetric") ), 但其结果被适当地归一化处理,仅适用于欧几里德度量标准。 一个特别有用的度量是测量球体上的点与点之间角距离 的 [Haversine distance](https://en.wikipedia.org/wiki/Haversine_formula) 。 下面是使用核密度估计来对地理空间数据进行可视化的示例,本例中南美大陆两种不同物种的观测分布如图: - -**[![species_kde](../Images/97b3ab2cc18a43b00c07a1cf6e118798.jpg)](../auto_examples/neighbors/plot_species_kde.html)** - -核密度估计的另一个有用的应用是从数据集中学习出一个非参数生成模型,以便有效地从该生成模型中绘制新的样本。 以下是使用此过程创建一组新的手写数字的示例,使用的是高斯核对数据的 PCA 投影进行学习: - -**[![digits_kde](img/de6303ad5b9808c7ae8c64ddc632d893.jpg)](../auto_examples/neighbors/plot_digits_kde_sampling.html)** - -“新”数据由输入数据线性组合而成,其权重根据 KDE 模型按概率给出。 - -示例: - -* [Simple 1D Kernel Density Estimation](../auto_examples/neighbors/plot_kde_1d.html#sphx-glr-auto-examples-neighbors-plot-kde-1d-py): 一维简单核密度估计的计算。 -* [Kernel Density Estimation](../auto_examples/neighbors/plot_digits_kde_sampling.html#sphx-glr-auto-examples-neighbors-plot-digits-kde-sampling-py): 使用核密度估计来学习手写数字数据生成模型,以及使用该模型绘制新样本的示例 -* [Kernel Density Estimate of Species Distributions](../auto_examples/neighbors/plot_species_kde.html#sphx-glr-auto-examples-neighbors-plot-species-kde-py): 使用Haversine距离度量来显示地理空间数据的核密度估计示例. \ No newline at end of file diff --git a/docs/0.19.x/32.md b/docs/0.19.x/32.md deleted file mode 100755 index 8f19286ca7dd803246b1bffe9aec793a44c28487..0000000000000000000000000000000000000000 --- a/docs/0.19.x/32.md +++ /dev/null @@ -1,82 +0,0 @@ -# 2.13\. 神经网络模型(无监督) - -校验者: -        [@不将就](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@夜神月](https://github.com/apachecn/scikit-learn-doc-zh) - -## 2.13.1\. 限制波尔兹曼机 - -Restricted Boltzmann machines (RBM)(限制玻尔兹曼机)是基于概率模型的无监督非线性特征学习器。当用 RBM 或 RBMs 中的层次结构提取的特征在馈入线性分类器(如线性支持向量机或感知机)时通常会获得良好的结果。 - -该模型对输入的分布作出假设。目前,scikit-learn 只提供了 [`BernoulliRBM`](generated/sklearn.neural_network.BernoulliRBM.html#sklearn.neural_network.BernoulliRBM "sklearn.neural_network.BernoulliRBM"),它假定输入是二值的,或者是 0 到 1 之间的值,每个值都编码特定特征被激活的概率。 - -RBM 尝试使用特定图形模型最大化数据的可能性。所使用的参数学习算法( [Stochastic Maximum Likelihood](#sml) (随机最大似然))要防止特征表示偏离输入数据,这使得它们能学习到有趣的特征,但使得该模型对于小数据集不太有用且通常对于密度估计无效。 - -该方法随着独立RBM的权重初始化深层神经网络而普及。这种方法被称为无监督的预训练(unsupervised pre-training)。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_rbm_logistic_classification_0011.png](img/3af1cb0026efe5789c3acf3669ff5bc6.jpg)](../auto_examples/neural_networks/plot_rbm_logistic_classification.html) - -示例: - -* [Restricted Boltzmann Machine features for digit classification](../auto_examples/neural_networks/plot_rbm_logistic_classification.html#sphx-glr-auto-examples-neural-networks-plot-rbm-logistic-classification-py) - -### 2.13.1.1\. 图形模型和参数化 - -RBM 的图形模型是一个全连接的二分图(fully-connected bipartite graph)。 - -![http://sklearn.apachecn.org/cn/0.19.0/_images/rbm_graph.png](img/0dd4aedd59a06ecbaead248c17a3ce80.jpg) - -节点是随机变量,其状态取决于它连接到的其他节点的状态。 因此,为了简单起见,模型被参数化为连接的权重以及每个可见和隐藏单元的一个偏置项。 我们用能量函数衡量联合概率分布的质量: - - -![E(\mathbf{v}, \mathbf{h}) = \sum_i \sum_j w_{ij}v_ih_j + \sum_i b_iv_i - + \sum_j c_jh_j](img/5959a6fe3c27570b7d474f26126eb628.jpg) - - -在上面的公式中, ![\mathbf{b}](img/4dee38783cbd4faef5d5639ce23a5c59.jpg) 和 ![\mathbf{c}](img/a4dd5119f3eeb13b99180aab64917975.jpg) 分别是可见层和隐藏层的偏置向量。 模型的联合概率是根据能量来定义的: - -![P(\mathbf{v}, \mathbf{h}) = \frac{e^{-E(\mathbf{v}, \mathbf{h})}}{Z}](img/224162d8cfff6c8ad85718be6b261b70.jpg) - -“限制”是指模型的二分图结构,它禁止隐藏单元之间或可见单元之间的直接交互。 这代表以下条件独立性成立: - - -![h_i \bot h_j | \mathbf{v} \\ -v_i \bot v_j | \mathbf{h}](img/9521899a181a367c5873e61b9f7785ce.jpg) - - -二分图结构允许使用高效的块吉比斯采样(block Gibbs sampling)进行推断。 - -### 2.13.1.2\. 伯努利限制玻尔兹曼机 - -在 [`BernoulliRBM`](generated/sklearn.neural_network.BernoulliRBM.html#sklearn.neural_network.BernoulliRBM "sklearn.neural_network.BernoulliRBM") 中,所有单位都是二进制随机单元。 这意味着输入数据应该是二进制的,或者在 0 和 1 之间的实数值表示可见单元活跃或不活跃的概率。 这是一个很好的字符识别模型,其中的关注点是哪些像素是活跃的,哪些不是。 对于自然场景的图像,它不再适合,因为背景,深度和相邻像素的趋势取相同的值。 - -每个单位的条件概率分布由其接收的输入的sigmoid函数给出: - - -![P(v_i=1|\mathbf{h}) = \sigma(\sum_j w_{ij}h_j + b_i) \\ -P(h_i=1|\mathbf{v}) = \sigma(\sum_i w_{ij}v_i + c_j)](img/e6811d3f6333e9490d602db8dc1e3d96.jpg) - - -其中 ![\sigma](img/8c4a5c99b21079b9fb1be49910ff96e3.jpg) 是Sigmoid函数: - -![\sigma(x) = \frac{1}{1 + e^{-x}}](img/f1c8c9b812ae1b6ec189eda900e47269.jpg) - -### 2.13.1.3\. 随机最大似然学习 - -在 [`BernoulliRBM`](generated/sklearn.neural_network.BernoulliRBM.html#sklearn.neural_network.BernoulliRBM "sklearn.neural_network.BernoulliRBM") 函数中实现的学习算法被称为随机最大似然(Stochastic Maximum Likelihood (SML))或持续对比发散(Persistent Contrastive Divergence (PCD))。由于数据的似然函数的形式,直接优化最大似然是不可行的: - -![\log P(v) = \log \sum_h e^{-E(v, h)} - \log \sum_{x, y} e^{-E(x, y)}](img/1252aa7af065b0afd424b2ff01b4e2a5.jpg) - -为了简单起见,上面的等式是针对单个训练样本所写的。相对于权重的梯度由对应于上述的两个项构成。根据它们的符号,它们通常被称为正梯度和负梯度。在这种实现中,按照小批量梯度(mini-batches of samples )对梯度进行计算。 - -在 maximizing the log-likelihood (最大化对数似然度)的情况下,正梯度使模型更倾向于与观察到的训练数据兼容的隐藏状态。由于 RBM 的二分体结构,可以有效地计算。然而,负梯度是棘手的。其目标是降低模型偏好的联合状态的能量,从而使数据保持真实。可以通过马尔可夫链蒙特卡罗近似,使用块 Gibbs 采样,通过迭代地对每个给定另一个的 ![v](img/ce7fd91ddb116ab5d747de0316caf657.jpg) 和 ![h](img/c5f49595b56010ad04fce358940848e5.jpg) 进行采样,直到链混合。以这种方式产生的样品有时被称为幻想粒子。这是无效的,很难确定马可夫链是否混合。 - -对比发散方法建议在经过少量迭代后停止链,![k](img/f93871977da52a6d11045d57c3e18728.jpg) 通常为 1.该方法快速且方差小,但样本远离模型分布。 - -持续的对比分歧解决这个问题。而不是每次需要梯度启动一个新的链,并且只执行一个 Gibbs 采样步骤,在 PCD 中,我们保留了在每个权重更新之后更新的 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) Gibbs 步长的多个链(幻想粒子)。这使得颗粒更彻底地探索空间. - -参考文献: - -* [“A fast learning algorithm for deep belief nets”](http://www.cs.toronto.edu/~hinton/absps/fastnc.pdf) G. Hinton, S. Osindero, Y.-W. Teh, 2006 -* [“Training Restricted Boltzmann Machines using Approximations to the Likelihood Gradient”](http://www.cs.toronto.edu/~tijmen/pcd/pcd.pdf) T. Tieleman, 2008 \ No newline at end of file diff --git a/docs/0.19.x/33.md b/docs/0.19.x/33.md deleted file mode 100755 index 8055516e0be7d95c4f7937cfb9bbbfb716ba8761..0000000000000000000000000000000000000000 --- a/docs/0.19.x/33.md +++ /dev/null @@ -1,110 +0,0 @@ -# 3\. 模型选择和评估 - -* [3.1\. 交叉验证:评估估算器的表现](/docs/34?id=_31-交叉验证:评估估算器的表现) - * [3.1.1\. 计算交叉验证的指标](/docs/34?id=_311-计算交叉验证的指标) - * [3.1.1.1\. cross_validate 函数和多度量评估](/docs/34?id=_3111-cross_validate-函数和多度量评估) - * [3.1.1.2\. 通过交叉验证获取预测](/docs/34?id=_3112-通过交叉验证获取预测) - * [3.1.2\. 交叉验证迭代器](/docs/34?id=_312-交叉验证迭代器) - * [3.1.3\. 交叉验证迭代器–循环遍历数据](/docs/34?id=_313-交叉验证迭代器–循环遍历数据) - * [3.1.3.1\. K 折](/docs/34?id=_3131-k-折) - * [3.1.3.2\. 重复 K-折交叉验证](/docs/34?id=_3132-重复-k-折交叉验证) - * [3.1.3.3\. 留一交叉验证 (LOO)](/docs/34?id=_3133-留一交叉验证-(loo) - * [3.1.3.4\. 留 P 交叉验证 (LPO)](/docs/34?id=_3134-留-p-交叉验证-(lpo) - * [3.1.3.5\. 随机排列交叉验证 a.k.a. Shuffle & Split](/docs/34?id=_3135-随机排列交叉验证-aka-shuffle-&-split) - * [3.1.4\. 基于类标签、具有分层的交叉验证迭代器](/docs/34?id=_314-基于类标签、具有分层的交叉验证迭代器) - * [3.1.4.1\. 分层 k 折](/docs/34?id=_3141-分层-k-折) - * [3.1.4.2\. 分层随机 Split](/docs/34?id=_3142-分层随机-split) - * [3.1.5\. 用于分组数据的交叉验证迭代器](/docs/34?id=_315-用于分组数据的交叉验证迭代器) - * [3.1.5.1\. 组 k-fold](/docs/34?id=_3151-组-k-fold) - * [3.1.5.2\. 留一组交叉验证](/docs/34?id=_3152-留一组交叉验证) - * [3.1.5.3\. 留 P 组交叉验证](/docs/34?id=_3153-留-p-组交叉验证) - * [3.1.5.4\. Group Shuffle Split](/docs/34?id=_3154-group-shuffle-split) - * [3.1.6\. 预定义的折叠 / 验证集](/docs/34?id=_316-预定义的折叠-/-验证集) - * [3.1.7\. 交叉验证在时间序列数据中应用](/docs/34?id=_317-交叉验证在时间序列数据中应用) - * [3.1.7.1\. 时间序列分割](/docs/34?id=_3171-时间序列分割) - * [3.1.8\. A note on shuffling](/docs/34?id=_318-a-note-on-shuffling) - * [3.1.9\. 交叉验证和模型选择](/docs/34?id=_319-交叉验证和模型选择) -* [3.2\. 调整估计器的超参数](/docs/35?id=_32-调整估计器的超参数) - * [3.2.1\. 网格追踪法–穷尽的网格搜索](/docs/35?id=_321-网格追踪法–穷尽的网格搜索) - * [3.2.2\. 随机参数优化](/docs/35?id=_322-随机参数优化) - * [3.2.3\. 参数搜索技巧](/docs/35?id=_323-参数搜索技巧) - * [3.2.3.1\. 指定目标度量](/docs/35?id=_3231-指定目标度量) - * [3.2.3.2\. 为评估指定多个指标](/docs/35?id=_3232-为评估指定多个指标) - * [3.2.3.3\. 复合估计和参数空间](/docs/35?id=_3233-复合估计和参数空间) - * [3.2.3.4\. 模型选择:开发和评估](/docs/35?id=_3234-模型选择:开发和评估) - * [3.2.3.5\. 并行机制](/docs/35?id=_3235-并行机制) - * [3.2.3.6\. 对故障的鲁棒性](/docs/35?id=_3236-对故障的鲁棒性) - * [3.2.4\. 暴力参数搜索的替代方案](/docs/35?id=_324-暴力参数搜索的替代方案) - * [3.2.4.1\. 模型特定交叉验证](/docs/35?id=_3241-模型特定交叉验证) - * [3.2.4.1.1\. `sklearn.linear_model`.ElasticNetCV](/docs/35?id=_32411-`sklearnlinear_model`elasticnetcv) - * [3.2.4.1.2\. `sklearn.linear_model`.LarsCV](/docs/35?id=_32412-`sklearnlinear_model`larscv) - * [3.2.4.1.3\. `sklearn.linear_model`.LassoCV](/docs/35?id=_32413-`sklearnlinear_model`lassocv) - * [3.2.4.1.3.1\. Examples using `sklearn.linear_model.LassoCV`](/docs/35?id=_324131-examples-using-`sklearnlinear_modellassocv`) - * [3.2.4.1.4\. `sklearn.linear_model`.LassoLarsCV](/docs/35?id=_32414-`sklearnlinear_model`lassolarscv) - * [3.2.4.1.4.1\. Examples using `sklearn.linear_model.LassoLarsCV`](/docs/35?id=_324141-examples-using-`sklearnlinear_modellassolarscv`) - * [3.2.4.1.5\. `sklearn.linear_model`.LogisticRegressionCV](/docs/35?id=_32415-`sklearnlinear_model`logisticregressioncv) - * [3.2.4.1.6\. `sklearn.linear_model`.MultiTaskElasticNetCV](/docs/35?id=_32416-`sklearnlinear_model`multitaskelasticnetcv) - * [3.2.4.1.7\. `sklearn.linear_model`.MultiTaskLassoCV](/docs/35?id=_32417-`sklearnlinear_model`multitasklassocv) - * [3.2.4.1.8\. `sklearn.linear_model`.OrthogonalMatchingPursuitCV](/docs/35?id=_32418-`sklearnlinear_model`orthogonalmatchingpursuitcv) - * [3.2.4.1.8.1\. Examples using `sklearn.linear_model.OrthogonalMatchingPursuitCV`](/docs/35?id=_324181-examples-using-`sklearnlinear_modelorthogonalmatchingpursuitcv`) - * [3.2.4.1.9\. `sklearn.linear_model`.RidgeCV](/docs/35?id=_32419-`sklearnlinear_model`ridgecv) - * [3.2.4.1.9.1\. Examples using `sklearn.linear_model.RidgeCV`](/docs/35?id=_324191-examples-using-`sklearnlinear_modelridgecv`) - * [3.2.4.1.10\. `sklearn.linear_model`.RidgeClassifierCV](/docs/35?id=_324110-`sklearnlinear_model`ridgeclassifiercv) - * [3.2.4.2\. 信息标准](/docs/35?id=_3242-信息标准) - * [3.2.4.2.1\. `sklearn.linear_model`.LassoLarsIC](/docs/35?id=_32421-`sklearnlinear_model`lassolarsic) - * [3.2.4.2.1.1\. Examples using `sklearn.linear_model.LassoLarsIC`](/docs/35?id=_324211-examples-using-`sklearnlinear_modellassolarsic`) - * [3.2.4.3\. 出袋估计](/docs/35?id=_3243-出袋估计) - * [3.2.4.3.1\. `sklearn.ensemble`.RandomForestClassifier](/docs/35?id=_32431-`sklearnensemble`randomforestclassifier) - * [3.2.4.3.1.1\. Examples using `sklearn.ensemble.RandomForestClassifier`](/docs/35?id=_324311-examples-using-`sklearnensemblerandomforestclassifier`) - * [3.2.4.3.2\. `sklearn.ensemble`.RandomForestRegressor](/docs/35?id=_32432-`sklearnensemble`randomforestregressor) - * [3.2.4.3.2.1\. Examples using `sklearn.ensemble.RandomForestRegressor`](/docs/35?id=_324321-examples-using-`sklearnensemblerandomforestregressor`) - * [3.2.4.3.3\. `sklearn.ensemble`.ExtraTreesClassifier](/docs/35?id=_32433-`sklearnensemble`extratreesclassifier) - * [3.2.4.3.3.1\. Examples using `sklearn.ensemble.ExtraTreesClassifier`](/docs/35?id=_324331-examples-using-`sklearnensembleextratreesclassifier`) - * [3.2.4.3.4\. `sklearn.ensemble`.ExtraTreesRegressor](/docs/35?id=_32434-`sklearnensemble`extratreesregressor) - * [3.2.4.3.4.1\. Examples using `sklearn.ensemble.ExtraTreesRegressor`](/docs/35?id=_324341-examples-using-`sklearnensembleextratreesregressor`) - * [3.2.4.3.5\. `sklearn.ensemble`.GradientBoostingClassifier](/docs/35?id=_32435-`sklearnensemble`gradientboostingclassifier) - * [3.2.4.3.5.1\. Examples using `sklearn.ensemble.GradientBoostingClassifier`](/docs/35?id=_324351-examples-using-`sklearnensemblegradientboostingclassifier`) - * [3.2.4.3.6\. `sklearn.ensemble`.GradientBoostingRegressor](/docs/35?id=_32436-`sklearnensemble`gradientboostingregressor) - * [3.2.4.3.6.1\. Examples using `sklearn.ensemble.GradientBoostingRegressor`](/docs/35?id=_324361-examples-using-`sklearnensemblegradientboostingregressor`) -* [3.3\. 模型评估: 量化预测的质量](/docs/36?id=_33-模型评估:-量化预测的质量) - * [3.3.1\. `scoring` 参数: 定义模型评估规则](/docs/36?id=_331-`scoring`-参数:-定义模型评估规则) - * [3.3.1.1\. 常见场景: 预定义值](/docs/36?id=_3311-常见场景:-预定义值) - * [3.3.1.2\. 根据 metric 函数定义您的评分策略](/docs/36?id=_3312-根据-metric-函数定义您的评分策略) - * [3.3.1.3\. 实现自己的记分对象](/docs/36?id=_3313-实现自己的记分对象) - * [3.3.1.4\. 使用多个指数评估](/docs/36?id=_3314-使用多个指数评估) - * [3.3.2\. 分类指标](/docs/36?id=_332-分类指标) - * [3.3.2.1\. 从二分到多分类和 multilabel](/docs/36?id=_3321-从二分到多分类和-multilabel) - * [3.3.2.2\. 精确度得分](/docs/36?id=_3322-精确度得分) - * [3.3.2.3\. Cohen’s kappa](/docs/36?id=_3323-cohen’s-kappa) - * [3.3.2.4\. 混淆矩阵](/docs/36?id=_3324-混淆矩阵) - * [3.3.2.5\. 分类报告](/docs/36?id=_3325-分类报告) - * [3.3.2.6\. 汉明损失](/docs/36?id=_3326-汉明损失) - * [3.3.2.7\. Jaccard 相似系数 score](/docs/36?id=_3327-jaccard-相似系数-score) - * [3.3.2.8\. 精准,召回和 F-measures](/docs/36?id=_3328-精准,召回和-f-measures) - * [3.3.2.8.1\. 二分类](/docs/36?id=_33281-二分类) - * [3.3.2.8.2\. 多类和多标签分类](/docs/36?id=_33282-多类和多标签分类) - * [3.3.2.9\. Hinge loss](/docs/36?id=_3329-hinge-loss) - * [3.3.2.10\. Log 损失](/docs/36?id=_33210-log-损失) - * [3.3.2.11\. 马修斯相关系数](/docs/36?id=_33211-马修斯相关系数) - * [3.3.2.12\. Receiver operating characteristic (ROC)](/docs/36?id=_33212-receiver-operating-characteristic-(roc) - * [3.3.2.13\. 零一损失](/docs/36?id=_33213-零一损失) - * [3.3.2.14\. Brier 分数损失](/docs/36?id=_33214-brier-分数损失) - * [3.3.3\. 多标签排名指标](/docs/36?id=_333-多标签排名指标) - * [3.3.3.1\. 覆盖误差](/docs/36?id=_3331-覆盖误差) - * [3.3.3.2\. 标签排名平均精度](/docs/36?id=_3332-标签排名平均精度) - * [3.3.3.3\. 排序损失](/docs/36?id=_3333-排序损失) - * [3.3.4\. 回归指标](/docs/36?id=_334-回归指标) - * [3.3.4.1\. 解释方差得分](/docs/36?id=_3341-解释方差得分) - * [3.3.4.2\. 平均绝对误差](/docs/36?id=_3342-平均绝对误差) - * [3.3.4.3\. 均方误差](/docs/36?id=_3343-均方误差) - * [3.3.4.4\. 均方误差对数](/docs/36?id=_3344-均方误差对数) - * [3.3.4.5\. 中位绝对误差](/docs/36?id=_3345-中位绝对误差) - * [3.3.4.6\. R² score, 可决系数](/docs/36?id=_3346-r²-score,-可决系数) - * [3.3.5\. 聚类指标](/docs/36?id=_335-聚类指标) - * [3.3.6\. 虚拟估计](/docs/36?id=_336-虚拟估计) -* [3.4\. 模型持久化](/docs/37?id=_34-模型持久化) - * [3.4.1\. 持久化示例](/docs/37?id=_341-持久化示例) - * [3.4.2\. 安全性和可维护性的局限性](/docs/37?id=_342-安全性和可维护性的局限性) -* [3.5\. 验证曲线: 绘制分数以评估模型](/docs/38?id=_35-验证曲线:-绘制分数以评估模型) - * [3.5.1\. 验证曲线](/docs/38?id=_351-验证曲线) - * [3.5.2\. 学习曲线](/docs/38?id=_352-学习曲线) \ No newline at end of file diff --git a/docs/0.19.x/34.md b/docs/0.19.x/34.md deleted file mode 100755 index e5b4fc112b4203ff369b96a49f07d27b858b3dc5..0000000000000000000000000000000000000000 --- a/docs/0.19.x/34.md +++ /dev/null @@ -1,548 +0,0 @@ -# 3.1\. 交叉验证:评估估算器的表现 - -校验者: -        [@想和太阳肩并肩](https://github.com/apachecn/scikit-learn-doc-zh) -        [@樊雯](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@\S^R^Y/](https://github.com/apachecn/scikit-learn-doc-zh) - -学习预测函数的参数,并在相同数据集上进行测试是一种错误的做法: 一个仅给出测试用例标签的模型将会获得极高的分数,但对于尚未出现过的数据它则无法预测出任何有用的信息。 这种情况称为 **overfitting(过拟合)**. 为了避免这种情况,在进行(监督)机器学习实验时,通常取出部分可利用数据作为 **test set(测试数据集)** `X_test, y_test`。 - -需要强调的是这里说的 “experiment(实验)” 并不仅限于学术(academic),因为即使是在商业场景下机器学习也往往是从实验开始的。 - -利用 scikit-learn 包中的 [`train_test_split`](generated/sklearn.model_selection.train_test_split.html#sklearn.model_selection.train_test_split "sklearn.model_selection.train_test_split") 辅助函数可以很快地将实验数据集划分为任何训练集(training sets)和测试集(test sets)。 下面让我们载入 iris 数据集,并在此数据集上训练出线性支持向量机: - -```py ->>> import numpy as np ->>> from sklearn.model_selection import train_test_split ->>> from sklearn import datasets ->>> from sklearn import svm - ->>> iris = datasets.load_iris() ->>> iris.data.shape, iris.target.shape -((150, 4), (150,)) - -``` - -我们能快速采样到原数据集的 40% 作为测试集,从而测试(评估)我们的分类器: - -```py ->>> X_train, X_test, y_train, y_test = train_test_split( -... iris.data, iris.target, test_size=0.4, random_state=0) - ->>> X_train.shape, y_train.shape -((90, 4), (90,)) ->>> X_test.shape, y_test.shape -((60, 4), (60,)) - ->>> clf = svm.SVC(kernel='linear', C=1).fit(X_train, y_train) ->>> clf.score(X_test, y_test) -0.96... - -``` - -当评价估计器的不同设置(”hyperparameters(超参数)”)时,例如手动为 SVM 设置的 `C` 参数, 由于在训练集上,通过调整参数设置使估计器的性能达到了最佳状态;但 _在测试集上_ 可能会出现过拟合的情况。 此时,测试集上的信息反馈足以颠覆训练好的模型,评估的指标不再有效反映出模型的泛化性能。 为了解决此类问题,还应该准备另一部分被称为 “validation set(验证集)” 的数据集,模型训练完成以后在验证集上对模型进行评估。 当验证集上的评估实验比较成功时,在测试集上进行最后的评估。 - -然而,通过将原始数据分为3个数据集合,我们就大大减少了可用于模型学习的样本数量, 并且得到的结果依赖于集合对(训练,验证)的随机选择。 - -这个问题可以通过 [交叉验证(CV 缩写)](https://en.wikipedia.org/wiki/Cross-validation_(statistics)) 来解决。 交叉验证仍需要测试集做最后的模型评估,但不再需要验证集。 - -最基本的方法被称之为,_k-折交叉验证_ 。 k-折交叉验证将训练集划分为 k 个较小的集合(其他方法会在下面描述,主要原则基本相同)。 每一个 _k_ 折都会遵循下面的过程: - -> * 将 ![k-1](img/51d052e3e4c7f694f3c05eb4159ba243.jpg) 份训练集子集作为 training data (训练集)训练模型, -> * 将剩余的 1 份训练集子集作为验证集用于模型验证(也就是利用该数据集计算模型的性能指标,例如准确率)。 - -_k_-折交叉验证得出的性能指标是循环计算中每个值的平均值。 该方法虽然计算代价很高,但是它不会浪费太多的数据(如固定任意测试集的情况一样), 在处理样本数据集较少的问题(例如,逆向推理)时比较有优势。 - -## 3.1.1\. 计算交叉验证的指标 - -使用交叉验证最简单的方法是在估计器和数据集上调用 [`cross_val_score`](generated/sklearn.model_selection.cross_val_score.html#sklearn.model_selection.cross_val_score "sklearn.model_selection.cross_val_score") 辅助函数。 - -下面的例子展示了如何通过分割数据,拟合模型和计算连续 5 次的分数(每次不同分割)来估计 linear kernel 支持向量机在 iris 数据集上的精度: - -```py ->>> from sklearn.model_selection import cross_val_score ->>> clf = svm.SVC(kernel='linear', C=1) ->>> scores = cross_val_score(clf, iris.data, iris.target, cv=5) ->>> scores -array([ 0.96..., 1\. ..., 0.96..., 0.96..., 1\. ]) - -``` - -评分估计的平均得分和 95% 置信区间由此给出: - -```py ->>> print("Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2)) -Accuracy: 0.98 (+/- 0.03) - -``` - -默认情况下,每个 CV 迭代计算的分数是估计器的 `score` 方法。可以通过使用 scoring 参数来改变计算方式如下: - -```py ->>> from sklearn import metrics ->>> scores = cross_val_score( -... clf, iris.data, iris.target, cv=5, scoring='f1_macro') ->>> scores -array([ 0.96..., 1\. ..., 0.96..., 0.96..., 1\. ]) - -``` - -详情请参阅 [scoring 参数: 定义模型评估规则](model_evaluation.html#scoring-parameter) 。 在 Iris 数据集的情形下,样本在各个目标类别之间是平衡的,因此准确度和 F1-score 几乎相等。 - -当 `cv` 参数是一个整数时, [`cross_val_score`](generated/sklearn.model_selection.cross_val_score.html#sklearn.model_selection.cross_val_score "sklearn.model_selection.cross_val_score") 默认使用 [`KFold`](generated/sklearn.model_selection.KFold.html#sklearn.model_selection.KFold "sklearn.model_selection.KFold") 或 [`StratifiedKFold`](generated/sklearn.model_selection.StratifiedKFold.html#sklearn.model_selection.StratifiedKFold "sklearn.model_selection.StratifiedKFold") 策略,后者会在估计器派生自 [`ClassifierMixin`](generated/sklearn.base.ClassifierMixin.html#sklearn.base.ClassifierMixin "sklearn.base.ClassifierMixin") 时使用。 - -也可以通过传入一个交叉验证迭代器来使用其他交叉验证策略,比如: - -```py ->>> from sklearn.model_selection import ShuffleSplit ->>> n_samples = iris.data.shape[0] ->>> cv = ShuffleSplit(n_splits=3, test_size=0.3, random_state=0) ->>> cross_val_score(clf, iris.data, iris.target, cv=cv) -... -array([ 0.97..., 0.97..., 1\. ]) - -``` - -保留数据的数据转换 - -正如在训练集中保留的数据上测试一个 predictor (预测器)是很重要的一样,预处理(如标准化,特征选择等)和类似的 [data transformations](../data_transforms.html#data-transforms) 也应该从训练集中学习,并应用于预测数据以进行预测: - -```py ->>> from sklearn import preprocessing ->>> X_train, X_test, y_train, y_test = train_test_split( -... iris.data, iris.target, test_size=0.4, random_state=0) ->>> scaler = preprocessing.StandardScaler().fit(X_train) ->>> X_train_transformed = scaler.transform(X_train) ->>> clf = svm.SVC(C=1).fit(X_train_transformed, y_train) ->>> X_test_transformed = scaler.transform(X_test) ->>> clf.score(X_test_transformed, y_test) -0.9333... - -``` - -[`Pipeline`](generated/sklearn.pipeline.Pipeline.html#sklearn.pipeline.Pipeline "sklearn.pipeline.Pipeline") 可以更容易地组合估计器,在交叉验证下使用如下: - -```py ->>> from sklearn.pipeline import make_pipeline ->>> clf = make_pipeline(preprocessing.StandardScaler(), svm.SVC(C=1)) ->>> cross_val_score(clf, iris.data, iris.target, cv=cv) -... -array([ 0.97..., 0.93..., 0.95...]) - -``` - -可以参阅 [Pipeline(管道)和 FeatureUnion(特征联合): 合并的评估器](pipeline.html#combining-estimators). - -### 3.1.1.1\. cross_validate 函数和多度量评估 - -`cross_validate` 函数与 `cross_val_score` 在下面的两个方面有些不同 - - -* 它允许指定多个指标进行评估. -* 除了测试得分之外,它还会返回一个包含训练得分,拟合次数, score-times (得分次数)的一个字典。 It returns a dict containing training scores, fit-times and score-times in addition to the test score. - -对于单个度量评估,其中 scoring 参数是一个字符串,可以调用或 None , keys 将是 - `['test_score', 'fit_time', 'score_time']` - -而对于多度量评估,返回值是一个带有以下的 keys 的字典 - `['test_<scorer1_name>', 'test_<scorer2_name>', 'test_<scorer...>', 'fit_time', 'score_time']` - -`return_train_score` 默认设置为 `True` 。 它增加了所有 scorers(得分器) 的训练得分 keys 。如果不需要训练 scores ,则应将其明确设置为 `False` 。 - -可以将多个指标指定为 predefined scorer names(预定义的得分器的名称) list ,tuple 或者 set - -```py ->>> from sklearn.model_selection import cross_validate ->>> from sklearn.metrics import recall_score ->>> scoring = ['precision_macro', 'recall_macro'] ->>> clf = svm.SVC(kernel='linear', C=1, random_state=0) ->>> scores = cross_validate(clf, iris.data, iris.target, scoring=scoring, -... cv=5, return_train_score=False) ->>> sorted(scores.keys()) -['fit_time', 'score_time', 'test_precision_macro', 'test_recall_macro'] ->>> scores['test_recall_macro'] -array([ 0.96..., 1\. ..., 0.96..., 0.96..., 1\. ]) - -``` - -或作为一个字典 mapping 得分器名称预定义或自定义的得分函数: - -```py ->>> from sklearn.metrics.scorer import make_scorer ->>> scoring = {'prec_macro': 'precision_macro', -... 'rec_micro': make_scorer(recall_score, average='macro')} ->>> scores = cross_validate(clf, iris.data, iris.target, scoring=scoring, -... cv=5, return_train_score=True) ->>> sorted(scores.keys()) -['fit_time', 'score_time', 'test_prec_macro', 'test_rec_micro', - 'train_prec_macro', 'train_rec_micro'] ->>> scores['train_rec_micro'] -array([ 0.97..., 0.97..., 0.99..., 0.98..., 0.98...]) - -``` - -这里是一个使用单一指标的 `cross_validate` 的例子: - -```py ->>> scores = cross_validate(clf, iris.data, iris.target, -... scoring='precision_macro') ->>> sorted(scores.keys()) -['fit_time', 'score_time', 'test_score', 'train_score'] - -``` - -### 3.1.1.2\. 通过交叉验证获取预测 - -除了返回结果不同,函数 [`cross_val_predict`](generated/sklearn.model_selection.cross_val_predict.html#sklearn.model_selection.cross_val_predict "sklearn.model_selection.cross_val_predict") 具有和 [`cross_val_score`](generated/sklearn.model_selection.cross_val_score.html#sklearn.model_selection.cross_val_score "sklearn.model_selection.cross_val_score") 相同的接口, 对于每一个输入的元素,如果其在测试集合中,将会得到预测结果。交叉验证策略会将可用的元素提交到测试集合有且仅有一次(否则会抛出一个异常)。 - -这些预测可以用于评价分类器的效果: - -```py ->>> from sklearn.model_selection import cross_val_predict ->>> predicted = cross_val_predict(clf, iris.data, iris.target, cv=10) ->>> metrics.accuracy_score(iris.target, predicted) -0.973... - -``` - -注意,这个计算的结果和 [`cross_val_score`](generated/sklearn.model_selection.cross_val_score.html#sklearn.model_selection.cross_val_score "sklearn.model_selection.cross_val_score") 有轻微的差别,因为后者用另一种方式组织元素。 - -可用的交叉验证迭代器在下面的部分中。 - -示例 - -* [Receiver Operating Characteristic (ROC) with cross validation](../auto_examples/model_selection/plot_roc_crossval.html#sphx-glr-auto-examples-model-selection-plot-roc-crossval-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), -* [Parameter estimation using grid search with cross-validation](../auto_examples/model_selection/plot_grid_search_digits.html#sphx-glr-auto-examples-model-selection-plot-grid-search-digits-py), -* [Sample pipeline for text feature extraction and evaluation](../auto_examples/model_selection/grid_search_text_feature_extraction.html#sphx-glr-auto-examples-model-selection-grid-search-text-feature-extraction-py), -* [绘制交叉验证预测图](../auto_examples/plot_cv_predict.html#sphx-glr-auto-examples-plot-cv-predict-py), -* [Nested versus non-nested cross-validation](../auto_examples/model_selection/plot_nested_cross_validation_iris.html#sphx-glr-auto-examples-model-selection-plot-nested-cross-validation-iris-py). - -## 3.1.2\. 交叉验证迭代器 - -接下来的部分列出了一些用于生成索引标号,用于在不同的交叉验证策略中生成数据划分的工具。 - -## 3.1.3\. 交叉验证迭代器–循环遍历数据 - -假设一些数据是独立的和相同分布的 (i.i.d) 假定所有的样本来源于相同的生成过程,并假设生成过程没有记忆过去生成的样本。 - -在这种情况下可以使用下面的交叉验证器。 - -**注意** - -而 i.i.d 数据是机器学习理论中的一个常见假设,在实践中很少成立。如果知道样本是使用时间相关的过程生成的,则使用 [time-series aware cross-validation scheme](#timeseries-cv) 更安全。 同样,如果我们知道生成过程具有 group structure (群体结构)(从不同 subjects(主体) , experiments(实验), measurement devices (测量设备)收集的样本),则使用 [group-wise cross-validation](#group-cv) 更安全。 - -### 3.1.3.1\. K 折 - -[`KFold`](generated/sklearn.model_selection.KFold.html#sklearn.model_selection.KFold "sklearn.model_selection.KFold") 将所有的样例划分为 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 个组,称为折叠 (fold) (如果 ![k = n](img/2953c3498ec0877c5ebcc172050cce88.jpg), 这等价于 _Leave One Out(留一)_ 策略),都具有相同的大小(如果可能)。预测函数学习时使用 ![k - 1](img/79b52c5c00ce59ba04383f6a0d670c6d.jpg) 个折叠中的数据,最后一个剩下的折叠会用于测试。 - -在 4 个样例的数据集上使用 2-fold 交叉验证的例子: - -```py ->>> import numpy as np ->>> from sklearn.model_selection import KFold - ->>> X = ["a", "b", "c", "d"] ->>> kf = KFold(n_splits=2) ->>> for train, test in kf.split(X): -... print("%s %s" % (train, test)) -[2 3] [0 1] -[0 1] [2 3] - -``` - -每个折叠由两个 arrays 组成,第一个作为 _training set_ ,另一个作为 _test set_ 。 由此,可以通过使用 numpy 的索引创建训练/测试集合: - -```py ->>> X = np.array([[0., 0.], [1., 1.], [-1., -1.], [2., 2.]]) ->>> y = np.array([0, 1, 0, 1]) ->>> X_train, X_test, y_train, y_test = X[train], X[test], y[train], y[test] - -``` - -### 3.1.3.2\. 重复 K-折交叉验证 - -[`RepeatedKFold`](generated/sklearn.model_selection.RepeatedKFold.html#sklearn.model_selection.RepeatedKFold "sklearn.model_selection.RepeatedKFold") 重复 K-Fold n 次。当需要运行时可以使用它 [`KFold`](generated/sklearn.model_selection.KFold.html#sklearn.model_selection.KFold "sklearn.model_selection.KFold") n 次,在每次重复中产生不同的分割。 - -2折 K-Fold 重复 2 次的示例: - -```py ->>> import numpy as np ->>> from sklearn.model_selection import RepeatedKFold ->>> X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]]) ->>> random_state = 12883823 ->>> rkf = RepeatedKFold(n_splits=2, n_repeats=2, random_state=random_state) ->>> for train, test in rkf.split(X): -... print("%s %s" % (train, test)) -... -[2 3] [0 1] -[0 1] [2 3] -[0 2] [1 3] -[1 3] [0 2] - -``` - -类似地, [`RepeatedStratifiedKFold`](generated/sklearn.model_selection.RepeatedStratifiedKFold.html#sklearn.model_selection.RepeatedStratifiedKFold "sklearn.model_selection.RepeatedStratifiedKFold") 在每个重复中以不同的随机化重复 n 次分层的 K-Fold 。 - -### 3.1.3.3\. 留一交叉验证 (LOO) - -[`LeaveOneOut`](generated/sklearn.model_selection.LeaveOneOut.html#sklearn.model_selection.LeaveOneOut "sklearn.model_selection.LeaveOneOut") (或 LOO) 是一个简单的交叉验证。每个学习集都是通过除了一个样本以外的所有样本创建的,测试集是被留下的样本。 因此,对于 ![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) 个样本,我们有 ![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) 个不同的训练集和 ![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) 个不同的测试集。这种交叉验证程序不会浪费太多数据,因为只有一个样本是从训练集中删除掉的: - -```py ->>> from sklearn.model_selection import LeaveOneOut - ->>> X = [1, 2, 3, 4] ->>> loo = LeaveOneOut() ->>> for train, test in loo.split(X): -... print("%s %s" % (train, test)) -[1 2 3] [0] -[0 2 3] [1] -[0 1 3] [2] -[0 1 2] [3] - -``` - -LOO 潜在的用户选择模型应该权衡一些已知的警告。 当与 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 折交叉验证进行比较时,可以从 ![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) 样本中构建 ![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) 模型,而不是 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 模型,其中 ![n > k](img/5cc4d35f246f0aeb95f154a5343635c2.jpg) 。 此外,每个在 ![n - 1](img/06d3f93ccdf3b4b5cd0fea7225848848.jpg) 个样本而不是在 ![(k-1) n / k](img/b38aca53acb7894dca026d3325f61a00.jpg) 上进行训练。在两种方式中,假设 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 不是太大,并且 ![k < n](img/d6f34fca0b5561181aa5263dbb97df74.jpg) , LOO 比 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 折交叉验证计算开销更加昂贵。 - -就精度而言, LOO 经常导致较高的方差作为测试误差的估计器。直观地说,因为 ![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) 个样本中的 ![n - 1](img/06d3f93ccdf3b4b5cd0fea7225848848.jpg) 被用来构建每个模型,折叠构建的模型实际上是相同的,并且是从整个训练集建立的模型。 - -但是,如果学习曲线对于所讨论的训练大小是陡峭的,那么 5- 或 10- 折交叉验证可以泛化误差增高。 - -作为一般规则,大多数作者和经验证据表明, 5- 或者 10- 交叉验证应该优于 LOO 。 - -参考文献: - -* [http://www.faqs.org/faqs/ai-faq/neural-nets/part3/section-12.html](http://www.faqs.org/faqs/ai-faq/neural-nets/part3/section-12.html); -* T. Hastie, R. Tibshirani, J. Friedman, [The Elements of Statistical Learning](http://statweb.stanford.edu/~tibs/ElemStatLearn), Springer 2009 -* L. Breiman, P. Spector [Submodel selection and evaluation in regression: The X-random case](http://digitalassets.lib.berkeley.edu/sdtr/ucb/text/197.pdf), International Statistical Review 1992; -* R. Kohavi, [A Study of Cross-Validation and Bootstrap for Accuracy Estimation and Model Selection](http://web.cs.iastate.edu/~jtian/cs573/Papers/Kohavi-IJCAI-95.pdf), Intl. Jnt. Conf. AI -* R. Bharat Rao, G. Fung, R. Rosales, [On the Dangers of Cross-Validation. An Experimental Evaluation](http://people.csail.mit.edu/romer/papers/CrossVal_SDM08.pdf), SIAM 2008; -* G. James, D. Witten, T. Hastie, R Tibshirani, [An Introduction to Statistical Learning](http://www-bcf.usc.edu/~gareth/ISL), Springer 2013. - -### 3.1.3.4\. 留 P 交叉验证 (LPO) - -[`LeavePOut`](generated/sklearn.model_selection.LeavePOut.html#sklearn.model_selection.LeavePOut "sklearn.model_selection.LeavePOut") 与 [`LeaveOneOut`](generated/sklearn.model_selection.LeaveOneOut.html#sklearn.model_selection.LeaveOneOut "sklearn.model_selection.LeaveOneOut") 非常相似,因为它通过从整个集合中删除 ![p](img/e2f9b08680b30cfb80102f69264fdd5c.jpg) 个样本来创建所有可能的 训练/测试集。对于 ![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) 个样本,这产生了 ![{n \choose p}](img/c683d0fa5d21d783e383612dda8ecad3.jpg) 个 训练-测试 对。与 [`LeaveOneOut`](generated/sklearn.model_selection.LeaveOneOut.html#sklearn.model_selection.LeaveOneOut "sklearn.model_selection.LeaveOneOut") 和 [`KFold`](generated/sklearn.model_selection.KFold.html#sklearn.model_selection.KFold "sklearn.model_selection.KFold") 不同,当 ![p > 1](img/aaa84c285eb96ed446fd34be4b51bbec.jpg) 时,测试集会重叠。 - -在有 4 个样例的数据集上使用 Leave-2-Out 的例子: - -```py ->>> from sklearn.model_selection import LeavePOut - ->>> X = np.ones(4) ->>> lpo = LeavePOut(p=2) ->>> for train, test in lpo.split(X): -... print("%s %s" % (train, test)) -[2 3] [0 1] -[1 3] [0 2] -[1 2] [0 3] -[0 3] [1 2] -[0 2] [1 3] -[0 1] [2 3] - -``` - -### 3.1.3.5\. 随机排列交叉验证 a.k.a. Shuffle & Split - -[`ShuffleSplit`](generated/sklearn.model_selection.ShuffleSplit.html#sklearn.model_selection.ShuffleSplit "sklearn.model_selection.ShuffleSplit") - -[`ShuffleSplit`](generated/sklearn.model_selection.ShuffleSplit.html#sklearn.model_selection.ShuffleSplit "sklearn.model_selection.ShuffleSplit") 迭代器 将会生成一个用户给定数量的独立的训练/测试数据划分。样例首先被打散然后划分为一对训练测试集合。 - -可以通过设定明确的 `random_state` ,使得伪随机生成器的结果可以重复。 - -这是一个使用的小例子: - -```py ->>> from sklearn.model_selection import ShuffleSplit ->>> X = np.arange(5) ->>> ss = ShuffleSplit(n_splits=3, test_size=0.25, -... random_state=0) ->>> for train_index, test_index in ss.split(X): -... print("%s %s" % (train_index, test_index)) -... -[1 3 4] [2 0] -[1 4 3] [0 2] -[4 0 2] [1 3] - -``` - -[`ShuffleSplit`](generated/sklearn.model_selection.ShuffleSplit.html#sklearn.model_selection.ShuffleSplit "sklearn.model_selection.ShuffleSplit") 可以替代 [`KFold`](generated/sklearn.model_selection.KFold.html#sklearn.model_selection.KFold "sklearn.model_selection.KFold") 交叉验证,因为其提供了细致的训练 / 测试划分的 数量和样例所占的比例等的控制。 - -## 3.1.4\. 基于类标签、具有分层的交叉验证迭代器 - -一些分类问题在目标类别的分布上可能表现出很大的不平衡性:例如,可能会出现比正样本多数倍的负样本。在这种情况下,建议采用如 [`StratifiedKFold`](generated/sklearn.model_selection.StratifiedKFold.html#sklearn.model_selection.StratifiedKFold "sklearn.model_selection.StratifiedKFold") 和 [`StratifiedShuffleSplit`](generated/sklearn.model_selection.StratifiedShuffleSplit.html#sklearn.model_selection.StratifiedShuffleSplit "sklearn.model_selection.StratifiedShuffleSplit") 中实现的分层抽样方法,确保相对的类别频率在每个训练和验证 折叠 中大致保留。 - -### 3.1.4.1\. 分层 k 折 - -[`StratifiedKFold`](generated/sklearn.model_selection.StratifiedKFold.html#sklearn.model_selection.StratifiedKFold "sklearn.model_selection.StratifiedKFold") 是 _k-fold_ 的变种,会返回 _stratified(分层)_ 的折叠:每个小集合中, 各个类别的样例比例大致和完整数据集中相同。 - -在有 10 个样例的,有两个略不均衡类别的数据集上进行分层 3-fold 交叉验证的例子: - -```py ->>> from sklearn.model_selection import StratifiedKFold - ->>> X = np.ones(10) ->>> y = [0, 0, 0, 0, 1, 1, 1, 1, 1, 1] ->>> skf = StratifiedKFold(n_splits=3) ->>> for train, test in skf.split(X, y): -... print("%s %s" % (train, test)) -[2 3 6 7 8 9] [0 1 4 5] -[0 1 3 4 5 8 9] [2 6 7] -[0 1 2 4 5 6 7] [3 8 9] - -``` - -[`RepeatedStratifiedKFold`](generated/sklearn.model_selection.RepeatedStratifiedKFold.html#sklearn.model_selection.RepeatedStratifiedKFold "sklearn.model_selection.RepeatedStratifiedKFold") 可用于在每次重复中用不同的随机化重复分层 K-Fold n 次。 - -### 3.1.4.2\. 分层随机 Split - -[`StratifiedShuffleSplit`](generated/sklearn.model_selection.StratifiedShuffleSplit.html#sklearn.model_selection.StratifiedShuffleSplit "sklearn.model_selection.StratifiedShuffleSplit") 是 _ShuffleSplit_ 的一个变种,会返回直接的划分,比如: 创建一个划分,但是划分中每个类的比例和完整数据集中的相同。 - -## 3.1.5\. 用于分组数据的交叉验证迭代器 - -如果潜在的生成过程产生依赖样本的 groups ,那么 i.i.d. 假设将会被打破。 - -这样的数据分组是特定于域的。一个例子是从多个患者收集医学数据,从每个患者身上采集多个样本。而这样的数据很可能取决于个人群体。 在我们的例子中,每个样本的患者 ID 将是其 group identifier (组标识符)。 - -在这种情况下,我们想知道在一组特定的 groups 上训练的模型是否能很好地适用于看不见的 group 。为了衡量这一点,我们需要确保验证对象中的所有样本来自配对训练折叠中完全没有表示的组。 - -下面的交叉验证分离器可以用来做到这一点。 样本的 grouping identifier (分组标识符) 通过 `groups` 参数指定。 - -### 3.1.5.1\. 组 k-fold - -[`GroupKFold`](generated/sklearn.model_selection.GroupKFold.html#sklearn.model_selection.GroupKFold "sklearn.model_selection.GroupKFold") 是 k-fold 的变体,它确保同一个 group 在测试和训练集中都不被表示。 例如,如果数据是从不同的 subjects 获得的,每个 subject 有多个样本,并且如果模型足够灵活以高度人物指定的特征中学习,则可能无法推广到新的 subject 。 [`GroupKFold`](generated/sklearn.model_selection.GroupKFold.html#sklearn.model_selection.GroupKFold "sklearn.model_selection.GroupKFold") 可以检测到这种过拟合的情况。 Imagine you have three subjects, each with an associated number from 1 to 3: - -```py ->>> from sklearn.model_selection import GroupKFold - ->>> X = [0.1, 0.2, 2.2, 2.4, 2.3, 4.55, 5.8, 8.8, 9, 10] ->>> y = ["a", "b", "b", "b", "c", "c", "c", "d", "d", "d"] ->>> groups = [1, 1, 1, 2, 2, 2, 3, 3, 3, 3] - ->>> gkf = GroupKFold(n_splits=3) ->>> for train, test in gkf.split(X, y, groups=groups): -... print("%s %s" % (train, test)) -[0 1 2 3 4 5] [6 7 8 9] -[0 1 2 6 7 8 9] [3 4 5] -[3 4 5 6 7 8 9] [0 1 2] - -``` - -每个 subject 都处于不同的测试阶段,同一个科目从来没有在测试和训练过程中。请注意,由于数据不平衡,折叠的大小并不完全相同。 - -### 3.1.5.2\. 留一组交叉验证 - -[`LeaveOneGroupOut`](generated/sklearn.model_selection.LeaveOneGroupOut.html#sklearn.model_selection.LeaveOneGroupOut "sklearn.model_selection.LeaveOneGroupOut") 是一个交叉验证方案,它根据第三方提供的 array of integer groups (整数组的数组)来提供样本。这个组信息可以用来编码任意域特定的预定义交叉验证折叠。 - -每个训练集都是由除特定组别以外的所有样本构成的。 - -例如,在多个实验的情况下, [`LeaveOneGroupOut`](generated/sklearn.model_selection.LeaveOneGroupOut.html#sklearn.model_selection.LeaveOneGroupOut "sklearn.model_selection.LeaveOneGroupOut") 可以用来根据不同的实验创建一个交叉验证:我们使用除去一个实验的所有实验的样本创建一个训练集: - -```py ->>> from sklearn.model_selection import LeaveOneGroupOut - ->>> X = [1, 5, 10, 50, 60, 70, 80] ->>> y = [0, 1, 1, 2, 2, 2, 2] ->>> groups = [1, 1, 2, 2, 3, 3, 3] ->>> logo = LeaveOneGroupOut() ->>> for train, test in logo.split(X, y, groups=groups): -... print("%s %s" % (train, test)) -[2 3 4 5 6] [0 1] -[0 1 4 5 6] [2 3] -[0 1 2 3] [4 5 6] - -``` - -另一个常见的应用是使用时间信息:例如,组可以是收集样本的年份,从而允许与基于时间的分割进行交叉验证。 - -### 3.1.5.3\. 留 P 组交叉验证 - -[`LeavePGroupsOut`](generated/sklearn.model_selection.LeavePGroupsOut.html#sklearn.model_selection.LeavePGroupsOut "sklearn.model_selection.LeavePGroupsOut") 类似于 [`LeaveOneGroupOut`](generated/sklearn.model_selection.LeaveOneGroupOut.html#sklearn.model_selection.LeaveOneGroupOut "sklearn.model_selection.LeaveOneGroupOut") ,但为每个训练/测试集删除与 ![P](img/4bfe956324cef23278c5192b0fb8029b.jpg) 组有关的样本。 - -Leave-2-Group Out 的示例: - -```py ->>> from sklearn.model_selection import LeavePGroupsOut - ->>> X = np.arange(6) ->>> y = [1, 1, 1, 2, 2, 2] ->>> groups = [1, 1, 2, 2, 3, 3] ->>> lpgo = LeavePGroupsOut(n_groups=2) ->>> for train, test in lpgo.split(X, y, groups=groups): -... print("%s %s" % (train, test)) -[4 5] [0 1 2 3] -[2 3] [0 1 4 5] -[0 1] [2 3 4 5] - -``` - -### 3.1.5.4\. Group Shuffle Split - -[`GroupShuffleSplit`](generated/sklearn.model_selection.GroupShuffleSplit.html#sklearn.model_selection.GroupShuffleSplit "sklearn.model_selection.GroupShuffleSplit") 迭代器是 [`ShuffleSplit`](generated/sklearn.model_selection.ShuffleSplit.html#sklearn.model_selection.ShuffleSplit "sklearn.model_selection.ShuffleSplit") 和 [`LeavePGroupsOut`](generated/sklearn.model_selection.LeavePGroupsOut.html#sklearn.model_selection.LeavePGroupsOut "sklearn.model_selection.LeavePGroupsOut") 的组合,它生成一个随机划分分区的序列,其中为每个分组提供了一个组子集。 - -这是使用的示例: - -```py ->>> from sklearn.model_selection import GroupShuffleSplit - ->>> X = [0.1, 0.2, 2.2, 2.4, 2.3, 4.55, 5.8, 0.001] ->>> y = ["a", "b", "b", "b", "c", "c", "c", "a"] ->>> groups = [1, 1, 2, 2, 3, 3, 4, 4] ->>> gss = GroupShuffleSplit(n_splits=4, test_size=0.5, random_state=0) ->>> for train, test in gss.split(X, y, groups=groups): -... print("%s %s" % (train, test)) -... -[0 1 2 3] [4 5 6 7] -[2 3 6 7] [0 1 4 5] -[2 3 4 5] [0 1 6 7] -[4 5 6 7] [0 1 2 3] - -``` - -当需要 [`LeavePGroupsOut`](generated/sklearn.model_selection.LeavePGroupsOut.html#sklearn.model_selection.LeavePGroupsOut "sklearn.model_selection.LeavePGroupsOut") 的操作时,这个类的信息是很有必要的,但是 组 的数目足够大,以至于用 ![P](img/4bfe956324cef23278c5192b0fb8029b.jpg) 组生成所有可能的分区将会花费很大的代价。在这种情况下, [`GroupShuffleSplit`](generated/sklearn.model_selection.GroupShuffleSplit.html#sklearn.model_selection.GroupShuffleSplit "sklearn.model_selection.GroupShuffleSplit") 通过 [`LeavePGroupsOut`](generated/sklearn.model_selection.LeavePGroupsOut.html#sklearn.model_selection.LeavePGroupsOut "sklearn.model_selection.LeavePGroupsOut") 提供了一个随机(可重复)的训练 / 测试划分采样。 - -## 3.1.6\. 预定义的折叠 / 验证集 - -对一些数据集,一个预定义的,将数据划分为训练和验证集合或者划分为几个交叉验证集合的划分已经存在。 可以使用 [`PredefinedSplit`](generated/sklearn.model_selection.PredefinedSplit.html#sklearn.model_selection.PredefinedSplit "sklearn.model_selection.PredefinedSplit") 来使用这些集合来搜索超参数。 - -比如,当使用验证集合时,设置所有验证集合中的样例的 `test_fold` 为 0,而将其他样例设置为 -1 。 - -## 3.1.7\. 交叉验证在时间序列数据中应用 - -时间序列数据的特点是时间 (_autocorrelation(自相关性)_) 附近的观测之间的相关性。 然而,传统的交叉验证技术,例如 [`KFold`](generated/sklearn.model_selection.KFold.html#sklearn.model_selection.KFold "sklearn.model_selection.KFold") 和 [`ShuffleSplit`](generated/sklearn.model_selection.ShuffleSplit.html#sklearn.model_selection.ShuffleSplit "sklearn.model_selection.ShuffleSplit") 假设样本是独立的且分布相同的,并且在时间序列数据上会导致训练和测试实例之间不合理的相关性(产生广义误差的估计较差)。 因此,对 “future(未来)” 观测的时间序列数据模型的评估至少与用于训练模型的观测模型非常重要。为了达到这个目的,一个解决方案是由 [`TimeSeriesSplit`](generated/sklearn.model_selection.TimeSeriesSplit.html#sklearn.model_selection.TimeSeriesSplit "sklearn.model_selection.TimeSeriesSplit") 提供的。 - -### 3.1.7.1\. 时间序列分割 - -[`TimeSeriesSplit`](generated/sklearn.model_selection.TimeSeriesSplit.html#sklearn.model_selection.TimeSeriesSplit "sklearn.model_selection.TimeSeriesSplit") 是 _k-fold_ 的一个变体,它首先返回 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 折作为训练数据集,并且 ![(k+1)](img/b25f834ac79280901c702fb1449740a3.jpg) 折作为测试数据集。 请注意,与标准的交叉验证方法不同,连续的训练集是超越前者的超集。 另外,它将所有的剩余数据添加到第一个训练分区,它总是用来训练模型。 - -这个类可以用来交叉验证以固定时间间隔观察到的时间序列数据样本。 - -对具有 6 个样本的数据集进行 3-split 时间序列交叉验证的示例: - -```py ->>> from sklearn.model_selection import TimeSeriesSplit - ->>> X = np.array([[1, 2], [3, 4], [1, 2], [3, 4], [1, 2], [3, 4]]) ->>> y = np.array([1, 2, 3, 4, 5, 6]) ->>> tscv = TimeSeriesSplit(n_splits=3) ->>> print(tscv) -TimeSeriesSplit(max_train_size=None, n_splits=3) ->>> for train, test in tscv.split(X): -... print("%s %s" % (train, test)) -[0 1 2] [3] -[0 1 2 3] [4] -[0 1 2 3 4] [5] - -``` - -## 3.1.8\. A note on shuffling - -(如果数据的顺序不是任意的(比如说,相同标签的样例连续出现),为了获得有意义的交叉验证结果,首先对其进行 打散是很有必要的。然而,当样例不是独立同分布时打散则是不可行的。例如:样例是相关的文章,以他们发表的时间 进行排序,这时候如果对数据进行打散,将会导致模型过拟合,得到一个过高的验证分数:因为验证样例更加相似(在时间上更接近) 于训练数据。 - -一些交叉验证迭代器, 比如 [`KFold`](generated/sklearn.model_selection.KFold.html#sklearn.model_selection.KFold "sklearn.model_selection.KFold") ,有一个内建的在划分数据前进行数据索引打散的选项。注意: - -* 这种方式仅需要很少的内存就可以打散数据。 -* 默认不会进行打散,包括设置 `cv=some_integer` (直接)k 折叠交叉验证的 [`cross_val_score`](generated/sklearn.model_selection.cross_val_score.html#sklearn.model_selection.cross_val_score "sklearn.model_selection.cross_val_score") , 表格搜索等。注意 [`train_test_split`](generated/sklearn.model_selection.train_test_split.html#sklearn.model_selection.train_test_split "sklearn.model_selection.train_test_split") 会返回一个随机的划分。 -* 参数 `random_state` 默认设置为 `None` ,这意为着每次进行 `KFold(..., shuffle=True)` 时,打散都是不同的。 然而, `GridSearchCV` 通过调用 `fit` 方法验证时,将会使用相同的打散来训练每一组参数。 -* 为了保证结果的可重复性(在相同的平台上),应该给 `random_state` 设定一个固定的值。 - -## 3.1.9\. 交叉验证和模型选择 - -交叉验证迭代器可以通过网格搜索得到最优的模型超参数,从而直接用于模型的选择。 这是另一部分 [调整估计器的超参数](grid_search.html#grid-search) 的主要内容。 \ No newline at end of file diff --git a/docs/0.19.x/35.md b/docs/0.19.x/35.md deleted file mode 100755 index 03bd550de83ee1fef241caec0be8cf805c8323c1..0000000000000000000000000000000000000000 --- a/docs/0.19.x/35.md +++ /dev/null @@ -1,163 +0,0 @@ -# 3.2\. 调整估计器的超参数 - -校验者: -        [@想和太阳肩并肩](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@\S^R^Y/](https://github.com/apachecn/scikit-learn-doc-zh) - -超参数,即不直接在估计器内学习的参数。在 scikit-learn 包中,它们作为估计器类中构造函数的参数进行传递。典型的例子有:用于支持向量分类器的 `C` 、`kernel` 和 `gamma` ,用于Lasso的 `alpha` 等。 - -搜索超参数空间以便获得最好 [交叉验证](http://sklearn.apachecn.org/cn/0.19.0/modules/cross_validation.html#cross-validation) 分数的方法是可能的而且是值得提倡的。 - -通过这种方式,构造估计器时被提供的任何参数或许都能被优化。具体来说,要获取到给定估计器的所有参数的名称和当前值,使用: - -```py -estimator.get_params() - -``` - -搜索包括: - -* 估计器(回归器或分类器,例如 `sklearn.svm.SVC()`) -* 参数空间 -* 搜寻或采样候选的方法 -* 交叉验证方案 -* [计分函数](#gridsearch-scoring) - -有些模型支持专业化的、高效的参数搜索策略, [描述如下](#alternative-cv) 。在 scikit-learn 包中提供了两种采样搜索候选的通用方法:对于给定的值, [GridSearchCV](http://sklearn.apachecn.org/cn/0.19.0/modules/generated/sklearn.model_selection.GridSearchCV.html#sklearn.model_selection.GridSearchCV) 考虑了所有参数组合;而 [RandomizedSearchCV](http://sklearn.apachecn.org/cn/0.19.0/modules/generated/sklearn.model_selection.RandomizedSearchCV.html#sklearn.model_selection.RandomizedSearchCV) 可以从具有指定分布的参数空间中抽取给定数量的候选。介绍完这些工具后,我们将详细介绍适用于这两种方法的 [最佳实践](#grid-search-tips) 。 - -**注意**,通常这些参数的一小部分会对模型的预测或计算性能有很大的影响,而其他参数可以保留为其默认值。 建议阅读估计器类的相关文档,以更好地了解其预期行为,可能的话还可以阅读下引用的文献。 - -## 3.2.1\. 网格追踪法–穷尽的网格搜索 - -`GridSearchCV` 提供的网格搜索从通过 `param_grid` 参数确定的网格参数值中全面生成候选。例如,下面的 `param_grid`: - -```py -param_grid = [ - {'C': [1, 10, 100, 1000], 'kernel': ['linear']}, - {'C': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']}, - ] - -``` - -探索两个网格的详细解释: 一个具有线性内核并且C在[1,10,100,1000]中取值; 另一个具有RBF内核,C值的交叉乘积范围在[1,10,100,1000],gamma在[0.001,0.0001]中取值。 - -`GridSearchCV` 实例实现了常用估计器 API:当在数据集上“拟合”时,参数值的所有可能的组合都会被评估,从而计算出最佳的组合。 - -示例: - -* 有关在数字数据集上的网格搜索计算示例,请参阅 [基于交叉验证的网格搜索参数估计](http://sklearn.apachecn.org/cn/0.19.0/auto_examples/model_selection/plot_grid_search_digits.html#sphx-glr-auto-examples-model-selection-plot-grid-search-digits-py)。 -* 有关来自文本文档特征提取器(n-gram计数向量化器和TF-IDF变换器)的网格搜索耦合参数与分类器(这里是使用具有弹性网格的SGD训练的线性SVM 或L2惩罚)使用 <cite>pipeline.Pipeline</cite> 示例,请参阅 [用于文本特征提取和评估的示例管道](http://sklearn.apachecn.org/cn/0.19.0/auto_examples/model_selection/grid_search_text_feature_extraction.html#sphx-glr-auto-examples-model-selection-grid-search-text-feature-extraction-py)。 -* 有关iris数据集的交叉验证循环中的网格搜索示例, 请参阅 [嵌套与非嵌套交叉验证](http://sklearn.apachecn.org/cn/0.19.0/auto_examples/model_selection/plot_nested_cross_validation_iris.html#sphx-glr-auto-examples-model-selection-plot-nested-cross-validation-iris-py)。 -* 有关用于同时评估多个指标的GridSearchCV示例,请参阅 [cross_val_score 与 GridSearchCV 多指标评价的实证研究](http://sklearn.apachecn.org/cn/0.19.0/auto_examples/model_selection/plot_multi_metric_evaluation.html#sphx-glr-auto-examples-model-selection-plot-multi-metric-evaluation-py)。 - -## 3.2.2\. 随机参数优化 - -尽管使用参数设置的网格法是目前最广泛使用的参数优化方法, 其他搜索方法也具有更有利的性能。 [RandomizedSearchCV](http://sklearn.apachecn.org/cn/0.19.0/modules/generated/sklearn.model_selection.RandomizedSearchCV.html#sklearn.model_selection.RandomizedSearchCV) 实现了对参数的随机搜索, 其中每个设置都是从可能的参数值的分布中进行取样。 这对于穷举搜索有两个主要优势: - -* 可以选择独立于参数个数和可能值的预算 -* 添加不影响性能的参数不会降低效率 - -指定如何取样的参数是使用字典完成的, 非常类似于为 `GridSearchCV` 指定参数。 此外, 通过 `n_iter` 参数指定计算预算, 即取样候选项数或取样迭代次数。 对于每个参数, 可以指定在可能值上的分布或离散选择的列表 (均匀取样): - -```py -{'C': scipy.stats.expon(scale=100), 'gamma': scipy.stats.expon(scale=.1), - 'kernel': ['rbf'], 'class_weight':['balanced', None]} - -``` - -本示例使用 `scipy.stats` 模块, 它包含许多用于采样参数的有用分布, 如 `expon`,`gamma`,`uniform` 或者 `randint`。 原则上, 任何函数都可以通过提供一个 `rvs` (随机变量样本)方法来采样一个值。 对 `rvs` 函数的调用应在连续调用中提供来自可能参数值的独立随机样本。 - -> Warning -> -> The distributions in `scipy.stats` prior to version scipy 0.16 do not allow specifying a random state. Instead, they use the global numpy random state, that can be seeded via `np.random.seed` or set using `np.random.set_state`. However, beginning scikit-learn 0.18, the [sklearn.model_selection](http://sklearn.apachecn.org/cn/0.19.0/modules/classes.html#module-sklearn.model_selection) module sets the random state provided by the user if scipy >= 0.16 is also available. - -对于连续参数 (如上面提到的 `C` ),指定连续分布以充分利用随机化是很重要的。这样,有助于 `n_iter` 总是趋向于更精细的搜索。 - -示例: - -* 随机搜索和网格搜索的使用和效率的比较: [有关随机搜索和网格搜索超参数估计的对比](http://sklearn.apachecn.org/cn/0.19.0/auto_examples/model_selection/plot_randomized_search.html#sphx-glr-auto-examples-model-selection-plot-randomized-search-py) - -引用: - -* Bergstra, J. and Bengio, Y., Random search for hyper-parameter optimization, The Journal of Machine Learning Research (2012) - -## 3.2.3\. 参数搜索技巧 - -### 3.2.3.1\. 指定目标度量 - -默认情况下, 参数搜索使用估计器的评分函数来评估(衡量)参数设置。 比如 [sklearn.metrics.accuracy_score](http://sklearn.apachecn.org/cn/0.19.0/modules/generated/sklearn.metrics.accuracy_score.html#sklearn.metrics.accuracy_score) 用于分类和 [sklearn.metrics.r2_score](http://sklearn.apachecn.org/cn/0.19.0/modules/generated/sklearn.metrics.r2_score.html#sklearn.metrics.r2_score) 用于回归。 对于一些应用, 其他评分函数将会更加适合 (例如在不平衡的分类, 精度评分往往是信息不足的)。 一个可选的评分功能可以通过评分参数指定给 `GridSearchCV`, `RandomizedSearchCV` 和许多下文将要描述的、专业化的交叉验证工具。 有关详细信息, 请参阅 [评分参数:定义模型评估规则](http://sklearn.apachecn.org/cn/0.19.0/modules/model_evaluation.html#scoring-parameter)。 - -### 3.2.3.2\. 为评估指定多个指标 - -`GridSearchCV` 和 `RandomizedSearchCV` 允许为评分参数指定多个指标。 - -多指标评分可以被指定为一个预先定义分数名称字符串列表或者是一个得分手名字到得分手的函数或预先定义的记分员名字的映射字典。 有关详细信息, 请参阅 [多指标评估](http://sklearn.apachecn.org/cn/0.19.0/modules/model_evaluation.html#multimetric-scoring)。 - -在指定多个指标时,必须将 `refit` 参数设置为要在其中找到 `best_params_`,并用于在整个数据集上构建 `best_estimator_` 的度量标准(字符串)。 如果搜索不应该 refit, 则设置 `refit=False`。在使用多个度量值时,如果将 refit 保留为默认值,不会导致结果错误。 - -有关示例用法, 请参见 [cross_val_score 与 GridSearchCV 多指标评价的实证研究](http://sklearn.apachecn.org/cn/0.19.0/auto_examples/model_selection/plot_multi_metric_evaluation.html#sphx-glr-auto-examples-model-selection-plot-multi-metric-evaluation-py)。 - -### 3.2.3.3\. 复合估计和参数空间 - -[管道:链式评估器](http://sklearn.apachecn.org/cn/0.19.0/modules/pipeline.html#pipeline) 描述了如何使用这些工具搜索参数空间构建链式评估器。 - -### 3.2.3.4\. 模型选择:开发和评估 - -通过评估各种参数设置,可以将模型选择视为使用标记数据训练网格参数的一种方法。 - -在评估结果模型时, 重要的是在网格搜索过程中未看到的 held-out 样本数据上执行以下操作: 建议将数据拆分为开发集 (**development set**,供 `GridSearchCV` 实例使用)和评估集(**evaluation set**)来计算性能指标。 - -这可以通过使用效用函数 [train_test_split](http://sklearn.apachecn.org/cn/0.19.0/modules/generated/sklearn.model_selection.train_test_split.html#sklearn.model_selection.train_test_split) 来完成。 - -### 3.2.3.5\. 并行机制 - -`GridSearchCV` 和 `RandomizedSearchCV` 可以独立地评估每个参数设置。如果您的OS支持,通过使用关键字 `n_jobs=-1` 可以使计算并行运行。 有关详细信息, 请参见函数签名。 - -### 3.2.3.6\. 对故障的鲁棒性 - -某些参数设置可能导致无法 `fit` 数据的一个或多个折叠。 默认情况下, 这将导致整个搜索失败, 即使某些参数设置可以完全计算。 设置 `error_score=0` (或`=np.NaN`) 将使程序对此类故障具有鲁棒性,发出警告并将该折叠的分数设置为0(或`NaN`), 但可以完成搜索。 - -## 3.2.4\. 暴力参数搜索的替代方案 - -### 3.2.4.1\. 模型特定交叉验证 - -某些模型可以与参数的单个值的估计值一样有效地适应某一参数范围内的数据。 此功能可用于执行更有效的交叉验证, 用于此参数的模型选择。 - -该策略最常用的参数是编码正则化矩阵强度的参数。在这种情况下, 我们称之为, 计算估计器的正则化路径(**regularization path**)。 - -以下是这些模型的列表: - -| [`linear_model.ElasticNetCV`](generated/sklearn.linear_model.ElasticNetCV.html#sklearn.linear_model.ElasticNetCV "sklearn.linear_model.ElasticNetCV")([l1_ratio, eps, …]) | Elastic Net model with iterative fitting along a regularization path | -| [`linear_model.LarsCV`](generated/sklearn.linear_model.LarsCV.html#sklearn.linear_model.LarsCV "sklearn.linear_model.LarsCV")([fit_intercept, …]) | Cross-validated Least Angle Regression model | -| [`linear_model.LassoCV`](generated/sklearn.linear_model.LassoCV.html#sklearn.linear_model.LassoCV "sklearn.linear_model.LassoCV")([eps, n_alphas, …]) | Lasso linear model with iterative fitting along a regularization path | -| [`linear_model.LassoLarsCV`](generated/sklearn.linear_model.LassoLarsCV.html#sklearn.linear_model.LassoLarsCV "sklearn.linear_model.LassoLarsCV")([fit_intercept, …]) | Cross-validated Lasso, using the LARS algorithm | -| [`linear_model.LogisticRegressionCV`](generated/sklearn.linear_model.LogisticRegressionCV.html#sklearn.linear_model.LogisticRegressionCV "sklearn.linear_model.LogisticRegressionCV")([Cs, …]) | Logistic Regression CV (aka logit, MaxEnt) classifier. | -| [`linear_model.MultiTaskElasticNetCV`](generated/sklearn.linear_model.MultiTaskElasticNetCV.html#sklearn.linear_model.MultiTaskElasticNetCV "sklearn.linear_model.MultiTaskElasticNetCV")([…]) | Multi-task L1/L2 ElasticNet with built-in cross-validation. | -| [`linear_model.MultiTaskLassoCV`](generated/sklearn.linear_model.MultiTaskLassoCV.html#sklearn.linear_model.MultiTaskLassoCV "sklearn.linear_model.MultiTaskLassoCV")([eps, …]) | Multi-task L1/L2 Lasso with built-in cross-validation. | -| [`linear_model.OrthogonalMatchingPursuitCV`](generated/sklearn.linear_model.OrthogonalMatchingPursuitCV.html#sklearn.linear_model.OrthogonalMatchingPursuitCV "sklearn.linear_model.OrthogonalMatchingPursuitCV")([…]) | Cross-validated Orthogonal Matching Pursuit model (OMP) | -| [`linear_model.RidgeCV`](generated/sklearn.linear_model.RidgeCV.html#sklearn.linear_model.RidgeCV "sklearn.linear_model.RidgeCV")([alphas, …]) | Ridge regression with built-in cross-validation. | -| [`linear_model.RidgeClassifierCV`](generated/sklearn.linear_model.RidgeClassifierCV.html#sklearn.linear_model.RidgeClassifierCV "sklearn.linear_model.RidgeClassifierCV")([alphas, …]) | Ridge classifier with built-in cross-validation. | - -### 3.2.4.2\. 信息标准 - -一些模型通过计算一个正则化路径 (代替使用交叉验证得出数个参数), 可以给出正则化参数最优估计的信息理论闭包公式。 - -以下是从 Akaike 信息标准 (AIC) 或贝叶斯信息标准 (可用于自动选择模型) 中受益的模型列表: - -| [`linear_model.LassoLarsIC`](generated/sklearn.linear_model.LassoLarsIC.html#sklearn.linear_model.LassoLarsIC "sklearn.linear_model.LassoLarsIC")([criterion, …]) | Lasso model fit with Lars using BIC or AIC for model selection | - -### 3.2.4.3\. 出袋估计 - -当使用基于装袋的集合方法时,即使用具有替换的采样产生新的训练集,部分训练集保持不用。 对于集合中的每个分类器,训练集的不同部分被忽略。 - -这个省略的部分可以用来估计泛化误差,而不必依靠单独的验证集。 此估计是”免费的”,因为不需要额外的数据,可以用于模型选择。 - -目前该方法已经实现的类以下几个: - -| [`ensemble.RandomForestClassifier`](generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier "sklearn.ensemble.RandomForestClassifier")([…]) | A random forest classifier. | -| [`ensemble.RandomForestRegressor`](generated/sklearn.ensemble.RandomForestRegressor.html#sklearn.ensemble.RandomForestRegressor "sklearn.ensemble.RandomForestRegressor")([…]) | A random forest regressor. | -| [`ensemble.ExtraTreesClassifier`](generated/sklearn.ensemble.ExtraTreesClassifier.html#sklearn.ensemble.ExtraTreesClassifier "sklearn.ensemble.ExtraTreesClassifier")([…]) | An extra-trees classifier. | -| [`ensemble.ExtraTreesRegressor`](generated/sklearn.ensemble.ExtraTreesRegressor.html#sklearn.ensemble.ExtraTreesRegressor "sklearn.ensemble.ExtraTreesRegressor")([n_estimators, …]) | An extra-trees regressor. | -| [`ensemble.GradientBoostingClassifier`](generated/sklearn.ensemble.GradientBoostingClassifier.html#sklearn.ensemble.GradientBoostingClassifier "sklearn.ensemble.GradientBoostingClassifier")([loss, …]) | Gradient Boosting for classification. | -| [`ensemble.GradientBoostingRegressor`](generated/sklearn.ensemble.GradientBoostingRegressor.html#sklearn.ensemble.GradientBoostingRegressor "sklearn.ensemble.GradientBoostingRegressor")([loss, …]) | Gradient Boosting for regression. | \ No newline at end of file diff --git a/docs/0.19.x/36.md b/docs/0.19.x/36.md deleted file mode 100755 index 16c83d924f600c77bb24c9a1afe8ff01a81b319d..0000000000000000000000000000000000000000 --- a/docs/0.19.x/36.md +++ /dev/null @@ -1,1174 +0,0 @@ -# 3.3\. 模型评估: 量化预测的质量 - -校验者: -        [@飓风](https://github.com/apachecn/scikit-learn-doc-zh) -        [@小瑶](https://github.com/apachecn/scikit-learn-doc-zh) -        [@FAME](https://github.com/apachecn/scikit-learn-doc-zh) -        [@v](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@小瑶](https://github.com/apachecn/scikit-learn-doc-zh) -        [@片刻](https://github.com/apachecn/scikit-learn-doc-zh) -        [@那伊抹微笑](https://github.com/apachecn/scikit-learn-doc-zh) - -有 3 种不同的 API 用于评估模型预测的质量: - -* **Estimator score method(估计器得分的方法)**: Estimators(估计器)有一个 `score(得分)` 方法,为其解决的问题提供了默认的 evaluation criterion (评估标准)。 在这个页面上没有相关讨论,但是在每个 estimator (估计器)的文档中会有相关的讨论。 -* **Scoring parameter(评分参数)**: Model-evaluation tools (模型评估工具)使用 [cross-validation](cross_validation.html#cross-validation) (如 [`model_selection.cross_val_score`](generated/sklearn.model_selection.cross_val_score.html#sklearn.model_selection.cross_val_score "sklearn.model_selection.cross_val_score") 和 [`model_selection.GridSearchCV`](generated/sklearn.model_selection.GridSearchCV.html#sklearn.model_selection.GridSearchCV "sklearn.model_selection.GridSearchCV")) 依靠 internal _scoring_ strategy (内部 _scoring(得分)_ 策略)。这在 [scoring 参数: 定义模型评估规则](#scoring-parameter) 部分讨论。 -* **Metric functions(指标函数)**: `metrics` 模块实现了针对特定目的评估预测误差的函数。这些指标在以下部分部分详细介绍 [分类指标](#classification-metrics), [多标签排名指标](#multilabel-ranking-metrics), [回归指标](#regression-metrics) 和 [聚类指标](#clustering-metrics) 。 - -最后, [虚拟估计](#dummy-estimators) 用于获取随机预测的这些指标的基准值。 - -See also - -对于 “pairwise(成对)” metrics(指标),_samples(样本)_ 之间而不是 estimators (估计量)或者 predictions(预测值),请参阅 [成对的矩阵, 类别和核函数](metrics.html#metrics) 部分。 - -## 3.3.1\. `scoring` 参数: 定义模型评估规则 - -Model selection (模型选择)和 evaluation (评估)使用工具,例如 [`model_selection.GridSearchCV`](generated/sklearn.model_selection.GridSearchCV.html#sklearn.model_selection.GridSearchCV "sklearn.model_selection.GridSearchCV") 和 [`model_selection.cross_val_score`](generated/sklearn.model_selection.cross_val_score.html#sklearn.model_selection.cross_val_score "sklearn.model_selection.cross_val_score") ,采用 `scoring` 参数来控制它们对 estimators evaluated (评估的估计量)应用的指标。 - -### 3.3.1.1\. 常见场景: 预定义值 - -对于最常见的用例, 您可以使用 `scoring` 参数指定一个 scorer object (记分对象); 下表显示了所有可能的值。 所有 scorer objects (记分对象)遵循惯例 **higher return values are better than lower return values(较高的返回值优于较低的返回值)** 。因此,测量模型和数据之间距离的 metrics (度量),如 [`metrics.mean_squared_error`](generated/sklearn.metrics.mean_squared_error.html#sklearn.metrics.mean_squared_error "sklearn.metrics.mean_squared_error") 可用作返回 metric (指数)的 negated value (否定值)的 neg_mean_squared_error 。 - -| Scoring(得分) | Function(函数) | Comment(注解) | -| --- | --- | --- | -| **Classification(分类)** |   |   | -| ‘accuracy’ | [`metrics.accuracy_score`](generated/sklearn.metrics.accuracy_score.html#sklearn.metrics.accuracy_score "sklearn.metrics.accuracy_score") |   | -| ‘average_precision’ | [`metrics.average_precision_score`](generated/sklearn.metrics.average_precision_score.html#sklearn.metrics.average_precision_score "sklearn.metrics.average_precision_score") |   | -| ‘f1’ | [`metrics.f1_score`](generated/sklearn.metrics.f1_score.html#sklearn.metrics.f1_score "sklearn.metrics.f1_score") | for binary targets(用于二进制目标) | -| ‘f1_micro’ | [`metrics.f1_score`](generated/sklearn.metrics.f1_score.html#sklearn.metrics.f1_score "sklearn.metrics.f1_score") | micro-averaged(微平均) | -| ‘f1_macro’ | [`metrics.f1_score`](generated/sklearn.metrics.f1_score.html#sklearn.metrics.f1_score "sklearn.metrics.f1_score") | macro-averaged(微平均) | -| ‘f1_weighted’ | [`metrics.f1_score`](generated/sklearn.metrics.f1_score.html#sklearn.metrics.f1_score "sklearn.metrics.f1_score") | weighted average(加权平均) | -| ‘f1_samples’ | [`metrics.f1_score`](generated/sklearn.metrics.f1_score.html#sklearn.metrics.f1_score "sklearn.metrics.f1_score") | by multilabel sample(通过 multilabel 样本) | -| ‘neg_log_loss’ | [`metrics.log_loss`](generated/sklearn.metrics.log_loss.html#sklearn.metrics.log_loss "sklearn.metrics.log_loss") | requires `predict_proba` support(需要 `predict_proba` 支持) | -| ‘precision’ etc. | [`metrics.precision_score`](generated/sklearn.metrics.precision_score.html#sklearn.metrics.precision_score "sklearn.metrics.precision_score") | suffixes apply as with ‘f1’(后缀适用于 ‘f1’) | -| ‘recall’ etc. | [`metrics.recall_score`](generated/sklearn.metrics.recall_score.html#sklearn.metrics.recall_score "sklearn.metrics.recall_score") | suffixes apply as with ‘f1’(后缀适用于 ‘f1’) | -| ‘roc_auc’ | [`metrics.roc_auc_score`](generated/sklearn.metrics.roc_auc_score.html#sklearn.metrics.roc_auc_score "sklearn.metrics.roc_auc_score") |   | -| **Clustering(聚类)** |   |   | -| ‘adjusted_mutual_info_score’ | [`metrics.adjusted_mutual_info_score`](generated/sklearn.metrics.adjusted_mutual_info_score.html#sklearn.metrics.adjusted_mutual_info_score "sklearn.metrics.adjusted_mutual_info_score") |   | -| ‘adjusted_rand_score’ | [`metrics.adjusted_rand_score`](generated/sklearn.metrics.adjusted_rand_score.html#sklearn.metrics.adjusted_rand_score "sklearn.metrics.adjusted_rand_score") |   | -| ‘completeness_score’ | [`metrics.completeness_score`](generated/sklearn.metrics.completeness_score.html#sklearn.metrics.completeness_score "sklearn.metrics.completeness_score") |   | -| ‘fowlkes_mallows_score’ | [`metrics.fowlkes_mallows_score`](generated/sklearn.metrics.fowlkes_mallows_score.html#sklearn.metrics.fowlkes_mallows_score "sklearn.metrics.fowlkes_mallows_score") |   | -| ‘homogeneity_score’ | [`metrics.homogeneity_score`](generated/sklearn.metrics.homogeneity_score.html#sklearn.metrics.homogeneity_score "sklearn.metrics.homogeneity_score") |   | -| ‘mutual_info_score’ | [`metrics.mutual_info_score`](generated/sklearn.metrics.mutual_info_score.html#sklearn.metrics.mutual_info_score "sklearn.metrics.mutual_info_score") |   | -| ‘normalized_mutual_info_score’ | [`metrics.normalized_mutual_info_score`](generated/sklearn.metrics.normalized_mutual_info_score.html#sklearn.metrics.normalized_mutual_info_score "sklearn.metrics.normalized_mutual_info_score") |   | -| ‘v_measure_score’ | [`metrics.v_measure_score`](generated/sklearn.metrics.v_measure_score.html#sklearn.metrics.v_measure_score "sklearn.metrics.v_measure_score") |   | -| **Regression(回归)** |   |   | -| ‘explained_variance’ | [`metrics.explained_variance_score`](generated/sklearn.metrics.explained_variance_score.html#sklearn.metrics.explained_variance_score "sklearn.metrics.explained_variance_score") |   | -| ‘neg_mean_absolute_error’ | [`metrics.mean_absolute_error`](generated/sklearn.metrics.mean_absolute_error.html#sklearn.metrics.mean_absolute_error "sklearn.metrics.mean_absolute_error") |   | -| ‘neg_mean_squared_error’ | [`metrics.mean_squared_error`](generated/sklearn.metrics.mean_squared_error.html#sklearn.metrics.mean_squared_error "sklearn.metrics.mean_squared_error") |   | -| ‘neg_mean_squared_log_error’ | [`metrics.mean_squared_log_error`](generated/sklearn.metrics.mean_squared_log_error.html#sklearn.metrics.mean_squared_log_error "sklearn.metrics.mean_squared_log_error") |   | -| ‘neg_median_absolute_error’ | [`metrics.median_absolute_error`](generated/sklearn.metrics.median_absolute_error.html#sklearn.metrics.median_absolute_error "sklearn.metrics.median_absolute_error") |   | -| ‘r2’ | [`metrics.r2_score`](generated/sklearn.metrics.r2_score.html#sklearn.metrics.r2_score "sklearn.metrics.r2_score") |   | - -使用案例: - -```py ->>> from sklearn import svm, datasets ->>> from sklearn.model_selection import cross_val_score ->>> iris = datasets.load_iris() ->>> X, y = iris.data, iris.target ->>> clf = svm.SVC(probability=True, random_state=0) ->>> cross_val_score(clf, X, y, scoring='neg_log_loss') -array([-0.07..., -0.16..., -0.06...]) ->>> model = svm.SVC() ->>> cross_val_score(model, X, y, scoring='wrong_choice') -Traceback (most recent call last): -ValueError: 'wrong_choice' is not a valid scoring value. Valid options are ['accuracy', 'adjusted_mutual_info_score', 'adjusted_rand_score', 'average_precision', 'completeness_score', 'explained_variance', 'f1', 'f1_macro', 'f1_micro', 'f1_samples', 'f1_weighted', 'fowlkes_mallows_score', 'homogeneity_score', 'mutual_info_score', 'neg_log_loss', 'neg_mean_absolute_error', 'neg_mean_squared_error', 'neg_mean_squared_log_error', 'neg_median_absolute_error', 'normalized_mutual_info_score', 'precision', 'precision_macro', 'precision_micro', 'precision_samples', 'precision_weighted', 'r2', 'recall', 'recall_macro', 'recall_micro', 'recall_samples', 'recall_weighted', 'roc_auc', 'v_measure_score'] - -``` - -Note - -ValueError exception 列出的值对应于以下部分描述的 functions measuring prediction accuracy (测量预测精度的函数)。 这些函数的 scorer objects (记分对象)存储在 dictionary `sklearn.metrics.SCORERS` 中。 - -### 3.3.1.2\. 根据 metric 函数定义您的评分策略 - -模块 [`sklearn.metrics`](classes.html#module-sklearn.metrics "sklearn.metrics") 还公开了一组 measuring a prediction error (测量预测误差)的简单函数,给出了基础真实的数据和预测: - -* 函数以 `_score` 结尾返回一个值来最大化,越高越好。 -* 函数 `_error` 或 `_loss` 结尾返回一个值来 minimize (最小化),越低越好。当使用 [`make_scorer`](generated/sklearn.metrics.make_scorer.html#sklearn.metrics.make_scorer "sklearn.metrics.make_scorer") 转换成 scorer object (记分对象)时,将 `greater_is_better` 参数设置为 False(默认为 True; 请参阅下面的参数说明)。 - -可用于各种机器学习任务的 Metrics (指标)在下面详细介绍。 - -许多 metrics (指标)没有被用作 `scoring(得分)` 值的名称,有时是因为它们需要额外的参数,例如 [`fbeta_score`](generated/sklearn.metrics.fbeta_score.html#sklearn.metrics.fbeta_score "sklearn.metrics.fbeta_score") 。在这种情况下,您需要生成一个适当的 scoring object (评分对象)。生成 callable object for scoring (可评估对象进行评分)的最简单方法是使用 [`make_scorer`](generated/sklearn.metrics.make_scorer.html#sklearn.metrics.make_scorer "sklearn.metrics.make_scorer") 。该函数将 metrics (指数)转换为可用于可调用的 model evaluation (模型评估)。 - -一个典型的用例是从库中包含一个非默认值参数的 existing metric function (现有指数函数),例如 [`fbeta_score`](generated/sklearn.metrics.fbeta_score.html#sklearn.metrics.fbeta_score "sklearn.metrics.fbeta_score") 函数的 `beta` 参数: - -```py ->>> from sklearn.metrics import fbeta_score, make_scorer ->>> ftwo_scorer = make_scorer(fbeta_score, beta=2) ->>> from sklearn.model_selection import GridSearchCV ->>> from sklearn.svm import LinearSVC ->>> grid = GridSearchCV(LinearSVC(), param_grid={'C': [1, 10]}, scoring=ftwo_scorer) - -``` - -第二个用例是使用 [`make_scorer`](generated/sklearn.metrics.make_scorer.html#sklearn.metrics.make_scorer "sklearn.metrics.make_scorer") 从简单的 python 函数构建一个完全 custom scorer object (自定义的记分对象),可以使用几个参数 : - -* 你要使用的 python 函数(在下面的例子中是 `my_custom_loss_func`) -* python 函数是否返回一个分数 (`greater_is_better=True`, 默认值) 或者一个 loss (损失) (`greater_is_better=False`)。 如果是一个 loss (损失),scorer object (记分对象)的 python 函数的输出被 negated (否定),符合 cross validation convention (交叉验证约定),scorers 为更好的模型返回更高的值。 -* 仅用于 classification metrics (分类指数): 您提供的 python 函数是否需要连续的 continuous decision certainties (判断确定性)(`needs_threshold=True`)。默认值为 False 。 -* 任何其他参数,如 `beta` 或者 `labels` 在 函数 [`f1_score`](generated/sklearn.metrics.f1_score.html#sklearn.metrics.f1_score "sklearn.metrics.f1_score") 。 - -以下是建立 custom scorers (自定义记分对象)的示例,并使用 `greater_is_better` 参数: - -```py ->>> import numpy as np ->>> def my_custom_loss_func(ground_truth, predictions): -... diff = np.abs(ground_truth - predictions).max() -... return np.log(1 + diff) -... ->>> # loss_func will negate the return value of my_custom_loss_func, ->>> # which will be np.log(2), 0.693, given the values for ground_truth ->>> # and predictions defined below. ->>> loss = make_scorer(my_custom_loss_func, greater_is_better=False) ->>> score = make_scorer(my_custom_loss_func, greater_is_better=True) ->>> ground_truth = [[1], [1]] ->>> predictions = [0, 1] ->>> from sklearn.dummy import DummyClassifier ->>> clf = DummyClassifier(strategy='most_frequent', random_state=0) ->>> clf = clf.fit(ground_truth, predictions) ->>> loss(clf,ground_truth, predictions) --0.69... ->>> score(clf,ground_truth, predictions) -0.69... - -``` - -### 3.3.1.3\. 实现自己的记分对象 - -您可以通过从头开始构建自己的 scoring object (记分对象),而不使用 [`make_scorer`](generated/sklearn.metrics.make_scorer.html#sklearn.metrics.make_scorer "sklearn.metrics.make_scorer") factory 来生成更加灵活的 model scorers (模型记分对象)。 对于被叫做 scorer 来说,它需要符合以下两个规则所指定的协议: - -* 可以使用参数 `(estimator, X, y)` 来调用它,其中 `estimator` 是要被评估的模型,`X` 是验证数据, `y` 是 `X` (在有监督情况下) 或 `None` (在无监督情况下) 已经被标注的真实数据目标。 -* 它返回一个浮点数,用于对 `X` 进行量化 `estimator` 的预测质量,参考 `y` 。 再次,按照惯例,更高的数字更好,所以如果你的 scorer 返回 loss ,那么这个值应该被 negated 。 - -### 3.3.1.4\. 使用多个指数评估 - -Scikit-learn 还允许在 `GridSearchCV`, `RandomizedSearchCV` 和 `cross_validate` 中评估 multiple metric (多个指数)。 - -为 `scoring` 参数指定多个评分指标有两种方法: - -* ```py - As an iterable of string metrics(作为 string metrics 的迭代):: - ``` - - ```py - >>> scoring = ['accuracy', 'precision'] - - ``` - -* ```py - As a dict mapping the scorer name to the scoring function(作为 dict ,将 scorer 名称映射到 scoring 函数):: - ``` - - ```py - >>> from sklearn.metrics import accuracy_score - >>> from sklearn.metrics import make_scorer - >>> scoring = {'accuracy': make_scorer(accuracy_score), - ... 'prec': 'precision'} - - ``` - -请注意, dict 值可以是 scorer functions (记分函数)或者 predefined metric strings (预定义 metric 字符串)之一。 - -目前,只有那些返回 single score (单一分数)的 scorer functions (记分函数)才能在 dict 内传递。不允许返回多个值的 Scorer functions (Scorer 函数),并且需要一个 wrapper 才能返回 single metric(单个指标): - -```py ->>> from sklearn.model_selection import cross_validate ->>> from sklearn.metrics import confusion_matrix ->>> # A sample toy binary classification dataset ->>> X, y = datasets.make_classification(n_classes=2, random_state=0) ->>> svm = LinearSVC(random_state=0) ->>> def tp(y_true, y_pred): return confusion_matrix(y_true, y_pred)[0, 0] ->>> def tn(y_true, y_pred): return confusion_matrix(y_true, y_pred)[0, 0] ->>> def fp(y_true, y_pred): return confusion_matrix(y_true, y_pred)[1, 0] ->>> def fn(y_true, y_pred): return confusion_matrix(y_true, y_pred)[0, 1] ->>> scoring = {'tp' : make_scorer(tp), 'tn' : make_scorer(tn), -... 'fp' : make_scorer(fp), 'fn' : make_scorer(fn)} ->>> cv_results = cross_validate(svm.fit(X, y), X, y, scoring=scoring) ->>> # Getting the test set true positive scores ->>> print(cv_results['test_tp']) -[12 13 15] ->>> # Getting the test set false negative scores ->>> print(cv_results['test_fn']) -[5 4 1] - -``` - -## 3.3.2\. 分类指标 - -[`sklearn.metrics`](classes.html#module-sklearn.metrics "sklearn.metrics") 模块实现了几个 loss, score, 和 utility 函数来衡量 classification (分类)性能。 某些 metrics (指标)可能需要 positive class (正类),confidence values(置信度值)或 binary decisions values (二进制决策值)的概率估计。 大多数的实现允许每个样本通过 `sample_weight` 参数为 overall score (总分)提供 weighted contribution (加权贡献)。 - -其中一些仅限于二分类案例: - -| [`precision_recall_curve`](generated/sklearn.metrics.precision_recall_curve.html#sklearn.metrics.precision_recall_curve "sklearn.metrics.precision_recall_curve")(y_true, probas_pred) | Compute precision-recall pairs for different probability thresholds | -| [`roc_curve`](generated/sklearn.metrics.roc_curve.html#sklearn.metrics.roc_curve "sklearn.metrics.roc_curve")(y_true, y_score[, pos_label, …]) | Compute Receiver operating characteristic (ROC) | - -其他也可以在多分类案例中运行: - -| [`cohen_kappa_score`](generated/sklearn.metrics.cohen_kappa_score.html#sklearn.metrics.cohen_kappa_score "sklearn.metrics.cohen_kappa_score")(y1, y2[, labels, weights, …]) | Cohen’s kappa: a statistic that measures inter-annotator agreement. | -| [`confusion_matrix`](generated/sklearn.metrics.confusion_matrix.html#sklearn.metrics.confusion_matrix "sklearn.metrics.confusion_matrix")(y_true, y_pred[, labels, …]) | Compute confusion matrix to evaluate the accuracy of a classification | -| [`hinge_loss`](generated/sklearn.metrics.hinge_loss.html#sklearn.metrics.hinge_loss "sklearn.metrics.hinge_loss")(y_true, pred_decision[, labels, …]) | Average hinge loss (non-regularized) | -| [`matthews_corrcoef`](generated/sklearn.metrics.matthews_corrcoef.html#sklearn.metrics.matthews_corrcoef "sklearn.metrics.matthews_corrcoef")(y_true, y_pred[, …]) | Compute the Matthews correlation coefficient (MCC) | - -有些还可以在 multilabel case (多重案例)中工作: - -| [`accuracy_score`](generated/sklearn.metrics.accuracy_score.html#sklearn.metrics.accuracy_score "sklearn.metrics.accuracy_score")(y_true, y_pred[, normalize, …]) | Accuracy classification score. | -| [`classification_report`](generated/sklearn.metrics.classification_report.html#sklearn.metrics.classification_report "sklearn.metrics.classification_report")(y_true, y_pred[, …]) | Build a text report showing the main classification metrics | -| [`f1_score`](generated/sklearn.metrics.f1_score.html#sklearn.metrics.f1_score "sklearn.metrics.f1_score")(y_true, y_pred[, labels, …]) | Compute the F1 score, also known as balanced F-score or F-measure | -| [`fbeta_score`](generated/sklearn.metrics.fbeta_score.html#sklearn.metrics.fbeta_score "sklearn.metrics.fbeta_score")(y_true, y_pred, beta[, labels, …]) | Compute the F-beta score | -| [`hamming_loss`](generated/sklearn.metrics.hamming_loss.html#sklearn.metrics.hamming_loss "sklearn.metrics.hamming_loss")(y_true, y_pred[, labels, …]) | Compute the average Hamming loss. | -| [`jaccard_similarity_score`](generated/sklearn.metrics.jaccard_similarity_score.html#sklearn.metrics.jaccard_similarity_score "sklearn.metrics.jaccard_similarity_score")(y_true, y_pred[, …]) | Jaccard similarity coefficient score | -| [`log_loss`](generated/sklearn.metrics.log_loss.html#sklearn.metrics.log_loss "sklearn.metrics.log_loss")(y_true, y_pred[, eps, normalize, …]) | Log loss, aka logistic loss or cross-entropy loss. | -| [`precision_recall_fscore_support`](generated/sklearn.metrics.precision_recall_fscore_support.html#sklearn.metrics.precision_recall_fscore_support "sklearn.metrics.precision_recall_fscore_support")(y_true, y_pred) | Compute precision, recall, F-measure and support for each class | -| [`precision_score`](generated/sklearn.metrics.precision_score.html#sklearn.metrics.precision_score "sklearn.metrics.precision_score")(y_true, y_pred[, labels, …]) | Compute the precision | -| [`recall_score`](generated/sklearn.metrics.recall_score.html#sklearn.metrics.recall_score "sklearn.metrics.recall_score")(y_true, y_pred[, labels, …]) | Compute the recall | -| [`zero_one_loss`](generated/sklearn.metrics.zero_one_loss.html#sklearn.metrics.zero_one_loss "sklearn.metrics.zero_one_loss")(y_true, y_pred[, normalize, …]) | Zero-one classification loss. | - -一些通常用于 ranking: - -| [`dcg_score`](generated/sklearn.metrics.dcg_score.html#sklearn.metrics.dcg_score "sklearn.metrics.dcg_score")(y_true, y_score[, k]) | Discounted cumulative gain (DCG) at rank K. | -| [`ndcg_score`](generated/sklearn.metrics.ndcg_score.html#sklearn.metrics.ndcg_score "sklearn.metrics.ndcg_score")(y_true, y_score[, k]) | Normalized discounted cumulative gain (NDCG) at rank K. | - -有些工作与 binary 和 multilabel (但不是多类)的问题: - -| [`average_precision_score`](generated/sklearn.metrics.average_precision_score.html#sklearn.metrics.average_precision_score "sklearn.metrics.average_precision_score")(y_true, y_score[, …]) | Compute average precision (AP) from prediction scores | -| [`roc_auc_score`](generated/sklearn.metrics.roc_auc_score.html#sklearn.metrics.roc_auc_score "sklearn.metrics.roc_auc_score")(y_true, y_score[, average, …]) | Compute Area Under the Curve (AUC) from prediction scores | - -在以下小节中,我们将介绍每个这些功能,前面是一些关于通用 API 和 metric 定义的注释。 - -### 3.3.2.1\. 从二分到多分类和 multilabel - -一些 metrics 基本上是为 binary classification tasks (二分类任务)定义的 (例如 [`f1_score`](generated/sklearn.metrics.f1_score.html#sklearn.metrics.f1_score "sklearn.metrics.f1_score"), [`roc_auc_score`](generated/sklearn.metrics.roc_auc_score.html#sklearn.metrics.roc_auc_score "sklearn.metrics.roc_auc_score")) 。在这些情况下,默认情况下仅评估 positive label (正标签),假设默认情况下,positive label (正类)标记为 `1` (尽管可以通过 `pos_label` 参数进行配置)。 - -将 binary metric (二分指标)扩展为 multiclass (多类)或 multilabel (多标签)问题时,数据将被视为二分问题的集合,每个类都有一个。 然后可以使用多种方法在整个类中 average binary metric calculations (平均二分指标计算),每种类在某些情况下可能会有用。 如果可用,您应该使用 `average` 参数来选择它们。 - -* `"macro(宏)"` 简单地计算 binary metrics (二分指标)的平均值,赋予每个类别相同的权重。在不常见的类别重要的问题上,macro-averaging (宏观平均)可能是突出表现的一种手段。另一方面,所有类别同样重要的假设通常是不真实的,因此 macro-averaging (宏观平均)将过度强调不频繁类的典型的低性能。 -* `"weighted(加权)"` 通过计算其在真实数据样本中的存在来对每个类的 score 进行加权的 binary metrics (二分指标)的平均值来计算类不平衡。 -* `"micro(微)"` 给每个 sample-class pair (样本类对)对 overall metric (总体指数)(sample-class 权重的结果除外) 等同的贡献。除了对每个类别的 metric 进行求和之外,这个总和构成每个类别度量的 dividends (除数)和 divisors (除数)计算一个整体商。 在 multilabel settings (多标签设置)中,Micro-averaging 可能是优先选择的,包括要忽略 majority class (多数类)的 multiclass classification (多类分类)。 -* `"samples(样本)"` 仅适用于 multilabel problems (多标签问题)。它 does not calculate a per-class measure (不计算每个类别的 measure),而是计算 evaluation data (评估数据)中的每个样本的 true and predicted classes (真实和预测类别)的 metric (指标),并返回 (`sample_weight`-weighted) 加权平均。 -* 选择 `average=None` 将返回一个 array 与每个类的 score 。 - -虽然将 multiclass data (多类数据)提供给 metric ,如 binary targets (二分类目标),作为 array of class labels (类标签的数组),multilabel data (多标签数据)被指定为 indicator matrix(指示符矩阵),其中 cell `[i, j]` 具有值 1,如果样本 `i` 具有标号 `j` ,否则为值 0 。 - -### 3.3.2.2\. 精确度得分 - -[`accuracy_score`](generated/sklearn.metrics.accuracy_score.html#sklearn.metrics.accuracy_score "sklearn.metrics.accuracy_score") 函数计算 [accuracy](https://en.wikipedia.org/wiki/Accuracy_and_precision), 正确预测的分数(默认)或计数 (normalize=False)。 - -在 multilabel classification (多标签分类)中,函数返回 subset accuracy(子集精度)。如果样本的 entire set of predicted labels (整套预测标签)与真正的标签组合匹配,则子集精度为 1.0; 否则为 0.0 。 - -如果 ![\hat{y}_i](img/07794b8fa83c7e18c5d1fb175fd7d7bd.jpg) 是第 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 个样本的预测值,![y_i](img/4a22ca544916918b2358e5fc7c71b8e6.jpg) 是相应的真实值,则 ![n_\text{samples}](img/bafb2b9486fa2f91dcc020843770eef6.jpg) 上的正确预测的分数被定义为 - -![\texttt{accuracy}(y, \hat{y}) = \frac{1}{n_\text{samples}} \sum_{i=0}^{n_\text{samples}-1} 1(\hat{y}_i = y_i)](img/2a332823ff053f404ac53657eb86b1a0.jpg) - -其中 ![1(x)](img/1e4e584cd8a99da7f18a5581de1f7be3.jpg) 是 [indicator function(指示函数)](https://en.wikipedia.org/wiki/Indicator_function). - -```py ->>> import numpy as np ->>> from sklearn.metrics import accuracy_score ->>> y_pred = [0, 2, 1, 3] ->>> y_true = [0, 1, 2, 3] ->>> accuracy_score(y_true, y_pred) -0.5 ->>> accuracy_score(y_true, y_pred, normalize=False) -2 - -``` - -In the multilabel case with binary label indicators(在具有二分标签指示符的多标签情况下): - -```py ->>> accuracy_score(np.array([[0, 1], [1, 1]]), np.ones((2, 2))) -0.5 - -``` - -示例: - -* 参阅 [Test with permutations the significance of a classification score](../auto_examples/feature_selection/plot_permutation_test_for_classification.html#sphx-glr-auto-examples-feature-selection-plot-permutation-test-for-classification-py) 例如使用数据集排列的 accuracy score (精度分数)。 - -### 3.3.2.3\. Cohen’s kappa - -函数 [`cohen_kappa_score`](generated/sklearn.metrics.cohen_kappa_score.html#sklearn.metrics.cohen_kappa_score "sklearn.metrics.cohen_kappa_score") 计算 [Cohen’s kappa](https://en.wikipedia.org/wiki/Cohen%27s_kappa) statistic(统计)。 这个 measure (措施)旨在比较不同人工标注者的标签,而不是 classifier (分类器)与 ground truth (真实数据)。 - -kappa score (参阅 docstring )是 -1 和 1 之间的数字。 .8 以上的 scores 通常被认为是很好的 agreement (协议); 0 或者 更低表示没有 agreement (实际上是 random labels (随机标签))。 - -Kappa scores 可以计算 binary or multiclass (二分或者多分类)问题,但不能用于 multilabel problems (多标签问题)(除了手动计算 per-label score (每个标签分数)),而不是两个以上的 annotators (注释器)。 - -```py ->>> from sklearn.metrics import cohen_kappa_score ->>> y_true = [2, 0, 2, 2, 0, 1] ->>> y_pred = [0, 0, 2, 2, 0, 2] ->>> cohen_kappa_score(y_true, y_pred) -0.4285714285714286 - -``` - -### 3.3.2.4\. 混淆矩阵 - -[`confusion_matrix`](generated/sklearn.metrics.confusion_matrix.html#sklearn.metrics.confusion_matrix "sklearn.metrics.confusion_matrix") 函数通过计算 [confusion matrix(混淆矩阵)](https://en.wikipedia.org/wiki/Confusion_matrix) 来 evaluates classification accuracy (评估分类的准确性)。 - -根据定义,confusion matrix (混淆矩阵)中的 entry(条目) ![i, j](img/c63f13d52ac4f65cde6e5dfd9e941562.jpg),是实际上在 group ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 中的 observations (观察数),但预测在 group ![j](img/7b215f2882ce8aaa33a97e43ad626314.jpg) 中。这里是一个示例: - -```py ->>> from sklearn.metrics import confusion_matrix ->>> y_true = [2, 0, 2, 2, 0, 1] ->>> y_pred = [0, 0, 2, 2, 0, 2] ->>> confusion_matrix(y_true, y_pred) -array([[2, 0, 0], - [0, 0, 1], - [1, 0, 2]]) - -``` - -这是一个这样的 confusion matrix (混淆矩阵)的可视化表示 (这个数字来自于 [Confusion matrix](../auto_examples/model_selection/plot_confusion_matrix.html#sphx-glr-auto-examples-model-selection-plot-confusion-matrix-py)): - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_confusion_matrix_0011.png](img/362af37df82b07d11576fc5e45db7828.jpg)](../auto_examples/model_selection/plot_confusion_matrix.html) - -对于 binary problems (二分类问题),我们可以得到 true negatives(真 negatives), false positives(假 positives), false negatives(假 negatives) 和 true positives(真 positives) 的数量如下: - -```py ->>> y_true = [0, 0, 0, 1, 1, 1, 1, 1] ->>> y_pred = [0, 1, 0, 1, 0, 1, 0, 1] ->>> tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel() ->>> tn, fp, fn, tp -(2, 1, 2, 3) - -``` - -示例: - -* 参阅 [Confusion matrix](../auto_examples/model_selection/plot_confusion_matrix.html#sphx-glr-auto-examples-model-selection-plot-confusion-matrix-py) 例如使用 confusion matrix (混淆矩阵)来评估 classifier (分类器)的输出质量。 -* 参阅 [Recognizing hand-written digits](../auto_examples/classification/plot_digits_classification.html#sphx-glr-auto-examples-classification-plot-digits-classification-py) 例如使用 confusion matrix (混淆矩阵)来分类手写数字。 -* 参阅 [Classification of text documents using sparse features](../auto_examples/text/document_classification_20newsgroups.html#sphx-glr-auto-examples-text-document-classification-20newsgroups-py) 例如使用 confusion matrix (混淆矩阵)对文本文档进行分类。 - -### 3.3.2.5\. 分类报告 - -[`classification_report`](generated/sklearn.metrics.classification_report.html#sklearn.metrics.classification_report "sklearn.metrics.classification_report") 函数构建一个显示 main classification metrics (主分类指标)的文本报告。这是一个小例子,其中包含自定义的 `target_names` 和 inferred labels (推断标签): - -```py ->>> from sklearn.metrics import classification_report ->>> y_true = [0, 1, 2, 2, 0] ->>> y_pred = [0, 0, 2, 1, 0] ->>> target_names = ['class 0', 'class 1', 'class 2'] ->>> print(classification_report(y_true, y_pred, target_names=target_names)) - precision recall f1-score support - - class 0 0.67 1.00 0.80 2 - class 1 0.00 0.00 0.00 1 - class 2 1.00 0.50 0.67 2 - -avg / total 0.67 0.60 0.59 5 - -``` - -示例: - -* 参阅 [Recognizing hand-written digits](../auto_examples/classification/plot_digits_classification.html#sphx-glr-auto-examples-classification-plot-digits-classification-py) 作为手写数字的分类报告的使用示例。 -* 参阅 [Classification of text documents using sparse features](../auto_examples/text/document_classification_20newsgroups.html#sphx-glr-auto-examples-text-document-classification-20newsgroups-py) 作为文本文档的分类报告使用的示例。 -* 参阅 [Parameter estimation using grid search with cross-validation](../auto_examples/model_selection/plot_grid_search_digits.html#sphx-glr-auto-examples-model-selection-plot-grid-search-digits-py) 例如使用 grid search with nested cross-validation (嵌套交叉验证进行网格搜索)的分类报告。 - -### 3.3.2.6\. 汉明损失 - -[`hamming_loss`](generated/sklearn.metrics.hamming_loss.html#sklearn.metrics.hamming_loss "sklearn.metrics.hamming_loss") 计算两组样本之间的 average Hamming loss (平均汉明损失)或者 [Hamming distance(汉明距离)](https://en.wikipedia.org/wiki/Hamming_distance) 。 - -如果 ![\hat{y}_j](img/d12d5f9823ac608127ac67df8cecff9d.jpg) 是给定样本的第 ![j](img/7b215f2882ce8aaa33a97e43ad626314.jpg) 个标签的预测值,则 ![y_j](img/8610705cf45aa68b12197abd65653479.jpg) 是相应的真实值,而 ![n_\text{labels}](img/ed51906ca8fbc868248006c841aefa2b.jpg) 是 classes or labels (类或者标签)的数量,则两个样本之间的 Hamming loss (汉明损失) ![L_{Hamming}](img/866891e7bebe66615daa04976af79f99.jpg) 定义为: - -![L_{Hamming}(y, \hat{y}) = \frac{1}{n_\text{labels}} \sum_{j=0}^{n_\text{labels} - 1} 1(\hat{y}_j \not= y_j)](img/94a5c73d8f351280b6313519455a11c7.jpg) - -其中 ![1(x)](img/1e4e584cd8a99da7f18a5581de1f7be3.jpg) 是 [indicator function(指标函数)](https://en.wikipedia.org/wiki/Indicator_function). - -```py ->>> from sklearn.metrics import hamming_loss ->>> y_pred = [1, 2, 3, 4] ->>> y_true = [2, 2, 3, 4] ->>> hamming_loss(y_true, y_pred) -0.25 - -``` - -在具有 binary label indicators (二分标签指示符)的 multilabel (多标签)情况下: - -```py ->>> hamming_loss(np.array([[0, 1], [1, 1]]), np.zeros((2, 2))) -0.75 - -``` - -Note - -在 multiclass classification (多类分类)中, Hamming loss (汉明损失)对应于 `y_true` 和 `y_pred` 之间的 Hamming distance(汉明距离),它类似于 [零一损失](#zero-one-loss) 函数。然而, zero-one loss penalizes (0-1损失惩罚)不严格匹配真实集合的预测集,Hamming loss (汉明损失)惩罚 individual labels (独立标签)。因此,Hamming loss(汉明损失)高于 zero-one loss(0-1 损失),总是在 0 和 1 之间,包括 0 和 1;预测真正的标签的正确的 subset or superset (子集或超集)将给出 0 和 1 之间的 Hamming loss(汉明损失)。 - -### 3.3.2.7\. Jaccard 相似系数 score - -[`jaccard_similarity_score`](generated/sklearn.metrics.jaccard_similarity_score.html#sklearn.metrics.jaccard_similarity_score "sklearn.metrics.jaccard_similarity_score") 函数计算 pairs of label sets (标签组对)之间的 [Jaccard similarity coefficients](https://en.wikipedia.org/wiki/Jaccard_index) 也称作 Jaccard index 的平均值(默认)或总和。 - -将第 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 个样本的 Jaccard similarity coefficient 与 被标注过的真实数据的标签集 ![y_i](img/4a22ca544916918b2358e5fc7c71b8e6.jpg) 和 predicted label set (预测标签集):math:<cite>hat{y}_i</cite> 定义为 - -![J(y_i, \hat{y}_i) = \frac{|y_i \cap \hat{y}_i|}{|y_i \cup \hat{y}_i|}.](img/6b1c74edd599db63c339ead392e8e54a.jpg) - -在 binary and multiclass classification (二分和多类分类)中,Jaccard similarity coefficient score 等于 classification accuracy(分类精度)。 - -```py ->>> import numpy as np ->>> from sklearn.metrics import jaccard_similarity_score ->>> y_pred = [0, 2, 1, 3] ->>> y_true = [0, 1, 2, 3] ->>> jaccard_similarity_score(y_true, y_pred) -0.5 ->>> jaccard_similarity_score(y_true, y_pred, normalize=False) -2 - -``` - -在具有 binary label indicators (二分标签指示符)的 multilabel (多标签)情况下: - -```py ->>> jaccard_similarity_score(np.array([[0, 1], [1, 1]]), np.ones((2, 2))) -0.75 - -``` - -### 3.3.2.8\. 精准,召回和 F-measures - -直观地来理解,[precision](https://en.wikipedia.org/wiki/Precision_and_recall#Precision) 是 the ability of the classifier not to label as positive a sample that is negative (classifier (分类器)的标签不能被标记为正的样本为负的能力),并且 [recall](https://en.wikipedia.org/wiki/Precision_and_recall#Recall) 是 classifier (分类器)查找所有 positive samples (正样本)的能力。 - -[F-measure](https://en.wikipedia.org/wiki/F1_score) (![F_\beta](img/5bd6037aeb804486a6f7cc0415ace8fc.jpg) 和 ![F_1](img/a51f44dfa9b1942326c669c5ffe3f9f6.jpg) measures) 可以解释为 precision (精度)和 recall (召回)的 weighted harmonic mean (加权调和平均值)。 ![F_\beta](img/5bd6037aeb804486a6f7cc0415ace8fc.jpg) measure 值达到其最佳值 1 ,其最差分数为 0 。与 ![\beta = 1](img/7ca5945518e2f3eff72bd67b029e919a.jpg), ![F_\beta](img/5bd6037aeb804486a6f7cc0415ace8fc.jpg) 和 ![F_1](img/a51f44dfa9b1942326c669c5ffe3f9f6.jpg) 是等价的, recall (召回)和 precision (精度)同样重要。 - -[`precision_recall_curve`](generated/sklearn.metrics.precision_recall_curve.html#sklearn.metrics.precision_recall_curve "sklearn.metrics.precision_recall_curve") 通过改变 decision threshold (决策阈值)从 ground truth label (被标记的真实数据标签) 和 score given by the classifier (分类器给出的分数)计算 precision-recall curve (精确召回曲线)。 - -[`average_precision_score`](generated/sklearn.metrics.average_precision_score.html#sklearn.metrics.average_precision_score "sklearn.metrics.average_precision_score") 函数根据 prediction scores (预测分数)计算出 average precision (AP)(平均精度)。该分数对应于 precision-recall curve (精确召回曲线)下的面积。该值在 0 和 1 之间,并且越高越好。通过 random predictions (随机预测), AP 是 fraction of positive samples (正样本的分数)。 - -几个函数可以让您 analyze the precision (分析精度),recall(召回) 和 F-measures 得分: - -| [`average_precision_score`](generated/sklearn.metrics.average_precision_score.html#sklearn.metrics.average_precision_score "sklearn.metrics.average_precision_score")(y_true, y_score[, …]) | Compute average precision (AP) from prediction scores | -| [`f1_score`](generated/sklearn.metrics.f1_score.html#sklearn.metrics.f1_score "sklearn.metrics.f1_score")(y_true, y_pred[, labels, …]) | Compute the F1 score, also known as balanced F-score or F-measure | -| [`fbeta_score`](generated/sklearn.metrics.fbeta_score.html#sklearn.metrics.fbeta_score "sklearn.metrics.fbeta_score")(y_true, y_pred, beta[, labels, …]) | Compute the F-beta score | -| [`precision_recall_curve`](generated/sklearn.metrics.precision_recall_curve.html#sklearn.metrics.precision_recall_curve "sklearn.metrics.precision_recall_curve")(y_true, probas_pred) | Compute precision-recall pairs for different probability thresholds | -| [`precision_recall_fscore_support`](generated/sklearn.metrics.precision_recall_fscore_support.html#sklearn.metrics.precision_recall_fscore_support "sklearn.metrics.precision_recall_fscore_support")(y_true, y_pred) | Compute precision, recall, F-measure and support for each class | -| [`precision_score`](generated/sklearn.metrics.precision_score.html#sklearn.metrics.precision_score "sklearn.metrics.precision_score")(y_true, y_pred[, labels, …]) | Compute the precision | -| [`recall_score`](generated/sklearn.metrics.recall_score.html#sklearn.metrics.recall_score "sklearn.metrics.recall_score")(y_true, y_pred[, labels, …]) | Compute the recall | - -请注意,[`precision_recall_curve`](generated/sklearn.metrics.precision_recall_curve.html#sklearn.metrics.precision_recall_curve "sklearn.metrics.precision_recall_curve") 函数仅限于 binary case (二分情况)。 [`average_precision_score`](generated/sklearn.metrics.average_precision_score.html#sklearn.metrics.average_precision_score "sklearn.metrics.average_precision_score") 函数只适用于 binary classification and multilabel indicator format (二分类和多标签指示器格式)。 - -示例: - -* 参阅 [Classification of text documents using sparse features](../auto_examples/text/document_classification_20newsgroups.html#sphx-glr-auto-examples-text-document-classification-20newsgroups-py) 例如 [`f1_score`](generated/sklearn.metrics.f1_score.html#sklearn.metrics.f1_score "sklearn.metrics.f1_score") 用于分类文本文档的用法。 -* 参阅 [Parameter estimation using grid search with cross-validation](../auto_examples/model_selection/plot_grid_search_digits.html#sphx-glr-auto-examples-model-selection-plot-grid-search-digits-py) 例如 [`precision_score`](generated/sklearn.metrics.precision_score.html#sklearn.metrics.precision_score "sklearn.metrics.precision_score") 和 [`recall_score`](generated/sklearn.metrics.recall_score.html#sklearn.metrics.recall_score "sklearn.metrics.recall_score") 用于 using grid search with nested cross-validation (使用嵌套交叉验证的网格搜索)来估计参数。 -* 参阅 [Precision-Recall](../auto_examples/model_selection/plot_precision_recall.html#sphx-glr-auto-examples-model-selection-plot-precision-recall-py) 例如 [`precision_recall_curve`](generated/sklearn.metrics.precision_recall_curve.html#sklearn.metrics.precision_recall_curve "sklearn.metrics.precision_recall_curve") 用于 evaluate classifier output quality(评估分类器输出质量)。 - -#### 3.3.2.8.1\. 二分类 - -在二分类任务中,术语 ‘’positive(正)’’ 和 ‘’negative(负)’’ 是指 classifier’s prediction (分类器的预测),术语 ‘’true(真)’’ 和 ‘’false(假)’’ 是指该预测是否对应于 external judgment (外部判断)(有时被称为 ‘’observation(观测值)’‘)。给出这些定义,我们可以指定下表: - -|   | Actual class (observation) | -| Predicted class (expectation) | tp (true positive) Correct result | fp (false positive) Unexpected result | -| fn (false negative) Missing result | tn (true negative) Correct absence of result | - -在这种情况下,我们可以定义 precision(精度), recall(召回) 和 F-measure 的概念: - -![\text{precision} = \frac{tp}{tp + fp},](img/3771db7af1e3b7bf33e15ec20d278f39.jpg) - -![\text{recall} = \frac{tp}{tp + fn},](img/407341c3d4d055b857bb3229003b9daf.jpg) - -![F_\beta = (1 + \beta^2) \frac{\text{precision} \times \text{recall}}{\beta^2 \text{precision} + \text{recall}}.](img/b3edbb24837112f795a22e3574457416.jpg) - -以下是 binary classification (二分类)中的一些小例子: - -```py ->>> from sklearn import metrics ->>> y_pred = [0, 1, 0, 0] ->>> y_true = [0, 1, 0, 1] ->>> metrics.precision_score(y_true, y_pred) -1.0 ->>> metrics.recall_score(y_true, y_pred) -0.5 ->>> metrics.f1_score(y_true, y_pred) -0.66... ->>> metrics.fbeta_score(y_true, y_pred, beta=0.5) -0.83... ->>> metrics.fbeta_score(y_true, y_pred, beta=1) -0.66... ->>> metrics.fbeta_score(y_true, y_pred, beta=2) -0.55... ->>> metrics.precision_recall_fscore_support(y_true, y_pred, beta=0.5) -(array([ 0.66..., 1\. ]), array([ 1\. , 0.5]), array([ 0.71..., 0.83...]), array([2, 2]...)) - ->>> import numpy as np ->>> from sklearn.metrics import precision_recall_curve ->>> from sklearn.metrics import average_precision_score ->>> y_true = np.array([0, 0, 1, 1]) ->>> y_scores = np.array([0.1, 0.4, 0.35, 0.8]) ->>> precision, recall, threshold = precision_recall_curve(y_true, y_scores) ->>> precision -array([ 0.66..., 0.5 , 1\. , 1\. ]) ->>> recall -array([ 1\. , 0.5, 0.5, 0\. ]) ->>> threshold -array([ 0.35, 0.4 , 0.8 ]) ->>> average_precision_score(y_true, y_scores) -0.83... - -``` - -#### 3.3.2.8.2\. 多类和多标签分类 - -在 multiclass and multilabel classification task(多类和多标签分类任务)中,precision(精度), recall(召回), and F-measures 的概念可以独立地应用于每个标签。 有以下几种方法 combine results across labels (将结果跨越标签组合),由 `average` 参数指定为 [`average_precision_score`](generated/sklearn.metrics.average_precision_score.html#sklearn.metrics.average_precision_score "sklearn.metrics.average_precision_score") (仅用于 multilabel), [`f1_score`](generated/sklearn.metrics.f1_score.html#sklearn.metrics.f1_score "sklearn.metrics.f1_score"), [`fbeta_score`](generated/sklearn.metrics.fbeta_score.html#sklearn.metrics.fbeta_score "sklearn.metrics.fbeta_score"), [`precision_recall_fscore_support`](generated/sklearn.metrics.precision_recall_fscore_support.html#sklearn.metrics.precision_recall_fscore_support "sklearn.metrics.precision_recall_fscore_support"), [`precision_score`](generated/sklearn.metrics.precision_score.html#sklearn.metrics.precision_score "sklearn.metrics.precision_score") 和 [`recall_score`](generated/sklearn.metrics.recall_score.html#sklearn.metrics.recall_score "sklearn.metrics.recall_score") 函数,如上 [above](#average) 所述。请注意,对于在包含所有标签的多类设置中进行 “micro”-averaging (”微”平均),将产生相等的 precision(精度), recall(召回)和 ![F](img/8ef970a809e9beef56eb7a78d0133978.jpg) ,而 “weighted(加权)” averaging(平均)可能会产生 precision(精度)和 recall(召回)之间的 F-score 。 - -为了使这一点更加明确,请考虑以下 notation (符号): - -* ![y](img/0775c03fc710a24df297dedcec515aaf.jpg) _predicted(预测)_ ![(sample, label)](img/943add7649d85f7ef63a83356dd6f234.jpg) 对 -* ![\hat{y}](img/047826f1c2e6f2687b304cb5217be8d8.jpg) _true(真)_ ![(sample, label)](img/943add7649d85f7ef63a83356dd6f234.jpg) 对 -* ![L](img/639e82f3829a0ad677110cc33a028c98.jpg) labels 集合 -* ![S](img/12ecd862769bee1e71c75c134b6423bb.jpg) samples 集合 -* ![y_s](img/67f18f488d2173299bc076b212f6aee9.jpg) ![y](img/0775c03fc710a24df297dedcec515aaf.jpg) 的子集与样本 ![s](img/0faa297883831c0432cf4d72960eeb6c.jpg), 即 ![y_s := \left\{(s', l) \in y | s' = s\right\}](img/0a7b173908e1ba21b1132121dd409ded.jpg) -* ![y_l](img/42f93b2b294f585223e6c663f86504d0.jpg) ![y](img/0775c03fc710a24df297dedcec515aaf.jpg) 的子集与 label ![l](img/eb604628a01ce7d6db62d61eba6e2e2f.jpg) -* 类似的, ![\hat{y}_s](img/572f614c4b9bc376ebbf6ca259b6558e.jpg) 和 ![\hat{y}_l](img/280a00b263d3144cd3a9c424ed44ee51.jpg) 是 ![\hat{y}](img/047826f1c2e6f2687b304cb5217be8d8.jpg) 的子集 -* ![P(A, B) := \frac{\left| A \cap B \right|}{\left|A\right|}](img/7e76cbbbf685f7ec4bec704a9b5ea007.jpg) -* ![R(A, B) := \frac{\left| A \cap B \right|}{\left|B\right|}](img/99e96cb74c925ba51098fe6167e22c44.jpg) (Conventions (公约)在处理 ![B = \emptyset](img/9a2b4cb70f12a0e7419ffde362e1bed4.jpg) 有所不同; 这个实现使用 ![R(A, B):=0](img/4f11727a275459ce82826a9e02800c28.jpg), 与 ![P](img/4bfe956324cef23278c5192b0fb8029b.jpg) 类似.) -* ![F_\beta(A, B) := \left(1 + \beta^2\right) \frac{P(A, B) \times R(A, B)}{\beta^2 P(A, B) + R(A, B)}](img/3109bc087a626380237668dfcc4ecd96.jpg) - -然后将 metrics (指标)定义为: - -| `average` | Precision | Recall | F_beta | -| --- | --- | --- | --- | -| `"micro"` | ![P(y, \hat{y})](img/fc080793a40b71dc553fe8966ad7516a.jpg) | ![R(y, \hat{y})](img/9afe9de54aeed2a857e99cf6444ff0e5.jpg) | ![F_\beta(y, \hat{y})](img/6e87bd4511cfd9af64076cc1cf8f1bbc.jpg) | -| `"samples"` | ![\frac{1}{\left|S\right|} \sum_{s \in S} P(y_s, \hat{y}_s)](img/c471a6ca04f68a6d888d4c8ad95ba189.jpg) | ![\frac{1}{\left|S\right|} \sum_{s \in S} R(y_s, \hat{y}_s)](img/97f4093251d6c6f6f7d0902a86a08dbe.jpg) | ![\frac{1}{\left|S\right|} \sum_{s \in S} F_\beta(y_s, \hat{y}_s)](img/b36270d22513e9645235b5ad4c3cd7dd.jpg) | -| `"macro"` | ![\frac{1}{\left|L\right|} \sum_{l \in L} P(y_l, \hat{y}_l)](img/47738e3e36a9bddb5bc708e8fc666204.jpg) | ![\frac{1}{\left|L\right|} \sum_{l \in L} R(y_l, \hat{y}_l)](img/87fef5b961bf8a90d58faa5e4084a081.jpg) | ![\frac{1}{\left|L\right|} \sum_{l \in L} F_\beta(y_l, \hat{y}_l)](img/412f5988c3736daa68f47a0dc9fba659.jpg) | -| `"weighted"` | ![\frac{1}{\sum_{l \in L} \left|\hat{y}_l\right|} \sum_{l \in L} \left|\hat{y}_l\right| P(y_l, \hat{y}_l)](img/c3de98827a889725d91141a5780692b5.jpg) | ![\frac{1}{\sum_{l \in L} \left|\hat{y}_l\right|} \sum_{l \in L} \left|\hat{y}_l\right| R(y_l, \hat{y}_l)](img/0e7d39317aed470ee92522354b5fbe04.jpg) | ![\frac{1}{\sum_{l \in L} \left|\hat{y}_l\right|} \sum_{l \in L} \left|\hat{y}_l\right| F_\beta(y_l, \hat{y}_l)](img/f43793e26fc93870e33eb062060e309a.jpg) | -| `None` | ![\langle P(y_l, \hat{y}_l) | l \in L \rangle](img/1fa419ff78b610bf4a5b3b71df728cec.jpg) | ![\langle R(y_l, \hat{y}_l) | l \in L \rangle](img/cddb30ab60430b100271b055376e8363.jpg) | ![\langle F_\beta(y_l, \hat{y}_l) | l \in L \rangle](img/a0c2e3fe9c6a7a8416435260aa55dc4a.jpg) | - -```py ->>> from sklearn import metrics ->>> y_true = [0, 1, 2, 0, 1, 2] ->>> y_pred = [0, 2, 1, 0, 0, 1] ->>> metrics.precision_score(y_true, y_pred, average='macro') -0.22... ->>> metrics.recall_score(y_true, y_pred, average='micro') -... -0.33... ->>> metrics.f1_score(y_true, y_pred, average='weighted') -0.26... ->>> metrics.fbeta_score(y_true, y_pred, average='macro', beta=0.5) -0.23... ->>> metrics.precision_recall_fscore_support(y_true, y_pred, beta=0.5, average=None) -... -(array([ 0.66..., 0\. , 0\. ]), array([ 1., 0., 0.]), array([ 0.71..., 0\. , 0\. ]), array([2, 2, 2]...)) - -``` - -For multiclass classification with a “negative class”, it is possible to exclude some labels: - -```py ->>> metrics.recall_score(y_true, y_pred, labels=[1, 2], average='micro') -... # excluding 0, no labels were correctly recalled -0.0 - -``` - -Similarly, labels not present in the data sample may be accounted for in macro-averaging. - -```py ->>> metrics.precision_score(y_true, y_pred, labels=[0, 1, 2, 3], average='macro') -... -0.166... - -``` - -### 3.3.2.9\. Hinge loss - -[`hinge_loss`](generated/sklearn.metrics.hinge_loss.html#sklearn.metrics.hinge_loss "sklearn.metrics.hinge_loss") 函数使用 [hinge loss](https://en.wikipedia.org/wiki/Hinge_loss) 计算模型和数据之间的 average distance (平均距离),这是一种只考虑 prediction errors (预测误差)的 one-sided metric (单向指标)。(Hinge loss 用于最大边界分类器,如支持向量机) - -如果标签用 +1 和 -1 编码,则 ![y](img/0775c03fc710a24df297dedcec515aaf.jpg): 是真实值,并且 ![w](img/8a58e8df6a985a3273e39bac7dd72b1f.jpg) 是由 `decision_function` 输出的 predicted decisions (预测决策),则 hinge loss 定义为: - -![L_\text{Hinge}(y, w) = \max\left\{1 - wy, 0\right\} = \left|1 - wy\right|_+](img/3d59995ed97bdad674b6afd6fbd928ec.jpg) - -如果有两个以上的标签, [`hinge_loss`](generated/sklearn.metrics.hinge_loss.html#sklearn.metrics.hinge_loss "sklearn.metrics.hinge_loss") 由于 Crammer & Singer 而使用了 multiclass variant (多类型变体)。 [Here](http://jmlr.csail.mit.edu/papers/volume2/crammer01a/crammer01a.pdf) 是描述它的论文。 - -如果 ![y_w](img/decc30cee202697370eb9e21062c54b7.jpg) 是真实标签的 predicted decision (预测决策),并且 ![y_t](img/014b479ec81146a77562d251269a0f2e.jpg) 是所有其他标签的预测决策的最大值,其中预测决策由 decision function (决策函数)输出,则 multiclass hinge loss 定义如下: - -![L_\text{Hinge}(y_w, y_t) = \max\left\{1 + y_t - y_w, 0\right\}](img/6569ca3d831148970ddb4c7dfc3f2572.jpg) - -这里是一个小例子,演示了在 binary class (二类)问题中使用了具有 svm classifier (svm 的分类器)的 [`hinge_loss`](generated/sklearn.metrics.hinge_loss.html#sklearn.metrics.hinge_loss "sklearn.metrics.hinge_loss") 函数: - -```py ->>> from sklearn import svm ->>> from sklearn.metrics import hinge_loss ->>> X = [[0], [1]] ->>> y = [-1, 1] ->>> est = svm.LinearSVC(random_state=0) ->>> est.fit(X, y) -LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True, - intercept_scaling=1, loss='squared_hinge', max_iter=1000, - multi_class='ovr', penalty='l2', random_state=0, tol=0.0001, - verbose=0) ->>> pred_decision = est.decision_function([[-2], [3], [0.5]]) ->>> pred_decision -array([-2.18..., 2.36..., 0.09...]) ->>> hinge_loss([-1, 1, 1], pred_decision) -0.3... - -``` - -这里是一个示例,演示了在 multiclass problem (多类问题)中使用了具有 svm 分类器的 [`hinge_loss`](generated/sklearn.metrics.hinge_loss.html#sklearn.metrics.hinge_loss "sklearn.metrics.hinge_loss") 函数: - -```py ->>> X = np.array([[0], [1], [2], [3]]) ->>> Y = np.array([0, 1, 2, 3]) ->>> labels = np.array([0, 1, 2, 3]) ->>> est = svm.LinearSVC() ->>> est.fit(X, Y) -LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True, - intercept_scaling=1, loss='squared_hinge', max_iter=1000, - multi_class='ovr', penalty='l2', random_state=None, tol=0.0001, - verbose=0) ->>> pred_decision = est.decision_function([[-1], [2], [3]]) ->>> y_true = [0, 2, 3] ->>> hinge_loss(y_true, pred_decision, labels) -0.56... - -``` - -### 3.3.2.10\. Log 损失 - -Log loss,又被称为 logistic regression loss(logistic 回归损失)或者 cross-entropy loss(交叉熵损失) 定义在 probability estimates (概率估计)。它通常用于 (multinomial) logistic regression ((多项式)logistic 回归)和 neural networks (神经网络)以及 expectation-maximization (期望最大化)的一些变体中,并且可用于评估分类器的 probability outputs (概率输出)(`predict_proba`)而不是其 discrete predictions (离散预测)。 - -对于具有真实标签 ![y \in \{0,1\}](img/8480724cd60359c7a8ceda7bee5590bd.jpg) 的 binary classification (二分类)和 probability estimate (概率估计) ![p = \operatorname{Pr}(y = 1)](img/685006d43de154949bfb11efd87df4f1.jpg), 每个样本的 log loss 是给定的分类器的 negative log-likelihood 真正的标签: - -![L_{\log}(y, p) = -\log \operatorname{Pr}(y|p) = -(y \log (p) + (1 - y) \log (1 - p))](img/7d1cd85c2f165c7bde33eccf4be29e75.jpg) - -这扩展到 multiclass case (多类案例)如下。 让一组样本的真实标签被编码为 1-of-K binary indicator matrix ![Y](img/966bd0680e0e71a4df98abab98818724.jpg), 即 如果样本 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 具有取自一组 ![K](img/e279b8169ddd6581c5606c868ba52fae.jpg) 个标签的标签 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) ,则 ![y_{i,k} = 1](img/7947f721109ac76f1366b72715d3e7e3.jpg) 。令 ![P](img/4bfe956324cef23278c5192b0fb8029b.jpg) 为 matrix of probability estimates (概率估计矩阵), ![p_{i,k} = \operatorname{Pr}(t_{i,k} = 1)](img/418f3dbcb32031257a948ec23d05e53e.jpg) 。那么整套的 log loss 就是 - -![L_{\log}(Y, P) = -\log \operatorname{Pr}(Y|P) = - \frac{1}{N} \sum_{i=0}^{N-1} \sum_{k=0}^{K-1} y_{i,k} \log p_{i,k}](img/5fc2f399717cfe5187dc09896972a850.jpg) - -为了看这这里如何 generalizes (推广)上面给出的 binary log loss (二分 log loss),请注意,在 binary case (二分情况下),![p_{i,0} = 1 - p_{i,1}](img/0bc78b13595e61ff422e00bb2686c7e8.jpg) 和 ![y_{i,0} = 1 - y_{i,1}](img/c82c4d24e15330860a4ca71a31ddd553.jpg) ,因此扩展 ![y_{i,k} \in \{0,1\}](img/9f2872d8b84b398d8dd6408fd880d3b4.jpg) 的 inner sum (内部和),给出 binary log loss (二分 log loss)。 - -[`log_loss`](generated/sklearn.metrics.log_loss.html#sklearn.metrics.log_loss "sklearn.metrics.log_loss") 函数计算出一个 a list of ground-truth labels (已标注的真实数据的标签的列表)和一个 probability matrix (概率矩阵) 的 log loss,由 estimator (估计器)的 `predict_proba` 方法返回。 - -```py ->>> from sklearn.metrics import log_loss ->>> y_true = [0, 0, 1, 1] ->>> y_pred = [[.9, .1], [.8, .2], [.3, .7], [.01, .99]] ->>> log_loss(y_true, y_pred) -0.1738... - -``` - -`y_pred` 中的第一个 `[.9, .1]` 表示第一个样本具有标签 0 的 90% 概率。log loss 是非负数。 - -### 3.3.2.11\. 马修斯相关系数 - -[`matthews_corrcoef`](generated/sklearn.metrics.matthews_corrcoef.html#sklearn.metrics.matthews_corrcoef "sklearn.metrics.matthews_corrcoef") 函数用于计算 binary classes (二分类)的 [Matthew’s correlation coefficient (MCC)](https://en.wikipedia.org/wiki/Matthews_correlation_coefficient) 引用自 Wikipedia: - -> “Matthews correlation coefficient(马修斯相关系数)用于机器学习,作为 binary (two-class) classifications (二分类)分类质量的度量。它考虑到 true and false positives and negatives (真和假的 positives 和 negatives),通常被认为是可以使用的 balanced measure(平衡措施),即使 classes are of very different sizes (类别大小不同)。MCC 本质上是 -1 和 +1 之间的相关系数值。系数 +1 表示完美预测,0 表示平均随机预测, -1 表示反向预测。statistic (统计量)也称为 phi coefficient (phi)系数。” - -在 binary (two-class) (二分类)情况下,![tp](img/0fd5cc61b1ca3db3b190fbfad2a38813.jpg), ![tn](img/107556ec49c074270575d6b99f3d2029.jpg), ![fp](img/ad8371d06b000849fa4e2fbd6b386c7d.jpg) 和 ![fn](img/00a1e1837f700cef7352acfafd328607.jpg) 分别是 true positives, true negatives, false positives 和 false negatives 的数量,MCC 定义为 - -![MCC = \frac{tp \times tn - fp \times fn}{\sqrt{(tp + fp)(tp + fn)(tn + fp)(tn + fn)}}.](img/b2b4edffe444aa936ad59a769317f692.jpg) - -在 multiclass case (多类的情况)下, Matthews correlation coefficient(马修斯相关系数) 可以根据 ![K](img/e279b8169ddd6581c5606c868ba52fae.jpg) classes (类)的 [`confusion_matrix`](generated/sklearn.metrics.confusion_matrix.html#sklearn.metrics.confusion_matrix "sklearn.metrics.confusion_matrix") ![C](img/4b6d782a67ac392e97215c46b7590bf7.jpg) 定义 [defined](http://rk.kvl.dk/introduction/index.html) 。为了简化定义,考虑以下中间变量: - -* ![t_k=\sum_{i}^{K} C_{ik}](img/341145ae3a937e5fa152262d13dc6fcf.jpg) 真正发生了 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 类的次数, -* ![p_k=\sum_{i}^{K} C_{ki}](img/5d197c73e8e0bc6ba78f74b2a205886e.jpg) ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 类被预测的次数, -* ![c=\sum_{k}^{K} C_{kk}](img/c5396cf8ee04b897a37bc7cd54383eaa.jpg) 正确预测的样本总数, -* ![s=\sum_{i}^{K} \sum_{j}^{K} C_{ij}](img/094a3a73abc84f5a6c1e0b72e15152d7.jpg) 样本总数. - -然后 multiclass MCC 定义为: - - -![MCC = \frac{ - c \times s - \sum_{k}^{K} p_k \times t_k -}{\sqrt{ - (s^2 - \sum_{k}^{K} p_k^2) \times - (s^2 - \sum_{k}^{K} t_k^2) -}}](img/e73c79ca71fe87074008fd5f464d686d.jpg) - - -当有两个以上的标签时, MCC 的值将不再在 -1 和 +1 之间。相反,根据已经标注的真实数据的数量和分布情况,最小值将介于 -1 和 0 之间。最大值始终为 +1 。 - -这是一个小例子,说明了使用 [`matthews_corrcoef`](generated/sklearn.metrics.matthews_corrcoef.html#sklearn.metrics.matthews_corrcoef "sklearn.metrics.matthews_corrcoef") 函数: - -```py ->>> from sklearn.metrics import matthews_corrcoef ->>> y_true = [+1, +1, +1, -1] ->>> y_pred = [+1, -1, +1, +1] ->>> matthews_corrcoef(y_true, y_pred) --0.33... - -``` - -### 3.3.2.12\. Receiver operating characteristic (ROC) - -函数 [`roc_curve`](generated/sklearn.metrics.roc_curve.html#sklearn.metrics.roc_curve "sklearn.metrics.roc_curve") 计算 [receiver operating characteristic curve, or ROC curve](https://en.wikipedia.org/wiki/Receiver_operating_characteristic). 引用 Wikipedia : - -> “A receiver operating characteristic (ROC), 或者简单的 ROC 曲线,是一个图形图,说明了 binary classifier (二分分类器)系统的性能,因为 discrimination threshold (鉴别阈值)是变化的。它是通过在不同的阈值设置下,从 true positives out of the positives (TPR = true positive 比例) 与 false positives out of the negatives (FPR = false positive 比例) 绘制 true positive 的比例来创建的。 TPR 也称为 sensitivity(灵敏度),FPR 是减去 specificity(特异性) 或 true negative 比例。” - -该函数需要真正的 binar value (二分值)和 target scores(目标分数),这可以是 positive class 的 probability estimates (概率估计),confidence values(置信度值)或 binary decisions(二分决策)。 这是一个如何使用 [`roc_curve`](generated/sklearn.metrics.roc_curve.html#sklearn.metrics.roc_curve "sklearn.metrics.roc_curve") 函数的小例子: - -```py ->>> import numpy as np ->>> from sklearn.metrics import roc_curve ->>> y = np.array([1, 1, 2, 2]) ->>> scores = np.array([0.1, 0.4, 0.35, 0.8]) ->>> fpr, tpr, thresholds = roc_curve(y, scores, pos_label=2) ->>> fpr -array([ 0\. , 0.5, 0.5, 1\. ]) ->>> tpr -array([ 0.5, 0.5, 1\. , 1\. ]) ->>> thresholds -array([ 0.8 , 0.4 , 0.35, 0.1 ]) - -``` - -该图显示了这样的 ROC 曲线的示例: - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_roc_0011.png](img/b38a0de3f98aa9b8837354765bc9e3f6.jpg)](../auto_examples/model_selection/plot_roc.html) - -[`roc_auc_score`](generated/sklearn.metrics.roc_auc_score.html#sklearn.metrics.roc_auc_score "sklearn.metrics.roc_auc_score") 函数计算 receiver operating characteristic (ROC) 曲线下的面积,也由 AUC 和 AUROC 表示。通过计算 roc 曲线下的面积,曲线信息总结为一个数字。 有关更多的信息,请参阅 [Wikipedia article on AUC](https://en.wikipedia.org/wiki/Receiver_operating_characteristic#Area_under_the_curve) . - -```py ->>> import numpy as np ->>> from sklearn.metrics import roc_auc_score ->>> y_true = np.array([0, 0, 1, 1]) ->>> y_scores = np.array([0.1, 0.4, 0.35, 0.8]) ->>> roc_auc_score(y_true, y_scores) -0.75 - -``` - -在 multi-label classification (多标签分类)中, [`roc_auc_score`](generated/sklearn.metrics.roc_auc_score.html#sklearn.metrics.roc_auc_score "sklearn.metrics.roc_auc_score") 函数通过在标签上进行平均来扩展 [above](#average) . - -与诸如 subset accuracy (子集精确度),Hamming loss(汉明损失)或 F1 score 的 metrics(指标)相比, ROC 不需要优化每个标签的阈值。[`roc_auc_score`](generated/sklearn.metrics.roc_auc_score.html#sklearn.metrics.roc_auc_score "sklearn.metrics.roc_auc_score") 函数也可以用于 multi-class classification (多类分类),如果预测的输出被 binarized (二分化)。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_roc_0021.png](img/aa5e9ace265afd9e1f881564a1923a17.jpg)](../auto_examples/model_selection/plot_roc.html) - -示例: - -* 参阅 [Receiver Operating Characteristic (ROC)](../auto_examples/model_selection/plot_roc.html#sphx-glr-auto-examples-model-selection-plot-roc-py) 例如使用 ROC 来评估分类器输出的质量。 -* 参阅 [Receiver Operating Characteristic (ROC) with cross validation](../auto_examples/model_selection/plot_roc_crossval.html#sphx-glr-auto-examples-model-selection-plot-roc-crossval-py) 例如使用 ROC 来评估分类器输出质量,使用 cross-validation (交叉验证)。 -* 参阅 [Species distribution modeling](../auto_examples/applications/plot_species_distribution_modeling.html#sphx-glr-auto-examples-applications-plot-species-distribution-modeling-py) 例如使用 ROC 来 model species distribution 模拟物种分布。 - -### 3.3.2.13\. 零一损失 - -[`zero_one_loss`](generated/sklearn.metrics.zero_one_loss.html#sklearn.metrics.zero_one_loss "sklearn.metrics.zero_one_loss") 函数通过 ![n_{\text{samples}}](img/b3348b4a0dc8e97bcefc5c7489b006db.jpg) 计算 0-1 classification loss (![L_{0-1}](img/9f4178a540cbe2b9f093702d71bafbe5.jpg)) 的 sum (和)或 average (平均值)。默认情况下,函数在样本上 normalizes (标准化)。要获得 ![L_{0-1}](img/9f4178a540cbe2b9f093702d71bafbe5.jpg) 的总和,将 `normalize` 设置为 `False`。 - -在 multilabel classification (多标签分类)中,如果零标签与标签严格匹配,则 [`zero_one_loss`](generated/sklearn.metrics.zero_one_loss.html#sklearn.metrics.zero_one_loss "sklearn.metrics.zero_one_loss") 将一个子集作为一个子集,如果有任何错误,则为零。默认情况下,函数返回不完全预测子集的百分比。为了得到这样的子集的计数,将 `normalize` 设置为 `False` 。 - -如果 ![\hat{y}_i](img/07794b8fa83c7e18c5d1fb175fd7d7bd.jpg) 是第 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 个样本的预测值,![y_i](img/4a22ca544916918b2358e5fc7c71b8e6.jpg) 是相应的真实值,则 0-1 loss ![L_{0-1}](img/9f4178a540cbe2b9f093702d71bafbe5.jpg) 定义为: - -![L_{0-1}(y_i, \hat{y}_i) = 1(\hat{y}_i \not= y_i)](img/7eb576473ec1de4500c33294115b0719.jpg) - -其中 ![1(x)](img/1e4e584cd8a99da7f18a5581de1f7be3.jpg) 是 [indicator function](https://en.wikipedia.org/wiki/Indicator_function). - -```py ->>> from sklearn.metrics import zero_one_loss ->>> y_pred = [1, 2, 3, 4] ->>> y_true = [2, 2, 3, 4] ->>> zero_one_loss(y_true, y_pred) -0.25 ->>> zero_one_loss(y_true, y_pred, normalize=False) -1 - -``` - -在具有 binary label indicators (二分标签指示符)的 multilabel (多标签)情况下,第一个标签集 [0,1] 有错误: - -```py ->>> zero_one_loss(np.array([[0, 1], [1, 1]]), np.ones((2, 2))) -0.5 - ->>> zero_one_loss(np.array([[0, 1], [1, 1]]), np.ones((2, 2)), normalize=False) -1 - -``` - -示例: - -* 参阅 [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) 例如 zero one loss 使用以通过 cross-validation (交叉验证)执行递归特征消除。 - -### 3.3.2.14\. Brier 分数损失 - -[`brier_score_loss`](generated/sklearn.metrics.brier_score_loss.html#sklearn.metrics.brier_score_loss "sklearn.metrics.brier_score_loss") 函数计算二进制类的 [Brier 分数](https://en.wikipedia.org/wiki/Brier_score) 。引用维基百科: - -> “Brier 分数是一个特有的分数函数,用于衡量概率预测的准确性。它适用于预测必须将概率分配给一组相互排斥的离散结果的任务。” - -该函数返回的是 实际结果与可能结果 的预测概率之间均方差的得分。 实际结果必须为1或0(真或假),而实际结果的预测概率可以是0到1之间的值。 - -Brier 分数损失也在0到1之间,分数越低(均方差越小),预测越准确。它可以被认为是对一组概率预测的 “校准” 的度量。 - -![BS = \frac{1}{N} \sum_{t=1}^{N}(f_t - o_t)^2](img/4c0a0003e110c44c538fbf113c159a3a.jpg) - -其中: ![N](img/a44a7c045f2217894a894c482861387a.jpg) 是预测的总数, ![f_t](img/9b5fb6c6e0f320a3e8e0ba606d601c98.jpg) 是实际结果 ![o_t](img/09eb9862841b1c17d77e2e4830df3770.jpg) 的预测概率。 - -这是一个使用这个函数的小例子: - -```py ->>> import numpy as np ->>> from sklearn.metrics import brier_score_loss ->>> y_true = np.array([0, 1, 1, 0]) ->>> y_true_categorical = np.array(["spam", "ham", "ham", "spam"]) ->>> y_prob = np.array([0.1, 0.9, 0.8, 0.4]) ->>> y_pred = np.array([0, 1, 1, 0]) ->>> brier_score_loss(y_true, y_prob) -0.055 ->>> brier_score_loss(y_true, 1-y_prob, pos_label=0) -0.055 ->>> brier_score_loss(y_true_categorical, y_prob, pos_label="ham") -0.055 ->>> brier_score_loss(y_true, y_prob > 0.5) -0.0 - -``` - -示例: - -* 请参阅分类器的概率校准 [Probability calibration of classifiers](../auto_examples/calibration/plot_calibration.html#sphx-glr-auto-examples-calibration-plot-calibration-py) ,通过 Brier 分数损失使用示例 来执行分类器的概率校准。 - -参考文献: - -* 1. Brier, [以概率表示的预测验证](http://docs.lib.noaa.gov/rescue/mwr/078/mwr-078-01-0001.pdf) , 月度天气评估78.1(1950) - -## 3.3.3\. 多标签排名指标 - -在多分类学习中,每个样本可以具有与其相关联的任何数量的真实标签。目标是给予高分,更好地评价真实标签。 - -### 3.3.3.1\. 覆盖误差 - -[`coverage_error`](generated/sklearn.metrics.coverage_error.html#sklearn.metrics.coverage_error "sklearn.metrics.coverage_error") 函数计算必须包含在最终预测中的标签的平均数,以便预测所有真正的标签。 如果您想知道有多少 top 评分标签,您必须通过平均来预测,而不会丢失任何真正的标签,这很有用。 因此,此指标的最佳价值是真正标签的平均数量。 - -Note - -我们的实现的分数比 Tsoumakas 等人在2010年的分数大1。 这扩展了它来处理一个具有0个真实标签实例的退化情况。 - -正式地,给定真实标签 ![y \in \left\{0, 1\right\}^{n_\text{samples} \times n_\text{labels}}](img/2b0d9f09a2b8a107ace9ce7aa234481e.jpg) 的二进制指示矩阵和与每个标签 ![\hat{f} \in \mathbb{R}^{n_\text{samples} \times n_\text{labels}}](img/d325b0db5d92ebf952f4b6d810fa43bd.jpg) 相关联的分数,覆盖范围被定义为 - - -![coverage(y, \hat{f}) = \frac{1}{n_{\text{samples}}} - \sum_{i=0}^{n_{\text{samples}} - 1} \max_{j:y_{ij} = 1} \text{rank}_{ij}](img/fb8da9a6dd6e45015b629002d748d9b1.jpg) - - -与 ![\text{rank}_{ij} = \left|\left\{k: \hat{f}_{ik} \geq \hat{f}_{ij} \right\}\right|](img/5eea9f6c78020e75b9cc37d038d297ab.jpg) 。给定等级定义,通过给出将被分配给所有绑定值的最大等级, `y_scores` 中的关系会被破坏。 - -这是一个使用这个函数的小例子: - -```py ->>> import numpy as np ->>> from sklearn.metrics import coverage_error ->>> y_true = np.array([[1, 0, 0], [0, 0, 1]]) ->>> y_score = np.array([[0.75, 0.5, 1], [1, 0.2, 0.1]]) ->>> coverage_error(y_true, y_score) -2.5 - -``` - -### 3.3.3.2\. 标签排名平均精度 - -[`label_ranking_average_precision_score`](generated/sklearn.metrics.label_ranking_average_precision_score.html#sklearn.metrics.label_ranking_average_precision_score "sklearn.metrics.label_ranking_average_precision_score") 函数实现标签排名平均精度(LRAP)。 该度量值与 [`average_precision_score`](generated/sklearn.metrics.average_precision_score.html#sklearn.metrics.average_precision_score "sklearn.metrics.average_precision_score") 函数相关联,但是基于标签排名的概念,而不是精确度和召回。 - -标签排名平均精度(LRAP)是分配给每个样本的每个真实标签的平均值,真实对总标签与较低分数的比率。 如果能够为每个样本相关标签提供更好的排名,这个指标就会产生更好的分数。 获得的得分总是严格大于0,最佳值为1。如果每个样本只有一个相关标签,则标签排名平均精度等于 [平均倒数等级](https://en.wikipedia.org/wiki/Mean_reciprocal_rank) 。 - -正式地,给定真实标签 ![y \in \mathcal{R}^{n_\text{samples} \times n_\text{labels}}](img/e310c621bd78988800b952eb7542cd88.jpg) 的二进制指示矩阵和与每个标签 ![\hat{f} \in \mathcal{R}^{n_\text{samples} \times n_\text{labels}}](img/9255ba83a88cb73b04d1ca968f9c2b4e.jpg) 相关联的得分,平均精度被定义为 - - -![LRAP(y, \hat{f}) = \frac{1}{n_{\text{samples}}} - \sum_{i=0}^{n_{\text{samples}} - 1} \frac{1}{|y_i|} - \sum_{j:y_{ij} = 1} \frac{|\mathcal{L}_{ij}|}{\text{rank}_{ij}}](img/bec3afcb1362068f9caf79c5c58ea816.jpg) - - -与 ![\mathcal{L}_{ij} = \left\{k: y_{ik} = 1, \hat{f}_{ik} \geq \hat{f}_{ij} \right\}](img/f6ce0899ba52f1169500b726ee9c8a92.jpg), ![\text{rank}_{ij} = \left|\left\{k: \hat{f}_{ik} \geq \hat{f}_{ij} \right\}\right|](img/5eea9f6c78020e75b9cc37d038d297ab.jpg) 和 ![|\cdot|](img/f7dd5b16c1d8c3e278e9a1fa7f49dcd2.jpg) 是集合的 l0 范数或基数。 - -这是一个使用这个函数的小例子: - -```py ->>> import numpy as np ->>> from sklearn.metrics import label_ranking_average_precision_score ->>> y_true = np.array([[1, 0, 0], [0, 0, 1]]) ->>> y_score = np.array([[0.75, 0.5, 1], [1, 0.2, 0.1]]) ->>> label_ranking_average_precision_score(y_true, y_score) -0.416... - -``` - -### 3.3.3.3\. 排序损失 - -[`label_ranking_loss`](generated/sklearn.metrics.label_ranking_loss.html#sklearn.metrics.label_ranking_loss "sklearn.metrics.label_ranking_loss") 函数计算在样本上平均排序错误的标签对数量的排序损失,即真实标签的分数低于假标签,由虚假和真实标签的倒数加权。最低可实现的排名损失为零。 - -正式地,给定真相标签 ![y \in \left\{0, 1\right\}^{n_\text{samples} \times n_\text{labels}}](img/2b0d9f09a2b8a107ace9ce7aa234481e.jpg) 的二进制指示矩阵和与每个标签 ![\hat{f} \in \mathbb{R}^{n_\text{samples} \times n_\text{labels}}](img/d325b0db5d92ebf952f4b6d810fa43bd.jpg) 相关联的得分,排序损失被定义为 - - -![\text{ranking\_loss}(y, \hat{f}) = \frac{1}{n_{\text{samples}}} - \sum_{i=0}^{n_{\text{samples}} - 1} \frac{1}{|y_i|(n_\text{labels} - |y_i|)} - \left|\left\{(k, l): \hat{f}_{ik} < \hat{f}_{il}, y_{ik} = 1, y_{il} = 0 \right\}\right|](img/eeb2bac86ebedef3d8d2dcbf5b8c735b.jpg) - - -其中 ![|\cdot|](img/f7dd5b16c1d8c3e278e9a1fa7f49dcd2.jpg) 是 ![\ell_0](img/abee3460000f8532d0df4e1b1d1928e8.jpg) 范数或集合的基数。 - -这是一个使用这个函数的小例子: - -```py ->>> import numpy as np ->>> from sklearn.metrics import label_ranking_loss ->>> y_true = np.array([[1, 0, 0], [0, 0, 1]]) ->>> y_score = np.array([[0.75, 0.5, 1], [1, 0.2, 0.1]]) ->>> label_ranking_loss(y_true, y_score) -0.75... ->>> # With the following prediction, we have perfect and minimal loss ->>> y_score = np.array([[1.0, 0.1, 0.2], [0.1, 0.2, 0.9]]) ->>> label_ranking_loss(y_true, y_score) -0.0 - -``` - -参考文献: - -* Tsoumakas, G., Katakis, I., & Vlahavas, I. (2010). 挖掘多标签数据。在数据挖掘和知识发现手册(第667-685页)。美国 Springer. - -## 3.3.4\. 回归指标 - -该 [`sklearn.metrics`](classes.html#module-sklearn.metrics "sklearn.metrics") 模块实现了一些 loss, score 以及 utility 函数以测量 regression(回归)的性能. 其中一些已经被加强以处理多个输出的场景: [`mean_squared_error`](generated/sklearn.metrics.mean_squared_error.html#sklearn.metrics.mean_squared_error "sklearn.metrics.mean_squared_error"), [`mean_absolute_error`](generated/sklearn.metrics.mean_absolute_error.html#sklearn.metrics.mean_absolute_error "sklearn.metrics.mean_absolute_error"), [`explained_variance_score`](generated/sklearn.metrics.explained_variance_score.html#sklearn.metrics.explained_variance_score "sklearn.metrics.explained_variance_score") 和 [`r2_score`](generated/sklearn.metrics.r2_score.html#sklearn.metrics.r2_score "sklearn.metrics.r2_score"). - -这些函数有 `multioutput` 这样一个 keyword(关键的)参数, 它指定每一个目标的 score(得分)或 loss(损失)的平均值的方式. 默认是 `'uniform_average'`, 其指定了输出时一致的权重均值. 如果一个 `ndarray` 的 shape `(n_outputs,)` 被传递, 则其中的 entries(条目)将被解释为权重,并返回相应的加权平均值. 如果 `multioutput` 指定了 `'raw_values'` , 则所有未改变的部分 score(得分)或 loss(损失)将以 `(n_outputs,)` 形式的数组返回. - -该 [`r2_score`](generated/sklearn.metrics.r2_score.html#sklearn.metrics.r2_score "sklearn.metrics.r2_score") 和 [`explained_variance_score`](generated/sklearn.metrics.explained_variance_score.html#sklearn.metrics.explained_variance_score "sklearn.metrics.explained_variance_score") 函数接受一个额外的值 `'variance_weighted'` 用于 `multioutput` 参数. 该选项通过相应目标变量的方差使得每个单独的 score 进行加权. 该设置量化了全局捕获的未缩放方差. 如果目标变量的大小不一样, 则该 score 更好地解释了较高的方差变量. `multioutput='variance_weighted'` 是 [`r2_score`](generated/sklearn.metrics.r2_score.html#sklearn.metrics.r2_score "sklearn.metrics.r2_score") 的默认值以向后兼容. 以后该值会被改成 `uniform_average`. - -### 3.3.4.1\. 解释方差得分 - -该 [`explained_variance_score`](generated/sklearn.metrics.explained_variance_score.html#sklearn.metrics.explained_variance_score "sklearn.metrics.explained_variance_score") 函数计算了 [explained variance regression score(解释的方差回归得分)](https://en.wikipedia.org/wiki/Explained_variation). - -如果 ![\hat{y}](img/047826f1c2e6f2687b304cb5217be8d8.jpg) 是预估的目标输出, ![y](img/0775c03fc710a24df297dedcec515aaf.jpg) 是相应(正确的)目标输出, 并且 ![Var](img/94435503540f66cab82015a35139213d.jpg) is [方差](https://en.wikipedia.org/wiki/Variance), 标准差的平方, 那么解释的方差预估如下: - -![\texttt{explained\_{}variance}(y, \hat{y}) = 1 - \frac{Var\{ y - \hat{y}\}}{Var\{y\}}](img/507fd1a87cb6a0196c0203a0af5e9bbb.jpg) - -最好的得分是 1.0, 值越低越差. - -下面是一下有关 [`explained_variance_score`](generated/sklearn.metrics.explained_variance_score.html#sklearn.metrics.explained_variance_score "sklearn.metrics.explained_variance_score") 函数使用的一些例子: - -```py ->>> from sklearn.metrics import explained_variance_score ->>> y_true = [3, -0.5, 2, 7] ->>> y_pred = [2.5, 0.0, 2, 8] ->>> explained_variance_score(y_true, y_pred) -0.957... ->>> y_true = [[0.5, 1], [-1, 1], [7, -6]] ->>> y_pred = [[0, 2], [-1, 2], [8, -5]] ->>> explained_variance_score(y_true, y_pred, multioutput='raw_values') -... -array([ 0.967..., 1\. ]) ->>> explained_variance_score(y_true, y_pred, multioutput=[0.3, 0.7]) -... -0.990... - -``` - -### 3.3.4.2\. 平均绝对误差 - -该 [`mean_absolute_error`](generated/sklearn.metrics.mean_absolute_error.html#sklearn.metrics.mean_absolute_error "sklearn.metrics.mean_absolute_error") 函数计算了 [平均绝对误差](https://en.wikipedia.org/wiki/Mean_absolute_error), 一个对应绝对误差损失预期值或者 ![l1](img/bd3f0762bab34671ec8bfb8ace2cc129.jpg)-norm 损失的风险度量. - -如果 ![\hat{y}_i](img/07794b8fa83c7e18c5d1fb175fd7d7bd.jpg) 是 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg)-th 样本的预测值, 并且 ![y_i](img/4a22ca544916918b2358e5fc7c71b8e6.jpg) 是对应的真实值, 则平均绝对误差 (MAE) 预估的 ![n_{\text{samples}}](img/b3348b4a0dc8e97bcefc5c7489b006db.jpg) 定义如下 - -![\text{MAE}(y, \hat{y}) = \frac{1}{n_{\text{samples}}} \sum_{i=0}^{n_{\text{samples}}-1} \left| y_i - \hat{y}_i \right|.](img/7d379816608eb84009d45f0e26772256.jpg) - -下面是一个有关 [`mean_absolute_error`](generated/sklearn.metrics.mean_absolute_error.html#sklearn.metrics.mean_absolute_error "sklearn.metrics.mean_absolute_error") 函数用法的小例子: - -```py ->>> from sklearn.metrics import mean_absolute_error ->>> y_true = [3, -0.5, 2, 7] ->>> y_pred = [2.5, 0.0, 2, 8] ->>> mean_absolute_error(y_true, y_pred) -0.5 ->>> y_true = [[0.5, 1], [-1, 1], [7, -6]] ->>> y_pred = [[0, 2], [-1, 2], [8, -5]] ->>> mean_absolute_error(y_true, y_pred) -0.75 ->>> mean_absolute_error(y_true, y_pred, multioutput='raw_values') -array([ 0.5, 1\. ]) ->>> mean_absolute_error(y_true, y_pred, multioutput=[0.3, 0.7]) -... -0.849... - -``` - -### 3.3.4.3\. 均方误差 - -该 [`mean_squared_error`](generated/sklearn.metrics.mean_squared_error.html#sklearn.metrics.mean_squared_error "sklearn.metrics.mean_squared_error") 函数计算了 [均方误差](https://en.wikipedia.org/wiki/Mean_squared_error), 一个对应于平方(二次)误差或损失的预期值的风险度量. - -如果 ![\hat{y}_i](img/07794b8fa83c7e18c5d1fb175fd7d7bd.jpg) 是 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg)-th 样本的预测值, 并且 ![y_i](img/4a22ca544916918b2358e5fc7c71b8e6.jpg) 是对应的真实值, 则均方误差(MSE)预估的 ![n_{\text{samples}}](img/b3348b4a0dc8e97bcefc5c7489b006db.jpg) 定义如下 - -![\text{MSE}(y, \hat{y}) = \frac{1}{n_\text{samples}} \sum_{i=0}^{n_\text{samples} - 1} (y_i - \hat{y}_i)^2.](img/ba3c1f82d7a66df41015761326619e26.jpg) - -下面是一个有关 [`mean_squared_error`](generated/sklearn.metrics.mean_squared_error.html#sklearn.metrics.mean_squared_error "sklearn.metrics.mean_squared_error") 函数用法的小例子: - -```py ->>> from sklearn.metrics import mean_squared_error ->>> y_true = [3, -0.5, 2, 7] ->>> y_pred = [2.5, 0.0, 2, 8] ->>> mean_squared_error(y_true, y_pred) -0.375 ->>> y_true = [[0.5, 1], [-1, 1], [7, -6]] ->>> y_pred = [[0, 2], [-1, 2], [8, -5]] ->>> mean_squared_error(y_true, y_pred) -0.7083... - -``` - -Examples: - -* 点击 [Gradient Boosting regression](../auto_examples/ensemble/plot_gradient_boosting_regression.html#sphx-glr-auto-examples-ensemble-plot-gradient-boosting-regression-py) 查看均方误差用于梯度上升(gradient boosting)回归的使用例子。 - -### 3.3.4.4\. 均方误差对数 - -该 [`mean_squared_log_error`](generated/sklearn.metrics.mean_squared_log_error.html#sklearn.metrics.mean_squared_log_error "sklearn.metrics.mean_squared_log_error") 函数计算了一个对应平方对数(二次)误差或损失的预估值风险度量. - -如果 ![\hat{y}_i](img/07794b8fa83c7e18c5d1fb175fd7d7bd.jpg) 是 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg)-th 样本的预测值, 并且 ![y_i](img/4a22ca544916918b2358e5fc7c71b8e6.jpg) 是对应的真实值, 则均方误差对数(MSLE)预估的 ![n_{\text{samples}}](img/b3348b4a0dc8e97bcefc5c7489b006db.jpg) 定义如下 - -![\text{MSLE}(y, \hat{y}) = \frac{1}{n_\text{samples}} \sum_{i=0}^{n_\text{samples} - 1} (\log_e (1 + y_i) - \log_e (1 + \hat{y}_i) )^2.](img/843ad36e77423c1d0d068bf1b0af24fb.jpg) - -其中 ![\log_e (x)](img/001d34ad977d110ce0931112c362d07e.jpg) 表示 ![x](img/5c82dbae35dc43d2f556f9f284d9d184.jpg) 的自然对数. 当目标具有指数增长的趋势时, 该指标最适合使用, 例如人口数量, 跨年度商品的平均销售额等. 请注意, 该指标会对低于预测的估计值进行估计. - -下面是一个有关 [`mean_squared_log_error`](generated/sklearn.metrics.mean_squared_log_error.html#sklearn.metrics.mean_squared_log_error "sklearn.metrics.mean_squared_log_error") 函数用法的小例子: - -```py ->>> from sklearn.metrics import mean_squared_log_error ->>> y_true = [3, 5, 2.5, 7] ->>> y_pred = [2.5, 5, 4, 8] ->>> mean_squared_log_error(y_true, y_pred) -0.039... ->>> y_true = [[0.5, 1], [1, 2], [7, 6]] ->>> y_pred = [[0.5, 2], [1, 2.5], [8, 8]] ->>> mean_squared_log_error(y_true, y_pred) -0.044... - -``` - -### 3.3.4.5\. 中位绝对误差 - -该 [`median_absolute_error`](generated/sklearn.metrics.median_absolute_error.html#sklearn.metrics.median_absolute_error "sklearn.metrics.median_absolute_error") 函数尤其有趣, 因为它的离群值很强. 通过取目标和预测之间的所有绝对差值的中值来计算损失. - -如果 ![\hat{y}_i](img/07794b8fa83c7e18c5d1fb175fd7d7bd.jpg) 是 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg)-th 样本的预测值, 并且 ![y_i](img/4a22ca544916918b2358e5fc7c71b8e6.jpg) 是对应的真实值, 则中位绝对误差(MedAE)预估的 ![n_{\text{samples}}](img/b3348b4a0dc8e97bcefc5c7489b006db.jpg) 定义如下 - -![\text{MedAE}(y, \hat{y}) = \text{median}(\mid y_1 - \hat{y}_1 \mid, \ldots, \mid y_n - \hat{y}_n \mid).](img/60fef7a79e647e4e8dc02f0b0dc25772.jpg) - -该 [`median_absolute_error`](generated/sklearn.metrics.median_absolute_error.html#sklearn.metrics.median_absolute_error "sklearn.metrics.median_absolute_error") 函数不支持多输出. - -下面是一个有关 [`median_absolute_error`](generated/sklearn.metrics.median_absolute_error.html#sklearn.metrics.median_absolute_error "sklearn.metrics.median_absolute_error") 函数用法的小例子: - -```py ->>> from sklearn.metrics import median_absolute_error ->>> y_true = [3, -0.5, 2, 7] ->>> y_pred = [2.5, 0.0, 2, 8] ->>> median_absolute_error(y_true, y_pred) -0.5 - -``` - -### 3.3.4.6\. R² score, 可决系数 - -该 [`r2_score`](generated/sklearn.metrics.r2_score.html#sklearn.metrics.r2_score "sklearn.metrics.r2_score") 函数计算了 computes R², 即 [可决系数](https://en.wikipedia.org/wiki/Coefficient_of_determination). 它提供了将来样本如何可能被模型预测的估量. 最佳分数为 1.0, 可以为负数(因为模型可能会更糟). 总是预测 y 的预期值,不考虑输入特征的常数模型将得到 R^2 得分为 0.0. - -如果 ![\hat{y}_i](img/07794b8fa83c7e18c5d1fb175fd7d7bd.jpg) 是 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg)-th 样本的预测值, 并且 ![y_i](img/4a22ca544916918b2358e5fc7c71b8e6.jpg) 是对应的真实值, 则 R² 得分预估的 ![n_{\text{samples}}](img/b3348b4a0dc8e97bcefc5c7489b006db.jpg) 定义如下 - -![R^2(y, \hat{y}) = 1 - \frac{\sum_{i=0}^{n_{\text{samples}} - 1} (y_i - \hat{y}_i)^2}{\sum_{i=0}^{n_\text{samples} - 1} (y_i - \bar{y})^2}](img/520d26d427ec8afe74b5538d779f5f49.jpg) - -其中 ![\bar{y} = \frac{1}{n_{\text{samples}}} \sum_{i=0}^{n_{\text{samples}} - 1} y_i](img/7a95e7e32309847d96c207051da29ea9.jpg). - -下面是一个有关 [`r2_score`](generated/sklearn.metrics.r2_score.html#sklearn.metrics.r2_score "sklearn.metrics.r2_score") 函数用法的小例子: - -```py ->>> from sklearn.metrics import r2_score ->>> y_true = [3, -0.5, 2, 7] ->>> y_pred = [2.5, 0.0, 2, 8] ->>> r2_score(y_true, y_pred) -0.948... ->>> y_true = [[0.5, 1], [-1, 1], [7, -6]] ->>> y_pred = [[0, 2], [-1, 2], [8, -5]] ->>> r2_score(y_true, y_pred, multioutput='variance_weighted') -... -0.938... ->>> y_true = [[0.5, 1], [-1, 1], [7, -6]] ->>> y_pred = [[0, 2], [-1, 2], [8, -5]] ->>> r2_score(y_true, y_pred, multioutput='uniform_average') -... -0.936... ->>> r2_score(y_true, y_pred, multioutput='raw_values') -... -array([ 0.965..., 0.908...]) ->>> r2_score(y_true, y_pred, multioutput=[0.3, 0.7]) -... -0.925... - -``` - -示例: - -* 点击 [Lasso and Elastic Net for Sparse Signals](../auto_examples/linear_model/plot_lasso_and_elasticnet.html#sphx-glr-auto-examples-linear-model-plot-lasso-and-elasticnet-py) 查看关于R²用于评估在Lasso and Elastic Net on sparse signals上的使用. - -## 3.3.5\. 聚类指标 - -该 [`sklearn.metrics`](classes.html#module-sklearn.metrics "sklearn.metrics") 模块实现了一些 loss, score 和 utility 函数. 更多信息请参阅 [聚类性能度量](clustering.html#clustering-evaluation) 部分, 例如聚类, 以及用于二分聚类的 [Biclustering 评测](biclustering.html#biclustering-evaluation). - -## 3.3.6\. 虚拟估计 - -在进行监督学习的过程中,简单的 sanity check(理性检查)包括将人的估计与简单的经验法则进行比较. [`DummyClassifier`](generated/sklearn.dummy.DummyClassifier.html#sklearn.dummy.DummyClassifier "sklearn.dummy.DummyClassifier") 实现了几种简单的分类策略: - -* `stratified` 通过在训练集类分布方面来生成随机预测. -* `most_frequent` 总是预测训练集中最常见的标签. -* `prior` always predicts the class that maximizes the class prior (like `most_frequent`) and ``predict_proba` returns the class prior. -* `uniform` 随机产生预测. -* ```py - constant 总是预测用户提供的常量标签. - ``` - - A major motivation of this method is F1-scoring, when the positive class is in the minority. 这种方法的主要动机是 F1-scoring, 当 positive class(正类)较少时. - -请注意, 这些所有的策略, `predict` 方法彻底的忽略了输入数据! - -为了说明 [`DummyClassifier`](generated/sklearn.dummy.DummyClassifier.html#sklearn.dummy.DummyClassifier "sklearn.dummy.DummyClassifier"), 首先让我们创建一个 imbalanced dataset: - -```py ->>> from sklearn.datasets import load_iris ->>> from sklearn.model_selection import train_test_split ->>> iris = load_iris() ->>> X, y = iris.data, iris.target ->>> y[y != 1] = -1 ->>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0) - -``` - -接下来, 让我们比较一下 `SVC` 和 `most_frequent` 的准确性. - -```py ->>> from sklearn.dummy import DummyClassifier ->>> from sklearn.svm import SVC ->>> clf = SVC(kernel='linear', C=1).fit(X_train, y_train) ->>> clf.score(X_test, y_test) -0.63... ->>> clf = DummyClassifier(strategy='most_frequent',random_state=0) ->>> clf.fit(X_train, y_train) -DummyClassifier(constant=None, random_state=0, strategy='most_frequent') ->>> clf.score(X_test, y_test) -0.57... - -``` - -我们看到 `SVC` 没有比一个 dummy classifier(虚拟分类器)好很多. 现在, 让我们来更改一下 kernel: - -```py ->>> clf = SVC(kernel='rbf', C=1).fit(X_train, y_train) ->>> clf.score(X_test, y_test) -0.97... - -``` - -我们看到准确率提升到将近 100%. 建议采用交叉验证策略, 以更好地估计精度, 如果不是太耗 CPU 的话. 更多信息请参阅 [交叉验证:评估估算器的表现](cross_validation.html#cross-validation) 部分. 此外,如果要优化参数空间,强烈建议您使用适当的方法; 更多详情请参阅 [调整估计器的超参数](grid_search.html#grid-search) 部分. - -通常来说,当分类器的准确度太接近随机情况时,这可能意味着出现了一些问题: 特征没有帮助, 超参数没有正确调整, class 不平衡造成分类器有问题等… - -[`DummyRegressor`](generated/sklearn.dummy.DummyRegressor.html#sklearn.dummy.DummyRegressor "sklearn.dummy.DummyRegressor") 还实现了四个简单的经验法则来进行回归: - -* `mean` 总是预测训练目标的平均值. -* `median` 总是预测训练目标的中位数. -* `quantile` 总是预测用户提供的训练目标的 quantile(分位数). -* `constant` 总是预测由用户提供的常数值. - -在以上所有的策略中, `predict` 方法完全忽略了输入数据. \ No newline at end of file diff --git a/docs/0.19.x/37.md b/docs/0.19.x/37.md deleted file mode 100755 index aa9a390bcff0af749ab7c33a1f6d78466256574d..0000000000000000000000000000000000000000 --- a/docs/0.19.x/37.md +++ /dev/null @@ -1,74 +0,0 @@ -# 3.4\. 模型持久化 - -校验者: -        [@why2lyj(Snow Wang)](https://github.com/why2lyj) -        [@小瑶](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@那伊抹微笑](https://github.com/apachecn/scikit-learn-doc-zh) - -在训练完 scikit-learn 模型之后,最好有一种方法来将模型持久化以备将来使用,而无需重新训练。 以下部分为您提供了有关如何使用 pickle 来持久化模型的示例。 在使用 pickle 序列化时,我们还将回顾一些安全性和可维护性方面的问题。 - -## 3.4.1\. 持久化示例 - -可以通过使用 Python 的内置持久化模型将训练好的模型保存在 scikit 中,它名为 [pickle](https://docs.python.org/2/library/pickle.html): - -```py ->>> from sklearn import svm ->>> from sklearn import datasets ->>> clf = svm.SVC() ->>> iris = datasets.load_iris() ->>> X, y = iris.data, iris.target ->>> clf.fit(X, y) -SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, - decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf', - max_iter=-1, probability=False, random_state=None, shrinking=True, - tol=0.001, verbose=False) - ->>> import pickle ->>> s = pickle.dumps(clf) ->>> clf2 = pickle.loads(s) ->>> clf2.predict(X[0:1]) -array([0]) ->>> y[0] -0 - -``` - -在这个 scikit 的特殊示例中,使用 joblib 来替换 pickle(`joblib.dump` & `joblib.load`)可能会更有意思,这对于内部带有 numpy 数组的对象来说更为高效, 通常情况下适合 scikit-learn estimators(预估器),但是也只能是 pickle 到硬盘而不是字符串: - -```py ->>> from sklearn.externals import joblib ->>> joblib.dump(clf, 'filename.pkl') - -``` - -之后你可以使用以下方式回调 pickled model 可能在另一个 Python 进程中): - -```py ->>> clf = joblib.load('filename.pkl') - -``` - -Note - -`joblib.dump` 和 `joblib.load` 函数也接收类似 file-like 的对象而不是文件名。 更多有关使用 Joblib 来持久化数据的信息可以参阅 [这里](https://pythonhosted.org/joblib/persistence.html). - -## 3.4.2\. 安全性和可维护性的局限性 - -pickle(和通过扩展的 joblib),在安全性和可维护性方面存在一些问题。 有以下原因, - -* 绝对不要使用未经 pickle 的不受信任的数据,因为它可能会在加载时执行恶意代码。 -* 虽然一个版本的 scikit-learn 模型可以在其他版本中加载,但这完全不建议并且也是不可取的。 还应该了解到,对于这些数据执行的操作可能会产生不同及意想不到的结果。 - -为了用以后版本的 scikit-learn 来重构类似的模型, 额外的元数据应该随着 pickled model 一起被保存: - -* 训练数据,例如:引用不可变的快照 -* 用于生成模型的 python 源代码 -* scikit-learn 的各版本以及各版本对应的依赖包 -* 在训练数据的基础上获得的交叉验证得分 - -这样可以检查交叉验证得分是否与以前相同。 - -由于模型内部表示可能在两种不同架构上不一样,因此不支持在一个架构上转储模型并将其加载到另一个体系架构上。 - -如果您想要了解更多关于这些问题以及其它可能的序列化方法,请参阅这个 [Alex Gaynor 的演讲](http://pyvideo.org/video/2566/pickles-are-for-delis-not-software). \ No newline at end of file diff --git a/docs/0.19.x/38.md b/docs/0.19.x/38.md deleted file mode 100755 index d0d79b3b979b29da281984795ffb6b79248b06fe..0000000000000000000000000000000000000000 --- a/docs/0.19.x/38.md +++ /dev/null @@ -1,99 +0,0 @@ -# 3.5\. 验证曲线: 绘制分数以评估模型 - -校验者: -        [@正版乔](https://github.com/apachecn/scikit-learn-doc-zh) -        [@正版乔](https://github.com/apachecn/scikit-learn-doc-zh) -        [@小瑶](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@Xi](https://github.com/apachecn/scikit-learn-doc-zh) - -每种估计器都有其优势和缺陷。它的泛化误差可以用偏差、方差和噪声来分解。估计值的 [**](#id2)偏差**是不同训练集的平均误差。估计值的**方差**用来表示它对训练集的 变化有多敏感。噪声是数据的一个属性。 - -在下面的图中,我们可以看到一个函数 [:math:`f(x) = \cos (\frac{3}{2} \pi x)`_](#id4) 和这个函数的一些噪声样本。 我们用三个不同的估计来拟合函数: 多项式特征为1,4和15的线性回归。我们看到,第一个估计最多只能为样本和真正的函数提供一个很差的拟合 ,因为它太简单了(高偏差),第二个估计几乎完全近似,最后一个估计完全接近训练数据, 但不能很好地拟合真实的函数,即对训练数据的变化(高方差)非常敏感。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_underfitting_overfitting_0011.png](img/a6509a4f7b1838eb6d76d30036a00ffd.jpg)](../auto_examples/model_selection/plot_underfitting_overfitting.html) - -偏差和方差是估计所固有的属性,我们通常必须选择合适的学习算法和超参数,以使得偏差和 方差都尽可能的低(参见偏差-方差困境 [`Bias-variance dilemma<https://en.wikipedia.org/wiki/Bias-variance_dilemma>`_](#id10))。 另一种降低方差的方法是使用更多的训练数据。不论如何,如果真实函数过于复杂并且不能用一个方 差较小的估计值来近似,则只能去收集更多的训练数据。 - -在一个简单的一维问题中,我们可以很容易看出估计值是否存在偏差或方差。然而,在高维空间中, 模型可能变得非常难以具象化。 出于这种原因,使用以下工具通常是有帮助的。 - -示例: - -* [Underfitting vs. Overfitting](../auto_examples/model_selection/plot_underfitting_overfitting.html#sphx-glr-auto-examples-model-selection-plot-underfitting-overfitting-py) -* [Plotting Validation Curves](../auto_examples/model_selection/plot_validation_curve.html#sphx-glr-auto-examples-model-selection-plot-validation-curve-py) -* [Plotting Learning Curves](../auto_examples/model_selection/plot_learning_curve.html#sphx-glr-auto-examples-model-selection-plot-learning-curve-py) - -## 3.5.1\. 验证曲线 - -我们需要一个评分函数(参见模型评估:[模型评估: 量化预测的质量](model_evaluation.html#model-evaluation))来验证一个模型, 例如分类器的准确性。 选择估计器的多个超参数的正确方法当然是网格搜索或类似方法 (参见调优估计的超参数 [调整估计器的超参数](grid_search.html#grid-search) ),其选择一个或多个验证集上的分数最高的超参数。 请注意,如果我们基于验证分数优化了超参数,则验证分数就有偏差了,并且不再是一个良好的泛化估计。 为了得到正确的泛化估计,我们必须在另一个测试集上计算得分。 - -然而,绘制单个超参数对训练分数和验证分数的影响,有时有助于发现该估计是否因为某些超参数的值 而出现过拟合或欠拟合。 - -本例中,下面的方程 [`validation_curve`](generated/sklearn.model_selection.validation_curve.html#sklearn.model_selection.validation_curve "sklearn.model_selection.validation_curve") 能起到如下作用: - -```py ->>> import numpy as np ->>> from sklearn.model_selection import validation_curve ->>> from sklearn.datasets import load_iris ->>> from sklearn.linear_model import Ridge - -``` - -```py ->>> np.random.seed(0) ->>> iris = load_iris() ->>> X, y = iris.data, iris.target ->>> indices = np.arange(y.shape[0]) ->>> np.random.shuffle(indices) ->>> X, y = X[indices], y[indices] - -``` - -```py ->>> train_scores, valid_scores = validation_curve(Ridge(), X, y, "alpha", -... np.logspace(-7, 3, 3)) ->>> train_scores -array([[ 0.94..., 0.92..., 0.92...], - [ 0.94..., 0.92..., 0.92...], - [ 0.47..., 0.45..., 0.42...]]) ->>> valid_scores -array([[ 0.90..., 0.92..., 0.94...], - [ 0.90..., 0.92..., 0.94...], - [ 0.44..., 0.39..., 0.45...]]) - -``` - -如果训练得分和验证得分都很低,则估计器是不合适的。如果训练得分高,验证得分低,则估计器过拟合, 否则估计会拟合得很好。通常不可能有较低的训练得分和较高的验证得分。所有三种情况都可以 在下面的图中找到,其中我们改变了数字数据集上 SVM 的参数 ![\gamma](img/6552bde3d3999c1a9728016416932af7.jpg) 。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_validation_curve_0011.png](img/d49a868d9c8c944f42202a30647ff7cf.jpg)](../auto_examples/model_selection/plot_validation_curve.html) - -## 3.5.2\. 学习曲线 - -学习曲线显示了对于不同数量的训练样本的估计器的验证和训练评分。它可以帮助我们发现从增加更多的训 练数据中能获益多少,以及估计是否受到更多来自方差误差或偏差误差的影响。如果在增加训练集大小时,验证分数和训练 分数都收敛到一个很低的值,那么我们将不会从更多的训练数据中获益。在下面的图中看到一个例子:朴素贝叶斯大致收敛到一个较低的分数。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_learning_curve_0011.png](img/a70da26e29baa95b2f65f3cbc2e5fbfa.jpg)](../auto_examples/model_selection/plot_learning_curve.html) - -我们可能需要使用评估器或者一个当前评估器的参数化形式来学习更复杂概念(例如有一个较低的偏差)。 如果训练样本的最大时,训练分数比验证分数得分大得多,那么增加训练样本很可能会增加泛化能力。 在下面的图中,可以看到支持向量机(SVM)可以从更多的训练样本中获益。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_learning_curve_0021.png](img/86d43b01a4c13ac9d69265ff0d546720.jpg)](../auto_examples/model_selection/plot_learning_curve.html) - -我们可以使用:func:[`](#id8)learning_curve`函数来绘制这样一个学习曲线所需的值(已使用的样本数量,训练集 上的平均分数和验证集上的平均分数): - -```py ->>> from sklearn.model_selection import learning_curve ->>> from sklearn.svm import SVC - ->>> train_sizes, train_scores, valid_scores = learning_curve( -... SVC(kernel='linear'), X, y, train_sizes=[50, 80, 110], cv=5) ->>> train_sizes -array([ 50, 80, 110]) ->>> train_scores -array([[ 0.98..., 0.98 , 0.98..., 0.98..., 0.98...], - [ 0.98..., 1\. , 0.98..., 0.98..., 0.98...], - [ 0.98..., 1\. , 0.98..., 0.98..., 0.99...]]) ->>> valid_scores -array([[ 1\. , 0.93..., 1\. , 1\. , 0.96...], - [ 1\. , 0.96..., 1\. , 1\. , 0.96...], - [ 1\. , 0.96..., 1\. , 1\. , 0.96...]]) - -``` \ No newline at end of file diff --git a/docs/0.19.x/4.md b/docs/0.19.x/4.md deleted file mode 100755 index 44b9fa21a44552e9078bd1d82fa884ee0818def7..0000000000000000000000000000000000000000 --- a/docs/0.19.x/4.md +++ /dev/null @@ -1,22 +0,0 @@ -# 1.3\. 内核岭回归 - -校验者: -        [@不吃曲奇的趣多多](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@Counting stars](https://github.com/apachecn/scikit-learn-doc-zh) - -Kernel ridge regression (KRR) (内核岭回归)[M2012]_ 由 使用内核方法的 :ref:[`](#id2)ridge_regression`(岭回归)(使用 l2 正则化的最小二乘法)所组成。因此,它所学习到的在空间中不同的线性函数是由不同的内核和数据所导致的。对于非线性的内核,它与原始空间中的非线性函数相对应。 - -由 [`KernelRidge`](generated/sklearn.kernel_ridge.KernelRidge.html#sklearn.kernel_ridge.KernelRidge "sklearn.kernel_ridge.KernelRidge") 学习的模型的形式与支持向量回归( `SVR` ) 是一样的。但是他们使用不同的损失函数:内核岭回归(KRR)使用 squared error loss (平方误差损失函数)而 support vector regression (支持向量回归)(SVR)使用 ![\epsilon](img/58ef9e1b5d2ee139dcb588a3879ca1a6.jpg)-insensitive loss ( ε-不敏感损失 ),两者都使用 l2 regularization (l2 正则化)。与 `SVR` 相反,拟合 [`KernelRidge`](generated/sklearn.kernel_ridge.KernelRidge.html#sklearn.kernel_ridge.KernelRidge "sklearn.kernel_ridge.KernelRidge") 可以以 closed-form (封闭形式)完成,对于中型数据集通常更快。另一方面,学习的模型是非稀疏的,因此比 SVR 慢, 在预测时间,SVR 学习了:math:<cite>epsilon > 0</cite> 的稀疏模型。 - -下图比较了人造数据集上的 [`KernelRidge`](generated/sklearn.kernel_ridge.KernelRidge.html#sklearn.kernel_ridge.KernelRidge "sklearn.kernel_ridge.KernelRidge") 和 `SVR` 的区别,它由一个正弦目标函数和每五个数据点产生一个强噪声组成。图中分别绘制了由 [`KernelRidge`](generated/sklearn.kernel_ridge.KernelRidge.html#sklearn.kernel_ridge.KernelRidge "sklearn.kernel_ridge.KernelRidge") 和 `SVR` 学习到的回归曲线。两者都使用网格搜索优化了 RBF 内核的 complexity/regularization (复杂性/正则化)和 bandwidth (带宽)。它们的 learned functions (学习函数)非常相似;但是,拟合 [`KernelRidge`](generated/sklearn.kernel_ridge.KernelRidge.html#sklearn.kernel_ridge.KernelRidge "sklearn.kernel_ridge.KernelRidge") 大约比拟合 `SVR` 快七倍(都使用 grid-search ( 网格搜索 ) )。然而,由于 SVR 只学习了一个稀疏模型,所以 SVR 预测 10 万个目标值比使用 KernelRidge 快三倍以上。SVR 只使用了百分之三十的数据点做为支撑向量。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_kernel_ridge_regression_0011.png](img/5d71bcc9676eddcac89936397b2cd79c.jpg)](../auto_examples/plot_kernel_ridge_regression.html) - -下图显示不同大小训练集的 [`KernelRidge`](generated/sklearn.kernel_ridge.KernelRidge.html#sklearn.kernel_ridge.KernelRidge "sklearn.kernel_ridge.KernelRidge") 和 `SVR` 的 fitting (拟合)和 prediction (预测)时间。 对于中型训练集(小于 1000 个样本),拟合 [`KernelRidge`](generated/sklearn.kernel_ridge.KernelRidge.html#sklearn.kernel_ridge.KernelRidge "sklearn.kernel_ridge.KernelRidge") 比 `SVR` 快; 然而,对于更大的训练集 `SVR` 通常更好。 关于预测时间,由于学习的稀疏解,`SVR` 对于所有不同大小的训练集都比 [`KernelRidge`](generated/sklearn.kernel_ridge.KernelRidge.html#sklearn.kernel_ridge.KernelRidge "sklearn.kernel_ridge.KernelRidge") 快。 注意,稀疏度和预测时间取决于 `SVR` 的参数 ![\epsilon](img/58ef9e1b5d2ee139dcb588a3879ca1a6.jpg) 和 ![C](img/4b6d782a67ac392e97215c46b7590bf7.jpg) ; ![\epsilon = 0](img/1d9a1eb9200948482ebfd5811679276a.jpg) 将对应于密集模型。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_kernel_ridge_regression_0021.png](img/a921f24886997e2a5b94e2abb46d8402.jpg)](../auto_examples/plot_kernel_ridge_regression.html) - -参考: - -| [M2012] | “Machine Learning: A Probabilistic Perspective” Murphy, K. P. - chapter 14.4.3, pp. 492-493, The MIT Press, 2012 | \ No newline at end of file diff --git a/docs/0.19.x/5.md b/docs/0.19.x/5.md deleted file mode 100755 index dd68c1947cb9ad93497e5c1da864bc25b9f4d3b9..0000000000000000000000000000000000000000 --- a/docs/0.19.x/5.md +++ /dev/null @@ -1,422 +0,0 @@ -# 1.4\. 支持向量机 - -校验者: -        [@尔了个达](https://github.com/weiyd) -        [@维](https://github.com/apachecn/scikit-learn-doc-zh) -        [@子浪](https://github.com/apachecn/scikit-learn-doc-zh) -        [@小瑶](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@Damon](https://github.com/apachecn/scikit-learn-doc-zh) -        [@Leon晋](https://github.com/apachecn/scikit-learn-doc-zh) - -**支持向量机 (SVMs)** 可用于以下监督学习算法 [分类](#svm-classification), [回归](#svm-regression) 和 [异常检测](#svm-outlier-detection). - -支持向量机的优势在于: - -> * 在高维空间中非常高效. -> * 即使在数据维度比样本数量大的情况下仍然有效. -> * 在决策函数(称为支持向量)中使用训练集的子集,因此它也是高效利用内存的. -> * 通用性: 不同的核函数 [核函数](#svm-kernels) 与特定的决策函数一一对应.常见的 kernel 已 -> -> 经提供,也可以指定定制的内核. - -支持向量机的缺点包括: - -> * 如果特征数量比样本数量大得多,在选择核函数 [核函数](#svm-kernels) 时要避免过拟合, -> -> 而且正则化项是非常重要的. -> -> * 支持向量机不直接提供概率估计,这些都是使用昂贵的五次交叉验算计算的. (详情见 [Scores and probabilities](#scores-probabilities), 在下文中). - -在 scikit-learn 中,支持向量机提供 dense(`numpy.ndarray` ,可以通过 `numpy.asarray` 进行转换) 和 sparse (任何 `scipy.sparse`) 样例向量作为输出.然而,要使用支持向量机来对 sparse 数据作预测,它必须已经拟合这样的数据.使用 C 代码的 `numpy.ndarray` (dense) 或者带有 `dtype=float64` 的 `scipy.sparse.csr_matrix` (sparse) 来优化性能. - -## 1.4.1\. 分类 - -[`SVC`](generated/sklearn.svm.SVC.html#sklearn.svm.SVC "sklearn.svm.SVC"), [`NuSVC`](generated/sklearn.svm.NuSVC.html#sklearn.svm.NuSVC "sklearn.svm.NuSVC") 和 [`LinearSVC`](generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC "sklearn.svm.LinearSVC") 能在数据集中实现多元分类. - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_iris_0012.png](img/75d98860b528f3fcd2b060ad5e624ca0.jpg)](../auto_examples/svm/plot_iris.html) - -[`SVC`](generated/sklearn.svm.SVC.html#sklearn.svm.SVC "sklearn.svm.SVC") 和 [`NuSVC`](generated/sklearn.svm.NuSVC.html#sklearn.svm.NuSVC "sklearn.svm.NuSVC") 是相似的方法, 但是接受稍许不同的参数设置并且有不同的数学方程(在这部分看 [数学公式](#svm-mathematical-formulation)). 另一方面, [`LinearSVC`](generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC "sklearn.svm.LinearSVC") 是另一个实现线性核函数的支持向量分类. 记住 [`LinearSVC`](generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC "sklearn.svm.LinearSVC") 不接受关键词 `kernel`, 因为它被假设为线性的. 它也缺少一些 [`SVC`](generated/sklearn.svm.SVC.html#sklearn.svm.SVC "sklearn.svm.SVC") 和 [`NuSVC`](generated/sklearn.svm.NuSVC.html#sklearn.svm.NuSVC "sklearn.svm.NuSVC") 的成员(members) 比如 `support_` . - -和其他分类器一样, [`SVC`](generated/sklearn.svm.SVC.html#sklearn.svm.SVC "sklearn.svm.SVC"), [`NuSVC`](generated/sklearn.svm.NuSVC.html#sklearn.svm.NuSVC "sklearn.svm.NuSVC") 和 [`LinearSVC`](generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC "sklearn.svm.LinearSVC") 将两个数组作为输入: `[n_samples, n_features]` 大小的数组 X 作为训练样本, `[n_samples]` 大小的数组 y 作为类别标签(字符串或者整数): - -```py ->>> from sklearn import svm ->>> X = [[0, 0], [1, 1]] ->>> y = [0, 1] ->>> clf = svm.SVC() ->>> clf.fit(X, y) -SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, - decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf', - max_iter=-1, probability=False, random_state=None, shrinking=True, - tol=0.001, verbose=False) - -``` - -在拟合后, 这个模型可以用来预测新的值: - -```py ->>> clf.predict([[2., 2.]]) -array([1]) - -``` - -SVMs 决策函数取决于训练集的一些子集, 称作支持向量. 这些支持向量的部分特性可以在 `support_vectors_`, `support_` 和 `n_support` 找到: - -```py ->>> # 获得支持向量 ->>> clf.support_vectors_ -array([[ 0., 0.], - [ 1., 1.]]) ->>> # 获得支持向量的索引get indices of support vectors ->>> clf.support_ -array([0, 1]...) ->>> # 为每一个类别获得支持向量的数量 ->>> clf.n_support_ -array([1, 1]...) - -``` - -### 1.4.1.1\. 多元分类 - -[`SVC`](generated/sklearn.svm.SVC.html#sklearn.svm.SVC "sklearn.svm.SVC") 和 [`NuSVC`](generated/sklearn.svm.NuSVC.html#sklearn.svm.NuSVC "sklearn.svm.NuSVC") 为多元分类实现了 “one-against-one” 的方法 (Knerr et al., 1990) 如果 `n_class` 是类别的数量, 那么 `n_class * (n_class - 1) / 2` 分类器被重构, 而且每一个从两个类别中训练数据. 为了给其他分类器提供一致的交互, `decision_function_shape` 选项允许聚合 “one-against-one” 分类器的结果成 `(n_samples, n_classes)` 的大小到决策函数: - -```py ->>> X = [[0], [1], [2], [3]] ->>> Y = [0, 1, 2, 3] ->>> clf = svm.SVC(decision_function_shape='ovo') ->>> clf.fit(X, Y) -SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, - decision_function_shape='ovo', degree=3, gamma='auto', kernel='rbf', - max_iter=-1, probability=False, random_state=None, shrinking=True, - tol=0.001, verbose=False) ->>> dec = clf.decision_function([[1]]) ->>> dec.shape[1] # 4 classes: 4*3/2 = 6 -6 ->>> clf.decision_function_shape = "ovr" ->>> dec = clf.decision_function([[1]]) ->>> dec.shape[1] # 4 classes -4 - -``` - -另一方面, [`LinearSVC`](generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC "sklearn.svm.LinearSVC") 实现 “one-vs-the-rest” 多类别策略, 从而训练 n 类别的模型. 如果只有两类, 只训练一个模型.: - -```py ->>> lin_clf = svm.LinearSVC() ->>> lin_clf.fit(X, Y) -LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True, - intercept_scaling=1, loss='squared_hinge', max_iter=1000, - multi_class='ovr', penalty='l2', random_state=None, tol=0.0001, - verbose=0) ->>> dec = lin_clf.decision_function([[1]]) ->>> dec.shape[1] -4 - -``` - -参见 [数学公式](#svm-mathematical-formulation) 查看决策函数的完整描述. - -记住 [`LinearSVC`](generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC "sklearn.svm.LinearSVC") 也实现了可选择的多类别策略, 通过使用选项 `multi_class='crammer_singer'`, 所谓的多元 SVM 由 Crammer 和 Singer 明确表达. 这个方法是一致的, 对于 one-vs-rest 是不正确的. 实际上, one-vs-rest 分类通常受到青睐, 因为结果大多数是相似的, 但是运行时间却显著减少. - -对于 “one-vs-rest” [`LinearSVC`](generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC "sklearn.svm.LinearSVC"), 属性 `coef_` 和 `intercept_` 分别具有 `[n_class, n_features]` 和 `[n_class]` 尺寸. 系数的每一行符合 `n_class` 的许多 one-vs-rest 分类器之一, 并且就以这一类的顺序与拦截器(intercepts)相似. - -至于 one-vs-one [`SVC`](generated/sklearn.svm.SVC.html#sklearn.svm.SVC "sklearn.svm.SVC"), 属性特征的布局(layout)有少多些复杂. 考虑到有一种线性核函数, `coef_` 和 `intercept_` 的布局(layout)与上文描述成 [`LinearSVC`](generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC "sklearn.svm.LinearSVC") 相似, 除了 `coef_` 的形状 `[n_class * (n_class - 1) / 2, n_features]`, 与许多二元的分类器相似. 0到n的类别顺序是 “0 vs 1”, “0 vs 2” , … “0 vs n”, “1 vs 2”, “1 vs 3”, “1 vs n”, … “n-1 vs n”. - -`dual_coef_` 的 shape 是 `[n_class-1, n_SV]`, 这个结构有些难以理解. 对应于支持向量的列与 `n_class * (n_class - 1) / 2` “one-vs-one” 分类器相关. 每一个支持向量用于 `n_class - 1` 分类器中.对于这些分类器,每一行的 `n_class - 1` 条目对应于对偶系数(dual coefficients). - -通过这个例子更容易说明: - -考虑一个三类的问题,类0有三个支持向量 ![v^{0}_0, v^{1}_0, v^{2}_0](img/0992b23a98660c7b2102695e74407be2.jpg) 而类 1 和 2 分别有 如下两个支持向量 ![v^{0}_1, v^{1}_1](img/60337a9162822d71dc32e68952b4e02a.jpg) and ![v^{0}_2, v^{1}_2](img/5c0b2807058791d6069327b709fae60c.jpg).对于每个支持 向量 ![v^{j}_i](img/ed6a1db8527fda759b14943c1b36d88e.jpg), 有两个对偶系数.在类别 ![i](img/43e13b580daefe5ba754b790dfbd216c.jpg) 和 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) ![\alpha^{j}_{i,k}](img/6f0cdccb5dc60bae6e7a303075ddbdf6.jpg) 中, 我们将支持向量的系数记录为 ![v^{j}_i](img/ed6a1db8527fda759b14943c1b36d88e.jpg) 那么 `dual_coef_` 可以表示为: - -| ![\alpha^{0}_{0,1}](img/4f8138b00b37d9734bb93aec7e00ac5e.jpg) | ![\alpha^{0}_{0,2}](img/d6127761ddbd135a1317ec14f1ddfac4.jpg) | Coefficients for SVs of class 0 | -| ![\alpha^{1}_{0,1}](img/7ff85adefbea266b138eec7868e87fa9.jpg) | ![\alpha^{1}_{0,2}](img/ba5932f77767fa05771311d1f926e3ee.jpg) | -| ![\alpha^{2}_{0,1}](img/8c0b5b6a48349ecfb1f20d9168d166b7.jpg) | ![\alpha^{2}_{0,2}](img/48a36c240dcfa54de5ea4cc6250087fa.jpg) | -| ![\alpha^{0}_{1,0}](img/c9a9a1cec953f556f78c5f400277b422.jpg) | ![\alpha^{0}_{1,2}](img/beee3f6e512d1e3caf1d1f6cfff468ae.jpg) | Coefficients for SVs of class 1 | -| ![\alpha^{1}_{1,0}](img/0243e3516b65d89a7e3da13680c1a1b7.jpg) | ![\alpha^{1}_{1,2}](img/2238e05d9e3ae45b81577c9902a9cfbb.jpg) | -| ![\alpha^{0}_{2,0}](img/6c281997fc8d9f34a530a7e2bc854adf.jpg) | ![\alpha^{0}_{2,1}](img/505ffca1dc9570f24fd66272d18abb1f.jpg) | Coefficients for SVs of class 2 | -| ![\alpha^{1}_{2,0}](img/2c90187d36ba884ee9ae4c99334fb3b4.jpg) | ![\alpha^{1}_{2,1}](img/319e234a072e86b6b55ce431ca56b43e.jpg) | - -### 1.4.1.2\. 得分和概率 - -[`SVC`](generated/sklearn.svm.SVC.html#sklearn.svm.SVC "sklearn.svm.SVC") 方法的 `decision_function` 给每一个样例每一个类别分值(scores)(或者在一个二元类中每一个样例一个分值). 当构造器(constructor)选项 `probability` 设置为 `True` 的时候, 类成员可能性评估开启.(来自 `predict_proba` 和 `predict_log_proba` 方法) 在二元分类中,概率使用 Platt scaling 进行标准化: 在 SVM 分数上的逻辑回归,在训练集上用额外的交叉验证来拟合.在多类情况下,这可以扩展为 per Wu et al.(2004) - -不用说,对于大数据集来说,在 Platt scaling 中进行交叉验证是一项昂贵的操作. 另外,可能性预测可能与 scores 不一致,因为 scores 的 “argmax” 可能不是可能性的 argmax. (例如,在二元分类中,一个样本可能被标记为一个有可能性的类 `predict` <½ according to `predict_proba`.) Platt 的方法也有理论问题. 如果 confidence scores 必要,但是这些没必要是可能性, 那么建议设置 `probability=False` 并使用 `decision_function` 而不是 `predict_proba`. - -参考: - -* Wu, Lin and Weng, [`"Probability estimates for multi-class classification by pairwise coupling(成对耦合的多类分类的概率估计)"<http://www.csie.ntu.edu.tw/~cjlin/papers/svmprob/svmprob.pdf>`_](#id13), JMLR 5:975-1005, 2004. -* Platt [`"Probabilistic outputs for SVMs and comparisons to regularized likelihood methods(SVMs 的概率输出和与规则化似然方法的比较)"<http://www.cs.colorado.edu/~mozer/Teaching/syllabi/6622/papers/Platt1999.pdf>`_](#id15) . - -### 1.4.1.3\. 非均衡问题 - -这个问题期望给予某一类或某个别样例能使用的关键词 `class_weight` 和 `sample_weight` 提高权重(importance). - -[`SVC`](generated/sklearn.svm.SVC.html#sklearn.svm.SVC "sklearn.svm.SVC") (而不是 [`NuSVC`](generated/sklearn.svm.NuSVC.html#sklearn.svm.NuSVC "sklearn.svm.NuSVC")) 在 `fit` 方法中生成了一个关键词 `class_weight`. 它是形如 `{class_label : value}` 的字典, value 是浮点数大于 0 的值, 把类 `class_label` 的参数 `C` 设置为 `C * value`. - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_separating_hyperplane_unbalanced_0011.png](img/9b6c97851ffb568abc5688d5c9e81800.jpg)](../auto_examples/svm/plot_separating_hyperplane_unbalanced.html) - -[`SVC`](generated/sklearn.svm.SVC.html#sklearn.svm.SVC "sklearn.svm.SVC"), [`NuSVC`](generated/sklearn.svm.NuSVC.html#sklearn.svm.NuSVC "sklearn.svm.NuSVC"), [`SVR`](generated/sklearn.svm.SVR.html#sklearn.svm.SVR "sklearn.svm.SVR"), [`NuSVR`](generated/sklearn.svm.NuSVR.html#sklearn.svm.NuSVR "sklearn.svm.NuSVR") 和 [`OneClassSVM`](generated/sklearn.svm.OneClassSVM.html#sklearn.svm.OneClassSVM "sklearn.svm.OneClassSVM") 在 `fit` 方法中通过关键词 `sample_weight` 为单一样例实现权重weights.与 `class_weight` 相似, 这些把第i个样例的参数 `C` 换成 `C * sample_weight[i]`. - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_weighted_samples_0011.png](img/f298c2b42dd32bed6f02df3c6d4f7cf9.jpg)](../auto_examples/svm/plot_weighted_samples.html) - -例子: - -* [Plot different SVM classifiers in the iris dataset](../auto_examples/svm/plot_iris.html#sphx-glr-auto-examples-svm-plot-iris-py), -* [SVM: Maximum margin separating hyperplane](../auto_examples/svm/plot_separating_hyperplane.html#sphx-glr-auto-examples-svm-plot-separating-hyperplane-py), -* [SVM: Separating hyperplane for unbalanced classes](../auto_examples/svm/plot_separating_hyperplane_unbalanced.html#sphx-glr-auto-examples-svm-plot-separating-hyperplane-unbalanced-py) -* [SVM-Anova: SVM with univariate feature selection](../auto_examples/svm/plot_svm_anova.html#sphx-glr-auto-examples-svm-plot-svm-anova-py), -* [Non-linear SVM](../auto_examples/svm/plot_svm_nonlinear.html#sphx-glr-auto-examples-svm-plot-svm-nonlinear-py) -* [SVM: Weighted samples](../auto_examples/svm/plot_weighted_samples.html#sphx-glr-auto-examples-svm-plot-weighted-samples-py), - -## 1.4.2\. 回归 - -支持向量分类的方法可以被扩展用作解决回归问题. 这个方法被称作支持向量回归. - -支持向量分类生成的模型(如前描述)只依赖于训练集的子集,因为构建模型的 cost function 不在乎边缘之外的训练点. 类似的,支持向量回归生成的模型只依赖于训练集的子集, 因为构建模型的 cost function 忽略任何接近于模型预测的训练数据. - -支持向量分类有三种不同的实现形式: [`SVR`](generated/sklearn.svm.SVR.html#sklearn.svm.SVR "sklearn.svm.SVR"), [`NuSVR`](generated/sklearn.svm.NuSVR.html#sklearn.svm.NuSVR "sklearn.svm.NuSVR") 和 [`LinearSVR`](generated/sklearn.svm.LinearSVR.html#sklearn.svm.LinearSVR "sklearn.svm.LinearSVR"). 在只考虑线性核的情况下, [`LinearSVR`](generated/sklearn.svm.LinearSVR.html#sklearn.svm.LinearSVR "sklearn.svm.LinearSVR") 比 [`SVR`](generated/sklearn.svm.SVR.html#sklearn.svm.SVR "sklearn.svm.SVR") 提供一个更快的实现形式, 然而比起 [`SVR`](generated/sklearn.svm.SVR.html#sklearn.svm.SVR "sklearn.svm.SVR") 和 [`LinearSVR`](generated/sklearn.svm.LinearSVR.html#sklearn.svm.LinearSVR "sklearn.svm.LinearSVR"), [`NuSVR`](generated/sklearn.svm.NuSVR.html#sklearn.svm.NuSVR "sklearn.svm.NuSVR") 实现一个稍微不同的构思(formulation).细节参见 [实现细节](#svm-implementation-details). - -与分类的类别一样, fit方法会调用参数向量 X, y, 只在 y 是浮点数而不是整数型.: - -```py ->>> from sklearn import svm ->>> X = [[0, 0], [2, 2]] ->>> y = [0.5, 2.5] ->>> clf = svm.SVR() ->>> clf.fit(X, y) -SVR(C=1.0, cache_size=200, coef0=0.0, degree=3, epsilon=0.1, gamma='auto', - kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False) ->>> clf.predict([[1, 1]]) -array([ 1.5]) - -``` - -样例: - -* [Support Vector Regression (SVR) using linear and non-linear kernels](../auto_examples/svm/plot_svm_regression.html#sphx-glr-auto-examples-svm-plot-svm-regression-py) - -## 1.4.3\. 密度估计, 异常(novelty)检测 - -但类别的 SVM 用于异常检测, 即给予一个样例集, 它会检测这个样例集的 soft boundary 以便给新的数据点分类, 看它是否属于这个样例集. 生成的类称作 [`OneClassSVM`](generated/sklearn.svm.OneClassSVM.html#sklearn.svm.OneClassSVM "sklearn.svm.OneClassSVM"). - -这种情况下, 因为它属于非监督学习的一类, 没有类标签, fit 方法只会考虑输入数组X. - -在章节 [新奇和异常值检测](outlier_detection.html#outlier-detection) 查看这个应用的更多细节. - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_oneclass_0011.png](img/b29b59eca5c581c3f54d92c1671f2b2e.jpg)](../auto_examples/svm/plot_oneclass.html) - -示例: - -* [One-class SVM with non-linear kernel (RBF)](../auto_examples/svm/plot_oneclass.html#sphx-glr-auto-examples-svm-plot-oneclass-py) -* [Species distribution modeling](../auto_examples/applications/plot_species_distribution_modeling.html#sphx-glr-auto-examples-applications-plot-species-distribution-modeling-py) - -## 1.4.4\. 复杂度 - -支持向量机是个强大的工具,不过它的计算和存储空间要求也会随着要训练向量的数目增加而快速增加。 SVM的核心是一个二次规划问题(Quadratic Programming, QP),是将支持向量和训练数据的其余部分分离开来。 在实践中(数据集相关),会根据 [libsvm](http://www.csie.ntu.edu.tw/~cjlin/libsvm/) 的缓存有多效,在 ![O(n_{features} \times n_{samples}^2)](img/25a334612cb5a1736ebcc7eec00c7b29.jpg) 和 ![O(n_{features} \times n_{samples}^3)](img/d3d363339c8708bf2058b128facd0aea.jpg) 之间基于 [libsvm](http://www.csie.ntu.edu.tw/~cjlin/libsvm/) 的缩放操作才会调用这个 QP 解析器。 如果数据是非常稀疏,那 ![n_{features}](img/07921ae49a32570fd5559004f1cca103.jpg) 就用样本向量中非零特征的平均数量去替换。 - -另外请注意,在线性情况下,由 [liblinear](http://www.csie.ntu.edu.tw/~cjlin/liblinear/) 操作的 [`LinearSVC`](generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC "sklearn.svm.LinearSVC") 算法要比由它的 [libsvm](http://www.csie.ntu.edu.tw/~cjlin/libsvm/) 对应的 [`SVC`](generated/sklearn.svm.SVC.html#sklearn.svm.SVC "sklearn.svm.SVC") 更为高效,并且它几乎可以线性缩放到数百万样本或者特征。 - -## 1.4.5\. 使用诀窍 - -> * **避免数据复制**: 对于 [`SVC`](generated/sklearn.svm.SVC.html#sklearn.svm.SVC "sklearn.svm.SVC"), [`SVR`](generated/sklearn.svm.SVR.html#sklearn.svm.SVR "sklearn.svm.SVR"), [`NuSVC`](generated/sklearn.svm.NuSVC.html#sklearn.svm.NuSVC "sklearn.svm.NuSVC") 和 [`NuSVR`](generated/sklearn.svm.NuSVR.html#sklearn.svm.NuSVR "sklearn.svm.NuSVR"), 如果数据是通过某些方法而不是用 C 有序的连续双精度,那它先会调用底层的 C 命令再复制。 您可以通过检查它的 `flags` 属性,来确定给定的 numpy 数组是不是 C 连续的。 -> -> -> -> 对于 [`LinearSVC`](generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC "sklearn.svm.LinearSVC") (和 [`LogisticRegression`](generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression "sklearn.linear_model.LogisticRegression")) 的任何输入,都会以 numpy 数组形式,被复制和转换为 用 liblinear 内部稀疏数据去表达(双精度浮点型 float 和非零部分的 int32 索引)。 如果您想要一个适合大规模的线性分类器,又不打算复制一个密集的 C-contiguous 双精度 numpy 数组作为输入, 那我们建议您去使用 [`SGDClassifier`](generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier "sklearn.linear_model.SGDClassifier") 类作为替代。目标函数可以配置为和 [`LinearSVC`](generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC "sklearn.svm.LinearSVC") 模型差不多相同的。 -> -> -> * **内核的缓存大小**: 在大规模问题上,对于 [`SVC`](generated/sklearn.svm.SVC.html#sklearn.svm.SVC "sklearn.svm.SVC"), [`SVR`](generated/sklearn.svm.SVR.html#sklearn.svm.SVR "sklearn.svm.SVR"), `nuSVC` 和 [`NuSVR`](generated/sklearn.svm.NuSVR.html#sklearn.svm.NuSVR "sklearn.svm.NuSVR"), 内核缓存的大小会特别影响到运行时间。如果您有足够可用的 RAM,不妨把它的 `缓存大小` 设得比默认的 200(MB) 要高,例如为 500(MB) 或者 1000(MB)。 -> -> -> * **惩罚系数C的设置**:在合理的情况下, `C` 的默认选择为 `1` 。如果您有很多混杂的观察数据, 您应该要去调小它。 `C` 越小,就能更好地去正规化估计。 -> -> -> * 支持向量机算法本身不是用来扩大不变性,所以 **我们强烈建议您去扩大数据量**. 举个例子,对于输入向量 X, 规整它的每个数值范围为 [0, 1] 或 [-1, +1] ,或者标准化它的为均值为0方差为1的数据分布。请注意, 相同的缩放标准必须要应用到所有的测试向量,从而获得有意义的结果。 请参考章节 [预处理数据](preprocessing.html#preprocessing) ,那里会提供到更多关于缩放和规整。 -> -> -> * 在 [`NuSVC`](generated/sklearn.svm.NuSVC.html#sklearn.svm.NuSVC "sklearn.svm.NuSVC")/[`OneClassSVM`](generated/sklearn.svm.OneClassSVM.html#sklearn.svm.OneClassSVM "sklearn.svm.OneClassSVM")/[`NuSVR`](generated/sklearn.svm.NuSVR.html#sklearn.svm.NuSVR "sklearn.svm.NuSVR") 内的参数 `nu` , 近似是训练误差和支持向量的比值。 -> -> -> * 在 [`SVC`](generated/sklearn.svm.SVC.html#sklearn.svm.SVC "sklearn.svm.SVC"), ,如果分类器的数据不均衡(就是说,很多正例很少负例),设置 `class_weight='balanced'` 与/或尝试不同的惩罚系数 `C` 。 -> -> -> * 在拟合模型时,底层 [`LinearSVC`](generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC "sklearn.svm.LinearSVC") 操作使用了随机数生成器去选择特征。 所以不要感到意外,对于相同的数据输入,也会略有不同的输出结果。如果这个发生了, 尝试用更小的 tol 参数。 -> -> -> * 使用由 `LinearSVC(loss='l2', penalty='l1', dual=False)` 提供的 L1 惩罚去产生稀疏解,也就是说,特征权重的子集不同于零,这样做有助于决策函数。 随着增加 `C` 会产生一个更复杂的模型(要做更多的特征选择)。可以使用 [`l1_min_c`](generated/sklearn.svm.l1_min_c.html#sklearn.svm.l1_min_c "sklearn.svm.l1_min_c") 去计算 `C` 的数值,去产生一个”null” 模型(所有的权重等于零)。 - -## 1.4.6\. 核函数 - -_核函数_ 可以是以下任何形式:: - -> * 线性: ![\langle x, x'\rangle](img/587f27ca8cf947779c1929d65c697e0c.jpg). -> * 多项式: ![(\gamma \langle x, x'\rangle + r)^d](img/58d86a5573e0796f320435a8ce8346ea.jpg). ![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg) 是关键词 `degree`, ![r](img/451ef7ed1a14a6cdc38324c8a5c7c683.jpg) 指定 `coef0`。 -> * rbf: ![\exp(-\gamma \|x-x'\|^2)](img/ba90d4193a98b9023d3d8526a20fe1ac.jpg). ![\gamma](img/6552bde3d3999c1a9728016416932af7.jpg) 是关键词 `gamma`, 必须大于 0。 -> * sigmoid (![\tanh(\gamma \langle x,x'\rangle + r)](img/ed407df5e0211da2859805a96e271751.jpg)), 其中 ![r](img/451ef7ed1a14a6cdc38324c8a5c7c683.jpg) 指定 `coef0`。 - -初始化时,不同内核由不同的函数名调用: - -```py ->>> linear_svc = svm.SVC(kernel='linear') ->>> linear_svc.kernel -'linear' ->>> rbf_svc = svm.SVC(kernel='rbf') ->>> rbf_svc.kernel -'rbf' - -``` - -### 1.4.6.1\. 自定义核 - -您可以自定义自己的核,通过使用python函数作为内核或者通过预计算 Gram 矩阵。 - -自定义内核的分类器和别的分类器一样,除了下面这几点: - -> * 空间 `support_vectors_` 现在不是空的, 只有支持向量的索引被存储在 `support_` -> * 请把 `fit()` 模型中的第一个参数的引用(不是副本)存储为将来的引用。 如果在 `fit()` 和 `predict()` 之间有数组发生改变,您将会碰到意料外的结果。 - -#### 1.4.6.1.1\. 使用 python 函数作为内核 - -在构造时,您同样可以通过一个函数传递到关键词 `kernel` ,来使用您自己定义的内核。 - -您的内核必须要以两个矩阵作为参数,大小分别是 `(n_samples_1, n_features)`, `(n_samples_2, n_features)` 和返回一个内核矩阵,shape 是 `(n_samples_1, n_samples_2)`. - -以下代码定义一个线性核,和构造一个使用该内核的分类器例子: - -```py ->>> import numpy as np ->>> from sklearn import svm ->>> def my_kernel(X, Y): -... return np.dot(X, Y.T) -... ->>> clf = svm.SVC(kernel=my_kernel) - -``` - -例子: - -* [SVM with custom kernel](../auto_examples/svm/plot_custom_kernel.html#sphx-glr-auto-examples-svm-plot-custom-kernel-py). - -#### 1.4.6.1.2\. 使用 Gram 矩阵 - -在适应算法中,设置 `kernel='precomputed'` 和把 X 替换为 Gram 矩阵。 此时,必须要提供在 _所有_ 训练矢量和测试矢量中的内核值。 - -```py ->>> import numpy as np ->>> from sklearn import svm ->>> X = np.array([[0, 0], [1, 1]]) ->>> y = [0, 1] ->>> clf = svm.SVC(kernel='precomputed') ->>> # 线性内核计算 ->>> gram = np.dot(X, X.T) ->>> clf.fit(gram, y) -SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, - decision_function_shape='ovr', degree=3, gamma='auto', - kernel='precomputed', max_iter=-1, probability=False, - random_state=None, shrinking=True, tol=0.001, verbose=False) ->>> # 预测训练样本 ->>> clf.predict(gram) -array([0, 1]) - -``` - -#### 1.4.6.1.3\. RBF 内核参数 - -当用 _径向基_ (RBF) 内核去训练 SVM,有两个参数必须要去考虑: `C` 惩罚系数和 `gamma` 。参数 `C` , 通用在所有 SVM 内核,与决策表面的简单性相抗衡,可以对训练样本的误分类进行有价转换。 较小的 `C` 会使决策表面更平滑,同时较高的 `C` 旨在正确地分类所有训练样本。 `Gamma` 定义了单一 训练样本能起到多大的影响。较大的 `gamma` 会更让其他样本受到影响。 - -选择合适的 `C` 和 `gamma` ,对SVM的性能起到很关键的作用。建议一点是 使用  [`sklearn.model_selection.GridSearchCV`](generated/sklearn.model_selection.GridSearchCV.html#sklearn.model_selection.GridSearchCV "sklearn.model_selection.GridSearchCV") 与 `C` 和 `gamma` 相隔 成倍差距从而选择到好的数值。 - -例子: - -* [RBF SVM parameters](../auto_examples/svm/plot_rbf_parameters.html#sphx-glr-auto-examples-svm-plot-rbf-parameters-py) - -## 1.4.7\. 数学公式 - -支持向量机在高维度或无穷维度空间中,构建一个超平面或者一系列的超平面,可以用于分类、回归或者别的任务。 直观地看,借助超平面去实现一个好的分割, 能在任意类别中使最为接近的训练数据点具有最大的间隔距离(即所 谓的函数余量),这样做是因为通常更大的余量能有更低的分类器泛化误差。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_separating_hyperplane_0011.png](img/7d9b5103fb50fe740fbc421247d2a5c7.jpg)](http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_separating_hyperplane_0011.png) - -### 1.4.7.1\. SVC - -在两类中,给定训练向量 ![x_i \in \mathbb{R}^p](img/2bd24ed32bcf24db79058c3cc81f5331.jpg), i=1,…, n, 和一个向量 ![y \in \{1, -1\}^n](img/73658f99647e50786817b44416d09df1.jpg), SVC能解决 如下主要问题: - - -![\min_ {w, b, \zeta} \frac{1}{2} w^T w + C \sum_{i=1}^{n} \zeta_i -\textrm {subject to } & y_i (w^T \phi (x_i) + b) \geq 1 - \zeta_i,\\ -& \zeta_i \geq 0, i=1, ..., n](img/ee78ab463ea8dc72594f270f5193a7a6.jpg) - - -它的对偶是 - - -![\min_{\alpha} \frac{1}{2} \alpha^T Q \alpha - e^T \alpha -\textrm {subject to } & y^T \alpha = 0\\ -& 0 \leq \alpha_i \leq C, i=1, ..., n](img/61b05c3bf030b831f23f257ca8182f51.jpg) - - -其中 ![e](img/1f9000a4bf057edcb9b87d7a4abb8e8d.jpg) 是所有的向量, ![C > 0](img/2edeef5a5007d4bd8b4f43fe2670cf85.jpg) 是上界,![Q](img/87dfb2676632ee8a92713f4861ccc84e.jpg) 是一个 ![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) 由 ![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) 个半正定矩阵, 而 ![Q_{ij} \equiv y_i y_j K(x_i, x_j)](img/36c2dba9ae7680cd09eff62c73e37963.jpg) ,其中 ![K(x_i, x_j) = \phi (x_i)^T \phi (x_j)](img/51fa9007646861e0569f8f66731c64e7.jpg) 是内核。所以训练向量是通过函数 ![\phi](img/ff5e98366afa13070d3b410c55a80db1.jpg),间接反映到一个更高维度的(无穷的)空间。 - -决策函数是: - -![\operatorname{sgn}(\sum_{i=1}^n y_i \alpha_i K(x_i, x) + \rho)](img/53f6b3d47807f65fe25b4fa232cd7abc.jpg) - -注意: - -虽然这些SVM模型是从 [libsvm](http://www.csie.ntu.edu.tw/~cjlin/libsvm/) 和 [liblinear](http://www.csie.ntu.edu.tw/~cjlin/liblinear/) 中派生出来,使用了 `C` 作为调整参数,但是大多数的 攻击使用了 `alpha`。两个模型的正则化量之间的精确等价,取决于模型优化的准确目标函数。举 个例子,当使用的估计器是 `sklearn.linear_model.Ridge` 做回归时,他们之间的相关性是 ![C = \frac{1}{alpha}](img/c74889dd434ec9a5f4e1b57a549263e7.jpg)。 - -这些参数能通过成员 `dual_coef_`、 `support_vectors_` 、 `intercept_` 去访问,这些成员分别控制了输出 ![y_i \alpha_i](img/bf9baf4863bf6d025348b7d91c888066.jpg)、支持向量和无关项 ![\rho](img/b91e4507d9fd7068b02f689d697f8714.jpg) : - -参考文献: - -* [“Automatic Capacity Tuning of Very Large VC-dimension Classifiers”](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.17.7215), I. Guyon, B. Boser, V. Vapnik - Advances in neural information processing 1993. -* [“Support-vector networks”](http://link.springer.com/article/10.1007%2FBF00994018), C. Cortes, V. Vapnik - Machine Learning, 20, 273-297 (1995). - -### 1.4.7.2\. NuSVC - -我们引入一个新的参数 ![\nu](img/f996477bc9806499e6b6a1ea4d9ae8eb.jpg) 来控制支持向量的数量和训练误差。参数 ![\nu \in (0, -1]](img/50eda5a92ebcfda1468e1508393b748a.jpg) 是训练误差分数的上限和支持向量分数的下限。 - -可以看出, ![\nu](img/f996477bc9806499e6b6a1ea4d9ae8eb.jpg)-SVC 公式是 ![C](img/4b6d782a67ac392e97215c46b7590bf7.jpg)-SVC 的再参数化,所以数学上是等效的。 - -### 1.4.7.3\. SVR - -给定训练向量 ![x_i \in \mathbb{R}^p](img/2bd24ed32bcf24db79058c3cc81f5331.jpg), i=1,…, n,向量 ![y \in \mathbb{R}^n](img/6653de9b4dea7e5e9a897b5f34e7a4f0.jpg) ![\varepsilon](img/bf9fb1354c2e0ea50d37e5cad7866314.jpg)-SVR 能解决以下的主要问题: - - -![\min_ {w, b, \zeta, \zeta^*} \frac{1}{2} w^T w + C \sum_{i=1}^{n} (\zeta_i + \zeta_i^*) -\textrm {subject to } & y_i - w^T \phi (x_i) - b \leq \varepsilon + \zeta_i,\\ - & w^T \phi (x_i) + b - y_i \leq \varepsilon + \zeta_i^*,\\ - & \zeta_i, \zeta_i^* \geq 0, i=1, ..., n](img/23dac8b2be31a1cbe914b59ff2670dbf.jpg) - - -它的对偶是 - - -![\min_{\alpha, \alpha^*} \frac{1}{2} (\alpha - \alpha^*)^T Q (\alpha - \alpha^*) + \varepsilon e^T (\alpha + \alpha^*) - y^T (\alpha - \alpha^*) -\textrm {subject to } & e^T (\alpha - \alpha^*) = 0\\ -& 0 \leq \alpha_i, \alpha_i^* \leq C, i=1, ..., n](img/e996da94de858e5248f145e01733ed9d.jpg) - - -其中 ![e](img/1f9000a4bf057edcb9b87d7a4abb8e8d.jpg) 是所有的向量, ![C > 0](img/2edeef5a5007d4bd8b4f43fe2670cf85.jpg) 是上界,![Q](img/87dfb2676632ee8a92713f4861ccc84e.jpg) 是一个 ![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) 由 ![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) 个半正定矩阵, 而 ![Q_{ij} \equiv K(x_i, x_j) = \phi (x_i)^T \phi (x_j)](img/b019b19dda07f07208f1bd2576ebad30.jpg) 是内核。 所以训练向量是通过函数 ![\phi](img/ff5e98366afa13070d3b410c55a80db1.jpg),间接反映到一个更高维度的(无穷的)空间。 - -决策函数是: - -![\sum_{i=1}^n (\alpha_i - \alpha_i^*) K(x_i, x) + \rho](img/db24e5f707f974690c4334cfa218bbee.jpg) - -这些参数能通过成员 `dual_coef_`、 `support_vectors_` 、 `intercept_` 去访问,这些 成员分别控制了不同的 ![\alpha_i - \alpha_i^*](img/1a78828504944887ab23097011f807d5.jpg)、支持向量和无关项 ![\rho](img/b91e4507d9fd7068b02f689d697f8714.jpg): - -参考文献: - -* [“A Tutorial on Support Vector Regression”](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.114.4288), Alex J. Smola, Bernhard Schölkopf - Statistics and Computing archive Volume 14 Issue 3, August 2004, p. 199-222. - -## 1.4.8\. 实现细节 - -在底层里,我们使用 [libsvm](http://www.csie.ntu.edu.tw/~cjlin/libsvm/) 和 [liblinear](http://www.csie.ntu.edu.tw/~cjlin/liblinear/) 去处理所有的计算。这些库都使用了 C 和 Cython 去包装。 - -参考文献: - -有关实现的描述和使用算法的细节,请参考 - -> * [LIBSVM: A Library for Support Vector Machines](http://www.csie.ntu.edu.tw/~cjlin/papers/libsvm.pdf). -> * [LIBLINEAR – A Library for Large Linear Classification](http://www.csie.ntu.edu.tw/~cjlin/liblinear/). \ No newline at end of file diff --git a/docs/0.19.x/56.md b/docs/0.19.x/56.md deleted file mode 100755 index 2124e447cafc2dcc761e7efcc3e4f65e3f4fc3b1..0000000000000000000000000000000000000000 --- a/docs/0.19.x/56.md +++ /dev/null @@ -1,72 +0,0 @@ -# 4\. 数据集转换 - -scikit-learn 提供了一个用于转换数据集的库, 它也许会 clean(清理)(请参阅 [预处理数据](modules/preprocessing.html#preprocessing)), reduce(减少)(请参阅 [无监督降维](modules/unsupervised_reduction.html#data-reduction)), expand(扩展)(请参阅 [内核近似](modules/kernel_approximation.html#kernel-approximation))或 generate(生成)(请参阅 [特征提取](modules/feature_extraction.html#feature-extraction)) feature representations(特征表示). - -像其它预估计一样, 它们由具有 `fit` 方法的类来表示, 该方法从训练集学习模型参数(例如, 归一化的平均值和标准偏差)以及将该转换模型应用于 `transform` 方法到不可见数据. 同时 `fit_transform` 可以更方便和有效地建模与转换训练数据. - -将 [Pipeline(管道)和 FeatureUnion(特征联合): 合并的评估器](modules/pipeline.html#combining-estimators) 中 transformers(转换)使用并行的或者串联的方式合并到一起. [成对的矩阵, 类别和核函数](modules/metrics.html#metrics) 涵盖将特征空间转换为 affinity matrices(亲和矩阵), 而 [预测目标 (y) 的转换](modules/preprocessing_targets.html#preprocessing-targets) 考虑在 scikit-learn 中使用目标空间的转换(例如. 标签分类). - -* [4.1\. Pipeline(管道)和 FeatureUnion(特征联合): 合并的评估器](modules/pipeline.html) - * [4.1.1\. Pipeline: 链式评估器](modules/pipeline.html#pipeline) - * [4.1.1.1\. 用法](modules/pipeline.html#id8) - * [4.1.1.2\. 注意点](modules/pipeline.html#id9) - * [4.1.1.3\. 缓存转换器:避免重复计算](modules/pipeline.html#pipeline-cache) - * [4.1.2\. FeatureUnion(特征联合): 个特征层面](modules/pipeline.html#featureunion) - * [4.1.2.1\. 用法](modules/pipeline.html#id11) -* [4.2\. 特征提取](modules/feature_extraction.html) - * [4.2.1\. 从字典类型加载特征](modules/feature_extraction.html#dict-feature-extraction) - * [4.2.2\. 特征哈希(相当于一种降维技巧)](modules/feature_extraction.html#feature-hashing) - * [4.2.2.1\. 实现细节](modules/feature_extraction.html#id4) - * [4.2.3\. 文本特征提取](modules/feature_extraction.html#text-feature-extraction) - * [4.2.3.1\. 话语表示](modules/feature_extraction.html#id7) - * [4.2.3.2\. 稀疏](modules/feature_extraction.html#id8) - * [4.2.3.3\. 常见 Vectorizer 使用方法](modules/feature_extraction.html#vectorizer) - * [4.2.3.4\. Tf–idf 项加权](modules/feature_extraction.html#tfidf) - * [4.2.3.5\. 解码文本文件](modules/feature_extraction.html#id10) - * [4.2.3.6\. 应用和实例](modules/feature_extraction.html#id11) - * [4.2.3.7\. 词语表示的限制](modules/feature_extraction.html#id12) - * [4.2.3.8\. 用哈希技巧矢量化大文本语料库](modules/feature_extraction.html#hashing-vectorizer) - * [4.2.3.9\. 使用 HashingVectorizer 执行外核缩放](modules/feature_extraction.html#hashingvectorizer) - * [4.2.3.10\. 自定义矢量化器类](modules/feature_extraction.html#id14) - * [4.2.4\. 图像特征提取](modules/feature_extraction.html#image-feature-extraction) - * [4.2.4.1\. 补丁提取](modules/feature_extraction.html#id16) - * [4.2.4.2\. 图像的连接图](modules/feature_extraction.html#id17) -* [4.3\. 预处理数据](modules/preprocessing.html) - * [4.3.1\. 标准化,也称去均值和方差按比例缩放](modules/preprocessing.html#preprocessing-scaler) - * [4.3.1.1\. 将特征缩放至特定范围内](modules/preprocessing.html#id3) - * [4.3.1.2\. 缩放稀疏(矩阵)数据](modules/preprocessing.html#id4) - * [4.3.1.3\. 缩放有离群值的数据](modules/preprocessing.html#id5) - * [4.3.1.4\. 核矩阵的中心化](modules/preprocessing.html#kernel-centering) - * [4.3.2\. 非线性转换](modules/preprocessing.html#preprocessing-transformer) - * [4.3.3\. 归一化](modules/preprocessing.html#preprocessing-normalization) - * [4.3.4\. 二值化](modules/preprocessing.html#preprocessing-binarization) - * [4.3.4.1\. 特征二值化](modules/preprocessing.html#id10) - * [4.3.5\. 分类特征编码](modules/preprocessing.html#preprocessing-categorical-features) - * [4.3.6\. 缺失值插补](modules/preprocessing.html#imputation) - * [4.3.7\. 生成多项式特征](modules/preprocessing.html#polynomial-features) - * [4.3.8\. 自定义转换器](modules/preprocessing.html#function-transformer) -* [4.4\. 无监督降维](modules/unsupervised_reduction.html) - * [4.4.1\. PCA: 主成份分析](modules/unsupervised_reduction.html#pca) - * [4.4.2\. 随机投影](modules/unsupervised_reduction.html#id2) - * [4.4.3\. 特征聚集](modules/unsupervised_reduction.html#id3) -* [4.5\. 随机投影](modules/random_projection.html) - * [4.5.1\. Johnson-Lindenstrauss 辅助定理](modules/random_projection.html#johnson-lindenstrauss) - * [4.5.2\. 高斯随机投影](modules/random_projection.html#gaussian-random-matrix) - * [4.5.3\. 稀疏随机矩阵](modules/random_projection.html#sparse-random-matrix) -* [4.6\. 内核近似](modules/kernel_approximation.html) - * [4.6.1\. 内核近似的 Nystroem 方法](modules/kernel_approximation.html#nystroem) - * [4.6.2\. 径向基函数内核](modules/kernel_approximation.html#rbf-kernel-approx) - * [4.6.3\. 加性卡方核](modules/kernel_approximation.html#additive-chi-kernel-approx) - * [4.6.4\. Skewed Chi Squared Kernel (偏斜卡方核?暂译)](modules/kernel_approximation.html#skewed-chi-squared-kernel) - * [4.6.5\. 数学方面的细节](modules/kernel_approximation.html#id8) -* [4.7\. 成对的矩阵, 类别和核函数](modules/metrics.html) - * [4.7.1\. 余弦相似度](modules/metrics.html#cosine-similarity) - * [4.7.2\. 线性核函数](modules/metrics.html#linear-kernel) - * [4.7.3\. 多项式核函数](modules/metrics.html#polynomial-kernel) - * [4.7.4\. Sigmoid 核函数](modules/metrics.html#sigmoid) - * [4.7.5\. RBF 核函数](modules/metrics.html#rbf) - * [4.7.6\. 拉普拉斯核函数](modules/metrics.html#laplacian-kernel) - * [4.7.7\. 卡方核函数](modules/metrics.html#chi2-kernel) -* [4.8\. 预测目标 (`y`) 的转换](modules/preprocessing_targets.html) - * [4.8.1\. 标签二值化](modules/preprocessing_targets.html#id1) - * [4.8.2\. 标签编码](modules/preprocessing_targets.html#id2) \ No newline at end of file diff --git a/docs/0.19.x/57.md b/docs/0.19.x/57.md deleted file mode 100755 index d92bae894c8a0c84f04390477070b0125e4affe0..0000000000000000000000000000000000000000 --- a/docs/0.19.x/57.md +++ /dev/null @@ -1,259 +0,0 @@ -# 4.1\. Pipeline(管道)和 FeatureUnion(特征联合): 合并的评估器 - -校验者: -        [@程威](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@Sehriff](https://github.com/apachecn/scikit-learn-doc-zh) - -## 4.1.1\. Pipeline: 链式评估器 - -```py - 可以把多个评估器链接成一个。这个是很有用的,因为处理数据的步骤一般都是固定的,例如特征选择、标准化和分类。 -``` - -[`Pipeline`](generated/sklearn.pipeline.Pipeline.html#sklearn.pipeline.Pipeline "sklearn.pipeline.Pipeline") 主要有两个目的: - -```py -便捷性和封装性 -``` - -你只要对数据调用 [``](#id2)fit``和 [``](#id4)predict``一次来适配所有的一系列评估器。 - -```py -联合的参数选择 -``` - -你可以一次 :ref:[`](#id6)grid search <grid_search>`管道中所有评估器的参数。 - -```py -安全性 -``` - -训练转换器和预测器使用的是相同样本,管道有助于防止来自测试数据的统计数据泄露到交叉验证的训练模型中。 - -管道中的所有评估器,除了最后一个评估器,管道的所有评估器必须是转换器。 (例如,必须有 `transform` 方法). 最后一个评估器的类型不限(转换器、分类器等等) - -### 4.1.1.1\. 用法 - -> [`Pipeline`](generated/sklearn.pipeline.Pipeline.html#sklearn.pipeline.Pipeline "sklearn.pipeline.Pipeline") 使用一系列 `(key, value)` 键值对来构建,其中 `key` 是你给这个步骤起的名字, `value` 是一个评估器对象: -> -> ```py -> >>> from sklearn.pipeline import Pipeline -> >>> from sklearn.svm import SVC -> >>> from sklearn.decomposition import PCA -> >>> estimators = [('reduce_dim', PCA()), ('clf', SVC())] -> >>> pipe = Pipeline(estimators) -> >>> pipe -> Pipeline(memory=None, -> steps=[('reduce_dim', PCA(copy=True,...)), -> ('clf', SVC(C=1.0,...))]) -> -> ``` - -功能函数 [`make_pipeline`](generated/sklearn.pipeline.make_pipeline.html#sklearn.pipeline.make_pipeline "sklearn.pipeline.make_pipeline") 是构建管道的缩写; 它接收多个评估器并返回一个管道,自动填充评估器名: - -```py ->>> from sklearn.pipeline import make_pipeline ->>> from sklearn.naive_bayes import MultinomialNB ->>> from sklearn.preprocessing import Binarizer ->>> make_pipeline(Binarizer(), MultinomialNB()) -Pipeline(memory=None, - steps=[('binarizer', Binarizer(copy=True, threshold=0.0)), - ('multinomialnb', MultinomialNB(alpha=1.0, - class_prior=None, - fit_prior=True))]) - -``` - -管道中的评估器作为一个列表保存在 `steps` 属性内: - -```py ->>> pipe.steps[0] -('reduce_dim', PCA(copy=True, iterated_power='auto', n_components=None, random_state=None, - svd_solver='auto', tol=0.0, whiten=False)) - -``` - -并作为 `dict` 保存在 `named_steps`: - -```py ->>> pipe.named_steps['reduce_dim'] -PCA(copy=True, iterated_power='auto', n_components=None, random_state=None, - svd_solver='auto', tol=0.0, whiten=False) - -``` - -管道中的评估器参数可以通过 `<estimator>__<parameter>` 语义来访问: - -```py ->>> pipe.set_params(clf__C=10) -Pipeline(memory=None, - steps=[('reduce_dim', PCA(copy=True, iterated_power='auto',...)), - ('clf', SVC(C=10, cache_size=200, class_weight=None,...))]) - -``` - -named_steps 的属性映射到多个值,在交互环境支持 tab 补全: - -```py ->>> pipe.named_steps.reduce_dim is pipe.named_steps['reduce_dim'] -True - -``` - -这对网格搜索尤其重要: - -```py ->>> from sklearn.model_selection import GridSearchCV ->>> param_grid = dict(reduce_dim__n_components=[2, 5, 10], -... clf__C=[0.1, 10, 100]) ->>> grid_search = GridSearchCV(pipe, param_grid=param_grid) - -``` - -单独的步骤可以用多个参数替换,除了最后步骤,其他步骤都可以设置为 `None` 来跳过 - -```py ->>> from sklearn.linear_model import LogisticRegression ->>> param_grid = dict(reduce_dim=[None, PCA(5), PCA(10)], -... clf=[SVC(), LogisticRegression()], -... clf__C=[0.1, 10, 100]) ->>> grid_search = GridSearchCV(pipe, param_grid=param_grid) - -``` - -例子: - -* [Pipeline Anova SVM](../auto_examples/feature_selection/plot_feature_selection_pipeline.html#sphx-glr-auto-examples-feature-selection-plot-feature-selection-pipeline-py) -* [Sample pipeline for text feature extraction and evaluation](../auto_examples/model_selection/grid_search_text_feature_extraction.html#sphx-glr-auto-examples-model-selection-grid-search-text-feature-extraction-py) -* [Pipelining: chaining a PCA and a logistic regression](../auto_examples/plot_digits_pipe.html#sphx-glr-auto-examples-plot-digits-pipe-py) -* [Explicit feature map approximation for RBF kernels](../auto_examples/plot_kernel_approximation.html#sphx-glr-auto-examples-plot-kernel-approximation-py) -* [SVM-Anova: SVM with univariate feature selection](../auto_examples/svm/plot_svm_anova.html#sphx-glr-auto-examples-svm-plot-svm-anova-py) -* [Selecting dimensionality reduction with Pipeline and GridSearchCV](../auto_examples/plot_compare_reduction.html#sphx-glr-auto-examples-plot-compare-reduction-py) - -也可以参阅: - -* [调整估计器的超参数](grid_search.html#grid-search) - -### 4.1.1.2\. 注意点 - -对管道调用 `fit` 方法的效果跟依次对每个评估器调用 `fit` 方法一样, 都是``transform`` 输入并传递给下个步骤。 管道中最后一个评估器的所有方法,管道都有,例如,如果最后的评估器是一个分类器, [`Pipeline`](generated/sklearn.pipeline.Pipeline.html#sklearn.pipeline.Pipeline "sklearn.pipeline.Pipeline") 可以当做分类器来用。如果最后一个评估器是转换器,管道也一样可以。 - -### 4.1.1.3\. 缓存转换器:避免重复计算 - -适配转换器是很耗费计算资源的。设置了``memory`` 参数, [`Pipeline`](generated/sklearn.pipeline.Pipeline.html#sklearn.pipeline.Pipeline "sklearn.pipeline.Pipeline") 将会在调用``fit``方法后缓存每个转换器。 如果参数和输入数据相同,这个特征用于避免重复计算适配的转换器。典型的例子是网格搜索转换器,该转化器只要适配一次就可以多次使用。 - -> `memory` 参数用于缓存转换器。 - -`memory` 可以是包含要缓存的转换器的目录的字符串或一个 [joblib.Memory](https://pythonhosted.org/joblib/memory.html) 对象: - -```py ->>> from tempfile import mkdtemp ->>> from shutil import rmtree ->>> from sklearn.decomposition import PCA ->>> from sklearn.svm import SVC ->>> from sklearn.pipeline import Pipeline ->>> estimators = [('reduce_dim', PCA()), ('clf', SVC())] ->>> cachedir = mkdtemp() ->>> pipe = Pipeline(estimators, memory=cachedir) ->>> pipe -Pipeline(..., - steps=[('reduce_dim', PCA(copy=True,...)), - ('clf', SVC(C=1.0,...))]) ->>> # Clear the cache directory when you don't need it anymore ->>> rmtree(cachedir) - -``` - -Warning - -**Side effect of caching transfomers** - -使用 [`Pipeline`](generated/sklearn.pipeline.Pipeline.html#sklearn.pipeline.Pipeline "sklearn.pipeline.Pipeline") 而不开启缓存功能,还是可以通过查看原始实例的,例如: - -```py ->>> from sklearn.datasets import load_digits ->>> digits = load_digits() ->>> pca1 = PCA() ->>> svm1 = SVC() ->>> pipe = Pipeline([('reduce_dim', pca1), ('clf', svm1)]) ->>> pipe.fit(digits.data, digits.target) -... -Pipeline(memory=None, - steps=[('reduce_dim', PCA(...)), ('clf', SVC(...))]) ->>> # The pca instance can be inspected directly ->>> print(pca1.components_) - [[ -1.77484909e-19 ... 4.07058917e-18]] - -``` - -开启缓存会在适配前触发转换器的克隆。因此,管道的转换器实例不能被直接查看。 在下面例子中, 访问 `PCA` 实例 `pca2` 将会引发 `AttributeError` 因为 `pca2` 是一个未适配的转换器。 这时应该使用属性 `named_steps` 来检查管道的评估器: - -```py ->>> cachedir = mkdtemp() ->>> pca2 = PCA() ->>> svm2 = SVC() ->>> cached_pipe = Pipeline([('reduce_dim', pca2), ('clf', svm2)], -... memory=cachedir) ->>> cached_pipe.fit(digits.data, digits.target) -... - Pipeline(memory=..., - steps=[('reduce_dim', PCA(...)), ('clf', SVC(...))]) ->>> print(cached_pipe.named_steps['reduce_dim'].components_) -... - [[ -1.77484909e-19 ... 4.07058917e-18]] ->>> # Remove the cache directory ->>> rmtree(cachedir) - -``` - -例子: - -* [Selecting dimensionality reduction with Pipeline and GridSearchCV](../auto_examples/plot_compare_reduction.html#sphx-glr-auto-examples-plot-compare-reduction-py) - -## 4.1.2\. FeatureUnion(特征联合): 个特征层面 - -[`FeatureUnion`](generated/sklearn.pipeline.FeatureUnion.html#sklearn.pipeline.FeatureUnion "sklearn.pipeline.FeatureUnion") 合并了多个转换器对象形成一个新的转换器,该转换器合并了他们的输出。一个 [`FeatureUnion`](generated/sklearn.pipeline.FeatureUnion.html#sklearn.pipeline.FeatureUnion "sklearn.pipeline.FeatureUnion") 可以接收多个转换器对象。在适配期间,每个转换器都单独的和数据适配。 对于转换数据,转换器可以并发使用,且输出的样本向量被连接成更大的向量。 - -[`FeatureUnion`](generated/sklearn.pipeline.FeatureUnion.html#sklearn.pipeline.FeatureUnion "sklearn.pipeline.FeatureUnion") 功能与 [`Pipeline`](generated/sklearn.pipeline.Pipeline.html#sklearn.pipeline.Pipeline "sklearn.pipeline.Pipeline") 一样- 便捷性和联合参数的估计和验证。 - -可以结合:class:<cite>FeatureUnion</cite> 和 [`Pipeline`](generated/sklearn.pipeline.Pipeline.html#sklearn.pipeline.Pipeline "sklearn.pipeline.Pipeline") 来创造出复杂模型。 - -(一个 [`FeatureUnion`](generated/sklearn.pipeline.FeatureUnion.html#sklearn.pipeline.FeatureUnion "sklearn.pipeline.FeatureUnion") 没办法检查两个转换器是否会产出相同的特征。它仅仅在特征集合不相关时产生联合并确认是调用者的职责。) - -### 4.1.2.1\. 用法 - -一个 [`FeatureUnion`](generated/sklearn.pipeline.FeatureUnion.html#sklearn.pipeline.FeatureUnion "sklearn.pipeline.FeatureUnion") 是通过一系列 `(key, value)` 键值对来构建的,其中的 `key` 给转换器指定的名字 (一个绝对的字符串; 他只是一个代号), `value` 是一个评估器对象: - -```py ->>> from sklearn.pipeline import FeatureUnion ->>> from sklearn.decomposition import PCA ->>> from sklearn.decomposition import KernelPCA ->>> estimators = [('linear_pca', PCA()), ('kernel_pca', KernelPCA())] ->>> combined = FeatureUnion(estimators) ->>> combined -FeatureUnion(n_jobs=1, - transformer_list=[('linear_pca', PCA(copy=True,...)), - ('kernel_pca', KernelPCA(alpha=1.0,...))], - transformer_weights=None) - -``` - -跟管道一样,特征联合有一个精简版的构造器叫做:func:<cite>make_union</cite> ,该构造器不需要显式给每个组价起名字。 - -正如 `Pipeline`, 单独的步骤可能用``set_params``替换 ,并设置为 [``](#id12)None``来跳过: - -```py ->>> combined.set_params(kernel_pca=None) -... -FeatureUnion(n_jobs=1, - transformer_list=[('linear_pca', PCA(copy=True,...)), - ('kernel_pca', None)], - transformer_weights=None) - -``` - -例子: - -* [Concatenating multiple feature extraction methods](../auto_examples/plot_feature_stacker.html#sphx-glr-auto-examples-plot-feature-stacker-py) -* [Feature Union with Heterogeneous Data Sources](../auto_examples/hetero_feature_union.html#sphx-glr-auto-examples-hetero-feature-union-py) \ No newline at end of file diff --git a/docs/0.19.x/58.md b/docs/0.19.x/58.md deleted file mode 100755 index cb25d88c3bfd60ffb2932426bbbe8d9bdb718177..0000000000000000000000000000000000000000 --- a/docs/0.19.x/58.md +++ /dev/null @@ -1,730 +0,0 @@ -# 4.2\. 特征提取 - -校验者: -        [@if only](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@片刻](https://github.com/apachecn/scikit-learn-doc-zh) - -模块 [`sklearn.feature_extraction`](classes.html#module-sklearn.feature_extraction "sklearn.feature_extraction") 可用于提取符合机器学习算法支持的特征,比如文本和图片。 - -Note - -特征特征提取与 特征选择 有很大的不同:前者包括将任意数据(如文本或图像)转换为可用于机器学习的数值特征。后者是将这些特征应用到机器学习中。 - -## 4.2.1\. 从字典类型加载特征 - -类 [`DictVectorizer`](generated/sklearn.feature_extraction.DictVectorizer.html#sklearn.feature_extraction.DictVectorizer "sklearn.feature_extraction.DictVectorizer") 可用于将标准的Python字典(dict)对象列表的要素数组转换为 scikit-learn 估计器使用的 NumPy/SciPy 表示形式。 - -虽然 Python 的处理速度不是特别快,但 Python 的 `dict` 优点是使用方便,稀疏(不需要存储的特征),并且除了值之外还存储特征名称。 - -类 [`DictVectorizer`](generated/sklearn.feature_extraction.DictVectorizer.html#sklearn.feature_extraction.DictVectorizer "sklearn.feature_extraction.DictVectorizer") 实现了 “one-of-K” 或 “one-hot” 编码,用于分类(也称为标称,离散)特征。分类功能是 “属性值” 对,其中该值被限制为不排序的可能性的离散列表(例如主题标识符,对象类型,标签,名称…)。 - -在下面的例子,”城市” 是一个分类属性,而 “温度” 是传统的数字特征: - -```py ->>> measurements = [ -... {'city': 'Dubai', 'temperature': 33.}, -... {'city': 'London', 'temperature': 12.}, -... {'city': 'San Francisco', 'temperature': 18.}, -... ] - ->>> from sklearn.feature_extraction import DictVectorizer ->>> vec = DictVectorizer() - ->>> vec.fit_transform(measurements).toarray() -array([[ 1., 0., 0., 33.], - [ 0., 1., 0., 12.], - [ 0., 0., 1., 18.]]) - ->>> vec.get_feature_names() -['city=Dubai', 'city=London', 'city=San Francisco', 'temperature'] - -``` - -类 [`DictVectorizer`](generated/sklearn.feature_extraction.DictVectorizer.html#sklearn.feature_extraction.DictVectorizer "sklearn.feature_extraction.DictVectorizer") 也是对自然语言处理模型中训练序列分类器的有用的表示变换,通常通过提取围绕感兴趣的特定的词的特征窗口来工作。 - -例如,假设我们具有提取我们想要用作训练序列分类器(例如:块)的互补标签的部分语音(PoS)标签的第一算法。以下 dict 可以是在 “坐在垫子上的猫” 的句子,围绕 “sat” 一词提取的这样一个特征窗口: - -```py ->>> pos_window = [ -... { -... 'word-2': 'the', -... 'pos-2': 'DT', -... 'word-1': 'cat', -... 'pos-1': 'NN', -... 'word+1': 'on', -... 'pos+1': 'PP', -... }, -... # in a real application one would extract many such dictionaries -... ] - -``` - -该描述可以被矢量化为适合于呈递分类器的稀疏二维矩阵(可能在被管道 [`text.TfidfTransformer`](generated/sklearn.feature_extraction.text.TfidfTransformer.html#sklearn.feature_extraction.text.TfidfTransformer "sklearn.feature_extraction.text.TfidfTransformer") 进行归一化之后): - -```py ->>> vec = DictVectorizer() ->>> pos_vectorized = vec.fit_transform(pos_window) ->>> pos_vectorized -<1x6 sparse matrix of type '<... 'numpy.float64'>' - with 6 stored elements in Compressed Sparse ... format> ->>> pos_vectorized.toarray() -array([[ 1., 1., 1., 1., 1., 1.]]) ->>> vec.get_feature_names() -['pos+1=PP', 'pos-1=NN', 'pos-2=DT', 'word+1=on', 'word-1=cat', 'word-2=the'] - -``` - -你可以想象,如果一个文本语料库的每一个单词都提取了这样一个上下文,那么所得的矩阵将会非常宽(许多 one-hot-features),其中大部分通常将会是0。 为了使结果数据结构能够适应内存,该类``DictVectorizer`` 的 `scipy.sparse` 默认使用一个矩阵而不是一个 `numpy.ndarray`。 - -## 4.2.2\. 特征哈希(相当于一种降维技巧) - -类 [`FeatureHasher`](generated/sklearn.feature_extraction.FeatureHasher.html#sklearn.feature_extraction.FeatureHasher "sklearn.feature_extraction.FeatureHasher") 是一种高速,低内存消耗的向量化方法,它使用了`特征散列 feature hashing <[https://en.wikipedia.org/wiki/Feature_hashing](https://en.wikipedia.org/wiki/Feature_hashing)>`_ 技术 ,或可称为 “散列法” (hashing trick)的技术。 代替在构建训练中遇到的特征的哈希表,如向量化所做的那样 [`FeatureHasher`](generated/sklearn.feature_extraction.FeatureHasher.html#sklearn.feature_extraction.FeatureHasher "sklearn.feature_extraction.FeatureHasher") 将哈希函数应用于特征,以便直接在样本矩阵中确定它们的列索引。 结果是以牺牲可检测性为代价,提高速度和减少内存的使用; 哈希表不记得输入特性是什么样的,没有 `inverse_transform` 办法。 - -由于散列函数可能导致(不相关)特征之间的冲突,因此使用带符号散列函数,并且散列值的符号确定存储在特征的输出矩阵中的值的符号。 这样,碰撞可能会抵消而不是累积错误,并且任何输出要素的值的预期平均值为零。默认情况下,此机制将使用 `alternate_sign=True` 启用,对于小型哈希表大小(`n_features < 10000`)特别有用。 对于大的哈希表大小,可以禁用它,以便将输出传递给估计器,如 [`sklearn.naive_bayes.MultinomialNB`](generated/sklearn.naive_bayes.MultinomialNB.html#sklearn.naive_bayes.MultinomialNB "sklearn.naive_bayes.MultinomialNB") 或 [`sklearn.feature_selection.chi2`](generated/sklearn.feature_selection.chi2.html#sklearn.feature_selection.chi2 "sklearn.feature_selection.chi2") 特征选择器,这些特征选项器可以使用非负输入。 - -类 [`FeatureHasher`](generated/sklearn.feature_extraction.FeatureHasher.html#sklearn.feature_extraction.FeatureHasher "sklearn.feature_extraction.FeatureHasher") 接受映射(如 Python 的 `dict` 及其在 `collections` 模块中的变体),使用键值对 `(feature, value)` 或字符串,具体取决于构造函数参数 `input_type`。 映射被视为 `(feature, value)` 对的列表,而单个字符串的隐含值为1,因此 `['feat1', 'feat2', 'feat3']` 被解释为 `[('feat1', 1), ('feat2', 1), ('feat3', 1)]`。 如果单个特征在样本中多次出现,相关值将被求和(所以 `('feat', 2)` 和 `('feat', 3.5)` 变为 `('feat', 5.5)`)。 [`FeatureHasher`](generated/sklearn.feature_extraction.FeatureHasher.html#sklearn.feature_extraction.FeatureHasher "sklearn.feature_extraction.FeatureHasher") 的输出始终是 CSR 格式的 `scipy.sparse` 矩阵。 - -特征散列可以在文档分类中使用,但与 [`text.CountVectorizer`](generated/sklearn.feature_extraction.text.CountVectorizer.html#sklearn.feature_extraction.text.CountVectorizer "sklearn.feature_extraction.text.CountVectorizer") 不同,[`FeatureHasher`](generated/sklearn.feature_extraction.FeatureHasher.html#sklearn.feature_extraction.FeatureHasher "sklearn.feature_extraction.FeatureHasher") 不执行除 Unicode 或 UTF-8 编码之外的任何其他预处理; 请参阅下面的哈希技巧向量化大文本语料库,用于组合的 tokenizer/hasher。 - -例如,有一个词级别的自然语言处理任务,需要从 `(token, part_of_speech)` 键值对中提取特征。可以使用 Python 生成器函数来提取功能: - -```py -def token_features(token, part_of_speech): - if token.isdigit(): - yield "numeric" - else: - yield "token={}".format(token.lower()) - yield "token,pos={},{}".format(token, part_of_speech) - if token[0].isupper(): - yield "uppercase_initial" - if token.isupper(): - yield "all_uppercase" - yield "pos={}".format(part_of_speech) - -``` - -然后, `raw_X` 为了可以传入 `FeatureHasher.transform` 可以通过如下方式构造: - -```py -raw_X = (token_features(tok, pos_tagger(tok)) for tok in corpus) - -``` - -并传入一个 hasher: - -```py -hasher = FeatureHasher(input_type='string') -X = hasher.transform(raw_X) - -``` - -得到一个 `scipy.sparse` 类型的矩阵 `X`。 - -注意使用发生器的理解,它将懒惰引入到特征提取中:词令牌(token)只能根据需要从哈希值进行处理。 - -### 4.2.2.1\. 实现细节 - -类 [`FeatureHasher`](generated/sklearn.feature_extraction.FeatureHasher.html#sklearn.feature_extraction.FeatureHasher "sklearn.feature_extraction.FeatureHasher") 使用签名的 32-bit 变体的 MurmurHash3。 因此导致(并且由于限制 `scipy.sparse`),当前支持的功能的最大数量 ![2^{31} - 1](img/7a79f764bd3db11876c1065b6677af80.jpg). - -特征哈希的原始形式源于Weinberger et al,使用两个单独的哈希函数,![h](img/c5f49595b56010ad04fce358940848e5.jpg) 和 ![\xi](img/638e0b526b8a69a226bc23950f6eeb3f.jpg) 分别确定特征的列索引和符号。 现有的实现是基于假设:MurmurHash3的符号位与其他位独立。 - -由于使用简单的模数将哈希函数转换为列索引,建议使用2次幂作为 `n_features` 参数; 否则特征不会均匀的分布到列中。 - -参考文献: Kilian Weinberger,Anirban Dasgupta,John Langford,Alex Smola和Josh Attenberg(2009)。用于大规模多任务学习的特征散列。PROC。ICML。 MurmurHash3。 - -参考文献: - -* Kilian Weinberger, Anirban Dasgupta, John Langford, Alex Smola and Josh Attenberg (2009). [用于大规模多任务学习的特征散列](http://alex.smola.org/papers/2009/Weinbergeretal09.pdf). Proc. ICML. -* [MurmurHash3](https://github.com/aappleby/smhasher). - -## 4.2.3\. 文本特征提取 - -### 4.2.3.1\. 话语表示 - -文本分析是机器学习算法的主要应用领域。 然而,原始数据,符号文字序列不能直接传递给算法,因为它们大多数要求具有固定长度的数字矩阵特征向量,而不是具有可变长度的原始文本文档。 - -为解决这个问题,scikit-learn提供了从文本内容中提取数字特征的最常见方法,即: - -* **令牌化(tokenizing)** 对每个可能的词令牌分成字符串并赋予整数形的id,例如通过使用空格和标点符号作为令牌分隔符。 -* **统计(counting)** 每个词令牌在文档中的出现次数。 -* **标准化(normalizing)** 在大多数的文档 / 样本中,可以减少重要的次令牌的出现次数的权重。。 - -在该方案中,特征和样本定义如下: - -* 每个**单独的令牌发生频率**(归一化或不归零)被视为一个**特征**。 -* 给定**文档**中所有的令牌频率向量被看做一个多元sample**样本**。 - -因此,文本的集合可被表示为矩阵形式,每行对应一条文本,每列对应每个文本中出现的词令牌(如单个词)。 - -我们称**向量化**是将文本文档集合转换为数字集合特征向量的普通方法。 这种特殊思想(令牌化,计数和归一化)被称为 **Bag of Words** 或 “Bag of n-grams” 模型。 文档由单词出现来描述,同时完全忽略文档中单词的相对位置信息。 - -### 4.2.3.2\. 稀疏 - -由于大多数文本文档通常只使用文本词向量全集中的一个小子集,所以得到的矩阵将具有许多特征值为零(通常大于99%)。 - -例如,10,000 个短文本文档(如电子邮件)的集合将使用总共100,000个独特词的大小的词汇,而每个文档将单独使用100到1000个独特的单词。 - -为了能够将这样的矩阵存储在存储器中,并且还可以加速代数的矩阵/向量运算,实现通常将使用诸如 `scipy.sparse` 包中的稀疏实现。 - -### 4.2.3.3\. 常见 Vectorizer 使用方法 - -类 [`CountVectorizer`](generated/sklearn.feature_extraction.text.CountVectorizer.html#sklearn.feature_extraction.text.CountVectorizer "sklearn.feature_extraction.text.CountVectorizer") 在单个类中实现了 tokenization (词语切分)和 occurrence counting (出现频数统计): - -```py ->>> from sklearn.feature_extraction.text import CountVectorizer - -``` - -这个模型有很多参数,但参数的默认初始值是相当合理的(请参阅 [参考文档](classes.html#text-feature-extraction-ref) 了解详细信息): - -```py ->>> vectorizer = CountVectorizer() ->>> vectorizer -CountVectorizer(analyzer=...'word', binary=False, decode_error=...'strict', - dtype=<... 'numpy.int64'>, encoding=...'utf-8', input=...'content', - lowercase=True, max_df=1.0, max_features=None, min_df=1, - ngram_range=(1, 1), preprocessor=None, stop_words=None, - strip_accents=None, token_pattern=...'(?u)\\b\\w\\w+\\b', - tokenizer=None, vocabulary=None) - -``` - -我们用它来对简约的文本语料库进行 tokenize(分词)和统计单词出现频数: - -```py ->>> corpus = [ -... 'This is the first document.', -... 'This is the second second document.', -... 'And the third one.', -... 'Is this the first document?', -... ] ->>> X = vectorizer.fit_transform(corpus) ->>> X -<4x9 sparse matrix of type '<... 'numpy.int64'>' - with 19 stored elements in Compressed Sparse ... format> - -``` - -默认配置通过提取至少 2 个字母的单词来对 string 进行分词。做这一步的函数可以显式地被调用: - -```py ->>> analyze = vectorizer.build_analyzer() ->>> analyze("This is a text document to analyze.") == ( -... ['this', 'is', 'text', 'document', 'to', 'analyze']) -True - -``` - -analyzer 在拟合过程中找到的每个 term(项)都会被分配一个唯一的整数索引,对应于 resulting matrix(结果矩阵)中的一列。此列的一些说明可以被检索如下: - -```py ->>> vectorizer.get_feature_names() == ( -... ['and', 'document', 'first', 'is', 'one', -... 'second', 'the', 'third', 'this']) -True - ->>> X.toarray() -array([[0, 1, 1, 1, 0, 0, 1, 0, 1], - [0, 1, 0, 1, 0, 2, 1, 0, 1], - [1, 0, 0, 0, 1, 0, 1, 1, 0], - [0, 1, 1, 1, 0, 0, 1, 0, 1]]...) - -``` - -从 feature 名称到 column index(列索引) 的逆映射存储在 `vocabulary_` 属性中: - -```py ->>> vectorizer.vocabulary_.get('document') -1 - -``` - -因此,在未来对 transform 方法的调用中,在 training corpus (训练语料库)中没有看到的单词将被完全忽略: - -```py ->>> vectorizer.transform(['Something completely new.']).toarray() -... -array([[0, 0, 0, 0, 0, 0, 0, 0, 0]]...) - -``` - -请注意,在前面的 corpus(语料库)中,第一个和最后一个文档具有完全相同的词,因为被编码成相同的向量。 特别是我们丢失了最后一个文件是一个疑问的形式的信息。为了防止词组顺序颠倒,除了提取一元模型 1-grams(个别词)之外,我们还可以提取 2-grams 的单词: - -```py ->>> bigram_vectorizer = CountVectorizer(ngram_range=(1, 2), -... token_pattern=r'\b\w+\b', min_df=1) ->>> analyze = bigram_vectorizer.build_analyzer() ->>> analyze('Bi-grams are cool!') == ( -... ['bi', 'grams', 'are', 'cool', 'bi grams', 'grams are', 'are cool']) -True - -``` - -由 vectorizer(向量化器)提取的 vocabulary(词汇)因此会变得更大,同时可以在定位模式时消除歧义: - -```py ->>> X_2 = bigram_vectorizer.fit_transform(corpus).toarray() ->>> X_2 -... -array([[0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0], - [0, 0, 1, 0, 0, 1, 1, 0, 0, 2, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0], - [1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0], - [0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1]]...) - -``` - -特别是 “Is this” 的疑问形式只出现在最后一个文档中: - -```py ->>> feature_index = bigram_vectorizer.vocabulary_.get('is this') ->>> X_2[:, feature_index] -array([0, 0, 0, 1]...) - -``` - -### 4.2.3.4\. Tf–idf 项加权 - -在一个大的文本语料库中,一些单词将出现很多次(例如 “the”, “a”, “is” 是英文),因此对文档的实际内容没有什么有意义的信息。 如果我们将直接计数数据直接提供给分类器,那么这些频繁词组会掩盖住那些我们关注但很少出现的词。 - -为了为了重新计算特征权重,并将其转化为适合分类器使用的浮点值,因此使用 tf-idf 变换是非常常见的。 - -Tf表示**术语频率**,而 tf-idf 表示术语频率乘以**转制文档频率**: ![\text{tf-idf(t,d)}=\text{tf(t,d)} \times \text{idf(t)}](img/4d831898e5c564ee2d4df9fa647a97ce.jpg). - -使用 `TfidfTransformer` 的默认设置,`TfidfTransformer(norm='l2', use_idf=True, smooth_idf=True, sublinear_tf=False)` 术语频率,一个术语在给定文档中出现的次数乘以 idf 组件, 计算为 - -![\text{idf}(t) = log{\frac{1 + n_d}{1+\text{df}(d,t)}} + 1](img/4bcd849c1a2c10ab9857df1dc223e175.jpg), - -其中 ![n_d](img/6d8a1d709ef804f4629126d6e1c449f1.jpg) 是文档的总数,![\text{df}(d,t)](img/ede6a26a443c24b8cea943a4a6f144f0.jpg) 是包含术语 ![t](img/12b2c1da1f9041738fa7153efc651372.jpg) 的文档数。 然后,所得到的 tf-idf 向量通过欧几里得范数归一化: - -![v_{norm} = \frac{v}{||v||_2} = \frac{v}{\sqrt{v{_1}^2 + v{_2}^2 + \dots + v{_n}^2}}](img/3a378bb516408c0bd771667be478b787.jpg). - -它源于一个词权重的信息检索方式(作为搜索引擎结果的评级函数),同时也在文档分类和聚类中表现良好。 - -以下部分包含进一步说明和示例,说明如何精确计算 tf-idfs 以及如何在 scikit-learn 中计算 tf-idfs, [`TfidfTransformer`](generated/sklearn.feature_extraction.text.TfidfTransformer.html#sklearn.feature_extraction.text.TfidfTransformer "sklearn.feature_extraction.text.TfidfTransformer") 并 [`TfidfVectorizer`](generated/sklearn.feature_extraction.text.TfidfVectorizer.html#sklearn.feature_extraction.text.TfidfVectorizer "sklearn.feature_extraction.text.TfidfVectorizer") 与定义 idf 的标准教科书符号略有不同 - -![\text{idf}(t) = log{\frac{n_d}{1+\text{df}(d,t)}}.](img/f19ea7e3ca675413d6ee0f2faff14b75.jpg) - -在 [`TfidfTransformer`](generated/sklearn.feature_extraction.text.TfidfTransformer.html#sklearn.feature_extraction.text.TfidfTransformer "sklearn.feature_extraction.text.TfidfTransformer") 和 [`TfidfVectorizer`](generated/sklearn.feature_extraction.text.TfidfVectorizer.html#sklearn.feature_extraction.text.TfidfVectorizer "sklearn.feature_extraction.text.TfidfVectorizer") 中 `smooth_idf=False`,将 “1” 计数添加到 idf 而不是 idf 的分母: - -![\text{idf}(t) = log{\frac{n_d}{\text{df}(d,t)}} + 1](img/3b87b19c6aee2b7c40b6ede968a45c07.jpg) - -该归一化由类 [`TfidfTransformer`](generated/sklearn.feature_extraction.text.TfidfTransformer.html#sklearn.feature_extraction.text.TfidfTransformer "sklearn.feature_extraction.text.TfidfTransformer") 实现: - -```py ->>> from sklearn.feature_extraction.text import TfidfTransformer ->>> transformer = TfidfTransformer(smooth_idf=False) ->>> transformer -TfidfTransformer(norm=...'l2', smooth_idf=False, sublinear_tf=False, - use_idf=True) - -``` - -有关所有参数的详细信息,请参阅 [参考文档](classes.html#text-feature-extraction-ref)。 - -让我们以下方的词频为例。第一个次在任何时间都是100%出现,因此不是很有重要。另外两个特征只占不到50%的比例,因此可能更具有代表性: - -```py ->>> counts = [[3, 0, 1], -... [2, 0, 0], -... [3, 0, 0], -... [4, 0, 0], -... [3, 2, 0], -... [3, 0, 2]] -... ->>> tfidf = transformer.fit_transform(counts) ->>> tfidf -<6x3 sparse matrix of type '<... 'numpy.float64'>' - with 9 stored elements in Compressed Sparse ... format> - ->>> tfidf.toarray() -array([[ 0.81940995, 0\. , 0.57320793], - [ 1\. , 0\. , 0\. ], - [ 1\. , 0\. , 0\. ], - [ 1\. , 0\. , 0\. ], - [ 0.47330339, 0.88089948, 0\. ], - [ 0.58149261, 0\. , 0.81355169]]) - -``` - -每行都被正则化,使其适应欧几里得标准: - -![v_{norm} = \frac{v}{||v||_2} = \frac{v}{\sqrt{v{_1}^2 + v{_2}^2 + \dots + v{_n}^2}}](img/3a378bb516408c0bd771667be478b787.jpg) - -例如,我们可以计算`计数`数组中第一个文档中第一个项的 tf-idf ,如下所示: - -![n_{d, {\text{term1}}} = 6](img/cd0c1a5b7ac7d76f9fe724cc7a723374.jpg) - -![\text{df}(d, t)_{\text{term1}} = 6](img/15a03cac7d4ab66fdf23e702ee75da2a.jpg) - -![\text{idf}(d, t)_{\text{term1}} = log \frac{n_d}{\text{df}(d, t)} + 1 = log(1)+1 = 1](img/b3ca25c4cc9cb42878f6fc39525b7446.jpg) - -![\text{tf-idf}_{\text{term1}} = \text{tf} \times \text{idf} = 3 \times 1 = 3](img/dde55f7a409ac46b5694e689c4b151f5.jpg) - -现在,如果我们对文档中剩下的2个术语重复这个计算,我们得到: - -![\text{tf-idf}_{\text{term2}} = 0 \times log(6/1)+1 = 0](img/10026a0d2a4dcca9387e58932c14f0e7.jpg) - -![\text{tf-idf}_{\text{term3}} = 1 \times log(6/2)+1 \approx 2.0986](img/9b85a5f7098321120773184b4673cbeb.jpg) - -和原始 tf-idfs 的向量: - -![\text{tf-idf}_raw = [3, 0, 2.0986].](img/fd785ede0569b8be0bea11bc8eecd583.jpg) - -然后,应用欧几里德(L2)规范,我们获得文档1的以下 tf-idfs: - -![\frac{[3, 0, 2.0986]}{\sqrt{\big(3^2 + 0^2 + 2.0986^2\big)}} = [ 0.819, 0, 0.573].](img/715cb9aaddb7a5ea10028eb49f509f61.jpg) - -此外,默认参数 `smooth_idf=True` 将 “1” 添加到分子和分母,就好像一个额外的文档被看到一样包含集合中的每个术语,这样可以避免零分割: - -![\text{idf}(t) = log{\frac{1 + n_d}{1+\text{df}(d,t)}} + 1](img/4bcd849c1a2c10ab9857df1dc223e175.jpg) - -使用此修改,文档1中第三项的 tf-idf 更改为 1.8473: - -![\text{tf-idf}_{\text{term3}} = 1 \times log(7/3)+1 \approx 1.8473](img/06731dd14500ea710a28370843818539.jpg) - -而 L2 标准化的 tf-idf 变为 - -![\frac{[3, 0, 1.8473]}{\sqrt{\big(3^2 + 0^2 + 1.8473^2\big)}} = [0.8515, 0, 0.5243]](img/1ddb602277c74f97c01c61af96da4a87.jpg): - -```py ->>> transformer = TfidfTransformer() ->>> transformer.fit_transform(counts).toarray() -array([[ 0.85151335, 0\. , 0.52433293], - [ 1\. , 0\. , 0\. ], - [ 1\. , 0\. , 0\. ], - [ 1\. , 0\. , 0\. ], - [ 0.55422893, 0.83236428, 0\. ], - [ 0.63035731, 0\. , 0.77630514]]) - -``` - -通过 `拟合` 方法调用计算的每个特征的权重存储在模型属性中: - -```py ->>> transformer.idf_ -array([ 1\. ..., 2.25..., 1.84...]) - -``` - -由于 tf-idf 经常用于文本特征,所以还有一个类 [`TfidfVectorizer`](generated/sklearn.feature_extraction.text.TfidfVectorizer.html#sklearn.feature_extraction.text.TfidfVectorizer "sklearn.feature_extraction.text.TfidfVectorizer") ,它将 [`CountVectorizer`](generated/sklearn.feature_extraction.text.CountVectorizer.html#sklearn.feature_extraction.text.CountVectorizer "sklearn.feature_extraction.text.CountVectorizer") 和 [`TfidfTransformer`](generated/sklearn.feature_extraction.text.TfidfTransformer.html#sklearn.feature_extraction.text.TfidfTransformer "sklearn.feature_extraction.text.TfidfTransformer") 的所有选项组合在一个单例模型中: - -```py ->>> from sklearn.feature_extraction.text import TfidfVectorizer ->>> vectorizer = TfidfVectorizer() ->>> vectorizer.fit_transform(corpus) -... -<4x9 sparse matrix of type '<... 'numpy.float64'>' - with 19 stored elements in Compressed Sparse ... format> - -``` - -虽然tf-idf标准化通常非常有用,但是可能有一种情况是二元变量显示会提供更好的特征。 这可以使用类 [`CountVectorizer`](generated/sklearn.feature_extraction.text.CountVectorizer.html#sklearn.feature_extraction.text.CountVectorizer "sklearn.feature_extraction.text.CountVectorizer") 的 `二进制` 参数来实现。 特别地,一些估计器,诸如 [伯努利朴素贝叶斯](naive_bayes.html#bernoulli-naive-bayes) 显式的使用离散的布尔随机变量。 而且,非常短的文本很可能影响 tf-idf 值,而二进制出现信息更稳定。 - -通常情况下,调整特征提取参数的最佳方法是使用基于网格搜索的交叉验证,例如通过将特征提取器与分类器进行流水线化: - -> * 用于文本特征提取和评估的样本管道 [Sample pipeline for text feature extraction and evaluation](../auto_examples/model_selection/grid_search_text_feature_extraction.html#sphx-glr-auto-examples-model-selection-grid-search-text-feature-extraction-py) - -### 4.2.3.5\. 解码文本文件 - -文本由字符组成,但文件由字节组成。字节转化成字符依照一定的编码(encoding)方式。 为了在Python中的使用文本文档,这些字节必须被 _解码_ 为 Unicode 的字符集。 常用的编码方式有 ASCII,Latin-1(西欧),KOI8-R(俄语)和通用编码 UTF-8 和 UTF-16。还有许多其他的编码存在 - -Note - -编码也可以称为 ‘字符集’, 但是这个术语不太准确: 单个字符集可能存在多个编码。 - -scikit-learn 中的文本提取器知道如何解码文本文件, 但只有当您告诉他们文件的编码的情况下才行, [`CountVectorizer`](generated/sklearn.feature_extraction.text.CountVectorizer.html#sklearn.feature_extraction.text.CountVectorizer "sklearn.feature_extraction.text.CountVectorizer") 才需要一个 `encoding` 参数。 对于现代文本文件,正确的编码可能是 UTF-8,因此它也是默认解码方式 (`encoding="utf-8"`). - -如果正在加载的文本不是使用UTF-8进行编码,则会得到 `UnicodeDecodeError`. 矢量化的方式可以通过设定 `decode_error` 参数设置为 `"ignore"` 或 `"replace"``来避免抛出解码错误。 有关详细信息,请参阅Python函数 ``bytes.decode` 的文档(在Python提示符下键入 `help(bytes.decode)` )。 - -如果您在解码文本时遇到问题,请尝试以下操作: - -* 了解文本的实际编码方式。该文件可能带有标题或 README,告诉您编码,或者可能有一些标准编码,您可以根据文本的来源来推断编码方式。 -* 您可能可以使用 UNIX 命令 `file` 找出它一般使用什么样的编码。 Python `chardet` 模块附带一个名为 `chardetect.py` 的脚本,它会猜测具体的编码,尽管你不能依靠它的猜测是正确的。 -* 你可以尝试 UTF-8 并忽略错误。您可以使用 `bytes.decode(errors='replace')` 对字节字符串进行解码,用无意义字符替换所有解码错误,或在向量化器中设置 `decode_error='replace'`. 这可能会损坏您的功能的有用性。 -* 真实文本可能来自各种使用不同编码的来源,或者甚至以与编码的编码不同的编码进行粗略解码。这在从 Web 检索的文本中是常见的。Python 包 [ftfy](https://github.com/LuminosoInsight/python-ftfy) 可以自动排序一些解码错误类,所以您可以尝试将未知文本解码为 `latin-1`,然后使用 `ftfy` 修复错误。 -* 如果文本的编码的混合,那么它很难整理分类(20个新闻组数据集的情况),您可以把它们回到简单的单字节编码,如 `latin-1`。某些文本可能显示不正确,但至少相同的字节序列将始终代表相同的功能。 - -例如,以下代码段使用 `chardet` (未附带 scikit-learn,必须单独安装)来计算出编码方式。然后,它将文本向量化并打印学习的词汇(特征)。输出在下方给出。 - -```py ->>> import chardet ->>> text1 = b"Sei mir gegr\xc3\xbc\xc3\x9ft mein Sauerkraut" ->>> text2 = b"holdselig sind deine Ger\xfcche" ->>> text3 = b"\xff\xfeA\x00u\x00f\x00 \x00F\x00l\x00\xfc\x00g\x00e\x00l\x00n\x00 \x00d\x00e\x00s\x00 \x00G\x00e\x00s\x00a\x00n\x00g\x00e\x00s\x00,\x00 \x00H\x00e\x00r\x00z\x00l\x00i\x00e\x00b\x00c\x00h\x00e\x00n\x00,\x00 \x00t\x00r\x00a\x00g\x00 \x00i\x00c\x00h\x00 \x00d\x00i\x00c\x00h\x00 \x00f\x00o\x00r\x00t\x00" ->>> decoded = [x.decode(chardet.detect(x)['encoding']) -... for x in (text1, text2, text3)] ->>> v = CountVectorizer().fit(decoded).vocabulary_ ->>> for term in v: print(v) - -``` - -(根据 `chardet` 的版本,可能会返回第一个值错误的结果。) 有关 Unicode 和字符编码的一般介绍,请参阅Joel Spolsky的 [绝对最小每个软件开发人员必须了解 Unicode](http://www.joelonsoftware.com/articles/Unicode.html). - -### 4.2.3.6\. 应用和实例 - -词汇表达方式相当简单,但在实践中却非常有用。 - -特别是在 **监督学习的设置** 中,它能够把快速和可扩展的线性模型组合来训练 **文档分类器**, 例如: - -> * 使用稀疏特征对文本文档进行分类 [Classification of text documents using sparse features](../auto_examples/text/document_classification_20newsgroups.html#sphx-glr-auto-examples-text-document-classification-20newsgroups-py) - -在 **无监督的设置** 中,可以通过应用诸如 [K-means](clustering.html#k-means) 的聚类算法来将相似文档分组在一起: - -> * 使用k-means聚类文本文档 [Clustering text documents using k-means](../auto_examples/text/document_clustering.html#sphx-glr-auto-examples-text-document-clustering-py) - -最后,通过松弛聚类的约束条件,可以通过使用非负矩阵分解( [非负矩阵分解(NMF 或 NNMF)](decomposition.html#nmf) 或NNMF)来发现语料库的主要主题: - -> * 主题提取与非负矩阵分解和潜在Dirichlet分配 [Topic extraction with Non-negative Matrix Factorization and Latent Dirichlet Allocation](../auto_examples/applications/plot_topics_extraction_with_nmf_lda.html#sphx-glr-auto-examples-applications-plot-topics-extraction-with-nmf-lda-py) - -### 4.2.3.7\. 词语表示的限制 - -一组单词(什么是单词)无法捕获短语和多字表达,有效地忽略任何单词顺序依赖。另外,这个单词模型不包含潜在的拼写错误或词汇导出。 - -N克抢救!而不是构建一个简单的unigrams集合 (n=1),可能更喜欢一组二进制 (n=2),其中计算连续字对。 - -还可以考虑一个字符 n-gram 的集合,这是一种对拼写错误和派生有弹性的表示。 - -例如,假设我们正在处理两个文档的语料库: `['words', 'wprds']`. 第二个文件包含 ‘words’ 一词的拼写错误。 一个简单的单词表示将把这两个视为非常不同的文档,两个可能的特征都是不同的。 然而,一个字符 2-gram 的表示可以找到匹配的文档中的8个特征中的4个,这可能有助于优选的分类器更好地决定: - -```py ->>> ngram_vectorizer = CountVectorizer(analyzer='char_wb', ngram_range=(2, 2)) ->>> counts = ngram_vectorizer.fit_transform(['words', 'wprds']) ->>> ngram_vectorizer.get_feature_names() == ( -... [' w', 'ds', 'or', 'pr', 'rd', 's ', 'wo', 'wp']) -True ->>> counts.toarray().astype(int) -array([[1, 1, 1, 0, 1, 1, 1, 0], - [1, 1, 0, 1, 1, 1, 0, 1]]) - -``` - -在上面的例子中,使用 `'char_wb` 分析器’,它只能从字边界内的字符(每侧填充空格)创建 n-gram。 `'char'` 分析器可以创建跨越单词的 n-gram: - -```py ->>> ngram_vectorizer = CountVectorizer(analyzer='char_wb', ngram_range=(5, 5)) ->>> ngram_vectorizer.fit_transform(['jumpy fox']) -... -<1x4 sparse matrix of type '<... 'numpy.int64'>' - with 4 stored elements in Compressed Sparse ... format> ->>> ngram_vectorizer.get_feature_names() == ( -... [' fox ', ' jump', 'jumpy', 'umpy ']) -True - ->>> ngram_vectorizer = CountVectorizer(analyzer='char', ngram_range=(5, 5)) ->>> ngram_vectorizer.fit_transform(['jumpy fox']) -... -<1x5 sparse matrix of type '<... 'numpy.int64'>' - with 5 stored elements in Compressed Sparse ... format> ->>> ngram_vectorizer.get_feature_names() == ( -... ['jumpy', 'mpy f', 'py fo', 'umpy ', 'y fox']) -True - -``` - -对于使用白色空格进行单词分离的语言,对于语言边界感知变体 `char_wb` 尤其有趣,因为在这种情况下,它会产生比原始 `char` 变体显着更少的噪音特征。 对于这样的语言,它可以增加使用这些特征训练的分类器的预测精度和收敛速度,同时保持关于拼写错误和词导出的稳健性。 - -虽然可以通过提取 n-gram 而不是单独的单词来保存一些本地定位信息,但是包含 n-gram 的单词和袋子可以破坏文档的大部分内部结构,因此破坏了该内部结构的大部分含义。 - -为了处理自然语言理解的更广泛的任务,因此应考虑到句子和段落的地方结构。因此,许多这样的模型将被称为 “结构化输出” 问题,这些问题目前不在 scikit-learn 的范围之内。 - -### 4.2.3.8\. 用哈希技巧矢量化大文本语料库 - -上述向量化方案是简单的,但是它存在 **从字符串令牌到整数特征索引的内存映射** ( `vocabulary_` 属性),在处理 **大型数据集时会引起几个问题** : - -* 语料库越大,词汇量越大,使用的内存也越大. -* 拟合(fitting)需要根据原始数据集的大小等比例分配中间数据结构的大小. -* 构建词映射需要完整的传递数据集,因此不可能以严格在线的方式拟合文本分类器. -* pickling和un-pickling vocabulary 很大的向量器会非常慢(通常比pickling/un-pickling单纯数据的结构,比如同等大小的Numpy数组). -* 将向量化任务分隔成并行的子任务很不容易实现,因为 `vocabulary_` 属性要共享状态有一个细颗粒度的同步障碍:从标记字符串中映射特征索引与每个标记的首次出现顺序是独立的,因此应该被共享,在这点上并行worker的性能收到了损害,使他们比串行更慢。 - -通过组合由 [`sklearn.feature_extraction.FeatureHasher`](generated/sklearn.feature_extraction.FeatureHasher.html#sklearn.feature_extraction.FeatureHasher "sklearn.feature_extraction.FeatureHasher") 类实现的 “散列技巧” ([特征哈希(相当于一种降维技巧)](#feature-hashing)) 和 [`CountVectorizer`](generated/sklearn.feature_extraction.text.CountVectorizer.html#sklearn.feature_extraction.text.CountVectorizer "sklearn.feature_extraction.text.CountVectorizer") 的文本预处理和标记化功能,可以克服这些限制。 - -这种组合是在 [`HashingVectorizer`](generated/sklearn.feature_extraction.text.HashingVectorizer.html#sklearn.feature_extraction.text.HashingVectorizer "sklearn.feature_extraction.text.HashingVectorizer") 中实现的,该类是与 [`CountVectorizer`](generated/sklearn.feature_extraction.text.CountVectorizer.html#sklearn.feature_extraction.text.CountVectorizer "sklearn.feature_extraction.text.CountVectorizer") 大部分 API 兼容的变压器类。 [`HashingVectorizer`](generated/sklearn.feature_extraction.text.HashingVectorizer.html#sklearn.feature_extraction.text.HashingVectorizer "sklearn.feature_extraction.text.HashingVectorizer") 是无状态的,这意味着您不需要 `fit` 它: - -```py ->>> from sklearn.feature_extraction.text import HashingVectorizer ->>> hv = HashingVectorizer(n_features=10) ->>> hv.transform(corpus) -... -<4x10 sparse matrix of type '<... 'numpy.float64'>' - with 16 stored elements in Compressed Sparse ... format> - -``` - -你可以看到从向量输出中抽取了16个非0特征标记:与之前由CountVectorizer在同一个样本语料库抽取的19个非0特征要少。差异来自哈希方法的冲突,因为较低的n_features参数的值。 - -在真实世界的环境下,n_features参数可以使用默认值2 ** 20(将近100万可能的特征)。如果内存或者下游模型的大小是一个问题,那么选择一个较小的值比如2 ** 18可能有一些帮助,而不需要为典型的文本分类任务引入太多额外的冲突。 - -注意维度并不影响CPU的算法训练时间,这部分是在操作CSR指标(LinearSVC(dual=True), Perceptron, SGDClassifier, PassiveAggressive),但是,它对CSC matrices (LinearSVC(dual=False), Lasso(), etc)算法有效。 - -让我们再次尝试使用默认设置: - -```py ->>> hv = HashingVectorizer() ->>> hv.transform(corpus) -... -<4x1048576 sparse matrix of type '<... 'numpy.float64'>' - with 19 stored elements in Compressed Sparse ... format> - -``` - -冲突没有再出现,但是,代价是输出空间的维度值非常大。当然,这里使用的19词以外的其他词之前仍会有冲突。 - -类 [`HashingVectorizer`](generated/sklearn.feature_extraction.text.HashingVectorizer.html#sklearn.feature_extraction.text.HashingVectorizer "sklearn.feature_extraction.text.HashingVectorizer") 还具有以下限制: - -* 不能反转模型(没有inverse_transform方法),也无法访问原始的字符串表征,因为,进行mapping的哈希方法是单向本性。 -* 没有提供了IDF权重,因为这需要在模型中引入状态。如果需要的话,可以在管道中添加 [`TfidfTransformer`](generated/sklearn.feature_extraction.text.TfidfTransformer.html#sklearn.feature_extraction.text.TfidfTransformer "sklearn.feature_extraction.text.TfidfTransformer") 。 - -### 4.2.3.9\. 使用 HashingVectorizer 执行外核缩放 - -使用 [`HashingVectorizer`](generated/sklearn.feature_extraction.text.HashingVectorizer.html#sklearn.feature_extraction.text.HashingVectorizer "sklearn.feature_extraction.text.HashingVectorizer") 的一个有趣的开发是执行外核 [out-of-core](https://en.wikipedia.org/wiki/Out-of-core_algorithm) 缩放的能力。 这意味着我们可以从无法放入电脑主内存的数据中进行学习。 - -实现核外扩展的一个策略是将数据以流的方式以一小批提交给评估器。每批的向量化都是用HashingVectorizer这样来保证评估器的输入空间的维度是相等的。因此任何时间使用的内存数都限定在小频次的大小。 尽管用这种方法可以处理的数据没有限制,但是从实用角度学习时间受到想要在这个任务上花费的CPU时间的限制。 - -对于文本分类任务中的外核缩放的完整示例,请参阅文本文档的外核分类 [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). - -### 4.2.3.10\. 自定义矢量化器类 - -通过将可调用传递给向量化程序构造函数可以定制行为: - -```py ->>> def my_tokenizer(s): -... return s.split() -... ->>> vectorizer = CountVectorizer(tokenizer=my_tokenizer) ->>> vectorizer.build_analyzer()(u"Some... punctuation!") == ( -... ['some...', 'punctuation!']) -True - -``` - -特别是我们命名: - -> * `预处理器`: 可以将整个文档作为输入(作为单个字符串)的可调用,并返回文档的可能转换的版本,仍然是整个字符串。这可以用于删除HTML标签,小写整个文档等。 -> * `tokenizer`: 一个可从预处理器接收输出并将其分成标记的可调用函数,然后返回这些列表。 -> * `分析器`: 一个可替代预处理程序和标记器的可调用程序。默认分析仪都会调用预处理器和刻录机,但是自定义分析仪将会跳过这个。 N-gram提取和停止字过滤在分析器级进行,因此定制分析器可能必须重现这些步骤。 - -(Lucene 用户可能会识别这些名称,但请注意,scikit-learn 概念可能无法一对一映射到 Lucene 概念上。) - -为了使预处理器,标记器和分析器了解模型参数,可以从类派生并覆盖 `build_preprocessor`, `build_tokenizer`` 和 `build_analyzer` 工厂方法,而不是传递自定义函数。 - -一些提示和技巧: - -> * 如果文档由外部包进行预先标记,则将它们存储在文件(或字符串)中,令牌由空格分隔,并通过 `analyzer=str.split` -> * Fancy 令牌级分析,如词干,词法,复合分割,基于词性的过滤等不包括在 scikit-learn 代码库中,但可以通过定制分词器或分析器来添加。 -> -> 这是一个 `CountVectorizer`, 使用 [NLTK](http://www.nltk.org) 的 tokenizer 和 lemmatizer: -> -> ```py -> >>> from nltk import word_tokenize # doctest: +SKIP -> >>> from nltk.stem import WordNetLemmatizer # doctest: +SKIP -> >>> class LemmaTokenizer(object): -> ... def __init__(self): -> ... self.wnl = WordNetLemmatizer() -> ... def __call__(self, doc): -> ... return [self.wnl.lemmatize(t) for t in word_tokenize(doc)] -> ... -> >>> vect = CountVectorizer(tokenizer=LemmaTokenizer()) # doctest: +SKIP -> -> (请注意,这不会过滤标点符号。) -> 例如,以下例子将英国的一些拼写变成美国拼写:: -> -> >>> import re -> >>> def to_british(tokens): -> ... for t in tokens: -> ... t = re.sub(r"(...)our$", r"\1or", t) -> ... t = re.sub(r"([bt])re$", r"\1er", t) -> ... t = re.sub(r"([iy])s(e$|ing|ation)", r"\1z\2", t) -> ... t = re.sub(r"ogue$", "og", t) -> ... yield t -> ... -> >>> class CustomVectorizer(CountVectorizer): -> ... def build_tokenizer(self): -> ... tokenize = super(CustomVectorizer, self).build_tokenizer() -> ... return lambda doc: list(to_british(tokenize(doc))) -> ... -> >>> print(CustomVectorizer().build_analyzer()(u"color colour")) # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS -> [...'color', ...'color'] -> -> 用于其他样式的预处理; 例子包括 stemming, lemmatization, 或 normalizing numerical tokens, 后者说明如下: -> -> * :ref:`sphx_glr_auto_examples_bicluster_plot_bicluster_newsgroups.py` -> -> ``` - -在处理不使用显式字分隔符(例如空格)的亚洲语言时,自定义向量化器也是有用的。 - -## 4.2.4\. 图像特征提取 - -### 4.2.4.1\. 补丁提取 - -[`extract_patches_2d`](generated/sklearn.feature_extraction.image.extract_patches_2d.html#sklearn.feature_extraction.image.extract_patches_2d "sklearn.feature_extraction.image.extract_patches_2d") 函数从存储为二维数组的图像或沿着第三轴的颜色信息三维提取修补程序。 要从其所有补丁重建图像,请使用 [`reconstruct_from_patches_2d`](generated/sklearn.feature_extraction.image.reconstruct_from_patches_2d.html#sklearn.feature_extraction.image.reconstruct_from_patches_2d "sklearn.feature_extraction.image.reconstruct_from_patches_2d"). 例如让我们使用3个彩色通道(例如 RGB 格式)生成一个 4x4 像素的图像: - -```py ->>> import numpy as np ->>> from sklearn.feature_extraction import image - ->>> one_image = np.arange(4 * 4 * 3).reshape((4, 4, 3)) ->>> one_image[:, :, 0] # R channel of a fake RGB picture -array([[ 0, 3, 6, 9], - [12, 15, 18, 21], - [24, 27, 30, 33], - [36, 39, 42, 45]]) - ->>> patches = image.extract_patches_2d(one_image, (2, 2), max_patches=2, -... random_state=0) ->>> patches.shape -(2, 2, 2, 3) ->>> patches[:, :, :, 0] -array([[[ 0, 3], - [12, 15]], - - [[15, 18], - [27, 30]]]) ->>> patches = image.extract_patches_2d(one_image, (2, 2)) ->>> patches.shape -(9, 2, 2, 3) ->>> patches[4, :, :, 0] -array([[15, 18], - [27, 30]]) - -``` - -现在让我们尝试通过在重叠区域进行平均来从补丁重建原始图像: - -```py ->>> reconstructed = image.reconstruct_from_patches_2d(patches, (4, 4, 3)) ->>> np.testing.assert_array_equal(one_image, reconstructed) - -``` - -在 [`PatchExtractor`](generated/sklearn.feature_extraction.image.PatchExtractor.html#sklearn.feature_extraction.image.PatchExtractor "sklearn.feature_extraction.image.PatchExtractor") 以同样的方式类作品 [`extract_patches_2d`](generated/sklearn.feature_extraction.image.extract_patches_2d.html#sklearn.feature_extraction.image.extract_patches_2d "sklearn.feature_extraction.image.extract_patches_2d"), 只是它支持多种图像作为输入。它被实现为一个估计器,因此它可以在管道中使用。看到: - -```py ->>> five_images = np.arange(5 * 4 * 4 * 3).reshape(5, 4, 4, 3) ->>> patches = image.PatchExtractor((2, 2)).transform(five_images) ->>> patches.shape -(45, 2, 2, 3) - -``` - -### 4.2.4.2\. 图像的连接图 - -scikit-learn 中的几个估计可以使用特征或样本之间的连接信息。 例如,Ward聚类(层次聚类 [层次聚类](clustering.html#hierarchical-clustering) )可以聚集在一起,只有图像的相邻像素,从而形成连续的斑块: - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_face_ward_segmentation_0011.png](img/6ade66280d509fe54883d82b315259e1.jpg)](../auto_examples/cluster/plot_face_ward_segmentation.html) - -为此,估计器使用 ‘连接性’ 矩阵,给出连接的样本。 - -该函数 [`img_to_graph`](generated/sklearn.feature_extraction.image.img_to_graph.html#sklearn.feature_extraction.image.img_to_graph "sklearn.feature_extraction.image.img_to_graph") 从2D或3D图像返回这样一个矩阵。类似地,[`grid_to_graph`](generated/sklearn.feature_extraction.image.grid_to_graph.html#sklearn.feature_extraction.image.grid_to_graph "sklearn.feature_extraction.image.grid_to_graph") 为给定这些图像的形状的图像构建连接矩阵。 - -这些矩阵可用于在使用连接信息的估计器中强加连接,如 Ward 聚类(层次聚类 [层次聚类](clustering.html#hierarchical-clustering) ),而且还要构建预计算的内核或相似矩阵。 - -Note - -**示例** - -* [A demo of structured Ward hierarchical clustering on a raccoon face image](../auto_examples/cluster/plot_face_ward_segmentation.html#sphx-glr-auto-examples-cluster-plot-face-ward-segmentation-py) -* [Spectral clustering for image segmentation](../auto_examples/cluster/plot_segmentation_toy.html#sphx-glr-auto-examples-cluster-plot-segmentation-toy-py) -* [Feature agglomeration vs. univariate selection](../auto_examples/cluster/plot_feature_agglomeration_vs_univariate_selection.html#sphx-glr-auto-examples-cluster-plot-feature-agglomeration-vs-univariate-selection-py) \ No newline at end of file diff --git a/docs/0.19.x/59.md b/docs/0.19.x/59.md deleted file mode 100755 index 5b3e1128c6e6d05dc483585ae9a6e557bc4b1d68..0000000000000000000000000000000000000000 --- a/docs/0.19.x/59.md +++ /dev/null @@ -1,482 +0,0 @@ -# 4.3\. 预处理数据 - -校验者: -        [@if only](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@Trembleguy](https://github.com/apachecn/scikit-learn-doc-zh) - -`sklearn.preprocessing` 包提供了几个常见的实用功能和变换器类型,用来将原始特征向量更改为更适合机器学习模型的形式。 - -一般来说,机器学习算法受益于数据集的标准化。如果数据集中存在一些离群值,那么稳定的缩放或转换更合适。不同缩放、转换以及归一在一个包含边缘离群值的数据集中的表现在 [Compare the effect of different scalers on data with outliers](../auto_examples/preprocessing/plot_all_scaling.html#sphx-glr-auto-examples-preprocessing-plot-all-scaling-py) 中有着重说明。 - -## 4.3.1\. 标准化,也称去均值和方差按比例缩放 - -数据集的 **标准化** 对scikit-learn中实现的大多数机器学习算法来说是 **常见的要求** 。如果个别特征或多或少看起来不是很像标准正态分布(**具有零均值和单位方差**),那么它们的表现力可能会较差。 - -在实际情况中,我们经常忽略特征的分布形状,直接经过去均值来对某个特征进行中心化,再通过除以非常量特征(non-constant features)的标准差进行缩放。 - -例如,在机器学习算法的目标函数(例如SVM的RBF内核或线性模型的l1和l2正则化),许多学习算法中目标函数的基础都是假设所有的特征都是零均值并且具有同一阶数上的方差。如果某个特征的方差比其他特征大几个数量级,那么它就会在学习算法中占据主导位置,导致学习器并不能像我们说期望的那样,从其他特征中学习。 - -函数 [`scale`](generated/sklearn.preprocessing.scale.html#sklearn.preprocessing.scale "sklearn.preprocessing.scale") 为数组形状的数据集的标准化提供了一个快捷实现: - -```py ->>> from sklearn import preprocessing ->>> import numpy as np ->>> X_train = np.array([[ 1., -1., 2.], -... [ 2., 0., 0.], -... [ 0., 1., -1.]]) ->>> X_scaled = preprocessing.scale(X_train) - ->>> X_scaled -array([[ 0\. ..., -1.22..., 1.33...], - [ 1.22..., 0\. ..., -0.26...], - [-1.22..., 1.22..., -1.06...]]) - -``` - -经过缩放后的数据具有零均值以及标准方差: - -```py ->>> X_scaled.mean(axis=0) -array([ 0., 0., 0.]) - ->>> X_scaled.std(axis=0) -array([ 1., 1., 1.]) - -``` - -`预处理` 模块还提供了一个实用类 [`StandardScaler`](generated/sklearn.preprocessing.StandardScaler.html#sklearn.preprocessing.StandardScaler "sklearn.preprocessing.StandardScaler") ,它实现了转化器的API来计算训练集上的平均值和标准偏差,以便以后能够在测试集上重新应用相同的变换。因此,这个类适用于 [`sklearn.pipeline.Pipeline`](generated/sklearn.pipeline.Pipeline.html#sklearn.pipeline.Pipeline "sklearn.pipeline.Pipeline") 的早期步骤: - -```py ->>> scaler = preprocessing.StandardScaler().fit(X_train) ->>> scaler -StandardScaler(copy=True, with_mean=True, with_std=True) - ->>> scaler.mean_ -array([ 1\. ..., 0\. ..., 0.33...]) - ->>> scaler.scale_ -array([ 0.81..., 0.81..., 1.24...]) - ->>> scaler.transform(X_train) -array([[ 0\. ..., -1.22..., 1.33...], - [ 1.22..., 0\. ..., -0.26...], - [-1.22..., 1.22..., -1.06...]]) - -``` - -缩放类对象可以在新的数据上实现和训练集相同缩放操作: - -```py ->>> X_test = [[-1., 1., 0.]] ->>> scaler.transform(X_test) -array([[-2.44..., 1.22..., -0.26...]]) - -``` - -你也可以通过在构造函数 :class:StandardScaler 中传入参数 `with_mean=False` 或者``with_std=False` 来取消中心化或缩放操作。 - -### 4.3.1.1\. 将特征缩放至特定范围内 - -一种标准化是将特征缩放到给定的最小值和最大值之间,通常在零和一之间,或者也可以将每个特征的最大绝对值转换至单位大小。可以分别使用 [`MinMaxScaler`](generated/sklearn.preprocessing.MinMaxScaler.html#sklearn.preprocessing.MinMaxScaler "sklearn.preprocessing.MinMaxScaler") 和 [`MaxAbsScaler`](generated/sklearn.preprocessing.MaxAbsScaler.html#sklearn.preprocessing.MaxAbsScaler "sklearn.preprocessing.MaxAbsScaler") 实现。 - -使用这种缩放的目的包括实现特征极小方差的鲁棒性以及在稀疏矩阵中保留零元素。 - -以下是一个将简单的数据矩阵缩放到``[0, 1]``的例子: - -```py ->>> X_train = np.array([[ 1., -1., 2.], -... [ 2., 0., 0.], -... [ 0., 1., -1.]]) -... ->>> min_max_scaler = preprocessing.MinMaxScaler() ->>> X_train_minmax = min_max_scaler.fit_transform(X_train) ->>> X_train_minmax -array([[ 0.5 , 0\. , 1\. ], - [ 1\. , 0.5 , 0.33333333], - [ 0\. , 1\. , 0\. ]]) - -``` - -同样的转换实例可以被用与在训练过程中不可见的测试数据:实现和训练数据一致的缩放和移位操作: - -```py ->>> X_test = np.array([[ -3., -1., 4.]]) ->>> X_test_minmax = min_max_scaler.transform(X_test) ->>> X_test_minmax -array([[-1.5 , 0\. , 1.66666667]]) - -``` - -可以检查缩放器(scaler)属性,来观察在训练集中学习到的转换操作的基本性质: - -```py ->>> min_max_scaler.scale_ -array([ 0.5 , 0.5 , 0.33...]) - ->>> min_max_scaler.min_ -array([ 0\. , 0.5 , 0.33...]) - -``` - -如果给 [`MinMaxScaler`](generated/sklearn.preprocessing.MinMaxScaler.html#sklearn.preprocessing.MinMaxScaler "sklearn.preprocessing.MinMaxScaler") 提供一个明确的 `feature_range=(min, max)` ,完整的公式是: - -```py -X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0)) - -X_scaled = X_std * (max - min) + min - -``` - -类 [`MaxAbsScaler`](generated/sklearn.preprocessing.MaxAbsScaler.html#sklearn.preprocessing.MaxAbsScaler "sklearn.preprocessing.MaxAbsScaler") 的工作原理非常相似,但是它只通过除以每个特征的最大值将训练数据特征缩放至 `[-1, 1]` 范围内,这就意味着,训练数据应该是已经零中心化或者是稀疏数据。 例子::用先前例子的数据实现最大绝对值缩放操作。 - -以下是使用上例中数据运用这个缩放器的例子: - -```py ->>> X_train = np.array([[ 1., -1., 2.], -... [ 2., 0., 0.], -... [ 0., 1., -1.]]) -... ->>> max_abs_scaler = preprocessing.MaxAbsScaler() ->>> X_train_maxabs = max_abs_scaler.fit_transform(X_train) ->>> X_train_maxabs # doctest +NORMALIZE_WHITESPACE^ -array([[ 0.5, -1\. , 1\. ], - [ 1\. , 0\. , 0\. ], - [ 0\. , 1\. , -0.5]]) ->>> X_test = np.array([[ -3., -1., 4.]]) ->>> X_test_maxabs = max_abs_scaler.transform(X_test) ->>> X_test_maxabs -array([[-1.5, -1\. , 2\. ]]) ->>> max_abs_scaler.scale_ -array([ 2., 1., 2.]) - -``` - -在 [`scale`](generated/sklearn.preprocessing.scale.html#sklearn.preprocessing.scale "sklearn.preprocessing.scale") 模块中进一步提供了方便的功能。当你不想创建对象时,可以使用如 [`minmax_scale`](generated/sklearn.preprocessing.minmax_scale.html#sklearn.preprocessing.minmax_scale "sklearn.preprocessing.minmax_scale") 以及 [`maxabs_scale`](generated/sklearn.preprocessing.maxabs_scale.html#sklearn.preprocessing.maxabs_scale "sklearn.preprocessing.maxabs_scale") 。 - -### 4.3.1.2\. 缩放稀疏(矩阵)数据 - -中心化稀疏(矩阵)数据会破坏数据的稀疏结构,因此很少有一个比较明智的实现方式。但是缩放稀疏输入是有意义的,尤其是当几个特征在不同的量级范围时。 - -[`MaxAbsScaler`](generated/sklearn.preprocessing.MaxAbsScaler.html#sklearn.preprocessing.MaxAbsScaler "sklearn.preprocessing.MaxAbsScaler") 以及 [`maxabs_scale`](generated/sklearn.preprocessing.maxabs_scale.html#sklearn.preprocessing.maxabs_scale "sklearn.preprocessing.maxabs_scale") 是专为缩放数据而设计的,并且是缩放数据的推荐方法。但是, [`scale`](generated/sklearn.preprocessing.scale.html#sklearn.preprocessing.scale "sklearn.preprocessing.scale") 和 [`StandardScaler`](generated/sklearn.preprocessing.StandardScaler.html#sklearn.preprocessing.StandardScaler "sklearn.preprocessing.StandardScaler") 也能够接受 `scipy.sparse` 作为输入,只要参数 `with_mean=False` 被准确传入它的构造器。否则会出现 `ValueError` 的错误,因为默认的中心化会破坏稀疏性,并且经常会因为分配过多的内存而使执行崩溃。 [`RobustScaler`](generated/sklearn.preprocessing.RobustScaler.html#sklearn.preprocessing.RobustScaler "sklearn.preprocessing.RobustScaler") 不能适应稀疏输入,但你可以在稀疏输入使用 `transform` 方法。 - -注意,缩放器同时接受压缩的稀疏行和稀疏列(参见 `scipy.sparse.csr_matrix` 以及 `scipy.sparse.csc_matrix` )。任何其他稀疏输入将会 **转化为压缩稀疏行表示** 。为了避免不必要的内存复制,建议在上游(早期)选择CSR或CSC表示。 - -最后,最后,如果已经中心化的数据并不是很大,使用 `toarray` 方法将输入的稀疏矩阵显式转换为数组是另一种选择。 - -### 4.3.1.3\. 缩放有离群值的数据 - -如果你的数据包含许多异常值,使用均值和方差缩放可能并不是一个很好的选择。这种情况下,你可以使用 [`robust_scale`](generated/sklearn.preprocessing.robust_scale.html#sklearn.preprocessing.robust_scale "sklearn.preprocessing.robust_scale") 以及 [`RobustScaler`](generated/sklearn.preprocessing.RobustScaler.html#sklearn.preprocessing.RobustScaler "sklearn.preprocessing.RobustScaler") 作为替代品。它们对你的数据的中心和范围使用更有鲁棒性的估计。 - -参考: - -更多关于中心化和缩放数据的重要性讨论在此FAQ中提及: [Should I normalize/standardize/rescale the data?](http://www.faqs.org/faqs/ai-faq/neural-nets/part2/section-16.html) - -Scaling vs Whitening 有时候独立地中心化和缩放数据是不够的,因为下游的机器学习模型能够对特征之间的线性依赖做出一些假设(这对模型的学习过程来说是不利的)。 - -要解决这个问题,你可以使用 [`sklearn.decomposition.PCA`](generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA "sklearn.decomposition.PCA") 或 [`sklearn.decomposition.RandomizedPCA`](generated/sklearn.decomposition.RandomizedPCA.html#sklearn.decomposition.RandomizedPCA "sklearn.decomposition.RandomizedPCA") 并指定参数 `whiten=True` 来更多移除特征间的线性关联。 - -在回归中缩放目标变量 - -[`scale`](generated/sklearn.preprocessing.scale.html#sklearn.preprocessing.scale "sklearn.preprocessing.scale") 以及 [`StandardScaler`](generated/sklearn.preprocessing.StandardScaler.html#sklearn.preprocessing.StandardScaler "sklearn.preprocessing.StandardScaler") 可以直接处理一维数组。在回归中,缩放目标/相应变量时非常有用。 - -### 4.3.1.4\. 核矩阵的中心化 - -如果你有一个核矩阵 ![K](img/e279b8169ddd6581c5606c868ba52fae.jpg) ,它计算由函数 ![phi](img/a8e210a94f6eac6c32bc219dbc049288.jpg) 定义的特征空间的点积,那么一个 [`KernelCenterer`](generated/sklearn.preprocessing.KernelCenterer.html#sklearn.preprocessing.KernelCenterer "sklearn.preprocessing.KernelCenterer") 类能够转化这个核矩阵,通过移除特征空间的平均值,使它包含由函数 ![phi](img/a8e210a94f6eac6c32bc219dbc049288.jpg) 定义的内部产物。 - -## 4.3.2\. 非线性转换 - -类似于缩放, [`QuantileTransformer`](generated/sklearn.preprocessing.QuantileTransformer.html#sklearn.preprocessing.QuantileTransformer "sklearn.preprocessing.QuantileTransformer") 类将每个特征缩放在同样的范围或分布情况下。但是,通过执行一个秩转换能够使异常的分布平滑化,并且能够比缩放更少地受到离群值的影响。但是它的确使特征间及特征内的关联和距离失真了。 - -[`QuantileTransformer`](generated/sklearn.preprocessing.QuantileTransformer.html#sklearn.preprocessing.QuantileTransformer "sklearn.preprocessing.QuantileTransformer") 类以及 [`quantile_transform`](generated/sklearn.preprocessing.quantile_transform.html#sklearn.preprocessing.quantile_transform "sklearn.preprocessing.quantile_transform") 函数提供了一个基于分位数函数的无参数转换,将数据映射到了零到一的均匀分布上: - -```py ->>> from sklearn.datasets import load_iris ->>> from sklearn.model_selection import train_test_split ->>> iris = load_iris() ->>> X, y = iris.data, iris.target ->>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0) ->>> quantile_transformer = preprocessing.QuantileTransformer(random_state=0) ->>> X_train_trans = quantile_transformer.fit_transform(X_train) ->>> X_test_trans = quantile_transformer.transform(X_test) ->>> np.percentile(X_train[:, 0], [0, 25, 50, 75, 100]) -array([ 4.3, 5.1, 5.8, 6.5, 7.9]) - -``` - -这个特征是萼片的厘米单位的长度。一旦应用分位数转换,这些元素就接近于之前定义的百分位数: - -```py ->>> np.percentile(X_train_trans[:, 0], [0, 25, 50, 75, 100]) -... -array([ 0.00... , 0.24..., 0.49..., 0.73..., 0.99... ]) - -``` - -这可以在具有类似形式的独立测试集上确认: - -```py ->>> np.percentile(X_test[:, 0], [0, 25, 50, 75, 100]) -... -array([ 4.4 , 5.125, 5.75 , 6.175, 7.3 ]) ->>> np.percentile(X_test_trans[:, 0], [0, 25, 50, 75, 100]) -... -array([ 0.01..., 0.25..., 0.46..., 0.60... , 0.94...]) - -``` - -也可以通过设置 `output_distribution='normal'` 将转换后的数据映射到正态分布: - -```py ->>> quantile_transformer = preprocessing.QuantileTransformer( -... output_distribution='normal', random_state=0) ->>> X_trans = quantile_transformer.fit_transform(X) ->>> quantile_transformer.quantiles_ -array([[ 4.3..., 2..., 1..., 0.1...], - [ 4.31..., 2.02..., 1.01..., 0.1...], - [ 4.32..., 2.05..., 1.02..., 0.1...], - ..., - [ 7.84..., 4.34..., 6.84..., 2.5...], - [ 7.87..., 4.37..., 6.87..., 2.5...], - [ 7.9..., 4.4..., 6.9..., 2.5...]]) - -``` - -这样,输入的中值称为输出的平均值,并且以0为中心。正常输出被剪切,使得输入的最小和最大值分别对应于1e-7和1-1e-7分位数——在变换下不会变得无限大。 - -## 4.3.3\. 归一化 - -**归一化** 是 **缩放单个样本以具有单位范数** 的过程。如果你计划使用二次形式(如点积或任何其他核函数)来量化任何样本间的相似度,则此过程将非常有用。 - -这个观点基于 [向量空间模型(Vector Space Model)](https://en.wikipedia.org/wiki/Vector_Space_Model) ,经常在文本分类和内容聚类中使用. - -函数 [`normalize`](generated/sklearn.preprocessing.normalize.html#sklearn.preprocessing.normalize "sklearn.preprocessing.normalize") 提供了一个快速简单的方法在类似数组的数据集上执行操作,使用 `l1` 或 `l2` 范式: - -```py ->>> X = [[ 1., -1., 2.], -... [ 2., 0., 0.], -... [ 0., 1., -1.]] ->>> X_normalized = preprocessing.normalize(X, norm='l2') - ->>> X_normalized -array([[ 0.40..., -0.40..., 0.81...], - [ 1\. ..., 0\. ..., 0\. ...], - [ 0\. ..., 0.70..., -0.70...]]) - -``` - -`preprocessing` 预处理模块提供的 [`Normalizer`](generated/sklearn.preprocessing.Normalizer.html#sklearn.preprocessing.Normalizer "sklearn.preprocessing.Normalizer") 工具类使用 `Transformer` API 实现了相同的操作(即使在这种情况下, `fit` 方法是无用的:该类是无状态的,因为该操作独立对待样本). - -因此这个类适用于 [`sklearn.pipeline.Pipeline`](generated/sklearn.pipeline.Pipeline.html#sklearn.pipeline.Pipeline "sklearn.pipeline.Pipeline") 的早期步骤: - -```py ->>> normalizer = preprocessing.Normalizer().fit(X) # fit does nothing ->>> normalizer -Normalizer(copy=True, norm='l2') - -``` - -在这之后归一化实例可以被使用在样本向量中,像任何其他转换器一样: - -```py ->>> normalizer.transform(X) -array([[ 0.40..., -0.40..., 0.81...], - [ 1\. ..., 0\. ..., 0\. ...], - [ 0\. ..., 0.70..., -0.70...]]) - ->>> normalizer.transform([[-1., 1., 0.]]) -array([[-0.70..., 0.70..., 0\. ...]]) - -``` - -稀疏(数据)输入 - -函数 [`normalize`](generated/sklearn.preprocessing.normalize.html#sklearn.preprocessing.normalize "sklearn.preprocessing.normalize") 以及类 [`Normalizer`](generated/sklearn.preprocessing.Normalizer.html#sklearn.preprocessing.Normalizer "sklearn.preprocessing.Normalizer") 接收 **来自scipy.sparse的密集类数组数据和稀疏矩阵** 作为输入。 - -对于稀疏输入,在被提交给高效Cython例程前,数据被 **转化为压缩的稀疏行形式** (参见 `scipy.sparse.csr_matrix` )。为了避免不必要的内存复制,推荐在上游选择CSR表示。 - -## 4.3.4\. 二值化 - -### 4.3.4.1\. 特征二值化 - -**特征二值化** 是 **将数值特征用阈值过滤得到布尔值** 的过程。这对于下游的概率型模型是有用的,它们假设输入数据是多值 [伯努利分布(Bernoulli distribution)](https://en.wikipedia.org/wiki/Bernoulli_distribution) 。例如这个例子 [`sklearn.neural_network.BernoulliRBM`](generated/sklearn.neural_network.BernoulliRBM.html#sklearn.neural_network.BernoulliRBM "sklearn.neural_network.BernoulliRBM") 。 - -即使归一化计数(又名术语频率)和TF-IDF值特征在实践中表现稍好一些,文本处理团队也常常使用二值化特征值(这可能会简化概率估计)。 - -相比于 [`Normalizer`](generated/sklearn.preprocessing.Normalizer.html#sklearn.preprocessing.Normalizer "sklearn.preprocessing.Normalizer") ,实用程序类 [`Binarizer`](generated/sklearn.preprocessing.Binarizer.html#sklearn.preprocessing.Binarizer "sklearn.preprocessing.Binarizer") 也被用于 [`sklearn.pipeline.Pipeline`](generated/sklearn.pipeline.Pipeline.html#sklearn.pipeline.Pipeline "sklearn.pipeline.Pipeline") 的早期步骤中。因为每个样本被当做是独立于其他样本的,所以 `fit` 方法是无用的: - -```py ->>> X = [[ 1., -1., 2.], -... [ 2., 0., 0.], -... [ 0., 1., -1.]] - ->>> binarizer = preprocessing.Binarizer().fit(X) # fit does nothing ->>> binarizer -Binarizer(copy=True, threshold=0.0) - ->>> binarizer.transform(X) -array([[ 1., 0., 1.], - [ 1., 0., 0.], - [ 0., 1., 0.]]) - -``` - -也可以为二值化器赋一个阈值: - -```py ->>> binarizer = preprocessing.Binarizer(threshold=1.1) ->>> binarizer.transform(X) -array([[ 0., 0., 1.], - [ 1., 0., 0.], - [ 0., 0., 0.]]) - -``` - -相比于 [`StandardScaler`](generated/sklearn.preprocessing.StandardScaler.html#sklearn.preprocessing.StandardScaler "sklearn.preprocessing.StandardScaler") 和 [`Normalizer`](generated/sklearn.preprocessing.Normalizer.html#sklearn.preprocessing.Normalizer "sklearn.preprocessing.Normalizer") 类的情况,预处理模块提供了一个相似的函数 [`binarize`](generated/sklearn.preprocessing.binarize.html#sklearn.preprocessing.binarize "sklearn.preprocessing.binarize") ,以便不需要转换接口时使用。 - -稀疏输入 - -[`binarize`](generated/sklearn.preprocessing.binarize.html#sklearn.preprocessing.binarize "sklearn.preprocessing.binarize") 以及 [`Binarizer`](generated/sklearn.preprocessing.Binarizer.html#sklearn.preprocessing.Binarizer "sklearn.preprocessing.Binarizer") 接收 **来自scipy.sparse的密集类数组数据以及稀疏矩阵作为输入** 。 - -对于稀疏输入,数据被 **转化为压缩的稀疏行形式** (参见 `scipy.sparse.csr_matrix` )。为了避免不必要的内存复制,推荐在上游选择CSR表示。 - -## 4.3.5\. 分类特征编码 - -在机器学习中,特征经常不是数值型的而是分类型的。举个例子,一个人可能有 `["male", "female"]` , `["from Europe", "from US", "from Asia"]` , `["uses Firefox", "uses Chrome", "uses Safari", "uses Internet Explorer"]` 等分类的特征。这些特征能够被有效地编码成整数,比如 `["male", "from US", "uses Internet Explorer"]` 可以被表示为 `[0, 1, 3]` , `["female", "from Asia", "uses Chrome"]` 表示为 `[1, 2, 1]` 。 - -这个的整数特征表示并不能在scikit-learn的估计器中直接使用,因为这样的连续输入,估计器会认为类别之间是有序的,但实际却是无序的。(例如:浏览器的类别数据则是任意排序的) - -一种将分类特征转换为能够被scikit-learn中模型使用的编码是one-of-K或one-hot编码,在 [`OneHotEncoder`](generated/sklearn.preprocessing.OneHotEncoder.html#sklearn.preprocessing.OneHotEncoder "sklearn.preprocessing.OneHotEncoder") 中实现。这个类使用 `m` 个可能值转换为 `m` 值化特征,将分类特征的每个元素转化为一个值。 - -考虑如下例子: - -```py ->>> enc = preprocessing.OneHotEncoder() ->>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]) -OneHotEncoder(categorical_features='all', dtype=<... 'numpy.float64'>, - handle_unknown='error', n_values='auto', sparse=True) ->>> enc.transform([[0, 1, 3]]).toarray() -array([[ 1., 0., 0., 1., 0., 0., 0., 0., 1.]]) - -``` - -默认情况下,每个特征使用几维的数值由数据集自动推断。当然,你也可以通过使用参数``n_values``来精确指定。 在我们的例子数据集中,有两个可能得性别类别,三个洲,四个网络浏览器。接着,我们训练编码算法,并用来对一个样本数据进行转换。 在结果中,前两个数值是性别编码,紧接着的三个数值是洲编码,最后的四个数值是浏览器编码 - -注意,如果训练集中有丢失的分类特征值,必须显式地设置 `n_values` ,举个例子, - -```py ->>> enc = preprocessing.OneHotEncoder(n_values=[2, 3, 4]) ->>> # 注意到第二、三个特征是不全的 ->>> # features ->>> enc.fit([[1, 2, 3], [0, 2, 0]]) -OneHotEncoder(categorical_features='all', dtype=<... 'numpy.float64'>, - handle_unknown='error', n_values=[2, 3, 4], sparse=True) ->>> enc.transform([[1, 0, 0]]).toarray() -array([[ 0., 1., 1., 0., 0., 1., 0., 0., 0.]]) - -``` - -参见 [从字典类型加载特征](feature_extraction.html#dict-feature-extraction) ,它对于分类特征代表一个dict,而不是整数。 - -## 4.3.6\. 缺失值插补 - -因为各种各样的原因,真实世界中的许多数据集都包含缺失数据,这类数据经常被编码成空格、NaNs,或者是其他的占位符。但是这样的数据集并不能scikit-learn学习算法兼容,因为大多的学习算法都默认假设数组中的元素都是数值,因而所有的元素都有自己的意义。 使用不完整的数据集的一个基本策略就是舍弃掉整行或整列包含缺失值的数据。但是这样就付出了舍弃可能有价值数据(即使是不完整的 )的代价。 处理缺失数值的一个更好的策略就是从已有的数据推断出缺失的数值。 - -[`Imputer`](generated/sklearn.preprocessing.Imputer.html#sklearn.preprocessing.Imputer "sklearn.preprocessing.Imputer") 类提供了估算缺失值的基本策略,使用缺失值所在的行/列中的平均值、中位数或者众数来填充。这个类也支持不同的缺失值编码。 - -以下代码段演示了如何使用包含缺失值的列(轴0)的平均值来替换编码为 `np.nan` 的缺失值: - -```py ->>> import numpy as np ->>> from sklearn.preprocessing import Imputer ->>> imp = Imputer(missing_values='NaN', strategy='mean', axis=0) ->>> imp.fit([[1, 2], [np.nan, 3], [7, 6]]) -Imputer(axis=0, copy=True, missing_values='NaN', strategy='mean', verbose=0) ->>> X = [[np.nan, 2], [6, np.nan], [7, 6]] ->>> print(imp.transform(X)) -[[ 4\. 2\. ] - [ 6\. 3.666...] - [ 7\. 6\. ]] - -``` - -[`Imputer`](generated/sklearn.preprocessing.Imputer.html#sklearn.preprocessing.Imputer "sklearn.preprocessing.Imputer") 类也支持稀疏矩阵: - -```py ->>> import scipy.sparse as sp ->>> X = sp.csc_matrix([[1, 2], [0, 3], [7, 6]]) ->>> imp = Imputer(missing_values=0, strategy='mean', axis=0) ->>> imp.fit(X) -Imputer(axis=0, copy=True, missing_values=0, strategy='mean', verbose=0) ->>> X_test = sp.csc_matrix([[0, 2], [6, 0], [7, 6]]) ->>> print(imp.transform(X_test)) -[[ 4\. 2\. ] - [ 6\. 3.666...] - [ 7\. 6\. ]] - -``` - -注意,缺失值被编码为0,因此隐式地存储在矩阵中。当缺失值比可观察到的值多的时候,这种格式是合适的。 - -[`Imputer`](generated/sklearn.preprocessing.Imputer.html#sklearn.preprocessing.Imputer "sklearn.preprocessing.Imputer") 可以在 Pipeline 中用作构建支持插补的合成模型。参见 [Imputing missing values before building an estimator](../auto_examples/plot_missing_values.html#sphx-glr-auto-examples-plot-missing-values-py) 。 - -## 4.3.7\. 生成多项式特征 - -在机器学习中,通过增加一些输入数据的非线性特征来增加模型的复杂度通常是有效的。一个简单通用的办法是使用多项式特征,这可以获得特征的更高维度和互相间关系的项。这在 [`PolynomialFeatures`](generated/sklearn.preprocessing.PolynomialFeatures.html#sklearn.preprocessing.PolynomialFeatures "sklearn.preprocessing.PolynomialFeatures") 中实现: - -```py ->>> import numpy as np ->>> from sklearn.preprocessing import PolynomialFeatures ->>> X = np.arange(6).reshape(3, 2) ->>> X -array([[0, 1], - [2, 3], - [4, 5]]) ->>> poly = PolynomialFeatures(2) ->>> poly.fit_transform(X) -array([[ 1., 0., 1., 0., 0., 1.], - [ 1., 2., 3., 4., 6., 9.], - [ 1., 4., 5., 16., 20., 25.]]) - -``` - -X 的特征已经从 ![(X_1, X_2)](img/23bd4397a3e30a81d2ee26977f708e63.jpg) 转换为 ![(1, X_1, X_2, X_1^2, X_1X_2, X_2^2)](img/77ee769c7c80ba4738fa4b34ff922e25.jpg) 。 - -在一些情况下,只需要特征间的交互项,这可以通过设置 `interaction_only=True` 来得到: - -```py ->>> X = np.arange(9).reshape(3, 3) ->>> X -array([[0, 1, 2], - [3, 4, 5], - [6, 7, 8]]) ->>> poly = PolynomialFeatures(degree=3, interaction_only=True) ->>> poly.fit_transform(X) -array([[ 1., 0., 1., 2., 0., 0., 2., 0.], - [ 1., 3., 4., 5., 12., 15., 20., 60.], - [ 1., 6., 7., 8., 42., 48., 56., 336.]]) - -``` - -X的特征已经从 ![(X_1, X_2, X_3)](img/300d1995dc6050bbfd575b2c14ec81ae.jpg) 转换为 ![(1, X_1, X_2, X_3, X_1X_2, X_1X_3, X_2X_3, X_1X_2X_3)](img/f4c7787828dd90f6b47e1677bbc806da.jpg) 。 - -注意,当使用多项的 [:ref:`svm_kernels`时 ,多项式特征被隐式地使用在 `核函数(kernel methods) <https://en.wikipedia.org/wiki/Kernel_method>`_](#id14) 中(比如, [`sklearn.svm.SVC`](generated/sklearn.svm.SVC.html#sklearn.svm.SVC "sklearn.svm.SVC") , [`sklearn.decomposition.KernelPCA`](generated/sklearn.decomposition.KernelPCA.html#sklearn.decomposition.KernelPCA "sklearn.decomposition.KernelPCA") )。 - -创建并使用多项式特征的岭回归实例请见 [Polynomial interpolation](../auto_examples/linear_model/plot_polynomial_interpolation.html#sphx-glr-auto-examples-linear-model-plot-polynomial-interpolation-py) 。 - -## 4.3.8\. 自定义转换器 - -在机器学习中,想要将一个已有的 Python 函数转化为一个转换器来协助数据清理或处理。可以使用 [`FunctionTransformer`](generated/sklearn.preprocessing.FunctionTransformer.html#sklearn.preprocessing.FunctionTransformer "sklearn.preprocessing.FunctionTransformer") 从任意函数中实现一个转换器。例如,在一个管道中构建一个实现日志转换的转化器,这样做: - -```py ->>> import numpy as np ->>> from sklearn.preprocessing import FunctionTransformer ->>> transformer = FunctionTransformer(np.log1p) ->>> X = np.array([[0, 1], [2, 3]]) ->>> transformer.transform(X) -array([[ 0\. , 0.69314718], - [ 1.09861229, 1.38629436]]) - -``` - -使用一个 [`FunctionTransformer`](generated/sklearn.preprocessing.FunctionTransformer.html#sklearn.preprocessing.FunctionTransformer "sklearn.preprocessing.FunctionTransformer") 类来做定制化特征选择的例子,请见 [Using FunctionTransformer to select columns](../auto_examples/preprocessing/plot_function_transformer.html#sphx-glr-auto-examples-preprocessing-plot-function-transformer-py) 。 \ No newline at end of file diff --git a/docs/0.19.x/6.md b/docs/0.19.x/6.md deleted file mode 100755 index 178b904f4df6c59f678fffe349708253c89f9d02..0000000000000000000000000000000000000000 --- a/docs/0.19.x/6.md +++ /dev/null @@ -1,275 +0,0 @@ -# 1.5\. 随机梯度下降 - -校验者: -        [@A](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@L](https://github.com/apachecn/scikit-learn-doc-zh) -校验者: -        [@HelloSilicat](https://github.com/HelloSilicat) -        [@A](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@L](https://github.com/apachecn/scikit-learn-doc-zh) - -**随机梯度下降(SGD)** 是一种简单但又非常高效的方法,主要用于凸损失函数下线性分类器的判别式学习,例如(线性) [支持向量机](https://en.wikipedia.org/wiki/Support_vector_machine) 和 [Logistic 回归](https://en.wikipedia.org/wiki/Logistic_regression) 。 尽管 SGD 在机器学习社区已经存在了很长时间, 但是最近在 large-scale learning (大规模学习)方面 SGD 获得了相当大的关注。 - -SGD 已成功应用于在文本分类和自然语言处理中经常遇到的大规模和稀疏的机器学习问题。对于稀疏数据,本模块的分类器可以轻易的处理超过 10^5 的训练样本和超过 10^5 的特征。 - -Stochastic Gradient Descent (随机梯度下降法)的优势: - -> * 高效。 -> * 易于实现 (有大量优化代码的机会)。 - -Stochastic Gradient Descent (随机梯度下降法)的劣势: - -> * SGD 需要一些超参数,例如 regularization (正则化)参数和 number of iterations (迭代次数)。 -> * SGD 对 feature scaling (特征缩放)敏感。 - -## 1.5.1\. 分类 - -Warning - -在拟合模型前,确保你重新排列了(打乱))你的训练数据,或者在每次迭代后用 `shuffle=True` 来打乱。 - -[`SGDClassifier`](generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier "sklearn.linear_model.SGDClassifier") 类实现了一个简单的随机梯度下降学习例程, 支持不同的 loss functions(损失函数)和 penalties for classification(分类处罚)。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_sgd_separating_hyperplane_0011.png](img/b3206aa7b52a9c0918727730873d1363.jpg)](../auto_examples/linear_model/plot_sgd_separating_hyperplane.html) - -作为另一个 classifier (分类器), 拟合 SGD 我们需要两个 array (数组):保存训练样本的 size 为 [n_samples, n_features] 的数组 X 以及保存训练样本目标值(类标签)的 size 为 [n_samples] 的数组 Y - -```py ->>> from sklearn.linear_model import SGDClassifier ->>> X = [[0., 0.], [1., 1.]] ->>> y = [0, 1] ->>> clf = SGDClassifier(loss="hinge", penalty="l2") ->>> clf.fit(X, y) -SGDClassifier(alpha=0.0001, average=False, class_weight=None, epsilon=0.1, - eta0=0.0, fit_intercept=True, l1_ratio=0.15, - learning_rate='optimal', loss='hinge', max_iter=5, n_iter=None, - n_jobs=1, penalty='l2', power_t=0.5, random_state=None, - shuffle=True, tol=None, verbose=0, warm_start=False) - -``` - -拟合后,我们可以用该模型来预测新值: - -```py ->>> clf.predict([[2., 2.]]) -array([1]) - -``` - -SGD 通过训练数据来拟合一个线性模型。成员 `coef_` 保存模型参数: - -```py ->>> clf.coef_ -array([[ 9.9..., 9.9...]]) - -``` - -成员 `intercept_` 保存 intercept(截距) (又称作 offset(偏移)或 bias(偏差)): - -```py ->>> clf.intercept_ -array([-9.9...]) - -``` - -模型是否使用 intercept(截距), 即 a biased hyperplane(一个偏置的超平面), 是由参数 `fit_intercept` 控制的。 - -使用 [`SGDClassifier.decision_function`](generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier.decision_function "sklearn.linear_model.SGDClassifier.decision_function") 来获得到此超平面的 signed distance (符号距离) - -```py ->>> clf.decision_function([[2., 2.]]) -array([ 29.6...]) - -``` - -具体的 loss function(损失函数) 可以通过 `loss` 参数来设置。 [`SGDClassifier`](generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier "sklearn.linear_model.SGDClassifier") 支持以下的 loss functions(损失函数): - -> * `loss="hinge"`: (soft-margin) linear Support Vector Machine ((软-间隔)线性支持向量机), -> * `loss="modified_huber"`: smoothed hinge loss (平滑的 hinge 损失), -> * `loss="log"`: logistic regression (logistic 回归), -> * and all regression losses below(以及所有的回归损失)。 - -前两个 loss functions(损失函数)是懒惰的,如果一个例子违反了 margin constraint(边界约束),它们仅更新模型的参数, 这使得训练非常有效率,即使使用了 L2 penalty(惩罚)我们仍然可能得到稀疏的模型结果。 - -使用 `loss="log"` 或者 `loss="modified_huber"` 来启用 `predict_proba` 方法, 其给出每个样本 ![x](img/5c82dbae35dc43d2f556f9f284d9d184.jpg) 的概率估计 ![P(y|x)](img/3cca81fd08a4732dc7061cd246b323ed.jpg) 的一个向量: - -```py ->>> clf = SGDClassifier(loss="log").fit(X, y) ->>> clf.predict_proba([[1., 1.]]) -array([[ 0.00..., 0.99...]]) - -``` - -具体的惩罚方法可以通过 `penalty` 参数来设定。 SGD 支持以下 penalties(惩罚): - -> * `penalty="l2"`: L2 norm penalty on `coef_`. -> * `penalty="l1"`: L1 norm penalty on `coef_`. -> * `penalty="elasticnet"`: Convex combination of L2 and L1(L2 型和 L1 型的凸组合); `(1 - l1_ratio) * L2 + l1_ratio * L1`. - -默认设置为 `penalty="l2"` 。 L1 penalty (惩罚)导致稀疏解,使得大多数系数为零。 Elastic Net(弹性网)解决了在特征高相关时 L1 penalty(惩罚)的一些不足。参数 `l1_ratio` 控制了 L1 和 L2 penalty(惩罚)的 convex combination (凸组合)。 - -[`SGDClassifier`](generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier "sklearn.linear_model.SGDClassifier") 通过利用 “one versus all” (OVA)方法来组合多个二分类器,从而实现多分类。对于每一个 ![K](img/e279b8169ddd6581c5606c868ba52fae.jpg) 类, 可以训练一个二分类器来区分自身和其他 ![K-1](img/7ce09555ac9e490df7f81ef7eb0e58e8.jpg) 个类。在测试阶段,我们计算每个分类器的 confidence score(置信度分数)(也就是与超平面的距离),并选择置信度最高的分类。下图阐释了基于 iris(鸢尾花)数据集上的 OVA 方法。虚线表示三个 OVA 分类器; 不同背景色代表由三个分类器产生的决策面。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_sgd_iris_0011.png](img/7ec998f799acf05b040856bc6b37657f.jpg)](../auto_examples/linear_model/plot_sgd_iris.html) - -在 multi-class classification (多类分类)的情况下, `coef_` 是 `shape=[n_classes, n_features]` 的一个二维数组, `intercept_` 是 `shape=[n_classes]` 的一个一维数组。 `coef_` 的第 i 行保存了第 i 类的 OVA 分类器的权重向量;类以升序索引 (参照属性 `classes_` )。 注意,原则上,由于它们允许创建一个概率模型,所以 `loss="log"` 和 `loss="modified_huber"` 更适合于 one-vs-all 分类。 - -[`SGDClassifier`](generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier "sklearn.linear_model.SGDClassifier") 通过拟合参数 `class_weight` 和 `sample_weight` 来支持 weighted classes (加权类)和 weighted instances(加权实例)。更多信息请参照下面的示例和 [`SGDClassifier.fit`](generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier.fit "sklearn.linear_model.SGDClassifier.fit") 的文档。 - -示例: - -* [SGD: Maximum margin separating hyperplane](../auto_examples/linear_model/plot_sgd_separating_hyperplane.html#sphx-glr-auto-examples-linear-model-plot-sgd-separating-hyperplane-py), -* [Plot multi-class SGD on the iris dataset](../auto_examples/linear_model/plot_sgd_iris.html#sphx-glr-auto-examples-linear-model-plot-sgd-iris-py) -* [SGD: Weighted samples](../auto_examples/linear_model/plot_sgd_weighted_samples.html#sphx-glr-auto-examples-linear-model-plot-sgd-weighted-samples-py) -* [Comparing various online solvers](../auto_examples/linear_model/plot_sgd_comparison.html#sphx-glr-auto-examples-linear-model-plot-sgd-comparison-py) -* [SVM: Separating hyperplane for unbalanced classes](../auto_examples/svm/plot_separating_hyperplane_unbalanced.html#sphx-glr-auto-examples-svm-plot-separating-hyperplane-unbalanced-py) (参见 <cite>Note</cite>) - -[`SGDClassifier`](generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier "sklearn.linear_model.SGDClassifier") 支持 averaged SGD (ASGD)。Averaging(均值化)可以通过设置 ``average=True`` 来启用。AGSD 工作原理是在普通 SGD 的基础上,对每个样本的每次迭代后的系数取均值。当使用 ASGD 时,学习速率可以更大甚至是恒定,在一些数据集上能够加速训练过程。 - -对于带 logistic loss(logistic 损失)的分类,在 [`LogisticRegression`](generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression "sklearn.linear_model.LogisticRegression") 中提供了另一个采取 averaging strategy(平均策略)的 SGD 变体,其使用了随机平均梯度 (SAG) 算法。 - -## 1.5.2\. 回归 - -[`SGDRegressor`](generated/sklearn.linear_model.SGDRegressor.html#sklearn.linear_model.SGDRegressor "sklearn.linear_model.SGDRegressor") 类实现了一个简单的随机梯度下降学习例程,它支持用不同的损失函数和惩罚来拟合线性回归模型。 [`SGDRegressor`](generated/sklearn.linear_model.SGDRegressor.html#sklearn.linear_model.SGDRegressor "sklearn.linear_model.SGDRegressor") 非常适用于有大量训练样本(>10.000)的回归问题,对于其他问题,我们推荐使用 [`Ridge`](generated/sklearn.linear_model.Ridge.html#sklearn.linear_model.Ridge "sklearn.linear_model.Ridge") ,[`Lasso`](generated/sklearn.linear_model.Lasso.html#sklearn.linear_model.Lasso "sklearn.linear_model.Lasso") ,或 [`ElasticNet`](generated/sklearn.linear_model.ElasticNet.html#sklearn.linear_model.ElasticNet "sklearn.linear_model.ElasticNet") 。 - -具体的损失函数可以通过 `loss` 参数设置。 [`SGDRegressor`](generated/sklearn.linear_model.SGDRegressor.html#sklearn.linear_model.SGDRegressor "sklearn.linear_model.SGDRegressor") 支持以下的损失函数: - -> * `loss="squared_loss"`: Ordinary least squares(普通最小二乘法), -> * `loss="huber"`: Huber loss for robust regression(Huber回归), -> * `loss="epsilon_insensitive"`: linear Support Vector Regression(线性支持向量回归). - -Huber 和 epsilon-insensitive 损失函数可用于 robust regression(鲁棒回归)。不敏感区域的宽度必须通过参数 `epsilon` 来设定。这个参数取决于目标变量的规模。 - -[`SGDRegressor`](generated/sklearn.linear_model.SGDRegressor.html#sklearn.linear_model.SGDRegressor "sklearn.linear_model.SGDRegressor") 支持 ASGD(平均随机梯度下降) 作为 [`SGDClassifier`](generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier "sklearn.linear_model.SGDClassifier")。 均值化可以通过设置 ``average=True`` 来启用。 - -对于利用了 squared loss(平方损失)和 l2 penalty(l2惩罚)的回归,在 [`Ridge`](generated/sklearn.linear_model.Ridge.html#sklearn.linear_model.Ridge "sklearn.linear_model.Ridge") 中提供了另一个采取 averaging strategy(平均策略)的 SGD 变体,其使用了随机平均梯度 (SAG) 算法。 - -## 1.5.3\. 稀疏数据的随机梯度下降 - -Note - -由于在截距部分收敛学习速率的差异,稀疏实现与密集实现相比产生的结果略有不同。 - -在 [scipy.sparse](https://docs.scipy.org/doc/scipy/reference/sparse.html) 支持的格式中,任意矩阵都有对稀疏数据的内置支持方法。但是,为了获得最高的效率,请使用 [scipy.sparse.csr_matrix](http://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csr_matrix.html) 中定义的 CSR 矩阵格式. - -示例: - -* [Classification of text documents using sparse features](../auto_examples/text/document_classification_20newsgroups.html#sphx-glr-auto-examples-text-document-classification-20newsgroups-py) - -## 1.5.4\. 复杂度 - -SGD 主要的优势在于它的高效性,对于不同规模的训练样本,处理复杂度基本上是线性的。假如 X 是 size 为 (n, p) 的矩阵,训练成本为 ![O(k n \bar p)](img/d11a3c7c81eef9f2c8ece06f91411e9e.jpg),其中 k 是迭代次数, ![\bar p](img/77e01a63c0620550a5f11a7613001120.jpg) 是每个样本非零特征的平均数。 - -但是,最近的理论结果表明,得到期望优化精度的运行时间并不会随着训练集规模扩大而增加。 - -## 1.5.5\. 实用小贴士 - -> * 随机梯度下降法对 feature scaling (特征缩放)很敏感,因此强烈建议您缩放您的数据。例如,将输入向量 X 上的每个特征缩放到 [0,1] 或 [- 1,+1], 或将其标准化,使其均值为 0,方差为 1。请注意,必须将 _相同_ 的缩放应用于对应的测试向量中,以获得有意义的结果。使用 `StandardScaler`: 很容易做到这一点: -> -> -> -> > from sklearn.preprocessing import StandardScaler scaler = StandardScaler() scaler.fit(X_train) # Don’t cheat - fit only on training data X_train = scaler.transform(X_train) X_test = scaler.transform(X_test) # apply same transformation to test data -> -> -> -> 假如你的 attributes (属性)有一个固有尺度(例如 word frequencies (词频)或 indicator features(指标特征))就不需要缩放。 -> -> -> * 最好使用 `GridSearchCV` 找到一个合理的 regularization term (正则化项) ![\alpha](img/d8b3d5242d513369a44f8bf0c6112744.jpg) , 它的范围通常在 `10.0**-np.arange(1,7)` 。 -> -> -> * 经验表明,SGD 在处理约 10^6 训练样本后基本收敛。因此,对于迭代次数第一个合理的猜想是 `n_iter = np.ceil(10**6 / n)`,其中 `n` 是训练集的大小。 -> -> -> * 假如将 SGD 应用于使用 PCA 做特征提取,我们发现通过某个常数 <cite>c</cite> 来缩放特征值是明智的,比如使训练数据的 L2 norm 平均值为 1。 -> -> -> * 我们发现,当特征很多或 eta0 很大时, ASGD(平均随机梯度下降) 效果更好。 - -参考文献: - -* [“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. - -## 1.5.6\. 数学描述 - -给定一组训练样本 ![(x_1, y_1), \ldots, (x_n, y_n)](img/5421b26a31de754ee8d186d038006fa3.jpg) ,其中 ![x_i \in \mathbf{R}^m](img/2736dbaab8f81e4cb2d0e388f2b0c6b2.jpg) , ![y_i \in \{-1,1\}](img/e24edaeb407b6a696ddb188697f0934d.jpg), 我们的目标是一个线性 scoring function(评价函数) ![f(x) = w^T x + b](img/75fd7809a46f43dcd922f39ff8f91026.jpg) ,其中模型参数 ![w \in \mathbf{R}^m](img/99d4804dc3d2ef82e10d91de99d0142a.jpg) ,截距 ![b \in \mathbf{R}](img/f40416aceb254b77100eb361321c1804.jpg)。为了做预测, 我们只需要看 ![f(x)](img/da2ce2d49bbab0c389600d1c82fccf9b.jpg) 的符号。找到模型参数的一般选择是通过最小化由以下式子给出的正则化训练误差 - -![E(w,b) = \frac{1}{n}\sum_{i=1}^{n} L(y_i, f(x_i)) + \alpha R(w)](img/580270908cf4e5ba3907b7267fcfbb44.jpg) - -其中 ![L](img/639e82f3829a0ad677110cc33a028c98.jpg) 衡量模型(mis)拟合程度的损失函数,![R](img/0fccbdc535b0a4d8003725e8ad606561.jpg) 是惩罚模型复杂度的正则化项(也叫作惩罚); ![\alpha > 0](img/11cde057716cf1a820780a60c8ffa8e4.jpg) 是一个非负超平面。 - -![L](img/639e82f3829a0ad677110cc33a028c98.jpg) 的不同选择产生不同的分类器,例如 - -> * Hinge: (soft-margin) Support Vector Machines. -> * Hinge: (软-间隔) 支持向量机。 -> * Log: Logistic Regression. -> * Log: Logistic 回归。 -> * Least-Squares: Ridge Regression. -> * Least-Squares: 岭回归。 -> * Epsilon-Insensitive: (soft-margin) Support Vector Regression. -> * Epsilon-Insensitive: (软-间隔) 支持向量回归。 - -所有上述损失函数可以看作是错误分类误差的上限(0 - 1损失),如下图所示。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_sgd_loss_functions_0011.png](img/42edb18b0951c4f7ab739e5c24bf9ba3.jpg)](../auto_examples/linear_model/plot_sgd_loss_functions.html) - -比较流行的正则化项 ![R](img/0fccbdc535b0a4d8003725e8ad606561.jpg) 包括: - -> * L2 norm: ![R(w) := \frac{1}{2} \sum_{i=1}^{n} w_i^2](img/2e2461d59015f9759fa0612965e2425e.jpg), -> * L1 norm: ![R(w) := \sum_{i=1}^{n} |w_i|](img/61a540d6591602c8f513910fd2f33b40.jpg), which leads to sparse solutions(). -> * Elastic Net: ![R(w) := \frac{\rho}{2} \sum_{i=1}^{n} w_i^2 + (1-\rho) \sum_{i=1}^{n} |w_i|](img/f9d2fc91f381e1772999a738d3c8c32b.jpg), a convex combination of L2 and L1, where ![\rho](img/b91e4507d9fd7068b02f689d697f8714.jpg) is given by `1 - l1_ratio`. - -下图显示当 ![R(w) = 1](img/55f44df097de0ddde791d3084a69a1bf.jpg) 时参数空间中不同正则项的轮廓。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_sgd_penalties_0011.png](img/7c228fb3025521b5d9c2aef929547d1d.jpg)](../auto_examples/linear_model/plot_sgd_penalties.html) - -### 1.5.6.1\. SGD - -随机梯度下降法是一种无约束优化问题的优化方法。与(批量)梯度下降法相反,SGD 通过一次只考虑单个训练样本来近似 ![E(w,b)](img/343401666d8fc0aeeea395495b9dc570.jpg) 真实的梯度。 - -[`SGDClassifier`](generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier "sklearn.linear_model.SGDClassifier") 类实现了一个 first-order SGD learning routine (一阶 SGD 学习程序)。 算法在训练样本上遍历,并且对每个样本根据由以下式子给出的更新规则来更新模型参数。 - - -![w \leftarrow w - \eta (\alpha \frac{\partial R(w)}{\partial w} -+ \frac{\partial L(w^T x_i + b, y_i)}{\partial w})](img/74f4ea0e25b673d30d56ab4269f03f3b.jpg) - - -其中 ![\eta](img/fe1d79339349f9b6263e123094ffce7b.jpg) 是在参数空间中控制步长的 learning rate (学习速率)。 intercept(截距) ![b](img/6ae91fb0f3221b92d2dd4e22204d8008.jpg) 的更新类似但不需要正则化。 - -学习率 ![\eta](img/fe1d79339349f9b6263e123094ffce7b.jpg) 可以恒定或者逐渐减小。对于分类来说, 默认的学习率设定方案 (`learning_rate='optimal'`)由下式给出。 - -![\eta^{(t)} = \frac {1}{\alpha (t_0 + t)}](img/938ee5c0c620fd2298ea16abe621e7bb.jpg) - -其中 ![t](img/12b2c1da1f9041738fa7153efc651372.jpg) 是时间步长(总共有 <cite>n_samples * n_iter</cite> 时间步长), ![t_0](img/56c751b0714a570fdcef0caf63f81580.jpg) 是由 Léon Bottou 提出的启发式算法决定的,比如预期的初始更新可以设定为权重的期望大小(假设训练样本的范数近似1)。在 `BaseSGD` 中的 `_init_t` 中可以找到确切的定义。 - -对于回归来说,默认的学习率是反向缩放 (`learning_rate='invscaling'`),由下式给出 - -![\eta^{(t)} = \frac{eta_0}{t^{power\_t}}](img/114b22cba4861a82ce7df1eab3219a0d.jpg) - -其中 ![eta_0](img/0e8aa67015918fa2807e6ddf7192c32f.jpg) 和 ![power\_t](img/7ece088a96a66cb9675fde4610d67980.jpg) 是用户通过 `eta0` 和 `power_t` 分别选择的超参数。 - -使用固定的学习速率则设置 `learning_rate='constant'` ,或者设置 `eta0` 来指定学习速率。 - -模型参数可以通过成员 `coef_` 和 `intercept_` 来获得: - -> * 成员 `coef_` holds the weights(控制权重) ![w](img/8a58e8df6a985a3273e39bac7dd72b1f.jpg) -> * 成员 `intercept_` holds ![b](img/6ae91fb0f3221b92d2dd4e22204d8008.jpg) - -参考文献: - -* [“Solving large scale linear prediction problems using stochastic gradient descent algorithms”](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.58.7377) T. Zhang - In Proceedings of ICML ‘04. -* [“Regularization and variable selection via the elastic net”](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.124.4696) H. Zou, T. Hastie - Journal of the Royal Statistical Society Series B, 67 (2), 301-320. -* [“Towards Optimal One Pass Large Scale Learning with Averaged Stochastic Gradient Descent”](http://arxiv.org/pdf/1107.2490v2.pdf) Xu, Wei - -## 1.5.7\. 实现细节 - -SGD 的实现受到了 Léon Bottou [Stochastic Gradient SVM](http://leon.bottou.org/projects/sgd) 的影响。类似于 SvmSGD,权重向量表达为一个标量和一个向量的内积,这样保证在使用L2正则项时可以高效更新权重。 在 sparse feature vectors (稀疏特征向量)的情况下, intercept (截距)是以更小的学习率(乘以 0.01)更新的,这导致了它的更新更加频繁。训练样本按顺序选取并且每处理一个样本就要降低学习速率。我们采用了 Shalev-Shwartz 等人2007年提出的的学习速率设定方案。 对于多类分类,我们使用了 “one versus all” 方法。 我们在 L1 正则化(和 Elastic Net )中使用 Tsuruoka 等人2009年提出的 truncated gradient algorithm (截断梯度算法)。代码是用 Cython 编写的。 - -参考文献: - -* [“Stochastic Gradient Descent”](http://leon.bottou.org/projects/sgd) L. Bottou - Website, 2010. -* [“The Tradeoffs of Large Scale Machine Learning”](http://leon.bottou.org/slides/largescale/lstut.pdf) L. Bottou - Website, 2011. -* [“Pegasos: Primal estimated sub-gradient solver for svm”](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.74.8513) S. Shalev-Shwartz, Y. Singer, N. Srebro - In Proceedings of ICML ‘07. -* [“Stochastic gradient descent training for l1-regularized log-linear models with cumulative penalty”](http://www.aclweb.org/anthology/P/P09/P09-1054.pdf) Y. Tsuruoka, J. Tsujii, S. Ananiadou - In Proceedings of the AFNLP/ACL ‘09. \ No newline at end of file diff --git a/docs/0.19.x/60.md b/docs/0.19.x/60.md deleted file mode 100755 index 8d1cf55211804e0d4d4efdfcfd081e087e9200ef..0000000000000000000000000000000000000000 --- a/docs/0.19.x/60.md +++ /dev/null @@ -1,39 +0,0 @@ -# 4.4\. 无监督降维 - -校验者: -        [@程威](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@十四号](https://github.com/apachecn/scikit-learn-doc-zh) - -如果你的特征数量很多, 在监督步骤之前, 可以通过无监督的步骤来减少特征. 很多的 [无监督学习](../unsupervised_learning.html#unsupervised-learning) 方法实现了一个名为 `transform` 的方法, 它可以用来降低维度. 下面我们将讨论大量使用这种模式的两个具体示例. - -## 4.4.1\. PCA: 主成份分析 - -[`decomposition.PCA`](generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA "sklearn.decomposition.PCA") 寻找能够捕捉原始特征的差异的特征的组合. 请参阅 [分解成分中的信号(矩阵分解问题)](decomposition.html#decompositions). - -**示例** - -* <colgroup><col class="field-name"> <col class="field-body"></colgroup> - | ref: | ‘sphx_glr_auto_examples_applications_plot_face_recognition.py’ | - | --- | --- | - -## 4.4.2\. 随机投影 - -模块: `random_projection` 提供了几种用于通过随机投影减少数据的工具. 请参阅文档的相关部分: [随机投影](random_projection.html#random-projection). - -**示例** - -* [The Johnson-Lindenstrauss bound for embedding with random projections](../auto_examples/plot_johnson_lindenstrauss_bound.html#sphx-glr-auto-examples-plot-johnson-lindenstrauss-bound-py) - -## 4.4.3\. 特征聚集 - -[`cluster.FeatureAgglomeration`](generated/sklearn.cluster.FeatureAgglomeration.html#sklearn.cluster.FeatureAgglomeration "sklearn.cluster.FeatureAgglomeration") 应用 [层次聚类](clustering.html#hierarchical-clustering) 将行为类似的特征分组在一起. - -**示例** - -* [Feature agglomeration vs. univariate selection](../auto_examples/cluster/plot_feature_agglomeration_vs_univariate_selection.html#sphx-glr-auto-examples-cluster-plot-feature-agglomeration-vs-univariate-selection-py) -* [Feature agglomeration](../auto_examples/cluster/plot_digits_agglomeration.html#sphx-glr-auto-examples-cluster-plot-digits-agglomeration-py) - -**特征缩放** - -请注意,如果功能具有明显不同的缩放或统计属性,则 [`cluster.FeatureAgglomeration`](generated/sklearn.cluster.FeatureAgglomeration.html#sklearn.cluster.FeatureAgglomeration "sklearn.cluster.FeatureAgglomeration") 可能无法捕获相关特征之间的关系.使用一个 [`preprocessing.StandardScaler`](generated/sklearn.preprocessing.StandardScaler.html#sklearn.preprocessing.StandardScaler "sklearn.preprocessing.StandardScaler") 可以在这些 设置中使用. \ No newline at end of file diff --git a/docs/0.19.x/61.md b/docs/0.19.x/61.md deleted file mode 100755 index f69c79750a8a8479e3c0f3adc88fbf4b7979b931..0000000000000000000000000000000000000000 --- a/docs/0.19.x/61.md +++ /dev/null @@ -1,102 +0,0 @@ -# 4.5\. 随机投影 - -校验者: -        [@FontTian](https://github.com/FontTian) -        [@程威](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@Sehriff](https://github.com/apachecn/scikit-learn-doc-zh) - -[`sklearn.random_projection`](classes.html#module-sklearn.random_projection "sklearn.random_projection") 模块实现了一个简单且高效率的计算方式来减少数据维度,通过牺牲一定的精度(作为附加变量)来加速处理时间及更小的模型尺寸。 这个模型实现了两类无结构化的随机矩阵: [Gaussian random matrix](#gaussian-random-matrix) 和 [sparse random matrix](#sparse-random-matrix). - -随机投影矩阵的维度和分布是受控制的,所以可以保存任意两个数据集的距离。因此随机投影适用于基于距离的方法。 - -参考: - -* Sanjoy Dasgupta. 2000. [Experiments with random projection.](http://cseweb.ucsd.edu/~dasgupta/papers/randomf.pdf) In Proceedings of the Sixteenth conference on Uncertainty in artificial intelligence (UAI‘00), Craig Boutilier and Moisés Goldszmidt (Eds.). Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 143-151. -* Ella Bingham and Heikki Mannila. 2001. [Random projection in dimensionality reduction: applications to image and text data.](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.24.5135&rep=rep1&type=pdf) In Proceedings of the seventh ACM SIGKDD international conference on Knowledge discovery and data mining (KDD ‘01). ACM, New York, NY, USA, 245-250. - -## 4.5.1\. Johnson-Lindenstrauss 辅助定理 - -支撑随机投影效率的主要理论成果是`Johnson-Lindenstrauss lemma (quoting Wikipedia) <[https://en.wikipedia.org/wiki/Johnson%E2%80%93Lindenstrauss_lemma](https://en.wikipedia.org/wiki/Johnson%E2%80%93Lindenstrauss_lemma)>`_: - -> 在数学中,johnson - lindenstrauss 引理是一种将高维的点从高维到低维欧几里得空间的低失真嵌入的方案。 引理阐释了高维空间下的一小部分的点集可以内嵌到非常低维的空间,这种方式下点之间的距离几乎全部被保留。 内嵌所用到的映射至少符合 Lipschitz 条件,甚至可以被当做正交投影。 - -有了样本数量, [`sklearn.random_projection.johnson_lindenstrauss_min_dim`](generated/sklearn.random_projection.johnson_lindenstrauss_min_dim.html#sklearn.random_projection.johnson_lindenstrauss_min_dim "sklearn.random_projection.johnson_lindenstrauss_min_dim") 会保守估计随机子空间的最小大小来保证随机投影导致的变形在一定范围内: - -```py ->>> from sklearn.random_projection import johnson_lindenstrauss_min_dim ->>> johnson_lindenstrauss_min_dim(n_samples=1e6, eps=0.5) -663 ->>> johnson_lindenstrauss_min_dim(n_samples=1e6, eps=[0.5, 0.1, 0.01]) -array([ 663, 11841, 1112658]) ->>> johnson_lindenstrauss_min_dim(n_samples=[1e4, 1e5, 1e6], eps=0.1) -array([ 7894, 9868, 11841])` - -``` - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_johnson_lindenstrauss_bound_0011.png](img/01024e528443374ebac4e8cb2f6dc463.jpg)](../auto_examples/plot_johnson_lindenstrauss_bound.html)[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_johnson_lindenstrauss_bound_0021.png](img/bc0cfc8c8661055fd60ca8e90b21d1dd.jpg)](../auto_examples/plot_johnson_lindenstrauss_bound.html) - -例子: - -* 查看 [The Johnson-Lindenstrauss bound for embedding with random projections](../auto_examples/plot_johnson_lindenstrauss_bound.html#sphx-glr-auto-examples-plot-johnson-lindenstrauss-bound-py) 里面有Johnson-Lindenstrauss引理的理论说明和使用稀疏随机矩阵的经验验证。 - -参考: - -* Sanjoy Dasgupta and Anupam Gupta, 1999. [An elementary proof of the Johnson-Lindenstrauss Lemma.](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.39.3334&rep=rep1&type=pdf) - -## 4.5.2\. 高斯随机投影 - -The [`sklearn.random_projection.GaussianRandomProjection`](generated/sklearn.random_projection.GaussianRandomProjection.html#sklearn.random_projection.GaussianRandomProjection "sklearn.random_projection.GaussianRandomProjection") 通过将原始输入空间投影到随机生成的矩阵(该矩阵的组件由以下分布中抽取) :math:[`](#id4)N(0, frac{1}{n_{components}})`降低维度。 - -以下小片段演示了任何使用高斯随机投影转换器: - -```py ->>> import numpy as np ->>> from sklearn import random_projection ->>> X = np.random.rand(100, 10000) ->>> transformer = random_projection.GaussianRandomProjection() ->>> X_new = transformer.fit_transform(X) ->>> X_new.shape -(100, 3947) - -``` - -## 4.5.3\. 稀疏随机矩阵 - -> [`sklearn.random_projection.SparseRandomProjection`](generated/sklearn.random_projection.SparseRandomProjection.html#sklearn.random_projection.SparseRandomProjection "sklearn.random_projection.SparseRandomProjection") 使用稀疏随机矩阵,通过投影原始输入空间来降低维度。 - -稀疏矩阵可以替换高斯随机投影矩阵来保证相似的嵌入质量,且内存利用率更高、投影数据的计算更快。 - -如果我们定义 `s = 1 / density`, 随机矩阵的元素由 - - -![\left\{ -\begin{array}{c c l} --\sqrt{\frac{s}{n_{\text{components}}}} & & 1 / 2s\\ -0 &\text{with probability} & 1 - 1 / s \\ -+\sqrt{\frac{s}{n_{\text{components}}}} & & 1 / 2s\\ -\end{array} -\right.](img/3e233cefc937a43bb4481dd23d728b54.jpg) - - -抽取。 - -其中 ![n_{\text{components}}](img/2f6a285b749960084841d17c3c97f2d7.jpg) 是投影后的子空间大小。 默认非零元素的浓密度设置为最小浓密度,该值由Ping Li et al.:推荐,根据公式:math:[`](#id7)1 / sqrt{n_{text{features}}}`计算。 - -以下小片段演示了如何使用稀疏随机投影转换器: - -```py ->>> import numpy as np ->>> from sklearn import random_projection ->>> X = np.random.rand(100,10000) ->>> transformer = random_projection.SparseRandomProjection() ->>> X_new = transformer.fit_transform(X) ->>> X_new.shape -(100, 3947) - -``` - -参考: - -* D. Achlioptas. 2003. [Database-friendly random projections: Johnson-Lindenstrauss with binary coins](www.cs.ucsc.edu/~optas/papers/jl.pdf). Journal of Computer and System Sciences 66 (2003) 671–687 -* Ping Li, Trevor J. Hastie, and Kenneth W. Church. 2006. [Very sparse random projections.](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.62.585&rep=rep1&type=pdf) In Proceedings of the 12th ACM SIGKDD international conference on Knowledge discovery and data mining (KDD ‘06). ACM, New York, NY, USA, 287-296. \ No newline at end of file diff --git a/docs/0.19.x/62.md b/docs/0.19.x/62.md deleted file mode 100755 index 7a993647e244cd2056e726c7fdd0b9de540348a5..0000000000000000000000000000000000000000 --- a/docs/0.19.x/62.md +++ /dev/null @@ -1,106 +0,0 @@ -# 4.6\. 内核近似 - -校验者: -        [@FontTian](https://github.com/FontTian) -        [@numpy](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@程威](https://github.com/apachecn/scikit-learn-doc-zh) - -这个子模块包含与某些 kernel 对应的特征映射的函数,这个会用于例如支持向量机的算法当中(see [支持向量机](svm.html#svm))。 下面这些特征函数对输入执行非线性转换,可以用于线性分类或者其他算法。 - -与 [kernel trick](https://en.wikipedia.org/wiki/Kernel_trick) 相比,近似的进行特征映射更适合在线学习,并能够有效 减少学习大量数据的内存开销。使用标准核技巧的 svm 不能有效的适用到海量数据,但是使用近似内核映射的方法,对于线性 SVM 来说效果可能更好。 而且,使用 [`SGDClassifier`](generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier "sklearn.linear_model.SGDClassifier") 进行近似的内核映射,使得对海量数据进行非线性学习也成为了可能。 - -由于近似嵌入的方法没有太多经验性的验证,所以建议将结果和使用精确的内核方法的结果进行比较。 - -See also - -[多项式回归:用基函数展开线性模型](linear_model.html#polynomial-regression) 用于精确的多项式变换。 - -## 4.6.1\. 内核近似的 Nystroem 方法 - -[`Nystroem`](generated/sklearn.kernel_approximation.Nystroem.html#sklearn.kernel_approximation.Nystroem "sklearn.kernel_approximation.Nystroem") 中实现了 Nystroem 方法用于低等级的近似核。它是通过采样 kernel 已经评估好的数据。默认情况下, [`Nystroem`](generated/sklearn.kernel_approximation.Nystroem.html#sklearn.kernel_approximation.Nystroem "sklearn.kernel_approximation.Nystroem") 使用 `rbf` kernel,但它可以使用任何内核函数和预计算内核矩阵. 使用的样本数量 - 计算的特征维数 - 由参数 `n_components` 给出. - -## 4.6.2\. 径向基函数内核 - -[`RBFSampler`](generated/sklearn.kernel_approximation.RBFSampler.html#sklearn.kernel_approximation.RBFSampler "sklearn.kernel_approximation.RBFSampler") 为径向基函数核构造一个近似映射,又称为 Random Kitchen Sinks [RR2007]. 在应用线性算法(例如线性 SVM )之前,可以使用此转换来明确建模内核映射: - -```py ->>> from sklearn.kernel_approximation import RBFSampler ->>> from sklearn.linear_model import SGDClassifier ->>> X = [[0, 0], [1, 1], [1, 0], [0, 1]] ->>> y = [0, 0, 1, 1] ->>> rbf_feature = RBFSampler(gamma=1, random_state=1) ->>> X_features = rbf_feature.fit_transform(X) ->>> clf = SGDClassifier() ->>> clf.fit(X_features, y) -SGDClassifier(alpha=0.0001, average=False, class_weight=None, epsilon=0.1, - eta0=0.0, fit_intercept=True, l1_ratio=0.15, - learning_rate='optimal', loss='hinge', max_iter=5, n_iter=None, - n_jobs=1, penalty='l2', power_t=0.5, random_state=None, - shuffle=True, tol=None, verbose=0, warm_start=False) ->>> clf.score(X_features, y) -1.0 - -``` - -这个映射依赖于内核值的 Monte Carlo 近似. `fit` 方法执行 Monte Carlo 采样,而该 `transform` 方法执行 数据的映射.由于过程的固有随机性,结果可能会在不同的 `fit` 函数调用之间变化。 - -该 `fit` 函数有两个参数: `n_components` 是特征变换的目标维数. `gamma` 是 RBF-kernel 的参数. `n_components` 越高,会导致更好的内核近似, 并且将产生与内核 SVM 产生的结果更相似的结果。请注意,”拟合” 特征函数实际上不取决于 `fit` 函数传递的数据。只有数据的维数被使用。 详情可以参考 [[RR2007]](#rr2007). - -对于给定的值 `n_components` [`RBFSampler`](generated/sklearn.kernel_approximation.RBFSampler.html#sklearn.kernel_approximation.RBFSampler "sklearn.kernel_approximation.RBFSampler") 在 [`Nystroem`](generated/sklearn.kernel_approximation.Nystroem.html#sklearn.kernel_approximation.Nystroem "sklearn.kernel_approximation.Nystroem") 中使用通常不太准确, 但是 [`RBFSampler`](generated/sklearn.kernel_approximation.RBFSampler.html#sklearn.kernel_approximation.RBFSampler "sklearn.kernel_approximation.RBFSampler") 使用更大的特征空间,更容易计算。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_kernel_approximation_0021.png](img/d90bb77f4f60c523c2bc041f768e8a49.jpg)](../auto_examples/plot_kernel_approximation.html) - -将精确的 RBF kernel (左) 与 approximation (右) 进行比较。 - -示例: - -* [Explicit feature map approximation for RBF kernels](../auto_examples/plot_kernel_approximation.html#sphx-glr-auto-examples-plot-kernel-approximation-py) - -## 4.6.3\. 加性卡方核 - -Additive Chi Squared Kernel (加性卡方核)是直方图的核心,通常用于计算机视觉。 - -这里使用的 Additive Chi Squared Kernel 给出 - -![k(x, y) = \sum_i \frac{2x_iy_i}{x_i+y_i}](img/bc7418a3ab8f749f1abd139faa96bee2.jpg) - -这个和 `sklearn.metrics.additive_chi2_kernel` 不完全一样.[VZ2010]_ 的作者喜欢上面的版本,因为它总是积极的。 由于这个 kernel 是可添加的,因此可以分别处理嵌入的 ![x_i](img/cf52655ee609af9f3c27c06448a5bf67.jpg). 这使得在规则的间隔类对傅里叶变换进行性才赢,代替近似的 Monte Carlo 采样。 - -> [`AdditiveChi2Sampler`](generated/sklearn.kernel_approximation.AdditiveChi2Sampler.html#sklearn.kernel_approximation.AdditiveChi2Sampler "sklearn.kernel_approximation.AdditiveChi2Sampler") 类实现了这个组件采样方法. 每个组件都被采样 ![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) 次,每一个输入维数都会产生 <cite>2n+1</cite> 维(来自傅立叶变换的实部和复数部分的两个数据段的倍数). 在文献中,![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) 经常取为 1 或者 2,将数据集转换为 `n_samples * 5 * n_features` 大小(在 ![n=2](img/b94b3a3837e7741f704e3b9b23ba0880.jpg) 的情况下 ). - -[`AdditiveChi2Sampler`](generated/sklearn.kernel_approximation.AdditiveChi2Sampler.html#sklearn.kernel_approximation.AdditiveChi2Sampler "sklearn.kernel_approximation.AdditiveChi2Sampler") 提供的近似特征映射可以和 [`RBFSampler`](generated/sklearn.kernel_approximation.RBFSampler.html#sklearn.kernel_approximation.RBFSampler "sklearn.kernel_approximation.RBFSampler") 提供的近似特征映射合并,得到一个取幂的 chi squared kerne。可以查看 [[VZ2010]](#vz2010) 和 [[VVZ2010]](#vvz2010) [`RBFSampler`](generated/sklearn.kernel_approximation.RBFSampler.html#sklearn.kernel_approximation.RBFSampler "sklearn.kernel_approximation.RBFSampler") 的合并. - -## 4.6.4\. Skewed Chi Squared Kernel (偏斜卡方核?暂译) - -skewed chi squared kernel 给出下面公式 - -![k(x,y) = \prod_i \frac{2\sqrt{x_i+c}\sqrt{y_i+c}}{x_i + y_i + 2c}](img/dd310c2fa94418ac4f4d12638444fd3b.jpg) - -它有和 指数卡方核 相似的属性,用于计算机视觉.但是允许进行简单的 蒙特卡洛 近似 的特征映射。 - -[`SkewedChi2Sampler`](generated/sklearn.kernel_approximation.SkewedChi2Sampler.html#sklearn.kernel_approximation.SkewedChi2Sampler "sklearn.kernel_approximation.SkewedChi2Sampler") 的使用和之前描述的 [`RBFSampler`](generated/sklearn.kernel_approximation.RBFSampler.html#sklearn.kernel_approximation.RBFSampler "sklearn.kernel_approximation.RBFSampler") 一样.唯一的区别是自由参数,称之为 ![c](img/d5c9a11453ea30a1be50a1034052bd6b.jpg). 这种映射和数学细节可以参考 [[LS2010]](#ls2010). - -## 4.6.5\. 数学方面的细节 - -核技巧 像支持向量机,或者 核化 PCA 依赖于 再生核希尔伯特空间(RKHS) 对于任何 核函数 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) (叫做 Mercer kernel),保证了 ![\phi](img/ff5e98366afa13070d3b410c55a80db1.jpg) 进入 希尔伯特空间 ![\mathcal{H}](img/433fedd575581cddbd612624b65e5dac.jpg) 的映射,例如: - -![k(x,y) = \langle \phi(x), \phi(y) \rangle](img/e56abe6d36f21c0c6dd22d2a84535415.jpg) - -![\langle \cdot, \cdot \rangle](img/e668ecc249e709e47f6955a74528bf7b.jpg) 是在 Hilbert space 中做内积. - -如果一个算法,例如线性支持向量机或者 PCA,依赖于数据集的数量级 ![x_i](img/cf52655ee609af9f3c27c06448a5bf67.jpg) ,可能会使用 ![k(x_i, x_j)](img/2b117c8d0556a027e7ee3bb265a6bf63.jpg) , 符合孙发的映射 ![\phi(x_i)](img/c03e9014ab434e11e9323f87908ed15e.jpg) . 使用 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 的优点在于 ![\phi](img/ff5e98366afa13070d3b410c55a80db1.jpg) 永远不会直接计算,允许大量的特征计算(甚至是无限的). - -kernel 方法的一个缺点是,在优化过程中有可能存储大量的 kernel 值 ![k(x_i, x_j)](img/2b117c8d0556a027e7ee3bb265a6bf63.jpg). 如果使用核函数的分类器应用于新的数据 ![y_j](img/8610705cf45aa68b12197abd65653479.jpg) , ![k(x_i, y_j)](img/1375f487efd6b9db955b7f7aafecc441.jpg) 需要计算用来做预测,训练集中的 ![x_i](img/cf52655ee609af9f3c27c06448a5bf67.jpg) 有可能有很多不同的。 - -这个子模块的这些类中允许嵌入 ![\phi](img/ff5e98366afa13070d3b410c55a80db1.jpg),从而明确的与 ![\phi(x_i)](img/c03e9014ab434e11e9323f87908ed15e.jpg) 一起工作, 这消除了使用 kernel 的需要和存储训练样本. - -参考: - -| [[RR2007]](#id3) | [“Random features for large-scale kernel machines”](http://www.robots.ox.ac.uk/~vgg/rg/papers/randomfeatures.pdf) Rahimi, A. and Recht, B. - Advances in neural information processing 2007, | - -| [[LS2010]](#id7) | [“Random Fourier approximations for skewed multiplicative histogram kernels”](http://www.maths.lth.se/matematiklth/personal/sminchis/papers/lis_dagm10.pdf) Random Fourier approximations for skewed multiplicative histogram kernels - Lecture Notes for Computer Sciencd (DAGM) | - -| [[VZ2010]](#id5) | [“Efficient additive kernels via explicit feature maps”](https://www.robots.ox.ac.uk/~vgg/publications/2011/Vedaldi11/vedaldi11.pdf) Vedaldi, A. and Zisserman, A. - Computer Vision and Pattern Recognition 2010 | - -| [[VVZ2010]](#id6) | [“Generalized RBF feature maps for Efficient Detection”](https://www.robots.ox.ac.uk/~vgg/publications/2010/Sreekanth10/sreekanth10.pdf) Vempati, S. and Vedaldi, A. and Zisserman, A. and Jawahar, CV - 2010 | \ No newline at end of file diff --git a/docs/0.19.x/63.md b/docs/0.19.x/63.md deleted file mode 100755 index 82e75ecddb4684537599ade49785a84431e8f7b2..0000000000000000000000000000000000000000 --- a/docs/0.19.x/63.md +++ /dev/null @@ -1,146 +0,0 @@ -# 4.7\. 成对的矩阵, 类别和核函数 - -校验者: -        [@FontTian](https://github.com/FontTian) -        [@numpy](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@程威](https://github.com/apachecn/scikit-learn-doc-zh) - -The [`sklearn.metrics.pairwise`](classes.html#module-sklearn.metrics.pairwise "sklearn.metrics.pairwise") 子模块实现了用于评估成对距离或样本集合之间的联系的实用程序。 - -本模块同时包含距离度量和核函数,对于这两者这里提供一个简短的总结。 - -距离度量是形如 `d(a, b)` 例如 `d(a, b) < d(a, c)` 如果对象 `a` 和 `b` 被认为 “更加相似” 相比于 `a` 和 `c`. 两个完全相同的目标的距离是零。最广泛使用的例子就是欧几里得距离。 为了保证是 ‘真实的’ 度量, 其必须满足以下条件: - -> 1. 对于所有的 a 和 b,d(a, b) >= 0 -> 2. 正定性:当且仅当 a = b时,d(a, b) == 0 -> 3. 对称性:d(a, b) == d(b, a) -> 4. 三角不等式:d(a, c) <= d(a, b) + d(b, c) - -核函数是相似度的标准. 如果对象 `a` 和 `b` 被认为 “更加相似” 相比对象 `a` 和 `c`,那么 `s(a, b) > s(a, c)`. 核函数必须是半正定性的. - -存在许多种方法将距离度量转换为相似度标准,例如核函数。 假定 `D` 是距离, and `S` 是核函数: - -> 1. `S = np.exp(-D * gamma)`, 其中 `gamma` 的一种选择是 `1 / num_features` -> 2. `S = 1. / (D / np.max(D))` - -## 4.7.1\. 余弦相似度 - -[`cosine_similarity`](generated/sklearn.metrics.pairwise.cosine_similarity.html#sklearn.metrics.pairwise.cosine_similarity "sklearn.metrics.pairwise.cosine_similarity") 计算L2正则化的向量的点积. 也就是说, if ![x](img/5c82dbae35dc43d2f556f9f284d9d184.jpg) 和 ![y](img/0775c03fc710a24df297dedcec515aaf.jpg) 都是行向量,, 它们的余弦相似度 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 定义为: - -![k(x, y) = \frac{x y^\top}{\|x\| \|y\|}](img/e5b3516a2cd7fbf2916643478e0bed70.jpg) - -这被称为余弦相似度, 因为欧几里得(L2) 正则化将向量投影到单元球面内,那么它们的点积就是被向量表示的点之间的角度。 - -这种核函数对于计算以tf-idf向量表示的文档之间的相似度是一个通常的选择. [`cosine_similarity`](generated/sklearn.metrics.pairwise.cosine_similarity.html#sklearn.metrics.pairwise.cosine_similarity "sklearn.metrics.pairwise.cosine_similarity") 接受 `scipy.sparse` 矩阵. (注意到 `sklearn.feature_extraction.text` 中的tf-idf函数能计算归一化的向量,在这种情况下 [`cosine_similarity`](generated/sklearn.metrics.pairwise.cosine_similarity.html#sklearn.metrics.pairwise.cosine_similarity "sklearn.metrics.pairwise.cosine_similarity") 等同于 [`linear_kernel`](generated/sklearn.metrics.pairwise.linear_kernel.html#sklearn.metrics.pairwise.linear_kernel "sklearn.metrics.pairwise.linear_kernel"), 只是慢一点而已.) - -References: - -* C.D. Manning, P. Raghavan and H. Schütze (2008). Introduction to Information Retrieval. Cambridge University Press. [http://nlp.stanford.edu/IR-book/html/htmledition/the-vector-space-model-for-scoring-1.html](http://nlp.stanford.edu/IR-book/html/htmledition/the-vector-space-model-for-scoring-1.html) - -## 4.7.2\. 线性核函数 - -函数 [`linear_kernel`](generated/sklearn.metrics.pairwise.linear_kernel.html#sklearn.metrics.pairwise.linear_kernel "sklearn.metrics.pairwise.linear_kernel") 是计算线性核函数, 也就是一种在 `degree=1` 和 `coef0=0` (同质化) 情况下的 [`polynomial_kernel`](generated/sklearn.metrics.pairwise.polynomial_kernel.html#sklearn.metrics.pairwise.polynomial_kernel "sklearn.metrics.pairwise.polynomial_kernel") 的特殊形式. 如果 `x` 和 `y` 是列向量, 它们的线性核函数是: - -![k(x, y) = x^\top y](img/adc60d285d73d89dac7cb76f51617e64.jpg) - -## 4.7.3\. 多项式核函数 - -```py -函数 计算两个向量的d次方的多项式核函数. 多项式核函数代表着两个向量之间的相似度. -``` - -概念上来说,多项式核函数不仅考虑相同维度还考虑跨维度的向量的相似度。当被用在机器学习中的时候,这可以原来代表着特征之间的 相互作用。 - -多项式函数定义为: - -![k(x, y) = (\gamma x^\top y +c_0)^d](img/5b87e1a1b34a0ac402ef602b152ee2f9.jpg) - -其中: - -> * `x`, `y` 是输入向量 -> * `d` 核函数维度 - -如果 ![c_0 = 0](img/c95237387255f824359f6c772cbb1df0.jpg) 那么核函数就被定义为同质化的. - -## 4.7.4\. Sigmoid 核函数 - -函数 [`sigmoid_kernel`](generated/sklearn.metrics.pairwise.sigmoid_kernel.html#sklearn.metrics.pairwise.sigmoid_kernel "sklearn.metrics.pairwise.sigmoid_kernel") 计算两个向量之间的S型核函数. S型核函数也被称为双曲切线或者 多层感知机(因为在神经网络领域,它经常被当做激活函数). S型核函数定义为: - -![k(x, y) = \tanh( \gamma x^\top y + c_0)](img/11265c80ea298a58e0a1010736d28b38.jpg) - -where: - -> * `x`, `y` 是输入向量 -> * ![\gamma](img/6552bde3d3999c1a9728016416932af7.jpg) 是斜度 -> * ![c_0](img/64ccaf1b6c08784a30158f809c081987.jpg) 是截距 - -## 4.7.5\. RBF 核函数 - -函数 [`rbf_kernel`](generated/sklearn.metrics.pairwise.rbf_kernel.html#sklearn.metrics.pairwise.rbf_kernel "sklearn.metrics.pairwise.rbf_kernel") 计算计算两个向量之间的径向基函数核 (RBF) 。 其定义为: - -![k(x, y) = \exp( -\gamma \| x-y \|^2)](img/a35122280170c396ab3c9d8fa3b62446.jpg) - -其中 `x` 和 `y` 是输入向量. 如果 ![\gamma = \sigma^{-2}](img/11336a74b43f75a360b60ce81f9cbdc0.jpg) 核函数就变成方差为 ![\sigma^2](img/d69db8c22e9315a6fb454b276d5ce534.jpg) 的高斯核函数. - -## 4.7.6\. 拉普拉斯核函数 - -函数 [`laplacian_kernel`](generated/sklearn.metrics.pairwise.laplacian_kernel.html#sklearn.metrics.pairwise.laplacian_kernel "sklearn.metrics.pairwise.laplacian_kernel") 是一种径向基函数核的变体,定义为: - -![k(x, y) = \exp( -\gamma \| x-y \|_1)](img/99dfcad081b3f6e1f4648a9f7d24f103.jpg) - -其中 `x` 和 `y` 是输入向量 并且 ![\|x-y\|_1](img/b3ea6ae2442e72f261f037571e580979.jpg) 是输入向量之间的曼哈顿距离. - -已被证明在机器学习中运用到无噪声数据中是有用的. 可见例如 [Machine learning for quantum mechanics in a nutshell](http://onlinelibrary.wiley.com/doi/10.1002/qua.24954/abstract/). - -## 4.7.7\. 卡方核函数 - -```py -在计算机视觉应用中训练非线性支持向量机时,卡方核函数是一种非常流行的选择. -``` - -它能以 [`chi2_kernel`](generated/sklearn.metrics.pairwise.chi2_kernel.html#sklearn.metrics.pairwise.chi2_kernel "sklearn.metrics.pairwise.chi2_kernel") 计算然后将参数 [``](#id7)kernel=”precomputed”[``](#id9)传递到 - -[`sklearn.svm.SVC`](generated/sklearn.svm.SVC.html#sklearn.svm.SVC "sklearn.svm.SVC") : - -```py ->>> from sklearn.svm import SVC ->>> from sklearn.metrics.pairwise import chi2_kernel ->>> X = [[0, 1], [1, 0], [.2, .8], [.7, .3]] ->>> y = [0, 1, 0, 1] ->>> K = chi2_kernel(X, gamma=.5) ->>> K -array([[ 1\. , 0.36..., 0.89..., 0.58...], - [ 0.36..., 1\. , 0.51..., 0.83...], - [ 0.89..., 0.51..., 1\. , 0.77... ], - [ 0.58..., 0.83..., 0.77... , 1\. ]]) - -``` - -```py ->>> svm = SVC(kernel='precomputed').fit(K, y) ->>> svm.predict(K) -array([0, 1, 0, 1]) - -``` - -也可以直接使用 `kernel` 变量: - -```py ->>> svm = SVC(kernel=chi2_kernel).fit(X, y) ->>> svm.predict(X) -array([0, 1, 0, 1]) - -``` - -卡方核函数定义为 - -![k(x, y) = \exp \left (-\gamma \sum_i \frac{(x[i] - y[i]) ^ 2}{x[i] + y[i]} \right )](img/33b1cdc0654561cadac36a1232552b99.jpg) - -数据假定为非负的,并且已经以L1正则化。 归一化随着与卡方平方距离的连接而被合理化,其是离散概率分布之间的距离。 - -卡方核函数最常用于可视化词汇的矩形图。 - -参考: - -* Zhang, J. and Marszalek, M. and Lazebnik, S. and Schmid, C. Local features and kernels for classification of texture and object categories: A comprehensive study International Journal of Computer Vision 2007 [http://research.microsoft.com/en-us/um/people/manik/projects/trade-off/papers/ZhangIJCV06.pdf](http://research.microsoft.com/en-us/um/people/manik/projects/trade-off/papers/ZhangIJCV06.pdf) \ No newline at end of file diff --git a/docs/0.19.x/64.md b/docs/0.19.x/64.md deleted file mode 100755 index 3e2c7b9396ccbc79f5ff74f55340ffd1f83ffc87..0000000000000000000000000000000000000000 --- a/docs/0.19.x/64.md +++ /dev/null @@ -1,69 +0,0 @@ -# 4.8\. 预测目标 (`y`) 的转换 - -校验者: -        [@FontTian](https://github.com/FontTian) -        [@numpy](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@程威](https://github.com/apachecn/scikit-learn-doc-zh) - -## 4.8.1\. 标签二值化 - -[`LabelBinarizer`](generated/sklearn.preprocessing.LabelBinarizer.html#sklearn.preprocessing.LabelBinarizer "sklearn.preprocessing.LabelBinarizer") 是一个用来从多类别列表创建标签矩阵的工具类: - -```py ->>> from sklearn import preprocessing ->>> lb = preprocessing.LabelBinarizer() ->>> lb.fit([1, 2, 6, 4, 2]) -LabelBinarizer(neg_label=0, pos_label=1, sparse_output=False) ->>> lb.classes_ -array([1, 2, 4, 6]) ->>> lb.transform([1, 6]) -array([[1, 0, 0, 0], - [0, 0, 0, 1]]) - -``` - -对于多类别是实例,可以使用 [`MultiLabelBinarizer`](generated/sklearn.preprocessing.MultiLabelBinarizer.html#sklearn.preprocessing.MultiLabelBinarizer "sklearn.preprocessing.MultiLabelBinarizer"): - -```py ->>> lb = preprocessing.MultiLabelBinarizer() ->>> lb.fit_transform([(1, 2), (3,)]) -array([[1, 1, 0], - [0, 0, 1]]) ->>> lb.classes_ -array([1, 2, 3]) - -``` - -## 4.8.2\. 标签编码 - -[`LabelEncoder`](generated/sklearn.preprocessing.LabelEncoder.html#sklearn.preprocessing.LabelEncoder "sklearn.preprocessing.LabelEncoder") 是一个可以用来将标签规范化的工具类,它可以将标签的编码值范围限定在[0,n_classes-1]. 这在编写高效的Cython程序时是非常有用的. [`LabelEncoder`](generated/sklearn.preprocessing.LabelEncoder.html#sklearn.preprocessing.LabelEncoder "sklearn.preprocessing.LabelEncoder") 可以如下使用: - -```py ->>> from sklearn import preprocessing ->>> le = preprocessing.LabelEncoder() ->>> le.fit([1, 2, 2, 6]) -LabelEncoder() ->>> le.classes_ -array([1, 2, 6]) ->>> le.transform([1, 1, 2, 6]) -array([0, 0, 1, 2]) ->>> le.inverse_transform([0, 0, 1, 2]) -array([1, 1, 2, 6]) - -``` - -当然,它也可以用于非数值型标签的编码转换成数值标签(只要它们是可哈希并且可比较的): - -```py ->>> le = preprocessing.LabelEncoder() ->>> le.fit(["paris", "paris", "tokyo", "amsterdam"]) -LabelEncoder() ->>> list(le.classes_) -['amsterdam', 'paris', 'tokyo'] ->>> le.transform(["tokyo", "tokyo", "paris"]) -array([2, 2, 1]) ->>> list(le.inverse_transform([2, 2, 1])) -['tokyo', 'tokyo', 'paris'] - -``` \ No newline at end of file diff --git a/docs/0.19.x/65.md b/docs/0.19.x/65.md deleted file mode 100755 index 18907618b90f57ff783624595c2f130b782083ad..0000000000000000000000000000000000000000 --- a/docs/0.19.x/65.md +++ /dev/null @@ -1,930 +0,0 @@ -# 5\. 数据集加载工具 - -校验者: -        [@不吃曲奇的趣多多](https://github.com/apachecn/scikit-learn-doc-zh) -        [@A](https://github.com/apachecn/scikit-learn-doc-zh) -        [@火星](https://github.com/apachecn/scikit-learn-doc-zh) -        [@Trembleguy](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@cowboy](https://github.com/apachecn/scikit-learn-doc-zh) -        [@peels](https://github.com/apachecn/scikit-learn-doc-zh) -        [@t9UhoI](https://github.com/apachecn/scikit-learn-doc-zh) -        [@Sun](https://github.com/apachecn/scikit-learn-doc-zh) - -该 `sklearn.datasets` 包装在 [Getting Started](../tutorial/basic/tutorial.html#loading-example-dataset) 部分中嵌入了介绍一些小型玩具的数据集。 - -为了在控制数据的统计特性(通常是特征的 correlation (相关性)和 informativeness (信息性))的同时评估数据集 (`n_samples` 和 `n_features`) 的规模的影响,也可以生成综合数据。 - -这个软件包还具有帮助用户获取更大的数据集的功能,这些数据集通常由机器学习社区使用,用于对来自 ‘real world’ 的数据进行检测算法。 - -## 5.1\. 通用数据集 API - -对于不同类型的数据集,有三种不同类型的数据集接口。最简单的是样品图像的界面,下面在 [样本图片](#sample-images) 部分中进行了描述。 - -数据集生成函数和 svmlight 加载器分享了一个较为简化的接口,返回一个由 `n_samples` * `n_features` 组成的 tuple `(X, y)` 其中的 `X` 是 numpy 数组 `y` 是包含目标值的长度为 `n_samples` 的数组 - -玩具数据集以及 ‘real world’ 数据集和从 mldata.org 获取的数据集具有更复杂的结构。这些函数返回一个类似于字典的对象包含至少两项:一个具有 `data` 键(key)的 `n_samples` * `n_features` 形状的数组(除了20个新组之外except for 20newsgroups)和一个具有 `target` 键(key)的包含 target values (目标值)的 `n_samples` 长度的 numpy 数组。 - -数据集还包含一些对``DESCR`` 描述,同时一部分也包含 `feature_names` 和 [``](#id2)target_names``的特征。有关详细信息,请参阅下面的数据集说明 - -## 5.2\. 玩具数据集 - -scikit-learn 内置有一些小型标准数据集,不需要从某个外部网站下载任何文件。 - -| [`load_boston`](../modules/generated/sklearn.datasets.load_boston.html#sklearn.datasets.load_boston "sklearn.datasets.load_boston")([return_X_y]) | Load and return the boston house-prices dataset (regression). | -| [`load_iris`](../modules/generated/sklearn.datasets.load_iris.html#sklearn.datasets.load_iris "sklearn.datasets.load_iris")([return_X_y]) | Load and return the iris dataset (classification). | -| [`load_diabetes`](../modules/generated/sklearn.datasets.load_diabetes.html#sklearn.datasets.load_diabetes "sklearn.datasets.load_diabetes")([return_X_y]) | Load and return the diabetes dataset (regression). | -| [`load_digits`](../modules/generated/sklearn.datasets.load_digits.html#sklearn.datasets.load_digits "sklearn.datasets.load_digits")([n_class, return_X_y]) | Load and return the digits dataset (classification). | -| [`load_linnerud`](../modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud "sklearn.datasets.load_linnerud")([return_X_y]) | Load and return the linnerud dataset (multivariate regression). | -| [`load_wine`](../modules/generated/sklearn.datasets.load_wine.html#sklearn.datasets.load_wine "sklearn.datasets.load_wine")([return_X_y]) | Load and return the wine dataset (classification). | -| [`load_breast_cancer`](../modules/generated/sklearn.datasets.load_breast_cancer.html#sklearn.datasets.load_breast_cancer "sklearn.datasets.load_breast_cancer")([return_X_y]) | Load and return the breast cancer wisconsin dataset (classification). | - -这些数据集有助于快速说明在 scikit 中实现的各种算法的行为。然而,它们数据规模往往太小,无法代表真实世界的机器学习任务。 - -## 5.3\. 样本图片 - -scikit 在通过图片的作者共同授权下嵌入了几个样本 JPEG 图片。这些图像为了方便用户对 test algorithms (测试算法)和 pipeline on 2D data (二维数据管道)进行测试。 - -| [`load_sample_images`](../modules/generated/sklearn.datasets.load_sample_images.html#sklearn.datasets.load_sample_images "sklearn.datasets.load_sample_images")() | Load sample images for image manipulation. | -| [`load_sample_image`](../modules/generated/sklearn.datasets.load_sample_image.html#sklearn.datasets.load_sample_image "sklearn.datasets.load_sample_image")(image_name) | Load the numpy array of a single sample image | - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_color_quantization_0011.png](img/f94e86205401e8da73308b60aa64b05b.jpg)](../auto_examples/cluster/plot_color_quantization.html) - -默认编码的图像是基于 `uint8` dtype 到空闲内存。通常,如果把输入转换为浮点数表示,机器学习算法的效果最好。另外,如果你计划使用 `matplotlib.pyplpt.imshow` 别忘了尺度范围 0 - 1,如下面的示例所做的。 - -示例: - -* [Color Quantization using K-Means](../auto_examples/cluster/plot_color_quantization.html#sphx-glr-auto-examples-cluster-plot-color-quantization-py) - -## 5.4\. 样本生成器 - -此外,scikit-learn 包括各种随机样本的生成器,可以用来建立可控制的大小和复杂性人工数据集。 - -### 5.4.1\. 分类和聚类生成器 - -这些生成器将产生一个相应特征的离散矩阵。 - -#### 5.4.1.1\. 单标签 - -[`make_blobs`](../modules/generated/sklearn.datasets.make_blobs.html#sklearn.datasets.make_blobs "sklearn.datasets.make_blobs") 和 [`make_classification`](../modules/generated/sklearn.datasets.make_classification.html#sklearn.datasets.make_classification "sklearn.datasets.make_classification") 通过分配每个类的一个或多个正态分布的点的群集创建的多类数据集。 [`make_blobs`](../modules/generated/sklearn.datasets.make_blobs.html#sklearn.datasets.make_blobs "sklearn.datasets.make_blobs") 对于中心和各簇的标准偏差提供了更好的控制,可用于演示聚类。 [`make_classification`](../modules/generated/sklearn.datasets.make_classification.html#sklearn.datasets.make_classification "sklearn.datasets.make_classification") 专门通过引入相关的,冗余的和未知的噪音特征;将高斯集群的每类复杂化;在特征空间上进行线性变换。 - -[`make_gaussian_quantiles`](../modules/generated/sklearn.datasets.make_gaussian_quantiles.html#sklearn.datasets.make_gaussian_quantiles "sklearn.datasets.make_gaussian_quantiles") 将single Gaussian cluster (单高斯簇)分成近乎相等大小的同心超球面分离。 [`make_hastie_10_2`](../modules/generated/sklearn.datasets.make_hastie_10_2.html#sklearn.datasets.make_hastie_10_2 "sklearn.datasets.make_hastie_10_2") 产生类似的二进制、10维问题。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_random_dataset_0011.png](img/c3e91e4b6783eb9fe281bc3e2e29aaea.jpg)](../auto_examples/datasets/plot_random_dataset.html) - -[`make_circles`](../modules/generated/sklearn.datasets.make_circles.html#sklearn.datasets.make_circles "sklearn.datasets.make_circles") and :func:[`](#id9)make_moons`生成二维分类数据集时可以帮助确定算法(如质心聚类或线性分类),包括可以选择性加入高斯噪声。它们有利于可视化。用球面决策边界对高斯数据生成二值分类。 - -#### 5.4.1.2\. 多标签 - -[`make_multilabel_classification`](../modules/generated/sklearn.datasets.make_multilabel_classification.html#sklearn.datasets.make_multilabel_classification "sklearn.datasets.make_multilabel_classification") 生成多个标签的随机样本,反映从a mixture of topics(一个混合的主题)中引用a bag of words (一个词袋)。每个文档的主题数是基于泊松分布随机提取的,同时主题本身也是从固定的随机分布中提取的。同样地,单词的数目是基于泊松分布提取的,单词通过多项式被抽取,其中每个主题定义了单词的概率分布。在以下方面真正简化了 bag-of-words mixtures (单词混合包): - -* 独立绘制的每个主题词分布,在现实中,所有这些都会受到稀疏基分布的影响,并将相互关联。 -* 对于从文档中生成多个主题,所有主题在生成单词包时都是同等权重的。 -* 随机产生没有标签的文件,而不是基于分布(base distribution)来产生文档 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_random_multilabel_dataset_0011.png](img/69be855df457ccfee81f59ace2595a23.jpg)](../auto_examples/datasets/plot_random_multilabel_dataset.html) - -#### 5.4.1.3\. 二分聚类 - -| [`make_biclusters`](../modules/generated/sklearn.datasets.make_biclusters.html#sklearn.datasets.make_biclusters "sklearn.datasets.make_biclusters")(shape, n_clusters[, noise, …]) | Generate an array with constant block diagonal structure for biclustering. | -| [`make_checkerboard`](../modules/generated/sklearn.datasets.make_checkerboard.html#sklearn.datasets.make_checkerboard "sklearn.datasets.make_checkerboard")(shape, n_clusters[, …]) | Generate an array with block checkerboard structure for biclustering. | - -### 5.4.2\. 回归生成器 - -[`make_regression`](../modules/generated/sklearn.datasets.make_regression.html#sklearn.datasets.make_regression "sklearn.datasets.make_regression") 产生的回归目标作为一个可选择的稀疏线性组合的具有噪声的随机的特征。它的信息特征可能是不相关的或低秩(少数特征占大多数的方差)。 - -其他回归生成器产生确定性的随机特征函数。 [`make_sparse_uncorrelated`](../modules/generated/sklearn.datasets.make_sparse_uncorrelated.html#sklearn.datasets.make_sparse_uncorrelated "sklearn.datasets.make_sparse_uncorrelated") 产生目标为一个有四个固定系数的线性组合。其他编码明确的非线性关系:[`make_friedman1`](../modules/generated/sklearn.datasets.make_friedman1.html#sklearn.datasets.make_friedman1 "sklearn.datasets.make_friedman1") 与多项式和正弦相关变换相联系; [`make_friedman2`](../modules/generated/sklearn.datasets.make_friedman2.html#sklearn.datasets.make_friedman2 "sklearn.datasets.make_friedman2") 包括特征相乘与交互; [`make_friedman3`](../modules/generated/sklearn.datasets.make_friedman3.html#sklearn.datasets.make_friedman3 "sklearn.datasets.make_friedman3") 类似与对目标的反正切变换。 - -### 5.4.3\. 流形学习生成器 - -| [`make_s_curve`](../modules/generated/sklearn.datasets.make_s_curve.html#sklearn.datasets.make_s_curve "sklearn.datasets.make_s_curve")([n_samples, noise, random_state]) | Generate an S curve dataset. | -| [`make_swiss_roll`](../modules/generated/sklearn.datasets.make_swiss_roll.html#sklearn.datasets.make_swiss_roll "sklearn.datasets.make_swiss_roll")([n_samples, noise, random_state]) | Generate a swiss roll dataset. | - -### 5.4.4\. 生成器分解 - -| [`make_low_rank_matrix`](../modules/generated/sklearn.datasets.make_low_rank_matrix.html#sklearn.datasets.make_low_rank_matrix "sklearn.datasets.make_low_rank_matrix")([n_samples, …]) | Generate a mostly low rank matrix with bell-shaped singular values | -| [`make_sparse_coded_signal`](../modules/generated/sklearn.datasets.make_sparse_coded_signal.html#sklearn.datasets.make_sparse_coded_signal "sklearn.datasets.make_sparse_coded_signal")(n_samples, …[, …]) | Generate a signal as a sparse combination of dictionary elements. | -| [`make_spd_matrix`](../modules/generated/sklearn.datasets.make_spd_matrix.html#sklearn.datasets.make_spd_matrix "sklearn.datasets.make_spd_matrix")(n_dim[, random_state]) | Generate a random symmetric, positive-definite matrix. | -| [`make_sparse_spd_matrix`](../modules/generated/sklearn.datasets.make_sparse_spd_matrix.html#sklearn.datasets.make_sparse_spd_matrix "sklearn.datasets.make_sparse_spd_matrix")([dim, alpha, …]) | Generate a sparse symmetric definite positive matrix. | - -## 5.5\. Datasets in svmlight / libsvm format - -scikit-learn 中有加载svmlight / libsvm格式的数据集的功能函数。此种格式中,每行 采用如 `<label> <feature-id>:<feature-value><feature-id>:<feature-value> ...` 的形式。这种格式尤其适合稀疏数据集,在该模块中,数据集 `X` 使用的是scipy稀疏CSR矩阵, 特征集 `y` 使用的是numpy数组。 - -你可以通过如下步骤加载数据集: - -```py ->>> from sklearn.datasets import load_svmlight_file ->>> X_train, y_train = load_svmlight_file("/path/to/train_dataset.txt") -... - -``` - -你也可以一次加载两个或多个的数据集: - -```py ->>> X_train, y_train, X_test, y_test = load_svmlight_files( -... ("/path/to/train_dataset.txt", "/path/to/test_dataset.txt")) -... - -``` - -这种情况下,保证了 `X_train` 和 `X_test` 具有相同的特征数量。 固定特征的数量也可以得到同样的结果: - -```py ->>> X_test, y_test = load_svmlight_file( -... "/path/to/test_dataset.txt", n_features=X_train.shape[1]) -... - -``` - -相关链接: - -svmlight / libsvm 格式的公共数据集: [https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets](https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets) - -更快的API兼容的实现: [https://github.com/mblondel/svmlight-loader](https://github.com/mblondel/svmlight-loader) - -## 5.6\. 从外部数据集加载 - -scikit-learn使用任何存储为numpy数组或者scipy稀疏数组的数值数据。 其他可以转化成数值数组的类型也可以接受,如pandas中的DataFrame。 - -以下推荐一些将标准纵列形式的数据转换为scikit-learn可以使用的格式的方法: - -* [pandas.io](https://pandas.pydata.org/pandas-docs/stable/io.html) 提供了从常见格式(包括CSV,Excel,JSON,SQL等)中读取数据的工具.DateFrame 也可以从由 元组或者字典组成的列表构建而成.Pandas能顺利的处理异构的数据,并且提供了处理和转换 成方便scikit-learn使用的数值数据的工具。 -* [scipy.io](https://docs.scipy.org/doc/scipy/reference/io.html) 专门处理科学计算领域经常使用的二进制格式,例如.mat和.arff格式的内容。 -* [numpy/routines.io](https://docs.scipy.org/doc/numpy/reference/routines.io.html) 将纵列形式的数据标准的加载为numpy数组 -* scikit-learn的 :func:[`](#id18)datasets.load_svmlight_file`处理svmlight或者libSVM稀疏矩阵 -* scikit-learn的 `datasets.load_files` 处理文本文件组成的目录,每个目录名是每个 类别的名称,每个目录内的每个文件对应该类别的一个样本 - -对于一些杂项数据,例如图像,视屏,音频。您可以参考: - -* [skimage.io](http://scikit-image.org/docs/dev/api/skimage.io.html) 或 [Imageio](https://imageio.readthedocs.io/en/latest/userapi.html) 将图像或者视屏加载为numpy数组 -* [scipy.misc.imread](https://docs.scipy.org/doc/scipy/reference/generated/scipy.misc.imread.html#scipy.misc.imread) (requires the [Pillow](https://pypi.python.org/pypi/Pillow) package)将各种图像文件格式加载为 像素灰度数据 -* [scipy.io.wavfile.read](https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.io.wavfile.read.html) 将WAV文件读入一个numpy数组 - -存储为字符串的无序(或者名字)特征(在pandas的DataFrame中很常见)需要转换为整数,当整数类别变量 被编码成独热变量([`sklearn.preprocessing.OneHotEncoder`](../modules/generated/sklearn.preprocessing.OneHotEncoder.html#sklearn.preprocessing.OneHotEncoder "sklearn.preprocessing.OneHotEncoder"))或类似数据时,它或许可以被最好的利用。 参见 [预处理数据](../modules/preprocessing.html#preprocessing). - -注意:如果你要管理你的数值数据,建议使用优化后的文件格式来减少数据加载时间,例如HDF5。像 H5Py, PyTables和pandas等的各种库提供了一个Python接口,来读写该格式的数据。 - -## 5.7\. Olivetti 脸部数据集 - -该数据集包含 1992年4月至1994年4月在AT&T实验室剑桥采集的一组面部图像。 该 [`sklearn.datasets.fetch_olivetti_faces`](../modules/generated/sklearn.datasets.fetch_olivetti_faces.html#sklearn.datasets.fetch_olivetti_faces "sklearn.datasets.fetch_olivetti_faces") 函数是从AT&T下载 数据存档的数据获取/缓存函数。 - -```py -如原网站所述: -``` - -有四十个不同的个体,每个个体有十张不同的图片。对于某些个体,图像在不同时间拍摄并且改变 照明和面部表情(睁开/闭上眼睛, 微小/不微笑)和面部细节(戴眼镜/不带眼镜)。所有的图像采用 黑色均匀的背景,个体处于直立的正面位置。(容许一定的侧移) - -图像被量化为256个的灰度级并以8位无符号整数的形式存储;加载器将这些无符号整数转换为[0,1]之间 的浮点值,这样能方面很多算法的使用。 - -该数据库的”目标”一个是从0到39的整数,代表着图中人物的身份。然而,由于每一类只有十个样例,从 无监督学习或半监督学习的角度来看,这个相对较小的数据集更加有趣。 - -原始的数据集由92 x 112大小的图像组成,然而这里提供的版本由64 x 64大小的图像组成。 - -当使用这些图像时, 请致谢AT&T剑桥实验室。 - -## 5.8\. 20个新闻组文本数据集 - -20个新闻组文本数据集包含有关20个主题的大约18000个新闻组,被分为两个子集:一个用于 训练(或者开发),另一个用于测试(或者用于性能评估)。训练和测试集的划分是基于某个特定日期 前后发布的消息。 - -这个模块包含两个加载器。第一个是 [`sklearn.datasets.fetch_20newsgroups`](../modules/generated/sklearn.datasets.fetch_20newsgroups.html#sklearn.datasets.fetch_20newsgroups "sklearn.datasets.fetch_20newsgroups"), 返回一个能够被文本特征提取器接受的原始文本列表,例如 [`sklearn.feature_extraction.text.CountVectorizer`](../modules/generated/sklearn.feature_extraction.text.CountVectorizer.html#sklearn.feature_extraction.text.CountVectorizer "sklearn.feature_extraction.text.CountVectorizer") 使用自定义的参数来提取特征向量。第二个是 [`sklearn.datasets.fetch_20newsgroups_vectorized`](../modules/generated/sklearn.datasets.fetch_20newsgroups_vectorized.html#sklearn.datasets.fetch_20newsgroups_vectorized "sklearn.datasets.fetch_20newsgroups_vectorized"), 返回即用特征,换句话说就是,这样就没必要使用特征提取器了。 - -### 5.8.1\. 用法 - -> [`sklearn.datasets.fetch_20newsgroups`](../modules/generated/sklearn.datasets.fetch_20newsgroups.html#sklearn.datasets.fetch_20newsgroups "sklearn.datasets.fetch_20newsgroups") 是一个用于从原始的20个新闻组网址( [20 newsgroups website](http://people.csail.mit.edu/jrennie/20Newsgroups/)) - -下载数据归档的数据获取/缓存函数,提取 `~/scikit_learn_data/20news_home` 文件夹中的 归档内容。并且在训练集或测试集文件夹,或者两者上调用函数 [`sklearn.datasets.load_files`](../modules/generated/sklearn.datasets.load_files.html#sklearn.datasets.load_files "sklearn.datasets.load_files"): - -```py ->>> from sklearn.datasets import fetch_20newsgroups ->>> newsgroups_train = fetch_20newsgroups(subset='train') - ->>> from pprint import pprint ->>> pprint(list(newsgroups_train.target_names)) -['alt.atheism', - 'comp.graphics', - 'comp.os.ms-windows.misc', - 'comp.sys.ibm.pc.hardware', - 'comp.sys.mac.hardware', - 'comp.windows.x', - 'misc.forsale', - 'rec.autos', - 'rec.motorcycles', - 'rec.sport.baseball', - 'rec.sport.hockey', - 'sci.crypt', - 'sci.electronics', - 'sci.med', - 'sci.space', - 'soc.religion.christian', - 'talk.politics.guns', - 'talk.politics.mideast', - 'talk.politics.misc', - 'talk.religion.misc'] - -``` - -真实数据在属性 `filenames` 和 `target` 中,target属性就是类别的整数索引: - -```py ->>> newsgroups_train.filenames.shape -(11314,) ->>> newsgroups_train.target.shape -(11314,) ->>> newsgroups_train.target[:10] -array([12, 6, 9, 8, 6, 7, 9, 2, 13, 19]) - -``` - -可以通过将类别列表传给 [`sklearn.datasets.fetch_20newsgroups`](../modules/generated/sklearn.datasets.fetch_20newsgroups.html#sklearn.datasets.fetch_20newsgroups "sklearn.datasets.fetch_20newsgroups") 函数来实现只加载一部分的类别: - -```py ->>> cats = ['alt.atheism', 'sci.space'] ->>> newsgroups_train = fetch_20newsgroups(subset='train', categories=cats) ->>> list(newsgroups_train.target_names) -['alt.atheism', 'sci.space'] ->>> newsgroups_train.filenames.shape -(1073,) ->>> newsgroups_train.target.shape -(1073,) ->>> newsgroups_train.target[:10] -array([1, 1, 1, 0, 1, 0, 0, 1, 1, 1]) - -``` - -### 5.8.2\. 将文本转换成向量 - -为了用文本数据训练预测或者聚类模型,首先需要做的是将文本转换成适合统计分析的数值 向量。这能使用 `sklearn.feature_extraction.text` 的功能来实现,正如下面展示的 从一个20个新闻的子集中提取单个词的 [TF-IDF](https://en.wikipedia.org/wiki/Tf-idf) 向量的例子 - -```py ->>> from sklearn.feature_extraction.text import TfidfVectorizer ->>> categories = ['alt.atheism', 'talk.religion.misc', -... 'comp.graphics', 'sci.space'] ->>> newsgroups_train = fetch_20newsgroups(subset='train', -... categories=categories) ->>> vectorizer = TfidfVectorizer() ->>> vectors = vectorizer.fit_transform(newsgroups_train.data) ->>> vectors.shape -(2034, 34118) - -``` - -提取的TF-IDF向量非常稀疏,在一个超过30000维的空间中采样, 平均只有159个非零成分(少于.5%的非零成分): - -```py ->>> vectors.nnz / float(vectors.shape[0]) -159.01327433628319 - -``` - -[`sklearn.datasets.fetch_20newsgroups_vectorized`](../modules/generated/sklearn.datasets.fetch_20newsgroups_vectorized.html#sklearn.datasets.fetch_20newsgroups_vectorized "sklearn.datasets.fetch_20newsgroups_vectorized") 是一个返回即用的tfidf特征的函数 ,而不是返回文件名。 - -### 5.8.3\. 过滤文本进行更加逼真的训练 - -分类器很容易过拟合一个出现在20个新闻组数据中的特定事物,例如新闻组标头。许多分类器有 很好的F分数,但是他们的结果不能泛化到不在这个时间窗的其他文档。 - -例如,我们来看一下多项式贝叶斯分类器,它训练速度快并且能获得很好的F分数。 - -```py ->>> from sklearn.naive_bayes import MultinomialNB ->>> from sklearn import metrics ->>> newsgroups_test = fetch_20newsgroups(subset='test', -... categories=categories) ->>> vectors_test = vectorizer.transform(newsgroups_test.data) ->>> clf = MultinomialNB(alpha=.01) ->>> clf.fit(vectors, newsgroups_train.target) ->>> pred = clf.predict(vectors_test) ->>> metrics.f1_score(newsgroups_test.target, pred, average='macro') -0.88213592402729568 - -``` - -([Classification of text documents using sparse features](../auto_examples/text/document_classification_20newsgroups.html#sphx-glr-auto-examples-text-document-classification-20newsgroups-py) 的例子将训练和测试数据混合, 而不是按时间划分,这种情况下,多项式贝叶斯能得到更高的0.88的F分数.你是否还不信任这个分类器的内部实现?) - -让我们看看信息量最大一些特征是: - -```py ->>> import numpy as np ->>> def show_top10(classifier, vectorizer, categories): -... feature_names = np.asarray(vectorizer.get_feature_names()) -... for i, category in enumerate(categories): -... top10 = np.argsort(classifier.coef_[i])[-10:] -... print("%s: %s" % (category, " ".join(feature_names[top10]))) -... ->>> show_top10(clf, vectorizer, newsgroups_train.target_names) -alt.atheism: sgi livesey atheists writes people caltech com god keith edu -comp.graphics: organization thanks files subject com image lines university edu graphics -sci.space: toronto moon gov com alaska access henry nasa edu space -talk.religion.misc: article writes kent people christian jesus sandvik edu com god - -``` - -你现在可以看到这些特征过拟合了许多东西: - -* 几乎所有的组都通过标题是出现更多还是更少来区分,例如 `NNTP-Posting-Host:` 和 `Distribution:` 标题 -* 正如他的标头或者签名所表示,另外重要的特征有关发送者是否隶属于一个大学。 -* “article”这个单词是一个重要的特征,它基于人们像 “In article [article ID], [name] <[e-mail address]> wrote:” 的方式引用原先的帖子频率。 -* 其他特征和当时发布的特定的人的名字和e-mail相匹配。 - -有如此大量的线索来区分新闻组,分类器根本不需要从文本中识别主题,而且他们的性能都一样好。 - -由于这个原因,加载20个新闻组数据的函数提供了一个叫做 **remove** 的参数,来告诉函数需要从文件 中去除什么类别的信息。 **remove** 应该是一个来自集合 `('headers', 'footers', 'quotes')` 的子集 的元组,来告诉函数分别移除标头标题,签名块还有引用块。 - -```py ->>> newsgroups_test = fetch_20newsgroups(subset='test', -... remove=('headers', 'footers', 'quotes'), -... categories=categories) ->>> vectors_test = vectorizer.transform(newsgroups_test.data) ->>> pred = clf.predict(vectors_test) ->>> metrics.f1_score(pred, newsgroups_test.target, average='macro') -0.77310350681274775 - -``` - -由于我们移除了跟主题分类几乎没有关系的元数据,分类器的F分数降低了很多。 如果我们从训练数据中也移除这个元数据,F分数将会更低: - -```py ->>> newsgroups_train = fetch_20newsgroups(subset='train', -... remove=('headers', 'footers', 'quotes'), -... categories=categories) ->>> vectors = vectorizer.fit_transform(newsgroups_train.data) ->>> clf = MultinomialNB(alpha=.01) ->>> clf.fit(vectors, newsgroups_train.target) ->>> vectors_test = vectorizer.transform(newsgroups_test.data) ->>> pred = clf.predict(vectors_test) ->>> metrics.f1_score(newsgroups_test.target, pred, average='macro') -0.76995175184521725 - -``` - -```py -其他的一些分类器能够更好的处理这个更难版本的任务。试着带 --filter 选项和不带 --filter 选项运行 -``` - -[Sample pipeline for text feature extraction and evaluation](../auto_examples/model_selection/grid_search_text_feature_extraction.html#sphx-glr-auto-examples-model-selection-grid-search-text-feature-extraction-py) 来比较结果间的差异。 - -推荐 - -```py -当使用20个新闻组数据中评估文本分类器时,你应该移除与新闻组相关的元数据。你可以通过设置 -``` - -`remove=('headers', 'footers', 'quotes')` 来实现。F分数将更加低因为这更符合实际 - -例子 - -* [Sample pipeline for text feature extraction and evaluation](../auto_examples/model_selection/grid_search_text_feature_extraction.html#sphx-glr-auto-examples-model-selection-grid-search-text-feature-extraction-py) -* [Classification of text documents using sparse features](../auto_examples/text/document_classification_20newsgroups.html#sphx-glr-auto-examples-text-document-classification-20newsgroups-py) - -## 5.9\. 从 mldata.org 上下载数据集 - -[mldata.org](http://mldata.org) 是一个公开的机器学习数据 repository ,由 [PASCAL network](http://www.pascal-network.org) 负责支持。 - -`sklearn.datasets` 包可以使用函数 [`sklearn.datasets.fetch_mldata`](../modules/generated/sklearn.datasets.fetch_mldata.html#sklearn.datasets.fetch_mldata "sklearn.datasets.fetch_mldata") 直接从 repository 下载数据集。 - -举个例子,下载 MNIST 手写数字字符识别数据集: - -```py ->>> from sklearn.datasets import fetch_mldata ->>> mnist = fetch_mldata('MNIST original', data_home=custom_data_home) - -``` - -MNIST 手写数字字符数据集包含有 70000 个样本,每个样本带有从 0 到 9 的标签,并且样本像素尺寸大小为 28x28: - -```py ->>> mnist.data.shape -(70000, 784) ->>> mnist.target.shape -(70000,) ->>> np.unique(mnist.target) -array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]) - -``` - -首次下载之后,数据集被缓存在本地的由 `data_home` 关键字指定的路径中,路径默认是 `~/scikit_learn_data/` - -```py ->>> os.listdir(os.path.join(custom_data_home, 'mldata')) -['mnist-original.mat'] - -``` - -[mldata.org](http://mldata.org) 里的数据集在命名规则和数据格式上不遵循严格的约定。 [`sklearn.datasets.fetch_mldata`](../modules/generated/sklearn.datasets.fetch_mldata.html#sklearn.datasets.fetch_mldata "sklearn.datasets.fetch_mldata") 可以应对大多数的常见情况,并且允许个人对数据集的默认设置进行调整: - -* [mldata.org](http://mldata.org) 中的数据大多都是以 `(n_features, n_samples)` 这样的组织形式存在。 这与 `scikit-learn` 中的习惯约定是不一致的,所以 [`sklearn.datasets.fetch_mldata`](../modules/generated/sklearn.datasets.fetch_mldata.html#sklearn.datasets.fetch_mldata "sklearn.datasets.fetch_mldata") 默认情况下通过 `transpose_data` 关键字控制对这个矩阵进行转置运算。: - - ```py - >>> iris = fetch_mldata('iris', data_home=custom_data_home) - >>> iris.data.shape - (150, 4) - >>> iris = fetch_mldata('iris', transpose_data=False, - ... data_home=custom_data_home) - >>> iris.data.shape - (4, 150) - - ``` - -* 数据集有多列的时候,[`sklearn.datasets.fetch_mldata`](../modules/generated/sklearn.datasets.fetch_mldata.html#sklearn.datasets.fetch_mldata "sklearn.datasets.fetch_mldata") 这个函数会识别目标列和数据列, 并将它们重命名为 `target(目标)` 和 `data(数据)` 。 这是通过在数据集中寻找名为 `label(标签)` 和 `data(数据)` 的数组来完成的, 如果选择第一个数组是 `target(目标)`,而第二个数组是 `data(数据)` ,则前边的设置会失效。 这个行为可以通过对关键字 `target_name` 和 `data_name` 进行设置来改变,设置的值可以是具体的名字也可以是索引数字, 数据集中列的名字和索引序号都可以在 [mldata.org](http://mldata.org) 中的 “Data” 选项卡下找到: - - ```py - >>> iris2 = fetch_mldata('datasets-UCI iris', target_name=1, data_name=0, - ... data_home=custom_data_home) - >>> iris3 = fetch_mldata('datasets-UCI iris', target_name='class', - ... data_name='double0', data_home=custom_data_home) - - ``` - -## 5.10\. 带标签的人脸识别数据集 - -这个数据集是一个在互联网上收集的名人 JPEG 图片集,所有详细信息都可以在官方网站上获得: - -> [http://vis-www.cs.umass.edu/lfw/](http://vis-www.cs.umass.edu/lfw/) - -每张图片的居中部分都是一张脸。典型人物人脸验证是给定两幅图片,二元分类器必须能够预测这两幅图片是否是同一个人。 - -另一项任务人脸识别或面部识别说的是给定一个未知的面孔,通过参考一系列已经学习经过鉴定的人的照片来识别此人的名字。 - -人脸验证和人脸识别都是基于经过训练用于人脸检测的模型的输出所进行的任务。 最流行的人脸检测模型叫作 Viola Jones是在 OpenCV 库中实现的。 LFW 人脸数据库中的人脸是使用该人脸检测器从各种在线网站上提取的。 - -### 5.10.1\. 用法 - -`scikit-learn` 提供两个可以自动下载、缓存、解析元数据文件的 loader (加载器),解码 JPEG 并且将 slices 转换成内存映射过的 NumPy 数组(numpy.memmap)。 这个数据集大小超过 200 MB。第一个加载器通常需要超过几分钟才能完全解码 JPEG 文件的相关部分为 NumPy 数组。 如果数据集已经被加载过,通过在磁盘上采用内存映射版( memmaped version )的 memoized, 即 `~/scikit_learn_data/lfw_home/` 文件夹使用 `joblib`,再次加载时间会小于 200ms。 - -第一个 loader (加载器)用于人脸识别任务:一个多类分类任务(属于监督学习): - -```py ->>> from sklearn.datasets import fetch_lfw_people ->>> lfw_people = fetch_lfw_people(min_faces_per_person=70, resize=0.4) - ->>> for name in lfw_people.target_names: -... print(name) -... -Ariel Sharon -Colin Powell -Donald Rumsfeld -George W Bush -Gerhard Schroeder -Hugo Chavez -Tony Blair - -``` - -默认的 slice 是一个删除掉大部分背景,只剩下围绕着脸周围的长方形的形状: - -```py ->>> lfw_people.data.dtype -dtype('float32') - ->>> lfw_people.data.shape -(1288, 1850) - ->>> lfw_people.images.shape -(1288, 50, 37) - -``` - -在 `target(目标)` 数组中,[``](#id31)1140``个人脸图片中的每一个图都分配一个属于某人的 id: - -```py ->>> lfw_people.target.shape -(1288,) - ->>> list(lfw_people.target[:10]) -[5, 6, 3, 1, 0, 1, 3, 4, 3, 0] - -``` - -第二个 loader (加载器)通常用于人脸验证任务: 每个样本是属于或不属于同一个人的两张图片: - -```py - >>> from sklearn.datasets import fetch_lfw_pairs - >>> lfw_pairs_train = fetch_lfw_pairs(subset='train') - - >>> list(lfw_pairs_train.target_names) - ['Different persons', 'Same person'] - - >>> lfw_pairs_train.pairs.shape - (2200, 2, 62, 47) - - >>> lfw_pairs_train.data.shape - (2200, 5828) - - >>> lfw_pairs_train.target.shape - (2200,) - -:func:`sklearn.datasets.fetch_lfw_people` 和 :func:`sklearn.datasets.fetch_lfw_pairs` 函数,都可以通过 ``color=True`` 来获得 RGB 颜色通道的维度,在这种情况下尺寸将为 ``(2200, 2, 62, 47, 3)`` 。 - -``` - -[`sklearn.datasets.fetch_lfw_pairs`](../modules/generated/sklearn.datasets.fetch_lfw_pairs.html#sklearn.datasets.fetch_lfw_pairs "sklearn.datasets.fetch_lfw_pairs") 数据集细分为 3 类: `train` set(训练集)、`test` set(测试集)和一个 `10_folds` 评估集, `10_folds` 评估集意味着性能的计算指标使用 10 折交叉验证( 10-folds cross validation )方案。 - -参考文献: - -* [Labeled Faces in the Wild: A Database for Studying Face Recognition in Unconstrained Environments.](http://vis-www.cs.umass.edu/lfw/lfw.pdf) Gary B. Huang, Manu Ramesh, Tamara Berg, and Erik Learned-Miller. University of Massachusetts, Amherst, Technical Report 07-49, October, 2007. - -### 5.10.2\. 示例 - -[Faces recognition example using eigenfaces and SVMs](../auto_examples/applications/plot_face_recognition.html#sphx-glr-auto-examples-applications-plot-face-recognition-py) - -## 5.11\. 森林覆盖类型 - -这个数据集中的样本对应美国的 30×30m 的 patches of forest(森林区域), 收集这些数据用于预测每个 patch 的植被 cover type (覆盖类型),即优势树种。 总共有七个植被类型,使得这是一个多分类问题。 每个样本有 54 个特征,在 [dataset’s 的主页](http://archive.ics.uci.edu/ml/datasets/Covertype) 中有具体的描述。 有些特征是布尔指标,其他的是离散或者连续的量。 - -[`sklearn.datasets.fetch_covtype`](../modules/generated/sklearn.datasets.fetch_covtype.html#sklearn.datasets.fetch_covtype "sklearn.datasets.fetch_covtype") 将加载 covertype 数据集; 它返回一个类似字典的对象,并在数据成员中使用特征矩阵以及 `target` 中的目标值。 如果需要,数据集可以从网上下载。 - -## 5.12\. RCV1 数据集 - -路透社语料库第一卷( RCV1 )是路透社为了研究目的提供的一个拥有超过 800,000 份手动分类的新闻报导的文档库。该数据集在 [[1]](#id38) 中有详细描述。 - -[`sklearn.datasets.fetch_rcv1`](../modules/generated/sklearn.datasets.fetch_rcv1.html#sklearn.datasets.fetch_rcv1 "sklearn.datasets.fetch_rcv1") 将加载以下版本: RCV1-v2, vectors, full sets, topics multilabels: - -```py ->>> from sklearn.datasets import fetch_rcv1 ->>> rcv1 = fetch_rcv1() - -``` - -它返回一个类似字典的对象,具有以下属性: - -`data`: 特征矩阵是一个 scipy CSR 稀疏矩阵,有 804414 个样品和 47236 个特征。 非零值包含 cosine-normalized(余弦归一化),log TF-IDF vectors。 按照年代顺序近似划分,在 [[1]](#id38) 提出: 前 23149 个样本是训练集。后 781265 个样本是测试集。 这是官方的 LYRL2004 时间划分。数组有 0.16% 个非零值: - -```py ->>> rcv1.data.shape -(804414, 47236) - -``` - -`target`: 目标值是存储在 scipy CSR 的稀疏矩阵,有 804414 个样本和 103 个类别。 每个样本在其所属的类别中的值为 1,在其他类别中值为 0。数组有 3.15% 个非零值: - -```py ->>> rcv1.target.shape -(804414, 103) - -``` - -`sample_id`: 每个样本都可以通过从 2286 到 810596 不等的 ID 来标识: - -```py ->>> rcv1.sample_id[:3] -array([2286, 2287, 2288], dtype=uint32) - -``` - -`target_names`: 目标值是每个样本的 topic (主题)。每个样本至少属于一个 topic (主题)最多 17 个 topic 。 总共有 103 个 topics ,每个 topic 用一个字符串表示。 从 <cite>GMIL</cite> 出现 5 次到 <cite>CCAT</cite> 出现 381327 次,该语料库频率跨越五个数量级: - -```py ->>> rcv1.target_names[:3].tolist() -['E11', 'ECAT', 'M11'] - -``` - -如果有需要的话,可以从 [rcv1 homepage](http://jmlr.csail.mit.edu/papers/volume5/lewis04a/) 上下载该数据集。 数据集压缩后的大小大约是 656 MB。 - -参考文献 - -| [1] | _([1](#id36), [2](#id37))_ Lewis, D. D., Yang, Y., Rose, T. G., & Li, F. (2004). RCV1: A new benchmark collection for text categorization research. The Journal of Machine Learning Research, 5, 361-397. | - -## 5.13\. 波士顿房价数据集 - -### 5.13.1\. 注释 - -数据集特征: - -> <colgroup><col class="field-name"> <col class="field-body"></colgroup> -> | 实例数量: | 506 | -> | --- | --- | -> | 属性数量: | 13 数值型或类别型,帮助预测的属性 | -> | --- | --- | -> -> :中位数(第14个属性)经常是学习目标 -> -> <colgroup><col class="field-name"> <col class="field-body"></colgroup> -> | 属性信息 (按顺序): | -> -> * CRIM 城镇人均犯罪率 -> * ZN 占地面积超过2.5万平方英尺的住宅用地比例 -> * INDUS 城镇非零售业务地区的比例 -> * CHAS 查尔斯河虚拟变量 (= 1 如果土地在河边;否则是0) -> * NOX 一氧化氮浓度(每1000万份) -> * RM 平均每居民房数 -> * AGE 在1940年之前建成的所有者占用单位的比例 -> * DIS 与五个波士顿就业中心的加权距离 -> * RAD 辐射状公路的可达性指数 -> * TAX 每10,000美元的全额物业税率 -> * PTRATIO 城镇师生比例 -> * B 1000(Bk - 0.63)^2 其中 Bk 是城镇的黑人比例 -> * LSTAT 人口中地位较低人群的百分数 -> * MEDV 以1000美元计算的自有住房的中位数 -> -> | -> | --- | --- | -> | 缺失属性值: | 无 | -> | --- | --- | -> | 创建者: | Harrison, D. and Rubinfeld, D.L. | -> | --- | --- | - -这是UCI ML(欧文加利福尼亚大学 机器学习库)房价数据集的副本。 [http://archive.ics.uci.edu/ml/datasets/Housing](http://archive.ics.uci.edu/ml/datasets/Housing) - -该数据集是从位于卡内基梅隆大学维护的StatLib图书馆取得的。 - -Harrison, D. 和 Rubinfeld, D.L. 的波士顿房价数据:’Hedonic prices and the demand for clean air’, J. Environ. Economics & Management, vol.5, 81-102, 1978,也被使用在 Belsley, Kuh & Welsch 的 ‘Regression diagnostics …’, Wiley, 1980。 注释:许多变化已经被应用在后者第244-261页的表中。 - -波士顿房价数据已被用于许多涉及回归问题的机器学习论文中。 - -**参考资料** - -> * Belsley, Kuh & Welsch, ‘Regression diagnostics: Identifying Influential Data and Sources of Collinearity’, Wiley, 1980\. 244-261. -> * Quinlan,R. (1993). Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann. -> * many more! (see [http://archive.ics.uci.edu/ml/datasets/Housing](http://archive.ics.uci.edu/ml/datasets/Housing)) - -## 5.14\. 威斯康辛州乳腺癌(诊断)数据库 - -### 5.14.1\. 注释 - -```py -数据集特征: -``` - -<colgroup><col class="field-name"> <col class="field-body"></colgroup> -| 实例数量: | 569 | -| --- | --- | -| 属性数量: | 30 (数值型,帮助预测的属性和类) | -| --- | --- | -| Attribute Information: | -| --- | -|   | - -* radius 半径(从中心到边缘上点的距离的平均值) -* texture 纹理(灰度值的标准偏差) -* perimeter 周长 -* area 区域 -* smoothness 平滑度(半径长度的局部变化) -* compactness 紧凑度(周长 ^ 2 /面积 - 1.0) -* concavity 凹面(轮廓的凹部的严重性) -* concave points 凹点(轮廓的凹部的数量) -* symmetry 对称性 -* fractal dimension 分形维数(海岸线近似 - 1) -* ```py - 类: - ``` - - * WDBC-Malignant 恶性 - * WDBC-Benign 良性 - -对每个图像计算这些特征的平均值,标准误差,以及“最差”(因为是肿瘤)或最大值(最大的前三个值的平均值) | - -        得到30个特征。例如,字段 3 是平均半径,字段 13 是半径的标准误差,字段 23 是最差半径。 - -> <colgroup><col class="field-name"> <col class="field-body"></colgroup> -> | 统计摘要: | -> -> |   |   |   | -> | --- | --- | --- | -> | radius (mean): | 6.981 | 28.11 | -> | texture (mean): | 9.71 | 39.28 | -> | perimeter (mean): | 43.79 | 188.5 | -> | area (mean): | 143.5 | 2501.0 | -> | smoothness (mean): | 0.053 | 0.163 | -> | compactness (mean): | 0.019 | 0.345 | -> | concavity (mean): | 0.0 | 0.427 | -> | concave points (mean): | 0.0 | 0.201 | -> | symmetry (mean): | 0.106 | 0.304 | -> | fractal dimension (mean): | 0.05 | 0.097 | -> | radius (standard error): | 0.112 | 2.873 | -> | texture (standard error): | 0.36 | 4.885 | -> | perimeter (standard error): | 0.757 | 21.98 | -> | area (standard error): | 6.802 | 542.2 | -> | smoothness (standard error): | 0.002 | 0.031 | -> | compactness (standard error): | 0.002 | 0.135 | -> | concavity (standard error): | 0.0 | 0.396 | -> | concave points (standard error): | 0.0 | 0.053 | -> | symmetry (standard error): | 0.008 | 0.079 | -> | fractal dimension (standard error): | 0.001 | 0.03 | -> | radius (worst): | 7.93 | 36.04 | -> | texture (worst): | 12.02 | 49.54 | -> | perimeter (worst): | 50.41 | 251.2 | -> | area (worst): | 185.2 | 4254.0 | -> | smoothness (worst): | 0.071 | 0.223 | -> | compactness (worst): | 0.027 | 1.058 | -> | concavity (worst): | 0.0 | 1.252 | -> | concave points (worst): | 0.0 | 0.291 | -> | symmetry (worst): | 0.156 | 0.664 | -> | fractal dimension (worst): | 0.055 | 0.208 | -> -> <colgroup><col class="field-name"> <col class="field-body"></colgroup> -> | 缺失属性值: | 无 | -> | --- | --- | -> | 类别分布: | 212 - 恶性, 357 - 良性 | -> | --- | --- | -> | 创建者: | Dr. William H. Wolberg, W. Nick Street, Olvi L. Mangasarian | -> | --- | --- | -> | 捐助者: | Nick Street | -> | --- | --- | -> | 日期: | 1995年11月 | -> | --- | --- | -> -> | -> | --- | --- | - -这是UCI ML(欧文加利福尼亚大学 机器学习库)威斯康星州乳腺癌(诊断)数据集的副本。 [https://goo.gl/U2Uwz2](https://goo.gl/U2Uwz2) - -这些特征是从乳房肿块的细针抽吸术(FNA)的数字图像中计算得到,描述了图像中存在的细胞核的特征。 - -上述的分离平面是由多表面方法树(MSM-T)[K.P.Bennett, “Decision Tree Construction Via Linear Programming.” Proceedings of the 4th Midwest Artificial Intelligence and Cognitive Science Society, pp.97-101, 1992], a classification method which uses linear programming to construct a decision tree. 相关特征是在1-4的特征和1-3的分离平面中使用穷举法搜索选取出的。 - -用于分离平面的线性规划在三维空间中描述如下: [K. P. Bennett and O. L. Mangasarian: “Robust Linear Programming Discrimination of Two Linearly Inseparable Sets”, Optimization Methods and Software 1, 1992, 23-34]. - -该数据库也可通过UW CS ftp服务器获得: - -ftp ftp.cs.wisc.edu cd math-prog/cpo-dataset/machine-learn/WDBC/ - -### 5.14.2\. 参考资料 - -> * W.N. Street, W.H. Wolberg and O.L. Mangasarian. Nuclear feature extraction for breast tumor diagnosis. IS&T/SPIE 1993 International Symposium on Electronic Imaging: Science and Technology, volume 1905, pages 861-870, San Jose, CA, 1993. -> * O.L. Mangasarian, W.N. Street and W.H. Wolberg. Breast cancer diagnosis and prognosis via linear programming. Operations Research, 43(4), pages 570-577, July-August 1995. -> * W.H. Wolberg, W.N. Street, and O.L. Mangasarian. Machine learning techniques to diagnose breast cancer from fine-needle aspirates. Cancer Letters 77 (1994) 163-171. - -## 5.15\. 糖尿病数据集 - -### 5.15.1\. 注释 - -从442例糖尿病患者中获得了十个基线变量,年龄,性别,体重指数,平均血压和六个血清测量值,以及一个我们感兴趣的,在基线后一年疾病发展的定量测量值。 - -数据集特征: - -> <colgroup><col class="field-name"> <col class="field-body"></colgroup> -> | 实例数量: | 442 | -> | --- | --- | -> | 属性数量: | 前10列是数值型的帮助预测的值 | -> | --- | --- | -> | 目标: | 第11列是基线后一年疾病进展的定量测量址 | -> | --- | --- | -> | 属性: | -> -> <colgroup><col class="field-name"> <col class="field-body"></colgroup> -> | Age年龄: | | -> | --- | --- | -> | Sex性别: | | -> | --- | --- | -> | Body mass index体重指数: | -> | --- | -> |   | | -> | Average blood pressure平均血压: | -> | --- | -> |   | | -> | S1血清测量值1: | | -> | --- | --- | -> | S2血清测量值2: | | -> | --- | --- | -> | S3血清测量值3: | | -> | --- | --- | -> | S4血清测量值4: | | -> | --- | --- | -> | S5血清测量值5: | | -> | --- | --- | -> | S6血清测量值6: | | -> | --- | --- | -> -> | -> | --- | --- | - -注意: 这10个特征变量都已经分别以均值为中心,并按照标准偏差乘以样本数(n_samples)进行缩放(即每列的平方和为1)。 - -源 URL: [http://www4.stat.ncsu.edu/~boos/var.select/diabetes.html](http://www4.stat.ncsu.edu/~boos/var.select/diabetes.html) - -更多信息,请参阅: Bradley Efron, Trevor Hastie, Iain Johnstone and Robert Tibshirani (2004) “Least Angle Regression,” Annals of Statistics (with discussion), 407-499. ([http://web.stanford.edu/~hastie/Papers/LARS/LeastAngle_2002.pdf](http://web.stanford.edu/~hastie/Papers/LARS/LeastAngle_2002.pdf)) - -## 5.16\. 光学识别手写数字数据集 - -### 5.16.1\. 注释 - -```py -数据集特征: -``` - -<colgroup><col class="field-name"> <col class="field-body"></colgroup> -| 实例数量: | 5620 | -| --- | --- | -| 属性数量: | 64 | -| --- | --- | -| 属性信息: | 8x8 范围在(0-16)的整型像素值图片 | -| --- | --- | -| 缺失属性值: | 无 | -| --- | --- | -| 创建者: | - -1. Alpaydin ([alpaydin@boun.edu.tr](mailto:alpaydin%40boun.edu.tr)) - - | -| --- | --- | -| 日期: | 1998年7月 | -| --- | --- | - -这是UCI ML(欧文加利福尼亚大学 机器学习库)手写数字数据集的测试集的副本。 [http://archive.ics.uci.edu/ml/datasets/Optical+Recognition+of+Handwritten+Digits](http://archive.ics.uci.edu/ml/datasets/Optical+Recognition+of+Handwritten+Digits) - -数据集包含手写数字的图像:10个类别中每个类都是一个数字。 - -从预印表格中提取手写数字的标准化的位图这一过程,应用了NIST提供的预处理程序。 这些数据是从43人中得到,其中30人为训练集,13人为测试集。32x32位图被划分为4x4的非重叠块, 并且在每个块中计数像素数。这产生8×8的输入矩阵,其中每个元素是0-16范围内的整数。 这个过程降低了维度,并且在小的变形中提供了不变性。 - -有关NIST处理程序的信息,请参见 M. D. Garris, J. L. Blue, G.T. Candela, D. L. Dimmick, J. Geist, P. J. Grother, S. A. Janet, and C. L. Wilson, NIST Form-Based Handprint Recognition System, NISTIR 5469, 1994. - -### 5.16.2\. 参考资料 - -> * C. Kaynak (1995) Methods of Combining Multiple Classifiers and Their Applications to Handwritten Digit Recognition, MSc Thesis, Institute of Graduate Studies in Science and Engineering, Bogazici University. -> * 1. Alpaydin, C. Kaynak (1998) Cascading Classifiers, Kybernetika. -> * Ken Tang and Ponnuthurai N. Suganthan and Xi Yao and A. Kai Qin. Linear dimensionalityreduction using relevance weighted LDA. School of Electrical and Electronic Engineering Nanyang Technological University. 2005. -> * Claudio Gentile. A New Approximate Maximal Margin Classification Algorithm. NIPS. 2000. - -## 5.17\. 鸢尾花数据集 - -### 5.17.1\. 注释 - -```py -数据集特征: -``` - -<colgroup><col class="field-name"> <col class="field-body"></colgroup> -| 实例数量: | 150 (三个类各有50个) | -| --- | --- | -| 属性数量: | 4 (数值型,数值型,帮助预测的属性和类) | -| --- | --- | -| Attribute Information: | -| --- | -|   | - -* sepal length 萼片长度(厘米) -* sepal width 萼片宽度(厘米) -* petal length 花瓣长度(厘米) -* petal width 花瓣宽度(厘米) -* ```py - class: - ``` - - * Iris-Setosa 山鸢尾 - * Iris-Versicolour 变色鸢尾 - * Iris-Virginica 维吉尼亚鸢尾 - - | -| 统计摘要: | | -| --- | --- | - -|   |   |   |   |   |   | -| --- | --- | --- | --- | --- | --- | -| sepal length: | 4.3 | 7.9 | 5.84 | 0.83 | 0.7826 | -| sepal width: | 2.0 | 4.4 | 3.05 | 0.43 | -0.4194 | -| petal length: | 1.0 | 6.9 | 3.76 | 1.76 | 0.9490 (high!) | -| petal width: | 0.1 | 2.5 | 1.20 | 0.76 | 0.9565 (high!) | - -<colgroup><col class="field-name"> <col class="field-body"></colgroup> -| 缺失属性值: | 无 | -| --- | --- | -| 类别分布: | 3个类别各占33.3% | -| --- | --- | -| 创建者: | R.A. Fisher | -| --- | --- | -| 捐助者: | Michael Marshall ([MARSHALL%PLU@io.arc.nasa.gov](mailto:MARSHALL%PLU%40io.arc.nasa.gov)) | -| --- | --- | -| 日期: | 1988年7月 | -| --- | --- | - -这是UCI ML(欧文加利福尼亚大学 机器学习库)鸢尾花数据集的副本。 [http://archive.ics.uci.edu/ml/datasets/Iris](http://archive.ics.uci.edu/ml/datasets/Iris) - -著名的鸢尾花数据库,首先由R. Fisher先生使用。 - -这可能是在模式识别文献中最有名的数据库。Fisher的论文是这个领域的经典之作,到今天也经常被引用。(例如:Duda&Hart) 数据集包含3个类,每类有50个实例,每个类指向一种类型的鸢尾花。一类与另外两类线性分离,而后者不能彼此线性分离。 - -### 5.17.2\. 参考资料 - -> * Fisher,R.A. “The use of multiple measurements in taxonomic problems” Annual Eugenics, 7, Part II, 179-188 (1936); also in “Contributions to Mathematical Statistics” (John Wiley, NY, 1950). -> * Duda,R.O., & Hart,P.E. (1973) Pattern Classification and Scene Analysis. (Q327.D83) John Wiley & Sons. ISBN 0-471-22361-1\. See page 218. -> * Dasarathy, B.V. (1980) “Nosing Around the Neighborhood: A New System Structure and Classification Rule for Recognition in Partially Exposed Environments”. IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. PAMI-2, No. 1, 67-71. -> * Gates, G.W. (1972) “The Reduced Nearest Neighbor Rule”. IEEE Transactions on Information Theory, May 1972, 431-433. -> * See also: 1988 MLC Proceedings, 54-64\. Cheeseman et al”s AUTOCLASS II conceptual clustering system finds 3 classes in the data. -> * Many, many more … - -## 5.18\. Linnerrud 数据集 - -### 5.18.1\. 注释 - -```py -数据集特征: -``` - -<colgroup><col class="field-name"> <col class="field-body"></colgroup> -| 实例数量: | 20 | -| --- | --- | -| 属性数量: | 3 | -| --- | --- | -| 缺失属性值: | 无 | -| --- | --- | - -Linnerud 数据集包含两个小的数据集: - -* _运动_ : 一个包含以下内容的列表:运动数据,关于3个运动相关变量的20个观测值:体重,腰围和脉搏。 -* _生理_ : 一个包含以下内容的数据表:生理数据,关于三个生理变量的20个观测值:下巴,仰卧起坐和跳跃。 - -### 5.18.2\. 参考资料 - -> * Tenenhaus, M. (1998). La regression PLS: theorie et pratique. Paris: Editions Technic. \ No newline at end of file diff --git a/docs/0.19.x/66.md b/docs/0.19.x/66.md deleted file mode 100755 index d680999f265cd6400b7e161f8fa016661aefbbec..0000000000000000000000000000000000000000 --- a/docs/0.19.x/66.md +++ /dev/null @@ -1,95 +0,0 @@ -# 6\. 大规模计算的策略: 更大量的数据 - -校验者: -        [@文谊](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@ゞFingヤ](https://github.com/apachecn/scikit-learn-doc-zh) - -对于一些应用程序,需要被处理的样本数量,特征数量(或两者)和/或速度这些对传统的方法而言非常具有挑战性。在这些情况下,scikit-learn 有许多你值得考虑的选项可以使你的系统规模化。 - -## 6.1\. 使用外核学习实例进行拓展 - -外核(或者称作 “外部存储器”)学习是一种用于学习那些无法装进计算机主存储(RAM)的数据的技术。 - -这里描述了一种为了实现这一目的而设计的系统: - -> 1. 一种用流来传输实例的方式 -> 2. 一种从实例中提取特征的方法 -> 3. 增量式算法 - -### 6.1.1\. 流式实例 - -基本上, 1\. 可能是从硬盘、数据库、网络流等文件中产生实例的读取器。然而,关于如何实现的相关细节已经超出了本文档的讨论范围。 - -### 6.1.2\. 提取特征 - -2\. 可以是 scikit-learn 支持的的不同 :ref: <cite>特征提取 <feature_extraction></cite> 方法中的任何相关的方法。然而,当处理那些需要矢量化并且特征或值的集合你预先不知道的时候,就得明确注意了。一个好的例子是文本分类,其中在训练的期间你很可能会发现未知的项。从应用的角度上来看,如果在数据上进行多次通过是合理的,则可以使用有状态的向量化器。否则,可以通过使用无状态特征提取器来提高难度。目前,这样做的首选方法是使用所谓的 [哈希技巧](feature_extraction.html#feature-hashing),在 [`sklearn.feature_extraction.FeatureHasher`](generated/sklearn.feature_extraction.FeatureHasher.html#sklearn.feature_extraction.FeatureHasher "sklearn.feature_extraction.FeatureHasher") 中,其中有分类变量的表示为 Python 列表或 [`sklearn.feature_extraction.text.HashingVectorizer`](generated/sklearn.feature_extraction.text.HashingVectorizer.html#sklearn.feature_extraction.text.HashingVectorizer "sklearn.feature_extraction.text.HashingVectorizer") 文本文档。 - -### 6.1.3\. 增量学习 - -最后,对于3\. 我们在 scikit-learn 之中有许多选择。虽软不是所有的算法都能够增量学习(即不能一次性看到所有的实例),所有实 `partial_fit` 的 API 估计器都作为了候选。实际上,从小批量的实例(有时称为“在线学习”)逐渐学习的能力是外核学习的关键,因为它保证在任何给定的时间内只有少量的实例在主存储中,选择适合小批量的尺寸来平衡相关性和内存占用可能涉及一些调整 [[1]](#id9)。 - -以下是针对不同任务的增量估算器列表: - -> * ```py -> Classification(分类) -> ``` -> -> -> * [`sklearn.naive_bayes.MultinomialNB`](generated/sklearn.naive_bayes.MultinomialNB.html#sklearn.naive_bayes.MultinomialNB "sklearn.naive_bayes.MultinomialNB") -> * [`sklearn.naive_bayes.BernoulliNB`](generated/sklearn.naive_bayes.BernoulliNB.html#sklearn.naive_bayes.BernoulliNB "sklearn.naive_bayes.BernoulliNB") -> * [`sklearn.linear_model.Perceptron`](generated/sklearn.linear_model.Perceptron.html#sklearn.linear_model.Perceptron "sklearn.linear_model.Perceptron") -> * [`sklearn.linear_model.SGDClassifier`](generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier "sklearn.linear_model.SGDClassifier") -> * [`sklearn.linear_model.PassiveAggressiveClassifier`](generated/sklearn.linear_model.PassiveAggressiveClassifier.html#sklearn.linear_model.PassiveAggressiveClassifier "sklearn.linear_model.PassiveAggressiveClassifier") -> * [`sklearn.neural_network.MLPClassifier`](generated/sklearn.neural_network.MLPClassifier.html#sklearn.neural_network.MLPClassifier "sklearn.neural_network.MLPClassifier") -> * ```py -> Regression(回归) -> ``` -> -> -> * [`sklearn.linear_model.SGDRegressor`](generated/sklearn.linear_model.SGDRegressor.html#sklearn.linear_model.SGDRegressor "sklearn.linear_model.SGDRegressor") -> * [`sklearn.linear_model.PassiveAggressiveRegressor`](generated/sklearn.linear_model.PassiveAggressiveRegressor.html#sklearn.linear_model.PassiveAggressiveRegressor "sklearn.linear_model.PassiveAggressiveRegressor") -> * [`sklearn.neural_network.MLPRegressor`](generated/sklearn.neural_network.MLPRegressor.html#sklearn.neural_network.MLPRegressor "sklearn.neural_network.MLPRegressor") -> * ```py -> Clustering(聚类) -> ``` -> -> -> * [`sklearn.cluster.MiniBatchKMeans`](generated/sklearn.cluster.MiniBatchKMeans.html#sklearn.cluster.MiniBatchKMeans "sklearn.cluster.MiniBatchKMeans") -> * [`sklearn.cluster.Birch`](generated/sklearn.cluster.Birch.html#sklearn.cluster.Birch "sklearn.cluster.Birch") -> * ```py -> Decomposition / feature Extraction(分解/特征提取) -> ``` -> -> -> * [`sklearn.decomposition.MiniBatchDictionaryLearning`](generated/sklearn.decomposition.MiniBatchDictionaryLearning.html#sklearn.decomposition.MiniBatchDictionaryLearning "sklearn.decomposition.MiniBatchDictionaryLearning") -> * [`sklearn.decomposition.IncrementalPCA`](generated/sklearn.decomposition.IncrementalPCA.html#sklearn.decomposition.IncrementalPCA "sklearn.decomposition.IncrementalPCA") -> * [`sklearn.decomposition.LatentDirichletAllocation`](generated/sklearn.decomposition.LatentDirichletAllocation.html#sklearn.decomposition.LatentDirichletAllocation "sklearn.decomposition.LatentDirichletAllocation") -> * ```py -> Preprocessing(预处理) -> ``` -> -> -> * [`sklearn.preprocessing.StandardScaler`](generated/sklearn.preprocessing.StandardScaler.html#sklearn.preprocessing.StandardScaler "sklearn.preprocessing.StandardScaler") -> * [`sklearn.preprocessing.MinMaxScaler`](generated/sklearn.preprocessing.MinMaxScaler.html#sklearn.preprocessing.MinMaxScaler "sklearn.preprocessing.MinMaxScaler") -> * [`sklearn.preprocessing.MaxAbsScaler`](generated/sklearn.preprocessing.MaxAbsScaler.html#sklearn.preprocessing.MaxAbsScaler "sklearn.preprocessing.MaxAbsScaler") - -对于分类,有一点要注意的是,虽然无状态特征提取程序可能能够应对新的/未知的属性,但增量学习者本身可能无法应对新的/未知的目标类。在这种情况下,你必须使用 `classes=` 参数将所有可能的类传递给第一个 `partial_fit` 调用。 - -选择合适的算法时要考虑的另一个方面是,所有这些算法随着时间的推移不会给每个样例相同的重要性。比如说, `Perceptron` 仍然对错误标签的例子是敏感的,即使经过多次的样例训练,而 `SGD*` 和 `PassiveAggressive*` 族对这些鲁棒性更好。相反,对于后面传入的数据流,算法的学习速率随着时间不断降低,后面两个算法对于那些显著差异的样本和标注正确的样本倾向于给予很少的重视。 - -### 6.1.4\. 示例 - -最后,我们有一个完整的 [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) 文本文档的核心分类的示例。旨在为想要构建核心学习系统的人们提供一个起点,并展示上述大多数概念。 - -此外,它还展现了不同算法性能随着处理例子的数量的演变。 - -**[![accuracy_over_time](../Images/dc40e3a6d4022bfb488e0a4283b656b9.jpg)](../auto_examples/applications/plot_out_of_core_classification.html)** - -现在我们来看不同部分的计算时间,我们看到矢量化的过程比学习本身耗时还多。对于不同的算法,MultinomialNB 是耗时最多的,但通过增加其 mini-batches 的大小可以减轻开销。(练习:minibatch_size 在程序中更改为100和10000,并进行比较)。 - -**[![computation_time](../Images/48cf684e54ca494e275074761259069c.jpg)](../auto_examples/applications/plot_out_of_core_classification.html)** - -### 6.1.5\. 注释 - -| [[1]](#id6) | 根据算法,mini-batch 大小可以影响结果。SGD*,PassiveAggressive* 和离散的 NaiveBayes 是真正在线的,不受 batch 大小的影响。相反,MiniBatchKMeans 收敛速度受 batch 大小影响。此外,其内存占用可能会随 batch 大小而显着变化。 | \ No newline at end of file diff --git a/docs/0.19.x/67.md b/docs/0.19.x/67.md deleted file mode 100755 index 31392d022d57ccd9b045e38268a2dae3d576a24a..0000000000000000000000000000000000000000 --- a/docs/0.19.x/67.md +++ /dev/null @@ -1,180 +0,0 @@ -# 7\. 计算性能 - -校验者: -        [@曲晓峰](https://github.com/apachecn/scikit-learn-doc-zh) -        [@小瑶](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@小瑶](https://github.com/apachecn/scikit-learn-doc-zh) - -对于某些 applications (应用),estimators(估计器)的性能(主要是 prediction time (预测时间)的 latency (延迟)和 throughput (吞吐量))至关重要。考虑 training throughput (训练吞吐量)也可能是有意义的,但是在 production setup (生产设置)(通常在脱机中运行)通常是不太重要的。 - -我们将在这里审查您可以从不同上下文中的一些 scikit-learn estimators(估计器)预期的数量级,并提供一些 overcoming performance bottlenecks (解决性能瓶颈)的技巧和诀窍。 - -将 Prediction latency (预测延迟)作为进行预测所需的 elapsed time (经过时间)(例如,以 micro-seconds(微秒)为单位)进行测量。Latency (延迟)通常被认为一种分布,运营工程师通常将注意力集中在该分布的给定 percentile (百分位数)(例如 90 百分位数)上的延迟。 - -Prediction throughput (预测吞吐量)被定义为软件可以在给定的时间量内(例如每秒的预测)中 the number of predictions (可预测的预测数)。 - -performance optimization (性能优化)的一个重要方面也是它可能会损害 prediction accuracy (预测精度)。 实际上,更简单的模型(例如 linear (线性的),而不是 non-linear (非线性的),或者具有较少的参数)通常运行得更快,但并不总是能够考虑与更复杂的数据相同的确切属性。 - -## 7.1\. 预测延迟 - -在使用/选择机器学习工具包时可能遇到的最直接的问题之一是生产环境中可以进行预测的 latency (延迟)。 - -```py -影响 prediction latency (预测延迟)的主要因素是 -``` - -1. Number of features(特征的数量) -2. Input data representation and sparsity(输入数据的表示和稀疏性) -3. Model complexity(模型复杂性) -4. Feature extraction(特征提取) - -最后一个主要参数也是在 bulk or one-at-a-time mode (批量或执行一次的时间模式)下进行预测的可能性。 - -### 7.1.1\. 批量与原子模式 - -通常,通过大量原因(branching predictability(分支可预测性), CPU cache(CPU缓存), linear algebra libraries optimizations(线性代数库优化)等),predictions in bulk(批量进行预测)(同时许多情况)更有效。 在这里,我们看到一些具有很少功能的设置,独立于估计器选择,bulk mode(批量模式)总是更快,而对于其中的一些,它们的数量大约是 1 到 2 个数量级: - -**[![atomic_prediction_latency](img/3ae54efdf60edfa32ccbe7388834b0f2.jpg)](../auto_examples/applications/plot_prediction_latency.html)** - -**[![bulk_prediction_latency](img/45c6e9fedc8fe61dd8d3f388a0464d30.jpg)](../auto_examples/applications/plot_prediction_latency.html)** - -为了对您的案例的不同的 estimators 进行基准测试,您可以在此示例中简单地更改 `n_features` 参数: [Prediction Latency](../auto_examples/applications/plot_prediction_latency.html#sphx-glr-auto-examples-applications-plot-prediction-latency-py). 这应该给你估计 prediction latency (预测延迟)的数量级。 - -配置 Scikit-learn 来减少验证开销 - -Scikit-learn 对数据进行了一些验证,从而增加了对 `predict(预测)` 和类似函数的调用开销。特别地,检查这些 features (特征)是有限的(不是 NaN 或无限)涉及对数据的完全传递。如果您确定你的数据是 acceptable (可接受的),您可以通过在导入 scikit-learn 之前将环境变量配置 `SKLEARN_ASSUME_FINITE` 设置为 non-empty string (非空字符串)来抑制检查有限性,或者使用以下方式在 Python 中配置 [`sklearn.set_config`](generated/sklearn.set_config.html#sklearn.set_config "sklearn.set_config") 。为了比这些全局设置更多的控制 `config_context` 允许您在指定的上下文中设置此配置: - -```py ->>> import sklearn ->>> with sklearn.config_context(assume_finite=True): -... pass # do learning/prediction here with reduced validation - -``` - -注意,这将影响上下文中的 [`sklearn.utils.assert_all_finite`](generated/sklearn.utils.assert_all_finite.html#sklearn.utils.assert_all_finite "sklearn.utils.assert_all_finite") 的所有用途。 - -### 7.1.2\. 特征数量的影响 - -显然,当特征数量增加时,每个示例的内存消耗量也会增加。实际上,对于具有 ![N](img/a44a7c045f2217894a894c482861387a.jpg) 个特征的 ![M](img/13e06e04807641041a1d2df7a80043e2.jpg) 个实例的矩阵,空间复杂度在 ![O(NM)](img/7a6d4f1e7672a61d5284203113eb5b2a.jpg) 。 - -从 computing (计算)角度来看,这也意味着 the number of basic operations (基本操作的数量)(例如,线性模型中向量矩阵乘积的乘法)也增加。以下是 prediction latency (预测延迟)与 number of features(特征数) 的变化图: - -**[![influence_of_n_features_on_latency](img/6edba8b762eb4f9d843ba76d9e344c2a.jpg)](../auto_examples/applications/plot_prediction_latency.html)** - -总的来说,您可以预期 prediction time (预测时间)至少随 number of features (特征数量)线性增加(非线性情况可能会发生,取决于 global memory footprint (全局内存占用)和 estimator (估计))。 - -### 7.1.3\. 输入数据表示的影响 - -Scipy 提供对 storing sparse data(存储稀疏数据)进行优化的 sparse matrix (稀疏矩阵)数据结构。sparse formats(稀疏格式)的主要特点是您不会存储零,所以如果您的数据稀疏,那么您使用的内存会更少。sparse(稀疏) ([CSR or CSC](http://docs.scipy.org/doc/scipy/reference/sparse.html)) 表示中的非零值将仅占用一个 32 位整数位置 + 64 位 floating point (浮点值) + 矩阵中每行或列的额外的 32 位。在 dense(密集) (or sparse(稀疏)) 线性模型上使用稀疏输入可以加速预测,只有非零值特征才会影响点积,从而影响模型预测。因此,如果在 1e6 维空间中有 100 个非零,则只需要 100 次乘法和加法运算而不是 1e6 。 - -然而,密度表示的计算可以利用 BLAS 中高度优化的向量操作和多线程,并且往往导致更少的 CPU 高速缓存 misses 。因此,sparse input (稀疏输入)表示的 sparsity (稀疏度)通常应相当高(10% 非零最大值,要根据硬件进行检查)比在具有多个 CPU 和优化 BLAS 实现的机器上的 dense input (密集输入)表示更快。 - -以下是测试输入 sparsity (稀疏度)的示例代码: - -```py -def sparsity_ratio(X): - return 1.0 - np.count_nonzero(X) / float(X.shape[0] * X.shape[1]) -print("input sparsity ratio:", sparsity_ratio(X)) - -``` - -根据经验,您可以考虑如果 sparsity ratio (稀疏比)大于 90% , 您可能会从 sparse formats (稀疏格式)中受益。有关如何构建(或将数据转换为) sparse matrix formats (稀疏矩阵格式)的更多信息,请参阅 Scipy 的稀疏矩阵格式文档 [documentation](http://docs.scipy.org/doc/scipy/reference/sparse.html) 。大多数的时候, `CSR` 和 `CSC` 格式是最有效的。 - -### 7.1.4\. 模型复杂度的影响 - -一般来说,当 model complexity (模型复杂度)增加时,predictive power (预测能力)和 latency (延迟)应该会增加。增加 predictive power (预测能力)通常很有意思,但对于许多应用,我们最好不要太多地增加预测延迟。我们现在将对不同 families 的 supervised models (监督模式)进行审查。 - -对于 [`sklearn.linear_model`](classes.html#module-sklearn.linear_model "sklearn.linear_model") (例如 Lasso, ElasticNet, SGDClassifier/Regressor, Ridge & RidgeClassifier, PassiveAgressiveClassifier/Regressor, LinearSVC, LogisticRegression…) 在预测时间应用的 decision function (决策函数)是一样的(dot product( 点积)),所以 latency (延迟)应该是等效的。 - -这里有一个例子使用 `sklearn.linear_model.stochastic_gradient.SGDClassifier` 和 `elasticnet` penalty(惩罚)。 regularization strength(正则化强度)由 `alpha` 参数全局控制。有一个足够高的 `alpha` ,可以增加 `elasticnet` 的 `l1_ratio` 参数,以在模型参数中执行各种稀疏程度。这里的 Higher sparsity (较高稀疏度)被解释为 less model complexity (较少的模型复杂度),因为我们需要较少的系数充分描述它。当然, sparsity (稀疏性)会随着稀疏点积 产生时间大致与非零系数的数目成比例地影响 prediction time (预测时间)。 - -**[![en_model_complexity](../Images/fde3a2898bfc0ce1823058fe7b706b9e.jpg)](../auto_examples/applications/plot_model_complexity_influence.html)** - -对于具有 non-linear kernel (非线性内核)的 [`sklearn.svm`](classes.html#module-sklearn.svm "sklearn.svm") 算法系列,latency (延迟)与 support vectors (支持向量)的数量有关(越少越快)。 随着 SVC 或 SVR 模型中的支持向量的数量, Latency (延迟)和 throughput (吞吐量)应该渐渐地增长。kernel (内核)也将影响 latency (延迟),因为它用于计算每个 support vector (支持向量)一次 input vector(输入向量)的 projection (投影)。在下面的图中, `sklearn.svm.classes.NuSVR` 的 `nu` 参数用于影响 number of support vectors(支持向量的数量)。 - -**[![nusvr_model_complexity](../Images/1daad9ca4ebf0fe49529674b890b3df2.jpg)](../auto_examples/applications/plot_model_complexity_influence.html)** - -对于 [`sklearn.ensemble`](classes.html#module-sklearn.ensemble "sklearn.ensemble") 的 trees (例如 RandomForest, GBT, ExtraTrees 等) number of trees (树的数量)及其 depth(深度)发挥着最重要的作用。Latency and throughput(延迟和吞吐量)应与树的数量呈线性关系。在这种情况下,我们直接使用 `sklearn.ensemble.gradient_boosting.GradientBoostingRegressor` 的 `n_estimators` 参数。 - -**[![gbt_model_complexity](../Images/7d4aae450c85e9ea83d3746485791394.jpg)](../auto_examples/applications/plot_model_complexity_influence.html)** - -在任何情况下都应该警告,降低的 model complexity (模型复杂性)可能会损害如上所述的准确性。例如,可以用快速线性模型来处理 non-linearly separable problem (非线性可分离问题),但是在该过程中预测能力将很可能受到影响。 - -### 7.1.5\. 特征提取延迟 - -大多数 scikit-learn 模型通常非常快,因为它们可以通过编译的 Cython 扩展或优化的计算库来实现。 另一方面,在许多现实世界的应用中,feature extraction process(特征提取过程)(即,将 database rows or network packets (数据库行或网络分组)的原始数据转换为 numpy arrays )来控制总体预测时间。例如在 Reuters text classification task(路透社文本分类任务)中,根据所选择的模型,整个准备(读取和解析 SGML 文件,将文本进行标记并将其散列为公共向量空间)的时间比实际预测代码的时间长 100 到 500 倍。 - -**[![prediction_time](../Images/997e17f4d9f18abfb95e6c9f1f289098.jpg)](../auto_examples/applications/plot_out_of_core_classification.html)** - -因此,在很多情况下,建议您仔细地对 carefully time and profile your feature extraction code ( 特征提取代码进行时间预估和简档),因为当您的 overall latency (整体延迟)对您的应用程序来说太慢时,可能是开始优化的好地方。 - -## 7.2\. 预测吞吐量 - -考虑到生产系统大小的另一个重要指标是 throughput (吞吐量),即在一定时间内可以做出的预测数量。以下是 [Prediction Latency](../auto_examples/applications/plot_prediction_latency.html#sphx-glr-auto-examples-applications-plot-prediction-latency-py) 示例的基准测试,该示例针对合成数据的多个 estimators (估计器)测量此数量: - -**[![throughput_benchmark](img/3ad7487dba3ebdba90bc11d2016d0c99.jpg)](../auto_examples/applications/plot_prediction_latency.html)** - -这些 throughputs(吞吐量)早单个进程上实现。提高应用程序吞吐量的一个明显的方法是产生其他实例(通常是 Python 中的进程,因为 [GIL](https://wiki.python.org/moin/GlobalInterpreterLock) )共享相同模型。还可能添加机器来分布式负载。关于如何实现这一点的详细解释超出了本文档的范围。 - -## 7.3\. 技巧和窍门 - -### 7.3.1\. 线性代数库 - -由于 scikit-learn 在很大程度上依赖于 Numpy/Scipy 和 线性代数,所以需要理解这些库的版本。 基本上,你应该确保使用优化的 [BLAS](https://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms) / [LAPACK](https://en.wikipedia.org/wiki/LAPACK) 构建 Numpy 库。 - -并非所有的模型都受益于优化的 BLAS 和 Lapack 实现。例如,基于(随机化)决策树的模型通常不依赖于内部循环中的 BLAS 调用,kernel SVMs (`SVC`, `SVR`, `NuSVC`, `NuSVR`) 。另一方面,使用 BLAS DGEMM 调用(通过 `numpy.dot`)实现的线性模型通常将受益于调整的 BLAS 实现,并且导致非优化 BLAS 的数量级加速。 - -你可以使用以下命令显示您的 NumPy / SciPy / scikit-learn 安装使用的 BLAS / LAPACK 实现: - -```py -from numpy.distutils.system_info import get_info -print(get_info('blas_opt')) -print(get_info('lapack_opt')) - -``` - -```py -Optimized(优化的) BLAS / LAPACK 实现包括: -``` - -* Atlas (需要通过在目标机器上 rebuilding 进行硬件特定调整) -* OpenBLAS -* MKL -* Apple Accelerate 和 vecLib frameworks (仅适用于 OSX) - -有关更多信息,请参见 [Scipy install page](http://docs.scipy.org/doc/numpy/user/install.html) 并在来自 Daniel Nouri 的博客 [blog post](http://danielnouri.org/notes/2012/12/19/libblas-and-liblapack-issues-and-speed,-with-scipy-and-ubuntu/) 它为 Debain / Ubuntu 提供了一些很好的一步一步的安装说明。 - -Warning - -Multithreaded BLAS libraries(多线程 BLAS 库)有时与 Python 的 `multiprocessing` 模块相冲突,这个模块由例如 `GridSearchCV` 和大多数其他估计器,它们使用 `n_jobs` 参数(除了 `SGDClassifier`, `SGDRegressor`, `Perceptron`, `PassiveAggressiveClassifier` 和 基于树的方法如 random forests(随机森林))。在 OpenMP 支持的情况下, Apple 的 Accelerate 和 OpenBLAS 也是如此。 - -除了 scikit-learn, Numpy 和 Scipy 也在内部使用 BLAS, 如上所述。 - -如果您遇到带有 `n_jobs>1` 或 `n_jobs=-1` 的 hanging subprocesses (挂起子进程),请确保你有一个单线程 BLAS 库,或者设置 `n_jobs=1` 或者升级到 Python 3.4 有一个新版本的 `multiprocessing` ,应该免于这个问题。 - -### 7.3.2\. 模型压缩 - -scikit-learn 中的 Model compression (模型压缩)只关注 linear models (线性模型)。 在这种情况下,这意味着我们要控制模型 sparsity (稀疏度)(即 模型向量中的非零坐标数)。将 model sparsity (模型稀疏度)与 sparse input data representation (稀疏输入数据表示)相结合是一个好主意。 - -以下是示例代码,说明了如何使用 `sparsify()` 方法: - -```py -clf = SGDRegressor(penalty='elasticnet', l1_ratio=0.25) -clf.fit(X_train, y_train).sparsify() -clf.predict(X_test) - -``` - -在这个例子中,我们更喜欢 `elasticnet` penalty(惩罚),因为它通常是 model compactness(模型紧凑性)和 prediction power (预测能力)之间的一个很好的妥协。还可以进一步调整 `l1_ratio` 参数(结合正则化强度 `alpha` )来控制这个权衡。 - -对于 synthetic data (合成数据),典型的 [benchmark](https://github.com/scikit-learn/scikit-learn/blob/master/benchmarks/bench_sparsify.py) 在模型和输入时都会降低 30% 的延迟。稀疏(分别为 0.000024 和 0.027400 非零系数比)。您的里程可能会因您的数据和模型的稀疏性和大小而有所不同。 因此,为了减少部署在生产服务器上的预测模型的内存使用,扩展可能非常有用。 - -### 7.3.3\. 模型重塑 - -Model reshaping(模型重塑)在于仅选择一部分可用功能以适应模型。换句话说,如果模型在学习阶段 discards features (丢弃特征),我们可以从输入中删除这些特征。这有几个好处。首先,它减少了模型本身的内存(因此是减少了时间)的开销。一旦知道要从上一次运行中保留哪些功能,它也允许在 pipeline 中 discard explicit feature selection components (丢弃显式的特征选择组件)。最后,它可以通过不收集和构建模型丢弃的特征来帮助减少数据访问和 feature extraction layers (特征提取层)upstream (上游)的处理时间和 I/O 的使用。例如,如果原始数据来自数据库,则可以通过使查询返回较轻的记录,从而可以编写更简单和更快速的查询或减少 I/O 的使用。 目前,reshaping(重塑)需要在 scikit-learn 中手动执行。 在 sparse input(稀疏输入)(特别是 `CSR` 格式)的情况下,通常不能生成相关的特征,使其列为空。 - -### 7.3.4\. 链接 - -> * [scikit-learn developer performance documentation](../developers/performance.html) -> * [Scipy sparse matrix formats documentation](http://docs.scipy.org/doc/scipy/reference/sparse.html) \ No newline at end of file diff --git a/docs/0.19.x/68.md b/docs/0.19.x/68.md deleted file mode 100755 index ec6f20eef523f139238a9379af69b39ad343b2fc..0000000000000000000000000000000000000000 --- a/docs/0.19.x/68.md +++ /dev/null @@ -1,329 +0,0 @@ -# 使用 scikit-learn 介绍机器学习 - -校验者: -        [@小瑶](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@李昊伟](https://github.com/apachecn/scikit-learn-doc-zh) -校验者: -        [@hlxstc](https://github.com/hlxstc) -        [@BWM-蜜蜂](https://github.com/apachecn/scikit-learn-doc-zh) -        [@小瑶](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@...](https://github.com/apachecn/scikit-learn-doc-zh) - -内容提要 - -在本节中,我们介绍一些在使用 scikit-learn 过程中用到的 [机器学习](https://en.wikipedia.org/wiki/Machine_learning) 词汇,并且给出一些例子阐释它们。 - -## 机器学习:问题设置 - -一般来说,一个学习问题通常会考虑一系列 n 个 [样本](https://en.wikipedia.org/wiki/Sample_(statistics)) 数据,然后尝试预测未知数据的属性。 如果每个样本是 [多个属性的数据](https://en.wikipedia.org/wiki/Multivariate_random_variable) (比如说是一个多维记录),就说它有许多“属性”,或称 **features(特征)** 。 - -我们可以将学习问题分为几大类: - -> * [监督学习](https://en.wikipedia.org/wiki/Supervised_learning) , 其中数据带有一个附加属性,即我们想要预测的结果值( [点击此处](../../supervised_learning.html#supervised-learning) 转到 scikit-learn 监督学习页面)。这个问题可以是: -> -> -> -> > * [分类](https://en.wikipedia.org/wiki/Classification_in_machine_learning) : 样本属于两个或更多个类,我们想从已经标记的数据中学习如何预测未标记数据的类别。 分类问题的一个例子是手写数字识别,其目的是将每个输入向量分配给有限数目的离散类别之一。 我们通常把分类视作监督学习的一个离散形式(区别于连续形式),从有限的类别中,给每个样本贴上正确的标签。 -> > * [回归](https://en.wikipedia.org/wiki/Regression_analysis) : 如果期望的输出由一个或多个连续变量组成,则该任务称为 _回归_ 。 回归问题的一个例子是预测鲑鱼的长度是其年龄和体重的函数。 -> -> -> * [无监督学习](https://en.wikipedia.org/wiki/Unsupervised_learning), 其中训练数据由没有任何相应目标值的一组输入向量x组成。这种问题的目标可能是在数据中发现彼此类似的示例所聚成的组,这种问题称为 [聚类](https://en.wikipedia.org/wiki/Cluster_analysis) , 或者,确定输入空间内的数据分布,称为 [密度估计](https://en.wikipedia.org/wiki/Density_estimation) ,又或从高维数据投影数据空间缩小到二维或三维以进行 _可视化_ ([点击此处](../../unsupervised_learning.html#unsupervised-learning) 转到 scikit-learn 无监督学习页面)。 - -训练集和测试集 - -机器学习是从数据的属性中学习,并将它们应用到新数据的过程。 这就是为什么机器学习中评估算法的普遍实践是把数据分割成 **训练集** (我们从中学习数据的属性)和 **测试集** (我们测试这些性质)。 - -## 加载示例数据集 - -<cite>scikit-learn</cite> 提供了一些标准数据集,例如 用于分类的 [iris](https://en.wikipedia.org/wiki/Iris_flower_data_set) 和 [digits](http://archive.ics.uci.edu/ml/datasets/Pen-Based+Recognition+of+Handwritten+Digits) 数据集 和 [波士顿房价回归数据集](http://archive.ics.uci.edu/ml/datasets/Housing) . - -在下文中,我们从我们的 shell 启动一个 Python 解释器,然后加载 `iris` 和 `digits` 数据集。我们的符号约定是 `$` 表示 shell 提示符,而 `>>>` 表示 Python 解释器提示符: - -```py -$ python ->>> from sklearn import datasets ->>> iris = datasets.load_iris() ->>> digits = datasets.load_digits() - -``` - -数据集是一个类似字典的对象,它保存有关数据的所有数据和一些元数据。 该数据存储在 `.data` 成员中,它是 `n_samples, n_features` 数组。 在监督问题的情况下,一个或多个响应变量存储在 `.target` 成员中。 有关不同数据集的更多详细信息,请参见 [专用数据集部分](../../datasets/index.html#datasets) 。 - -例如,在数字数据集的情况下,`digits.data` 使我们能够得到一些用于分类的样本特征: - -```py ->>> print(digits.data) -[[ 0\. 0\. 5\. ..., 0\. 0\. 0.] - [ 0\. 0\. 0\. ..., 10\. 0\. 0.] - [ 0\. 0\. 0\. ..., 16\. 9\. 0.] - ..., - [ 0\. 0\. 1\. ..., 6\. 0\. 0.] - [ 0\. 0\. 2\. ..., 12\. 0\. 0.] - [ 0\. 0\. 10\. ..., 12\. 1\. 0.]] - -``` - -并且 `digits.target` 表示了数据集内每个数字的真实类别,也就是我们期望从每个手写数字图像中学得的相应的数字标记: - -```py ->>> digits.target -array([0, 1, 2, ..., 8, 9, 8]) - -``` - -数据数组的形状 - -数据总是二维数组,形状 `(n_samples, n_features)` ,尽管原始数据可能具有不同的形状。 在数字的情况下,每个原始样本是形状 `(8, 8)` 的图像,可以使用以下方式访问: - -```py ->>> digits.images[0] -array([[ 0., 0., 5., 13., 9., 1., 0., 0.], - [ 0., 0., 13., 15., 10., 15., 5., 0.], - [ 0., 3., 15., 2., 0., 11., 8., 0.], - [ 0., 4., 12., 0., 0., 8., 8., 0.], - [ 0., 5., 8., 0., 0., 9., 8., 0.], - [ 0., 4., 11., 0., 1., 12., 7., 0.], - [ 0., 2., 14., 5., 10., 12., 0., 0.], - [ 0., 0., 6., 13., 10., 0., 0., 0.]]) - -``` - -该 [数据集上的简单示例](../../auto_examples/classification/plot_digits_classification.html#sphx-glr-auto-examples-classification-plot-digits-classification-py) 说明了如何从原始数据开始调整,形成可以在 scikit-learn 中使用的数据。 - -从外部数据集加载 - -要从外部数据集加载,请参阅 [加载外部数据集](../../datasets/index.html#external-datasets) 。 - -## 学习和预测 - -在数字数据集的情况下,任务是给出图像来预测其表示的数字。 我们给出了 10 个可能类(数字 0 到 9)中的每一个的样本,我们在这些类上 _拟合_ 一个 [估计器](https://en.wikipedia.org/wiki/Estimator) ,以便能够 _预测_ 未知的样本所属的类。 - -在 scikit-learn 中,分类的估计器是一个 Python 对象,它实现了 `fit(X, y)` 和 `predict(T)` 等方法。 - -估计器的一个例子类 `sklearn.svm.SVC` ,实现了 [支持向量分类](https://en.wikipedia.org/wiki/Support_vector_machine) 。 估计器的构造函数以相应模型的参数为参数,但目前我们将把估计器视为黑箱即可: - -```py ->>> from sklearn import svm ->>> clf = svm.SVC(gamma=0.001, C=100.) - -``` - -选择模型的参数 - -在这个例子中,我们手动设置 `gamma` 值。不过,通过使用 [网格搜索](../../modules/grid_search.html#grid-search) 及 [交叉验证](../../modules/cross_validation.html#cross-validation) 等工具,可以自动找到参数的良好值。 - -我们把我们的估计器实例命名为 `clf` ,因为它是一个分类器(classifier)。它现在必须拟合模型,也就是说,它必须从模型中 _learn(学习)_ 。 这是通过将我们的训练集传递给 `fit` 方法来完成的。作为一个训练集,让我们使用数据集中除最后一张以外的所有图像。 我们用 `[:-1]` Python 语法选择这个训练集,它产生一个包含 `digits.data` 中除最后一个条目(entry)之外的所有条目的新数组 - -```py ->>> clf.fit(digits.data[:-1], digits.target[:-1]) -SVC(C=100.0, cache_size=200, class_weight=None, coef0=0.0, - decision_function_shape='ovr', degree=3, gamma=0.001, kernel='rbf', - max_iter=-1, probability=False, random_state=None, shrinking=True, - tol=0.001, verbose=False) - -``` - -现在你可以预测新的值,特别是我们可以向分类器询问 `digits` 数据集中最后一个图像(没有用来训练的一条实例)的数字是什么: - -```py ->>> clf.predict(digits.data[-1:]) -array([8]) - -``` - -相应的图像如下: - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_digits_last_image_001.png](img/377b02d08a6b388008fc8cb132080d20.jpg)](../../auto_examples/datasets/plot_digits_last_image.html) - -正如你所看到的,这是一项具有挑战性的任务:图像分辨率差。你是否认同这个分类? - -这个分类问题的一个完整例子可以作为一个例子来运行和学习: 识别手写数字。 [Recognizing hand-written digits](../../auto_examples/classification/plot_digits_classification.html#sphx-glr-auto-examples-classification-plot-digits-classification-py). - -## 模型持久化 - -可以通过使用 Python 的内置持久化模块(即 [pickle](https://docs.python.org/2/library/pickle.html) )将模型保存: - -```py ->>> from sklearn import svm ->>> from sklearn import datasets ->>> clf = svm.SVC() ->>> iris = datasets.load_iris() ->>> X, y = iris.data, iris.target ->>> clf.fit(X, y) -SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, - decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf', - max_iter=-1, probability=False, random_state=None, shrinking=True, - tol=0.001, verbose=False) - ->>> import pickle ->>> s = pickle.dumps(clf) ->>> clf2 = pickle.loads(s) ->>> clf2.predict(X[0:1]) -array([0]) ->>> y[0] -0 - -``` - -在scikit的具体情况下,使用 joblib 替换 pickle( `joblib.dump` & `joblib.load` )可能会更有趣,这对大数据更有效,但只能序列化 (pickle) 到磁盘而不是字符串变量: - -```py ->>> from sklearn.externals import joblib ->>> joblib.dump(clf, 'filename.pkl') - -``` - -之后,您可以加载已保存的模型(可能在另一个 Python 进程中): - -```py ->>> clf = joblib.load('filename.pkl') - -``` - -Warning - -`joblib.dump` 以及 `joblib.load` 函数也接受 file-like(类文件) 对象而不是文件名。有关 Joblib 的数据持久化的更多信息,请 [点击此处](https://pythonhosted.org/joblib/persistence.html) 。 - -请注意,pickle 有一些安全性和维护性问题。有关使用 scikit-learn 的模型持久化的更多详细信息,请参阅 [模型持久化](../../modules/model_persistence.html#model-persistence) 部分。 - -## 规定 - -scikit-learn 估计器遵循某些规则,使其行为更可预测。 - -### 类型转换 - -除非特别指定,输入将被转换为 `float64` - -```py ->>> import numpy as np ->>> from sklearn import random_projection - ->>> rng = np.random.RandomState(0) ->>> X = rng.rand(10, 2000) ->>> X = np.array(X, dtype='float32') ->>> X.dtype -dtype('float32') - ->>> transformer = random_projection.GaussianRandomProjection() ->>> X_new = transformer.fit_transform(X) ->>> X_new.dtype -dtype('float64') - -``` - -在这个例子中,`X` 原本是 `float32` ,被 `fit_transform(X)` 转换成 `float64` 。 - -回归目标被转换为 `float64` ,但分类目标维持不变: - -```py ->>> from sklearn import datasets ->>> from sklearn.svm import SVC ->>> iris = datasets.load_iris() ->>> clf = SVC() ->>> clf.fit(iris.data, iris.target) -SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, - decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf', - max_iter=-1, probability=False, random_state=None, shrinking=True, - tol=0.001, verbose=False) - ->>> list(clf.predict(iris.data[:3])) -[0, 0, 0] - ->>> clf.fit(iris.data, iris.target_names[iris.target]) -SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, - decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf', - max_iter=-1, probability=False, random_state=None, shrinking=True, - tol=0.001, verbose=False) - ->>> list(clf.predict(iris.data[:3])) -['setosa', 'setosa', 'setosa'] - -``` - -这里,第一个 `predict()` 返回一个整数数组,因为在 `fit` 中使用了 `iris.target` (一个整数数组)。 第二个 `predict()` 返回一个字符串数组,因为 `iris.target_names` 是一个字符串数组。 - -### 再次训练和更新参数 - -估计器的超参数可以通过 [`sklearn.pipeline.Pipeline.set_params`](../../modules/generated/sklearn.pipeline.Pipeline.html#sklearn.pipeline.Pipeline.set_params "sklearn.pipeline.Pipeline.set_params") 方法在实例化之后进行更新。 调用 `fit()` 多次将覆盖以前的 `fit()` 所学到的参数: - -```py ->>> import numpy as np ->>> from sklearn.svm import SVC - ->>> rng = np.random.RandomState(0) ->>> X = rng.rand(100, 10) ->>> y = rng.binomial(1, 0.5, 100) ->>> X_test = rng.rand(5, 10) - ->>> clf = SVC() ->>> clf.set_params(kernel='linear').fit(X, y) -SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, - decision_function_shape='ovr', degree=3, gamma='auto', kernel='linear', - max_iter=-1, probability=False, random_state=None, shrinking=True, - tol=0.001, verbose=False) ->>> clf.predict(X_test) -array([1, 0, 1, 1, 0]) - ->>> clf.set_params(kernel='rbf').fit(X, y) -SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, - decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf', - max_iter=-1, probability=False, random_state=None, shrinking=True, - tol=0.001, verbose=False) ->>> clf.predict(X_test) -array([0, 0, 0, 1, 0]) - -``` - -在这里,估计器被 `SVC()` 构造之后,默认内核 `rbf` 首先被改变到 `linear` ,然后改回到 `rbf` 重新训练估计器并进行第二次预测。 - -### 多分类与多标签拟合 - -当使用 [`多类分类器`](../../modules/classes.html#module-sklearn.multiclass "sklearn.multiclass") 时,执行的学习和预测任务取决于参与训练的目标数据的格式: - -```py ->>> from sklearn.svm import SVC ->>> from sklearn.multiclass import OneVsRestClassifier ->>> from sklearn.preprocessing import LabelBinarizer - ->>> X = [[1, 2], [2, 4], [4, 5], [3, 2], [3, 1]] ->>> y = [0, 0, 1, 1, 2] - ->>> classif = OneVsRestClassifier(estimator=SVC(random_state=0)) ->>> classif.fit(X, y).predict(X) -array([0, 0, 1, 1, 2]) - -``` - -在上述情况下,分类器使用含有多个标签的一维数组训练模型,因此 `predict()` 方法可提供相应的多标签预测。分类器也可以通过标签二值化后的二维数组来训练: - -```py ->>> y = LabelBinarizer().fit_transform(y) ->>> classif.fit(X, y).predict(X) -array([[1, 0, 0], - [1, 0, 0], - [0, 1, 0], - [0, 0, 0], - [0, 0, 0]]) - -``` - -这里,使用 [`LabelBinarizer`](../../modules/generated/sklearn.preprocessing.LabelBinarizer.html#sklearn.preprocessing.LabelBinarizer "sklearn.preprocessing.LabelBinarizer") 将目标向量 y 转化成二值化后的二维数组。在这种情况下, `predict()` 返回一个多标签预测相应的 二维 数组。 - -请注意,第四个和第五个实例返回全零向量,表明它们不能匹配用来训练中的目标标签中的任意一个。使用多标签输出,类似地可以为一个实例分配多个标签: - -```py ->> from sklearn.preprocessing import MultiLabelBinarizer ->> y = [[0, 1], [0, 2], [1, 3], [0, 2, 3], [2, 4]] ->> y = MultiLabelBinarizer().fit_transform(y) ->> classif.fit(X, y).predict(X) -array([[1, 1, 0, 0, 0], - [1, 0, 1, 0, 0], - [0, 1, 0, 1, 0], - [1, 0, 1, 1, 0], - [0, 0, 1, 0, 1]]) - -``` - -在这种情况下,用来训练分类器的多个向量被赋予多个标记, [`MultiLabelBinarizer`](../../modules/generated/sklearn.preprocessing.MultiLabelBinarizer.html#sklearn.preprocessing.MultiLabelBinarizer "sklearn.preprocessing.MultiLabelBinarizer") 用来二值化多个标签产生二维数组并用来训练。 `predict()` 函数返回带有多个标签的二维数组作为每个实例的结果。 \ No newline at end of file diff --git a/docs/0.19.x/69.md b/docs/0.19.x/69.md deleted file mode 100755 index 8915b8e7f62f6b503bfd6c164734e0fdca657326..0000000000000000000000000000000000000000 --- a/docs/0.19.x/69.md +++ /dev/null @@ -1,31 +0,0 @@ -# 关于科学数据处理的统计学习教程 - -Statistical learning - -[Machine learning](https://en.wikipedia.org/wiki/Machine_learning) is a technique with a growing importance, as the size of the datasets experimental sciences are facing is rapidly growing. Problems it tackles range from building a prediction function linking different observations, to classifying observations, or learning the structure in an unlabeled dataset. - -This tutorial will explore _statistical learning_, the use of machine learning techniques with the goal of [statistical inference](https://en.wikipedia.org/wiki/Statistical_inference): drawing conclusions on the data at hand. - -Scikit-learn is a Python module integrating classic machine learning algorithms in the tightly-knit world of scientific Python packages ([NumPy](http://www.scipy.org), [SciPy](http://www.scipy.org), [matplotlib](http://matplotlib.org)). - -* [机器学习: scikit-learn 中的设置以及预估对象](settings.html) - * [数据集](settings.html#id1) - * [预估对象](settings.html#id2) -* [监督学习:从高维观察预测输出变量](supervised_learning.html) - * [最近邻和维度惩罚](supervised_learning.html#id2) - * [线性模型:从回归到稀疏](supervised_learning.html#id6) - * [支持向量积(SVMs)](supervised_learning.html#svms) -* [模型选择:选择估计量及其参数](model_selection.html) - * [分数和交叉验证分数](model_selection.html#id2) - * [交叉验证生成器](model_selection.html#cv-generators-tut) - * [网格搜索和交叉验证估计量](model_selection.html#id4) -* [无监督学习: 寻求数据表示](unsupervised_learning.html) - * [聚类: 对样本数据进行分组](unsupervised_learning.html#id2) - * [分解: 将一个信号转换成多个成份并且加载](unsupervised_learning.html#id6) -* [把它们放在一起](putting_together.html) - * [模型管道化](putting_together.html#id2) - * [用特征面进行人脸识别](putting_together.html#id3) - * [开放性问题: 股票市场结构](putting_together.html#id4) -* [寻求帮助](finding_help.html) - * [项目邮件列表](finding_help.html#id2) - * [机器学习从业者的 Q&A 社区](finding_help.html#q-a) \ No newline at end of file diff --git a/docs/0.19.x/7.md b/docs/0.19.x/7.md deleted file mode 100755 index 3d3504f1c097fa72c0d2f742eee1a7c6f9557018..0000000000000000000000000000000000000000 --- a/docs/0.19.x/7.md +++ /dev/null @@ -1,315 +0,0 @@ -# 1.6\. 最近邻 - -校验者: -        [@DataMonk2017](https://github.com/DataMonk2017) -        [@Veyron C](https://github.com/caopeirui) -        [@舞空](https://github.com/pan8664716) -翻译者: -        [@那伊抹微笑](https://github.com/wangyangting) - -[`sklearn.neighbors`](classes.html#module-sklearn.neighbors "sklearn.neighbors") 提供了 neighbors-based (基于邻居的) 无监督学习以及监督学习方法的功能。 无监督的最近邻是许多其它学习方法的基础,尤其是 manifold learning (流行学习) 和 spectral clustering (谱聚类)。 neighbors-based (基于邻居的) 监督学习分为两种: [classification](#classification) (分类)针对的是具有离散标签的数据,[regression](#regression) (回归)针对的是具有连续标签的数据。 - -最近邻方法背后的原理是从训练样本中找到与新点在距离上最近的预定数量的几个点,然后从这些点中预测标签。 这些点的数量可以是用户自定义的常量(K-最近邻学习), 也可以根据不同的点的局部密度(基于半径的最近邻学习)。距离通常可以通过任何度量来衡量: standard Euclidean distance(标准欧式距离)是最常见的选择。Neighbors-based(基于邻居的)方法被称为 _非泛化_ 机器学习方法, 因为它们只是简单地”记住”了其所有的训练数据(可能转换为一个快速索引结构,如 [Ball Tree](#ball-tree) 或 [KD Tree](#kd-tree))。 - -尽管它简单,但最近邻算法已经成功地适用于很多的分类和回归问题,例如手写数字或卫星图像的场景。 作为一个 non-parametric(非参数化)方法,它经常成功地应用于决策边界非常不规则的分类情景下。 - -[`sklearn.neighbors`](classes.html#module-sklearn.neighbors "sklearn.neighbors") 可以处理 Numpy 数组或 <cite>scipy.sparse</cite> 矩阵作为其输入。 对于密集矩阵,大多数可能的距离度量都是支持的。对于稀疏矩阵,支持搜索任意的 Minkowski 度量。 - -许多学习路径/方法都是依赖最近邻作为核心。 一个例子是 [核密度估计](density.html#kernel-density) , 在 [密度估计](density.html#density-estimation) 章节中有讨论。 - -## 1.6.1\. 无监督最近邻 - -[`NearestNeighbors`](generated/sklearn.neighbors.NearestNeighbors.html#sklearn.neighbors.NearestNeighbors "sklearn.neighbors.NearestNeighbors") (最近邻)实现了 unsupervised nearest neighbors learning(无监督的最近邻学习)。 它为三种不同的最近邻算法提供统一的接口:[`BallTree`](generated/sklearn.neighbors.BallTree.html#sklearn.neighbors.BallTree "sklearn.neighbors.BallTree"), [`KDTree`](generated/sklearn.neighbors.KDTree.html#sklearn.neighbors.KDTree "sklearn.neighbors.KDTree"), 还有基于 [`sklearn.metrics.pairwise`](classes.html#module-sklearn.metrics.pairwise "sklearn.metrics.pairwise") 的 brute-force 算法。算法的选择可通过关键字 `'algorithm'` 来控制, 并必须是 `['auto', 'ball_tree', 'kd_tree', 'brute']` 其中的一个。当默认值设置为 `'auto'` 时,算法会尝试从训练数据中确定最佳方法。有关上述每个选项的优缺点,参见 [`Nearest Neighbor Algorithms`_](#id11) 。 - -> Warning -> -> 关于最近邻算法,如果邻居 ![k+1](img/cd345cf1e9e01448cd544361983ab95a.jpg) 和邻居 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 具有相同的距离,但具有不同的标签, 结果将取决于训练数据的顺序。 - -### 1.6.1.1\. 找到最近邻 - -为了完成找到两组数据集中最近邻点的简单任务, 可以使用 [`sklearn.neighbors`](classes.html#module-sklearn.neighbors "sklearn.neighbors") 中的无监督算法: - -```py ->>> from sklearn.neighbors import NearestNeighbors ->>> import numpy as np ->>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]) ->>> nbrs = NearestNeighbors(n_neighbors=2, algorithm='ball_tree').fit(X) ->>> distances, indices = nbrs.kneighbors(X) ->>> indices -array([[0, 1], - [1, 0], - [2, 1], - [3, 4], - [4, 3], - [5, 4]]...) ->>> distances -array([[ 0\. , 1\. ], - [ 0\. , 1\. ], - [ 0\. , 1.41421356], - [ 0\. , 1\. ], - [ 0\. , 1\. ], - [ 0\. , 1.41421356]]) - -``` - -因为查询集匹配训练集,每个点的最近邻点是其自身,距离为0。 - -还可以有效地生成一个稀疏图来标识相连点之间的连接情况: - -```py ->>> nbrs.kneighbors_graph(X).toarray() -array([[ 1., 1., 0., 0., 0., 0.], - [ 1., 1., 0., 0., 0., 0.], - [ 0., 1., 1., 0., 0., 0.], - [ 0., 0., 0., 1., 1., 0.], - [ 0., 0., 0., 1., 1., 0.], - [ 0., 0., 0., 0., 1., 1.]]) - -``` - -我们的数据集是结构化的,因此按索引顺序的相邻点就在参数空间相邻,从而生成了近似 K-nearest neighbors(K-近邻)的块对角矩阵。 这种稀疏图在各种的利用点之间的空间关系进行无监督学习的情况下都很有用:特别地可参见 [`sklearn.manifold.Isomap`](generated/sklearn.manifold.Isomap.html#sklearn.manifold.Isomap "sklearn.manifold.Isomap"), [`sklearn.manifold.LocallyLinearEmbedding`](generated/sklearn.manifold.LocallyLinearEmbedding.html#sklearn.manifold.LocallyLinearEmbedding "sklearn.manifold.LocallyLinearEmbedding"), 和 [`sklearn.cluster.SpectralClustering`](generated/sklearn.cluster.SpectralClustering.html#sklearn.cluster.SpectralClustering "sklearn.cluster.SpectralClustering")。 - -### 1.6.1.2\. KDTree 和 BallTree 类 - -另外,我们可以使用 [`KDTree`](generated/sklearn.neighbors.KDTree.html#sklearn.neighbors.KDTree "sklearn.neighbors.KDTree") 或 [`BallTree`](generated/sklearn.neighbors.BallTree.html#sklearn.neighbors.BallTree "sklearn.neighbors.BallTree") 来找最近邻。 这是上文使用过的 [`NearestNeighbors`](generated/sklearn.neighbors.NearestNeighbors.html#sklearn.neighbors.NearestNeighbors "sklearn.neighbors.NearestNeighbors") 类所包含的功能。 [`KDTree`](generated/sklearn.neighbors.KDTree.html#sklearn.neighbors.KDTree "sklearn.neighbors.KDTree") 和 [`BallTree`](generated/sklearn.neighbors.BallTree.html#sklearn.neighbors.BallTree "sklearn.neighbors.BallTree") 具有相同的接口; 我们将在这里展示使用 [`KDTree`](generated/sklearn.neighbors.KDTree.html#sklearn.neighbors.KDTree "sklearn.neighbors.KDTree") 的例子: - -```py ->>> from sklearn.neighbors import KDTree ->>> import numpy as np ->>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]) ->>> kdt = KDTree(X, leaf_size=30, metric='euclidean') ->>> kdt.query(X, k=2, return_distance=False) -array([[0, 1], - [1, 0], - [2, 1], - [3, 4], - [4, 3], - [5, 4]]...) - -``` - -对于近邻搜索中选项的更多信息,包括各种距离度量的说明和策略的说明等,请参阅 [`KDTree`](generated/sklearn.neighbors.KDTree.html#sklearn.neighbors.KDTree "sklearn.neighbors.KDTree") 和 [`BallTree`](generated/sklearn.neighbors.BallTree.html#sklearn.neighbors.BallTree "sklearn.neighbors.BallTree") 类文档。 关于可用度量距离的列表,请参阅 [`DistanceMetric`](generated/sklearn.neighbors.DistanceMetric.html#sklearn.neighbors.DistanceMetric "sklearn.neighbors.DistanceMetric") 类。 - -## 1.6.2\. 最近邻分类 - -最近邻分类属于 _基于实例的学习_ 或 _非泛化学习_ :它不会去构造一个泛化的内部模型,而是简单地存储训练数据的实例。 分类是由每个点的最近邻的简单多数投票中计算得到的:一个查询点的数据类型是由它最近邻点中最具代表性的数据类型来决定的。 - -```py -scikit-learn 实现了两种不同的最近邻分类器: 基于每个查询点的 个最近邻实现, -``` - -其中 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 是用户指定的整数值。[`RadiusNeighborsClassifier`](generated/sklearn.neighbors.RadiusNeighborsClassifier.html#sklearn.neighbors.RadiusNeighborsClassifier "sklearn.neighbors.RadiusNeighborsClassifier") 基于每个查询点的固定半径 ![r](img/451ef7ed1a14a6cdc38324c8a5c7c683.jpg) 内的邻居数量实现, 其中 ![r](img/451ef7ed1a14a6cdc38324c8a5c7c683.jpg) 是用户指定的浮点数值。 - -```py - -邻居分类是 下的两种技术中比较常用的一种。 值的最佳选择是高度依赖数据的: -``` - -通常较大的 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 是会抑制噪声的影响,但是使得分类界限不明显。 - -如果数据是不均匀采样的,那么 [`RadiusNeighborsClassifier`](generated/sklearn.neighbors.RadiusNeighborsClassifier.html#sklearn.neighbors.RadiusNeighborsClassifier "sklearn.neighbors.RadiusNeighborsClassifier") 中的基于半径的近邻分类可能是更好的选择。 - -```py -用户指定一个固定半径 ,使得稀疏邻居中的点使用较少的最近邻来分类。 -``` - -对于高维参数空间,这个方法会由于所谓的 “维度灾难” 而变得不那么有效。 - -基本的最近邻分类使用统一的权重:分配给查询点的值是从最近邻的简单多数投票中计算出来的。 在某些环境下,最好对邻居进行加权,使得更近邻更有利于拟合。可以通过 `weights` 关键字来实现。 - -默认值 `weights = 'uniform'` 为每个近邻分配统一的权重。而 `weights = 'distance'` 分配权重与查询点的距离成反比。 或者,用户可以自定义一个距离函数用来计算权重。 - - -| target: | ../auto_examples/neighbors/plot_classification.html | -| --- | --- | -| scale: | 50 | -| --- | --- | - - -| target: | ../auto_examples/neighbors/plot_classification.html | -| --- | --- | -| scale: | 50 | -| --- | --- | - -**![classification_1](img/1a91bab921cf39f58a522ed15f475235.jpg) ![classification_2](img/ae484baf10384efcf4d993631f4641e7.jpg)** - -示例: - -* [Nearest Neighbors Classification](../auto_examples/neighbors/plot_classification.html#sphx-glr-auto-examples-neighbors-plot-classification-py): 使用最近邻进行分类的示例。 - -## 1.6.3\. 最近邻回归 - -最近邻回归是用在数据标签为连续变量,而不是离散变量的情况下。分配给查询点的标签是由它的最近邻标签的均值计算而来的。 - -scikit-learn 实现了两种不同的最近邻回归:[`KNeighborsRegressor`](generated/sklearn.neighbors.KNeighborsRegressor.html#sklearn.neighbors.KNeighborsRegressor "sklearn.neighbors.KNeighborsRegressor") 基于每个查询点的 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 个最近邻实现, 其中 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 是用户指定的整数值。[`RadiusNeighborsRegressor`](generated/sklearn.neighbors.RadiusNeighborsRegressor.html#sklearn.neighbors.RadiusNeighborsRegressor "sklearn.neighbors.RadiusNeighborsRegressor") 基于每个查询点的固定半径 ![r](img/451ef7ed1a14a6cdc38324c8a5c7c683.jpg) 内的邻点数量实现, 其中 ![r](img/451ef7ed1a14a6cdc38324c8a5c7c683.jpg) 是用户指定的浮点数值。 - -基本的最近邻回归使用统一的权重:即,本地邻域内的每个邻点对查询点的分类贡献一致。 在某些环境下,对邻点加权可能是有利的,使得附近点对于回归所作出的贡献多于远处点。 这可以通过 `weights` 关键字来实现。默认值 `weights = 'uniform'` 为所有点分配同等权重。 而 `weights = 'distance'` 分配的权重与查询点距离呈反比。 或者,用户可以自定义一个距离函数用来计算权重。 - -![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_regression_0011.png](img/207e92cfc624372bc9c72a160c02114f.jpg) - - -| target: | ../auto_examples/neighbors/plot_regression.html :align: center - -> <colgroup><col class="field-name"> <col class="field-body"></colgroup> -> | scale: | 75 | -> | --- | --- | - -使用多输出的最近邻进行回归分析 [Face completion with a multi-output estimators](../auto_examples/plot_multioutput_face_completion.html#sphx-glr-auto-examples-plot-multioutput-face-completion-py)。 | -| --- | --- | - -在这个示例中,输入 X 是脸上半部分像素,输出 Y 是脸下半部分像素。 - - -| target: | ../auto_examples/plot_multioutput_face_completion.html :scale: 75 - -> <colgroup><col class="field-name"> <col class="field-body"></colgroup> -> | align: | center | -> | --- | --- | - - | -| --- | --- | - -示例: - -* [Nearest Neighbors regression](../auto_examples/neighbors/plot_regression.html#sphx-glr-auto-examples-neighbors-plot-regression-py): 使用最近邻进行回归的示例。 -* [Face completion with a multi-output estimators](../auto_examples/plot_multioutput_face_completion.html#sphx-glr-auto-examples-plot-multioutput-face-completion-py): 使用最近邻进行多输出回归的示例。 - -## 1.6.4\. 最近邻算法 - -### 1.6.4.1\. 暴力计算 - -最近邻的快速计算是机器学习中一个活跃的研究领域。最简单的近邻搜索的实现涉及数据集中所有成对点之间距离的暴力计算: 对于 ![D](img/e03066df748abd9273db055cb79f0f01.jpg) 维度中的 ![N](img/a44a7c045f2217894a894c482861387a.jpg) 个样本来说, 这个方法的复杂度是 ![O[D N^2]](img/2d3029206649000f40ed9f51bbeceafb.jpg)。 对于小数据样本,高效的暴力近邻搜索是非常有竞争力的。 然而,随着样本数 ![N](img/a44a7c045f2217894a894c482861387a.jpg) 的增长,暴力方法很快变得不切实际了。在 [`sklearn.neighbors`](classes.html#module-sklearn.neighbors "sklearn.neighbors") 类中, 暴力近邻搜索通过关键字 `algorithm = 'brute'` 来指定,并通过 [`sklearn.metrics.pairwise`](classes.html#module-sklearn.metrics.pairwise "sklearn.metrics.pairwise") 中的例程来进行计算。 - -### 1.6.4.2\. K-D 树 - -为了解决效率低下的暴力计算方法,已经发明了大量的基于树的数据结构。总的来说, 这些结构试图通过有效地编码样本的 aggregate distance (聚合距离) 信息来减少所需的距离计算量。 基本思想是,若 ![A](img/eeaf066f8cca5064b706ccfc4728323d.jpg) 点距离 ![B](img/502926bb104c175c6f3e809b0207830c.jpg) 点非常远,![B](img/502926bb104c175c6f3e809b0207830c.jpg) 点距离 ![C](img/4b6d782a67ac392e97215c46b7590bf7.jpg) 点非常近, 可知 ![A](img/eeaf066f8cca5064b706ccfc4728323d.jpg) 点与 ![C](img/4b6d782a67ac392e97215c46b7590bf7.jpg) 点很遥远,_不需要明确计算它们的距离_。 通过这样的方式,近邻搜索的计算成本可以降低为 ![O[D N \log(N)]](img/a98f0fb22381bfc1d14fc1e3f7e737e5.jpg) 或更低。 这是对于暴力搜索在大样本数 ![N](img/a44a7c045f2217894a894c482861387a.jpg) 中表现的显著改善。 - -利用这种聚合信息的早期方法是 _KD tree_ 数据结构(* K-dimensional tree* 的简写), 它将二维 _Quad-trees_ 和三维 _Oct-trees_ 推广到任意数量的维度. KD 树是一个二叉树结构,它沿着数据轴递归地划分参数空间,将其划分为嵌入数据点的嵌套的各向异性区域。 KD 树的构造非常快:因为只需沿数据轴执行分区, 无需计算 ![D](img/e03066df748abd9273db055cb79f0f01.jpg)-dimensional 距离。 一旦构建完成, 查询点的最近邻距离计算复杂度仅为 ![O[\log(N)]](img/7b6cebf625d680ab33eba86d34885910.jpg) 。 虽然 KD 树的方法对于低维度 (![D < 20](img/7fb5b8aaa79d55e35332a1f02a5aee04.jpg)) 近邻搜索非常快, 当 ![D](img/e03066df748abd9273db055cb79f0f01.jpg) 增长到很大时, 效率变低: 这就是所谓的 “维度灾难” 的一种体现。 在 scikit-learn 中, KD 树近邻搜索可以使用关键字 `algorithm = 'kd_tree'` 来指定, 并且使用类 [`KDTree`](generated/sklearn.neighbors.KDTree.html#sklearn.neighbors.KDTree "sklearn.neighbors.KDTree") 来计算。 - -References: - -* [“Multidimensional binary search trees used for associative searching”](http://dl.acm.org/citation.cfm?doid=361002.361007), Bentley, J.L., Communications of the ACM (1975) - -### 1.6.4.3\. Ball 树 - -为了解决 KD 树在高维上效率低下的问题, _ball 树_ 数据结构就被研发出来了. 其中 KD 树沿卡迪尔轴(即坐标轴)分割数据, ball 树在沿着一系列的 hyper-spheres 来分割数据. 通过这种方法构建的树要比 KD 树消耗更多的时间, 但是这种数据结构对于高结构化的数据是非常有效的, 即使在高维度上也是一样. - -```py -ball 树将数据递归地划分为由质心 和半径 定义的节点, -``` - -使得节点中的每个点位于由 ![r](img/451ef7ed1a14a6cdc38324c8a5c7c683.jpg) 和 ![C](img/4b6d782a67ac392e97215c46b7590bf7.jpg) 定义的 hyper-sphere 内. 通过使用 _triangle inequality(三角不等式)_ 减少近邻搜索的候选点数: - -![|x+y| \leq |x| + |y|](img/5df8f915c528f34f0ada91db5228605f.jpg) - -通过这种设置, 测试点和质心之间的单一距离计算足以确定距节点内所有点的距离的下限和上限. 由于 ball 树节点的球形几何, 它在高维度上的性能超出 _KD-tree_, 尽管实际的性能高度依赖于训练数据的结构. 在 scikit-learn 中, 基于 ball 树的近邻搜索可以使用关键字 `algorithm = 'ball_tree'` 来指定, 并且使用类 [`sklearn.neighbors.BallTree`](generated/sklearn.neighbors.BallTree.html#sklearn.neighbors.BallTree "sklearn.neighbors.BallTree") 来计算. 或者, 用户可以直接使用 [`BallTree`](generated/sklearn.neighbors.BallTree.html#sklearn.neighbors.BallTree "sklearn.neighbors.BallTree") 类. - -参考: - -* [“Five balltree construction algorithms”](http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.91.8209), Omohundro, S.M., International Computer Science Institute Technical Report (1989) - -### 1.6.4.4\. 最近邻算法的选择 - -对于给定数据集的最优算法是一个复杂的选择, 并且取决于多个因素: - -* 样本数量 ![N](img/a44a7c045f2217894a894c482861387a.jpg) (i.e. `n_samples`) 和维度 ![D](img/e03066df748abd9273db055cb79f0f01.jpg) (例如. `n_features`). - - * _Brute force_ 查询时间以 ![O[D N]](img/cf8cc964dfa6df1a7473fe033f9fb642.jpg) 增长 - - * _Ball tree_ 查询时间大约以 ![O[D \log(N)]](img/70abd4aa320170aa6dbe8204a5ed846e.jpg) 增长 - - * ```py - KD tree 的查询时间 的变化是很难精确描述的. - ``` - - 对于较小的 ![D](img/e03066df748abd9273db055cb79f0f01.jpg) (小于20) 的成本大约是 ![O[D\log(N)]](img/f211ed45608192b0763ed51c85b60811.jpg), 并且 KD 树更加有效. - - 对于较大的 ![D](img/e03066df748abd9273db055cb79f0f01.jpg) 成本的增加接近 ![O[DN]](img/c5b0e465d16add1d02594ec434515c04.jpg), 由于树结构引起的开销会导致查询效率比暴力还要低. - - ```py - 对于小数据集 ( 小于30), 相当于 , 暴力算法比基于树的算法更加有效. - ``` - - [`KDTree`](generated/sklearn.neighbors.KDTree.html#sklearn.neighbors.KDTree "sklearn.neighbors.KDTree") 和 [`BallTree`](generated/sklearn.neighbors.BallTree.html#sklearn.neighbors.BallTree "sklearn.neighbors.BallTree") 通过提供一个 _leaf size_ 参数来解决这个问题: - - 这控制了查询切换到暴力计算样本数量. 使得两种算法的效率都能接近于对较小的 ![N](img/a44a7c045f2217894a894c482861387a.jpg) 的暴力计算的效率. - -* 数据结构: 数据的 _intrinsic dimensionality_ (本征维数) 和/或数据的 _sparsity_ (稀疏度). 本征维数是指数据所在的流形的维数 ![d \le D](img/20310556eb1fb84146ff2584e166fd9c.jpg), 在参数空间可以是线性或非线性的. 稀疏度指的是数据填充参数空间的程度(这与“稀疏”矩阵中使用的概念不同, 数据矩阵可能没有零项, 但是从这个意义上来讲,它的 **structure** 仍然是 “稀疏” 的)。 - - * _Brute force_ (暴力查询)时间不受数据结构的影响。 - * _Ball tree_ 和 _KD tree_ 的数据结构对查询时间影响很大. 一般地, 小维度的 sparser (稀疏) 数据会使查询更快. 因为 KD 树的内部表现形式是与参数轴对齐的, 对于任意的结构化数据它通常不会表现的像 ball tree 那样好. - - 在机器学习中往往使用的数据集是非常结构化的, 而且非常适合基于树结构的查询。 - -* query point(查询点)所需的近邻数 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 。 - - > * _Brute force_ 查询时间几乎不受 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 值的影响. - > * _Ball tree_ 和 _KD tree_ 的查询时间会随着 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 的增加而变慢. 这是由于两个影响: 首先, ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 的值越大在参数空间中搜索的部分就越大. 其次, 使用 ![k > 1](img/a036c2c31320cfaea7959236c1b81d4c.jpg) 进行树的遍历时, 需要对内部结果进行排序. - - 当 ![k](img/f93871977da52a6d11045d57c3e18728.jpg) 相比 ![N](img/a44a7c045f2217894a894c482861387a.jpg) 变大时, 在基于树的查询中修剪树枝的能力是减弱的. 在这种情况下, 暴力查询会更加有效. - -* query points(查询点)数. ball tree 和 KD Tree 都需要一个构建阶段. 在许多查询中分摊时,这种结构的成本可以忽略不计。 如果只执行少量的查询, 可是构建成本却占总成本的很大一部分. 如果仅需查询很少的点, 暴力方法会比基于树的方法更好. - -一般地, `algorithm = 'auto'` 选择 `'kd_tree'` 如果 ![k < N/2](img/f8f807bd22e1f9f3c4271c78c8cb33fa.jpg) 并且 `'effective_metric_'` 在 `'kd_tree'` 的列表 `'VALID_METRICS'` 中. 它选择 `'ball_tree'` 如果 ![k < N/2](img/f8f807bd22e1f9f3c4271c78c8cb33fa.jpg) 并且 `'effective_metric_'` 在 `'ball_tree'` 的列表 `'VALID_METRICS'` 中. 它选择 `'brute'` 如果 ![k < N/2](img/f8f807bd22e1f9f3c4271c78c8cb33fa.jpg) 并且 `'effective_metric_'` 不在 `'kd_tree'` 或 `'ball_tree'` 的列表 `'VALID_METRICS'` 中. 它选择 `'brute'` 如果 ![k >= N/2](img/bdc1e4261347e1c74950e91fa4f2230f.jpg). - -这种选择基于以下假设: 查询点的数量与训练点的数量至少在相同的数量级, 并且 `leaf_size` 接近其默认值 `30`. - -### 1.6.4.5\. `leaf_size` 的影响 - -如上所述, 对于小样本暴力搜索是比基于数的搜索更有效的方法. 这一事实在 ball 树和 KD 树中被解释为在叶节点内部切换到蛮力搜索. 该开关的级别可以使用参数 `leaf_size` 来指定. 这个参数选择有很多的效果: - -```py -构造时间 -``` - -更大的 `leaf_size` 会导致更快的树构建时间, 因为需要创建更少的节点. - -```py -查询时间 -``` - -一个大或小的 `leaf_size` 可能会导致次优查询成本. 当 `leaf_size` 接近 1 时, 遍历节点所涉及的开销大大减慢了查询时间. 当 `leaf_size`, 接近训练集的大小,查询变得本质上是暴力的. 这些之间的一个很好的妥协是 `leaf_size = 30`, 这是该参数的默认值. - -**内存** 随着leaf_size的增加,存储树结构所需的内存减少。 对于存储每个节点的D维质心的ball tree,这点至关重要。 针对 [`BallTree`](generated/sklearn.neighbors.BallTree.html#sklearn.neighbors.BallTree "sklearn.neighbors.BallTree") 所需的存储空间近似于 `1 / leaf_size` 乘以训练集的大小. - -`leaf_size` 不被 brute force queries(暴力查询)所引用. - -## 1.6.5\. 最近质心分类 - -该 [`NearestCentroid`](generated/sklearn.neighbors.NearestCentroid.html#sklearn.neighbors.NearestCentroid "sklearn.neighbors.NearestCentroid") 分类器是一个简单的算法, 通过其成员的质心来表示每个类。 实际上, 这使得它类似于 `sklearn.KMeans` 算法的标签更新阶段. 它也没有参数选择, 使其成为良好的基准分类器. 然而,它确实受到非凸类的影响,即当类有显著不同的方差时。所以这个分类器假设所有维度的方差都是相等的。 对于没有做出这个假设的更复杂的方法, 请参阅线性判别分析 ([`sklearn.discriminant_analysis.LinearDiscriminantAnalysis`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis "sklearn.discriminant_analysis.LinearDiscriminantAnalysis")) 和二次判别分析 ([`sklearn.discriminant_analysis.QuadraticDiscriminantAnalysis`](generated/sklearn.discriminant_analysis.QuadraticDiscriminantAnalysis.html#sklearn.discriminant_analysis.QuadraticDiscriminantAnalysis "sklearn.discriminant_analysis.QuadraticDiscriminantAnalysis")). 默认的 [`NearestCentroid`](generated/sklearn.neighbors.NearestCentroid.html#sklearn.neighbors.NearestCentroid "sklearn.neighbors.NearestCentroid") 用法示例如下: - -```py ->>> from sklearn.neighbors.nearest_centroid import NearestCentroid ->>> import numpy as np ->>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]) ->>> y = np.array([1, 1, 1, 2, 2, 2]) ->>> clf = NearestCentroid() ->>> clf.fit(X, y) -NearestCentroid(metric='euclidean', shrink_threshold=None) ->>> print(clf.predict([[-0.8, -1]])) -[1] - -``` - -### 1.6.5.1\. 最近缩小质心 - -该 [`NearestCentroid`](generated/sklearn.neighbors.NearestCentroid.html#sklearn.neighbors.NearestCentroid "sklearn.neighbors.NearestCentroid") 分类器有一个 `shrink_threshold` 参数, 它实现了 nearest shrunken centroid 分类器. 实际上, 每个质心的每个特征的值除以该特征的类中的方差. 然后通过 `shrink_threshold` 来减小特征值. 最值得注意的是, 如果特定特征值过0, 则将其设置为0. 实际上,这个方法移除了影响分类器的特征。 这很有用, 例如, 去除噪声特征. - -在以下例子中, 使用一个较小的 shrink 阀值将模型的准确度从 0.81 提高到 0.82. - - -| target: | ../auto_examples/neighbors/plot_nearest_centroid.html | -| --- | --- | -| scale: | 50 | -| --- | --- | - - -| target: | ../auto_examples/neighbors/plot_nearest_centroid.html | -| --- | --- | -| scale: | 50 | -| --- | --- | - -**![nearest_centroid_1](img/27eaae520bfaa9c4bdbef494c5029741.jpg) ![nearest_centroid_2](img/a561362ff63affeb799b9d33423235a3.jpg)** - -例子: - -* [Nearest Centroid Classification](../auto_examples/neighbors/plot_nearest_centroid.html#sphx-glr-auto-examples-neighbors-plot-nearest-centroid-py): 一个分类的例子, 它使用了不同 shrink 阀值的最近质心. \ No newline at end of file diff --git a/docs/0.19.x/70.md b/docs/0.19.x/70.md deleted file mode 100755 index 85759ebe12c0c14ad9998e674ff6fd9c6e0572e2..0000000000000000000000000000000000000000 --- a/docs/0.19.x/70.md +++ /dev/null @@ -1,76 +0,0 @@ -# 机器学习: scikit-learn 中的设置以及预估对象 - -校验者: -        [@Kyrie](https://github.com/apachecn/scikit-learn-doc-zh) -        [@片刻](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@冰块](https://github.com/apachecn/scikit-learn-doc-zh) - -## 数据集 - -Scikit-learn可以从一个或者多个数据集中学习信息,这些数据集合可表示为2维阵列,也可认为是一个列表。列表的第一个维度代表 **样本** ,第二个维度代表 **特征** (每一行代表一个样本,每一列代表一种特征)。 - -样例: iris 数据集(鸢尾花卉数据集) - -```py ->>> from sklearn import datasets ->>> iris = datasets.load_iris() ->>> data = iris.data ->>> data.shape -(150, 4) - -``` - -这个数据集包含150个样本,每个样本包含4个特征:花萼长度,花萼宽度,花瓣长度,花瓣宽度,详细数据可以通过``iris.DESCR``查看。 - -如果原始数据不是``(n_samples, n_features)``的形状时,使用之前需要进行预处理以供scikit-learn使用。 - -数据预处理样例:digits数据集(手写数字数据集) - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_digits_last_image_001.png](img/377b02d08a6b388008fc8cb132080d20.jpg)](../../auto_examples/datasets/plot_digits_last_image.html) - -digits数据集包含1797个手写数字的图像,每个图像为8*8像素 - -```py ->>> digits = datasets.load_digits() ->>> digits.images.shape -(1797, 8, 8) ->>> import matplotlib.pyplot as plt ->>> plt.imshow(digits.images[-1], cmap=plt.cm.gray_r) - - -``` - -为了在scikit中使用这一数据集,需要将每一张8×8的图像转换成长度为64的特征向量 - -```py ->>> data = digits.images.reshape((digits.images.shape[0], -1)) - -``` - -## 预估对象 - -**拟合数据**: scikit-learn实现最重要的一个API是`estimator`。estimators是基于数据进行学习的任何对象,它可以是一个分类器,回归或者是一个聚类算法,或者是从原始数据中提取/过滤有用特征的变换器。 - -所有的拟合模型对象拥有一个名为``fit``的方法,参数是一个数据集(通常是一个2维列表): - -```py ->>> estimator.fit(data) - -``` - -**拟合模型对象构造参数**: 在创建一个拟合模型时,可以设置相关参数,在创建之后也可以修改对应的参数: - -```py ->>> estimator = Estimator(param1=1, param2=2) ->>> estimator.param1 -1 - -``` - -**拟合参数**: 当拟合模型完成对数据的拟合之后,可以从拟合模型中获取拟合的参数结果,所有拟合完成的参数均以下划线(_)作为结尾: - -```py ->>> estimator.estimated_param_ - -``` \ No newline at end of file diff --git a/docs/0.19.x/71.md b/docs/0.19.x/71.md deleted file mode 100755 index ce2573e88528b2f27f68adb8bda3297f7058ae1d..0000000000000000000000000000000000000000 --- a/docs/0.19.x/71.md +++ /dev/null @@ -1,371 +0,0 @@ -# 监督学习:从高维观察预测输出变量 - -校验者: -        [@Kyrie](https://github.com/apachecn/scikit-learn-doc-zh) -        [@片刻](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@森系](https://github.com/apachecn/scikit-learn-doc-zh) - -监督学习解决的问题 - -[监督学习](../../supervised_learning.html#supervised-learning) 在于学习两个数据集的联系:观察数据 `X` 和我们正在尝试预测的额外变量 `y` (通常称“目标”或“标签”), 而且通常是长度为 `n_samples` 的一维数组。 - -scikit-learn 中所有监督的 <cite>估计量 <https://en.wikipedia.org/wiki/Estimator></cite> 都有一个用来拟合模型的 `fit(X, y)` 方法,和根据给定的没有标签观察值 `X` 返回预测的带标签的 `y` 的 `predict(X)` 方法。 - -词汇:分类和回归 - -如果预测任务是为了将观察值分类到有限的标签集合中,换句话说,就是给观察对象命名,那任务就被称为 **分类** 任务。另外,如果任务是为了预测一个连续的目标变量,那就被称为 **回归** 任务。 - -当在 scikit-learn 中进行分类时,`y` 是一个整数或字符型的向量。 - -注:可以查看 :ref: <cite>用 scikit-learn 进行机器学习介绍 <introduction></cite> 快速了解机器学习中的基础词汇。 - -## 最近邻和维度惩罚 - -鸢尾属植物分类: - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_iris_dataset_001.png](img/4246a718076893e37084bc69a7e16007.jpg)](../../auto_examples/datasets/plot_iris_dataset.html) - -鸢尾属植物数据集是根据花瓣长度、花瓣度度、萼片长度和萼片宽度4个特征对3种不同类型的鸢尾属植物进行分类: - -```py ->>> import numpy as np ->>> from sklearn import datasets ->>> iris = datasets.load_iris() ->>> iris_X = iris.data ->>> iris_y = iris.target ->>> np.unique(iris_y) -array([0, 1, 2]) - -``` - -### K近邻分类器 - -[最近邻](https://en.wikipedia.org/wiki/K-nearest_neighbor_algorithm): 也许是最简单的分类器:给定一个新的观察值 `X_test`,用最接近的特征向量在训练集(比如,用于训练估计器的数据)找到观察值。(请看 Scikit-learn 在线学习文档的 [最近邻章节](../../modules/neighbors.html#neighbors) 获取更多关于这种分类器的信息) - -训练集和测试集 - -当用任意的学习算法进行实验时,最重要的就是不要在用于拟合估计器的数据上测试一个估计器的预期值,因为这不会评估在 **新数据** 上估计器的执行情况。这也是数据集经常被分为 _训练_ 和 _测试_ 数据的原因。 - -**KNN(k 最近邻)分类器例子**: - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_classification_001.png](img/86003b5287219bcbec1586985a110629.jpg)](../../auto_examples/neighbors/plot_classification.html) - -```py ->>> # 将鸢尾属植物数据集分解为训练集和测试集 ->>> # 随机排列,用于使分解的数据随机分布 ->>> np.random.seed(0) ->>> indices = np.random.permutation(len(iris_X)) ->>> iris_X_train = iris_X[indices[:-10]] ->>> iris_y_train = iris_y[indices[:-10]] ->>> iris_X_test = iris_X[indices[-10:]] ->>> iris_y_test = iris_y[indices[-10:]] ->>> # 创建和拟合一个最近邻分类器 ->>> from sklearn.neighbors import KNeighborsClassifier ->>> knn = KNeighborsClassifier() ->>> knn.fit(iris_X_train, iris_y_train) -KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski', - metric_params=None, n_jobs=1, n_neighbors=5, p=2, - weights='uniform') ->>> knn.predict(iris_X_test) -array([1, 2, 1, 0, 0, 0, 2, 1, 2, 0]) ->>> iris_y_test -array([1, 1, 1, 0, 0, 0, 2, 1, 2, 0]) - -``` - -### 维度惩罚 - -为了使一个估计器有效,你需要邻接点间的距离小于一些值:![d](img/adf83056bc2bd05628e24c40cb728b3d.jpg),这取决于具体问题。在一维中,这需要平均 <cite>n sim 1/d</cite> 点。在上文 ![k](img/f93871977da52a6d11045d57c3e18728.jpg)-NN 例子中,如果数据只是由一个0到1的特征值和 ![n](img/c87d9110f3d32ffa5fa08671e4af11fb.jpg) 训练观察值所描述,那么新数据将不会超过 ![1/n](img/0a3546c8f30354c128ef2acb96e91e16.jpg)。因此,最近邻决策规则会很有效率,因为与类间特征变量范围相比, ![1/n](img/0a3546c8f30354c128ef2acb96e91e16.jpg) 很小。 - -如果特征数是 ![p](img/e2f9b08680b30cfb80102f69264fdd5c.jpg),你现在就需要 ![n \sim 1/d^p](img/6bcc641ece97b81c42261e28eaad3ad7.jpg) 点。也就是说我们在一维 ![[0, 1]](img/35b3276dd7e50cda7dd79a91161a1a26.jpg) 空间里需要10个点,在 ![p](img/e2f9b08680b30cfb80102f69264fdd5c.jpg) 维里就需要 ![10^p](img/e5ad06b17e1bacf475bf9247d93d1419.jpg) 个点。当 ![p](img/e2f9b08680b30cfb80102f69264fdd5c.jpg) 增大时,为了得到一个好的估计器,相应的训练点数量就需要成倍增大。 - -比如,如果每个点只是单个数字(8个字节),那么一个 ![k](img/f93871977da52a6d11045d57c3e18728.jpg)-NN 估计器在一个非常小的 ![p \sim 20](img/ac11972df0ad68aba63757a4ba1ee02b.jpg) 维度下就需要比现在估计的整个互联网的大小(±1000 艾字节或更多)还要多的训练数据。 - -这叫 [维度惩罚](https://en.wikipedia.org/wiki/Curse_of_dimensionality),是机器学习领域的核心问题。 - -## 线性模型:从回归到稀疏 - -糖尿病数据集 - -糖尿病数据集包括442名患者的10个生理特征(年龄,性别,体重,血压),和一年后的疾病级别指标: - -```py ->>> diabetes = datasets.load_diabetes() ->>> diabetes_X_train = diabetes.data[:-20] ->>> diabetes_X_test = diabetes.data[-20:] ->>> diabetes_y_train = diabetes.target[:-20] ->>> diabetes_y_test = diabetes.target[-20:] - -``` - -手头上的任务是为了从生理特征预测疾病级别。 - -### 线性回归 - -[`LinearRegression`](../../modules/generated/sklearn.linear_model.LinearRegression.html#sklearn.linear_model.LinearRegression "sklearn.linear_model.LinearRegression"),最简单的拟合线性模型形式,是通过调整数据集的一系列参数令残差平方和尽可能小。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_ols_001.png](img/7a9775b9051c948f74639f1856f6c585.jpg)](../../auto_examples/linear_model/plot_ols.html) - -Linear models: ![y = X\beta + \epsilon](img/c5f2af9df9f65f0e399542ecf7f40554.jpg) - -> * ![X](img/43c1fea57579e54f80c0535bc582626f.jpg): 数据 -> * ![y](img/0775c03fc710a24df297dedcec515aaf.jpg): 目标变量 -> * ![\beta](img/533e54759d696211ebe7819cc107d3bc.jpg): 回归系数 -> * ![\epsilon](img/58ef9e1b5d2ee139dcb588a3879ca1a6.jpg): 观察噪声 - -```py ->>> from sklearn import linear_model ->>> regr = linear_model.LinearRegression() ->>> regr.fit(diabetes_X_train, diabetes_y_train) -LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False) ->>> print(regr.coef_) -[ 0.30349955 -237.63931533 510.53060544 327.73698041 -814.13170937 - 492.81458798 102.84845219 184.60648906 743.51961675 76.09517222] - ->>> # 均方误差 ->>> np.mean((regr.predict(diabetes_X_test)-diabetes_y_test)**2) -2004.56760268... - ->>> # 方差分数:1 是完美的预测 ->>> # 0 意味着 X 和 y 之间没有线性关系。 ->>> regr.score(diabetes_X_test, diabetes_y_test) -0.5850753022690... - -``` - -### 收缩 - -如果每个维度的数据点很少,观察噪声就会导致很大的方差: - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_ols_ridge_variance_001.png](img/f28436a66fb892c9e8923e6649f19065.jpg)](../../auto_examples/linear_model/plot_ols_ridge_variance.html) - -```py ->>> X = np.c_[ .5, 1].T ->>> y = [.5, 1] ->>> test = np.c_[ 0, 2].T ->>> regr = linear_model.LinearRegression() - ->>> import matplotlib.pyplot as plt ->>> plt.figure() - ->>> np.random.seed(0) ->>> for _ in range(6): -... this_X = .1*np.random.normal(size=(2, 1)) + X -... regr.fit(this_X, y) -... plt.plot(test, regr.predict(test)) -... plt.scatter(this_X, y, s=3) - -``` - -高纬统计学习中的一个解决方法是 _收缩_ 回归系数到0:任何两个随机选择的观察值数据集都很可能是不相关的。这称为 <cite>岭回归</cite> : - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_ols_ridge_variance_002.png](img/6518e8fbaaadd8a258c9a3f96b2ef42e.jpg)](../../auto_examples/linear_model/plot_ols_ridge_variance.html) - -```py ->>> regr = linear_model.Ridge(alpha=.1) - ->>> plt.figure() - ->>> np.random.seed(0) ->>> for _ in range(6): -... this_X = .1*np.random.normal(size=(2, 1)) + X -... regr.fit(this_X, y) -... plt.plot(test, regr.predict(test)) -... plt.scatter(this_X, y, s=3) - -``` - -这是 **bias/variance tradeoff** 中的一个例子:岭参数 `alpha` 越大,偏差越大,方差越小。 - -我们可以选择 `alpha` 来最小化排除错误,这里使用糖尿病数据集而不是人为数据: - -```py ->>> alphas = np.logspace(-4, -1, 6) ->>> from __future__ import print_function ->>> print([regr.set_params(alpha=alpha -... ).fit(diabetes_X_train, diabetes_y_train, -... ).score(diabetes_X_test, diabetes_y_test) for alpha in alphas]) -[0.5851110683883..., 0.5852073015444..., 0.5854677540698..., 0.5855512036503..., 0.5830717085554..., 0.57058999437...] - -``` - -Note - -捕获拟合参数噪声使得模型不能归纳新的数据称为 [过拟合](https://en.wikipedia.org/wiki/Overfitting)。岭回归产生的偏差被称为 [正则化](https://en.wikipedia.org/wiki/Regularization_%28machine_learning%29)。 - -### 稀疏 - -**只拟合特征1和2** - -**[![diabetes_ols_1](img/9a5f8912e7fe77be2acea88fd091a5d8.jpg)](../../auto_examples/linear_model/plot_ols_3d.html) [![diabetes_ols_3](img/14d65d3148b0ea7c9ecb364423ecb0ed.jpg)](../../auto_examples/linear_model/plot_ols_3d.html) [![diabetes_ols_2](img/8c8c09a18e398935473d8b69cf1b617e.jpg)](../../auto_examples/linear_model/plot_ols_3d.html)** - -Note - -整个糖尿病数据集包括11个维度(10个特征维度和1个目标变量)。很难直观地表示出来,但是记住那是一个比较 _空_ 的空间可能比较有用。 - -我们可以看到,尽管特征2在整个模型占有一个很大的系数,但是当考虑特征1时,其对 `y` 的影响就较小了。 - -为了提高问题的条件(比如,缓解`维度惩罚`),只选择信息特征和设置无信息时就会变得有趣,比如特征2到0。岭回归会减小他们的值,但不会减到0.另一种抑制方法,称为 [Lasso](../../modules/linear_model.html#lasso) (最小绝对收缩和选择算子),可以把一些系数设为0。这些方法称为 **稀疏法**,稀疏可以看作是奥卡姆剃刀的应用:_模型越简单越好_。 - -```py ->>> regr = linear_model.Lasso() ->>> scores = [regr.set_params(alpha=alpha -... ).fit(diabetes_X_train, diabetes_y_train -... ).score(diabetes_X_test, diabetes_y_test) -... for alpha in alphas] ->>> best_alpha = alphas[scores.index(max(scores))] ->>> regr.alpha = best_alpha ->>> regr.fit(diabetes_X_train, diabetes_y_train) -Lasso(alpha=0.025118864315095794, copy_X=True, fit_intercept=True, - max_iter=1000, normalize=False, positive=False, precompute=False, - random_state=None, selection='cyclic', tol=0.0001, warm_start=False) ->>> print(regr.coef_) -[ 0\. -212.43764548 517.19478111 313.77959962 -160.8303982 -0. - -187.19554705 69.38229038 508.66011217 71.84239008] - -``` - -**同一个问题的不同算法** - -不同的算法可以用于解决同一个数学问题。比如在 scikit-learn 里 `Lasso` 对象使用 [coordinate descent](https://en.wikipedia.org/wiki/Coordinate_descent) 方法解决 lasso 回归问题,对于大型数据集很有效。但是,scikit-learn 也提供了使用 _LARS_ 算法 的:class:<cite>LassoLars</cite> 对象,对于处理带权向量非常稀疏的数据非常有效(比如,问题的观察值很少)。 - -### 分类 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_logistic_001.png](img/6efb484bc0e0c91b3ba13708bfe46aba.jpg)](../../auto_examples/linear_model/plot_logistic.html) - -对于分类,比如标定 [鸢尾属植物](https://en.wikipedia.org/wiki/Iris_flower_data_set) 任务,线性回归就不是好方法了,因为它会给数据很多远离决策边界的权值。一个线性方法是为了拟合 sigmoid 函数 或 **logistic** 函数: - - -![y = \textrm{sigmoid}(X\beta - \textrm{offset}) + \epsilon = -\frac{1}{1 + \textrm{exp}(- X\beta + \textrm{offset})} + \epsilon](img/5b84281b8f1a26c9e9cba1b6cb0126ce.jpg) - - -```py ->>> logistic = linear_model.LogisticRegression(C=1e5) ->>> logistic.fit(iris_X_train, iris_y_train) -LogisticRegression(C=100000.0, class_weight=None, dual=False, - fit_intercept=True, intercept_scaling=1, max_iter=100, - multi_class='ovr', n_jobs=1, penalty='l2', random_state=None, - solver='liblinear', tol=0.0001, verbose=0, warm_start=False) - -``` - -这就是有名的: [`LogisticRegression`](../../modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression "sklearn.linear_model.LogisticRegression") - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_iris_logistic_001.png](img/b6305894a6f400569f3ff2b899370b54.jpg)](../../auto_examples/linear_model/plot_iris_logistic.html) - -多类分类 - -如果你有很多类需要预测,一种常用方法就是去拟合一对多分类器,然后使用根据投票为最后做决定。 - -使用 logistic 回归进行收缩和稀疏 - -[`LogisticRegression`](../../modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression "sklearn.linear_model.LogisticRegression") 对象中的 `C` 参数控制着正则化数量:`C` 值越大,正则化数量越小。`penalty="l2"` 提供 收缩`(比如,无稀疏系数),同时 ``penalty=”l1”` 提供`稀疏化`。 - -**练习** - -尝试用最近邻和线性模型分类数字数据集。留出最后 10%的数据,并测试观察值预期效果。 - -```py -from sklearn import datasets, neighbors, linear_model - -digits = datasets.load_digits() -X_digits = digits.data -y_digits = digits.target - -``` - -方法: [`../../auto_examples/exercises/plot_digits_classification_exercise.py`](../../_downloads/plot_digits_classification_exercise.py) - -## 支持向量积(SVMs) - -### 线性 SVMs - -[支持向量机](../../modules/svm.html#svm) 属于判别模型家族:它们尝试通过找到样例的一个组合来构建一个两类之间最大化的平面。通过 `C` 参数进行正则化设置:`C` 的值小意味着边缘是通过分割线周围的所有观测样例进行计算得到的(更正则化);`C` 的值大意味着边缘是通过邻近分割线的观测样例计算得到的(更少正则化)。 - -例子: - -* [Plot different SVM classifiers in the iris dataset](../../auto_examples/svm/plot_iris.html#sphx-glr-auto-examples-svm-plot-iris-py) - -SVMs 可以用于回归 –:class: <cite>SVR</cite> (支持向量回归)–,或者分类 –:class: <cite>SVC</cite> (支持向量分类)。 - -```py ->>> from sklearn import svm ->>> svc = svm.SVC(kernel='linear') ->>> svc.fit(iris_X_train, iris_y_train) -SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, - decision_function_shape='ovr', degree=3, gamma='auto', kernel='linear', - max_iter=-1, probability=False, random_state=None, shrinking=True, - tol=0.001, verbose=False) - -``` - -Warning - -**规格化数据** - -对很多估计器来说,包括 SVMs,为每个特征值使用单位标准偏差的数据集,是获得好的预测重要前提。 - -### 使用核 - -在特征空间类并不总是线性可分的。解决办法就是构建一个不是线性的但能是多项式的函数做代替。这要使用 _核技巧(kernel trick)_,它可以被看作通过设置 _kernels_ 在观察样例上创建决策力量: - -| **线性核** | **多项式核** | -| [![svm_kernel_linear](img/93401b902ac1e2a94ff3ce04e7f05882.jpg)](../../auto_examples/svm/plot_svm_kernels.html) | [![svm_kernel_poly](img/abed66e83395b34fe3c020cfcab3dce9.jpg)](../../auto_examples/svm/plot_svm_kernels.html) | -| - -```py ->>> svc = svm.SVC(kernel='linear') - -``` - - | - -```py ->>> svc = svm.SVC(kernel='poly', -... degree=3) ->>> # degree: polynomial degree - -``` - - | - -| **RBF 内核(径向基函数)** | -| [![svm_kernel_rbf](img/c458cf14df5a22e0d44d7c4fa458361d.jpg)](../../auto_examples/svm/plot_svm_kernels.html) | -| - -```py ->>> svc = svm.SVC(kernel='rbf') ->>> # gamma: inverse of size of ->>> # radial kernel - -``` - - | - -**交互例子** - -查看 [SVM GUI](../../auto_examples/applications/svm_gui.html#sphx-glr-auto-examples-applications-svm-gui-py) 通过下载 `svm_gui.py`;通过左右按键添加两类数据点,拟合模型并改变参数和数据。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_iris_dataset_001.png](img/4246a718076893e37084bc69a7e16007.jpg)](../../auto_examples/datasets/plot_iris_dataset.html) - -**练习** - -根据特征1和特征2,尝试用 SVMs 把1和2类从鸢尾属植物数据集中分出来。为每一个类留下10%,并测试这些观察值预期效果。 - -**警告**: 类是有序的,不要留下最后10%,不然你只能测试一个类了。 - -**提示**: 为了直观显示,你可以在网格上使用 `decision_function` 方法。 - -```py -iris = datasets.load_iris() -X = iris.data -y = iris.target - -X = X[y != 0, :2] -y = y[y != 0] - -``` - -方法: [`../../auto_examples/exercises/plot_iris_exercise.py`](../../_downloads/plot_iris_exercise.py) \ No newline at end of file diff --git a/docs/0.19.x/72.md b/docs/0.19.x/72.md deleted file mode 100755 index 756f64972083ed5e06d8b4539b4f55394021fd71..0000000000000000000000000000000000000000 --- a/docs/0.19.x/72.md +++ /dev/null @@ -1,220 +0,0 @@ -# 模型选择:选择估计量及其参数 - -校验者: -        [@片刻](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@森系](https://github.com/apachecn/scikit-learn-doc-zh) - -## 分数和交叉验证分数 - -如我们所见,每一个估计量都有一个可以在新数据上判定拟合质量(或预期值)的 `score` 方法。**越大越好**. - -```py ->>> from sklearn import datasets, svm ->>> digits = datasets.load_digits() ->>> X_digits = digits.data ->>> y_digits = digits.target ->>> svc = svm.SVC(C=1, kernel='linear') ->>> svc.fit(X_digits[:-100], y_digits[:-100]).score(X_digits[-100:], y_digits[-100:]) -0.97999999999999998 - -``` - -为了更好地预测精度(我们可以用它作为模型的拟合优度代理),我们可以连续分解用于我们训练和测试用的 _折叠数据_。 - -```py ->>> import numpy as np ->>> X_folds = np.array_split(X_digits, 3) ->>> y_folds = np.array_split(y_digits, 3) ->>> scores = list() ->>> for k in range(3): -... # 为了稍后的 ‘弹出’ 操作,我们使用 ‘列表’ 来复制数据 -... X_train = list(X_folds) -... X_test = X_train.pop(k) -... X_train = np.concatenate(X_train) -... y_train = list(y_folds) -... y_test = y_train.pop(k) -... y_train = np.concatenate(y_train) -... scores.append(svc.fit(X_train, y_train).score(X_test, y_test)) ->>> print(scores) -[0.93489148580968284, 0.95659432387312182, 0.93989983305509184] - -``` - -这被称为 [`KFold`](../../modules/generated/sklearn.model_selection.KFold.html#sklearn.model_selection.KFold "sklearn.model_selection.KFold") 交叉验证. - -## 交叉验证生成器 - -scikit-learn 有可以生成训练/测试索引列表的类,可用于流行的交叉验证策略。 - -类提供了 `split` 方法,方法允许输入能被分解的数据集,并为每次选择的交叉验证策略迭代生成训练/测试集索引。 - -下面是使用 `split` 方法的例子。 - -```py ->>> from sklearn.model_selection import KFold, cross_val_score ->>> X = ["a", "a", "b", "c", "c", "c"] ->>> k_fold = KFold(n_splits=3) ->>> for train_indices, test_indices in k_fold.split(X): -... print('Train: %s | test: %s' % (train_indices, test_indices)) -Train: [2 3 4 5] | test: [0 1] -Train: [0 1 4 5] | test: [2 3] -Train: [0 1 2 3] | test: [4 5] - -``` - -然后就可以很容易地执行交叉验证了: - -```py ->>> [svc.fit(X_digits[train], y_digits[train]).score(X_digits[test], y_digits[test]) -... for train, test in k_fold.split(X_digits)] -[0.93489148580968284, 0.95659432387312182, 0.93989983305509184] - -``` - -交叉验证分数可以使用 [`cross_val_score`](../../modules/generated/sklearn.model_selection.cross_val_score.html#sklearn.model_selection.cross_val_score "sklearn.model_selection.cross_val_score") 直接计算出来。给定一个估计量,交叉验证对象,和输入数据集, [`cross_val_score`](../../modules/generated/sklearn.model_selection.cross_val_score.html#sklearn.model_selection.cross_val_score "sklearn.model_selection.cross_val_score") 函数就会反复分解出训练和测试集的数据,然后使用训练集和为每次迭代交叉验证运算出的基于测试集的分数来训练估计量。 - -默认情况下,估计器的 `score` 方法被用于运算个体分数。 - -可以参考 [metrics 模块](../../modules/metrics.html#metrics) 学习更多可用的评分方法。 - -```py ->>> cross_val_score(svc, X_digits, y_digits, cv=k_fold, n_jobs=-1) -array([ 0.93489149, 0.95659432, 0.93989983]) - -``` - -<cite>n_jobs=-1</cite> 意味着运算会被调度到所有 CPU 上进行。 - -或者,可以提供 `scoring` 参数来指定替换的评分方法。 - -> ```py -> >>> cross_val_score(svc, X_digits, y_digits, cv=k_fold, -> ... scoring='precision_macro') -> array([ 0.93969761, 0.95911415, 0.94041254]) -> -> ``` -> -> **交叉验证生成器** - -| [`KFold`](../../modules/generated/sklearn.model_selection.KFold.html#sklearn.model_selection.KFold "sklearn.model_selection.KFold") **(n_splits, shuffle, random_state)** | [`StratifiedKFold`](../../modules/generated/sklearn.model_selection.StratifiedKFold.html#sklearn.model_selection.StratifiedKFold "sklearn.model_selection.StratifiedKFold") **(n_splits, shuffle, random_state)** | [`GroupKFold`](../../modules/generated/sklearn.model_selection.GroupKFold.html#sklearn.model_selection.GroupKFold "sklearn.model_selection.GroupKFold") **(n_splits)** | -| 将其分解为 K 个折叠,在 K-1 上训练,然后排除测试。 | 和 K-Fold 一样,但会保留每个折叠里的类分布。 | 确保相同组不会在测试和训练集里。 | - -| [`ShuffleSplit`](../../modules/generated/sklearn.model_selection.ShuffleSplit.html#sklearn.model_selection.ShuffleSplit "sklearn.model_selection.ShuffleSplit") **(n_splits, test_size, train_size, random_state)** | [`StratifiedShuffleSplit`](../../modules/generated/sklearn.model_selection.StratifiedShuffleSplit.html#sklearn.model_selection.StratifiedShuffleSplit "sklearn.model_selection.StratifiedShuffleSplit") | [`GroupShuffleSplit`](../../modules/generated/sklearn.model_selection.GroupShuffleSplit.html#sklearn.model_selection.GroupShuffleSplit "sklearn.model_selection.GroupShuffleSplit") | -| 生成基于随机排列的训练/测试索引。 | 和 shuffle 分解一样,但会保留每个迭代里的类分布。 | 确保相同组不会在测试和训练集里。 | - -| [`LeaveOneGroupOut`](../../modules/generated/sklearn.model_selection.LeaveOneGroupOut.html#sklearn.model_selection.LeaveOneGroupOut "sklearn.model_selection.LeaveOneGroupOut") **()** | [`LeavePGroupsOut`](../../modules/generated/sklearn.model_selection.LeavePGroupsOut.html#sklearn.model_selection.LeavePGroupsOut "sklearn.model_selection.LeavePGroupsOut") **(n_groups)** | [`LeaveOneOut`](../../modules/generated/sklearn.model_selection.LeaveOneOut.html#sklearn.model_selection.LeaveOneOut "sklearn.model_selection.LeaveOneOut") **()** | -| 使用数组分组来给观察分组。 | 忽略 P 组。 | 忽略一个观察。 | - -| [`LeavePOut`](../../modules/generated/sklearn.model_selection.LeavePOut.html#sklearn.model_selection.LeavePOut "sklearn.model_selection.LeavePOut") **(p)** | [`PredefinedSplit`](../../modules/generated/sklearn.model_selection.PredefinedSplit.html#sklearn.model_selection.PredefinedSplit "sklearn.model_selection.PredefinedSplit") | -| 忽略 P 观察。 | 生成基于预定义分解的训练/测试索引。 | - -**练习** - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_cv_digits_001.png](img/eaba00919535dcb10574f0228b451481.jpg)](../../auto_examples/exercises/plot_cv_digits.html) - -在数字数据集中,用一个线性内核绘制一个 [`SVC`](../../modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC "sklearn.svm.SVC") 估计器的交叉验证分数来作为 `C` 参数函数(使用从1到10的点对数网格). - -```py - -import numpy as np -from sklearn.model_selection import cross_val_score -from sklearn import datasets, svm - -digits = datasets.load_digits() -X = digits.data -y = digits.target - -svc = svm.SVC(kernel='linear') -C_s = np.logspace(-10, 0, 10) - -``` - -**方法:** [Cross-validation on Digits Dataset Exercise](../../auto_examples/exercises/plot_cv_digits.html#sphx-glr-auto-examples-exercises-plot-cv-digits-py) - -## 网格搜索和交叉验证估计量 - -### 网格搜索 - -scikit-learn 提供了一个对象,在给定数据情况下,在一个参数网格,估计器拟合期间计算分数,并选择参数来最大化交叉验证分数。这个对象在构建过程中获取估计器并提供一个估计器 API。 - -```py ->>> from sklearn.model_selection import GridSearchCV, cross_val_score ->>> Cs = np.logspace(-6, -1, 10) ->>> clf = GridSearchCV(estimator=svc, param_grid=dict(C=Cs), -... n_jobs=-1) ->>> clf.fit(X_digits[:1000], y_digits[:1000]) -GridSearchCV(cv=None,... ->>> clf.best_score_ -0.925... ->>> clf.best_estimator_.C -0.0077... - -``` - -```py ->>> # Prediction performance on test set is not as good as on train set ->>> clf.score(X_digits[1000:], y_digits[1000:]) -0.943... - -``` - -默认情况下, [`GridSearchCV`](../../modules/generated/sklearn.model_selection.GridSearchCV.html#sklearn.model_selection.GridSearchCV "sklearn.model_selection.GridSearchCV") 使用一个三倍折叠交叉验证。但是,如果它检测到分类器被传递,而不是回归,它就会使用分层的三倍。 - -嵌套交叉验证 - -```py ->>> cross_val_score(clf, X_digits, y_digits) -... -array([ 0.938..., 0.963..., 0.944...]) - -``` - -两个交叉验证循环并行执行:一个由 [`GridSearchCV`](../../modules/generated/sklearn.model_selection.GridSearchCV.html#sklearn.model_selection.GridSearchCV "sklearn.model_selection.GridSearchCV") 估计器设置 `gamma`,另一个 `cross_val_score` 则是测量估计器的预期执行情况。结果分数是对新数据上的预期分数的无偏估计。 - -Warning - -你不可以并行运算嵌套对象(`n_jobs` 与1不同)。 - -### 交叉验证估计量 - -设置参数的交叉验证可以更有效地完成一个基础算法。这就是为什么对某些估计量来说,scikit-learn 提供了 交叉验证 估计量自动设置它们的参数。 - -```py ->>> from sklearn import linear_model, datasets ->>> lasso = linear_model.LassoCV() ->>> diabetes = datasets.load_diabetes() ->>> X_diabetes = diabetes.data ->>> y_diabetes = diabetes.target ->>> lasso.fit(X_diabetes, y_diabetes) -LassoCV(alphas=None, copy_X=True, cv=None, eps=0.001, fit_intercept=True, - max_iter=1000, n_alphas=100, n_jobs=1, normalize=False, positive=False, - precompute='auto', random_state=None, selection='cyclic', tol=0.0001, - verbose=False) ->>> # 估计器自动选择它的 lambda: ->>> lasso.alpha_ -0.01229... - -``` - -这些估计量和它们的副本称呼类似,在名字后加 ‘CV’。 - -**练习** - -在糖尿病数据集中,找到最优正则化参数 α。 - -**另外:** 你有多相信 α 的选择? - -```py - -from sklearn import datasets -from sklearn.linear_model import LassoCV -from sklearn.linear_model import Lasso -from sklearn.model_selection import KFold -from sklearn.model_selection import GridSearchCV - -diabetes = datasets.load_diabetes() - -``` - -**方法:** [Cross-validation on diabetes Dataset Exercise](../../auto_examples/exercises/plot_cv_diabetes.html#sphx-glr-auto-examples-exercises-plot-cv-diabetes-py) \ No newline at end of file diff --git a/docs/0.19.x/73.md b/docs/0.19.x/73.md deleted file mode 100755 index 90f01bf036be4404833e277f4b547652f1cbc3d9..0000000000000000000000000000000000000000 --- a/docs/0.19.x/73.md +++ /dev/null @@ -1,208 +0,0 @@ -# 无监督学习: 寻求数据表示 - -校验者: -        [@片刻](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@X](https://github.com/apachecn/scikit-learn-doc-zh) - -## 聚类: 对样本数据进行分组 - -可以利用聚类解决的问题 - -对于 iris 数据集来说,我们知道所有样本有 3 种不同的类型,但是并不知道每一个样本是那种类型:此时我们可以尝试一个 **clustering task(聚类任务)** 聚类算法: 将样本进行分组,相似的样本被聚在一起,而不同组别之间的样本是有明显区别的,这样的分组方式就是 _clusters(聚类)_ - -### K-means 聚类算法 - -关于聚类有很多不同的聚类标准和相关算法,其中最简便的算法是 [K-means](../../modules/clustering.html#k-means) 。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_cluster_iris_002.png](img/43fc8286f3bb11d7c8eb1e83e6538ac6.jpg)](../../auto_examples/cluster/plot_cluster_iris.html) - -```py ->>> from sklearn import cluster, datasets ->>> iris = datasets.load_iris() ->>> X_iris = iris.data ->>> y_iris = iris.target - ->>> k_means = cluster.KMeans(n_clusters=3) ->>> k_means.fit(X_iris) -KMeans(algorithm='auto', copy_x=True, init='k-means++', ... ->>> print(k_means.labels_[::10]) -[1 1 1 1 1 0 0 0 0 0 2 2 2 2 2] ->>> print(y_iris[::10]) -[0 0 0 0 0 1 1 1 1 1 2 2 2 2 2] - -``` - -Warning - -k_means 算法无法保证聚类结果完全绝对真实的反应实际情况。首先,选择正确合适的聚类数量不是一件容易的事情,第二,该算法对初始值的设置敏感,容易陷入局部最优。尽管 scikit-learn 采取了不同的方式来缓解以上问题,目前仍没有完美的解决方案。 - -| [![k_means_iris_bad_init](img/41c9612e6e74708a274b11f770810663.jpg)](../../auto_examples/cluster/plot_cluster_iris.html) | [![k_means_iris_8](img/f7ee2b868860148ea59bc617d8ba7bb1.jpg)](../../auto_examples/cluster/plot_cluster_iris.html) | [![cluster_iris_truth](img/9839512f63b7e5de021f13f7e6bd6b22.jpg)](../../auto_examples/cluster/plot_cluster_iris.html) | -| **Bad initialization** | **8 clusters** | **Ground truth** | - -**Don’t over-interpret clustering results(不要过分解读聚类结果)** - -**Application example: vector quantization(应用案例:向量量化(vector quantization))** - -一般来说聚类,特别是 K_means 聚类可以作为一种用少量样本来压缩信息的方式。这种方式就是 [vector quantization](https://en.wikipedia.org/wiki/Vector_quantization) 。例如,K_means 算法可以用于对一张图片进行色调分离: - -```py ->>> import scipy as sp ->>> try: -... face = sp.face(gray=True) -... except AttributeError: -... from scipy import misc -... face = misc.face(gray=True) ->>> X = face.reshape((-1, 1)) # We need an (n_sample, n_feature) array ->>> k_means = cluster.KMeans(n_clusters=5, n_init=1) ->>> k_means.fit(X) -KMeans(algorithm='auto', copy_x=True, init='k-means++', ... ->>> values = k_means.cluster_centers_.squeeze() ->>> labels = k_means.labels_ ->>> face_compressed = np.choose(labels, values) ->>> face_compressed.shape = face.shape - -``` - -| [![face](img/c593cc77e5133571028587b75182d3b3.jpg)](../../auto_examples/cluster/plot_face_compress.html) | [![face_compressed](img/c8b386f383c840e769d6dae0eeac73dd.jpg)](../../auto_examples/cluster/plot_face_compress.html) | [![face_regular](img/9cb7de99579cbd4664159c8a06417d13.jpg)](../../auto_examples/cluster/plot_face_compress.html) | [![face_histogram](img/3a03009ea272ed427cfa033086b89c72.jpg)](../../auto_examples/cluster/plot_face_compress.html) | -| Raw image | K-means quantization | Equal bins | Image histogram | - -### 分层聚类算法: 谨慎使用 - -```py - (分层聚类算法)是一种旨在构建聚类层次结构的分析方法,一般来说,实现该算法的大多数方法有以下两种: -``` - -* **Agglomerative(聚合)** - 自底向上的方法: 初始阶段,每一个样本将自己作为单独的一个簇,聚类的簇以最小 - -化距离的标准进行迭代聚合。当感兴趣的簇只有少量的样本时,该方法是很合适的。如果需要聚类的 簇数量很大,该方法比K_means算法的计算效率也更高。 * **Divisive(分裂)** - 自顶向下的方法: 初始阶段,所有的样本是一个簇,当一个簇下移时,它被迭代的进 行分裂。当估计聚类簇数量较大的数据时,该算法不仅效率低(由于样本始于一个簇,需要被递归的进行 分裂),而且从统计学的角度来讲也是不合适的。 - -#### 连接约束聚类 - -对于逐次聚合聚类,通过连接图可以指定哪些样本可以被聚合在一个簇。在 scikit 中,图由邻接矩阵来表示,通常该矩阵是一个稀疏矩阵。这种表示方法是非常有用的,例如在聚类图像时检索连接区域(有时也被称为连接要素): - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_face_ward_segmentation_001.png](img/6521e34e11e73c0fae9a5bd3c7980a9f.jpg)](../../auto_examples/cluster/plot_face_ward_segmentation.html) - -```py - -import matplotlib.pyplot as plt - -from sklearn.feature_extraction.image import grid_to_graph -from sklearn.cluster import AgglomerativeClustering - -# ############################################################################# -# Generate data -try: # SciPy >= 0.16 have face in misc - from scipy.misc import face - face = face(gray=True) -except ImportError: - face = sp.face(gray=True) - -# Resize it to 10% of the original size to speed up the processing -face = sp.misc.imresize(face, 0.10) / 255. - -X = np.reshape(face, (-1, 1)) - -# ############################################################################# -# Define the structure A of the data. Pixels connected to their neighbors. -connectivity = grid_to_graph(*face.shape) - -# ############################################################################# - -``` - -#### 特征聚集 - -我们已经知道,稀疏性可以缓解特征维度带来的问题,_i.e_ 即与特征数量相比,样本数量太少。 另一个解决该问题的方式是合并相似的维度:**feature agglomeration(特征聚集)**。该方法可以通过对特征聚类来实现。换 句话说,就是对样本数据转置后进行聚类。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_digits_agglomeration_001.png](img/2d7a3ddf62ceb125c15ba1947173e790.jpg)](../../auto_examples/cluster/plot_digits_agglomeration.html) - -```py ->>> digits = datasets.load_digits() ->>> images = digits.images ->>> X = np.reshape(images, (len(images), -1)) ->>> connectivity = grid_to_graph(*images[0].shape) - ->>> agglo = cluster.FeatureAgglomeration(connectivity=connectivity, -... n_clusters=32) ->>> agglo.fit(X) -FeatureAgglomeration(affinity='euclidean', compute_full_tree='auto',... ->>> X_reduced = agglo.transform(X) - ->>> X_approx = agglo.inverse_transform(X_reduced) ->>> images_approx = np.reshape(X_approx, images.shape) - -``` - -`transform` and `inverse_transform` methods - -Some estimators expose a `transform` method, for instance to reduce the dimensionality of the dataset. - -## 分解: 将一个信号转换成多个成份并且加载 - -**Components and loadings(成分和载荷)** - -如果 X 是多维数据,那么我们试图解决的问题是在不同的观察基础上对数据进行重写。我们希望学习得到载荷 L 和成分 C 使得 _X = L C_ 。提取成分 C 有多种不同的方法。 - -### 主成份分析: PCA - -[主成分分析(PCA)](../../modules/decomposition.html#pca) 将能够解释数据信息最大方差的的连续成分提取出来 - -[![pca_3d_axis](img/33a8ceddf8e3edfad259a804819c2637.jpg)](../../auto_examples/decomposition/plot_pca_3d.html) [![pca_3d_aligned](img/c39b576ee6e4fc82b4d9edd06ffc8c9c.jpg)](../../auto_examples/decomposition/plot_pca_3d.html) - -上图中样本点的分布在一个方向上是非常平坦的:即三个单变量特征中的任何一个都可以有另外两个特征来表示。主成分分析法(PCA)可以找到使得数据分布不 _flat_ 的矢量方向(可以反映数据主要信息的特征)。 - -当用主成分分析(PCA)来 _transform(转换)_ 数据时,可以通过在子空间上投影来降低数据的维数。 - -```py ->>> # Create a signal with only 2 useful dimensions ->>> x1 = np.random.normal(size=100) ->>> x2 = np.random.normal(size=100) ->>> x3 = x1 + x2 ->>> X = np.c_[x1, x2, x3] - ->>> from sklearn import decomposition ->>> pca = decomposition.PCA() ->>> pca.fit(X) -PCA(copy=True, iterated_power='auto', n_components=None, random_state=None, - svd_solver='auto', tol=0.0, whiten=False) ->>> print(pca.explained_variance_) -[ 2.18565811e+00 1.19346747e+00 8.43026679e-32] - ->>> # As we can see, only the 2 first components are useful ->>> pca.n_components = 2 ->>> X_reduced = pca.fit_transform(X) ->>> X_reduced.shape -(100, 2) - -``` - -### 独立成分分析: ICA - -[独立成分分析(ICA)](../../modules/decomposition.html#ica) 可以提取数据信息中的独立成分,这些成分载荷的分布包含了最多的 的独立信息。该方法能够恢复 **non-Gaussian(非高斯)** 独立信号: - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_ica_blind_source_separation_001.png](img/5f0a6e9a20a071d688e183c9675544e5.jpg)](../../auto_examples/decomposition/plot_ica_blind_source_separation.html) - -```py ->>> # Generate sample data ->>> import numpy as np ->>> from scipy import signal ->>> time = np.linspace(0, 10, 2000) ->>> s1 = np.sin(2 * time) # Signal 1 : sinusoidal signal ->>> s2 = np.sign(np.sin(3 * time)) # Signal 2 : square signal ->>> s3 = signal.sawtooth(2 * np.pi * time) # Signal 3: saw tooth signal ->>> S = np.c_[s1, s2, s3] ->>> S += 0.2 * np.random.normal(size=S.shape) # Add noise ->>> S /= S.std(axis=0) # Standardize data ->>> # Mix data ->>> A = np.array([[1, 1, 1], [0.5, 2, 1], [1.5, 1, 2]]) # Mixing matrix ->>> X = np.dot(S, A.T) # Generate observations - ->>> # Compute ICA ->>> ica = decomposition.FastICA() ->>> S_ = ica.fit_transform(X) # Get the estimated sources ->>> A_ = ica.mixing_.T ->>> np.allclose(X, np.dot(S_, A_) + ica.mean_) -True - -``` \ No newline at end of file diff --git a/docs/0.19.x/74.md b/docs/0.19.x/74.md deleted file mode 100755 index 49fb47b4e19e206905a4f614760c538dd46a2d60..0000000000000000000000000000000000000000 --- a/docs/0.19.x/74.md +++ /dev/null @@ -1,245 +0,0 @@ -# 把它们放在一起 - -校验者: -        [@片刻](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@X](https://github.com/apachecn/scikit-learn-doc-zh) - -## 模型管道化 - -我们已经知道一些模型可以做数据转换,一些模型可以用来预测变量。我们可以建立一个组合模型同时完成以上工作: - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_digits_pipe_001.png](img/ea1fbc6466fa8a62aa1f55a550a686b3.jpg)](../../auto_examples/plot_digits_pipe.html) - -```py -import numpy as np -import matplotlib.pyplot as plt - -from sklearn import linear_model, decomposition, datasets -from sklearn.pipeline import Pipeline -from sklearn.model_selection import GridSearchCV - -logistic = linear_model.LogisticRegression() - -pca = decomposition.PCA() -pipe = Pipeline(steps=[('pca', pca), ('logistic', logistic)]) - -digits = datasets.load_digits() -X_digits = digits.data -y_digits = digits.target - -# Plot the PCA spectrum -pca.fit(X_digits) - -plt.figure(1, figsize=(4, 3)) -plt.clf() -plt.axes([.2, .2, .7, .7]) -plt.plot(pca.explained_variance_, linewidth=2) -plt.axis('tight') -plt.xlabel('n_components') -plt.ylabel('explained_variance_') - -# Prediction -n_components = [20, 40, 64] -Cs = np.logspace(-4, 4, 3) - -# Parameters of pipelines can be set using ‘__’ separated parameter names: -estimator = GridSearchCV(pipe, - dict(pca__n_components=n_components, - logistic__C=Cs)) -estimator.fit(X_digits, y_digits) - -plt.axvline(estimator.best_estimator_.named_steps['pca'].n_components, - linestyle=':', label='n_components chosen') -plt.legend(prop=dict(size=12)) -plt.show() - -``` - -## 用特征面进行人脸识别 - -该实例用到的数据集来自 LFW_(Labeled Faces in the Wild)。数据已经进行了初步预处理 - -> [http://vis-www.cs.umass.edu/lfw/lfw-funneled.tgz](http://vis-www.cs.umass.edu/lfw/lfw-funneled.tgz) (233MB) - -```py -""" -=================================================== -Faces recognition example using eigenfaces and SVMs -=================================================== - -The dataset used in this example is a preprocessed excerpt of the -"Labeled Faces in the Wild", aka LFW_: - - http://vis-www.cs.umass.edu/lfw/lfw-funneled.tgz (233MB) - -.. _LFW: http://vis-www.cs.umass.edu/lfw/ - -Expected results for the top 5 most represented people in the dataset: - -================== ============ ======= ========== ======= - precision recall f1-score support -================== ============ ======= ========== ======= - Ariel Sharon 0.67 0.92 0.77 13 - Colin Powell 0.75 0.78 0.76 60 - Donald Rumsfeld 0.78 0.67 0.72 27 - George W Bush 0.86 0.86 0.86 146 -Gerhard Schroeder 0.76 0.76 0.76 25 - Hugo Chavez 0.67 0.67 0.67 15 - Tony Blair 0.81 0.69 0.75 36 - - avg / total 0.80 0.80 0.80 322 -================== ============ ======= ========== ======= - -""" -from __future__ import print_function - -from time import time -import logging -import matplotlib.pyplot as plt - -from sklearn.model_selection import train_test_split -from sklearn.model_selection import GridSearchCV -from sklearn.datasets import fetch_lfw_people -from sklearn.metrics import classification_report -from sklearn.metrics import confusion_matrix -from sklearn.decomposition import PCA -from sklearn.svm import SVC - -print(__doc__) - -# Display progress logs on stdout -logging.basicConfig(level=logging.INFO, format='%(asctime)s %(message)s') - -# ############################################################################# -# Download the data, if not already on disk and load it as numpy arrays - -lfw_people = fetch_lfw_people(min_faces_per_person=70, resize=0.4) - -# introspect the images arrays to find the shapes (for plotting) -n_samples, h, w = lfw_people.images.shape - -# for machine learning we use the 2 data directly (as relative pixel -# positions info is ignored by this model) -X = lfw_people.data -n_features = X.shape[1] - -# the label to predict is the id of the person -y = lfw_people.target -target_names = lfw_people.target_names -n_classes = target_names.shape[0] - -print("Total dataset size:") -print("n_samples: %d" % n_samples) -print("n_features: %d" % n_features) -print("n_classes: %d" % n_classes) - -# ############################################################################# -# Split into a training set and a test set using a stratified k fold - -# split into a training and testing set -X_train, X_test, y_train, y_test = train_test_split( - X, y, test_size=0.25, random_state=42) - -# ############################################################################# -# Compute a PCA (eigenfaces) on the face dataset (treated as unlabeled -# dataset): unsupervised feature extraction / dimensionality reduction -n_components = 150 - -print("Extracting the top %d eigenfaces from %d faces" - % (n_components, X_train.shape[0])) -t0 = time() -pca = PCA(n_components=n_components, svd_solver='randomized', - whiten=True).fit(X_train) -print("done in %0.3fs" % (time() - t0)) - -eigenfaces = pca.components_.reshape((n_components, h, w)) - -print("Projecting the input data on the eigenfaces orthonormal basis") -t0 = time() -X_train_pca = pca.transform(X_train) -X_test_pca = pca.transform(X_test) -print("done in %0.3fs" % (time() - t0)) - -# ############################################################################# -# Train a SVM classification model - -print("Fitting the classifier to the training set") -t0 = time() -param_grid = {'C': [1e3, 5e3, 1e4, 5e4, 1e5], - 'gamma': [0.0001, 0.0005, 0.001, 0.005, 0.01, 0.1], } -clf = GridSearchCV(SVC(kernel='rbf', class_weight='balanced'), param_grid) -clf = clf.fit(X_train_pca, y_train) -print("done in %0.3fs" % (time() - t0)) -print("Best estimator found by grid search:") -print(clf.best_estimator_) - -# ############################################################################# -# Quantitative evaluation of the model quality on the test set - -print("Predicting people's names on the test set") -t0 = time() -y_pred = clf.predict(X_test_pca) -print("done in %0.3fs" % (time() - t0)) - -print(classification_report(y_test, y_pred, target_names=target_names)) -print(confusion_matrix(y_test, y_pred, labels=range(n_classes))) - -# ############################################################################# -# Qualitative evaluation of the predictions using matplotlib - -def plot_gallery(images, titles, h, w, n_row=3, n_col=4): - """Helper function to plot a gallery of portraits""" - plt.figure(figsize=(1.8 * n_col, 2.4 * n_row)) - plt.subplots_adjust(bottom=0, left=.01, right=.99, top=.90, hspace=.35) - for i in range(n_row * n_col): - plt.subplot(n_row, n_col, i + 1) - plt.imshow(images[i].reshape((h, w)), cmap=plt.cm.gray) - plt.title(titles[i], size=12) - plt.xticks(()) - plt.yticks(()) - -# plot the result of the prediction on a portion of the test set - -def title(y_pred, y_test, target_names, i): - pred_name = target_names[y_pred[i]].rsplit(' ', 1)[-1] - true_name = target_names[y_test[i]].rsplit(' ', 1)[-1] - return 'predicted: %s\ntrue: %s' % (pred_name, true_name) - -prediction_titles = [title(y_pred, y_test, target_names, i) - for i in range(y_pred.shape[0])] - -plot_gallery(X_test, prediction_titles, h, w) - -# plot the gallery of the most significative eigenfaces - -eigenface_titles = ["eigenface %d" % i for i in range(eigenfaces.shape[0])] -plot_gallery(eigenfaces, eigenface_titles, h, w) - -plt.show() - -``` - -| [![prediction](img/a9e58e92cdae50e285a704a6d1ccbafc.jpg)](http://sklearn.apachecn.org/cn/0.19.0/_images/plot_face_recognition_1.png) | [![eigenfaces](img/52654d94cd29c421bad069f802bb69c4.jpg)](http://sklearn.apachecn.org/cn/0.19.0/_images/plot_face_recognition_2.png) | -| **Prediction** | **Eigenfaces** | - -数据集中前5名最有代表性样本的预期结果: - -```py - precision recall f1-score support - -Gerhard_Schroeder 0.91 0.75 0.82 28 - Donald_Rumsfeld 0.84 0.82 0.83 33 - Tony_Blair 0.65 0.82 0.73 34 - Colin_Powell 0.78 0.88 0.83 58 - George_W_Bush 0.93 0.86 0.90 129 - - avg / total 0.86 0.84 0.85 282 - -``` - -## 开放性问题: 股票市场结构 - -我们可以预测 Google 在特定时间段内的股价变动吗? - -[Learning a graph structure](../../auto_examples/applications/plot_stock_market.html#stock-market) \ No newline at end of file diff --git a/docs/0.19.x/75.md b/docs/0.19.x/75.md deleted file mode 100755 index 989e4a4e417726bc1214fbb3d2c9e06ba4bb7186..0000000000000000000000000000000000000000 --- a/docs/0.19.x/75.md +++ /dev/null @@ -1,22 +0,0 @@ -# 寻求帮助 - -校验者: -        [@片刻](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@X](https://github.com/apachecn/scikit-learn-doc-zh) - -## 项目邮件列表 - -如果您在使用 scikit 的过程中发现错误或者需要在说明文档中澄清的内容,可以随时通过 [Mailing List](http://scikit-learn.org/stable/support.html) 进行咨询。 - -## 机器学习从业者的 Q&A 社区 - -> <colgroup><col class="field-name"> <col class="field-body"></colgroup> -> | Quora.com: | Quora有一个和机器学习问题相关的主题以及一些有趣的讨论: [https://www.quora.com/topic/Machine-Learning](https://www.quora.com/topic/Machine-Learning) | -> | --- | --- | -> | Stack Exchange: | Stack Exchange 系列网站包含 [`multiple subdomains for Machine Learning questions(机器学习问题的多个分支)`_](#id5)。 | -> | --- | --- | - -– _’斯坦福大学教授 Andrew Ng 教授的机器学习优秀免费在线课程’: [https://www.coursera.org/learn/machine-learning](https://www.coursera.org/learn/machine-learning) - -– _’另一个优秀的免费在线课程,对人工智能采取更一般的方法’: [https://www.udacity.com/course/intro-to-artificial-intelligence–cs271](https://www.udacity.com/course/intro-to-artificial-intelligence--cs271) \ No newline at end of file diff --git a/docs/0.19.x/76.md b/docs/0.19.x/76.md deleted file mode 100755 index 97992a769c36c900bc6f3ca023f4a15d524a4c2d..0000000000000000000000000000000000000000 --- a/docs/0.19.x/76.md +++ /dev/null @@ -1,443 +0,0 @@ -# 处理文本数据 - -校验者: -        [@NellyLuo](https://github.com/NellyLuo) -        [@那伊抹微笑](https://github.com/apachecn/scikit-learn-doc-zh) -        [@微光同尘](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@Lielei](https://github.com/apachecn/scikit-learn-doc-zh) - -本指南旨在一个单独实际任务中探索一些主要的 `scikit-learn` 工具: 分析关于 20 个不同主题的一个文件集合(新闻组帖子)。 - -在本节中,我们将会学习如何: - -> * 读取文件内容以及所属的类别 -> * 提取合适于机器学习的特征向量 -> * 训练一个线性模型来进行分类 -> * 使用网格搜索策略找到特征提取组件和分类器的最佳配置 - -## 教程设置 - -开始这篇教程之前,你必须首先安装 _scikit-learn_ 以及所有其要求的库。 - -更多信息和系统安装指导请参考 [安装说明](../../install.html#installation-instructions) 。 - -这篇入门教程的源代码可以在你的 scikit-learn 文件夹下面找到: - -```py -scikit-learn/doc/tutorial/text_analytics/ - -``` - -这个入门教程包含以下的子文件夹: - -> * `*.rst files` - 用 sphinx 编写的该教程的源代码 -> * `data` - 用来存放在该教程中用到的数据集的文件夹 -> * `skeletons` - 用来练习的未完成的示例脚本 -> * `solutions` - 练习的答案 - -你也可以将这个文件结构拷贝到您的电脑的硬盘里名为 `sklearn_tut_workspace` 的文件夹中来编辑你自己的文件完成练习,同时保持原有文件结构不变: - -```py -% cp -r skeletons work_directory/sklearn_tut_workspace - -``` - -机器学习算法需要数据。 进入每一个 `$TUTORIAL_HOME/data` 子文件夹,然后运行 `fetch_data.py` 脚本(需要您先读取这些文件)。 - -例如: - -```py -% cd $TUTORIAL_HOME/data/languages -% less fetch_data.py -% python fetch_data.py - -``` - -## 加载这 20 个新闻组的数据集 - -该数据集名为 “Twenty Newsgroups” 。 下面是这个数据集的官方介绍, 引自 [网站](http://people.csail.mit.edu/jrennie/20Newsgroups/): - -> Twenty Newsgroups 数据集是一个包括近 20,000 个新闻组文档的集合,(几乎)平均分成了 20 个不同新闻组。 据我们所知,这最初是由 Ken Lang 收集的 ,很可能是为了他的论文 “Newsweeder: Learning to filter netnews,” 尽管他没有明确提及这个集合。 这 20 个新闻组集合已成为一个流行的数据集,用于机器学习中的文本应用的试验中,如文本分类和文本聚类。 - -接下来我们会使用 scikit-learn 中的这个内置数据集加载器来加载这 20 个新闻组。 或者,您也可以手动从网站上下载数据集,使用 [`sklearn.datasets.load_files`](../../modules/generated/sklearn.datasets.load_files.html#sklearn.datasets.load_files "sklearn.datasets.load_files") 功能,并将其指向未压缩文件夹下的 `20news-bydate-train` 子文件夹。 - -在第一个示例中,为了节约时间,我们将使用部分数据:从 20 个类别的数据集中选出 4 个来进行训练: - -```py ->>> categories = ['alt.atheism', 'soc.religion.christian', -... 'comp.graphics', 'sci.med'] - -``` - -如下所示,我们现在能够加载对应这些类别的文件列表: - -```py ->>> from sklearn.datasets import fetch_20newsgroups ->>> twenty_train = fetch_20newsgroups(subset='train', -... categories=categories, shuffle=True, random_state=42) - -``` - -返回的数据集是一个 `scikit-learn` “bunch”: 一个简单的包含多个 “field” 的存储对象,可以方便的使用 python 中的 `dict` keys 或 `object` 属性来读取, 比如 `target_names` 包含了所请求的类别名称: - -```py ->>> twenty_train.target_names -['alt.atheism', 'comp.graphics', 'sci.med', 'soc.religion.christian'] - -``` - -这些文件本身被读进内存的 `data` 属性中。 另外,这些文件名称也可以容易获取到: - -```py ->>> len(twenty_train.data) -2257 ->>> len(twenty_train.filenames) -2257 - -``` - -让我们打印出所加载的第一个文件的前几行: - -```py ->>> print("\n".join(twenty_train.data[0].split("\n")[:3])) -From: sd345@city.ac.uk (Michael Collier) -Subject: Converting images to HP LaserJet III? -Nntp-Posting-Host: hampton - ->>> print(twenty_train.target_names[twenty_train.target[0]]) -comp.graphics - -``` - -监督学习需要让训练集中的每个文档对应一个类别标签。 在这个例子中,类别是每个新闻组的名称,也刚好是每个储存文本文件的文件夹的名称。 - -由于速度和空间上效率的原因 `scikit-learn` 加载目标属性为一个整型数列, 它与 `target_names` 列表中类别名称的 index(索引)相对应。 每个样本的类别的整数型 id 存放在 `target` 属性中: - -```py ->>> twenty_train.target[:10] -array([1, 1, 3, 3, 3, 3, 3, 2, 2, 2]) - -``` - -也可以通过如下方式取得类别名称: - -```py ->>> for t in twenty_train.target[:10]: -... print(twenty_train.target_names[t]) -... -comp.graphics -comp.graphics -soc.religion.christian -soc.religion.christian -soc.religion.christian -soc.religion.christian -soc.religion.christian -sci.med -sci.med -sci.med - -``` - -你可以发现所有的样本都被随机打乱(使用了修正的 RNG 种子): 当你在重新训练整个数据集之前,这样可以帮助你只选取前几个样本来快速训练一个模型以及获得初步结果。 - -## 从文本文件中提取特征 - -为了在文本文件中执行机器学习算法, 我们首先要做的是将文本内容转化成数值形式的特征向量。 - -### 词袋 - -最直观的方法就是用词袋来表示: - -> 1. 在训练集中每一个出现在任意文中的单词分配一个特定的整数 id(比如,通过建立一个从单词到整数索引的字典)。 -> 2. 对于每个文档 `#i`,计算每个单词 `w` 的出现次数并将其存储在 `X[i, j]` 中作为特征 `#j` 的值,其中 `j` 是在字典中词 `w` 的索引。 - -在这种方法中 `n_features` 是在整个文集(文章集合的缩写,下同)中不同单词的数量: 这个值一般来说超过 100,000 。 - -如果 `n_samples == 10000` , 存储 `X` 为 “float32” 型的 numpy 数组将会需要 10000 x 100000 x 4 bytes = **4GB内存** ,在当前的计算机中非常不好管理的。 - -幸运的是, **X 数组中大多数的值为 0** ,是因为特定的文档中使用的单词数量远远少于总体的词袋单词个数。 因此我们可以称词袋模型是典型的 **high-dimensional sparse datasets(高维稀疏数据集)** 。 我们可以通过只在内存中保存特征向量中非 0 的部分以节省大量内存。 - -`scipy.sparse` 矩阵正是能完成上述操作的数据结构,同时 `scikit-learn` 有对这样的数据结构的内置支持。 - -### 使用 `scikit-learn` 来对文本进行分词 - -文本的预处理, 分词以及过滤停用词都被包含在一个可以构建特征字典和将文档转换成特征向量的高级组件中 - -```py ->>> from sklearn.feature_extraction.text import CountVectorizer ->>> count_vect = CountVectorizer() ->>> X_train_counts = count_vect.fit_transform(twenty_train.data) ->>> X_train_counts.shape -(2257, 35788) - -``` - -[`CountVectorizer`](../../modules/generated/sklearn.feature_extraction.text.CountVectorizer.html#sklearn.feature_extraction.text.CountVectorizer "sklearn.feature_extraction.text.CountVectorizer") 支持单词或者连续字符的 N-gram 模型的计数。 一旦拟合, 向量化程序就会构建一个包含特征索引的字典: - -```py ->>> count_vect.vocabulary_.get(u'algorithm') -4690 - -``` - -在词汇表中一个单词的索引值对应的是该单词在整个训练的文集中出现的频率。 - -### 从出现次数到出现频率 - -出现次数的统计是非常好的开始,但是有个问题:长的文本相对于短的文本有更高的单词平均出现次数,尽管他们可能在描述同一个主题。 - -为了避免这些潜在的差异,只需将各文档中每个单词的出现次数除以该文档中所有单词的总数:这些新的特征称之为词频 `tf` (Term Frequencies)。 - -另一个在词频的基础上改良是,降低在该训练文集中的很多文档中均出现的单词的权重,从而突出那些仅在该训练文集中在一小部分文档中出现的单词的信息量。 - -这种方法称为 [tf–idf](https://en.wikipedia.org/wiki/Tf–idf) ,全称为 “Term Frequency times Inverse Document Frequency” 。 - -**tf** 和 **tf–idf** 都可以按照下面的方式计算: - -```py ->>> from sklearn.feature_extraction.text import TfidfTransformer ->>> tf_transformer = TfidfTransformer(use_idf=False).fit(X_train_counts) ->>> X_train_tf = tf_transformer.transform(X_train_counts) ->>> X_train_tf.shape -(2257, 35788) - -``` - -在上面的样例代码中,我们首先使用了 `fit(..)` 方法来拟合对数据的 estimator(估算器),接着使用 `transform(..)` 方法来把我们的计数矩阵转换成 <cite>tf-idf</cite> 型。 通过跳过冗余处理,这两步可以结合起来,来更快地得到同样的结果。这种操作可以使用上节提到过的 `fit_transform(..)` 方法来完成,如下: - -```py ->>> tfidf_transformer = TfidfTransformer() ->>> X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts) ->>> X_train_tfidf.shape -(2257, 35788) - -``` - -## 训练分类器 - -现在我们有了我们的特征,我们可以训练一个分类器来预测一个帖子所属的类别。 让我们从 [朴素贝叶斯](../../modules/naive_bayes.html#naive-bayes) 分类器开始. 该分类器为该任务提供了一个好的基准(baseline). `scikit-learn` 包含了该分类器的若干变种;最适用在该问题上的变种是多项式分类器: - -```py ->>> from sklearn.naive_bayes import MultinomialNB ->>> clf = MultinomialNB().fit(X_train_tfidf, twenty_train.target) - -``` - -为了尝试预测新文档所属的类别,我们需要使用和之前同样的步骤来抽取特征。 不同之处在于,我们在transformer调用 `transform` 而不是 `fit_transform` ,因为这些特征已经在训练集上进行拟合了: - -```py ->>> docs_new = ['God is love', 'OpenGL on the GPU is fast'] ->>> X_new_counts = count_vect.transform(docs_new) ->>> X_new_tfidf = tfidf_transformer.transform(X_new_counts) - ->>> predicted = clf.predict(X_new_tfidf) - ->>> for doc, category in zip(docs_new, predicted): -... print('%r => %s' % (doc, twenty_train.target_names[category])) -... -'God is love' => soc.religion.christian -'OpenGL on the GPU is fast' => comp.graphics - -``` - -## 构建 Pipeline(管道) - -为了使得 向量化(vectorizer) => 转换器(transformer) => 分类器(classifier) 过程更加简单,``scikit-learn`` 提供了一个 `Pipeline` 类,操作起来像一个复合分类器: - -```py ->>> from sklearn.pipeline import Pipeline ->>> text_clf = Pipeline([('vect', CountVectorizer()), -... ('tfidf', TfidfTransformer()), -... ('clf', MultinomialNB()), -... ]) - -``` - -名称 `vect`, `tfidf` 和 `clf` (分类器)都是任意的。 我们将会在下面的网格搜索(grid search)小节中看到它们的用法。 现在我们可以使用下面的一行命令来训练模型: - -```py ->>> text_clf.fit(twenty_train.data, twenty_train.target) -Pipeline(...) - -``` - -## 在测试集上的性能评估 - -评估模型的预测准确度同样简单: - -```py ->>> import numpy as np ->>> twenty_test = fetch_20newsgroups(subset='test', -... categories=categories, shuffle=True, random_state=42) ->>> docs_test = twenty_test.data ->>> predicted = text_clf.predict(docs_test) ->>> np.mean(predicted == twenty_test.target) -0.834... - -``` - -那就是, 我们模型的准确度为 83.4%. 我们使用线性分类模型 [支持向量机(SVM)](../../modules/svm.html#svm) , 是公认的最好的文本分类算法之一(尽管训练速度比朴素贝叶斯慢一点)。 仅需要在 Pipeline(管道)中插接入不同的分类器对象,就可以改变我们的学习器: - -```py ->>> from sklearn.linear_model import SGDClassifier ->>> text_clf = Pipeline([('vect', CountVectorizer()), -... ('tfidf', TfidfTransformer()), -... ('clf', SGDClassifier(loss='hinge', penalty='l2', -... alpha=1e-3, random_state=42, -... max_iter=5, tol=None)), -... ]) ->>> text_clf.fit(twenty_train.data, twenty_train.target) -Pipeline(...) ->>> predicted = text_clf.predict(docs_test) ->>> np.mean(predicted == twenty_test.target) -0.912... - -``` - -此外, `scikit-learn` 提供了更加细致的模型性能评估工具: - -```py ->>> from sklearn import metrics ->>> print(metrics.classification_report(twenty_test.target, predicted, -... target_names=twenty_test.target_names)) -... - precision recall f1-score support - - alt.atheism 0.95 0.81 0.87 319 - comp.graphics 0.88 0.97 0.92 389 - sci.med 0.94 0.90 0.92 396 -soc.religion.christian 0.90 0.95 0.93 398 - - avg / total 0.92 0.91 0.91 1502 - ->>> metrics.confusion_matrix(twenty_test.target, predicted) -array([[258, 11, 15, 35], - [ 4, 379, 3, 3], - [ 5, 33, 355, 3], - [ 5, 10, 4, 379]]) - -``` - -正如所期望的, confusion matrix(混淆矩阵)表明 atheism 和 christian 两个类别的新闻帖子会比它们中任一类与 computer graphics 类别的新闻贴子更容易彼此混淆。 - -## 使用网格搜索进行调参 - -我们已经接触了类似于 `TfidfTransformer` 中 `use_idf` 这样的参数 ,分类器也有许多参数; 比如, `MultinomialNB` 包含了平滑参数 `alpha` 以及 `SGDClassifier` 有惩罚参数 `alpha` 和目标函数中的可设置的损失以及惩罚因子(请翻阅该模组说明,或者更多信息请使用 python 的 `help` 文档)。 - -不是调整 chain(链)的各种组件的参数,相反,通过构建巨大的可能值的网格从而对最佳参数的穷尽搜索是可能的。 我们尝试所有情况的分类器:使用词袋或者二元模型,使用或者不使用 idf ,在线性 SVM 上设置 0.01 或者 0.001 的惩罚参数: - -```py ->>> from sklearn.model_selection import GridSearchCV ->>> parameters = {'vect__ngram_range': [(1, 1), (1, 2)], -... 'tfidf__use_idf': (True, False), -... 'clf__alpha': (1e-2, 1e-3), -... } - -``` - -很明显, 如此地穷举是非常耗时的。 如果我们有多个 CPU,通过设置 `n_jobs` 参数可以进行并行处理。 如果我们将该参数设置为 `-1` , 该方法会使用机器的所有 CPU 核心: - -```py ->>> gs_clf = GridSearchCV(text_clf, parameters, n_jobs=-1) - -``` - -网格搜索的操作跟 `scikit-learn` 中常见的模型的操作是类似的。 让我们来选择训练集中的一小部分进行搜索来加速计算: - -```py ->>> gs_clf = gs_clf.fit(twenty_train.data[:400], twenty_train.target[:400]) - -``` - -在 `GridSearchCV` 中调用 `fit`,我们得到了用来 `predict` 的分类器: - -```py ->>> twenty_train.target_names[gs_clf.predict(['God is love'])[0]] -'soc.religion.christian' - -``` - -该对象的 `best_score_` 和 `best_params_` 属性存放了最佳的平均分以及其所对应的参数配置: - -```py ->>> gs_clf.best_score_ -0.900... ->>> for param_name in sorted(parameters.keys()): -... print("%s: %r" % (param_name, gs_clf.best_params_[param_name])) -... -clf__alpha: 0.001 -tfidf__use_idf: True -vect__ngram_range: (1, 1) - -``` - -更详细的搜索总结可以在 `gs_clf.cv_results_` 中得到。 - -`cv_results_` 参数能够轻易地以 `DataFrame` 格式被导入到 pandas 中,以供以后观察。 - -### 练习 - -为了做这个练习,请拷贝 ‘skeletons’ 文件夹到新的文件夹,并将其命名为 ‘workspace’: - -```py -% cp -r skeletons workspace - -``` - -这时候可以任意更改练习的代码而不会破坏原来的练习指导。 - -然后启动 ipython 交互环境,并运行以下 python 脚本: - -```py -[1] %run workspace/exercise_XX_script.py arg1 arg2 arg3 - -``` - -如果出现错误, 请使用 `%debug` 来启动 ipdb 调试环境。 - -迭代更改答案直到练习完成。 - -**在每个练习中, skeleton 文件提供了所有必需的import语句,加载数据的模板代码以及评估模型准确度的样例代码.** - -## 练习 1:语言识别 - -* 请使用以维基百科中的文章作为训练集的自定义的预处理器和 `CharNGramAnalyzer` , 来编写一个文本分类的 Pipeline(管道)。 -* 评估某些测试集的性能. - -ipython command line: - -```py -%run workspace/exercise_01_language_train_model.py data/languages/paragraphs/ - -``` - -## 练习 2:电影评论的情感分析 - -* 编写一个文本分类 Pipeline(管道)来将电影评论分类为积极的(positive)还是消极的(negative)。 -* 使用网格搜索来找到好的参数配置。 -* 使用测试集进行性能评估。 - -ipython 命令行: - -```py -%run workspace/exercise_02_sentiment.py data/movie_reviews/txt_sentoken/ - -``` - -## 练习 3:CLI 文本分类实用程序 - -使用前面的练习结果以及标准库的 `cPickle``模块,编写一个命令行工具来检测由 ``stdin` 输入的文本语言。如果输入的文本是英文的话,请评估该文本的极性(积极的还是消极的)。 - -加分项:该工具对其预测给出置信水平。 - -## 快速链接 - -当你完成这个章节时,下面是几个建议来帮助你对 scikit-learn 有进一步的理解: - -* 尝试使用 [`CountVectorizer`](../../modules/generated/sklearn.feature_extraction.text.CountVectorizer.html#sklearn.feature_extraction.text.CountVectorizer "sklearn.feature_extraction.text.CountVectorizer") 类下的 `analyzer` 以及 `token normalisation` 。 -* 如果你没有标签,尝试使用 [聚类](../../auto_examples/text/document_clustering.html#sphx-glr-auto-examples-text-document-clustering-py) 来解决你的问题。 -* 如果每篇文章有多个标签,请参考 [多类别和多标签部分](../../modules/multiclass.html#multiclass) _ 。 -* 尝试使用 [Truncated SVD](../../modules/decomposition.html#lsa) 解决 [隐语义分析](https://en.wikipedia.org/wiki/Latent_semantic_analysis). -* 使用 [Out-of-core Classification](../../auto_examples/applications/plot_out_of_core_classification.html#sphx-glr-auto-examples-applications-plot-out-of-core-classification-py) 来学习不会存入计算机的主存储器的数据。 -* 使用 [Hashing Vectorizer](../../modules/feature_extraction.html#hashing-vectorizer) 来节省内存,以代替 [`CountVectorizer`](../../modules/generated/sklearn.feature_extraction.text.CountVectorizer.html#sklearn.feature_extraction.text.CountVectorizer "sklearn.feature_extraction.text.CountVectorizer") 。 \ No newline at end of file diff --git a/docs/0.19.x/77.md b/docs/0.19.x/77.md deleted file mode 100755 index be92fc130c73973fcfca564da45659ec2213ba46..0000000000000000000000000000000000000000 --- a/docs/0.19.x/77.md +++ /dev/null @@ -1,15 +0,0 @@ -# 选择正确的评估器(estimator) - -校验者: -翻译者: -        [@李孟禹](https://github.com/apachecn/scikit-learn-doc-zh) - -通常,解决机器学习问题的最困难的部分可能是找到恰当的的评估器(estimator)。 - -不同的评估器更适合不同类型的数据和不同的问题。 - -下面的流程图是一些粗略的指导,可以让用户根据自己的数据来选择应该尝试哪些评估器。 - -点击下图的任何评估器,查看其文档。 - -![](img/algo.jpg) diff --git a/docs/0.19.x/78.md b/docs/0.19.x/78.md deleted file mode 100755 index ce2834d5c598809a961df25c9124f22c1ccb28e9..0000000000000000000000000000000000000000 --- a/docs/0.19.x/78.md +++ /dev/null @@ -1,49 +0,0 @@ -# 外部资源,视频和谈话 - -校验者: -翻译者: -        [@巴黎灬メの雨季](https://github.com/apachecn/scikit-learn-doc-zh) -校验者: -翻译者: -        [@巴黎灬メの雨季](https://github.com/apachecn/scikit-learn-doc-zh) - -For written tutorials, see the [Tutorial section](tutorial/index.html#tutorial-menu) of the documentation. - -## Scientific Python 的新手? - -For those that are still new to the scientific Python ecosystem, we highly recommend the [Python Scientific Lecture Notes](http://www.scipy-lectures.org/). This will help you find your footing a bit and will definitely improve your scikit-learn experience. A basic understanding of NumPy arrays is recommended to make the most of scikit-learn. - -## 外部教程 - -There are several online tutorials available which are geared toward specific subject areas: - -* [Machine Learning for NeuroImaging in Python](http://nilearn.github.io/) -* [Machine Learning for Astronomical Data Analysis](https://github.com/astroML/sklearn_tutorial) - -## 视频 - -* An introduction to scikit-learn [Part I](https://conference.scipy.org/scipy2013/tutorial_detail.php?id=107) and [Part II](https://conference.scipy.org/scipy2013/tutorial_detail.php?id=111) at Scipy 2013 by [Gael Varoquaux](http://gael-varoquaux.info), [Jake Vanderplas](http://staff.washington.edu/jakevdp) and [Olivier Grisel](https://twitter.com/ogrisel). Notebooks on [github](https://github.com/jakevdp/sklearn_scipy2013). - -* [Introduction to scikit-learn](http://videolectures.net/icml2010_varaquaux_scik/) by [Gael Varoquaux](http://gael-varoquaux.info) at ICML 2010 - - > A three minute video from a very early stage of the scikit, explaining the basic idea and approach we are following. - -* [Introduction to statistical learning with scikit-learn](http://archive.org/search.php?query=scikit-learn) by [Gael Varoquaux](http://gael-varoquaux.info) at SciPy 2011 - - > An extensive tutorial, consisting of four sessions of one hour. The tutorial covers the basics of machine learning, many algorithms and how to apply them using scikit-learn. The material corresponding is now in the scikit-learn documentation section [关于科学数据处理的统计学习教程](tutorial/statistical_inference/index.html#stat-learn-tut-index). - -* [Statistical Learning for Text Classification with scikit-learn and NLTK](http://www.pyvideo.org/video/417/pycon-2011--statistical-machine-learning-for-text) (and [slides](http://www.slideshare.net/ogrisel/statistical-machine-learning-for-text-classification-with-scikitlearn-and-nltk)) by [Olivier Grisel](https://twitter.com/ogrisel) at PyCon 2011 - - > Thirty minute introduction to text classification. Explains how to use NLTK and scikit-learn to solve real-world text classification tasks and compares against cloud-based solutions. - -* [Introduction to Interactive Predictive Analytics in Python with scikit-learn](https://www.youtube.com/watch?v=Zd5dfooZWG4) by [Olivier Grisel](https://twitter.com/ogrisel) at PyCon 2012 - - > 3-hours long introduction to prediction tasks using scikit-learn. - -* [scikit-learn - Machine Learning in Python](https://newcircle.com/s/post/1152/scikit-learn_machine_learning_in_python) by [Jake Vanderplas](http://staff.washington.edu/jakevdp) at the 2012 PyData workshop at Google - - > Interactive demonstration of some scikit-learn features. 75 minutes. - -* [scikit-learn tutorial](https://vimeo.com/53062607) by [Jake Vanderplas](http://staff.washington.edu/jakevdp) at PyData NYC 2012 - - > Presentation using the online tutorial, 45 minutes. \ No newline at end of file diff --git a/docs/0.19.x/79.md b/docs/0.19.x/79.md deleted file mode 100755 index 4c3cf499a9f514b424873d5ad96d4a9ff8aa46dc..0000000000000000000000000000000000000000 --- a/docs/0.19.x/79.md +++ /dev/null @@ -1,76 +0,0 @@ -# 安装 scikit-learn - -校验者: -        [@小瑶](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@片刻](https://github.com/apachecn/scikit-learn-doc-zh) - -Note - -如果你想为这个项目做出贡献,建议你 [安装最新的开发版本](developers/advanced_installation.html#install-bleeding-edge) . - -## 安装最新版本 - -Scikit-learn 要求: - -* Python (>= 2.7 or >= 3.3), -* NumPy (>= 1.8.2), -* SciPy (>= 0.13.3). - -如果你已经有一个安全的 numpy 和 scipy,安装 scikit-learn 最简单的方法是使用 `pip` - -```py -pip install -U scikit-learn - -``` - -或者 `conda`: - -```py -conda install scikit-learn - -``` - -如果您还没有安装 NumPy 或 SciPy,还可以使用 conda 或 pip 来安装它们。 当使用 pip 时,请确保使用了 _binary wheels_,并且 NumPy 和 SciPy 不会从源重新编译,这可能在使用操作系统和硬件的特定配置(如 Raspberry Pi 上的 Linux)时发生。 从源代码构建 numpy 和 scipy 可能是复杂的(特别是在 Windows 上),并且需要仔细配置,以确保它们与线性代数程序的优化实现链接。而是使用如下所述的第三方发行版。 - -如果您必须安装 scikit-learn 及其与 pip 的依赖关系,则可以将其安装为 `scikit-learn[alldeps]`。 最常见的用例是 `requirements.txt` 用作 PaaS 应用程序或 Docker 映像的自动构建过程的一部分的文件。此选项不适用于从命令行进行手动安装。 - -## 第三方发行版 - -如果您尚未安装具有 numpy 和 scipy 的 python 安装,建议您通过软件包管理器或通过 python 软件包进行安装。 这些与 numpy, scipy, scikit-learn, matplotlib 和许多其他有用的科学和数据处理库。 - -可用选项有: - -### Canopy 和 Anaconda 适用于所有支持的平台 - -[Canopy](https://www.enthought.com/products/canopy) 和 [Anaconda](https://www.continuum.io/downloads) 都运送了最新版本的 scikit-learn,另外还有一大批适用于 Windows,Mac OSX 和 Linux 的科学 python 库。 - -Anaconda 提供 scikit-learn 作为其免费分发的一部分. - -Warning - -升级或卸载使用 Anaconda 安装的 scikit-learn,或者 `conda` **不应该使用 pip 命令**。代替: - -升级 `scikit-learn`: - -```py -conda update scikit-learn - -``` - -卸载 `scikit-learn`: - -```py -conda remove scikit-learn - -``` - -使用 `pip install -U scikit-learn` 升级 or `pip uninstall scikit-learn` 卸载 可能无法正确删除 `conda` 命令安装的文件. - -pip 升级和卸载操作仅适用于通过 `pip install` 安装的软件包. - -### WinPython 适用于 Windows - -该 [WinPython](https://winpython.github.io/) 项目分布 scikit-learn 作为额外的插件。 - -有关特定操作系统的安装说明或汇编出血边缘版本,请参阅 [Advanced installation instructions](developers/advanced_installation.html#advanced-installation). \ No newline at end of file diff --git a/docs/0.19.x/8.md b/docs/0.19.x/8.md deleted file mode 100755 index d4ec829f4c0338844e183ad4e4a9bfca214e6a79..0000000000000000000000000000000000000000 --- a/docs/0.19.x/8.md +++ /dev/null @@ -1,444 +0,0 @@ -# 1.7\. 高斯过程 - -校验者: -        [@glassy](https://github.com/apachecn/scikit-learn-doc-zh) -        [@Trembleguy](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@AI追寻者](https://github.com/apachecn/scikit-learn-doc-zh) - -**高斯过程 (GP)** 是一种常用的监督学习方法,旨在解决*回归问题*和*概率分类问题*。 - -高斯过程模型的优点如下: - -> * 预测内插了观察结果(至少对于正则核)。 -> -> -> * ```py -> 预测结果是概率形式的(高斯形式的)。这样的话, -> ``` -> -> -> -> 人们可以计算得到经验置信区间并且据此来判断是否需要修改(在线拟合,自适应) -> -> -> -> 在一些区域的预测值。 -> -> -> * ```py -> 通用性: 可以指定不同的:ref:内核(kernels)<gp_kernels>。 -> ``` -> -> -> -> 虽然该函数提供了常用的内核,但是也可以指定自定义内核。 - -高斯过程模型的缺点包括: - -> * 它们不稀疏,例如,模型通常使用整个样本/特征信息来进行预测。 -> * 高维空间模型会失效,高维也就是指特征的数量超过几十个。 - -## 1.7.1\. 高斯过程回归(GPR) - -[`GaussianProcessRegressor`](generated/sklearn.gaussian_process.GaussianProcessRegressor.html#sklearn.gaussian_process.GaussianProcessRegressor "sklearn.gaussian_process.GaussianProcessRegressor") 类实现了回归情况下的高斯过程(GP)模型。 为此,需要实现指定GP的先验。当参数 `normalize_y=False` 时,先验的均值 通常假定为常数或者零; 当 `normalize_y=True` 时,先验均值通常为训练数 据的均值。而先验的方差通过传递 [内核(kernel)](#gp-kernels) 对象来指定。通过 最大化基于传递 `optimizer` 的对数边缘似然估计(LML),内核的超参可以在 GaussianProcessRegressor 类执行拟合过程中被优化。由于 LML 可能会存在多个 局部最优解,因此优化过程可以通过指定 `n_restarts_optimizer` 参数进行 多次重复。通过设置内核的超参初始值来进行第一次优化的运行。后续的运行 过程中超参值都是从合理范围值中随机选取的。如果需要保持初始化超参值, 那么需要把优化器设置为 <cite>None</cite> 。 - -目标变量中的噪声级别通过参数 `alpha` 来传递并指定,要么全局是常数要么是一个数据点。 请注意,适度的噪声水平也可以有助于处理拟合期间的数字问题,因为它被有效地实现为吉洪诺夫正则化(Tikhonov regularization), 即通过将其添加到核心矩阵的对角线。明确指定噪声水平的替代方法是将 WhiteKernel 组件包含在内核中, 这可以从数据中估计全局噪声水平(见下面的示例)。 - -算法实现是基于 [[RW2006]](#rw2006) 中的算法 2.1 。除了标准 scikit learn 估计器的 API 之外, GaussianProcessRegressor 的作用还包括: - -* 允许预测,无需事先拟合(基于GP先验) -* 提供了一种额外的方法 `sample_y(X)` , 其评估 在给定输入处从 GPR (先验或后验)绘制的样本 -* 公开了一种方法 `log_marginal_likelihood(theta)` , 可以在外部使用其他方式选择超参数,例如通过马尔科夫链蒙特卡罗链(Markov chain Monte Carlo)。 - -## 1.7.2\. GPR 示例 - -### 1.7.2.1\. 具有噪声级的 GPR 估计 - -该示例说明具有包含 WhiteKernel 的和核(sum-kernel)的 GPR 可以估计数据的噪声水平。 对数边缘似然(LML)景观的图示表明存在 LML 的两个局部最大值。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gpr_noisy_0001.png](img/1091409a4db7e77230536d6b05b4fae6.jpg)](../auto_examples/gaussian_process/plot_gpr_noisy.html) - -第一个对应于具有高噪声电平和大长度尺度的模型,其解释数据中噪声的所有变化。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gpr_noisy_0011.png](img/0f30c5ace43eda2a8d25c6e9365264d7.jpg)](../auto_examples/gaussian_process/plot_gpr_noisy.html) - -第二个具有较小的噪声水平和较短的长度尺度,这解释了无噪声功能关系的大部分变化。 第二种模式有较高的可能性; 然而,根据超参数的初始值,基于梯度的优化也可能会收敛到高噪声解。 因此,对于不同的初始化,重复优化多次是很重要的。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gpr_noisy_0021.png](img/6526868397aa8da766b3dc60bbcc30ef.jpg)](../auto_examples/gaussian_process/plot_gpr_noisy.html) - -### 1.7.2.2\. GPR 和内核岭回归(Kernel Ridge Regression)的比较 - -内核脊回归(KRR)和 GPR 通过内部使用 “kernel trick(内核技巧)” 来学习目标函数。 KRR学习由相应内核引起的空间中的线性函数,该空间对应于原始空间中的非线性函数。 基于平均误差损失与脊正弦化,选择内核空间中的线性函数。 GPR使用内核来定义先验分布在目标函数上的协方差,并使用观察到的训练数据来定义似然函数。 基于贝叶斯定理,定义了目标函数上的(高斯)后验分布,其平均值用于预测。 - -一个主要区别是,GPR 可以基于边际似然函数上的梯度上升选择内核的超参数, 而KRR需要在交叉验证的损失函数(均方误差损失)上执行网格搜索。 另一个区别是,GPR 学习目标函数的生成概率模型,因此可以提供有意义的置信区间和后验样本以及预测值, 而KRR仅提供预测。 - -下图说明了人造数据集上的两种方法,其中包括正弦目标函数和强噪声。 该图比较了基于 ExpSineSquared 内核的 KRR 和 GPR 的学习模型,适用于学习周期函数。 内核的超参数控制内核的平滑度(length_scale)和周期性(周期性)。 此外,数据的噪声水平由 GPR 通过内核中的另外的 WhiteKernel 组件和 KRR 的正则化参数 α 明确地学习。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_compare_gpr_krr_0011.png](img/610475f160f25407a547e5430c792460.jpg)](../auto_examples/gaussian_process/plot_compare_gpr_krr.html) - -该图显示,两种方法都可以学习合理的目标函数模型。 GPR将函数的周期正确地识别为 ![2*\pi](img/cdaca3963c7797054326117c0bc0b368.jpg) (6.28),而 KRR 选择倍增的周期为 ![4*\pi](img/5d0d4b3cde172f7fd71da81c2e1b21a9.jpg) 。 此外,GPR 为 KRR 不可用的预测提供了合理的置信区间。 两种方法之间的主要区别是拟合和预测所需的时间: 原则上KRR的拟合速度较快,超参数优化的网格搜索与超参数( “curse of dimensionality(维度诅咒)” )呈指数级关系。 GPR中的参数的基于梯度的优化不受此指数缩放的影响,因此在具有三维超参数空间的该示例上相当快。 预测的时间是相似的; 然而,生成 GPR 预测分布的方差需要的时间比生成平均值要长。 - -### 1.7.2.3\. Mauna Loa CO2 数据中的 GRR - -该示例基于 [RW2006] 的第 5.4.3 节。 它演示了使用梯度上升的对数边缘似然性的复杂内核工程和超参数优化的示例。 数据包括在 1958 年至 1997 年间夏威夷 Mauna Loa 天文台收集的每月平均大气二氧 化碳浓度(以百万分之几(ppmv)计)。目的是将二氧化碳浓度建模为时间t的函数。 - -内核由几个术语组成,负责说明信号的不同属性: - -* 一个长期的,顺利的上升趋势是由一个 RBF 内核来解释的。 具有较大长度尺寸的RBF内核将使该分量平滑; 没有强制这种趋势正在上升,这给 GP 带来了这个选择。 具体的长度尺度和振幅是自由的超参数。 -* 季节性因素,由定期的 ExpSineSquared 内核解释,固定周期为1年。 该周期分量的长度尺度控制其平滑度是一个自由参数。 为了使准确周期性的衰减,采用带有RBF内核的产品。 该RBF组件的长度尺寸控制衰减时间,并且是另一个自由参数。 -* 较小的中期不规则性将由 RationalQuadratic 内核组件来解释, RationalQuadratic 内核组件的长度尺度和 alpha 参数决定长度尺度的扩散性。 根据 [RW2006] ,这些不规则性可以更好地由 RationalQuadratic 来解释, 而不是 RBF 内核组件,这可能是因为它可以容纳几个长度尺度。 -* “noise(噪声)” 一词,由一个 RBF 内核贡献组成,它将解释相关的噪声分量, - -> 如局部天气现象以及 WhiteKernel 对白噪声的贡献。 相对幅度和RBF的长度尺度是进一步的自由参数。 - -在减去目标平均值后最大化对数边际似然率产生下列内核,其中LML为-83.214: - -```py -34.4**2 * RBF(length_scale=41.8) -+ 3.27**2 * RBF(length_scale=180) * ExpSineSquared(length_scale=1.44, - periodicity=1) -+ 0.446**2 * RationalQuadratic(alpha=17.7, length_scale=0.957) -+ 0.197**2 * RBF(length_scale=0.138) + WhiteKernel(noise_level=0.0336) - -``` - -因此,大多数目标信号(34.4ppm)由长期上升趋势(长度为41.8年)解释。 周期分量的振幅为3.27ppm,衰减时间为180年,长度为1.44。 长时间的衰变时间表明我们在当地非常接近周期性的季节性成分。 相关噪声的幅度为0.197ppm,长度为0.138年,白噪声贡献为0.197ppm。 因此,整体噪声水平非常小,表明该模型可以很好地解释数据。 该图还显示,该模型直到2015年左右才能做出置信度比较高的预测 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gpr_co2_0011.png](img/6da3d48746433a02996c5821013ac4e7.jpg)](../auto_examples/gaussian_process/plot_gpr_co2.html) - -## 1.7.3\. 高斯过程分类(GPC) - -所述 [`GaussianProcessClassifier`](generated/sklearn.gaussian_process.GaussianProcessClassifier.html#sklearn.gaussian_process.GaussianProcessClassifier "sklearn.gaussian_process.GaussianProcessClassifier") 器实现了用于分类目的的高斯过程(GP),当测试的预测采用类概率的形式,更能够用于概率分类。 GaussianProcessClassifier 在隐函数 ![f](img/a8f0b97723e99a7ddae947c83f43ff45.jpg) 之前设置GP先验,然后通过链接函数进行压缩以获得概率分类。 隐函数 ![f](img/a8f0b97723e99a7ddae947c83f43ff45.jpg) 因此就是所谓的干扰函数(nuisance function),其值不能被观测到,并且自身不具有相关性。 其目的是允许模型的表达形式更加简便,并且 ![f](img/a8f0b97723e99a7ddae947c83f43ff45.jpg) 在预测过程中被去除(整合)。 GaussianProcessClassifier 实现了逻辑链接函数, 对于该逻辑,积分不能在分析上计算,但在二进制情况下很容易近似。 - -与回归设置相反,即使设置了高斯过程先验,隐函数 ![f](img/a8f0b97723e99a7ddae947c83f43ff45.jpg) 的后验也不符合高斯分布, 因为高斯似然不适用于离散类标签。相反,使用的是与逻辑链接函数(logit)对应的非高斯似然。 GaussianProcessClassifier 通过拉普拉斯近似(Laplace approximation)来估计非高斯后验分布。 更多详细信息,请参见 [RW2006] 的第 3 章。 - -GP先验平均值假定为零。先验的协方差是通过传递 [内核(kernel)](#gp-kernels) 对象来指定的。 在通过最大化基于传递的对数边缘似然(LML)的 GaussianProcessRegressor 拟合期间, 优化内核的超参数 `optimizer` 。由于LML可能具有多个局部最优值, 所以优化器可以通过指定重复启动 `n_restarts_optimizer` 。 第一次运行始终从内核的初始超参数值开始执行; 从已经从允许值的范围中随机选择超参数值来进行后续运行。 如果初始超参数需要保持固定,<cite>None</cite> 可以传递作为优化器。 - -[`GaussianProcessClassifier`](generated/sklearn.gaussian_process.GaussianProcessClassifier.html#sklearn.gaussian_process.GaussianProcessClassifier "sklearn.gaussian_process.GaussianProcessClassifier") 通过执行基于OvR(one-versus-rest)或 OvO(one-versus-one )策略的训练和预测来支持多类分类。 在OvR(one-versus-rest)策略中,每个类都配有一个二进制高斯过程分类器,该类别被训练为将该类与其余类分开。 在 “one_vs_one” 中,对于每对类拟合一个二进制高斯过程分类器,这被训练为分离这两个类。 这些二进制预测因子的预测被组合成多类预测。更多详细信息,请参阅 [多类别分类](multiclass.html#multiclass) 。 - -在高斯过程分类的情况下,”one_vs_one” 策略可能在计算上更廉价, 因为它必须解决涉及整个训练集的每一个子集的许多问题, 而不是整个数据集的较少的问题。由于高斯过程分类与数据集的大小相互立方,这可能要快得多。 但是,请注意,”one_vs_one” 不支持预测概率估计,而只是简单的预测。 此外,请注意, [`GaussianProcessClassifier`](generated/sklearn.gaussian_process.GaussianProcessClassifier.html#sklearn.gaussian_process.GaussianProcessClassifier "sklearn.gaussian_process.GaussianProcessClassifier") 在内部还没有实现真正的多类 Laplace 近似, 但如上所述,在解决内部二进制分类任务的基础上,它们使用OvR或OvO的组合方法。 - -## 1.7.4\. GPC 示例 - -### 1.7.4.1\. GPC 概率预测 - -该示例说明了对于具有不同选项的超参数的RBF内核的GPC预测概率。 第一幅图显示GPC具有任意选择的超参数的预测概率,以及对应于最大LML(对数边缘似然)对应的超参数。 - -虽然通过优化LML选择的超参数具有相当大的LML,但是根据测试数据的对数损失,它们的表现更差。 该图显示,这是因为它们在阶级边界(这是好的)表现出类概率的急剧变化, 但预测概率接近0.5远离类边界(这是坏的)这种不良影响是由于GPC内部使用了拉普拉斯逼近。 - -第二幅图显示了内核超参数的不同选择的LML(对数边缘似然),突出了在第一幅图中使用的通过黑点(训练集)选择的两个超参数。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gpc_0001.png](img/c9e8d19526fed76c122a77c246f59313.jpg)](../auto_examples/gaussian_process/plot_gpc.html)[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gpc_0011.png](img/1a125d0568be1ce93a6bc7b3ee1071e1.jpg)](../auto_examples/gaussian_process/plot_gpc.html) - -### 1.7.4.2\. GPC 在 XOR 数据集上的举例说明 - -此示例说明了在XOR数据上的GPC。各向同性的核( [`RBF`](generated/sklearn.gaussian_process.kernels.RBF.html#sklearn.gaussian_process.kernels.RBF "sklearn.gaussian_process.kernels.RBF") )和非固定的核( [`DotProduct`](generated/sklearn.gaussian_process.kernels.DotProduct.html#sklearn.gaussian_process.kernels.DotProduct "sklearn.gaussian_process.kernels.DotProduct") )对比固定性。 在这个特定的数据集上, <cite>DotProduct</cite> 内核获得了更好的结果,因为类边界是线性的,与坐标轴重合。 然而,实际上,诸如 [`RBF`](generated/sklearn.gaussian_process.kernels.RBF.html#sklearn.gaussian_process.kernels.RBF "sklearn.gaussian_process.kernels.RBF") 这样的固定内核经常获得更好结果。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gpc_xor_0011.png](img/d1d5abd40c8364a2da2f181ede69fa56.jpg)](../auto_examples/gaussian_process/plot_gpc_xor.html) - -### 1.7.4.3\. iris 数据集上的高斯过程分类(GPC) - -该示例说明了用于虹膜数据集的二维版本上各向同性和各向异性RBF核的GPC的预测概率。 这说明了GPC对多类分类的适用性。 各向异性RBF内核通过为两个特征维度分配不同的长度尺度来获得稍高的LML(对数边缘似然)。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gpc_iris_0011.png](img/b8e446d22ed902423187ead2d67af58c.jpg)](../auto_examples/gaussian_process/plot_gpc_iris.html) - -## 1.7.5\. 高斯过程内核 - -内核(也可以叫做GPs上下文中的”协方差函数”) 是决定高斯过程(GP)先验和后验形状的关键组成部分。 它们通过定义两个数据点的“相似性”,并结合相似的 数据点应该具有相似的目标值的假设,对所学习的函数进行编码。 内核可以分为两类:固定内核,只取决于两个数据点的距离, 不依赖于它们的绝对值 ![k(x_i, x_j)= k(d(x_i, x_j))](img/7085885523458d64e2f9981f39c7b038.jpg) ,因此它们对于输入空间中的转换是不变的;非固定的内核,取 决于数据点的具体值。固定内核可以进一步细分为各向同性和各向 异性内核,其中各向同性内核不会在输入空间中旋转。想要了解 更多细节,请参看 [[RW2006]](#rw2006) 的第四章。 - -### 1.7.5.1\. 高斯过程内核 API - -[`Kernel`](generated/sklearn.gaussian_process.kernels.Kernel.html#sklearn.gaussian_process.kernels.Kernel "sklearn.gaussian_process.kernels.Kernel") 主要是用来计算数据点之间的高斯过程协方差。 为此,内核中 `__call__` 方法会被调用。该方法可以用于计算 2d阵列X中所有数据点对的“自动协方差”,或二维阵列X的数据点 与二维阵列Y中的数据点的所有组合的“互协方差”。以下论断对于 所有内核k(除了 [`WhiteKernel`](generated/sklearn.gaussian_process.kernels.WhiteKernel.html#sklearn.gaussian_process.kernels.WhiteKernel "sklearn.gaussian_process.kernels.WhiteKernel"))都是成立的:`k(X) == K(X, Y=X)`。 如果仅仅是自协方差的对角线元素被使用,那么内核的方法 `diag()` 将会被调用, 该方法比等价的调用 `__call__`: `np.diag(k(X, X)) == k.diag(X)` 具有更高的计算效率。 - -内核通过超参数向量 ![\theta](img/e2632203a52191f8ba8e393e34545100.jpg) 进行参数化。这些超参数可以 控制例如内核的长度或周期性(见下文)。通过设置 `__call__` 方法的参数 `eval_gradient=True` ,所有的内核支持计算解析 内核自协方差对于 ![\theta](img/e2632203a52191f8ba8e393e34545100.jpg) 的解析梯度。该梯度被用来在 高斯过程中(不论是回归型还是分类型的)计算LML(对数边缘似然)函数 的梯度,进而被用来通过梯度下降的方法极大化LML(对数边缘似然)函数 从而确定 ![\theta](img/e2632203a52191f8ba8e393e34545100.jpg) 的值。对于每个超参数,当对内核的实例 进行赋值时,初始值和边界值需要被指定。通过内核对象属性 `theta` , ![\theta](img/e2632203a52191f8ba8e393e34545100.jpg) 的当前值可以被获取或者设置。更重要的是, 超参的边界值可以被内核属性 `bounds` 获取。需要注意的是, 以上两种属性值(theta和bounds)都会返回内部使用值的日志转换值, 这是因为这两种属性值通常更适合基于梯度的优化。每个超参数的 规范 [`Hyperparameter`](generated/sklearn.gaussian_process.kernels.Hyperparameter.html#sklearn.gaussian_process.kernels.Hyperparameter "sklearn.gaussian_process.kernels.Hyperparameter") 以实例形式被存储在相应内核中。 请注意使用了以”x”命名的超参的内核必然具有self.x和self.x_bounds这两种属性。 - -所有内核的抽象基类为 [`Kernel`](generated/sklearn.gaussian_process.kernels.Kernel.html#sklearn.gaussian_process.kernels.Kernel "sklearn.gaussian_process.kernels.Kernel") 。Kernel 基类实现了 一个相似的接口 `Estimator` ,提供了方法 `get_params()` , `set_params()` 以及 `clone()` 。这也允许通过诸如 `Pipeline` 或者 `GridSearch` 之类的元估计来设置内核值。 需要注意的是,由于内核的嵌套结构(通过内核操作符,如下所见), 内核参数的名称可能会变得相对复杂些。通常来说,对于二元内核操作, 参数的左运算元以 `k1__` 为前缀,而右运算元以 `k2__` 为前缀。 一个额外的便利方法是 `clone_with_theta(theta)`, 该方法返回克隆版本的内核,但是设置超参数为 `theta`。 示例如下: - -```py ->>> from sklearn.gaussian_process.kernels import ConstantKernel, RBF ->>> kernel = ConstantKernel(constant_value=1.0, constant_value_bounds=(0.0, 10.0)) * RBF(length_scale=0.5, length_scale_bounds=(0.0, 10.0)) + RBF(length_scale=2.0, length_scale_bounds=(0.0, 10.0)) ->>> for hyperparameter in kernel.hyperparameters: print(hyperparameter) -Hyperparameter(name='k1__k1__constant_value', value_type='numeric', bounds=array([[ 0., 10.]]), n_elements=1, fixed=False) -Hyperparameter(name='k1__k2__length_scale', value_type='numeric', bounds=array([[ 0., 10.]]), n_elements=1, fixed=False) -Hyperparameter(name='k2__length_scale', value_type='numeric', bounds=array([[ 0., 10.]]), n_elements=1, fixed=False) ->>> params = kernel.get_params() ->>> for key in sorted(params): print("%s : %s" % (key, params[key])) -k1 : 1**2 * RBF(length_scale=0.5) -k1__k1 : 1**2 -k1__k1__constant_value : 1.0 -k1__k1__constant_value_bounds : (0.0, 10.0) -k1__k2 : RBF(length_scale=0.5) -k1__k2__length_scale : 0.5 -k1__k2__length_scale_bounds : (0.0, 10.0) -k2 : RBF(length_scale=2) -k2__length_scale : 2.0 -k2__length_scale_bounds : (0.0, 10.0) ->>> print(kernel.theta) # Note: log-transformed -[ 0\. -0.69314718 0.69314718] ->>> print(kernel.bounds) # Note: log-transformed -[[ -inf 2.30258509] - [ -inf 2.30258509] - [ -inf 2.30258509]] - -``` - -所有的高斯过程内核操作都可以通过 [`sklearn.metrics.pairwise`](classes.html#module-sklearn.metrics.pairwise "sklearn.metrics.pairwise") 来进行互操作,反之亦然。 [`Kernel`](generated/sklearn.gaussian_process.kernels.Kernel.html#sklearn.gaussian_process.kernels.Kernel "sklearn.gaussian_process.kernels.Kernel") 的子类实例可以通过 `metric` 参数传给 [`sklearn.metrics.pairwise`](classes.html#module-sklearn.metrics.pairwise "sklearn.metrics.pairwise") 中的 - -> `pairwise_kernels` 。更重要的是,超参数的梯度不是分析的,而是数字,所有这些内核只支持 - -各向同性距离。该参数 `gamma` 被认为是一个超参数,可以进行优化。其他内核参数在初始化时直接设置, 并保持固定。 - -### 1.7.5.2\. 基础内核 - -[`ConstantKernel`](generated/sklearn.gaussian_process.kernels.ConstantKernel.html#sklearn.gaussian_process.kernels.ConstantKernel "sklearn.gaussian_process.kernels.ConstantKernel") 内核类可以被用作 [`Product`](generated/sklearn.gaussian_process.kernels.Product.html#sklearn.gaussian_process.kernels.Product "sklearn.gaussian_process.kernels.Product") 内核类的一部分, 在它可以对其他因子(内核)进行度量的场景下或者作为更改高斯过程均值的 - -> [`Sum`](generated/sklearn.gaussian_process.kernels.Sum.html#sklearn.gaussian_process.kernels.Sum "sklearn.gaussian_process.kernels.Sum") 类的一部分。这取决于参数 ![constant\_value](img/e83376afb9facc5992c857d659c7d812.jpg) 的设置。该方法定义为: - -![k(x_i, x_j) = constant\_value \;\forall\; x_1, x_2](img/b10afb1bc4c68539a74de379254c7655.jpg) - -[`WhiteKernel`](generated/sklearn.gaussian_process.kernels.WhiteKernel.html#sklearn.gaussian_process.kernels.WhiteKernel "sklearn.gaussian_process.kernels.WhiteKernel") 内核类的主要应用实例在于当解释信号的噪声部分时 可以作为内核集合的一部分。通过调节参数 ![noise\_level](img/f3432e537038cc7e319db4ea1ff6a8e3.jpg), 该类可以用来估计噪声级别。具体如下所示: - -![k(x_i, x_j) = noise\_level \text{ if } x_i == x_j \text{ else } 0](img/e4e213d17043826a96dd917dcbdf5d85.jpg) - -### 1.7.5.3\. 内核操作 - -内核操作是把1~2个基内核与新内核进行合并。内核类 [`Sum`](generated/sklearn.gaussian_process.kernels.Sum.html#sklearn.gaussian_process.kernels.Sum "sklearn.gaussian_process.kernels.Sum") 通过 ![k_{sum}(X, Y) = k1(X, Y) + k2(X, Y)](img/8dd0e1ef4fdc9bbfcc8b0ce3fa8a4321.jpg) 相加来合并 ![k1](img/36846302fd24ac609e0cfef5fe6f8678.jpg) 和 ![k2](img/8bce1ab1dca39a6b7fcb97dcf959a1f7.jpg) 内核。内核类 [`Product`](generated/sklearn.gaussian_process.kernels.Product.html#sklearn.gaussian_process.kernels.Product "sklearn.gaussian_process.kernels.Product") 通过 ![k_{product}(X, Y) = k1(X, Y) * k2(X, Y)](img/0679b7c6ff086b5e9ad73b1cb08d9205.jpg) 把 ![k1](img/36846302fd24ac609e0cfef5fe6f8678.jpg) 和 ![k2](img/8bce1ab1dca39a6b7fcb97dcf959a1f7.jpg) 内核进行合并。内核类 [`Exponentiation`](generated/sklearn.gaussian_process.kernels.Exponentiation.html#sklearn.gaussian_process.kernels.Exponentiation "sklearn.gaussian_process.kernels.Exponentiation") 通过 ![k_{exp}(X, Y) = k(X, Y)^\text{exponent}](img/5c3cdb1b3bec4126d850a52d7fe8dc18.jpg) 把基内核与 常量参数 ![exponent](img/5a8d4539001fa07eb00b24f2e74adeca.jpg) 进行合并。 - -### 1.7.5.4\. 径向基函数内核 - -[`RBF`](generated/sklearn.gaussian_process.kernels.RBF.html#sklearn.gaussian_process.kernels.RBF "sklearn.gaussian_process.kernels.RBF") 内核是一个固定内核,它也被称为“平方指数”内核。它通过定长的参数 ![l>0](img/8494ed588e1c79e569f4d2add722ecf5.jpg) 来对内核进行参数化。该参数既可以是标量(内核的各向同性变体)或者与输入 ![x](img/5c82dbae35dc43d2f556f9f284d9d184.jpg) (内核的各向异性变体) 具有相同数量的维度的向量。该内核可以被定义为: - -![k(x_i, x_j) = \text{exp}\left(-\frac{1}{2} d(x_i / l, x_j / l)^2\right)](img/afee107e82d448558078835ad82086e5.jpg) - -这个内核是无限可微的,这意味着这个内核作为协方差函数的 GP 具有所有阶数的均方差导数, 因此非常平滑。由RBF内核产生的GP的先验和后验示意图如下所示: - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gpr_prior_posterior_0001.png](img/e2650a6b3222cf44bd311f7205909f06.jpg)](../auto_examples/gaussian_process/plot_gpr_prior_posterior.html) - -### 1.7.5.5\. Matérn 内核 - -[`Matern`](generated/sklearn.gaussian_process.kernels.Matern.html#sklearn.gaussian_process.kernels.Matern "sklearn.gaussian_process.kernels.Matern") 内核是一个固定内核,是 [`RBF`](generated/sklearn.gaussian_process.kernels.RBF.html#sklearn.gaussian_process.kernels.RBF "sklearn.gaussian_process.kernels.RBF") 内核的泛化。它有一个额外的参数 ![\nu](img/f996477bc9806499e6b6a1ea4d9ae8eb.jpg), 该参数控制结果函数的平滑程度。它由定长参数 ![l>0](img/8494ed588e1c79e569f4d2add722ecf5.jpg) 来实现参数化。该参数既可以是标量 (内核的各向同性变体)或者与输入 ![x](img/5c82dbae35dc43d2f556f9f284d9d184.jpg) (内核的各向异性变体)具有相同数量的维度的向量。 该内核可以被定义为: - -![k(x_i, x_j) = \sigma^2\frac{1}{\Gamma(\nu)2^{\nu-1}}\Bigg(\gamma\sqrt{2\nu} d(x_i / l, x_j / l)\Bigg)^\nu K_\nu\Bigg(\gamma\sqrt{2\nu} d(x_i / l, x_j / l)\Bigg),](img/eb89c7ce95ca7e68685f180915bf0511.jpg) - -因为 ![\nu\rightarrow\infty](img/3001d4b4ed72087e1a6010f43c053cc6.jpg) ,Matérn 内核收敛到 RBF 内核。 当 ![\nu = 1/2](img/46cc434e4ffc05f8d38712603b34bf7f.jpg) 时,Matérn 内核变得与绝对指数内核相同时,即 - -![k(x_i, x_j) = \sigma^2 \exp \Bigg(-\gamma d(x_i / l, x_j / l) \Bigg) \quad \quad \nu= \tfrac{1}{2}](img/0bb5a8e1b524523dcfb5104d9f20ba2b.jpg) - -特别的,当 ![\nu = 3/2](img/c001247a5528df69cdcc243c70f61d01.jpg) 时: - -![k(x_i, x_j) = \sigma^2 \Bigg(1 + \gamma \sqrt{3} d(x_i / l, x_j / l)\Bigg) \exp \Bigg(-\gamma \sqrt{3}d(x_i / l, x_j / l) \Bigg) \quad \quad \nu= \tfrac{3}{2}](img/7cda18e6ccd378c8ef9714e3035506c9.jpg) - -和 ![\nu = 5/2](img/f4ad81b759af5604d12ae25c4c541224.jpg) : - -![k(x_i, x_j) = \sigma^2 \Bigg(1 + \gamma \sqrt{5}d(x_i / l, x_j / l) +\frac{5}{3} \gamma^2d(x_i / l, x_j / l)^2 \Bigg) \exp \Bigg(-\gamma \sqrt{5}d(x_i / l, x_j / l) \Bigg) \quad \quad \nu= \tfrac{5}{2}](img/ebdfa216db7c73e9067f547e1e65ca02.jpg) - -是学习函数的常用选择,并且不是无限可微的(由 RBF 内核假定) 但是至少具有一阶( ![\nu = 3/2](img/c001247a5528df69cdcc243c70f61d01.jpg) )或者二阶( ![\nu = 5/2](img/f4ad81b759af5604d12ae25c4c541224.jpg) )可微性。 - -通过 ![\nu](img/f996477bc9806499e6b6a1ea4d9ae8eb.jpg) 灵活控制学习函数的平滑性可以更加适应真正的底层函数关联属性。 通过 Matérn 内核产生的高斯过程的先验和后验如下图所示: - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gpr_prior_posterior_0041.png](img/88c766439d728ffb597e180a42f41d00.jpg)](../auto_examples/gaussian_process/plot_gpr_prior_posterior.html) - -想要更进一步地了解不同类型的Matérn内核请参阅 [[RW2006]](#rw2006) , pp84。 - -### 1.7.5.6\. 有理二次内核 - -[`RationalQuadratic`](generated/sklearn.gaussian_process.kernels.RationalQuadratic.html#sklearn.gaussian_process.kernels.RationalQuadratic "sklearn.gaussian_process.kernels.RationalQuadratic") 内核可以被看做不同特征尺度下的 [`RBF`](generated/sklearn.gaussian_process.kernels.RBF.html#sklearn.gaussian_process.kernels.RBF "sklearn.gaussian_process.kernels.RBF") 内核的规模混合(一个无穷和) 它通过长度尺度参数 ![l>0](img/8494ed588e1c79e569f4d2add722ecf5.jpg) 和比例混合参数 ![\alpha>0](img/03269860556d3525e4ae266f30c6982d.jpg) 进行参数化。 此时仅支持 ![l](img/eb604628a01ce7d6db62d61eba6e2e2f.jpg) 标量的各向同性变量。内核公式如下: - -![k(x_i, x_j) = \left(1 + \frac{d(x_i, x_j)^2}{2\alpha l^2}\right)^{-\alpha}](img/edbf7affc28abad1a964eeeeac3e711c.jpg) - -从 RBF 内核中产生的高斯过程的先验和后验如下图所示: - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gpr_prior_posterior_0011.png](img/0345993f9c673bd3a928dc6cb07bcae1.jpg)](../auto_examples/gaussian_process/plot_gpr_prior_posterior.html) - -### 1.7.5.7\. 正弦平方内核 - -[`ExpSineSquared`](generated/sklearn.gaussian_process.kernels.ExpSineSquared.html#sklearn.gaussian_process.kernels.ExpSineSquared "sklearn.gaussian_process.kernels.ExpSineSquared") 内核可以对周期性函数进行建模。它由定长参数 ![l>0](img/8494ed588e1c79e569f4d2add722ecf5.jpg) 以及周期参数 ![p>0](img/6f98755e60bfb560a671770b8e51cb28.jpg) 来实现参数化。此时仅支持 ![l](img/eb604628a01ce7d6db62d61eba6e2e2f.jpg) 标量的各向同性变量。内核公式如下: - -![k(x_i, x_j) = \text{exp}\left(-2 \left(\text{sin}(\pi / p * d(x_i, x_j)) / l\right)^2\right)](img/b8d08f24f6c909a25190cb38127ec809.jpg) - -从ExpSineSquared内核中产生的高斯过程的先验和后验如下图所示: - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gpr_prior_posterior_0021.png](img/5679f1fec5dfb7ab05db5e5aa9fa11a2.jpg)](../auto_examples/gaussian_process/plot_gpr_prior_posterior.html) - -### 1.7.5.8\. 点乘内核 - -[`DotProduct`](generated/sklearn.gaussian_process.kernels.DotProduct.html#sklearn.gaussian_process.kernels.DotProduct "sklearn.gaussian_process.kernels.DotProduct") 内核是非固定内核,它可以通过在线性回归的 ![x_d (d = 1, . . . , D)](img/3d43f503466701e58ca2d516de2db505.jpg) 的相关系数上加上 服从于 ![N(0, 1)](img/5cf078f7cdbb5755436e396cad3c37a0.jpg) 的先验以及在线性回归的偏置上加上服从于 ![N(0, \sigma_0^2)](img/df49142f65f7afa86c2e18f598f00729.jpg) 的先验来获得。 该 [`DotProduct`](generated/sklearn.gaussian_process.kernels.DotProduct.html#sklearn.gaussian_process.kernels.DotProduct "sklearn.gaussian_process.kernels.DotProduct") 内核对于原点坐标的旋转是不变的,因此不是转换。它通过设置参数 ![\sigma_0^2](img/d6e5649338670ffec641327eeaa0521a.jpg) 来进行参数化。 当 ![\sigma_0^2 = 0](img/45e0e70e4566592b549e6835d6cba2a8.jpg) 时,该内核叫做同质线性内核;否则该内核是非同质的。内核公式如下: - -![k(x_i, x_j) = \sigma_0 ^ 2 + x_i \cdot x_j](img/88d9981d54cd398165b20856ed5043e1.jpg) - -[`DotProduct`](generated/sklearn.gaussian_process.kernels.DotProduct.html#sklearn.gaussian_process.kernels.DotProduct "sklearn.gaussian_process.kernels.DotProduct") 内核通常和指数分布相结合。实例如下图所示: - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_gpr_prior_posterior_0031.png](img/ac9afe17947eb296e1701877b220779d.jpg)](../auto_examples/gaussian_process/plot_gpr_prior_posterior.html) - -### 1.7.5.9\. 参考文献 - -| [RW2006] | _([1](#id3), [2](#id10), [3](#id14))_ Carl Eduard Rasmussen and Christopher K.I. Williams, “Gaussian Processes for Machine Learning”, MIT Press 2006, Link to an official complete PDF version of the book [here](http://www.gaussianprocess.org/gpml/chapters/RW.pdf) . | - -## 1.7.6\. 传统高斯过程 - -在本节中,描述了版本 0.16.1 及之前 scikit 中高斯过程的实现, 请注意,此实现已被弃用,将在版本 0.18 中删除。 - -### 1.7.6.1\. 回归实例介绍 - -假定我们要替代这个函数:![g(x) = x \sin(x)](img/ad9ce0e67dc83e5380738d3193819195.jpg) 。 为了做到这一点,该功能被评估到一个实验设计上。然后, 我们定义一个回归和相关模型可能被其他参数指定的高斯模型, 并且要求模型能够拟合数据。拟合过程由于受到实例化过程中 参数数目的影响可能依赖于参数的最大似然估计或者直接使用给定的参数。 - -```py ->>> import numpy as np ->>> from sklearn import gaussian_process ->>> def f(x): -... return x * np.sin(x) ->>> X = np.atleast_2d([1., 3., 5., 6., 7., 8.]).T ->>> y = f(X).ravel() ->>> x = np.atleast_2d(np.linspace(0, 10, 1000)).T ->>> gp = gaussian_process.GaussianProcess(theta0=1e-2, thetaL=1e-4, thetaU=1e-1) ->>> gp.fit(X, y) -GaussianProcess(beta0=None, corr=, - normalize=True, nugget=array(2.22...-15), - optimizer='fmin_cobyla', random_start=1, random_state=... - regr=, storage_mode='full', - theta0=array([[ 0.01]]), thetaL=array([[ 0.0001]]), - thetaU=array([[ 0.1]]), verbose=False) ->>> y_pred, sigma2_pred = gp.predict(x, eval_MSE=True) - -``` - -### 1.7.6.2\. 噪声数据拟合 - -当含噪声的数据被用来做拟合时,对于每个数据点,高斯过程模型可以指定噪声的方差。 [`GaussianProcess`](generated/sklearn.gaussian_process.GaussianProcess.html#sklearn.gaussian_process.GaussianProcess "sklearn.gaussian_process.GaussianProcess") 包含一个被添加到训练数据得到的自相关矩阵对角线中的 参数 `nugget` 。通常来说这是一种类型的吉洪诺夫正则化方法。 在平方指数相关函数的特殊情况下,该归一化等效于指定输入中的小数方差。也就是: - -![\mathrm{nugget}_i = \left[\frac{\sigma_i}{y_i}\right]^2](img/f92e6fadff74949dcf9c70e40d1a7619.jpg) - -使用 `nugget` 以及 `corr` 正确设置,高斯过程可以更好地用于从噪声数据恢复给定的向量函数。 - -### 1.7.6.3\. 数学形式 - -#### 1.7.6.3.1\. 初始假设 - -假设需要对电脑实验的结果进行建模,例如使用一个数学函数: - - -![g: & \mathbb{R}^{n_{\rm features}} \rightarrow \mathbb{R} \\ - & X \mapsto y = g(X)](img/cb598ee06bc5060d2dabe4acba00faa7.jpg) - - -同时假设这个函数是 _一个_ 有关于 _一个_ 高斯过程 ![G](img/fb9cbfd2ff15ac51a36902f0a6037c28.jpg) 的条件采用方法, 那么从这个假设出发,GPML 通常可以表示为如下形式: - -![G(X) = f(X)^T \beta + Z(X)](img/2639e09c454322633772269753a50710.jpg) - -其中, ![f(X)^T \beta](img/195ff50d437f1bb16125cdb1c311f3ab.jpg) 是一个线性回归模型,并且 ![Z(X)](img/14120d5c5d7ad74513d356eed762622b.jpg) 是一个 以零为均值,协方差函数完全平稳的高斯过程: - -![C(X, X') = \sigma^2 R(|X - X'|)](img/6447f40a171271e014eed37b28b4a711.jpg) - -![\sigma^2](img/d69db8c22e9315a6fb454b276d5ce534.jpg) 表示其方差, ![R](img/0fccbdc535b0a4d8003725e8ad606561.jpg) 表示仅仅基于样本之间的绝对相关距离的相关函数,可能是特征(这是平稳性假设) - -从这些基本的公式中可以注意到GPML仅仅是基本的线性二乘回归问题的扩展。 - -![g(X) \approx f(X)^T \beta](img/7acaacd6f5e4219eb0e02cc0ce0aff63.jpg) - -除此之外,我们另外假定由相关函数指定的样本之间的一些空间相干性(相关性)。 事实上,普通最小二乘法假设当 ![X = X'](img/87c11f44388ae80ae9244e8d56a2dc86.jpg) 时,相关性模型 ![R(|X - X'|)](img/7057da795219773c01c26cde1adf90e5.jpg) 是 1;否则为 0 ,相关性模型为 _狄拉克_ 相关模型–有时在克里金文献中被称为 _熔核_ 相关模型 - -#### 1.7.6.3.2\. 最佳线性无偏预测(BLUP) - -我们现在推导出基于观测结果的 _最佳线性无偏预测_ ![g](img/6211fb320c2cdb794a80e9e0b800a6a1.jpg) - - -![\hat{G}(X) = G(X | y_1 = g(X_1), ..., - y_{n_{\rm samples}} = g(X_{n_{\rm samples}}))](img/47d90c837620a14d53233bae4fe8fe57.jpg) - - -它可以由 _给定的属性_ 加以派生: - -* 它是线性的(观测结果的线性组合) - -![\hat{G}(X) \equiv a(X)^T y](img/e3eebe26bb077cc3986d3beba9de4ac5.jpg) - -* 它是无偏的 - -![\mathbb{E}[G(X) - \hat{G}(X)] = 0](img/b0471e4ce10b5565385c611ba381fa0d.jpg) - -* 它是最好的(在均方误差的意义上) - - -![\hat{G}(X)^* = \arg \min\limits_{\hat{G}(X)} \; - \mathbb{E}[(G(X) - \hat{G}(X))^2]](img/433674c5864f3cec96b82f9e63b80fb7.jpg) - - -因此最优的带权向量 ![a(X)](img/e3ff277d54a34043adefa98a9e1a69d1.jpg) 是以下等式约束优化问题的解 - - -![a(X)^* = \arg \min\limits_{a(X)} & \; \mathbb{E}[(G(X) - a(X)^T y)^2] \\ - {\rm s. t.} & \; \mathbb{E}[G(X) - a(X)^T y] = 0](img/395ca6ce9617a4fc0695db973496d29b.jpg) - - -以拉格朗日形式重写这个受约束的优化问题,并进一步寻求要满足的一阶最优条件, 从而得到一个以闭合形式表达式为终止形式的预测器 - 参见参考文献中完整的证明。 - -最后,BLUP 为高斯随机变量,其中均值为: - -![\mu_{\hat{Y}}(X) = f(X)^T\,\hat{\beta} + r(X)^T\,\gamma](img/500efeff217bde3e862144e9bc90b049.jpg) - -方差为: - - -![\sigma_{\hat{Y}}^2(X) = \sigma_{Y}^2\, -( 1 -- r(X)^T\,R^{-1}\,r(X) -+ u(X)^T\,(F^T\,R^{-1}\,F)^{-1}\,u(X) -)](img/6fcf3a401454fd3c65ac740912e12467.jpg) - - -其中: - -* 根据自相关函数以及内置参数 ![\theta](img/e2632203a52191f8ba8e393e34545100.jpg) 所定义的相关性矩阵为: - -![R_{i\,j} = R(|X_i - X_j|, \theta), \; i,\,j = 1, ..., m](img/fa1895bee67b8c643cbaab1e8da8620f.jpg) - -* 在进行预测的点与 DOE 中的点之间的互相关的向量: - -![r_i = R(|X - X_i|, \theta), \; i = 1, ..., m](img/9b7a1b832e3f1e4ea340038115e6b00d.jpg) - -* 回归矩阵 (例如范德蒙矩阵 如果 ![f](img/a8f0b97723e99a7ddae947c83f43ff45.jpg) 以多项式为基): - -![F_{i\,j} = f_i(X_j), \; i = 1, ..., p, \, j = 1, ..., m](img/b47a023e9edbe1976993ce76c7dbc286.jpg) - -* 广义最小二乘回归权重: - -![\hat{\beta} =(F^T\,R^{-1}\,F)^{-1}\,F^T\,R^{-1}\,Y](img/08a5f2b42e497598497f5265194ce4a3.jpg) - -* 和向量: - - -![\gamma & = R^{-1}(Y - F\,\hat{\beta}) \\ -u(X) & = F^T\,R^{-1}\,r(X) - f(X)](img/efaeec5dadbe79caddb0f92abab55f5b.jpg) - - -需要重点注意的是,高斯过程预测器的概率输出是完全可分析的并且依赖于基本的线性代数操作。 更准确地说,预测结果的均值是两个简单线性组合(点积)的和,方差需要两个矩阵反转操作,但关联 矩阵只能使用 Cholesky 分解算法分解一次。 - -#### 1.7.6.3.3\. 经验最佳线性无偏估计(EBLUP) - -到现在为止,自相关和回归模型都已假定给出。然而,在实践中,它们从来都是未知的 因此需要为这些模型 [关联模型](#correlation-models) 做出(积极的)经验选择。 - -根据这些选择,可以来估计 BLUP 中涉及到的遗留未知参数。为此,需要使用一系列 被提供的观测值同时结合一系列推断技术。目前使用的方法是基于 DACE’s Matlab 工 具包的*最大似然估计* - 参见 DACE 手册中的完全推导公式。最大似然估计的问题在 自相关参数中是一个全局优化的问题。这种全局优化通过 scipy.optimize 中的 fmin_cobyla 优化函数加以实现。然而,在各向异性的情况下,我们提供了 Welch 的分量优化算法的实现 - 参见参考。 - -### 1.7.6.4\. 关联模型 - -由于几乎相等的假设,常用的关联模型和一些有名的SVM内核相匹配。它们必须要满足 Mercer 条件 并且需要保持固定形式。然而,请注意,相关模型的选择应该与观察到来的原始实验的已知特性一致。 例如: - -* 如果原始实验被认为是无限可微(平滑),则应使用 _平方指数关联模型_ 。 -* 如果不是无限可微的, 那么需要使用 _指数关联模型_. -* 还要注意,存在一个将衍生度作为输入的相关模型:这是 Matern 相关模型,但这里并没有实现( TODO ). - -关于选择合适的关联模型更详细的讨论,请参阅 Rasmussen&Williams 的文献。 - -### 1.7.6.5\. 回归模型 - -常用的线性回归模型包括零阶(常数)、一阶和二阶多项式。 但是可以以 Python 函数的形式指定它自己的特性,它将特征X 作为输入,并返回一个包含函数集值的向量。唯一加以限制地是, 函数的个数不能超过有效观测值的数目,因此基本的回归问题不被*确定*。 - -### 1.7.6.6\. 实现细节 - -模型通过 DACE 的 Matlab 工具包来实现。 - -参考文献: - -* [DACE, A Matlab Kriging Toolbox](http://imedea.uib-csic.es/master/cambioglobal/Modulo_V_cod101615/Lab/lab_maps/krigging/DACE-krigingsoft/dace/dace.pdf) S Lophaven, HB Nielsen, J Sondergaard 2002, -* W.J. Welch, R.J. Buck, J. Sacks, H.P. Wynn, T.J. Mitchell, and M.D. Morris (1992). Screening, predicting, and computer experiments. Technometrics, 34(1) 15–25. diff --git a/docs/0.19.x/80.md b/docs/0.19.x/80.md deleted file mode 100755 index 715f704bd63bac57476996b25ccfa76a1de111bb..0000000000000000000000000000000000000000 --- a/docs/0.19.x/80.md +++ /dev/null @@ -1,177 +0,0 @@ -# 常见问题 - -校验者: -        [@Mysry](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@STAN,废柴0.1](https://github.com/apachecn/scikit-learn-doc-zh) - -在这里,我们试着给出一些经常出现在邮件列表上的问题的答案。 - -## 项目名称是什么(很多人弄错)? - -scikit-learn, 不是scikik、SciKit、sci-kit learn,也不是我们曾使用的scikits.learn和scikits-learn。 - -## 如何称呼scikit-learn? - -sy-kit learn。sci代表着科学! - -## 选择 scikit的理由 ? - -scikit拥有很多围绕Scipy构建的科学工具箱。你可以在 <cite><https://scikits.appspot.com/scikits></cite> 查找工具列表。 <cite>scikit-image <http://scikit-image.org/></cite> 和 scikit-learn_一样受欢迎 。 - -## 如何才能为 scikit-learn 贡献自己的力量? - -在添加一个通常是重要冗长的新算法前, 推荐你观看 [known issues](developers/contributing.html#new-contributors) 。 关于 scikit-learn 贡献,请不要直接和 scikit-learn 的贡献者联系。 - -## 获得scikit-learn用法的最佳方法? - -**对于一般的机器学习问题**, 请使用 [交叉验证](http://stats.stackexchange.com) 和 `[machine-learning]` 。 - -**对于scikit-learn使用的问题**, 请点击 [Stack Overflow](http://stackoverflow.com/questions/tagged/scikit-learn) 中带有 `[scikit-learn]` 和 `[python]` 标签的部分。 你也可以使用 [联系列表](https://mail.python.org/mailman/listinfo/scikit-learn) . - -请确保包您的代码段较小(最好少于10行),并且可以突出显示玩具数据集上的问题 (例如从 `sklearn.datasets` 或者是用固定随机数种子 `numpy.random` 函数生成). 请删除任何不需要重现您的问题的代码行。该问题因该可以在安装了scikit-learn的python命令行中简单地通过复制粘贴您的代码重现. 并且不要忘了import语句. - -编写能够重现的代码的更多指南可以在以下网址找到: [http://stackoverflow.com/help/mcve](http://stackoverflow.com/help/mcve) - -你的代码依旧引起了你即使Google过也不明白的异常,请确保你在运行复制的脚本时包含完整的回溯。 - -关于错误报告或者功能请求,请参阅 [issue tracker on Github](https://github.com/scikit-learn/scikit-learn/issues) 。 - -你还可以在 [scikit-learn Gitter channel](https://gitter.im/scikit-learn/scikit-learn) 找到一些用户与开发人员。 - -**请不要直接给任何作者发邮件请求帮助,报告bug或其他与scikit-learn相关的问题。** - -## 如何创建一个 bunch 对象? - -不要创建 bunch 对象,他们不是 scikit-learn API 的一部分. Bunch 对象只是打包一些 numpy 数组的方式. numpy 数组只是为scikit-learn 用户的模型提供数据的工具。 - -例如,训练一个分类器, 你只需要一个2D的输入变量数组 `X` 和一个1D目标变量数组 `y` 。 `X` 数组将特征作为列,样本保存为行。 `y` 数组包含用于对每个样本的类成员资格编码的整型数值 `X`. - -## 如何将我自己的数据集加载到 scikit-learn 可用的格式? - -一般来说,scikit-learn 可以在诸如 numpy 数组或者 scipy 稀疏矩阵这样的数字数据上运行。其他格式的如 pandas Dataframe 的数组也是可以的。 - -有关将数据文件加载到可用数据结构中的更多信息,参阅 [加载外部数据集](datasets/index.html#external-datasets) 。 - -## 新算法的纳入标准是什么 ? - -我们仅考虑添加已经完善的算法。通常的标准是发布3年以上,被引用超过 200 次,而且被广泛使用。对广泛使用的方法提供了明确改进的技术(如增强型数据结构或更有效的近似技术)也将被考虑纳入。 - -在满足上述标准的算法或技术中,只有这些能够 `适合` 现在 scikit-learn API 的, `预测/转换` 接口通常具有 numpy 阵列或稀疏矩阵的输入/输出。 - -贡献者应该支持通过研究论文或其他类似软件包中的实现来增加提出算法技术的重要性,通过常见的用例或应用程序证明其有用性,并通过基准和/或图证实性能改进(如果有的话)。预计所提出的算法应该在某些领域优于已经在 scikit-learn 中实现的方法. - -还要注意,您的实现不需要在 scikit-learn 中与 scikit-learn 工具一起使用。您可以用 scikit-learn 兼容的方式实现您最喜欢的算法,将其上传到 github 便于我们获知。我们将在 [Related Projects](related_projects.html#related-projects) 列出。 - -## 为什么你对 scikit-learn 中的算法如此讲究? - -代码是需要维护的, 我们需要平衡我们的团队规模和代码量(并且:复杂性与特征的数量非线性相关). 该软件包依赖于核心开发人员利用他们的空闲时间修复错误,维护代码和审查贡献。 添加的任何算法都需要开发人员的密切,但此时原作者可能早已失去兴趣。 也可以在 [该链接](https://sourceforge.net/p/scikit-learn/mailman/scikit-learn-general/thread/CAAkaFLWcBG+gtsFQzpTLfZoCsHMDv9UG5WaqT0LwUApte0TVzg@mail.gmail.com/#msg33104380) 查看。 - -## 为什么从 scikit-learn 中删除 HMMS ? - -[未来 scikit-learn 中会添加图形模型或序列预测吗?](#adding-graphical-models) 。 - -## 未来 scikit-learn 中会添加图形模型或序列预测吗? - -目前可能性不大 scikit-learn 尝试为机器学习中的基本任务提供统一的 API,使用管道和元算法(如网格搜索)将所有内容都集中在一起。 结构化学习所需的概念,API ,算法和专业知识与 scikit learn 所提供的不同。如果我们开始进行随意的结构化学习,那么我们需要重新设计整个软件包,这个项目可能在自身的负担下崩溃。 - -这里有两个类似于 scikit-learn 的做结构化预测的 API: - -* [pystruct](http://pystruct.github.io/) 处理一般结构化学习 - -(专注于具有近似推理的任意图形结构上的 SSVMs ; 将样本的概念定义为图形结构的一个实例) - -* [seqlearn](http://larsmans.github.io/seqlearn/) 仅处理序列(专注于精确推断;主要是为了完整性附带了 HMMs ;将特征向量作为样本,并对特征向量之间的依赖使用偏移编码) - -## 你会添加 GPU 支持吗? - -目前不会,主要在于 GPU 支持将引入许多软件依赖关系并引入平台特定的问题。scikit-learn 旨在轻松安装在各种平台上。除了神经网络,GPU 在当今的机器学习中不起重要作用,通常我们可以通过仔细选择算法来获得更大的速度增益。 - -## 你支持 PyPy 吗? - -如果您不知道 [PyPy](http://pypy.org/) 它是个新的,快速,及时的编译 Python 实现,但是我们不支持。若 PyPy 中的 [NumPy support](http://buildbot.pypy.org/numpy-status/latest.html) 已经完善或接近完善,并且 SciPy 也被移植时,我才会考虑移植。 scikit-learn 使用了太多的 NumPy 所以不能完成部分实现。 - -## 如何处理字符串数据(或树,图…)? - -scikit-learn 估计器假设您将为他们提供实值特征向量。这个假设在几乎所有的库都是硬编码的。但是,您可以通过多种方式将非数字输入馈送到估计器。 - -如果您有文本文档,可以使用术语频率特征; 参阅内置 _文本向量化器_ 的 [文本特征提取](modules/feature_extraction.html#text-feature-extraction) 。 对于从任何类型的数据更一般的特征提取,见 [从字典类型加载特征](modules/feature_extraction.html#dict-feature-extraction) 和 [特征哈希(相当于一种降维技巧)](modules/feature_extraction.html#feature-hashing) 。 - -另一个常见的情况是当您对这些数据有非数字数据和自定义距离(或相似度)指标时。示例包括具有编辑距离的字符串(也称为 Levenshtein 距离;例如 DNA 或 RNA 序列)。这些可以编码为数字,但这样做通常很麻烦也容易出错。使用任意数据的距离度量可以通过以下两种方式完成。 - -首先,许多估计器采用预计算的距离/相似矩阵,因此如果数据集不太大,可以计算所有输入对的距离。如果数据集很大,您可以使用仅具有一个“特征”的特征向量,该特征是单独数据结构的索引,并提供在该数据结构中查找实际数据的自定义度量函数。 例如,使用 DBSCAN 与 Levenshtein 距离: - ->>> - -```py ->>> from leven import levenshtein ->>> import numpy as np ->>> from sklearn.cluster import dbscan ->>> data = ["ACCTCCTAGAAG", "ACCTACTAGAAGTT", "GAATATTAGGCCGA"] ->>> def lev_metric(x, y): -... i, j = int(x[0]), int(y[0]) # extract indices -... return levenshtein(data[i], data[j]) -... ->>> X = np.arange(len(data)).reshape(-1, 1) ->>> X -array([[0], - [1], - [2]]) ->>> dbscan(X, metric=lev_metric, eps=5, min_samples=2) -([0, 1], array([ 0, 0, -1])) - -``` - -(这里使用了第三方编辑距离包 `leven`) - -类似的技巧也可以在树形内核、图形内核等使用。 - -## 为什么我有时会在 OSX 或 Linux 下遇到 n_jobs > 1 崩溃/冻结? - -一些例如 `GridSearchCV` 和 `cross_val_score` 的scikit-learn工具,它们可以依靠 Python 的内置 <cite>multiprocessing</cite> 模块,通过 `n_jobs > 1` 作为参数,将执行并行化到多个 Python 进程。 - -问题是 Python 由于性能原因 `multiprocessing` 会执行 `fork` 系统调用,而不是 `exec` 系统调用。许多库如 OSX 下的(某些版本的)Accelerate / vecLib, (某些版本的) MKL, GCC 的 OpenMP 运行时,nvidia 的 Cuda (可能还有一些其他的),都是自行管理自己的内部线程池。在调用 <cite>fork</cite> 时,子进程中的线程池状态已损坏:线程池认为它有许多线程,而只有主线程状态已被 fork。有可能更改库,使它们在发生 fork 时检测,并在该情况下重新初始化线程池:我们对 OpenBLAS 执行了此操作(从 0.2.10 开始在 master 中合并),并且我们向 GCC 的 OpenMP 运行时提供了一个 [补丁](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60035) (尚未审查)。 - -但最终,真正的罪魁祸首是 Python 的 `multiprocessing` ,执行 `fork` 而不是执行 `exec` 来减少开始的和新使用的并行计算的 Python 进程的开销。但这这违反了 POSIX 标准,因而被一些软件编辑器(如苹果)拒绝认为在 Accelerate / vecLib 中缺乏 fork 安全是一个 bug。 - -在 Python 3.4 或以上版本中,现在可以配置 `multiprocessing` 决定使用 ‘forkserver’ 或者 ‘spawn’ 启动方法(而不是默认的 ‘fork’ )来管理进程池。若要使用 scikit-learn 来解决此问题,你可以将 JOBLIB_START_METHOD 的环境变量设为 ‘forkserver’ 。但是用户应该意识到使用 ‘forkserver’ 方法会阻止 joblib.Parallel 调用在 shell 会话中交互定义的函数。 - -如果你直接使用 `multiprocessing` 的自定义代码而非通过调用 joblib 使用,你可以为你的程序全局启用 ‘forkserver’ 模式: 在主脚本中插入以下说明: - -```py -import multiprocessing - -# other imports, custom code, load data, define model... - -if __name__ == '__main__': - multiprocessing.set_start_method('forkserver') - - # call scikit-learn utils with n_jobs > 1 here - -``` - -你可以在 [multiprocessing文档](https://docs.python.org/3/library/multiprocessing.html#contexts-and-start-methods) 上找到更多新启动方法的默认值。 - -## 为什么不支持深度学习或强化学习/scikit-learn 中将会支持深度学习或强化学习吗? - -深度学习和强化学习需要丰富的词汇来定义一个架构,深度学习还需要 GPU 来进行有效的计算。然而,这些都不符合 scikit-learn 的设计限制。因此,深度学习和强化学习目前已经超出了 scikit-learn 寻求实现的范围。 - -你可以找到更多关于gpu支持的信息 [`Will you add GPU support?`_](#id16). - -## 为什么我的pull请求没有得到注意? - -scikit-learn 审查过程需要大量的时间,因此贡献者不应该因为 `pull` 请求缺乏回应或没有被审查而沮丧。我们非常关心第一次正确的使用,因为维护和以后的更改成本高昂。我们不会发布 “实验性” 代码, 所以我们所有的贡献将会立即得到大量使用,并且在最初的时候就应该是最高的质量。 - -除此之外,scikit-learn 在审查能力方面是有限的; 许多审稿人和核心开发人员都是利用自己的时间在 scikit-learn 工作。如果您的 `pull` 请求进展缓慢,可能是因为审阅者很忙,希望您能理解,并希望您不要因为这个原因而关闭您的 `pull` 请求或停止您的工作。 - -## 如何为整个执行设置一个统一的 `random_state` ? - -一般对于测试和复制,更为重要的是让整个执行由具有随机组件的算法中使用的伪随机数生成器的单个种子进行控制。Scikit-learn 不使用自己的全局随机状态;每当 RandomState 实例或整数随机种子不作为参数提供时,它依赖于类似的用法 `numpy.random.seed` numpy 全局随机数种子。例如,要将执行的 numpy 全局随机状态设置为 42,可以在相应的脚本中执行以下操作: - -```py -import numpy as np -np.random.seed(42) - -``` - -然而,全局随机状态在执行期间容易被其他代码修改。因此,确保可复制性的唯一方法是在每个地方传递 `RandomState` 实例,并确保估算器和交叉验证分隔符都具有其 `random_state` 参数集。 \ No newline at end of file diff --git a/docs/0.19.x/81.md b/docs/0.19.x/81.md deleted file mode 100755 index d1caa3326e700312b28cefbc9aa084b9c433ea90..0000000000000000000000000000000000000000 --- a/docs/0.19.x/81.md +++ /dev/null @@ -1,19 +0,0 @@ -# 时光轴详情 - -该页面展示了本 scikit-learn 中文文档项目随时间变化,而发生的重大事情,特在该页面记录下来。 - -## 贡献者 - -衷心感谢给位参与的贡献者,具体的贡献者列表,请参阅[https://github.com/apachecn/scikit-learn-doc-zh#%E8%B4%A1%E7%8C%AE%E8%80%85](https://github.com/apachecn/scikit-learn-doc-zh#%E8%B4%A1%E7%8C%AE%E8%80%85). - -## 项目角色 - -有关该项目的角色角色信息,比如: 负责人,发起人,支持者,翻译者,校验者 。。。等等信息,请参阅[项目角色结构](http://sklearn.apachecn.org/cn/0.19.0/project-role.html). - -## 时光轴 - -2017-11-17: 更新校验完成的页面,修改文档样式,在对应的页面加上对应的贡献者,文档链接为:[http://sklearn.apachecn.org/cn/0.19.0/](http://sklearn.apachecn.org/cn/0.19.0/). - -2017-10-20: 发起 scikit-learn 0.19 中文文档 的**第一期**校验活动,又来了一些新的大佬,参与到该活动中来,具体的校验详情请参阅[校验进度](http://sklearn.apachecn.org/cn/0.19.0/project-check-progress.html). - -2017-09-29: 发起 scikit-learn 0.19 中文文档 的翻译活动,有很多无私的贡献者愿意参与,具体的翻译详情请参阅[翻译进度](http://sklearn.apachecn.org/cn/0.19.0/project-translation-progress.html). \ No newline at end of file diff --git a/docs/0.19.x/9.md b/docs/0.19.x/9.md deleted file mode 100755 index b7da8906b8abdc36d6a36c3ffba4ae3189b4d14c..0000000000000000000000000000000000000000 --- a/docs/0.19.x/9.md +++ /dev/null @@ -1,20 +0,0 @@ -# 1.8\. 交叉分解 - -校验者: -        [@peels](https://github.com/apachecn/scikit-learn-doc-zh) -翻译者: -        [@Counting stars](https://github.com/apachecn/scikit-learn-doc-zh) - -交叉分解模块主要包含两个算法族: 偏最小二乘法(PLS)和典型相关分析(CCA)。 - -这些算法族具有发现两个多元数据集之间的线性关系的用途: `fit` method (拟合方法)的参数 `X` 和 `Y` 都是 2 维数组。 - -[![http://sklearn.apachecn.org/cn/0.19.0/_images/sphx_glr_plot_compare_cross_decomposition_0011.png](img/88ef3c9a51bdadd21593bf89887a04b5.jpg)](../auto_examples/cross_decomposition/plot_compare_cross_decomposition.html) - -交叉分解算法能够找到两个矩阵 (X 和 Y) 的基础关系。它们是对在两个空间的 协方差结构进行建模的隐变量方法。它们将尝试在X空间中找到多维方向,该方向能 够解释Y空间中最大多维方差方向。PLS回归特别适用于当预测变量矩阵具有比观测值 更多的变量以及当X值存在多重共线性时。相比之下,在这些情况下,标准回归将失败。 - -包含在此模块中的类有:[`PLSRegression`](generated/sklearn.cross_decomposition.PLSRegression.html#sklearn.cross_decomposition.PLSRegression "sklearn.cross_decomposition.PLSRegression"), [`PLSCanonical`](generated/sklearn.cross_decomposition.PLSCanonical.html#sklearn.cross_decomposition.PLSCanonical "sklearn.cross_decomposition.PLSCanonical"), [`CCA`](generated/sklearn.cross_decomposition.CCA.html#sklearn.cross_decomposition.CCA "sklearn.cross_decomposition.CCA"), [`PLSSVD`](generated/sklearn.cross_decomposition.PLSSVD.html#sklearn.cross_decomposition.PLSSVD "sklearn.cross_decomposition.PLSSVD") - -示例: - -* [Compare cross decomposition methods](../auto_examples/cross_decomposition/plot_compare_cross_decomposition.html#sphx-glr-auto-examples-cross-decomposition-plot-compare-cross-decomposition-py) \ No newline at end of file diff --git a/docs/0.19.x/README.md b/docs/0.19.x/README.md deleted file mode 100755 index c0bd1e61b0f9e79e217d6089cce7bab7974073e2..0000000000000000000000000000000000000000 --- a/docs/0.19.x/README.md +++ /dev/null @@ -1,152 +0,0 @@ -# scikit-learn (sklearn) 官方文档中文版 - -scikit-learn 是基于 Python 语言的机器学习工具。 - -1. 简单高效的数据挖掘和数据分析工具 -2. 可供大家在各种环境中重复使用 -3. 建立在 NumPy ,SciPy 和 matplotlib 上 -4. 开源,可商业使用 - BSD许可证 - -## 维护地址 - -+ [Github](https://github.com/apachecn/scikit-learn-doc-zh/) -+ [在线阅读](http://sklearn.apachecn.org) -+ [EPUB 格式](https://github.com/apachecn/scikit-learn-doc-zh/raw/dl/scikit-learn%200.19%20%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3.epub) - -## 历史版本 - -* [scikit-learn (sklearn) 0.18 官方文档中文版](http://cwiki.apachecn.org/pages/viewpage.action?pageId=10030181) - -## 贡献指南 - -[请见这里](CONTRIBUTING.md) - -## 负责人 - -* [@loopyme](https://github.com/loopyme) -* [@飞龙](https://github.com/wizardforcel) - -## 贡献者 - -贡献者可自行编辑如下内容(排名不分先后). - -### 0.19.0 - -**翻译者(人人皆大佬~):** - -* [@wangyangting](https://github.com/wangyangting)(那伊抹微笑) -* [@jiangzhonglian](https://github.com/jiangzhonglian)(片刻) -* [@chenyyx](https://github.com/chenyyx)(Joy yx) -* [@survivingME](https://github.com/survivingME)(Trembleguy) -* [@mtobeiyf](https://github.com/mtobeiyf)(Fing) -* [@Leon-Jin](https://github.com/Leon-Jin)(Leon晋) -* [@X1aoFang](https://github.com/X1aoFang)(X1aoFang) -* [@loverollcat](https://github.com/loverollcat)(loverollcat) -* [@helloheshee](https://github.com/helloheshee)(helloheshee) -* [@SkyDreamStart](https://github.com/SkyDreamStart)(SkyDreamStart) -* [@HazekiahWon](https://github.com/HazekiahWon)(Hazekiah Wang) -* [@201419](https://github.com/201419)(tree) -* [@busesese](https://github.com/busesese)(wenyi) -* [@chrzc](https://github.com/chrzc)(changzhicheng) -* [@Zoctan](https://github.com/Zoctan)(Zoctan) -* [@JanzenLiu](https://github.com/JanzenLiu)(Janzen_Liu) -* [@charleschou520](https://github.com/charleschou520)(charleschou520) -* [@zhangqiking](https://github.com/zhangqiking)(BigBird) -* [@mikechengwei](https://github.com/mikechengwei)(Mike) -* [@wodekwan](https://github.com/wodekwan)(wodekwan) -* [@sehriff](https://github.com/sehriff)(sehriff) -* [@Kdotm](https://github.com/Kdotm)(kngines) -* [@patientman](https://github.com/patientman)(YuanMingLiu) -* [@DamonDay](https://github.com/DamonDay)(DamonDay) -* [@cszhangbo](https://github.com/cszhangbo)(cszhangbo) -* [@XingxGit](https://github.com/XingxGit)(XingxGit) -* [@KrokYin](https://github.com/KrokYin)(KrokYin) -* [@yw10](https://github.com/yw10)(Andrew Yao) -* [@GlassyWu](https://github.com/GlassyWu)(glassy) -* [@PrivateRookie](https://github.com/PrivateRookie)(PrivateRookie) -* [@linweijiang](https://github.com/linweijiang)(linweijiang) -* [@jiaqiangbandongg](https://github.com/jiaqiangbandongg)(jiaqiangbandongg) -* [@supportingvector](https://github.com/supportingvector)(supportingvector) -* [@stealthsMrs](https://github.com/stealthsMrs)(stealthsMrs) -* [@lhwlhw90](https://github.com/lhwlhw90)(lhwlhw90) -* [@sheepmen](https://github.com/sheepmen)(羊三) -* [@guohao916](https://github.com/guohao916)(guohao_dm) -* [@Daemon-ser](https://github.com/Daemon-ser)(csu_hgq) -* [@wangxiancai](https://github.com/wangxiancai)(BWM-蜜蜂) -* [@夜神月](@qq760514101)(夜神月) -* [@liyangbit](https://github.com/liyangbit)(Lemon) -* [@XuJianzhi](https://github.com/XuJianzhi)(XuJianzhi) - -**校验者(人人皆大佬~)**(现在还不齐全,贡献者大佬们可随意修改) - -* [@weiyd](https://github.com/weiyd)(尔了个达) -* [@FontTian](https://github.com/FontTian)(FontTian) -* [@XuJianzhi](https://github.com/XuJianzhi)(XuJianzhi) -* [@caopeirui](https://github.com/caopeirui)(Veyron C) -* [@HelloSilicat](https://github.com/HelloSilicat)(Jialiang Pei) -* [@AnybodyHome](https://github.com/AnybodyHome)(loop) -* [@RyanZhiNie](https://github.com/RyanZhiNie)(Zhi Nie) -* [@zehuichen123](https://github.com/zehuichen123)(loveSnowBest) -* [@hlxstc](https://github.com/hlxstc)(Jokers) -* [@NellyLuo](https://github.com/NellyLuo)(NellyLuo) -* [@yuezhao9210](https://github.com/yuezhao9210)(Yue Zhao) -* [@why2lyj](https://github.com/why2lyj)(Snow Wong) -* [@pan8664716](https://github.com/pan8664716)(pan8664716) -* [@xrj](https://github.com/xrj)(xrj) -* [@qvduoduo1997](https://github.com/qvduoduo1997)(qvduoduo1997) -* [@marsjhao](https://github.com/marsjhao)(Zhang Junhao) -* [@tiantian1412](https://github.com/tiantian1412)(tiantian1412) -* [@sheepmen](https://github.com/sheepmen)(羊三) -* [@wangyangting](https://github.com/wangyangting)(那伊抹微笑) -* [@jiangzhonglian](https://github.com/jiangzhonglian)(片刻) -* [@chenyyx](https://github.com/chenyyx)(Joy yx) -* [@mikechengwei](https://github.com/mikechengwei)(Mike) -* [@wangxiancai](https://github.com/wangxiancai)(BWM-蜜蜂) -* [@busesese](https://github.com/busesese)(wenyi) -* [@GlassyWu](https://github.com/GlassyWu)(glassy) -* [@wodekwan](https://github.com/wodekwan)(wodekwan) -* [@gbyy422990](https://github.com/gbyy422990)(Bin GAO) -* [@charleschou520](https://github.com/charleschou520)(charleschou520) -* [@DataMonk2017](https://github.com/DataMonk2017)(Jeremy Zheng) -* [@Lixu518](https://github.com/Lixu518)(Mysry) -* [@linxiamen](https://github.com/linxiamen)(YUNCHUAN LIN) -* [@llcing](https://github.com/llcing)(Mayouji) -* [@KyrieHee](https://github.com/KyrieHee)(HeYun) -* [@ziepenn](https://github.com/ziepenn)(ziepenn) -* [@FAN0521](https://github.com/FAN0521)(FAN0521) -* [@Daemon-ser](https://github.com/Daemon-ser)(csu_hgq) -* [@shaoyy147](https://github.com/shaoyy147)(Y.Shao) -* [@Kdotm](https://github.com/Kdotm)(kngines) -* [@chrzc](https://github.com/chrzc)(changzhicheng) -* [@ywujudy](https://github.com/ywujudy)(ywujudy) -* [@污剑客](https://github.com/apachecn)(污剑客) -* [@爱吹牛逼的小明](https://github.com/apachecn)(爱吹牛逼的小明) -* [@JanzenLiu](https://github.com/JanzenLiu)(Janzen_Liu) -* [@Ecauchy](https://github.com/Ecauchy)(Ecauchy) - -### 0.18 - -请参阅: [http://cwiki.apachecn.org/pages/viewpage.action?pageId=10030181](http://cwiki.apachecn.org/pages/viewpage.action?pageId=10030181) - -## 联系方式 - -**本文档需要人手来维护和更新,如果你有兴趣担任负责人, 请联系下面的企鹅:** - -* 529815144(片刻),562826179(飞龙),190442212(小瑶) - -## 赞助我们 - -微信&支付宝 - -## **协议** - -以各项目协议为准。 - -ApacheCN 账号下没有协议的项目,一律视为 [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh)。 - -## Organization - -* ApacheCN 组织资源: - -> 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远 - diff --git a/docs/0.19.x/SUMMARY.md b/docs/0.19.x/SUMMARY.md deleted file mode 100755 index 230f26d117abc67729742a1a48f72f06143b7eca..0000000000000000000000000000000000000000 --- a/docs/0.19.x/SUMMARY.md +++ /dev/null @@ -1,67 +0,0 @@ -+ [安装 scikit-learn](79.md) -+ 用户指南 - + [1\. 监督学习](1.md) - + [1.1\. 广义线性模型](2.md) - + [1.2\. 线性和二次判别分析](3.md) - + [1.3\. 内核岭回归](4.md) - + [1.4\. 支持向量机](5.md) - + [1.5\. 随机梯度下降](6.md) - + [1.6\. 最近邻](7.md) - + [1.7\. 高斯过程](8.md) - + [1.8\. 交叉分解](9.md) - + [1.9\. 朴素贝叶斯](10.md) - + [1.10\. 决策树](11.md) - + [1.11\. 集成方法](12.md) - + [1.12\. 多类和多标签算法](13.md) - + [1.13\. 特征选择](14.md) - + [1.14\. 半监督学习](15.md) - + [1.15\. 等式回归](16.md) - + [1.16\. 概率校准](17.md) - + [1.17\. 神经网络模型(有监督)](18.md) - + [2\. 无监督学习](19.md) - + [2.1\. 高斯混合模型](20.md) - + [2.2\. 流形学习](21.md) - + [2.3\. 聚类](22.md) - + [2.4\. 双聚类](23.md) - + [2.5\. 分解成分中的信号(矩阵分解问题)](24.md) - + [2.6\. 协方差估计](25.md) - + [2.7\. 经验协方差](26.md) - + [2.8\. 收敛协方差](27.md) - + [2.9\. 稀疏逆协方差](28.md) - + [2.10\. Robust 协方差估计](29.md) - + [2.11\. 新奇和异常值检测](30.md) - + [2.12\. 密度估计](31.md) - + [2.13\. 神经网络模型(无监督)](32.md) - + [3\. 模型选择和评估](33.md) - + [3.1\. 交叉验证:评估估算器的表现](34.md) - + [3.2\. 调整估计器的超参数](35.md) - + [3.3\. 模型评估: 量化预测的质量](53.md) - + [3.4\. 模型持久化](54.md) - + [3.5\. 验证曲线: 绘制分数以评估模型](55.md) - + [4\. 数据集转换](56.md) - + [4.1\. Pipeline(管道)和 FeatureUnion(特征联合): 合并的评估器](57.md) - + [4.2\. 特征提取](58.md) - + [4.3\. 预处理数据](59.md) - + [4.4\. 无监督降维](60.md) - + [4.5\. 随机投影](61.md) - + [4.6\. 内核近似](62.md) - + [4.7\. 成对的矩阵, 类别和核函数](63.md) - + [4.8\. 预测目标 (`y`.md) 的转换](64.md) - + [5\. 数据集加载工具](65.md) - + [6\. 大规模计算的策略: 更大量的数据](66.md) - + [7\. 计算性能](67.md) -+ 教程 - + [使用 scikit-learn 介绍机器学习](68.md) - + [关于科学数据处理的统计学习教程](69.md) - + [机器学习: scikit-learn 中的设置以及预估对象](70.md) - + [监督学习:从高维观察预测输出变量](71.md) - + [模型选择:选择估计量及其参数](72.md) - + [无监督学习: 寻求数据表示](73.md) - + [把它们放在一起](74.md) - + [寻求帮助](75.md) - + [处理文本数据](76.md) - + [选择正确的评估器(estimator.md)](77.md) - + [外部资源,视频和谈话](78.md) -+ [API 参考](https://scikit-learn.org/stable/modules/classes.html) -+ [常见问题](80.md) -+ [时光轴](81.md) \ No newline at end of file diff --git a/docs/0.19.x/book.json b/docs/0.19.x/book.json deleted file mode 100644 index 06f5b4b424ab49a9bf9ab9993a0096ccb698f73f..0000000000000000000000000000000000000000 --- a/docs/0.19.x/book.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "title" : "sklearn 中文文档", - "author" : "ApacheCN", - "description" : "sklearn 中文文档: 教程和文档", - "language" : "zh-hans", - "plugins": [ - "github", - "github-buttons", - "-sharing", - "insert-logo", - "sharing-plus", - "back-to-top-button", - "code", - "copy-code-button", - "katex", - "pageview-count", - "edit-link", - "emphasize", - "alerts", - "auto-scroll-table", - "popup", - "hide-element", - "page-toc-button", - "tbfed-pagefooter", - "sitemap", - "advanced-emoji", - "expandable-chapters", - "splitter", - "search-pro" - ], - "pluginsConfig": { - "github": { - "url": "https://github.com/apachecn/sklearn-doc-zh" - }, - "github-buttons": { - "buttons": [ - { - "user": "apachecn", - "repo": "sklearn-doc-zh", - "type": "star", - "count": true, - "size": "small" - } - ] - }, - "insert-logo": { - "url": "http://data.apachecn.org/img/logo.jpg", - "style": "background: none; max-height: 150px; min-height: 150px" - }, - "hide-element": { - "elements": [".gitbook-link"] - }, - "edit-link": { - "base": "https://github.com/apachecn/sklearn-doc-zh/blob/master/docs/0.19.x", - "label": "编辑本页" - }, - "sharing": { - "qzone": true, - "weibo": true, - "twitter": false, - "facebook": false, - "google": false, - "qq": false, - "line": false, - "whatsapp": false, - "douban": false, - "all": [ - "qq", "douban", "facebook", "google", "linkedin", "twitter", "weibo", "whatsapp" - ] - }, - "page-toc-button": { - "maxTocDepth": 4, - "minTocSize": 4 - }, - "tbfed-pagefooter": { - "copyright":"Copyright © ibooker.org.cn 2019", - "modify_label": "该文件修订时间: ", - "modify_format": "YYYY-MM-DD HH:mm:ss" - }, - "sitemap": { - "hostname": "http://sklearn.apachecn.org" - } - }, - "my_links" : { - "sidebar" : { - "Home" : "https://www.baidu.com" - } - }, - "my_plugins": [ - "donate", - "todo", - "-lunr", - "-search", - "expandable-chapters-small", - "chapter-fold", - "expandable-chapters", - "expandable-chapters-small", - "back-to-top-button", - "ga", - "baidu", - "sitemap", - "tbfed-pagefooter", - "advanced-emoji", - "sectionx", - "page-treeview", - "simple-page-toc", - "ancre-navigation", - "theme-apachecn@git+https://github.com/apachecn/theme-apachecn#HEAD", - "pagefooter-apachecn@git+https://github.com/apachecn/gitbook-plugin-pagefooter-apachecn#HEAD" - ], - "my_pluginsConfig": { - "github-buttons": { - "buttons": [ - { - "user": "apachecn", - "repo": "sklearn-doc-zh", - "type": "star", - "count": true, - "size": "small" - }, - { - "user": "apachecn", - "width": "160", - "type": "follow", - "count": true, - "size": "small" - } - ] - }, - "ignores": ["node_modules"], - "simple-page-toc": { - "maxDepth": 3, - "skipFirstH1": true - }, - "page-toc-button": { - "maxTocDepth": 2, - "minTocSize": 2 - }, - "page-treeview": { - "copyright": "Copyright © aleen42", - "minHeaderCount": "2", - "minHeaderDeep": "2" - }, - "donate": { - "wechat": "微信收款的二维码URL", - "alipay": "支付宝收款的二维码URL", - "title": "", - "button": "赏", - "alipayText": "支付宝打赏", - "wechatText": "微信打赏" - }, - "page-copyright": { - "description": "modified at", - "signature": "你的签名", - "wisdom": "Designer, Frontend Developer & overall web enthusiast", - "format": "YYYY-MM-dd hh:mm:ss", - "copyright": "Copyright © 你的名字", - "timeColor": "#666", - "copyrightColor": "#666", - "utcOffset": "8", - "style": "normal", - "noPowered": false - }, - "ga": { - "token": "UA-102475051-10" - }, - "baidu": { - "token": "75439e2cbd22bdd813226000e9dcc12f" - }, - "pagefooter-apachecn": { - "copyright":"Copyright © ibooker.org.cn 2019", - "modify_label": "该文件修订时间: ", - "modify_format": "YYYY-MM-DD HH:mm:ss" - } - } -} diff --git a/docs/0.19.x/img/2a0c137e7b86ad939e131293a273579b.jpg b/docs/0.19.x/img/2a0c137e7b86ad939e131293a273579b.jpg deleted file mode 100755 index 0135a3c11ded27daed519b1a3b0d5647c340fe57..0000000000000000000000000000000000000000 Binary files a/docs/0.19.x/img/2a0c137e7b86ad939e131293a273579b.jpg and /dev/null differ diff --git a/docs/0.19.x/img/6f25bd1d6d3abb565ca3007f8ac1d855.jpg b/docs/0.19.x/img/6f25bd1d6d3abb565ca3007f8ac1d855.jpg deleted file mode 100755 index 54cb753ef0e48b6c0d5a6c7b4a4371fd8a887bab..0000000000000000000000000000000000000000 Binary files a/docs/0.19.x/img/6f25bd1d6d3abb565ca3007f8ac1d855.jpg and /dev/null differ diff --git a/docs/0.19.x/img/7a7a32bd2dd0da3d117c39efc7e35dd3.jpg b/docs/0.19.x/img/7a7a32bd2dd0da3d117c39efc7e35dd3.jpg deleted file mode 100755 index 56ac0466f108a93a7006fae1d6b2bc9dc718168b..0000000000000000000000000000000000000000 Binary files a/docs/0.19.x/img/7a7a32bd2dd0da3d117c39efc7e35dd3.jpg and /dev/null differ diff --git a/docs/0.19.x/img/e761380fca8200d40164e77965652982.jpg b/docs/0.19.x/img/e761380fca8200d40164e77965652982.jpg deleted file mode 100755 index 69a1c8d9e10e010356616a560a3898442aae6a57..0000000000000000000000000000000000000000 Binary files a/docs/0.19.x/img/e761380fca8200d40164e77965652982.jpg and /dev/null differ diff --git a/docs/0.19.x/img/fd132d0faf19fdc76254a6317ed1acfd.jpg b/docs/0.19.x/img/fd132d0faf19fdc76254a6317ed1acfd.jpg deleted file mode 100755 index 34f271693d773636450a95268f9cdc1202858707..0000000000000000000000000000000000000000 Binary files a/docs/0.19.x/img/fd132d0faf19fdc76254a6317ed1acfd.jpg and /dev/null differ diff --git a/docs/0.19.x/img/ffecfca02992b6a85e966c9440cb40dd.jpg b/docs/0.19.x/img/ffecfca02992b6a85e966c9440cb40dd.jpg deleted file mode 100755 index 4c1918f73f53daf1966e8ed818813da1a4779084..0000000000000000000000000000000000000000 Binary files a/docs/0.19.x/img/ffecfca02992b6a85e966c9440cb40dd.jpg and /dev/null differ diff --git a/docs/0.21.3/18.md b/docs/0.21.3/18.md deleted file mode 100644 index 376a724137c04bb981501fb0d983a6fa5adbc62c..0000000000000000000000000000000000000000 --- a/docs/0.21.3/18.md +++ /dev/null @@ -1,224 +0,0 @@ -# 1.17. 神经网络模型(有监督) - -校验者: -        [@tiantian1412](https://github.com/tiantian1412) -        [@火星](https://github.com/apachecn/scikit-learn-doc-zh) -        [@Loopy](https://github.com/loopyme) -        [@N!no](https://github.com/lovelybuggies) -翻译者: -        [@A](https://github.com/apachecn/scikit-learn-doc-zh) - ->**警告** -> ->此实现不适用于大规模数据应用。 特别是 scikit-learn 不支持 GPU。如果想要提高运行速度并使用基于 GPU 的实现以及为构建深度学习架构提供更多灵活性的框架,请参阅 [Related Projects](https://scikit-learn.org/stable/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 对特征归一化很敏感。 - -克服这些缺点的方法请参阅 [实用使用技巧](#1178-实用技巧) 部分。 - -## 1.17.2. 分类 - - [`MLPClassifier`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html#sklearn.neural_network.MLPClassifier "sklearn.neural_network.MLPClassifier") 类实现了通过 [Backpropagation](http://ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithm) 进行训练的多层感知器(MLP)算法。 - -MLP 在两个数组上进行训练:大小为 (n_samples, n_features) 的数组 X,用来储存表示训练样本的浮点型特征向量; 大小为 (n_samples,) 的数组 y,用来储存训练样本的目标值(类别标签): - -```python ->>> 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(alpha=1e-05, hidden_layer_sizes=(5, 2), random_state=1, - solver='lbfgs') -``` - -拟合(训练)后,该模型可以预测新样本的标签: - -```python ->>> clf.predict([[2., 2.], [-1., -2.]]) -array([1, 0]) -``` - -MLP 可以为训练数据拟合一个非线性模型。 `clf.coefs_` 包含了构成模型参数的权值矩阵: - -```python ->>> [coef.shape for coef in clf.coefs_] -[(2, 5), (5, 2), (2, 1)] -``` - -目前, [`MLPClassifier`](https://scikit-learn.org/stable/modules/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): - -```python ->>> clf.predict_proba([[2., 2.], [1., 2.]]) -array([[1.967...e-04, 9.998...-01], - [1.967...e-04, 9.998...-01]]) -``` - -[`MLPClassifier`](https://scikit-learn.org/stable/modules/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 的索引表示该样本的分类类别: - -```python ->>> 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(alpha=1e-05, hidden_layer_sizes=(15,), random_state=1, - solver='lbfgs') ->>> clf.predict([[1., 2.]]) -array([[1, 1]]) ->>> clf.predict([[0., 0.]]) -array([[0, 1]]) -``` - -更多内容请参阅下面的示例和文档 [`MLPClassifier.fit`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html#sklearn.neural_network.MLPClassifier.fit "sklearn.neural_network.MLPClassifier.fit") 。 - -> **示例**: -> ->* [Compare Stochastic learning strategies for MLPClassifier](https://scikit-learn.org/stable/auto_examples/neural_networks/plot_mlp_training_curves.html#sphx-glr-auto-examples-neural-networks-plot-mlp-training-curves-py) ->* [Visualization of MLP weights on MNIST](https://scikit-learn.org/stable/auto_examples/neural_networks/plot_mnist_filters.html#sphx-glr-auto-examples-neural-networks-plot-mnist-filters-py) - -## 1.17.3. 回归 - -[`MLPRegressor`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPRegressor.html#sklearn.neural_network.MLPRegressor "sklearn.neural_network.MLPRegressor") 类实现了多层感知器(MLP),它使用反向传播进行训练,输出层没有使用激活函数,也可以被看作是使用恒等函数(identity function)作为激活函数。 因此,它使用平方误差作为损失函数,输出是一组连续值。 - -[`MLPRegressor`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPRegressor.html#sklearn.neural_network.MLPRegressor "sklearn.neural_network.MLPRegressor") 还支持多输出回归,其中一个样本可以有多个目标值。 - -## 1.17.4. 正则化 - -[`MLPRegressor`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPRegressor.html#sklearn.neural_network.MLPRegressor "sklearn.neural_network.MLPRegressor") 类和 [`MLPClassifier`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html#sklearn.neural_network.MLPClassifier "sklearn.neural_network.MLPClassifier") 类都使用参数 `alpha` 作为正则化( L2 正则化)系数,正则化通过惩罚大数量级的权重值以避免过拟合问题。 下面的图表展示了不同的 alpha 值下的决策函数的变化。 - -[![http://sklearn.apachecn.org/cn/0.21.3/_images/sphx_glr_plot_mlp_alpha_0011.png](img/cfe45a2d171ae9c5933cd6d48cd48cb0.jpg)](https://scikit-learn.org/stable/_images/sphx_glr_plot_mlp_alpha_0011.png) - -详细信息,请参阅下面的示例。 - -> **示例**: -> -> * [Varying regularization in Multi-layer Perceptron](https://scikit-learn.org/stable/auto_examples/neural_networks/plot_mlp_alpha.html#sphx-glr-auto-examples-neural-networks-plot-mlp-alpha-py) - -## 1.17.5. 算法 - -MLP 使用 [随机梯度下降(Stochastic Gradient Descent)](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](6) 的文档中找到 。 - -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 > 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` 进行标准化。 - - ```python - >>> from sklearn.preprocessing import StandardScaler # doctest: +SKIP - >>> scaler = StandardScaler() # doctest: +SKIP - >>> # Don't cheat - fit only on training data - >>> scaler.fit(X_train) # doctest: +SKIP - >>> X_train = scaler.transform(X_train) # doctest: +SKIP - >>> # apply same transformation to test data - >>> X_test = scaler.transform(X_test) # doctest: +SKIP - ``` - 另一个推荐的方法是在 `Pipeline` 中使用的 `StandardScaler` 。 -* 最好使用 `GridSearchCV` 找到一个合理的正则化参数 ![\alpha](img/d8b3d5242d513369a44f8bf0c6112744.jpg) ,通常范围是在 `10.0 ** -np.arange(1, 7)` 。 -* 据经验可知,我们观察到 *L-BFGS* 是收敛速度更快的且在小数据集上表现更好的解决方案。对于规模相对比较大的数据集,*Adam* 是非常鲁棒的。 它通常会迅速收敛,并得到相当不错的表现。另一方面,如果学习率调整得正确, 使用 momentum 或 nesterov’s momentum 的 *SGD* 可能比这两种算法更好。 - -## 1.17.9. 使用 warm_start 的更多控制 - -如果您希望更多地控制 SGD 中的停止标准或学习率,或者想要进行额外的监视,使用 `warm_start=True` 和 `max_iter=1` 并且自身迭代可能会有所帮助: - -```python ->>> 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). - diff --git a/docs/0.21.3/README.md b/docs/0.21.3/README.md deleted file mode 100644 index 4ba460530f8272e063499ad7ad00512c50dee2e1..0000000000000000000000000000000000000000 --- a/docs/0.21.3/README.md +++ /dev/null @@ -1,130 +0,0 @@ -# scikit-learn (sklearn) 官方文档中文版 - -scikit-learn 是基于 Python 语言的机器学习工具 - -1. 简单高效的数据挖掘和数据分析工具 -2. 可供大家在各种环境中重复使用 -3. 建立在 NumPy ,SciPy 和 matplotlib 上 -4. 开源,可商业使用 - BSD许可证 - - -## 维护地址 - -+ [Github](https://github.com/apachecn/scikit-learn-doc-zh/) -+ [在线阅读](http://sklearn.apachecn.org) -+ [EPUB 格式](https://github.com/apachecn/scikit-learn-doc-zh/raw/dl/scikit-learn%200.19%20%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3.epub) - -## 目录 - -* [安装 scikit-learn](62.md) -* 用户指南 - * [1. 监督学习](1.md) - * [1.1. 广义线性模型](2.md) - * [1.2. 线性和二次判别分析](3.md) - * [1.3. 内核岭回归](4.md) - * [1.4. 支持向量机](5.md) - * [1.5. 随机梯度下降](6.md) - * [1.6. 最近邻](7.md) - * [1.7. 高斯过程](8.md) - * [1.8. 交叉分解](9.md) - * [1.9. 朴素贝叶斯](10.md) - * [1.10. 决策树](11.md) - * [1.11. 集成方法](12.md) - * [1.12. 多类和多标签算法](13.md) - * [1.13. 特征选择](14.md) - * [1.14. 半监督学习](15.md) - * [1.15. 等式回归](16.md) - * [1.16. 概率校准](17.md) - * [1.17. 神经网络模型(有监督)](18.md) - * [2. 无监督学习](19.md) - * [2.1. 高斯混合模型](20.md) - * [2.2. 流形学习](21.md) - * [2.3. 聚类](22.md) - * [2.4. 双聚类](23.md) - * [2.5. 分解成分中的信号(矩阵分解问题)](24.md) - * [2.6. 协方差估计](25.md) - * [2.7. 新奇和异常值检测](26.md) - * [2.8. 密度估计](27.md) - * [2.9. 神经网络模型(无监督)](28.md) - * [3. 模型选择和评估](29.md) - * [3.1. 交叉验证:评估估算器的表现](30.md) - * [3.2. 调整估计器的超参数](31.md) - * [3.3. 模型评估: 量化预测的质量](32.md) - * [3.4. 模型持久化](33.md) - * [3.5. 验证曲线: 绘制分数以评估模型](34.md) - * [4. 检验](35.md) - * [4.1. 部分依赖图](36.md) - * [5. 数据集转换](37.md) - * [5.1. Pipeline(管道)和 FeatureUnion(特征联合): 合并的评估器](38.md) - * [5.2. 特征提取](39.md) - * [5.3 预处理数据](40.md) - * [5.4 缺失值插补](41.md) - * [5.5. 无监督降维](42.md) - * [5.6. 随机投影](43.md) - * [5.7. 内核近似](44.md) - * [5.8. 成对的矩阵, 类别和核函数](45.md) - * [5.9. 预测目标 (`y`) 的转换](46.md) - * [6. 数据集加载工具](47.md) - * [6.1. 通用数据集 API](47.md) - * [6.2. 玩具数据集](47.md) - * [6.3 真实世界中的数据集](47.md) - * [6.4. 样本生成器](47.md) - * [6.5. 加载其他数据集](47.md) - * [7. 使用scikit-learn计算](48.md) - * [7.1. 大规模计算的策略: 更大量的数据](48.md) - * [7.2. 计算性能](48.md) - * [7.3. 并行性、资源管理和配置](48.md) -* [教程](50.md) - * [使用 scikit-learn 介绍机器学习](51.md) - * [关于科学数据处理的统计学习教程](52.md) - * [机器学习: scikit-learn 中的设置以及预估对象](53.md) - * [监督学习:从高维观察预测输出变量](54.md) - * [模型选择:选择估计量及其参数](55.md) - * [无监督学习: 寻求数据表示](56.md) - * [把它们放在一起](57.md) - * [寻求帮助](58.md) - * [处理文本数据](59.md) - * [选择正确的评估器(estimator.md)](60.md) - * [外部资源,视频和谈话](61.md) -* [API 参考](https://scikit-learn.org/stable/modules/classes.html) -* [常见问题](63.md) -* [时光轴](64.md) - -## 贡献指南 - -项目当前处于校对阶段,请查看[贡献指南](CONTRIBUTING.md),并在[整体进度](https://github.com/apachecn/sklearn-doc-zh/issues/352)中领取任务。 - -> 请您勇敢地去翻译和改进翻译。虽然我们追求卓越,但我们并不要求您做到十全十美,因此请不要担心因为翻译上犯错——在大部分情况下,我们的服务器已经记录所有的翻译,因此您不必担心会因为您的失误遭到无法挽回的破坏。(改编自维基百科) - -## 项目负责人 - -格式: GitHub + QQ - -* [@mahaoyang](https://github.com/mahaoyang):992635910 -* [@loopyme](https://github.com/loopyme):3322728009 -* [飞龙](https://github.com/wizardforcel):562826179 -* [片刻](https://github.com/jiangzhonglian):529815144 - --- 负责人要求: (欢迎一起为 `sklearn 中文版本` 做贡献) - -* 热爱开源,喜欢装逼 -* 长期使用 sklearn(至少0.5年) + 提交Pull Requests>=3 -* 能够有时间及时优化页面 bug 和用户 issues -* 试用期: 2个月 -* 欢迎联系: [片刻](https://github.com/jiangzhonglian) 529815144 - -## **项目协议** - -以各项目协议为准。 - -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) 中联系群主/管理员即可. - -## 赞助我们 - -微信&支付宝 diff --git a/docs/0.21.3/img/001d34ad977d110ce0931112c362d07e.jpg b/docs/0.21.3/img/001d34ad977d110ce0931112c362d07e.jpg deleted file mode 100644 index a04907afd22a2cb54d04b8f89fe9e6e9fc31a91f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/001d34ad977d110ce0931112c362d07e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/00a1e1837f700cef7352acfafd328607.jpg b/docs/0.21.3/img/00a1e1837f700cef7352acfafd328607.jpg deleted file mode 100644 index e78b32e8c7baa1d1537cca4b230b51192019f404..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/00a1e1837f700cef7352acfafd328607.jpg and /dev/null differ diff --git a/docs/0.21.3/img/00af2cbeb1deda7098a17d0491060339.jpg b/docs/0.21.3/img/00af2cbeb1deda7098a17d0491060339.jpg deleted file mode 100644 index aaf8f434c9678e5367390e4c500c45ae159a7c85..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/00af2cbeb1deda7098a17d0491060339.jpg and /dev/null differ diff --git a/docs/0.21.3/img/01024e528443374ebac4e8cb2f6dc463.jpg b/docs/0.21.3/img/01024e528443374ebac4e8cb2f6dc463.jpg deleted file mode 100644 index a6a835b3e1cb5e08a5088a912204c8b41bc1e94e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/01024e528443374ebac4e8cb2f6dc463.jpg and /dev/null differ diff --git a/docs/0.21.3/img/014b479ec81146a77562d251269a0f2e.jpg b/docs/0.21.3/img/014b479ec81146a77562d251269a0f2e.jpg deleted file mode 100644 index c7102e26b8bec43d7197708f7c57d33f65c9f23a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/014b479ec81146a77562d251269a0f2e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/015fcf78112c08948e66bb51171ae137.jpg b/docs/0.21.3/img/015fcf78112c08948e66bb51171ae137.jpg deleted file mode 100644 index f3565b2c7bbdde4bfacac9d1dde8c89f19aad3c3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/015fcf78112c08948e66bb51171ae137.jpg and /dev/null differ diff --git a/docs/0.21.3/img/017a1400b81bc9ef956adc43050bb5c8.jpg b/docs/0.21.3/img/017a1400b81bc9ef956adc43050bb5c8.jpg deleted file mode 100644 index 5556ba3151a8fe65eab042864fda96ce83dafd97..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/017a1400b81bc9ef956adc43050bb5c8.jpg and /dev/null differ diff --git a/docs/0.21.3/img/018a312145ba4dee4c257135644ced91.jpg b/docs/0.21.3/img/018a312145ba4dee4c257135644ced91.jpg deleted file mode 100644 index 7b16c94a5f2a665b1819c4456b7a20671e7dceb1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/018a312145ba4dee4c257135644ced91.jpg and /dev/null differ diff --git a/docs/0.21.3/img/01e7c74ccc13a6832f6bfcd46b442a1b.jpg b/docs/0.21.3/img/01e7c74ccc13a6832f6bfcd46b442a1b.jpg deleted file mode 100644 index 99096793ac91808c9b83c3979df0e86fe07fe754..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/01e7c74ccc13a6832f6bfcd46b442a1b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0243e3516b65d89a7e3da13680c1a1b7.jpg b/docs/0.21.3/img/0243e3516b65d89a7e3da13680c1a1b7.jpg deleted file mode 100644 index d9458db175b9464072861c1c7d38d2ce39fe80fd..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0243e3516b65d89a7e3da13680c1a1b7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/02848ebe72029503696b6523e4052c0c.jpg b/docs/0.21.3/img/02848ebe72029503696b6523e4052c0c.jpg deleted file mode 100644 index af4c5557d44d5ba9e9e811e89aed846996bb61c3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/02848ebe72029503696b6523e4052c0c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/03269860556d3525e4ae266f30c6982d.jpg b/docs/0.21.3/img/03269860556d3525e4ae266f30c6982d.jpg deleted file mode 100644 index eb3c6abc2930a7d54cffeee9c224d8ea7878e7c2..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/03269860556d3525e4ae266f30c6982d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0333d4e1607c1cab19f576a212267ec1.jpg b/docs/0.21.3/img/0333d4e1607c1cab19f576a212267ec1.jpg deleted file mode 100644 index b009d5118667932e8bbb5bc1c794b4c6c3f6ca54..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0333d4e1607c1cab19f576a212267ec1.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0345993f9c673bd3a928dc6cb07bcae1.jpg b/docs/0.21.3/img/0345993f9c673bd3a928dc6cb07bcae1.jpg deleted file mode 100644 index 1c8855a1b05fbc8bc664321e990aabd893b98a38..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0345993f9c673bd3a928dc6cb07bcae1.jpg and /dev/null differ diff --git a/docs/0.21.3/img/035f009eecfdebf82b493f797843a919.jpg b/docs/0.21.3/img/035f009eecfdebf82b493f797843a919.jpg deleted file mode 100644 index d0501de24dfdd9b4491accd191eef42ce0df643f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/035f009eecfdebf82b493f797843a919.jpg and /dev/null differ diff --git a/docs/0.21.3/img/03aa3da890dedc42b04c1df154062257.jpg b/docs/0.21.3/img/03aa3da890dedc42b04c1df154062257.jpg deleted file mode 100644 index f9dc198ed7fafb5bdfdbaceb07c469c1a2eeaddd..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/03aa3da890dedc42b04c1df154062257.jpg and /dev/null differ diff --git a/docs/0.21.3/img/03dc262433e357325639af531c5bf70e.jpg b/docs/0.21.3/img/03dc262433e357325639af531c5bf70e.jpg deleted file mode 100644 index 4028f01589570205b2357774f2cd1c50ca040771..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/03dc262433e357325639af531c5bf70e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/04388b884d40fc8b56559b6c2364e7ce.jpg b/docs/0.21.3/img/04388b884d40fc8b56559b6c2364e7ce.jpg deleted file mode 100644 index 4569323b19eb53745db906be45de9daf888b2c40..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/04388b884d40fc8b56559b6c2364e7ce.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0449a2a9bce6d759e7253da7d17fa938.jpg b/docs/0.21.3/img/0449a2a9bce6d759e7253da7d17fa938.jpg deleted file mode 100644 index a837c06374a489e2ba62d8330ae295c227945858..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0449a2a9bce6d759e7253da7d17fa938.jpg and /dev/null differ diff --git a/docs/0.21.3/img/047826f1c2e6f2687b304cb5217be8d8.jpg b/docs/0.21.3/img/047826f1c2e6f2687b304cb5217be8d8.jpg deleted file mode 100644 index c7bb64257b62cc7d04a03b9e8b66b267be807b13..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/047826f1c2e6f2687b304cb5217be8d8.jpg and /dev/null differ diff --git a/docs/0.21.3/img/05459a925be9207abbb2f72203e48cf2.jpg b/docs/0.21.3/img/05459a925be9207abbb2f72203e48cf2.jpg deleted file mode 100644 index 3cb60396f20a64b0d62f844a0c4312161fdcf3dc..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/05459a925be9207abbb2f72203e48cf2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/05588cdc4e82289930a92b0097f67d2d.jpg b/docs/0.21.3/img/05588cdc4e82289930a92b0097f67d2d.jpg deleted file mode 100644 index b85af9cbde19ffde01e535e3b87ac49c68af0b8a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/05588cdc4e82289930a92b0097f67d2d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0563dd4e7c322dfdafde0770d8a9dc4a.jpg b/docs/0.21.3/img/0563dd4e7c322dfdafde0770d8a9dc4a.jpg deleted file mode 100644 index d628f52ab2c93ff45143a456b3df3c485e4457ef..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0563dd4e7c322dfdafde0770d8a9dc4a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/05c3632395ec8941c82954de930b9d3e.jpg b/docs/0.21.3/img/05c3632395ec8941c82954de930b9d3e.jpg deleted file mode 100644 index 239520b213e7229b8ce2c00b9ba360b2bbbe0b14..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/05c3632395ec8941c82954de930b9d3e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/06731dd14500ea710a28370843818539.jpg b/docs/0.21.3/img/06731dd14500ea710a28370843818539.jpg deleted file mode 100644 index 67449d185dd6409fbb9450f7821f23bc15375175..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/06731dd14500ea710a28370843818539.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0679b7c6ff086b5e9ad73b1cb08d9205.jpg b/docs/0.21.3/img/0679b7c6ff086b5e9ad73b1cb08d9205.jpg deleted file mode 100644 index 1e52b9492d8f9c2c3a3081a8e6c124be6cbf8c14..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0679b7c6ff086b5e9ad73b1cb08d9205.jpg and /dev/null differ diff --git a/docs/0.21.3/img/06d3f93ccdf3b4b5cd0fea7225848848.jpg b/docs/0.21.3/img/06d3f93ccdf3b4b5cd0fea7225848848.jpg deleted file mode 100644 index 557b2d0cb0e58e5a11b7dae5646f39eb5ea2c70d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/06d3f93ccdf3b4b5cd0fea7225848848.jpg and /dev/null differ diff --git a/docs/0.21.3/img/070018458bf56c0d94293de45828e878.jpg b/docs/0.21.3/img/070018458bf56c0d94293de45828e878.jpg deleted file mode 100644 index 356696645b2bf3aba865b92ba710ad11fcc0484d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/070018458bf56c0d94293de45828e878.jpg and /dev/null differ diff --git a/docs/0.21.3/img/07610ee9d3a524eb0a3fb7ae409614c1.jpg b/docs/0.21.3/img/07610ee9d3a524eb0a3fb7ae409614c1.jpg deleted file mode 100644 index 1593e197cd8cf5990e7e9ccad234adce9b301b4d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/07610ee9d3a524eb0a3fb7ae409614c1.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0775c03fc710a24df297dedcec515aaf.jpg b/docs/0.21.3/img/0775c03fc710a24df297dedcec515aaf.jpg deleted file mode 100644 index 405eaa3cadeea149e2253d07e652cac758afe329..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0775c03fc710a24df297dedcec515aaf.jpg and /dev/null differ diff --git a/docs/0.21.3/img/07794b8fa83c7e18c5d1fb175fd7d7bd.jpg b/docs/0.21.3/img/07794b8fa83c7e18c5d1fb175fd7d7bd.jpg deleted file mode 100644 index ce3cfb0776bf546006fd22f3bc777e05c5dda5dc..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/07794b8fa83c7e18c5d1fb175fd7d7bd.jpg and /dev/null differ diff --git a/docs/0.21.3/img/07921ae49a32570fd5559004f1cca103.jpg b/docs/0.21.3/img/07921ae49a32570fd5559004f1cca103.jpg deleted file mode 100644 index 19ad06a9ee5a466c47e81da7311240b236ee787e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/07921ae49a32570fd5559004f1cca103.jpg and /dev/null differ diff --git a/docs/0.21.3/img/088266f72839f4195c9058dfd17d778b.jpg b/docs/0.21.3/img/088266f72839f4195c9058dfd17d778b.jpg deleted file mode 100644 index dd2f8f85d259135ad4a51238f50ae8bfbd11a724..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/088266f72839f4195c9058dfd17d778b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/08a5f2b42e497598497f5265194ce4a3.jpg b/docs/0.21.3/img/08a5f2b42e497598497f5265194ce4a3.jpg deleted file mode 100644 index 199ce6d1e2b0ff32a8bb3099411302adc3720513..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/08a5f2b42e497598497f5265194ce4a3.jpg and /dev/null differ diff --git a/docs/0.21.3/img/094a3a73abc84f5a6c1e0b72e15152d7.jpg b/docs/0.21.3/img/094a3a73abc84f5a6c1e0b72e15152d7.jpg deleted file mode 100644 index 9a6acaa271b0d4bae1245b992f48d38250cad073..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/094a3a73abc84f5a6c1e0b72e15152d7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0992b23a98660c7b2102695e74407be2.jpg b/docs/0.21.3/img/0992b23a98660c7b2102695e74407be2.jpg deleted file mode 100644 index 3bf36186ccfce8783c4a615a77ec667fb17fefe8..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0992b23a98660c7b2102695e74407be2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/09eb9862841b1c17d77e2e4830df3770.jpg b/docs/0.21.3/img/09eb9862841b1c17d77e2e4830df3770.jpg deleted file mode 100644 index 59a1bd51f75415070ca29634e9fe42aec70d1c1b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/09eb9862841b1c17d77e2e4830df3770.jpg and /dev/null differ diff --git a/docs/0.21.3/img/09ed5f467366506cf3b8d425d00db588.jpg b/docs/0.21.3/img/09ed5f467366506cf3b8d425d00db588.jpg deleted file mode 100644 index 5ded9bffff0bf70ce6d6072054d7688f5ac606bf..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/09ed5f467366506cf3b8d425d00db588.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0a3546c8f30354c128ef2acb96e91e16.jpg b/docs/0.21.3/img/0a3546c8f30354c128ef2acb96e91e16.jpg deleted file mode 100644 index c994b8f7186c350f008acaea2444a92b648498c0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0a3546c8f30354c128ef2acb96e91e16.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0a7b173908e1ba21b1132121dd409ded.jpg b/docs/0.21.3/img/0a7b173908e1ba21b1132121dd409ded.jpg deleted file mode 100644 index f31efb4595fea79e5df381f5d979a7c8f5448721..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0a7b173908e1ba21b1132121dd409ded.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0acf1512409eb0a9a90102698304fd52.jpg b/docs/0.21.3/img/0acf1512409eb0a9a90102698304fd52.jpg deleted file mode 100644 index aced8e30e2680353076e777c2b780b191a827566..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0acf1512409eb0a9a90102698304fd52.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0bb5a8e1b524523dcfb5104d9f20ba2b.jpg b/docs/0.21.3/img/0bb5a8e1b524523dcfb5104d9f20ba2b.jpg deleted file mode 100644 index dd55fdccabaebb17498d47c17d9b21f019dc5bf9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0bb5a8e1b524523dcfb5104d9f20ba2b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0bc78b13595e61ff422e00bb2686c7e8.jpg b/docs/0.21.3/img/0bc78b13595e61ff422e00bb2686c7e8.jpg deleted file mode 100644 index adc50611978639025ed64e228e91f8731b934de7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0bc78b13595e61ff422e00bb2686c7e8.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0cd05229735908f0f99e59deb90a4434.jpg b/docs/0.21.3/img/0cd05229735908f0f99e59deb90a4434.jpg deleted file mode 100644 index 3edcac6192e134753399b43a814f4fa69a7c5f2f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0cd05229735908f0f99e59deb90a4434.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0ce3ae4e9a8bbd17b08f5fae78d60f21.jpg b/docs/0.21.3/img/0ce3ae4e9a8bbd17b08f5fae78d60f21.jpg deleted file mode 100644 index 2bfc79fe93fa96dc67e0e8be29a2e1b51ecf4d54..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0ce3ae4e9a8bbd17b08f5fae78d60f21.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0d0c4e4a12f6e3bb90bf30161951dcc5.jpg b/docs/0.21.3/img/0d0c4e4a12f6e3bb90bf30161951dcc5.jpg deleted file mode 100644 index 66c708c846c71e519154ef9482e80ea9cbba0605..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0d0c4e4a12f6e3bb90bf30161951dcc5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0dd4aedd59a06ecbaead248c17a3ce80.jpg b/docs/0.21.3/img/0dd4aedd59a06ecbaead248c17a3ce80.jpg deleted file mode 100644 index 27c0dd32a2dd03bc77ad9c2159e6f3d76dfef710..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0dd4aedd59a06ecbaead248c17a3ce80.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0e7d39317aed470ee92522354b5fbe04.jpg b/docs/0.21.3/img/0e7d39317aed470ee92522354b5fbe04.jpg deleted file mode 100644 index d72746955e80c141488d51bb5b33ea3cc7e997e5..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0e7d39317aed470ee92522354b5fbe04.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0e8aa67015918fa2807e6ddf7192c32f.jpg b/docs/0.21.3/img/0e8aa67015918fa2807e6ddf7192c32f.jpg deleted file mode 100644 index 9f999643acff072df91624821b110c551a3adaa7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0e8aa67015918fa2807e6ddf7192c32f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0f30c5ace43eda2a8d25c6e9365264d7.jpg b/docs/0.21.3/img/0f30c5ace43eda2a8d25c6e9365264d7.jpg deleted file mode 100644 index 9efb83e4767f804798bc8cb9f2c00e3b15ec4883..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0f30c5ace43eda2a8d25c6e9365264d7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0f92bc682b050115d03c625ce770c77d.jpg b/docs/0.21.3/img/0f92bc682b050115d03c625ce770c77d.jpg deleted file mode 100644 index e6fcdcc8f072046c7c56e1d1ed375b76627cc810..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0f92bc682b050115d03c625ce770c77d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0faa297883831c0432cf4d72960eeb6c.jpg b/docs/0.21.3/img/0faa297883831c0432cf4d72960eeb6c.jpg deleted file mode 100644 index 850ad005399dd4ae3425e109ca754d0191479761..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0faa297883831c0432cf4d72960eeb6c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0fac1c7ec23344da41ff45485bb3ac12.jpg b/docs/0.21.3/img/0fac1c7ec23344da41ff45485bb3ac12.jpg deleted file mode 100644 index 29373834057bfd3f010ab32fc73533428c7fd974..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0fac1c7ec23344da41ff45485bb3ac12.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0fccbdc535b0a4d8003725e8ad606561.jpg b/docs/0.21.3/img/0fccbdc535b0a4d8003725e8ad606561.jpg deleted file mode 100644 index 88569d629c103a6b140c5bd1e1e0db41127dbbac..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0fccbdc535b0a4d8003725e8ad606561.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0fd5cc61b1ca3db3b190fbfad2a38813.jpg b/docs/0.21.3/img/0fd5cc61b1ca3db3b190fbfad2a38813.jpg deleted file mode 100644 index dfcefa25c2e014c90c7748f361e00da3e707d9c4..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0fd5cc61b1ca3db3b190fbfad2a38813.jpg and /dev/null differ diff --git a/docs/0.21.3/img/0fec9d3a9833abc417480a03be883b3e.jpg b/docs/0.21.3/img/0fec9d3a9833abc417480a03be883b3e.jpg deleted file mode 100644 index bfb6bd25189940eebece5393f8f2b23e92de7968..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/0fec9d3a9833abc417480a03be883b3e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/10026a0d2a4dcca9387e58932c14f0e7.jpg b/docs/0.21.3/img/10026a0d2a4dcca9387e58932c14f0e7.jpg deleted file mode 100644 index edaa1f334f3193194de9ba91f7ff15c9d30a0d24..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/10026a0d2a4dcca9387e58932c14f0e7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/107556ec49c074270575d6b99f3d2029.jpg b/docs/0.21.3/img/107556ec49c074270575d6b99f3d2029.jpg deleted file mode 100644 index 74bf9ca5f861139b7b388fc329943a17a040fd18..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/107556ec49c074270575d6b99f3d2029.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1091409a4db7e77230536d6b05b4fae6.jpg b/docs/0.21.3/img/1091409a4db7e77230536d6b05b4fae6.jpg deleted file mode 100644 index 91c6d1dea573fb2cc4fab9d0e46d9ba5ab7ebedc..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1091409a4db7e77230536d6b05b4fae6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/10a8344b866fca53744b728ef788a668.jpg b/docs/0.21.3/img/10a8344b866fca53744b728ef788a668.jpg deleted file mode 100644 index 444f533e8b773105f4ef3424cff051d1d43bbcb8..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/10a8344b866fca53744b728ef788a668.jpg and /dev/null differ diff --git a/docs/0.21.3/img/10bfda066ccebace59b1d11135e10196.jpg b/docs/0.21.3/img/10bfda066ccebace59b1d11135e10196.jpg deleted file mode 100644 index 2f0e5257b4c55cd51ea1977cb58124b5c82b9112..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/10bfda066ccebace59b1d11135e10196.jpg and /dev/null differ diff --git a/docs/0.21.3/img/10ce8fc56aa233e3e9cec9776dc315e6.jpg b/docs/0.21.3/img/10ce8fc56aa233e3e9cec9776dc315e6.jpg deleted file mode 100644 index 316bc55bd2a2b8853dd5b799abfe8ce3ce6765da..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/10ce8fc56aa233e3e9cec9776dc315e6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/11265c80ea298a58e0a1010736d28b38.jpg b/docs/0.21.3/img/11265c80ea298a58e0a1010736d28b38.jpg deleted file mode 100644 index f85536e34b31326d0d92216d9dda8150977cfc3f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/11265c80ea298a58e0a1010736d28b38.jpg and /dev/null differ diff --git a/docs/0.21.3/img/11336a74b43f75a360b60ce81f9cbdc0.jpg b/docs/0.21.3/img/11336a74b43f75a360b60ce81f9cbdc0.jpg deleted file mode 100644 index 68c79269147a198d17376474116625a9aad260b2..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/11336a74b43f75a360b60ce81f9cbdc0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/114b22cba4861a82ce7df1eab3219a0d.jpg b/docs/0.21.3/img/114b22cba4861a82ce7df1eab3219a0d.jpg deleted file mode 100644 index 470c8fb97f3f2eb92cbff356cfabe30f72907ff3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/114b22cba4861a82ce7df1eab3219a0d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/11c00539ec3e5944afd76511830591db.jpg b/docs/0.21.3/img/11c00539ec3e5944afd76511830591db.jpg deleted file mode 100644 index 12faa6b9bba0d1c7912b87501131908c9aa0bb11..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/11c00539ec3e5944afd76511830591db.jpg and /dev/null differ diff --git a/docs/0.21.3/img/11cde057716cf1a820780a60c8ffa8e4.jpg b/docs/0.21.3/img/11cde057716cf1a820780a60c8ffa8e4.jpg deleted file mode 100644 index eb3c6abc2930a7d54cffeee9c224d8ea7878e7c2..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/11cde057716cf1a820780a60c8ffa8e4.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1252aa7af065b0afd424b2ff01b4e2a5.jpg b/docs/0.21.3/img/1252aa7af065b0afd424b2ff01b4e2a5.jpg deleted file mode 100644 index a72efafe51e4bd731eb8dafdee6003ca85a2c0e5..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1252aa7af065b0afd424b2ff01b4e2a5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/12867664a0e0e6047ee303c542b4deac.jpg b/docs/0.21.3/img/12867664a0e0e6047ee303c542b4deac.jpg deleted file mode 100644 index 2cd9623b791cf035024651eb826b358eb1babc00..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/12867664a0e0e6047ee303c542b4deac.jpg and /dev/null differ diff --git a/docs/0.21.3/img/12ab1980b4b3f069be032c0d4f1184ed.jpg b/docs/0.21.3/img/12ab1980b4b3f069be032c0d4f1184ed.jpg deleted file mode 100644 index 3828e146e6b08784a2ef5feeadcb05c0074fdc21..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/12ab1980b4b3f069be032c0d4f1184ed.jpg and /dev/null differ diff --git a/docs/0.21.3/img/12b2c1da1f9041738fa7153efc651372.jpg b/docs/0.21.3/img/12b2c1da1f9041738fa7153efc651372.jpg deleted file mode 100644 index 740653f6274bfc2cca205cf4aafc78fdf5b96244..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/12b2c1da1f9041738fa7153efc651372.jpg and /dev/null differ diff --git a/docs/0.21.3/img/12ecd862769bee1e71c75c134b6423bb.jpg b/docs/0.21.3/img/12ecd862769bee1e71c75c134b6423bb.jpg deleted file mode 100644 index 6ea8b05176d6fe17792ce79900e6ec2303229004..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/12ecd862769bee1e71c75c134b6423bb.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1375f487efd6b9db955b7f7aafecc441.jpg b/docs/0.21.3/img/1375f487efd6b9db955b7f7aafecc441.jpg deleted file mode 100644 index fc76ea639f4e74923ce4f1b43e7ba5169fd3baf3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1375f487efd6b9db955b7f7aafecc441.jpg and /dev/null differ diff --git a/docs/0.21.3/img/13e06e04807641041a1d2df7a80043e2.jpg b/docs/0.21.3/img/13e06e04807641041a1d2df7a80043e2.jpg deleted file mode 100644 index 59f5a76afc83d6e7ccdd9e2a1ee1a0f09d517572..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/13e06e04807641041a1d2df7a80043e2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/14120d5c5d7ad74513d356eed762622b.jpg b/docs/0.21.3/img/14120d5c5d7ad74513d356eed762622b.jpg deleted file mode 100644 index e81ebbe63449724253f303ef000e446cb7033bc6..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/14120d5c5d7ad74513d356eed762622b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/148aed7690723555d32f36019c3d6948.jpg b/docs/0.21.3/img/148aed7690723555d32f36019c3d6948.jpg deleted file mode 100644 index e4292b0900407a0378f54368f9746fb12f102e7c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/148aed7690723555d32f36019c3d6948.jpg and /dev/null differ diff --git a/docs/0.21.3/img/14d65d3148b0ea7c9ecb364423ecb0ed.jpg b/docs/0.21.3/img/14d65d3148b0ea7c9ecb364423ecb0ed.jpg deleted file mode 100644 index eb0b75e5496a9386a673d5862711762e654aa4f2..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/14d65d3148b0ea7c9ecb364423ecb0ed.jpg and /dev/null differ diff --git a/docs/0.21.3/img/14f6506599a88a5297ea712fa70eece4.jpg b/docs/0.21.3/img/14f6506599a88a5297ea712fa70eece4.jpg deleted file mode 100644 index 09f6b623076165d7076d6cf0dd30a7cebb5dba1b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/14f6506599a88a5297ea712fa70eece4.jpg and /dev/null differ diff --git a/docs/0.21.3/img/153aceb3cdac953277c6c840339ac023.jpg b/docs/0.21.3/img/153aceb3cdac953277c6c840339ac023.jpg deleted file mode 100644 index 8812e4298ae65855895f672d13d7f97e0117dc73..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/153aceb3cdac953277c6c840339ac023.jpg and /dev/null differ diff --git a/docs/0.21.3/img/156554c81cfe5f0230627ac0487fd07f.jpg b/docs/0.21.3/img/156554c81cfe5f0230627ac0487fd07f.jpg deleted file mode 100644 index f342dcbc33130e5c9d1c5f292a46775e021bf0db..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/156554c81cfe5f0230627ac0487fd07f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/15a03cac7d4ab66fdf23e702ee75da2a.jpg b/docs/0.21.3/img/15a03cac7d4ab66fdf23e702ee75da2a.jpg deleted file mode 100644 index fb4da36640731fd3b10b88aee21922b0e4476f24..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/15a03cac7d4ab66fdf23e702ee75da2a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/163f83188195d81958bfb733b7a3daa2.jpg b/docs/0.21.3/img/163f83188195d81958bfb733b7a3daa2.jpg deleted file mode 100644 index 2bc33b9285ef6c19fab1ee1bbd4d97ac564d9abf..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/163f83188195d81958bfb733b7a3daa2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/165303a7d56136efa39130cd3cd9539e.jpg b/docs/0.21.3/img/165303a7d56136efa39130cd3cd9539e.jpg deleted file mode 100644 index f0d17885eac9bd6e9a19d7bcaa3606682c1ab2da..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/165303a7d56136efa39130cd3cd9539e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/16622481c2bbb001363e20660b549ae9.jpg b/docs/0.21.3/img/16622481c2bbb001363e20660b549ae9.jpg deleted file mode 100644 index 209951dc07e2ae7b6cd0482a0944456a17801e00..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/16622481c2bbb001363e20660b549ae9.jpg and /dev/null differ diff --git a/docs/0.21.3/img/170bd587959dabf132e4e0f39fa0a7b7.jpg b/docs/0.21.3/img/170bd587959dabf132e4e0f39fa0a7b7.jpg deleted file mode 100644 index 6e506181b3f7724c710a1e5e4909bb22ad81f676..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/170bd587959dabf132e4e0f39fa0a7b7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/17430579d0bcbef3e2d99eba470792c8.jpg b/docs/0.21.3/img/17430579d0bcbef3e2d99eba470792c8.jpg deleted file mode 100644 index 3b66f54a57b610da2c2e78d7119a87e126384d02..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/17430579d0bcbef3e2d99eba470792c8.jpg and /dev/null differ diff --git a/docs/0.21.3/img/17689bafe240fb42feab1cca674b5b88.jpg b/docs/0.21.3/img/17689bafe240fb42feab1cca674b5b88.jpg deleted file mode 100644 index 2ba1cbe5af45a2cabf699ef962108cdab245502d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/17689bafe240fb42feab1cca674b5b88.jpg and /dev/null differ diff --git a/docs/0.21.3/img/187eddee2de4e12860dc001c5f74b2b4.jpg b/docs/0.21.3/img/187eddee2de4e12860dc001c5f74b2b4.jpg deleted file mode 100644 index f78cc9cdc68569d0aa980ab80ced304a0a8b0ad2..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/187eddee2de4e12860dc001c5f74b2b4.jpg and /dev/null differ diff --git a/docs/0.21.3/img/18906a7fe0c5d78e0a291e472ded58ce.jpg b/docs/0.21.3/img/18906a7fe0c5d78e0a291e472ded58ce.jpg deleted file mode 100644 index 781a58ccde0ab7924266cf562142c47814953271..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/18906a7fe0c5d78e0a291e472ded58ce.jpg and /dev/null differ diff --git a/docs/0.21.3/img/195ff50d437f1bb16125cdb1c311f3ab.jpg b/docs/0.21.3/img/195ff50d437f1bb16125cdb1c311f3ab.jpg deleted file mode 100644 index a1f8c5f7e41b5a27ad035aba233bb6ecef899829..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/195ff50d437f1bb16125cdb1c311f3ab.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1a125d0568be1ce93a6bc7b3ee1071e1.jpg b/docs/0.21.3/img/1a125d0568be1ce93a6bc7b3ee1071e1.jpg deleted file mode 100644 index 9f3370ec05a56ac3d637ef24f07af026918eecd6..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1a125d0568be1ce93a6bc7b3ee1071e1.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1a1bc66f06af187108d4250f068748c9.jpg b/docs/0.21.3/img/1a1bc66f06af187108d4250f068748c9.jpg deleted file mode 100644 index c36fbee31c3f610774369ddd43c79778c5d91fd7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1a1bc66f06af187108d4250f068748c9.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1a78828504944887ab23097011f807d5.jpg b/docs/0.21.3/img/1a78828504944887ab23097011f807d5.jpg deleted file mode 100644 index 075f9558468f65922d48f0f3ddc0fb7bbfaa2446..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1a78828504944887ab23097011f807d5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1a91bab921cf39f58a522ed15f475235.jpg b/docs/0.21.3/img/1a91bab921cf39f58a522ed15f475235.jpg deleted file mode 100644 index e86b0c06663e4337c08e3e2baed26b6d66af559e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1a91bab921cf39f58a522ed15f475235.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1ae6d373d81c5f3f50905f336b4a070a.jpg b/docs/0.21.3/img/1ae6d373d81c5f3f50905f336b4a070a.jpg deleted file mode 100644 index 45491126dcef09aad0dac2a3f1df3b0a8144b2c5..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1ae6d373d81c5f3f50905f336b4a070a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1b6228a71a038f66ac7b8a2743adf4e7.jpg b/docs/0.21.3/img/1b6228a71a038f66ac7b8a2743adf4e7.jpg deleted file mode 100644 index 48ebc805949ff256e2bbf42e3773d73594cfb0d6..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1b6228a71a038f66ac7b8a2743adf4e7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1c12ea7ea179efd16ce513645034d41a.jpg b/docs/0.21.3/img/1c12ea7ea179efd16ce513645034d41a.jpg deleted file mode 100644 index 907c2ab210a397a90ec2c47f57d76d025b015e34..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1c12ea7ea179efd16ce513645034d41a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1c25ce7b0d4e2c7da1f0e73d2565c431.jpg b/docs/0.21.3/img/1c25ce7b0d4e2c7da1f0e73d2565c431.jpg deleted file mode 100644 index cff2ead6803602cc00fe526668c796c4fcd4bd5a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1c25ce7b0d4e2c7da1f0e73d2565c431.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1cde7e5f92efe9056f9f53e23ea04102.jpg b/docs/0.21.3/img/1cde7e5f92efe9056f9f53e23ea04102.jpg deleted file mode 100644 index 53871b0de9e6d07358300a80c069a259f9434430..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1cde7e5f92efe9056f9f53e23ea04102.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1ce6ae6c075734e41812dc91b67d16e5.jpg b/docs/0.21.3/img/1ce6ae6c075734e41812dc91b67d16e5.jpg deleted file mode 100644 index 12602ac356a287e9b0a1b9f90e94206106beab4e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1ce6ae6c075734e41812dc91b67d16e5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1d57cc4e24d28b8283f98bda247d84e7.jpg b/docs/0.21.3/img/1d57cc4e24d28b8283f98bda247d84e7.jpg deleted file mode 100644 index 7cb099604b017cc721d5d28df2e7b17716312220..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1d57cc4e24d28b8283f98bda247d84e7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1d9a1eb9200948482ebfd5811679276a.jpg b/docs/0.21.3/img/1d9a1eb9200948482ebfd5811679276a.jpg deleted file mode 100644 index a732c879f12eb64583fd7af470e6608c4a89b3f7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1d9a1eb9200948482ebfd5811679276a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1da4a8f74cdb166cdc91e2f691cf3ac5.jpg b/docs/0.21.3/img/1da4a8f74cdb166cdc91e2f691cf3ac5.jpg deleted file mode 100644 index a6fa8724152ab719e6e3c51e38d29f12cb88efde..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1da4a8f74cdb166cdc91e2f691cf3ac5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1daad9ca4ebf0fe49529674b890b3df2.jpg b/docs/0.21.3/img/1daad9ca4ebf0fe49529674b890b3df2.jpg deleted file mode 100644 index f0d063669edf9efaab2920b08a77d3d73573a8ce..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1daad9ca4ebf0fe49529674b890b3df2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1ddb602277c74f97c01c61af96da4a87.jpg b/docs/0.21.3/img/1ddb602277c74f97c01c61af96da4a87.jpg deleted file mode 100644 index acaebfeca5e9b87f05b2efb95b5ade62be83a014..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1ddb602277c74f97c01c61af96da4a87.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1e4e584cd8a99da7f18a5581de1f7be3.jpg b/docs/0.21.3/img/1e4e584cd8a99da7f18a5581de1f7be3.jpg deleted file mode 100644 index 786f75415af8808edbc26793a507949d7e944e60..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1e4e584cd8a99da7f18a5581de1f7be3.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1f1667a67d885f419222cbd85c70dd56.jpg b/docs/0.21.3/img/1f1667a67d885f419222cbd85c70dd56.jpg deleted file mode 100644 index b9a1f136f212d412c9ea83f0771b4d86fb417913..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1f1667a67d885f419222cbd85c70dd56.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1f7b275b5002d3772b809055d9199f91.jpg b/docs/0.21.3/img/1f7b275b5002d3772b809055d9199f91.jpg deleted file mode 100644 index 18f9d5533774d43095ecdffc08fc6cf8c2e89821..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1f7b275b5002d3772b809055d9199f91.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1f8c02d4fdbdbcaa014972bca5620cf3.jpg b/docs/0.21.3/img/1f8c02d4fdbdbcaa014972bca5620cf3.jpg deleted file mode 100644 index 72b3a95520c6a7114cd24f26b859ddcc004f7aef..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1f8c02d4fdbdbcaa014972bca5620cf3.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1f9000a4bf057edcb9b87d7a4abb8e8d.jpg b/docs/0.21.3/img/1f9000a4bf057edcb9b87d7a4abb8e8d.jpg deleted file mode 100644 index 4be88cd7a5d38036a1840f5ab50bd92657daf2b7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1f9000a4bf057edcb9b87d7a4abb8e8d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1fa419ff78b610bf4a5b3b71df728cec.jpg b/docs/0.21.3/img/1fa419ff78b610bf4a5b3b71df728cec.jpg deleted file mode 100644 index 1a1477c471dbe51e70120390dbe8e0fa0fd13116..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1fa419ff78b610bf4a5b3b71df728cec.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1fc7cc5cbdba693962c7708456165810.jpg b/docs/0.21.3/img/1fc7cc5cbdba693962c7708456165810.jpg deleted file mode 100644 index 84168de3f4ca8dd78377917aad974986ed102993..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1fc7cc5cbdba693962c7708456165810.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1fc92e9d8efa5433f7346284592e9ea0.jpg b/docs/0.21.3/img/1fc92e9d8efa5433f7346284592e9ea0.jpg deleted file mode 100644 index be80c4de3c7d74148f6ce4bfdcacb8183b1ef0ef..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1fc92e9d8efa5433f7346284592e9ea0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1ff26934befcf3ca9623f1e729a8824c.jpg b/docs/0.21.3/img/1ff26934befcf3ca9623f1e729a8824c.jpg deleted file mode 100644 index 0ca2ac2561eb7f388446d9bcc5f57d168f2f9672..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1ff26934befcf3ca9623f1e729a8824c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/1ff751c4de3bbad5543f0dbbad73dd35.jpg b/docs/0.21.3/img/1ff751c4de3bbad5543f0dbbad73dd35.jpg deleted file mode 100644 index 05f362c660bcc327599f21d2e5803cf598072d4a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/1ff751c4de3bbad5543f0dbbad73dd35.jpg and /dev/null differ diff --git a/docs/0.21.3/img/20310556eb1fb84146ff2584e166fd9c.jpg b/docs/0.21.3/img/20310556eb1fb84146ff2584e166fd9c.jpg deleted file mode 100644 index 0199f8d82cfa82de192b6693424ed530c8ea9603..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/20310556eb1fb84146ff2584e166fd9c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/203c5a2c58d6567a86dbc86faa92209e.jpg b/docs/0.21.3/img/203c5a2c58d6567a86dbc86faa92209e.jpg deleted file mode 100644 index 613d1c79ef0c2fbf3969c39c0fa0c6fe94291ee3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/203c5a2c58d6567a86dbc86faa92209e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/207e92cfc624372bc9c72a160c02114f.jpg b/docs/0.21.3/img/207e92cfc624372bc9c72a160c02114f.jpg deleted file mode 100644 index 86f8afdf4bdc61283adbdc6bbc1bd7648f0afbd9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/207e92cfc624372bc9c72a160c02114f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/20d6857e752f6ffdfdd20a88c32f837c.jpg b/docs/0.21.3/img/20d6857e752f6ffdfdd20a88c32f837c.jpg deleted file mode 100644 index e18b1e52e3164ca42fdee96f6975c3ce880760b8..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/20d6857e752f6ffdfdd20a88c32f837c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/21937e85250a7aaa8aea86e4fbf93452.jpg b/docs/0.21.3/img/21937e85250a7aaa8aea86e4fbf93452.jpg deleted file mode 100644 index 765b01e0c34670737e458f0c7c96369023693e7c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/21937e85250a7aaa8aea86e4fbf93452.jpg and /dev/null differ diff --git a/docs/0.21.3/img/21b6e31779ad3b1a382b13e65ec917c7.jpg b/docs/0.21.3/img/21b6e31779ad3b1a382b13e65ec917c7.jpg deleted file mode 100644 index 49f5a8765393aa0ef9b42ef4ce468423b3b5d7f7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/21b6e31779ad3b1a382b13e65ec917c7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/21e9f42c5b6730d593e37a11c6ffb13a.jpg b/docs/0.21.3/img/21e9f42c5b6730d593e37a11c6ffb13a.jpg deleted file mode 100644 index 0d9705728102b60178bede9724c9f92372233008..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/21e9f42c5b6730d593e37a11c6ffb13a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2238e05d9e3ae45b81577c9902a9cfbb.jpg b/docs/0.21.3/img/2238e05d9e3ae45b81577c9902a9cfbb.jpg deleted file mode 100644 index 99dfd5e3433f27067fadaf288a5f04cea4f1df76..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2238e05d9e3ae45b81577c9902a9cfbb.jpg and /dev/null differ diff --git a/docs/0.21.3/img/223988a8bef489edcaa2f198e5e3a9a5.jpg b/docs/0.21.3/img/223988a8bef489edcaa2f198e5e3a9a5.jpg deleted file mode 100644 index 3ef0ea1b0712f4d4677069961c4188db72d9c115..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/223988a8bef489edcaa2f198e5e3a9a5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/224162d8cfff6c8ad85718be6b261b70.jpg b/docs/0.21.3/img/224162d8cfff6c8ad85718be6b261b70.jpg deleted file mode 100644 index 53b19e6234261385795a8580582d4f8058ee3a24..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/224162d8cfff6c8ad85718be6b261b70.jpg and /dev/null differ diff --git a/docs/0.21.3/img/22c1b7663568bf6c404a07778507a93e.jpg b/docs/0.21.3/img/22c1b7663568bf6c404a07778507a93e.jpg deleted file mode 100644 index 491c47e91006c1a4c249b5d5bae4d219a581d0ab..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/22c1b7663568bf6c404a07778507a93e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/22f3a10ad9acceb77ea6193f945b11cf.jpg b/docs/0.21.3/img/22f3a10ad9acceb77ea6193f945b11cf.jpg deleted file mode 100644 index f146b8e04428700be9dcfef7607ac1190c85f4c0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/22f3a10ad9acceb77ea6193f945b11cf.jpg and /dev/null differ diff --git a/docs/0.21.3/img/23bd4397a3e30a81d2ee26977f708e63.jpg b/docs/0.21.3/img/23bd4397a3e30a81d2ee26977f708e63.jpg deleted file mode 100644 index 5faf3403f77e4ddfc916758bf324c97935a51772..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/23bd4397a3e30a81d2ee26977f708e63.jpg and /dev/null differ diff --git a/docs/0.21.3/img/23dac8b2be31a1cbe914b59ff2670dbf.jpg b/docs/0.21.3/img/23dac8b2be31a1cbe914b59ff2670dbf.jpg deleted file mode 100644 index b23af731d2f23a08b7fd3aeb436d57d58f532838..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/23dac8b2be31a1cbe914b59ff2670dbf.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2490002eaeb5d875d22825fc267ef925.jpg b/docs/0.21.3/img/2490002eaeb5d875d22825fc267ef925.jpg deleted file mode 100644 index 55a33f3e00d4c1740d19afcf8b7c6c0f39a5cc0d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2490002eaeb5d875d22825fc267ef925.jpg and /dev/null differ diff --git a/docs/0.21.3/img/25a334612cb5a1736ebcc7eec00c7b29.jpg b/docs/0.21.3/img/25a334612cb5a1736ebcc7eec00c7b29.jpg deleted file mode 100644 index 2b0dccf1b3149fc5f21cf4fbe757408fb0da0150..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/25a334612cb5a1736ebcc7eec00c7b29.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2639e09c454322633772269753a50710.jpg b/docs/0.21.3/img/2639e09c454322633772269753a50710.jpg deleted file mode 100644 index 2db459b4c3b536c3023507d61a417e6a4d2228fe..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2639e09c454322633772269753a50710.jpg and /dev/null differ diff --git a/docs/0.21.3/img/264ba68c53c2e2867b9e307e8b940d49.jpg b/docs/0.21.3/img/264ba68c53c2e2867b9e307e8b940d49.jpg deleted file mode 100644 index e30ef39b136bcc0d1e3fda1ef9907c6bd6ac1a1f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/264ba68c53c2e2867b9e307e8b940d49.jpg and /dev/null differ diff --git a/docs/0.21.3/img/264dc5b617a5aa98151c4ea6975e9a90.jpg b/docs/0.21.3/img/264dc5b617a5aa98151c4ea6975e9a90.jpg deleted file mode 100644 index 3ee71a3e4fe4ffdf467ad4560386a32727c976c0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/264dc5b617a5aa98151c4ea6975e9a90.jpg and /dev/null differ diff --git a/docs/0.21.3/img/26f66401927461c0129b7f4ad33e5322.jpg b/docs/0.21.3/img/26f66401927461c0129b7f4ad33e5322.jpg deleted file mode 100644 index 87a52e2bf49cbad9c8254c33eb042b559628d917..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/26f66401927461c0129b7f4ad33e5322.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2736dbaab8f81e4cb2d0e388f2b0c6b2.jpg b/docs/0.21.3/img/2736dbaab8f81e4cb2d0e388f2b0c6b2.jpg deleted file mode 100644 index 394002ed41ac9c4a737366356d958bdddc9f500f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2736dbaab8f81e4cb2d0e388f2b0c6b2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/27449ee75d40c9391b04e2ca48c4d83b.jpg b/docs/0.21.3/img/27449ee75d40c9391b04e2ca48c4d83b.jpg deleted file mode 100644 index 49988c0117765b3378f1edb303fb36e64c87a4e0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/27449ee75d40c9391b04e2ca48c4d83b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/27eaae520bfaa9c4bdbef494c5029741.jpg b/docs/0.21.3/img/27eaae520bfaa9c4bdbef494c5029741.jpg deleted file mode 100644 index 021477b6ac536dc8e0d9b5b7d446f1beb344209c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/27eaae520bfaa9c4bdbef494c5029741.jpg and /dev/null differ diff --git a/docs/0.21.3/img/280a00b263d3144cd3a9c424ed44ee51.jpg b/docs/0.21.3/img/280a00b263d3144cd3a9c424ed44ee51.jpg deleted file mode 100644 index 666c414ae4d4d883ec2632270840fc837dfef6f0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/280a00b263d3144cd3a9c424ed44ee51.jpg and /dev/null differ diff --git a/docs/0.21.3/img/287e15c4b3d9b3f227fdc8e364609382.jpg b/docs/0.21.3/img/287e15c4b3d9b3f227fdc8e364609382.jpg deleted file mode 100644 index baac520be9978c28d01d2ca7cc621155ce1b8634..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/287e15c4b3d9b3f227fdc8e364609382.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2953c3498ec0877c5ebcc172050cce88.jpg b/docs/0.21.3/img/2953c3498ec0877c5ebcc172050cce88.jpg deleted file mode 100644 index 0a99430c5c9eef143be45c6257c58d0b8dcf4b4d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2953c3498ec0877c5ebcc172050cce88.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2a332823ff053f404ac53657eb86b1a0.jpg b/docs/0.21.3/img/2a332823ff053f404ac53657eb86b1a0.jpg deleted file mode 100644 index faac6c8a36f7977681d39bf849b6a7e5ff7e6e82..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2a332823ff053f404ac53657eb86b1a0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2a58cf81e4ccf9022d6033557d49aed5.jpg b/docs/0.21.3/img/2a58cf81e4ccf9022d6033557d49aed5.jpg deleted file mode 100644 index 369415f788dd28e498b5e1265ca81fd9c37c72e7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2a58cf81e4ccf9022d6033557d49aed5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2a96390b6e7eb8fc07579c2f9066fc4d.jpg b/docs/0.21.3/img/2a96390b6e7eb8fc07579c2f9066fc4d.jpg deleted file mode 100644 index 099677ab37f1c685fe87fe271ea7b27202ee3f65..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2a96390b6e7eb8fc07579c2f9066fc4d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2ad6b07024498864a0ce275913a42d9f.jpg b/docs/0.21.3/img/2ad6b07024498864a0ce275913a42d9f.jpg deleted file mode 100644 index 6af96b2871a91ad3a881ace193539c569661a0ba..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2ad6b07024498864a0ce275913a42d9f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2af4d75ca07ede34c7d38b8f7708723d.jpg b/docs/0.21.3/img/2af4d75ca07ede34c7d38b8f7708723d.jpg deleted file mode 100644 index 5a46289fd1cc2d1d9ecc09be79d252b29cc5047c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2af4d75ca07ede34c7d38b8f7708723d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2b0d9f09a2b8a107ace9ce7aa234481e.jpg b/docs/0.21.3/img/2b0d9f09a2b8a107ace9ce7aa234481e.jpg deleted file mode 100644 index da8fd0248feb2ccd0b4a5b4fc844ed460ffbecb4..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2b0d9f09a2b8a107ace9ce7aa234481e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2b117c8d0556a027e7ee3bb265a6bf63.jpg b/docs/0.21.3/img/2b117c8d0556a027e7ee3bb265a6bf63.jpg deleted file mode 100644 index e199513e88b3437dd0c90e2c2cf6d88a586178ca..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2b117c8d0556a027e7ee3bb265a6bf63.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2bd24ed32bcf24db79058c3cc81f5331.jpg b/docs/0.21.3/img/2bd24ed32bcf24db79058c3cc81f5331.jpg deleted file mode 100644 index cf9f836434e1de3ac41b768696fd1fd9348d93aa..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2bd24ed32bcf24db79058c3cc81f5331.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2bf67de05d37f31bd2154fdc96690102.jpg b/docs/0.21.3/img/2bf67de05d37f31bd2154fdc96690102.jpg deleted file mode 100644 index 692a2d4f9433816c4d4639b3bd7b5f0ae63e80e9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2bf67de05d37f31bd2154fdc96690102.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2c1da71c882c95ba6660cdad0d976f6d.jpg b/docs/0.21.3/img/2c1da71c882c95ba6660cdad0d976f6d.jpg deleted file mode 100644 index 03a210bfff10fc7023044056ba485c8ddf486f41..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2c1da71c882c95ba6660cdad0d976f6d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2c2dcc83fc38e46810a36e59b2614a5c.jpg b/docs/0.21.3/img/2c2dcc83fc38e46810a36e59b2614a5c.jpg deleted file mode 100644 index d11ccfa3e8e4e84998c0e567a64f7449bdeaa10a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2c2dcc83fc38e46810a36e59b2614a5c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2c90187d36ba884ee9ae4c99334fb3b4.jpg b/docs/0.21.3/img/2c90187d36ba884ee9ae4c99334fb3b4.jpg deleted file mode 100644 index 826f3950badc374b98822df3f36ddc509f387fe6..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2c90187d36ba884ee9ae4c99334fb3b4.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2ca002ed0f4e27f9040d3f3ec58fbb38.jpg b/docs/0.21.3/img/2ca002ed0f4e27f9040d3f3ec58fbb38.jpg deleted file mode 100644 index 7e080fa1157a858b3d836d533292f04568c51e2e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2ca002ed0f4e27f9040d3f3ec58fbb38.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2d3029206649000f40ed9f51bbeceafb.jpg b/docs/0.21.3/img/2d3029206649000f40ed9f51bbeceafb.jpg deleted file mode 100644 index 16b12d01d269c4104bb0e3eddc15e059a6c386d4..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2d3029206649000f40ed9f51bbeceafb.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2d4c303729e327500afa8bdb343713ff.jpg b/docs/0.21.3/img/2d4c303729e327500afa8bdb343713ff.jpg deleted file mode 100644 index c937989976907beb8f23eea9ba57efad7eb81b36..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2d4c303729e327500afa8bdb343713ff.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2d7a3ddf62ceb125c15ba1947173e790.jpg b/docs/0.21.3/img/2d7a3ddf62ceb125c15ba1947173e790.jpg deleted file mode 100644 index 8916c3a57d437b49bb64f5ac512cb38be80b1ed7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2d7a3ddf62ceb125c15ba1947173e790.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2e06713c93719ff874fb9f4fab7a6fbf.jpg b/docs/0.21.3/img/2e06713c93719ff874fb9f4fab7a6fbf.jpg deleted file mode 100644 index aa5dd78719b500861bd50de4e896926b8d1208e4..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2e06713c93719ff874fb9f4fab7a6fbf.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2e2461d59015f9759fa0612965e2425e.jpg b/docs/0.21.3/img/2e2461d59015f9759fa0612965e2425e.jpg deleted file mode 100644 index 69bd8f6769c19cfd5e648f77e858f5e561d554e8..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2e2461d59015f9759fa0612965e2425e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2edeef5a5007d4bd8b4f43fe2670cf85.jpg b/docs/0.21.3/img/2edeef5a5007d4bd8b4f43fe2670cf85.jpg deleted file mode 100644 index 2937d05920f2b6864a534dc6e11d65c89c7b1f52..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2edeef5a5007d4bd8b4f43fe2670cf85.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2f373d871220ee042a8c2ee44e6fff3a.jpg b/docs/0.21.3/img/2f373d871220ee042a8c2ee44e6fff3a.jpg deleted file mode 100644 index fdb2141c2bcf6fd219dc8c0b7a7a66bce447c9da..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2f373d871220ee042a8c2ee44e6fff3a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/2f6a285b749960084841d17c3c97f2d7.jpg b/docs/0.21.3/img/2f6a285b749960084841d17c3c97f2d7.jpg deleted file mode 100644 index bfcf1554282e043c1bbb28faa6cb6c1a635d742a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/2f6a285b749960084841d17c3c97f2d7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3001d4b4ed72087e1a6010f43c053cc6.jpg b/docs/0.21.3/img/3001d4b4ed72087e1a6010f43c053cc6.jpg deleted file mode 100644 index 0927bff7fc635fc4df407183598ce19c37c69c92..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3001d4b4ed72087e1a6010f43c053cc6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/300d1995dc6050bbfd575b2c14ec81ae.jpg b/docs/0.21.3/img/300d1995dc6050bbfd575b2c14ec81ae.jpg deleted file mode 100644 index eeead6ee858b3d512a2e48a54acfb49e7fd8874b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/300d1995dc6050bbfd575b2c14ec81ae.jpg and /dev/null differ diff --git a/docs/0.21.3/img/30641b10b766d35775b6bbb4d21e74b7.jpg b/docs/0.21.3/img/30641b10b766d35775b6bbb4d21e74b7.jpg deleted file mode 100644 index b1152e0816a2d8b3279b3d33411023849cbfb46d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/30641b10b766d35775b6bbb4d21e74b7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/30fc2a610fc7de5c19317e1fc584765f.jpg b/docs/0.21.3/img/30fc2a610fc7de5c19317e1fc584765f.jpg deleted file mode 100644 index 2d33f00ea7f21e06421a8cb205330553217880be..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/30fc2a610fc7de5c19317e1fc584765f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3109bc087a626380237668dfcc4ecd96.jpg b/docs/0.21.3/img/3109bc087a626380237668dfcc4ecd96.jpg deleted file mode 100644 index 4e6a798a5b7ee2271982b421e88a83e78789c2ef..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3109bc087a626380237668dfcc4ecd96.jpg and /dev/null differ diff --git a/docs/0.21.3/img/319e234a072e86b6b55ce431ca56b43e.jpg b/docs/0.21.3/img/319e234a072e86b6b55ce431ca56b43e.jpg deleted file mode 100644 index 132c3dca793f5632c2f47fb0dc5dec434444eb54..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/319e234a072e86b6b55ce431ca56b43e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/32246af90101d1607825a589ebea6880.jpg b/docs/0.21.3/img/32246af90101d1607825a589ebea6880.jpg deleted file mode 100644 index acf66cdab87ae21a44cafcb308138729bfa06e2a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/32246af90101d1607825a589ebea6880.jpg and /dev/null differ diff --git a/docs/0.21.3/img/32f500a4e2eba65727c1e003699dff90.jpg b/docs/0.21.3/img/32f500a4e2eba65727c1e003699dff90.jpg deleted file mode 100644 index 96a51a6bc8ce8c0ce4781f425390d952ffe2e78c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/32f500a4e2eba65727c1e003699dff90.jpg and /dev/null differ diff --git a/docs/0.21.3/img/337f0e255aa71dafb655629cb09a0c14.jpg b/docs/0.21.3/img/337f0e255aa71dafb655629cb09a0c14.jpg deleted file mode 100644 index 65d3752a04792463d9dc58381789a409bfa58be9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/337f0e255aa71dafb655629cb09a0c14.jpg and /dev/null differ diff --git a/docs/0.21.3/img/33a8ceddf8e3edfad259a804819c2637.jpg b/docs/0.21.3/img/33a8ceddf8e3edfad259a804819c2637.jpg deleted file mode 100644 index b2db114423dc429acce73442898265d36b8e9345..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/33a8ceddf8e3edfad259a804819c2637.jpg and /dev/null differ diff --git a/docs/0.21.3/img/33b1cdc0654561cadac36a1232552b99.jpg b/docs/0.21.3/img/33b1cdc0654561cadac36a1232552b99.jpg deleted file mode 100644 index 70f5cafeecaeb6b4e668be1a6acce66579ecced1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/33b1cdc0654561cadac36a1232552b99.jpg and /dev/null differ diff --git a/docs/0.21.3/img/33b99b5c21f0cf5b03e92fe60cbe6ad0.jpg b/docs/0.21.3/img/33b99b5c21f0cf5b03e92fe60cbe6ad0.jpg deleted file mode 100644 index f284530b51ddd9c5f9c8cacfde6ea0e7620362cb..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/33b99b5c21f0cf5b03e92fe60cbe6ad0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/33d1bf322bf0f6046a1145dbc264803b.jpg b/docs/0.21.3/img/33d1bf322bf0f6046a1145dbc264803b.jpg deleted file mode 100644 index d062d7acdfc75f0ef1dd25fffaa57a2267b176ea..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/33d1bf322bf0f6046a1145dbc264803b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/33eb0dacfcc0df16c84bfaed52d31859.jpg b/docs/0.21.3/img/33eb0dacfcc0df16c84bfaed52d31859.jpg deleted file mode 100644 index b796ba33e16e7487e816ce19476c8dc476209361..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/33eb0dacfcc0df16c84bfaed52d31859.jpg and /dev/null differ diff --git a/docs/0.21.3/img/33f1b6fb64999d2af571c675b7f17f34.jpg b/docs/0.21.3/img/33f1b6fb64999d2af571c675b7f17f34.jpg deleted file mode 100644 index 6ee1201309da260115ccc59b4e8338b6d2e8f445..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/33f1b6fb64999d2af571c675b7f17f34.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3405852dc63c9a78447d479784f1ee7e.jpg b/docs/0.21.3/img/3405852dc63c9a78447d479784f1ee7e.jpg deleted file mode 100644 index 8d82a04a78b41cfa50f0ebd8290ec7c0153cd6e9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3405852dc63c9a78447d479784f1ee7e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/341145ae3a937e5fa152262d13dc6fcf.jpg b/docs/0.21.3/img/341145ae3a937e5fa152262d13dc6fcf.jpg deleted file mode 100644 index 4962e53e4b74556b540f9740869e64b0c2ca2d80..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/341145ae3a937e5fa152262d13dc6fcf.jpg and /dev/null differ diff --git a/docs/0.21.3/img/343401666d8fc0aeeea395495b9dc570.jpg b/docs/0.21.3/img/343401666d8fc0aeeea395495b9dc570.jpg deleted file mode 100644 index 039b12903469366b23f36179fa7ec6d40e540dbb..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/343401666d8fc0aeeea395495b9dc570.jpg and /dev/null differ diff --git a/docs/0.21.3/img/345ab99b5a1246fb019e249dae570191.jpg b/docs/0.21.3/img/345ab99b5a1246fb019e249dae570191.jpg deleted file mode 100644 index 8ded4baab5f1758f1311564a6ac7c5a4ec3ac8e0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/345ab99b5a1246fb019e249dae570191.jpg and /dev/null differ diff --git a/docs/0.21.3/img/352bc5f9f9d6aefcdaf8deca4f7964ff.jpg b/docs/0.21.3/img/352bc5f9f9d6aefcdaf8deca4f7964ff.jpg deleted file mode 100644 index d2ea869eed0c964ab9333d46de1c46bb04519f73..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/352bc5f9f9d6aefcdaf8deca4f7964ff.jpg and /dev/null differ diff --git a/docs/0.21.3/img/355df435a05593b653d7d988c06e5d3c.jpg b/docs/0.21.3/img/355df435a05593b653d7d988c06e5d3c.jpg deleted file mode 100644 index 80cb2d654040d6e93f248f2ea8fcef789a6b55af..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/355df435a05593b653d7d988c06e5d3c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3579ce0b5c145fb891d865367eeba3ac.jpg b/docs/0.21.3/img/3579ce0b5c145fb891d865367eeba3ac.jpg deleted file mode 100644 index 23dad30e342d9a57297c1186f03fefe63936c1af..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3579ce0b5c145fb891d865367eeba3ac.jpg and /dev/null differ diff --git a/docs/0.21.3/img/35a2693b8dbfe5cf9335dc2659c6ef96.jpg b/docs/0.21.3/img/35a2693b8dbfe5cf9335dc2659c6ef96.jpg deleted file mode 100644 index 621423e8635d41cc65f23b4af95fa4502d2b5051..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/35a2693b8dbfe5cf9335dc2659c6ef96.jpg and /dev/null differ diff --git a/docs/0.21.3/img/35b3276dd7e50cda7dd79a91161a1a26.jpg b/docs/0.21.3/img/35b3276dd7e50cda7dd79a91161a1a26.jpg deleted file mode 100644 index 81f6390cdd364d57fe0b71a240247477e98eccaf..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/35b3276dd7e50cda7dd79a91161a1a26.jpg and /dev/null differ diff --git a/docs/0.21.3/img/362af37df82b07d11576fc5e45db7828.jpg b/docs/0.21.3/img/362af37df82b07d11576fc5e45db7828.jpg deleted file mode 100644 index 6a663dccbeb47ae7646c312111b381663e64b89f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/362af37df82b07d11576fc5e45db7828.jpg and /dev/null differ diff --git a/docs/0.21.3/img/36846302fd24ac609e0cfef5fe6f8678.jpg b/docs/0.21.3/img/36846302fd24ac609e0cfef5fe6f8678.jpg deleted file mode 100644 index e321dd8baf2144c523429ee46d36f11594e233ff..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/36846302fd24ac609e0cfef5fe6f8678.jpg and /dev/null differ diff --git a/docs/0.21.3/img/369b6e6bd43ee84fe99e14c8d78cdc9f.jpg b/docs/0.21.3/img/369b6e6bd43ee84fe99e14c8d78cdc9f.jpg deleted file mode 100644 index 66befbb866137ba305b94e117c7a787d91d467c0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/369b6e6bd43ee84fe99e14c8d78cdc9f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/36aff9afacf42a6a0b903bb6cd3409dc.jpg b/docs/0.21.3/img/36aff9afacf42a6a0b903bb6cd3409dc.jpg deleted file mode 100644 index 905041b93b5cb91b24dd12552e1ed67f0484b7e3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/36aff9afacf42a6a0b903bb6cd3409dc.jpg and /dev/null differ diff --git a/docs/0.21.3/img/36c2dba9ae7680cd09eff62c73e37963.jpg b/docs/0.21.3/img/36c2dba9ae7680cd09eff62c73e37963.jpg deleted file mode 100644 index a80c3a8bf1fc99b74b7889f6bed357728fbad5c7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/36c2dba9ae7680cd09eff62c73e37963.jpg and /dev/null differ diff --git a/docs/0.21.3/img/36f54997ff4df647587d1bfd2ddb3ee2.jpg b/docs/0.21.3/img/36f54997ff4df647587d1bfd2ddb3ee2.jpg deleted file mode 100644 index 6a3f14f8276ea4e6b3eba7563a5c13bb98e55265..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/36f54997ff4df647587d1bfd2ddb3ee2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/375fd0c32c15c4547b00ae36c0ec0a6a.jpg b/docs/0.21.3/img/375fd0c32c15c4547b00ae36c0ec0a6a.jpg deleted file mode 100644 index b0b02e19e54bd3e7bf09d0ba38ae9c1eb4abbe6b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/375fd0c32c15c4547b00ae36c0ec0a6a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3771db7af1e3b7bf33e15ec20d278f39.jpg b/docs/0.21.3/img/3771db7af1e3b7bf33e15ec20d278f39.jpg deleted file mode 100644 index 6c568266c7e2fc14b3e48d91b6c7dbb0a0966aab..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3771db7af1e3b7bf33e15ec20d278f39.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3776f899ba5f1d7432c553c6c3aae381.jpg b/docs/0.21.3/img/3776f899ba5f1d7432c553c6c3aae381.jpg deleted file mode 100644 index 0ec5f56917afed166306720586484ded7de019f0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3776f899ba5f1d7432c553c6c3aae381.jpg and /dev/null differ diff --git a/docs/0.21.3/img/377b02d08a6b388008fc8cb132080d20.jpg b/docs/0.21.3/img/377b02d08a6b388008fc8cb132080d20.jpg deleted file mode 100644 index a919565f7fc61c2e64f9f5bae54930e4bbcabe70..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/377b02d08a6b388008fc8cb132080d20.jpg and /dev/null differ diff --git a/docs/0.21.3/img/37e4251726a37bc02df4ef4390572e9a.jpg b/docs/0.21.3/img/37e4251726a37bc02df4ef4390572e9a.jpg deleted file mode 100644 index 9ce16280a71858bc58c2b59807020df7ff90d867..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/37e4251726a37bc02df4ef4390572e9a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/38320089278fc639e640f3f772eac6b1.jpg b/docs/0.21.3/img/38320089278fc639e640f3f772eac6b1.jpg deleted file mode 100644 index 2fcfa485d69e720a04ce1bdc77abba746fb3ead3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/38320089278fc639e640f3f772eac6b1.jpg and /dev/null differ diff --git a/docs/0.21.3/img/38437ee82743c886e2ebfbb5bd5e0c89.jpg b/docs/0.21.3/img/38437ee82743c886e2ebfbb5bd5e0c89.jpg deleted file mode 100644 index 5b804e96cd873ae014b010aa83024982e7142235..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/38437ee82743c886e2ebfbb5bd5e0c89.jpg and /dev/null differ diff --git a/docs/0.21.3/img/385a9104b38457eeb59acf86cf974472.jpg b/docs/0.21.3/img/385a9104b38457eeb59acf86cf974472.jpg deleted file mode 100644 index 76f5fe2803ed720dfedfe12e9058ceddace8cb19..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/385a9104b38457eeb59acf86cf974472.jpg and /dev/null differ diff --git a/docs/0.21.3/img/38a411931f9f49e71b888f7998427122.jpg b/docs/0.21.3/img/38a411931f9f49e71b888f7998427122.jpg deleted file mode 100644 index d121929f758ddc8cb6441a947f4847204665c513..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/38a411931f9f49e71b888f7998427122.jpg and /dev/null differ diff --git a/docs/0.21.3/img/390e2bdab30b6e7421082f13e8cfd6b0.jpg b/docs/0.21.3/img/390e2bdab30b6e7421082f13e8cfd6b0.jpg deleted file mode 100644 index ec2add5f7f2e25ea75bc4c44271b6d142d0efc70..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/390e2bdab30b6e7421082f13e8cfd6b0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3944d32654b4bf939d248b496f950b10.jpg b/docs/0.21.3/img/3944d32654b4bf939d248b496f950b10.jpg deleted file mode 100644 index b4e88fdae8e9c373f207fa8075522f1d81c6949c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3944d32654b4bf939d248b496f950b10.jpg and /dev/null differ diff --git a/docs/0.21.3/img/395ca6ce9617a4fc0695db973496d29b.jpg b/docs/0.21.3/img/395ca6ce9617a4fc0695db973496d29b.jpg deleted file mode 100644 index 8a6ce53b7db34804e74d243225b8fbd42a0efd72..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/395ca6ce9617a4fc0695db973496d29b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3a03009ea272ed427cfa033086b89c72.jpg b/docs/0.21.3/img/3a03009ea272ed427cfa033086b89c72.jpg deleted file mode 100644 index bdeac0bc7594e60d95eda5605e24009b7083c166..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3a03009ea272ed427cfa033086b89c72.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3a378bb516408c0bd771667be478b787.jpg b/docs/0.21.3/img/3a378bb516408c0bd771667be478b787.jpg deleted file mode 100644 index 555e216a9fa4238e49bd4daf1c8b08fe57211516..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3a378bb516408c0bd771667be478b787.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3a876d35f8a2c82a19a71b0fd52f7153.jpg b/docs/0.21.3/img/3a876d35f8a2c82a19a71b0fd52f7153.jpg deleted file mode 100644 index 81afe54279e4108947005c271666fb4e5160a650..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3a876d35f8a2c82a19a71b0fd52f7153.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3ad7487dba3ebdba90bc11d2016d0c99.jpg b/docs/0.21.3/img/3ad7487dba3ebdba90bc11d2016d0c99.jpg deleted file mode 100644 index 36900a359326b166b0da9f6e9e0b75ca241097cc..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3ad7487dba3ebdba90bc11d2016d0c99.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3ae54efdf60edfa32ccbe7388834b0f2.jpg b/docs/0.21.3/img/3ae54efdf60edfa32ccbe7388834b0f2.jpg deleted file mode 100644 index 74997a0e8d0497687555aea3c0874864a02fca59..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3ae54efdf60edfa32ccbe7388834b0f2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3af1cb0026efe5789c3acf3669ff5bc6.jpg b/docs/0.21.3/img/3af1cb0026efe5789c3acf3669ff5bc6.jpg deleted file mode 100644 index 9156798b173edbeef0e16dcd638f472c568a7cda..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3af1cb0026efe5789c3acf3669ff5bc6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3b1e10150e98ef95e977c12ad0607620.jpg b/docs/0.21.3/img/3b1e10150e98ef95e977c12ad0607620.jpg deleted file mode 100644 index c985129063f33b4c0560e5c262253c5ab7d1ccee..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3b1e10150e98ef95e977c12ad0607620.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3b70a99c882760b6d8ed230e145ed742.jpg b/docs/0.21.3/img/3b70a99c882760b6d8ed230e145ed742.jpg deleted file mode 100644 index 1b0025ecd2e6e82e65d61f5b54cffda037b5d7ac..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3b70a99c882760b6d8ed230e145ed742.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3b87b19c6aee2b7c40b6ede968a45c07.jpg b/docs/0.21.3/img/3b87b19c6aee2b7c40b6ede968a45c07.jpg deleted file mode 100644 index d6af676dd07bca26fdae14c5d0584bce7baea383..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3b87b19c6aee2b7c40b6ede968a45c07.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3bdd2a9b74f6a2e0db32e159c63ffec0.jpg b/docs/0.21.3/img/3bdd2a9b74f6a2e0db32e159c63ffec0.jpg deleted file mode 100644 index 2cbcf5f1e2d07280e9492b67b36eb15d0a4a8002..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3bdd2a9b74f6a2e0db32e159c63ffec0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3bf32d926cdf24f440b6b831f0d9cc37.jpg b/docs/0.21.3/img/3bf32d926cdf24f440b6b831f0d9cc37.jpg deleted file mode 100644 index b1566b8161aa7bd4b564be71e972653dfb0bfd0f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3bf32d926cdf24f440b6b831f0d9cc37.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3cc550ecff73666ed35ae1efee48b4f4.jpg b/docs/0.21.3/img/3cc550ecff73666ed35ae1efee48b4f4.jpg deleted file mode 100644 index d24c0f3f0e7d4221b923bd7f9a860b12e4799a06..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3cc550ecff73666ed35ae1efee48b4f4.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3cca81fd08a4732dc7061cd246b323ed.jpg b/docs/0.21.3/img/3cca81fd08a4732dc7061cd246b323ed.jpg deleted file mode 100644 index b39841d9e8f1c1c8b0f13a09700c236ee5c7942e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3cca81fd08a4732dc7061cd246b323ed.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3d43f503466701e58ca2d516de2db505.jpg b/docs/0.21.3/img/3d43f503466701e58ca2d516de2db505.jpg deleted file mode 100644 index 3e7f32e53630c680a76f19ceb8b7c5f88fb61e15..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3d43f503466701e58ca2d516de2db505.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3d4ce0d796d2662b24eb8fa7b4f9710c.jpg b/docs/0.21.3/img/3d4ce0d796d2662b24eb8fa7b4f9710c.jpg deleted file mode 100644 index 5b75fe4a912feceefc02044831649c8b3f0eb25d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3d4ce0d796d2662b24eb8fa7b4f9710c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3d52bf36b893b26195748e89c94273f0.jpg b/docs/0.21.3/img/3d52bf36b893b26195748e89c94273f0.jpg deleted file mode 100644 index c827dfa02d4126ed9410795e89d9e649cd41ad43..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3d52bf36b893b26195748e89c94273f0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3d59995ed97bdad674b6afd6fbd928ec.jpg b/docs/0.21.3/img/3d59995ed97bdad674b6afd6fbd928ec.jpg deleted file mode 100644 index 29fa193e385a9fe03e637f6eeb09fb7f28dea6fd..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3d59995ed97bdad674b6afd6fbd928ec.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3dae1c97513f643047c2e33ee90ca8b5.jpg b/docs/0.21.3/img/3dae1c97513f643047c2e33ee90ca8b5.jpg deleted file mode 100644 index 530f29ea7a84ebc0104d22c85807391e4a28b222..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3dae1c97513f643047c2e33ee90ca8b5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3e0dffeddefe6ba1e809bd9b6276c771.jpg b/docs/0.21.3/img/3e0dffeddefe6ba1e809bd9b6276c771.jpg deleted file mode 100644 index 0dfeb799c262fa61ab78746abac514e43e597606..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3e0dffeddefe6ba1e809bd9b6276c771.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3e233cefc937a43bb4481dd23d728b54.jpg b/docs/0.21.3/img/3e233cefc937a43bb4481dd23d728b54.jpg deleted file mode 100644 index 3f5cba47118591f48c8f2990689fc367f4022ad0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3e233cefc937a43bb4481dd23d728b54.jpg and /dev/null differ diff --git a/docs/0.21.3/img/3f5adc0c9b0e51a0759ed6ac49f94431.jpg b/docs/0.21.3/img/3f5adc0c9b0e51a0759ed6ac49f94431.jpg deleted file mode 100644 index 64671f3b34b9f68260e6b14f6e6285d3779e6078..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/3f5adc0c9b0e51a0759ed6ac49f94431.jpg and /dev/null differ diff --git a/docs/0.21.3/img/401b1228a76ba9190680851b9d095653.jpg b/docs/0.21.3/img/401b1228a76ba9190680851b9d095653.jpg deleted file mode 100644 index ab16d694a3d775282cd09216e44eb514cc67ef36..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/401b1228a76ba9190680851b9d095653.jpg and /dev/null differ diff --git a/docs/0.21.3/img/403595258114953d3411fd1bfbf335f8.jpg b/docs/0.21.3/img/403595258114953d3411fd1bfbf335f8.jpg deleted file mode 100644 index ceafb51609ff2e1dac35b501c67915a0f230979a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/403595258114953d3411fd1bfbf335f8.jpg and /dev/null differ diff --git a/docs/0.21.3/img/405095229d24f3525298dc6f99077666.jpg b/docs/0.21.3/img/405095229d24f3525298dc6f99077666.jpg deleted file mode 100644 index 7ac77d5c25d7b25ea3f6e78e2bef450dfe5d971f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/405095229d24f3525298dc6f99077666.jpg and /dev/null differ diff --git a/docs/0.21.3/img/407341c3d4d055b857bb3229003b9daf.jpg b/docs/0.21.3/img/407341c3d4d055b857bb3229003b9daf.jpg deleted file mode 100644 index d629389a800b0e7a501933156e22d15a2155b55a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/407341c3d4d055b857bb3229003b9daf.jpg and /dev/null differ diff --git a/docs/0.21.3/img/412f5988c3736daa68f47a0dc9fba659.jpg b/docs/0.21.3/img/412f5988c3736daa68f47a0dc9fba659.jpg deleted file mode 100644 index 20ac27ea2e8f5f0310895d9633167886e77ddc34..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/412f5988c3736daa68f47a0dc9fba659.jpg and /dev/null differ diff --git a/docs/0.21.3/img/418f3dbcb32031257a948ec23d05e53e.jpg b/docs/0.21.3/img/418f3dbcb32031257a948ec23d05e53e.jpg deleted file mode 100644 index 3c2adffe2ff3990d308d87b8e70f5460c5f9b044..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/418f3dbcb32031257a948ec23d05e53e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/41c9612e6e74708a274b11f770810663.jpg b/docs/0.21.3/img/41c9612e6e74708a274b11f770810663.jpg deleted file mode 100644 index a9706b544eb03447d89fee6b5cf50655ac037a3f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/41c9612e6e74708a274b11f770810663.jpg and /dev/null differ diff --git a/docs/0.21.3/img/423f64b70bdfeba3566e0bbcca01c277.jpg b/docs/0.21.3/img/423f64b70bdfeba3566e0bbcca01c277.jpg deleted file mode 100644 index b92ecdbc587f33cc62816681d42eff983a729864..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/423f64b70bdfeba3566e0bbcca01c277.jpg and /dev/null differ diff --git a/docs/0.21.3/img/4246a718076893e37084bc69a7e16007.jpg b/docs/0.21.3/img/4246a718076893e37084bc69a7e16007.jpg deleted file mode 100644 index 37af60936f2290df90f48caa256ed8eabdb298d5..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/4246a718076893e37084bc69a7e16007.jpg and /dev/null differ diff --git a/docs/0.21.3/img/42edb18b0951c4f7ab739e5c24bf9ba3.jpg b/docs/0.21.3/img/42edb18b0951c4f7ab739e5c24bf9ba3.jpg deleted file mode 100644 index 368e7421b62b113519b8bdf9e296f39e3f70223c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/42edb18b0951c4f7ab739e5c24bf9ba3.jpg and /dev/null differ diff --git a/docs/0.21.3/img/42f93b2b294f585223e6c663f86504d0.jpg b/docs/0.21.3/img/42f93b2b294f585223e6c663f86504d0.jpg deleted file mode 100644 index 16d82262b484731997bd1079070fd3c9fd027071..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/42f93b2b294f585223e6c663f86504d0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/433674c5864f3cec96b82f9e63b80fb7.jpg b/docs/0.21.3/img/433674c5864f3cec96b82f9e63b80fb7.jpg deleted file mode 100644 index 3887c1ef32f0f71e8da7d767b50c63f43674d4ff..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/433674c5864f3cec96b82f9e63b80fb7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/433fedd575581cddbd612624b65e5dac.jpg b/docs/0.21.3/img/433fedd575581cddbd612624b65e5dac.jpg deleted file mode 100644 index f0605e3d3ebfedcc704f965d2b3e4cefca269026..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/433fedd575581cddbd612624b65e5dac.jpg and /dev/null differ diff --git a/docs/0.21.3/img/4341393efadcef482cea0dd54509e011.jpg b/docs/0.21.3/img/4341393efadcef482cea0dd54509e011.jpg deleted file mode 100644 index 132cebddad20333eed1f3ed8aec4af26d4f45f7d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/4341393efadcef482cea0dd54509e011.jpg and /dev/null differ diff --git a/docs/0.21.3/img/43996aff9311511e6e2f81912a249c7e.jpg b/docs/0.21.3/img/43996aff9311511e6e2f81912a249c7e.jpg deleted file mode 100644 index df2e8827698ff720c0d359724017f1a535ce10cf..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/43996aff9311511e6e2f81912a249c7e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/43c1fea57579e54f80c0535bc582626f.jpg b/docs/0.21.3/img/43c1fea57579e54f80c0535bc582626f.jpg deleted file mode 100644 index 100389ee10edde4ed4e7ad78b61d9ff931e76a38..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/43c1fea57579e54f80c0535bc582626f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/43e13b580daefe5ba754b790dfbd216c.jpg b/docs/0.21.3/img/43e13b580daefe5ba754b790dfbd216c.jpg deleted file mode 100644 index afc7f806492f37595dda661b844bbb6c43bf3aef..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/43e13b580daefe5ba754b790dfbd216c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/43fc75930300610d8cb41a8d15899c15.jpg b/docs/0.21.3/img/43fc75930300610d8cb41a8d15899c15.jpg deleted file mode 100644 index b2c86fa07e0fb3dd78888decc27fe8dcaa683d9a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/43fc75930300610d8cb41a8d15899c15.jpg and /dev/null differ diff --git a/docs/0.21.3/img/43fc8286f3bb11d7c8eb1e83e6538ac6.jpg b/docs/0.21.3/img/43fc8286f3bb11d7c8eb1e83e6538ac6.jpg deleted file mode 100644 index b65882e0b8f02e197f51adb73e30fa3c9fcd71ef..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/43fc8286f3bb11d7c8eb1e83e6538ac6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/446d6d36c20a79508f1cc84c737a597b.jpg b/docs/0.21.3/img/446d6d36c20a79508f1cc84c737a597b.jpg deleted file mode 100644 index 0ccb6549cefcfa6751243a5fbd2891173ebff325..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/446d6d36c20a79508f1cc84c737a597b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/451ef7ed1a14a6cdc38324c8a5c7c683.jpg b/docs/0.21.3/img/451ef7ed1a14a6cdc38324c8a5c7c683.jpg deleted file mode 100644 index 509daaa8a607900f3630d88d3dd5371c219cfa31..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/451ef7ed1a14a6cdc38324c8a5c7c683.jpg and /dev/null differ diff --git a/docs/0.21.3/img/45c6e9fedc8fe61dd8d3f388a0464d30.jpg b/docs/0.21.3/img/45c6e9fedc8fe61dd8d3f388a0464d30.jpg deleted file mode 100644 index 5f09d6735998ed8a19d27584f9fe52f90507c89c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/45c6e9fedc8fe61dd8d3f388a0464d30.jpg and /dev/null differ diff --git a/docs/0.21.3/img/45e0e70e4566592b549e6835d6cba2a8.jpg b/docs/0.21.3/img/45e0e70e4566592b549e6835d6cba2a8.jpg deleted file mode 100644 index 74550a4cbe08a82009e4dc36dfb560c223cf1d59..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/45e0e70e4566592b549e6835d6cba2a8.jpg and /dev/null differ diff --git a/docs/0.21.3/img/4609693b88f682790da8203535625471.jpg b/docs/0.21.3/img/4609693b88f682790da8203535625471.jpg deleted file mode 100644 index a85dda94698004ce5ed6a4043d1898fb1e458cb8..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/4609693b88f682790da8203535625471.jpg and /dev/null differ diff --git a/docs/0.21.3/img/468283fb7514d3373112cb7db7c43356.jpg b/docs/0.21.3/img/468283fb7514d3373112cb7db7c43356.jpg deleted file mode 100644 index d2c45b5ec5342e6d044f1eb88237ab40116e0179..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/468283fb7514d3373112cb7db7c43356.jpg and /dev/null differ diff --git a/docs/0.21.3/img/46cc434e4ffc05f8d38712603b34bf7f.jpg b/docs/0.21.3/img/46cc434e4ffc05f8d38712603b34bf7f.jpg deleted file mode 100644 index 4812c02e4082da644a261725563972a62cd69186..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/46cc434e4ffc05f8d38712603b34bf7f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/47738e3e36a9bddb5bc708e8fc666204.jpg b/docs/0.21.3/img/47738e3e36a9bddb5bc708e8fc666204.jpg deleted file mode 100644 index d22996493bdd6e5ac0f2c63a5cd5c920affff772..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/47738e3e36a9bddb5bc708e8fc666204.jpg and /dev/null differ diff --git a/docs/0.21.3/img/47d90c837620a14d53233bae4fe8fe57.jpg b/docs/0.21.3/img/47d90c837620a14d53233bae4fe8fe57.jpg deleted file mode 100644 index e7dfcf2c7ded5cb8fb8dcc283be5777738087532..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/47d90c837620a14d53233bae4fe8fe57.jpg and /dev/null differ diff --git a/docs/0.21.3/img/48a36c240dcfa54de5ea4cc6250087fa.jpg b/docs/0.21.3/img/48a36c240dcfa54de5ea4cc6250087fa.jpg deleted file mode 100644 index ccca6f5e313f6f03a2c251aef662a6cf3984f311..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/48a36c240dcfa54de5ea4cc6250087fa.jpg and /dev/null differ diff --git a/docs/0.21.3/img/48cf684e54ca494e275074761259069c.jpg b/docs/0.21.3/img/48cf684e54ca494e275074761259069c.jpg deleted file mode 100644 index 357aac9f269ef3d03ce84fb07249b6a6c0847225..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/48cf684e54ca494e275074761259069c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/4953c9da8999e3eb76b63a4dd0432896.jpg b/docs/0.21.3/img/4953c9da8999e3eb76b63a4dd0432896.jpg deleted file mode 100644 index 6a5054c34f6e352478d9111fbb084f9808177815..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/4953c9da8999e3eb76b63a4dd0432896.jpg and /dev/null differ diff --git a/docs/0.21.3/img/499e262369261799dec950eb33da9ccf.jpg b/docs/0.21.3/img/499e262369261799dec950eb33da9ccf.jpg deleted file mode 100644 index 5742fdf73cd481625d1d9eb3190d79b2e4ca49bf..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/499e262369261799dec950eb33da9ccf.jpg and /dev/null differ diff --git a/docs/0.21.3/img/49b0512284893ed2ca56a2b8c0b7d0b5.jpg b/docs/0.21.3/img/49b0512284893ed2ca56a2b8c0b7d0b5.jpg deleted file mode 100644 index 3c18162fdbe8ad496b2a0922ce74e62e60e9b554..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/49b0512284893ed2ca56a2b8c0b7d0b5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/4a22ca544916918b2358e5fc7c71b8e6.jpg b/docs/0.21.3/img/4a22ca544916918b2358e5fc7c71b8e6.jpg deleted file mode 100644 index 22b6fb8e4c336621616cd267990dbce92b93ed9e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/4a22ca544916918b2358e5fc7c71b8e6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/4a733ee899c074bde7a4d5292c9fc83e.jpg b/docs/0.21.3/img/4a733ee899c074bde7a4d5292c9fc83e.jpg deleted file mode 100644 index 6752982ed74b2d6a5c2d2aeb5e75f1dfbe439783..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/4a733ee899c074bde7a4d5292c9fc83e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/4aafe42b7f9cf8d06d93b9246d01bbfd.jpg b/docs/0.21.3/img/4aafe42b7f9cf8d06d93b9246d01bbfd.jpg deleted file mode 100644 index 032a6e207f055be214b50c7e46016354128d1478..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/4aafe42b7f9cf8d06d93b9246d01bbfd.jpg and /dev/null differ diff --git a/docs/0.21.3/img/4b3d9c4467b467af3714ba45c54e5c2e.jpg b/docs/0.21.3/img/4b3d9c4467b467af3714ba45c54e5c2e.jpg deleted file mode 100644 index 8d9fa77703d8b6160fa8cd651aa08cc4a1cb07ac..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/4b3d9c4467b467af3714ba45c54e5c2e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/4b64f9acb85d7f2b6169e5a58f255e44.jpg b/docs/0.21.3/img/4b64f9acb85d7f2b6169e5a58f255e44.jpg deleted file mode 100644 index 9b352bb08ee2cf3ba504ed43c29011b87ba7843a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/4b64f9acb85d7f2b6169e5a58f255e44.jpg and /dev/null differ diff --git a/docs/0.21.3/img/4b6d782a67ac392e97215c46b7590bf7.jpg b/docs/0.21.3/img/4b6d782a67ac392e97215c46b7590bf7.jpg deleted file mode 100644 index 19123badbea19c3ec1d28ce2dc61947f8b8c4142..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/4b6d782a67ac392e97215c46b7590bf7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/4bb6ac59e053fd48275c31c9af35b2d1.jpg b/docs/0.21.3/img/4bb6ac59e053fd48275c31c9af35b2d1.jpg deleted file mode 100644 index d5965560966cc8220aae0fc53f6c597838ed9eac..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/4bb6ac59e053fd48275c31c9af35b2d1.jpg and /dev/null differ diff --git a/docs/0.21.3/img/4bcd849c1a2c10ab9857df1dc223e175.jpg b/docs/0.21.3/img/4bcd849c1a2c10ab9857df1dc223e175.jpg deleted file mode 100644 index 2cf499825c20dcd75ad38a81f2a4272bf7101e08..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/4bcd849c1a2c10ab9857df1dc223e175.jpg and /dev/null differ diff --git a/docs/0.21.3/img/4bfe956324cef23278c5192b0fb8029b.jpg b/docs/0.21.3/img/4bfe956324cef23278c5192b0fb8029b.jpg deleted file mode 100644 index 2578a669c2e27f079d2595994e4268ff2f75930b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/4bfe956324cef23278c5192b0fb8029b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/4c0a0003e110c44c538fbf113c159a3a.jpg b/docs/0.21.3/img/4c0a0003e110c44c538fbf113c159a3a.jpg deleted file mode 100644 index 754a48611470169e7d44a9c8fd14ee9fdb82c21c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/4c0a0003e110c44c538fbf113c159a3a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/4d1bc681619acee3db7da4d570bcb4cd.jpg b/docs/0.21.3/img/4d1bc681619acee3db7da4d570bcb4cd.jpg deleted file mode 100644 index 72643d170a74b6990916878d56f8fe89d6117157..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/4d1bc681619acee3db7da4d570bcb4cd.jpg and /dev/null differ diff --git a/docs/0.21.3/img/4d831898e5c564ee2d4df9fa647a97ce.jpg b/docs/0.21.3/img/4d831898e5c564ee2d4df9fa647a97ce.jpg deleted file mode 100644 index d12a5d8e1585aac605f977a7380cefe3fe9a6e96..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/4d831898e5c564ee2d4df9fa647a97ce.jpg and /dev/null differ diff --git a/docs/0.21.3/img/4dee38783cbd4faef5d5639ce23a5c59.jpg b/docs/0.21.3/img/4dee38783cbd4faef5d5639ce23a5c59.jpg deleted file mode 100644 index c201a82bed1fe0c8c7a39514747ecb62eb5909e9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/4dee38783cbd4faef5d5639ce23a5c59.jpg and /dev/null differ diff --git a/docs/0.21.3/img/4e0d8935ff82f26fc3a46a3202bd1fa3.jpg b/docs/0.21.3/img/4e0d8935ff82f26fc3a46a3202bd1fa3.jpg deleted file mode 100644 index 83237b881430498c2e6b36d793031712bd2803be..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/4e0d8935ff82f26fc3a46a3202bd1fa3.jpg and /dev/null differ diff --git a/docs/0.21.3/img/4e6d5ce51d78cff57187dc09b6710a7c.jpg b/docs/0.21.3/img/4e6d5ce51d78cff57187dc09b6710a7c.jpg deleted file mode 100644 index 10cefc0d45ac98fe3a8c4e7e26d1c256aaadf7e3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/4e6d5ce51d78cff57187dc09b6710a7c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/4ee9f6c666393981b6458e54c3ec89d0.jpg b/docs/0.21.3/img/4ee9f6c666393981b6458e54c3ec89d0.jpg deleted file mode 100644 index 0275d3156aa770f7bf72676f28b7ccc5f592ab2c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/4ee9f6c666393981b6458e54c3ec89d0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/4f11727a275459ce82826a9e02800c28.jpg b/docs/0.21.3/img/4f11727a275459ce82826a9e02800c28.jpg deleted file mode 100644 index ec946b86f8abb00f617e6f045e2f6fc079fe6938..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/4f11727a275459ce82826a9e02800c28.jpg and /dev/null differ diff --git a/docs/0.21.3/img/4f8138b00b37d9734bb93aec7e00ac5e.jpg b/docs/0.21.3/img/4f8138b00b37d9734bb93aec7e00ac5e.jpg deleted file mode 100644 index 4de999d115451ad228f65d0c2f55ad70cd40d366..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/4f8138b00b37d9734bb93aec7e00ac5e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/500efeff217bde3e862144e9bc90b049.jpg b/docs/0.21.3/img/500efeff217bde3e862144e9bc90b049.jpg deleted file mode 100644 index f8b13d40688c4e1fa60887c7ce709b2e280b4596..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/500efeff217bde3e862144e9bc90b049.jpg and /dev/null differ diff --git a/docs/0.21.3/img/502926bb104c175c6f3e809b0207830c.jpg b/docs/0.21.3/img/502926bb104c175c6f3e809b0207830c.jpg deleted file mode 100644 index ae0bb8ac73b63cf5a70e03d7ab6738b908bcffe4..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/502926bb104c175c6f3e809b0207830c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/505ffca1dc9570f24fd66272d18abb1f.jpg b/docs/0.21.3/img/505ffca1dc9570f24fd66272d18abb1f.jpg deleted file mode 100644 index 976b7d6beca8679a796a1061d4b4ef297fa63f2c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/505ffca1dc9570f24fd66272d18abb1f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5062c88fba7988fa39aca3bc91857721.jpg b/docs/0.21.3/img/5062c88fba7988fa39aca3bc91857721.jpg deleted file mode 100644 index b8e7433252c88741fcfab53210377cbde7c36c56..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5062c88fba7988fa39aca3bc91857721.jpg and /dev/null differ diff --git a/docs/0.21.3/img/507fd1a87cb6a0196c0203a0af5e9bbb.jpg b/docs/0.21.3/img/507fd1a87cb6a0196c0203a0af5e9bbb.jpg deleted file mode 100644 index 4b054056f7958b94f5f4b195e8ac263280a0ff93..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/507fd1a87cb6a0196c0203a0af5e9bbb.jpg and /dev/null differ diff --git a/docs/0.21.3/img/50bc02ed6fb21594c72e30d1a33bbf89.jpg b/docs/0.21.3/img/50bc02ed6fb21594c72e30d1a33bbf89.jpg deleted file mode 100644 index ce7920fcf78b9254a7e77dd99332e74c2c4bdf69..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/50bc02ed6fb21594c72e30d1a33bbf89.jpg and /dev/null differ diff --git a/docs/0.21.3/img/50eda5a92ebcfda1468e1508393b748a.jpg b/docs/0.21.3/img/50eda5a92ebcfda1468e1508393b748a.jpg deleted file mode 100644 index c7a9e2a4ed3b13d1a966bbc4ce3c3602301579a3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/50eda5a92ebcfda1468e1508393b748a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/515ee7781876d7344cc383bb43cb30ea.jpg b/docs/0.21.3/img/515ee7781876d7344cc383bb43cb30ea.jpg deleted file mode 100644 index b16ca61a383935443150dbd196b93f837f412c5d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/515ee7781876d7344cc383bb43cb30ea.jpg and /dev/null differ diff --git a/docs/0.21.3/img/51d052e3e4c7f694f3c05eb4159ba243.jpg b/docs/0.21.3/img/51d052e3e4c7f694f3c05eb4159ba243.jpg deleted file mode 100644 index 4e157ae947f95c69b56d7a968369bb0439d2f1fa..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/51d052e3e4c7f694f3c05eb4159ba243.jpg and /dev/null differ diff --git a/docs/0.21.3/img/51d70ae60903891457d75099cc46e450.jpg b/docs/0.21.3/img/51d70ae60903891457d75099cc46e450.jpg deleted file mode 100644 index 1958bb5731b965116c9edf8a83ad127ba8cae541..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/51d70ae60903891457d75099cc46e450.jpg and /dev/null differ diff --git a/docs/0.21.3/img/51fa9007646861e0569f8f66731c64e7.jpg b/docs/0.21.3/img/51fa9007646861e0569f8f66731c64e7.jpg deleted file mode 100644 index e47fb283426bad9db4982485b68a1a926d819790..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/51fa9007646861e0569f8f66731c64e7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/520d26d427ec8afe74b5538d779f5f49.jpg b/docs/0.21.3/img/520d26d427ec8afe74b5538d779f5f49.jpg deleted file mode 100644 index c37b12d43c624ae4cf778bdf81e2560da7923615..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/520d26d427ec8afe74b5538d779f5f49.jpg and /dev/null differ diff --git a/docs/0.21.3/img/522bc8957a5d77edbdc533813dbef086.jpg b/docs/0.21.3/img/522bc8957a5d77edbdc533813dbef086.jpg deleted file mode 100644 index 5e9478689074d2a5256c08bce8f384b1ea6f5edd..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/522bc8957a5d77edbdc533813dbef086.jpg and /dev/null differ diff --git a/docs/0.21.3/img/52654d94cd29c421bad069f802bb69c4.jpg b/docs/0.21.3/img/52654d94cd29c421bad069f802bb69c4.jpg deleted file mode 100644 index 9d9435d57112da8d3d89551a7b9a39369564b675..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/52654d94cd29c421bad069f802bb69c4.jpg and /dev/null differ diff --git a/docs/0.21.3/img/526e2da298d085b5fd557f49433d4143.jpg b/docs/0.21.3/img/526e2da298d085b5fd557f49433d4143.jpg deleted file mode 100644 index cf97bfbf229ed33846bdff9afb7452ec0d18f03b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/526e2da298d085b5fd557f49433d4143.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5303ecbc70bf5189b8785555c03c54ee.jpg b/docs/0.21.3/img/5303ecbc70bf5189b8785555c03c54ee.jpg deleted file mode 100644 index c4284333038007a88d7c86a625d2acbad1366be1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5303ecbc70bf5189b8785555c03c54ee.jpg and /dev/null differ diff --git a/docs/0.21.3/img/533e54759d696211ebe7819cc107d3bc.jpg b/docs/0.21.3/img/533e54759d696211ebe7819cc107d3bc.jpg deleted file mode 100644 index 7416cf4a0784cfe397c1bf10f7ce00d599395554..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/533e54759d696211ebe7819cc107d3bc.jpg and /dev/null differ diff --git a/docs/0.21.3/img/535f86af715e90b9c394e3cbf53d99eb.jpg b/docs/0.21.3/img/535f86af715e90b9c394e3cbf53d99eb.jpg deleted file mode 100644 index 0e048bf59b265658cd39aad034d22a40a6640bca..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/535f86af715e90b9c394e3cbf53d99eb.jpg and /dev/null differ diff --git a/docs/0.21.3/img/53f6b3d47807f65fe25b4fa232cd7abc.jpg b/docs/0.21.3/img/53f6b3d47807f65fe25b4fa232cd7abc.jpg deleted file mode 100644 index dd879636982e9ae979d90816dd4335eeb4a1c45b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/53f6b3d47807f65fe25b4fa232cd7abc.jpg and /dev/null differ diff --git a/docs/0.21.3/img/53fd9843c9af9a7ea05df92bce997456.jpg b/docs/0.21.3/img/53fd9843c9af9a7ea05df92bce997456.jpg deleted file mode 100644 index c0ed1381a695842a1c8f9f913a65b7a7727e0d14..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/53fd9843c9af9a7ea05df92bce997456.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5421b26a31de754ee8d186d038006fa3.jpg b/docs/0.21.3/img/5421b26a31de754ee8d186d038006fa3.jpg deleted file mode 100644 index d36ecea87b3f52ee29a3868da91b43d2d98a1a7e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5421b26a31de754ee8d186d038006fa3.jpg and /dev/null differ diff --git a/docs/0.21.3/img/55f40b1e092983fff81024042966adec.jpg b/docs/0.21.3/img/55f40b1e092983fff81024042966adec.jpg deleted file mode 100644 index 053b1fdbef91bb1d6f561f0661527cc1b048af8e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/55f40b1e092983fff81024042966adec.jpg and /dev/null differ diff --git a/docs/0.21.3/img/55f44df097de0ddde791d3084a69a1bf.jpg b/docs/0.21.3/img/55f44df097de0ddde791d3084a69a1bf.jpg deleted file mode 100644 index 9a51abbc05255ad9757a6f0136f133826bd31b34..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/55f44df097de0ddde791d3084a69a1bf.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5656d5270c0ee866d09e2b271ed04a67.jpg b/docs/0.21.3/img/5656d5270c0ee866d09e2b271ed04a67.jpg deleted file mode 100644 index b51ab443d5de275283733ae8f6e6a2e0aa435f95..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5656d5270c0ee866d09e2b271ed04a67.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5679f1fec5dfb7ab05db5e5aa9fa11a2.jpg b/docs/0.21.3/img/5679f1fec5dfb7ab05db5e5aa9fa11a2.jpg deleted file mode 100644 index b2e08773f3a0d4a4b89c860f14a583cfaf5126df..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5679f1fec5dfb7ab05db5e5aa9fa11a2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/56c751b0714a570fdcef0caf63f81580.jpg b/docs/0.21.3/img/56c751b0714a570fdcef0caf63f81580.jpg deleted file mode 100644 index b24294ec6d5a1bab958fe62353e07f71474f820b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/56c751b0714a570fdcef0caf63f81580.jpg and /dev/null differ diff --git a/docs/0.21.3/img/572f614c4b9bc376ebbf6ca259b6558e.jpg b/docs/0.21.3/img/572f614c4b9bc376ebbf6ca259b6558e.jpg deleted file mode 100644 index 5b0d81fdcb06b231babe95136dee64a92098abe8..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/572f614c4b9bc376ebbf6ca259b6558e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/578c95150175e4efdf851fe66d503079.jpg b/docs/0.21.3/img/578c95150175e4efdf851fe66d503079.jpg deleted file mode 100644 index 2e1d76b0f732eed9630c459e0f0efc7e78d9336b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/578c95150175e4efdf851fe66d503079.jpg and /dev/null differ diff --git a/docs/0.21.3/img/57e15e43b846791e47a202e1a9a5d8ce.jpg b/docs/0.21.3/img/57e15e43b846791e47a202e1a9a5d8ce.jpg deleted file mode 100644 index 775899f4d8c904ef864df62e8a159d9e10edcc81..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/57e15e43b846791e47a202e1a9a5d8ce.jpg and /dev/null differ diff --git a/docs/0.21.3/img/580270908cf4e5ba3907b7267fcfbb44.jpg b/docs/0.21.3/img/580270908cf4e5ba3907b7267fcfbb44.jpg deleted file mode 100644 index d272ea53df36cccc4012d9a4677ffd90bbf20b51..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/580270908cf4e5ba3907b7267fcfbb44.jpg and /dev/null differ diff --git a/docs/0.21.3/img/587f27ca8cf947779c1929d65c697e0c.jpg b/docs/0.21.3/img/587f27ca8cf947779c1929d65c697e0c.jpg deleted file mode 100644 index 4f3548bb4c0a14e2a061c28eeaf5aea5372afec0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/587f27ca8cf947779c1929d65c697e0c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/58d06eb9b8003c392af19e09ce5ab1a4.jpg b/docs/0.21.3/img/58d06eb9b8003c392af19e09ce5ab1a4.jpg deleted file mode 100644 index e43c664d4f1256f64858e236c57e559b439dee42..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/58d06eb9b8003c392af19e09ce5ab1a4.jpg and /dev/null differ diff --git a/docs/0.21.3/img/58d86a5573e0796f320435a8ce8346ea.jpg b/docs/0.21.3/img/58d86a5573e0796f320435a8ce8346ea.jpg deleted file mode 100644 index 88244e5188a1204c4e68365875bea132ab27d8b3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/58d86a5573e0796f320435a8ce8346ea.jpg and /dev/null differ diff --git a/docs/0.21.3/img/58ef9e1b5d2ee139dcb588a3879ca1a6.jpg b/docs/0.21.3/img/58ef9e1b5d2ee139dcb588a3879ca1a6.jpg deleted file mode 100644 index 586ca152ac34bd2007ff03ea9237dc44d174fcb0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/58ef9e1b5d2ee139dcb588a3879ca1a6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/59100a001bb4b110e00f7ddf1354cd5b.jpg b/docs/0.21.3/img/59100a001bb4b110e00f7ddf1354cd5b.jpg deleted file mode 100644 index bdc2336415d9d77cdfaa326046aa660cc14e87b3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/59100a001bb4b110e00f7ddf1354cd5b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/59420186f988199ba986eefc023fb637.jpg b/docs/0.21.3/img/59420186f988199ba986eefc023fb637.jpg deleted file mode 100644 index bf5743f71fcaf298bf924ec4df7687d3b0888c03..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/59420186f988199ba986eefc023fb637.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5959a6fe3c27570b7d474f26126eb628.jpg b/docs/0.21.3/img/5959a6fe3c27570b7d474f26126eb628.jpg deleted file mode 100644 index a4d5ec5b74f19f83b7fae480093b4e4356b0ddad..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5959a6fe3c27570b7d474f26126eb628.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5a5de287d8a2c74dd12f86219cc19697.jpg b/docs/0.21.3/img/5a5de287d8a2c74dd12f86219cc19697.jpg deleted file mode 100644 index 1aad17e3469a5df39af593272e3a19c0354d5e8f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5a5de287d8a2c74dd12f86219cc19697.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5a8d4539001fa07eb00b24f2e74adeca.jpg b/docs/0.21.3/img/5a8d4539001fa07eb00b24f2e74adeca.jpg deleted file mode 100644 index c4e2a8c2b113ed45d42d5873fa15f8f76c18b47f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5a8d4539001fa07eb00b24f2e74adeca.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5b84281b8f1a26c9e9cba1b6cb0126ce.jpg b/docs/0.21.3/img/5b84281b8f1a26c9e9cba1b6cb0126ce.jpg deleted file mode 100644 index 6b582ec221ad948aba4d7062de32f4776d8b6b79..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5b84281b8f1a26c9e9cba1b6cb0126ce.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5b87e1a1b34a0ac402ef602b152ee2f9.jpg b/docs/0.21.3/img/5b87e1a1b34a0ac402ef602b152ee2f9.jpg deleted file mode 100644 index 3843126265b8e8d7c003f2376b7cb3fdcd8413ab..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5b87e1a1b34a0ac402ef602b152ee2f9.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5bb034cee5851ab5105aca4c40a4e16e.jpg b/docs/0.21.3/img/5bb034cee5851ab5105aca4c40a4e16e.jpg deleted file mode 100644 index 32a9b6fa99ea608d46ab41c9fd86f5a00ff07bb9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5bb034cee5851ab5105aca4c40a4e16e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5bd6037aeb804486a6f7cc0415ace8fc.jpg b/docs/0.21.3/img/5bd6037aeb804486a6f7cc0415ace8fc.jpg deleted file mode 100644 index 942ce80ad16a58cf4461bda4126a586785f36702..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5bd6037aeb804486a6f7cc0415ace8fc.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5c0b2807058791d6069327b709fae60c.jpg b/docs/0.21.3/img/5c0b2807058791d6069327b709fae60c.jpg deleted file mode 100644 index d3f861e5ad26d6441ad721d335be7c081c03e8b0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5c0b2807058791d6069327b709fae60c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5c3cdb1b3bec4126d850a52d7fe8dc18.jpg b/docs/0.21.3/img/5c3cdb1b3bec4126d850a52d7fe8dc18.jpg deleted file mode 100644 index 2057633f209d26793b3f2c35bb0363b75bef67df..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5c3cdb1b3bec4126d850a52d7fe8dc18.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5c82dbae35dc43d2f556f9f284d9d184.jpg b/docs/0.21.3/img/5c82dbae35dc43d2f556f9f284d9d184.jpg deleted file mode 100644 index 2776aa5a62dbd1a7e7f20b9e8b2e8849cc6116cf..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5c82dbae35dc43d2f556f9f284d9d184.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5cc4d35f246f0aeb95f154a5343635c2.jpg b/docs/0.21.3/img/5cc4d35f246f0aeb95f154a5343635c2.jpg deleted file mode 100644 index 8240ded7815c12a0539ff2a02e95e5f1ed9888f4..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5cc4d35f246f0aeb95f154a5343635c2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5cf078f7cdbb5755436e396cad3c37a0.jpg b/docs/0.21.3/img/5cf078f7cdbb5755436e396cad3c37a0.jpg deleted file mode 100644 index d5ac6dd5f9732705df59e0a0106a1e344db0b188..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5cf078f7cdbb5755436e396cad3c37a0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5d0c433dc4dc7ca883ac8173e6e2096f.jpg b/docs/0.21.3/img/5d0c433dc4dc7ca883ac8173e6e2096f.jpg deleted file mode 100644 index b548f71549dd85a50be307737681edc465f248c6..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5d0c433dc4dc7ca883ac8173e6e2096f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5d0d4b3cde172f7fd71da81c2e1b21a9.jpg b/docs/0.21.3/img/5d0d4b3cde172f7fd71da81c2e1b21a9.jpg deleted file mode 100644 index dd26aed7a0a3ae96cdf74af96706d589e36a4f03..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5d0d4b3cde172f7fd71da81c2e1b21a9.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5d197c73e8e0bc6ba78f74b2a205886e.jpg b/docs/0.21.3/img/5d197c73e8e0bc6ba78f74b2a205886e.jpg deleted file mode 100644 index e0942a2a8ae0ec5e740aa20d74f3d9de16b082da..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5d197c73e8e0bc6ba78f74b2a205886e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5d71bcc9676eddcac89936397b2cd79c.jpg b/docs/0.21.3/img/5d71bcc9676eddcac89936397b2cd79c.jpg deleted file mode 100644 index 224874cbe0920aee60887301199d3c26363dbb99..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5d71bcc9676eddcac89936397b2cd79c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5d8cf5fcf13a72776158a787bc29143c.jpg b/docs/0.21.3/img/5d8cf5fcf13a72776158a787bc29143c.jpg deleted file mode 100644 index 4b0079b91b8de4a63fe4252805cde9c2670738e9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5d8cf5fcf13a72776158a787bc29143c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5daa1b5d6a3d63020722cb0f4b41eee2.jpg b/docs/0.21.3/img/5daa1b5d6a3d63020722cb0f4b41eee2.jpg deleted file mode 100644 index de28ec3f957ea02c1b1c785296f5f0dc464bf0ba..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5daa1b5d6a3d63020722cb0f4b41eee2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5db611c8f58fbd9a9776c013656a16ff.jpg b/docs/0.21.3/img/5db611c8f58fbd9a9776c013656a16ff.jpg deleted file mode 100644 index d9ee4f67366c385a523d2c68cea41e21186df6a9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5db611c8f58fbd9a9776c013656a16ff.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5df8f915c528f34f0ada91db5228605f.jpg b/docs/0.21.3/img/5df8f915c528f34f0ada91db5228605f.jpg deleted file mode 100644 index 2d14a0056972f7fed94683a8cf37aaf543bf2a24..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5df8f915c528f34f0ada91db5228605f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5e45807b4775fcfaca64f6363102dc5e.jpg b/docs/0.21.3/img/5e45807b4775fcfaca64f6363102dc5e.jpg deleted file mode 100644 index 498cbc3460f265d6040b19130c2f5992b90ed370..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5e45807b4775fcfaca64f6363102dc5e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5ec012661471fa940c27472afcce01a2.jpg b/docs/0.21.3/img/5ec012661471fa940c27472afcce01a2.jpg deleted file mode 100644 index 6f488abf7c02810c3b037e16469222234d1e0eae..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5ec012661471fa940c27472afcce01a2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5eea9f6c78020e75b9cc37d038d297ab.jpg b/docs/0.21.3/img/5eea9f6c78020e75b9cc37d038d297ab.jpg deleted file mode 100644 index 7e59c6e257b457aed0937e9aa84f7f89c09e9876..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5eea9f6c78020e75b9cc37d038d297ab.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5f0a6e9a20a071d688e183c9675544e5.jpg b/docs/0.21.3/img/5f0a6e9a20a071d688e183c9675544e5.jpg deleted file mode 100644 index 1bcf286035fb72ddb4b062556ed9c7c1bba08a13..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5f0a6e9a20a071d688e183c9675544e5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/5fc2f399717cfe5187dc09896972a850.jpg b/docs/0.21.3/img/5fc2f399717cfe5187dc09896972a850.jpg deleted file mode 100644 index ef72230811afeebf9e18161866c6c9d75df500d8..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/5fc2f399717cfe5187dc09896972a850.jpg and /dev/null differ diff --git a/docs/0.21.3/img/60337a9162822d71dc32e68952b4e02a.jpg b/docs/0.21.3/img/60337a9162822d71dc32e68952b4e02a.jpg deleted file mode 100644 index c7c3256eef78533dcd55c1a6671d49dc5850b599..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/60337a9162822d71dc32e68952b4e02a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6042b714de932f6ed841e71bfe9acede.jpg b/docs/0.21.3/img/6042b714de932f6ed841e71bfe9acede.jpg deleted file mode 100644 index 96a9f6099c52d40ac0190750ef1bf722582cee5e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6042b714de932f6ed841e71bfe9acede.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6081a672a0d5d6cc7563c531599dde91.jpg b/docs/0.21.3/img/6081a672a0d5d6cc7563c531599dde91.jpg deleted file mode 100644 index 7e446fc2016f06251475934ff8c26268e0b1b19a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6081a672a0d5d6cc7563c531599dde91.jpg and /dev/null differ diff --git a/docs/0.21.3/img/60fef7a79e647e4e8dc02f0b0dc25772.jpg b/docs/0.21.3/img/60fef7a79e647e4e8dc02f0b0dc25772.jpg deleted file mode 100644 index 88272645bae814b868cb5a2887abcee528fb68e1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/60fef7a79e647e4e8dc02f0b0dc25772.jpg and /dev/null differ diff --git a/docs/0.21.3/img/610475f160f25407a547e5430c792460.jpg b/docs/0.21.3/img/610475f160f25407a547e5430c792460.jpg deleted file mode 100644 index b8f45281a26669a2bc2f47b62aab8bffeec1193e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/610475f160f25407a547e5430c792460.jpg and /dev/null differ diff --git a/docs/0.21.3/img/611639bdcfd73c857a43842913d6e826.jpg b/docs/0.21.3/img/611639bdcfd73c857a43842913d6e826.jpg deleted file mode 100644 index 6619d9ffa6abd5fcaaccff3a352b6d9968c52133..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/611639bdcfd73c857a43842913d6e826.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6122e23454910f4f076c71a84c068291.jpg b/docs/0.21.3/img/6122e23454910f4f076c71a84c068291.jpg deleted file mode 100644 index 8571065a9960a0a369375693cb39b587eec028ab..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6122e23454910f4f076c71a84c068291.jpg and /dev/null differ diff --git a/docs/0.21.3/img/61a540d6591602c8f513910fd2f33b40.jpg b/docs/0.21.3/img/61a540d6591602c8f513910fd2f33b40.jpg deleted file mode 100644 index 30cb2bcd52b53c0f2fba592822c1f4645194536f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/61a540d6591602c8f513910fd2f33b40.jpg and /dev/null differ diff --git a/docs/0.21.3/img/61a79d63783315d8e68d8ecf1324105f.jpg b/docs/0.21.3/img/61a79d63783315d8e68d8ecf1324105f.jpg deleted file mode 100644 index 1bcf286035fb72ddb4b062556ed9c7c1bba08a13..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/61a79d63783315d8e68d8ecf1324105f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/61b05c3bf030b831f23f257ca8182f51.jpg b/docs/0.21.3/img/61b05c3bf030b831f23f257ca8182f51.jpg deleted file mode 100644 index e92f70c83c1f95ad42ec45941002145fa4ad61ec..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/61b05c3bf030b831f23f257ca8182f51.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6211fb320c2cdb794a80e9e0b800a6a1.jpg b/docs/0.21.3/img/6211fb320c2cdb794a80e9e0b800a6a1.jpg deleted file mode 100644 index 6301baeae4d0eb1ca7505f5629f9eaf4ec043a45..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6211fb320c2cdb794a80e9e0b800a6a1.jpg and /dev/null differ diff --git a/docs/0.21.3/img/62eb544f1f6e234c61099fea1517300b.jpg b/docs/0.21.3/img/62eb544f1f6e234c61099fea1517300b.jpg deleted file mode 100644 index b7d8cbce7d2f25838a5738d5be8154c12e814afc..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/62eb544f1f6e234c61099fea1517300b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/638e0b526b8a69a226bc23950f6eeb3f.jpg b/docs/0.21.3/img/638e0b526b8a69a226bc23950f6eeb3f.jpg deleted file mode 100644 index 4fb9fee065bf82668ddc9e04bfa95fe89f49bf79..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/638e0b526b8a69a226bc23950f6eeb3f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/639e82f3829a0ad677110cc33a028c98.jpg b/docs/0.21.3/img/639e82f3829a0ad677110cc33a028c98.jpg deleted file mode 100644 index cf74218e18c20c6e5f734cdf49e0e06cc1edddf0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/639e82f3829a0ad677110cc33a028c98.jpg and /dev/null differ diff --git a/docs/0.21.3/img/63f146cd209ad922f402bf81bfdeb621.jpg b/docs/0.21.3/img/63f146cd209ad922f402bf81bfdeb621.jpg deleted file mode 100644 index 231a5e4b10a0c3b7a7b764b53726c4d5cf88b154..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/63f146cd209ad922f402bf81bfdeb621.jpg and /dev/null differ diff --git a/docs/0.21.3/img/642372b631f22b9db0dc4f30d9ab67e6.jpg b/docs/0.21.3/img/642372b631f22b9db0dc4f30d9ab67e6.jpg deleted file mode 100644 index 32e8dbedbcc412e562e95bd2d050639a824043dd..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/642372b631f22b9db0dc4f30d9ab67e6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6447f40a171271e014eed37b28b4a711.jpg b/docs/0.21.3/img/6447f40a171271e014eed37b28b4a711.jpg deleted file mode 100644 index 97b1eae8381d82ae4690b6bceddc7ec1c07ddcea..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6447f40a171271e014eed37b28b4a711.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6479476ebd2e5d741f1a712f671fccb6.jpg b/docs/0.21.3/img/6479476ebd2e5d741f1a712f671fccb6.jpg deleted file mode 100644 index 9a3060a1a5605c43cb61087e9c8d0d83a2683b68..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6479476ebd2e5d741f1a712f671fccb6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/64ccaf1b6c08784a30158f809c081987.jpg b/docs/0.21.3/img/64ccaf1b6c08784a30158f809c081987.jpg deleted file mode 100644 index ae8bf554a4be14cf56b09dd6372240dff08766a9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/64ccaf1b6c08784a30158f809c081987.jpg and /dev/null differ diff --git a/docs/0.21.3/img/64ecb0afa71752378a987a33e1e4e76f.jpg b/docs/0.21.3/img/64ecb0afa71752378a987a33e1e4e76f.jpg deleted file mode 100644 index 80839c6169e948c2c0b0917177910652c6991d95..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/64ecb0afa71752378a987a33e1e4e76f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6518e8fbaaadd8a258c9a3f96b2ef42e.jpg b/docs/0.21.3/img/6518e8fbaaadd8a258c9a3f96b2ef42e.jpg deleted file mode 100644 index 591364b4e53db8ee949e3677e4eea6380e862e27..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6518e8fbaaadd8a258c9a3f96b2ef42e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6521e34e11e73c0fae9a5bd3c7980a9f.jpg b/docs/0.21.3/img/6521e34e11e73c0fae9a5bd3c7980a9f.jpg deleted file mode 100644 index d00c6b80d19da0c87c5837397d3342983cd99667..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6521e34e11e73c0fae9a5bd3c7980a9f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6526868397aa8da766b3dc60bbcc30ef.jpg b/docs/0.21.3/img/6526868397aa8da766b3dc60bbcc30ef.jpg deleted file mode 100644 index 0e9a7bcec3606c10736a7c633a9cc40ddfb453b5..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6526868397aa8da766b3dc60bbcc30ef.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6552bde3d3999c1a9728016416932af7.jpg b/docs/0.21.3/img/6552bde3d3999c1a9728016416932af7.jpg deleted file mode 100644 index 7c25bd71868ca04f92b2baa97390c4b6af4186f0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6552bde3d3999c1a9728016416932af7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6569ca3d831148970ddb4c7dfc3f2572.jpg b/docs/0.21.3/img/6569ca3d831148970ddb4c7dfc3f2572.jpg deleted file mode 100644 index 09dcbed185292205dcb53754229d8642a06f9979..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6569ca3d831148970ddb4c7dfc3f2572.jpg and /dev/null differ diff --git a/docs/0.21.3/img/658840c7508dc5a73ca6180323904862.jpg b/docs/0.21.3/img/658840c7508dc5a73ca6180323904862.jpg deleted file mode 100644 index 4183d3dace95ef73b548486d7cd0a556086afa85..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/658840c7508dc5a73ca6180323904862.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6653de9b4dea7e5e9a897b5f34e7a4f0.jpg b/docs/0.21.3/img/6653de9b4dea7e5e9a897b5f34e7a4f0.jpg deleted file mode 100644 index 5ec2df9e204366671e315f0fa94dc59cc164062b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6653de9b4dea7e5e9a897b5f34e7a4f0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6689aa593e8e42bb5c2caa474e642b5f.jpg b/docs/0.21.3/img/6689aa593e8e42bb5c2caa474e642b5f.jpg deleted file mode 100644 index 66ab40f931581d62c6597775b9f67fa9f9e09e4d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6689aa593e8e42bb5c2caa474e642b5f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/67f18f488d2173299bc076b212f6aee9.jpg b/docs/0.21.3/img/67f18f488d2173299bc076b212f6aee9.jpg deleted file mode 100644 index 81c226bd5a979a26c302d240382dc499cf5bf0ce..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/67f18f488d2173299bc076b212f6aee9.jpg and /dev/null differ diff --git a/docs/0.21.3/img/67f62308a1f409829599e546c843d53f.jpg b/docs/0.21.3/img/67f62308a1f409829599e546c843d53f.jpg deleted file mode 100644 index e95cf4b1f2faf28a0b1d482bef6ef0f31c801168..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/67f62308a1f409829599e546c843d53f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/67f9d3900eb064f6354d23271f16c2b0.jpg b/docs/0.21.3/img/67f9d3900eb064f6354d23271f16c2b0.jpg deleted file mode 100644 index 341983008cd1366d050d84dea023e9df3aacaab9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/67f9d3900eb064f6354d23271f16c2b0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/685006d43de154949bfb11efd87df4f1.jpg b/docs/0.21.3/img/685006d43de154949bfb11efd87df4f1.jpg deleted file mode 100644 index 56491ad717605dbd11b1c319065ea9625d6fa767..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/685006d43de154949bfb11efd87df4f1.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6875a3a68e07bfa51a631f014fcf8a4f.jpg b/docs/0.21.3/img/6875a3a68e07bfa51a631f014fcf8a4f.jpg deleted file mode 100644 index 869c9d2fa8079b70229bc3c8a1bd69893d0a3e90..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6875a3a68e07bfa51a631f014fcf8a4f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/69bbc745b66051792cd1b5166ce18420.jpg b/docs/0.21.3/img/69bbc745b66051792cd1b5166ce18420.jpg deleted file mode 100644 index 6c9d0f5a37ed3e0ce8d3631c100093f7762edbf9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/69bbc745b66051792cd1b5166ce18420.jpg and /dev/null differ diff --git a/docs/0.21.3/img/69be855df457ccfee81f59ace2595a23.jpg b/docs/0.21.3/img/69be855df457ccfee81f59ace2595a23.jpg deleted file mode 100644 index 60da94b7ce004241512f03fc0074e6ca9b868c65..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/69be855df457ccfee81f59ace2595a23.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6a0ac3a1f45ae7072f58ae85160eca33.jpg b/docs/0.21.3/img/6a0ac3a1f45ae7072f58ae85160eca33.jpg deleted file mode 100644 index 3698e0ddd9252fa7aa5a19cb92c14a7ba972e481..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6a0ac3a1f45ae7072f58ae85160eca33.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6a0cf5d5f1d5ad90f9713a46fa55111f.jpg b/docs/0.21.3/img/6a0cf5d5f1d5ad90f9713a46fa55111f.jpg deleted file mode 100644 index abd5eb0e55ba2404c6117d934f271bc78c3c0501..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6a0cf5d5f1d5ad90f9713a46fa55111f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6a8621a4ada40acd48b43436ca6a4527.jpg b/docs/0.21.3/img/6a8621a4ada40acd48b43436ca6a4527.jpg deleted file mode 100644 index 5d35024714552111df03104c3bc4f0d29d47504c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6a8621a4ada40acd48b43436ca6a4527.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6ade66280d509fe54883d82b315259e1.jpg b/docs/0.21.3/img/6ade66280d509fe54883d82b315259e1.jpg deleted file mode 100644 index d00c6b80d19da0c87c5837397d3342983cd99667..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6ade66280d509fe54883d82b315259e1.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6ae91fb0f3221b92d2dd4e22204d8008.jpg b/docs/0.21.3/img/6ae91fb0f3221b92d2dd4e22204d8008.jpg deleted file mode 100644 index 2ebabdc258de749c4aa2115c21bcdd9c2f957035..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6ae91fb0f3221b92d2dd4e22204d8008.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6b0371e0d33eebe00fe5ec3d59de5b43.jpg b/docs/0.21.3/img/6b0371e0d33eebe00fe5ec3d59de5b43.jpg deleted file mode 100644 index e71b6f0966557dc5a3744deb60eba91e5efb189e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6b0371e0d33eebe00fe5ec3d59de5b43.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6b1c74edd599db63c339ead392e8e54a.jpg b/docs/0.21.3/img/6b1c74edd599db63c339ead392e8e54a.jpg deleted file mode 100644 index e6570894c82ee932a847aa5c2b5e0e0db6dd7fba..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6b1c74edd599db63c339ead392e8e54a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6b474f60cd7fcc77b4a950334fc6483f.jpg b/docs/0.21.3/img/6b474f60cd7fcc77b4a950334fc6483f.jpg deleted file mode 100644 index 45c430e98936584949b977cf7261b8045bf35b90..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6b474f60cd7fcc77b4a950334fc6483f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6b7248d635f4161b925734dbc60de37a.jpg b/docs/0.21.3/img/6b7248d635f4161b925734dbc60de37a.jpg deleted file mode 100644 index ae46119908d18ef1fd1dbc4cf00b1c20f864f571..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6b7248d635f4161b925734dbc60de37a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6bcc641ece97b81c42261e28eaad3ad7.jpg b/docs/0.21.3/img/6bcc641ece97b81c42261e28eaad3ad7.jpg deleted file mode 100644 index 7068b9b2db9536b34dcb502698accf70249cc84a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6bcc641ece97b81c42261e28eaad3ad7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6c281997fc8d9f34a530a7e2bc854adf.jpg b/docs/0.21.3/img/6c281997fc8d9f34a530a7e2bc854adf.jpg deleted file mode 100644 index b2f5c7ae419254aa5bdf6e76125f1d1c81a2fc9c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6c281997fc8d9f34a530a7e2bc854adf.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6c446734a6837b7541db12e2b55f1a2b.jpg b/docs/0.21.3/img/6c446734a6837b7541db12e2b55f1a2b.jpg deleted file mode 100644 index 615b8337cb582c9c58a660387cde2854a5b013b2..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6c446734a6837b7541db12e2b55f1a2b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6c70b46b88f05e00e292f1a0f98d2aa8.jpg b/docs/0.21.3/img/6c70b46b88f05e00e292f1a0f98d2aa8.jpg deleted file mode 100644 index 4e7eda9e12d0c9ac0fedf86d0c84aad05db0f1f7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6c70b46b88f05e00e292f1a0f98d2aa8.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6c8db7614197ace6a4bf0f437c085e6d.jpg b/docs/0.21.3/img/6c8db7614197ace6a4bf0f437c085e6d.jpg deleted file mode 100644 index ac24471fadfcdde1424655a6355367c89e66785d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6c8db7614197ace6a4bf0f437c085e6d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6d8a1d709ef804f4629126d6e1c449f1.jpg b/docs/0.21.3/img/6d8a1d709ef804f4629126d6e1c449f1.jpg deleted file mode 100644 index ff70ac662a4e6fc23594f77b392fb322777550d1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6d8a1d709ef804f4629126d6e1c449f1.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6d8b62cf31afb168e2b2acb89d6abccd.jpg b/docs/0.21.3/img/6d8b62cf31afb168e2b2acb89d6abccd.jpg deleted file mode 100644 index 5527042332b25226e321161da84d2e098356bcc7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6d8b62cf31afb168e2b2acb89d6abccd.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6da3d48746433a02996c5821013ac4e7.jpg b/docs/0.21.3/img/6da3d48746433a02996c5821013ac4e7.jpg deleted file mode 100644 index 45a23b58a0989d07add9c4d53368a33045a2c034..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6da3d48746433a02996c5821013ac4e7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6db85b1ad926d9ad860d58629ff5f235.jpg b/docs/0.21.3/img/6db85b1ad926d9ad860d58629ff5f235.jpg deleted file mode 100644 index acd9463cc59e9927926d3f4e100d384dae0303f1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6db85b1ad926d9ad860d58629ff5f235.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6e87bd4511cfd9af64076cc1cf8f1bbc.jpg b/docs/0.21.3/img/6e87bd4511cfd9af64076cc1cf8f1bbc.jpg deleted file mode 100644 index d50a6befd582f21c0670db9fb8b74a81e66bfbe1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6e87bd4511cfd9af64076cc1cf8f1bbc.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6edba8b762eb4f9d843ba76d9e344c2a.jpg b/docs/0.21.3/img/6edba8b762eb4f9d843ba76d9e344c2a.jpg deleted file mode 100644 index 90fbb26799d347cdf4a34182a905a0b18dbbb4e9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6edba8b762eb4f9d843ba76d9e344c2a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6efb484bc0e0c91b3ba13708bfe46aba.jpg b/docs/0.21.3/img/6efb484bc0e0c91b3ba13708bfe46aba.jpg deleted file mode 100644 index 10b409b0a0091b6339ac225b5030a8f86ec24bea..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6efb484bc0e0c91b3ba13708bfe46aba.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6f0cdccb5dc60bae6e7a303075ddbdf6.jpg b/docs/0.21.3/img/6f0cdccb5dc60bae6e7a303075ddbdf6.jpg deleted file mode 100644 index 4e98b44a9b6b4f61d82dccb39263810741229b55..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6f0cdccb5dc60bae6e7a303075ddbdf6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6f98755e60bfb560a671770b8e51cb28.jpg b/docs/0.21.3/img/6f98755e60bfb560a671770b8e51cb28.jpg deleted file mode 100644 index d5586d24407dbe3c3788a61f24cf485cd4b919c3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6f98755e60bfb560a671770b8e51cb28.jpg and /dev/null differ diff --git a/docs/0.21.3/img/6fcf3a401454fd3c65ac740912e12467.jpg b/docs/0.21.3/img/6fcf3a401454fd3c65ac740912e12467.jpg deleted file mode 100644 index 8703615fc68fc3cc7e8028a71efcd1e90def8089..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/6fcf3a401454fd3c65ac740912e12467.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7057da795219773c01c26cde1adf90e5.jpg b/docs/0.21.3/img/7057da795219773c01c26cde1adf90e5.jpg deleted file mode 100644 index 9fec9b3b6cf61ae8bd9d878d2f7e20b8672f6be8..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7057da795219773c01c26cde1adf90e5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7085885523458d64e2f9981f39c7b038.jpg b/docs/0.21.3/img/7085885523458d64e2f9981f39c7b038.jpg deleted file mode 100644 index e739a626607beb24b4b88b788e22f103e4bc8aa8..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7085885523458d64e2f9981f39c7b038.jpg and /dev/null differ diff --git a/docs/0.21.3/img/70abd4aa320170aa6dbe8204a5ed846e.jpg b/docs/0.21.3/img/70abd4aa320170aa6dbe8204a5ed846e.jpg deleted file mode 100644 index df8b6d66c3bf5071eaf1dfb416d8264bffc79474..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/70abd4aa320170aa6dbe8204a5ed846e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/71581bfc44b992a82bd0bc7a6eee38f4.jpg b/docs/0.21.3/img/71581bfc44b992a82bd0bc7a6eee38f4.jpg deleted file mode 100644 index 8f7f6a9ffd5b79dc987b9b25fdf26f9f7ad5d879..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/71581bfc44b992a82bd0bc7a6eee38f4.jpg and /dev/null differ diff --git a/docs/0.21.3/img/715cb9aaddb7a5ea10028eb49f509f61.jpg b/docs/0.21.3/img/715cb9aaddb7a5ea10028eb49f509f61.jpg deleted file mode 100644 index 3bf6357ffa154811334611988b85c01b3d4003b2..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/715cb9aaddb7a5ea10028eb49f509f61.jpg and /dev/null differ diff --git a/docs/0.21.3/img/725082a3e3f2eacec65e9c1435a6960d.jpg b/docs/0.21.3/img/725082a3e3f2eacec65e9c1435a6960d.jpg deleted file mode 100644 index 7e0f5c07a5755cbeeab6731f24dfe22d343bdfd3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/725082a3e3f2eacec65e9c1435a6960d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7304e7fb0302be38d7fa1688bcd14df4.jpg b/docs/0.21.3/img/7304e7fb0302be38d7fa1688bcd14df4.jpg deleted file mode 100644 index 556eac5956e0d5b7bf2219770a5c6c872d1d9e3e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7304e7fb0302be38d7fa1688bcd14df4.jpg and /dev/null differ diff --git a/docs/0.21.3/img/73658f99647e50786817b44416d09df1.jpg b/docs/0.21.3/img/73658f99647e50786817b44416d09df1.jpg deleted file mode 100644 index 053bfb65a00ec8fd8baeee77467afdad5026d5a0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/73658f99647e50786817b44416d09df1.jpg and /dev/null differ diff --git a/docs/0.21.3/img/74f4ea0e25b673d30d56ab4269f03f3b.jpg b/docs/0.21.3/img/74f4ea0e25b673d30d56ab4269f03f3b.jpg deleted file mode 100644 index c0d680e98642cfcd5dd71bae6056e854ff84150a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/74f4ea0e25b673d30d56ab4269f03f3b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/75a6f2c15bfb418edcb993c4e27873d0.jpg b/docs/0.21.3/img/75a6f2c15bfb418edcb993c4e27873d0.jpg deleted file mode 100644 index 9d4cfeb80cffc43e6517dc0efdf061807dcc97e3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/75a6f2c15bfb418edcb993c4e27873d0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/75d98860b528f3fcd2b060ad5e624ca0.jpg b/docs/0.21.3/img/75d98860b528f3fcd2b060ad5e624ca0.jpg deleted file mode 100644 index 0db4f390e7b76c6997d2ac46f1353d1367264257..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/75d98860b528f3fcd2b060ad5e624ca0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/75fd7809a46f43dcd922f39ff8f91026.jpg b/docs/0.21.3/img/75fd7809a46f43dcd922f39ff8f91026.jpg deleted file mode 100644 index 71b4522090cb6483375ab802bedf4ae06a3f7a70..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/75fd7809a46f43dcd922f39ff8f91026.jpg and /dev/null differ diff --git a/docs/0.21.3/img/76530e85b09bd8385fad05337b968caf.jpg b/docs/0.21.3/img/76530e85b09bd8385fad05337b968caf.jpg deleted file mode 100644 index 2546bb8454e97d6814b09e8e9f4906ad009495ef..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/76530e85b09bd8385fad05337b968caf.jpg and /dev/null differ diff --git a/docs/0.21.3/img/76814b51cd880ede8da9a2b5ad3d4143.jpg b/docs/0.21.3/img/76814b51cd880ede8da9a2b5ad3d4143.jpg deleted file mode 100644 index dc040f07a9fd2568c9354f418466daaebf735724..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/76814b51cd880ede8da9a2b5ad3d4143.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7682696b3b598c55d49ca030059f0a18.jpg b/docs/0.21.3/img/7682696b3b598c55d49ca030059f0a18.jpg deleted file mode 100644 index 4a5b77fec0113dcdab9ef1562795541cf6ae27dd..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7682696b3b598c55d49ca030059f0a18.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7695a05e60c9dc0ec13f779fc19da966.jpg b/docs/0.21.3/img/7695a05e60c9dc0ec13f779fc19da966.jpg deleted file mode 100644 index ec2ff184fa3aee5d9cdaab65b58c726d4f081927..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7695a05e60c9dc0ec13f779fc19da966.jpg and /dev/null differ diff --git a/docs/0.21.3/img/769ae28b43c9c1f02556a7d6d878c7e0.jpg b/docs/0.21.3/img/769ae28b43c9c1f02556a7d6d878c7e0.jpg deleted file mode 100644 index 583413f1dd25314f0bc42f8b39afa8ab708ee93f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/769ae28b43c9c1f02556a7d6d878c7e0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/77e01a63c0620550a5f11a7613001120.jpg b/docs/0.21.3/img/77e01a63c0620550a5f11a7613001120.jpg deleted file mode 100644 index a50c8242e325b7206142bbac7d074b16cf731491..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/77e01a63c0620550a5f11a7613001120.jpg and /dev/null differ diff --git a/docs/0.21.3/img/77e9cd089beb314666ac8397f95afc0a.jpg b/docs/0.21.3/img/77e9cd089beb314666ac8397f95afc0a.jpg deleted file mode 100644 index 75207560c34db80d1c04b5b6ef8bea81154f0491..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/77e9cd089beb314666ac8397f95afc0a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/77ee769c7c80ba4738fa4b34ff922e25.jpg b/docs/0.21.3/img/77ee769c7c80ba4738fa4b34ff922e25.jpg deleted file mode 100644 index 164173f8b05668191b0a53b1827cede9381bd366..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/77ee769c7c80ba4738fa4b34ff922e25.jpg and /dev/null differ diff --git a/docs/0.21.3/img/77eee205b1d286584f4002a39c9b32a3.jpg b/docs/0.21.3/img/77eee205b1d286584f4002a39c9b32a3.jpg deleted file mode 100644 index 45c648852262550825221af8235881d7db68e355..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/77eee205b1d286584f4002a39c9b32a3.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7881dd425f1090aadc25eca46dc0daec.jpg b/docs/0.21.3/img/7881dd425f1090aadc25eca46dc0daec.jpg deleted file mode 100644 index 8878915d5fa352a53db0e83a3ad35cda44fb8a5b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7881dd425f1090aadc25eca46dc0daec.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7947f721109ac76f1366b72715d3e7e3.jpg b/docs/0.21.3/img/7947f721109ac76f1366b72715d3e7e3.jpg deleted file mode 100644 index 6eaae6b04e22c4c4c2a9009e3600b042d2172b06..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7947f721109ac76f1366b72715d3e7e3.jpg and /dev/null differ diff --git a/docs/0.21.3/img/79b52c5c00ce59ba04383f6a0d670c6d.jpg b/docs/0.21.3/img/79b52c5c00ce59ba04383f6a0d670c6d.jpg deleted file mode 100644 index 4e157ae947f95c69b56d7a968369bb0439d2f1fa..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/79b52c5c00ce59ba04383f6a0d670c6d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7a6d4f1e7672a61d5284203113eb5b2a.jpg b/docs/0.21.3/img/7a6d4f1e7672a61d5284203113eb5b2a.jpg deleted file mode 100644 index c150ecaefc44ecc62c6a4ea58d7164e86a3898b3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7a6d4f1e7672a61d5284203113eb5b2a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7a79f764bd3db11876c1065b6677af80.jpg b/docs/0.21.3/img/7a79f764bd3db11876c1065b6677af80.jpg deleted file mode 100644 index 2afa518e63f7454026c021d5a0a7ff3fceab9543..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7a79f764bd3db11876c1065b6677af80.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7a958d3bae3db42cc0811b186bbc4e00.jpg b/docs/0.21.3/img/7a958d3bae3db42cc0811b186bbc4e00.jpg deleted file mode 100644 index 0c7ce3ed47c8d4147dbfe5b67078ffc444d91af0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7a958d3bae3db42cc0811b186bbc4e00.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7a95e7e32309847d96c207051da29ea9.jpg b/docs/0.21.3/img/7a95e7e32309847d96c207051da29ea9.jpg deleted file mode 100644 index b78b1fbec05824299b9bfda4fb61141de8b6e760..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7a95e7e32309847d96c207051da29ea9.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7a9775b9051c948f74639f1856f6c585.jpg b/docs/0.21.3/img/7a9775b9051c948f74639f1856f6c585.jpg deleted file mode 100644 index aefe44ac2a38de4cb30c17554f176c8169da9fd9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7a9775b9051c948f74639f1856f6c585.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7ab8c51f211ad5aea8e4e78337ca3624.jpg b/docs/0.21.3/img/7ab8c51f211ad5aea8e4e78337ca3624.jpg deleted file mode 100644 index fee605e6198c068c53e88e6c53078983b874cc0e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7ab8c51f211ad5aea8e4e78337ca3624.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7acaacd6f5e4219eb0e02cc0ce0aff63.jpg b/docs/0.21.3/img/7acaacd6f5e4219eb0e02cc0ce0aff63.jpg deleted file mode 100644 index a617c70c561224b1f6e5ee2415dd014db4bb92f1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7acaacd6f5e4219eb0e02cc0ce0aff63.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7afe3c56e3473a3a7f18cf983ed5e79c.jpg b/docs/0.21.3/img/7afe3c56e3473a3a7f18cf983ed5e79c.jpg deleted file mode 100644 index fb07cffe9ffb7204bd1ea79f3ca2689043727863..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7afe3c56e3473a3a7f18cf983ed5e79c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7b0e2ed0273c0a1650cc9f78eabe93c4.jpg b/docs/0.21.3/img/7b0e2ed0273c0a1650cc9f78eabe93c4.jpg deleted file mode 100644 index 249bdc76669678c59763084cbbb70c7b166e1c6b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7b0e2ed0273c0a1650cc9f78eabe93c4.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7b215f2882ce8aaa33a97e43ad626314.jpg b/docs/0.21.3/img/7b215f2882ce8aaa33a97e43ad626314.jpg deleted file mode 100644 index 7e918bf31cacfc5ac240aff0d5d38f23ac7cc381..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7b215f2882ce8aaa33a97e43ad626314.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7b6cebf625d680ab33eba86d34885910.jpg b/docs/0.21.3/img/7b6cebf625d680ab33eba86d34885910.jpg deleted file mode 100644 index f3155b38c03fe4ffb5c698f875084c125ef6e29a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7b6cebf625d680ab33eba86d34885910.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7ba11d33e68a1e32f2d8d9387bbc1eba.jpg b/docs/0.21.3/img/7ba11d33e68a1e32f2d8d9387bbc1eba.jpg deleted file mode 100644 index 69943508c7852cb200613873fe2fe412d19cb2eb..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7ba11d33e68a1e32f2d8d9387bbc1eba.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7c228fb3025521b5d9c2aef929547d1d.jpg b/docs/0.21.3/img/7c228fb3025521b5d9c2aef929547d1d.jpg deleted file mode 100644 index 1e3cf6c834d1c06a4455c9a84e1e9c700e82ef8b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7c228fb3025521b5d9c2aef929547d1d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7c9ce57d4e2ba5270352f4e118af7fac.jpg b/docs/0.21.3/img/7c9ce57d4e2ba5270352f4e118af7fac.jpg deleted file mode 100644 index e283907151de8ba3ba5c369af93c3c1a7ac0fb4d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7c9ce57d4e2ba5270352f4e118af7fac.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7ca5945518e2f3eff72bd67b029e919a.jpg b/docs/0.21.3/img/7ca5945518e2f3eff72bd67b029e919a.jpg deleted file mode 100644 index 4569323b19eb53745db906be45de9daf888b2c40..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7ca5945518e2f3eff72bd67b029e919a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7cda18e6ccd378c8ef9714e3035506c9.jpg b/docs/0.21.3/img/7cda18e6ccd378c8ef9714e3035506c9.jpg deleted file mode 100644 index 8445365f6d78820c2b75713a39d3293dfccc38b7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7cda18e6ccd378c8ef9714e3035506c9.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7ce09555ac9e490df7f81ef7eb0e58e8.jpg b/docs/0.21.3/img/7ce09555ac9e490df7f81ef7eb0e58e8.jpg deleted file mode 100644 index 4e05ac81cf46867c4bb7e5b2c43b6dae8f53c8be..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7ce09555ac9e490df7f81ef7eb0e58e8.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7d1cd85c2f165c7bde33eccf4be29e75.jpg b/docs/0.21.3/img/7d1cd85c2f165c7bde33eccf4be29e75.jpg deleted file mode 100644 index 78c8220e610a7729901adc681ab8e290cebc4119..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7d1cd85c2f165c7bde33eccf4be29e75.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7d1d547b1a46ad827caeb7f0e85b213d.jpg b/docs/0.21.3/img/7d1d547b1a46ad827caeb7f0e85b213d.jpg deleted file mode 100644 index b38945e606b0d295b41e228c75e24eea02722463..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7d1d547b1a46ad827caeb7f0e85b213d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7d32ef1e04f69e63d69e04b09b973946.jpg b/docs/0.21.3/img/7d32ef1e04f69e63d69e04b09b973946.jpg deleted file mode 100644 index 29cc5f9f2307296632fb90bc95ab052ea64e5c1d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7d32ef1e04f69e63d69e04b09b973946.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7d379816608eb84009d45f0e26772256.jpg b/docs/0.21.3/img/7d379816608eb84009d45f0e26772256.jpg deleted file mode 100644 index e6b918d4dbf8b95161a7914750766512b9a6a823..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7d379816608eb84009d45f0e26772256.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7d4aae450c85e9ea83d3746485791394.jpg b/docs/0.21.3/img/7d4aae450c85e9ea83d3746485791394.jpg deleted file mode 100644 index 5dbd4b9871e9dfb462b4162cef20fabf6aa5331c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7d4aae450c85e9ea83d3746485791394.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7d9b5103fb50fe740fbc421247d2a5c7.jpg b/docs/0.21.3/img/7d9b5103fb50fe740fbc421247d2a5c7.jpg deleted file mode 100644 index 4b708a449cbb073ef102774bf620d76571ec99d2..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7d9b5103fb50fe740fbc421247d2a5c7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7df17fc33fdb4c71b329c593ad30f47e.jpg b/docs/0.21.3/img/7df17fc33fdb4c71b329c593ad30f47e.jpg deleted file mode 100644 index 6dbaa56c132ba991cba7fb1173bb4753d9d35063..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7df17fc33fdb4c71b329c593ad30f47e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7e76cbbbf685f7ec4bec704a9b5ea007.jpg b/docs/0.21.3/img/7e76cbbbf685f7ec4bec704a9b5ea007.jpg deleted file mode 100644 index 1b542821897a2c05a456577eba538586bc4e88da..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7e76cbbbf685f7ec4bec704a9b5ea007.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7e8b544e8ce168b079607ff9674a2c91.jpg b/docs/0.21.3/img/7e8b544e8ce168b079607ff9674a2c91.jpg deleted file mode 100644 index 6d93fdd0ddc1378c3ddfc5492c9b28b09f95a1e9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7e8b544e8ce168b079607ff9674a2c91.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7ea4ef13cdad8ec1dea90fc195d058b1.jpg b/docs/0.21.3/img/7ea4ef13cdad8ec1dea90fc195d058b1.jpg deleted file mode 100644 index aba1172a3e6a36d6c2f51f85f831cf7cd062b2ea..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7ea4ef13cdad8ec1dea90fc195d058b1.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7eb576473ec1de4500c33294115b0719.jpg b/docs/0.21.3/img/7eb576473ec1de4500c33294115b0719.jpg deleted file mode 100644 index 581215e45045613257b91c4ebd24cf3c1e656d1d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7eb576473ec1de4500c33294115b0719.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7ec998f799acf05b040856bc6b37657f.jpg b/docs/0.21.3/img/7ec998f799acf05b040856bc6b37657f.jpg deleted file mode 100644 index 57cfd746c1a39f379e4bf56dac25ca452a03ffa4..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7ec998f799acf05b040856bc6b37657f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7ece088a96a66cb9675fde4610d67980.jpg b/docs/0.21.3/img/7ece088a96a66cb9675fde4610d67980.jpg deleted file mode 100644 index a1f88f252568ba47782cead9c03d345ac83b3c31..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7ece088a96a66cb9675fde4610d67980.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7efe29500f4af973643a15b3ed29a926.jpg b/docs/0.21.3/img/7efe29500f4af973643a15b3ed29a926.jpg deleted file mode 100644 index aca0ae91fe50741f05bfd02b60c298de7b2d3d45..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7efe29500f4af973643a15b3ed29a926.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7f1cafe91ec3b94b27f8759724287242.jpg b/docs/0.21.3/img/7f1cafe91ec3b94b27f8759724287242.jpg deleted file mode 100644 index 80e9d0d946cf2ace6faa5d66f5266c87aaf9e304..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7f1cafe91ec3b94b27f8759724287242.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7f35ead97a9f7be07b87ff7b860bcab9.jpg b/docs/0.21.3/img/7f35ead97a9f7be07b87ff7b860bcab9.jpg deleted file mode 100644 index 8e966c7b2efe0ba9927902357e06417c32d01503..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7f35ead97a9f7be07b87ff7b860bcab9.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7f37b8cd4340f3d0981f518f14670c26.jpg b/docs/0.21.3/img/7f37b8cd4340f3d0981f518f14670c26.jpg deleted file mode 100644 index 9b4b061e6f14cddcd54e036d0e3e98672da75019..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7f37b8cd4340f3d0981f518f14670c26.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7fb5b8aaa79d55e35332a1f02a5aee04.jpg b/docs/0.21.3/img/7fb5b8aaa79d55e35332a1f02a5aee04.jpg deleted file mode 100644 index 18daca619060d79cba9c560e893abe57f26d1cf1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7fb5b8aaa79d55e35332a1f02a5aee04.jpg and /dev/null differ diff --git a/docs/0.21.3/img/7ff85adefbea266b138eec7868e87fa9.jpg b/docs/0.21.3/img/7ff85adefbea266b138eec7868e87fa9.jpg deleted file mode 100644 index 5c647864d3071200738323ca0de02b645593b212..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/7ff85adefbea266b138eec7868e87fa9.jpg and /dev/null differ diff --git a/docs/0.21.3/img/80a5660d27392922e501744cab3623da.jpg b/docs/0.21.3/img/80a5660d27392922e501744cab3623da.jpg deleted file mode 100644 index 81bdba458d473caf55d748c6022fbce49d278865..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/80a5660d27392922e501744cab3623da.jpg and /dev/null differ diff --git a/docs/0.21.3/img/81da9e05103270be5e500ebc67cd1b45.jpg b/docs/0.21.3/img/81da9e05103270be5e500ebc67cd1b45.jpg deleted file mode 100644 index ff6baaac37f7f4bbfc8cb0e532e7e2534dd74347..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/81da9e05103270be5e500ebc67cd1b45.jpg and /dev/null differ diff --git a/docs/0.21.3/img/81dfab5bd4f0d37601684acb3d714e9d.jpg b/docs/0.21.3/img/81dfab5bd4f0d37601684acb3d714e9d.jpg deleted file mode 100644 index 92330b8425ab0de0eb47e1081e9c0b08322c4ffb..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/81dfab5bd4f0d37601684acb3d714e9d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/827de4e90947894fc96dd0432ff0d7dd.jpg b/docs/0.21.3/img/827de4e90947894fc96dd0432ff0d7dd.jpg deleted file mode 100644 index 0ddb7b760373f4f6f994e209311dae91cafd45ae..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/827de4e90947894fc96dd0432ff0d7dd.jpg and /dev/null differ diff --git a/docs/0.21.3/img/841ad1e8353dcbf5fed2a58b2008873f.jpg b/docs/0.21.3/img/841ad1e8353dcbf5fed2a58b2008873f.jpg deleted file mode 100644 index 8137150a18632681d17f3930757ec74f39920b49..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/841ad1e8353dcbf5fed2a58b2008873f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/84298218bd1f4087ce7f8d55a4de1843.jpg b/docs/0.21.3/img/84298218bd1f4087ce7f8d55a4de1843.jpg deleted file mode 100644 index 58af1765311615705c67369d50c90579923760d1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/84298218bd1f4087ce7f8d55a4de1843.jpg and /dev/null differ diff --git a/docs/0.21.3/img/842c30bfbcf39ee4d2ac5d7587f7168c.jpg b/docs/0.21.3/img/842c30bfbcf39ee4d2ac5d7587f7168c.jpg deleted file mode 100644 index 2286c881b5f99004e1b17c99c3b153ac1f98bfa6..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/842c30bfbcf39ee4d2ac5d7587f7168c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/843ad36e77423c1d0d068bf1b0af24fb.jpg b/docs/0.21.3/img/843ad36e77423c1d0d068bf1b0af24fb.jpg deleted file mode 100644 index 2203845315a417018c964fdc6937d072b3141fc0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/843ad36e77423c1d0d068bf1b0af24fb.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8480724cd60359c7a8ceda7bee5590bd.jpg b/docs/0.21.3/img/8480724cd60359c7a8ceda7bee5590bd.jpg deleted file mode 100644 index b8dc90acb962e38a117225e9301da17ceaa132f1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8480724cd60359c7a8ceda7bee5590bd.jpg and /dev/null differ diff --git a/docs/0.21.3/img/848835d5b40c5bd74a6e592a65eed5d6.jpg b/docs/0.21.3/img/848835d5b40c5bd74a6e592a65eed5d6.jpg deleted file mode 100644 index 66ab40f931581d62c6597775b9f67fa9f9e09e4d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/848835d5b40c5bd74a6e592a65eed5d6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8494ed588e1c79e569f4d2add722ecf5.jpg b/docs/0.21.3/img/8494ed588e1c79e569f4d2add722ecf5.jpg deleted file mode 100644 index c6878249db03b93d6f5a3603c77ac48d3f4eccc7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8494ed588e1c79e569f4d2add722ecf5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/851c667ab0811688c25c6819aafacba0.jpg b/docs/0.21.3/img/851c667ab0811688c25c6819aafacba0.jpg deleted file mode 100644 index f53cd5ed51d5c8f80cd19b78dae079d9b83407b8..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/851c667ab0811688c25c6819aafacba0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/855d4e5dae2b0286042ee7eef0c91ab5.jpg b/docs/0.21.3/img/855d4e5dae2b0286042ee7eef0c91ab5.jpg deleted file mode 100644 index f604c4942f76828248347b5bdf8fbed06abb0e92..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/855d4e5dae2b0286042ee7eef0c91ab5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/85f7fc9836edfbdcd2a7533674940b46.jpg b/docs/0.21.3/img/85f7fc9836edfbdcd2a7533674940b46.jpg deleted file mode 100644 index 85d46b75f38d1dd03227275262b7586b8563903b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/85f7fc9836edfbdcd2a7533674940b46.jpg and /dev/null differ diff --git a/docs/0.21.3/img/86003b5287219bcbec1586985a110629.jpg b/docs/0.21.3/img/86003b5287219bcbec1586985a110629.jpg deleted file mode 100644 index e86b0c06663e4337c08e3e2baed26b6d66af559e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/86003b5287219bcbec1586985a110629.jpg and /dev/null differ diff --git a/docs/0.21.3/img/860af894555b3d5f52e893bab6cafc11.jpg b/docs/0.21.3/img/860af894555b3d5f52e893bab6cafc11.jpg deleted file mode 100644 index e2eccf57aaa5acfaffa8ce9e52b40fc77e84221a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/860af894555b3d5f52e893bab6cafc11.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8610705cf45aa68b12197abd65653479.jpg b/docs/0.21.3/img/8610705cf45aa68b12197abd65653479.jpg deleted file mode 100644 index ab31cc77ef08dd31a3df23b18e7edaef354dc6f8..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8610705cf45aa68b12197abd65653479.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8615ac5c8ea1fb8ae6e726f7659a29e9.jpg b/docs/0.21.3/img/8615ac5c8ea1fb8ae6e726f7659a29e9.jpg deleted file mode 100644 index 128dbe39e708151d81b64ec68ea2b0687df84b3f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8615ac5c8ea1fb8ae6e726f7659a29e9.jpg and /dev/null differ diff --git a/docs/0.21.3/img/866891e7bebe66615daa04976af79f99.jpg b/docs/0.21.3/img/866891e7bebe66615daa04976af79f99.jpg deleted file mode 100644 index 5e75a714b4f98c2de6da2449d6140034e19c4c0b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/866891e7bebe66615daa04976af79f99.jpg and /dev/null differ diff --git a/docs/0.21.3/img/86d43b01a4c13ac9d69265ff0d546720.jpg b/docs/0.21.3/img/86d43b01a4c13ac9d69265ff0d546720.jpg deleted file mode 100644 index 1d958fe99cd8258cfad2d94c498c6bbc01484991..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/86d43b01a4c13ac9d69265ff0d546720.jpg and /dev/null differ diff --git a/docs/0.21.3/img/86f7969b00fb3d0914f0bababac102a0.jpg b/docs/0.21.3/img/86f7969b00fb3d0914f0bababac102a0.jpg deleted file mode 100644 index d7715811f75eeb95f9d3f6e14905915477afaaa0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/86f7969b00fb3d0914f0bababac102a0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/87ae31ef4f2e7b4385b9a25aa8fed533.jpg b/docs/0.21.3/img/87ae31ef4f2e7b4385b9a25aa8fed533.jpg deleted file mode 100644 index ebc35813dabd85ac97b59ede61b08acae3df97f3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/87ae31ef4f2e7b4385b9a25aa8fed533.jpg and /dev/null differ diff --git a/docs/0.21.3/img/87c11f44388ae80ae9244e8d56a2dc86.jpg b/docs/0.21.3/img/87c11f44388ae80ae9244e8d56a2dc86.jpg deleted file mode 100644 index 1f3691c100f89eb4d13153cb163c1b7d11dac7d6..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/87c11f44388ae80ae9244e8d56a2dc86.jpg and /dev/null differ diff --git a/docs/0.21.3/img/87dfb2676632ee8a92713f4861ccc84e.jpg b/docs/0.21.3/img/87dfb2676632ee8a92713f4861ccc84e.jpg deleted file mode 100644 index 44fdc8805964523f43d412bb7504514b9ca46b21..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/87dfb2676632ee8a92713f4861ccc84e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/87fef5b961bf8a90d58faa5e4084a081.jpg b/docs/0.21.3/img/87fef5b961bf8a90d58faa5e4084a081.jpg deleted file mode 100644 index 2a7d313699083680a7178a1a4365f06005d362e4..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/87fef5b961bf8a90d58faa5e4084a081.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8851bd0fe9749b4841b30cee41fb040d.jpg b/docs/0.21.3/img/8851bd0fe9749b4841b30cee41fb040d.jpg deleted file mode 100644 index 68f815a4f2ae8b576b6611f9cc42b86f8e465d95..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8851bd0fe9749b4841b30cee41fb040d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/887928b507a2f01847b6ae5f5b0e733f.jpg b/docs/0.21.3/img/887928b507a2f01847b6ae5f5b0e733f.jpg deleted file mode 100644 index a5361d7f8c53b760eb0e372a980eb58c9b1932f3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/887928b507a2f01847b6ae5f5b0e733f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/88c766439d728ffb597e180a42f41d00.jpg b/docs/0.21.3/img/88c766439d728ffb597e180a42f41d00.jpg deleted file mode 100644 index 90f69882904f8926fb67d13ec2e55e7f1d0e2d01..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/88c766439d728ffb597e180a42f41d00.jpg and /dev/null differ diff --git a/docs/0.21.3/img/88d9981d54cd398165b20856ed5043e1.jpg b/docs/0.21.3/img/88d9981d54cd398165b20856ed5043e1.jpg deleted file mode 100644 index ed69fe4ec054c21dc7978a4d2bf6dbd9c9195540..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/88d9981d54cd398165b20856ed5043e1.jpg and /dev/null differ diff --git a/docs/0.21.3/img/88ef3c9a51bdadd21593bf89887a04b5.jpg b/docs/0.21.3/img/88ef3c9a51bdadd21593bf89887a04b5.jpg deleted file mode 100644 index 840b706dcdb9ee66bb88fc44adc823afee700969..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/88ef3c9a51bdadd21593bf89887a04b5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/89807b9fa9f5924b027486f280324b1a.jpg b/docs/0.21.3/img/89807b9fa9f5924b027486f280324b1a.jpg deleted file mode 100644 index 35bf8d9b0db2cf369ca09618a41f3bc107510dfa..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/89807b9fa9f5924b027486f280324b1a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8a58e8df6a985a3273e39bac7dd72b1f.jpg b/docs/0.21.3/img/8a58e8df6a985a3273e39bac7dd72b1f.jpg deleted file mode 100644 index 6693ed2638db2e91f8453490d14a45207d5aa56f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8a58e8df6a985a3273e39bac7dd72b1f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8a76c85f2de3d3777fe72f5d8e32e0cf.jpg b/docs/0.21.3/img/8a76c85f2de3d3777fe72f5d8e32e0cf.jpg deleted file mode 100644 index 2cab8399f472b32b96ec2f8bffa2d73c158320b3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8a76c85f2de3d3777fe72f5d8e32e0cf.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8aca5aa85ff13bf8e8687220b137f9d3.jpg b/docs/0.21.3/img/8aca5aa85ff13bf8e8687220b137f9d3.jpg deleted file mode 100644 index 7e5fa95d67242b19b4fa337e35b1f602289aae3c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8aca5aa85ff13bf8e8687220b137f9d3.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8ae33567ac5e4d4e9b1b14ae12220ea9.jpg b/docs/0.21.3/img/8ae33567ac5e4d4e9b1b14ae12220ea9.jpg deleted file mode 100644 index 172d1fcc5555d72851b86fd1aa4363371b61fee1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8ae33567ac5e4d4e9b1b14ae12220ea9.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8b3be66a25e0c33787b341667b261360.jpg b/docs/0.21.3/img/8b3be66a25e0c33787b341667b261360.jpg deleted file mode 100644 index c24ddfaf1214b13f64c18416e757716319f60850..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8b3be66a25e0c33787b341667b261360.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8bce1ab1dca39a6b7fcb97dcf959a1f7.jpg b/docs/0.21.3/img/8bce1ab1dca39a6b7fcb97dcf959a1f7.jpg deleted file mode 100644 index 331f346eee31355bedbdc0bde3863c561c0cb675..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8bce1ab1dca39a6b7fcb97dcf959a1f7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8c0b5b6a48349ecfb1f20d9168d166b7.jpg b/docs/0.21.3/img/8c0b5b6a48349ecfb1f20d9168d166b7.jpg deleted file mode 100644 index 10b365aa709675c3818cebe831487f6976b35b4b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8c0b5b6a48349ecfb1f20d9168d166b7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8c187292cd29fea23a4983db349e7545.jpg b/docs/0.21.3/img/8c187292cd29fea23a4983db349e7545.jpg deleted file mode 100644 index c772672e350d2837bff2fdd099001f6da1a63c60..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8c187292cd29fea23a4983db349e7545.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8c43dd6816e66709ef3f9d681ec3941a.jpg b/docs/0.21.3/img/8c43dd6816e66709ef3f9d681ec3941a.jpg deleted file mode 100644 index 9b268deee87e573a2d74007931571226228ae876..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8c43dd6816e66709ef3f9d681ec3941a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8c4a5c99b21079b9fb1be49910ff96e3.jpg b/docs/0.21.3/img/8c4a5c99b21079b9fb1be49910ff96e3.jpg deleted file mode 100644 index d9b8167d1764c5afc9e66a044385fcd6109fba5f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8c4a5c99b21079b9fb1be49910ff96e3.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8c4beae51da320d8fffd739a9e9e3852.jpg b/docs/0.21.3/img/8c4beae51da320d8fffd739a9e9e3852.jpg deleted file mode 100644 index 003334b15c32cb5325a2158b008b1ab4e4715f71..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8c4beae51da320d8fffd739a9e9e3852.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8c8211edce4dbaeb44032f8d71a12135.jpg b/docs/0.21.3/img/8c8211edce4dbaeb44032f8d71a12135.jpg deleted file mode 100644 index 7377dbe9b6654be09aee728be6d503c335feabc0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8c8211edce4dbaeb44032f8d71a12135.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8c8c09a18e398935473d8b69cf1b617e.jpg b/docs/0.21.3/img/8c8c09a18e398935473d8b69cf1b617e.jpg deleted file mode 100644 index 88c98a7c462a15fb12d2f4bb8aa3aa5ece80344e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8c8c09a18e398935473d8b69cf1b617e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8cc09b4045e2fece3222e52d7333c1e5.jpg b/docs/0.21.3/img/8cc09b4045e2fece3222e52d7333c1e5.jpg deleted file mode 100644 index bf3f2d7a05736626d7b9c44f99ece3168d946f91..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8cc09b4045e2fece3222e52d7333c1e5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8cddd8c0c85ca4a1b6dce8bbf145a8aa.jpg b/docs/0.21.3/img/8cddd8c0c85ca4a1b6dce8bbf145a8aa.jpg deleted file mode 100644 index 6c9d7f28f82fc7c8b3dc2fffd5da9c1b91e48355..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8cddd8c0c85ca4a1b6dce8bbf145a8aa.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8dab78bd2e80188f99e0c88c4c83472a.jpg b/docs/0.21.3/img/8dab78bd2e80188f99e0c88c4c83472a.jpg deleted file mode 100644 index 3063ede25ca10251b88d66c2d6c6ce02c91ce331..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8dab78bd2e80188f99e0c88c4c83472a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8dcf0f01f9d255c37e21948ad3821885.jpg b/docs/0.21.3/img/8dcf0f01f9d255c37e21948ad3821885.jpg deleted file mode 100644 index b5562d19922c32a5dc12d101c442ccd57d496571..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8dcf0f01f9d255c37e21948ad3821885.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8dd0e1ef4fdc9bbfcc8b0ce3fa8a4321.jpg b/docs/0.21.3/img/8dd0e1ef4fdc9bbfcc8b0ce3fa8a4321.jpg deleted file mode 100644 index 503015706b8846a9e55fb4495fe95188872a62fa..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8dd0e1ef4fdc9bbfcc8b0ce3fa8a4321.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8ef970a809e9beef56eb7a78d0133978.jpg b/docs/0.21.3/img/8ef970a809e9beef56eb7a78d0133978.jpg deleted file mode 100644 index b048c4e006e7e7f184944f91e0528c9a389f5df1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8ef970a809e9beef56eb7a78d0133978.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8f4e82e4dfa89ac81c42992c603a953e.jpg b/docs/0.21.3/img/8f4e82e4dfa89ac81c42992c603a953e.jpg deleted file mode 100644 index d5468db663a4f8050ef8b164489bc8af3383c54b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8f4e82e4dfa89ac81c42992c603a953e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8f4f76678eb50ebccaba25e86961ff3e.jpg b/docs/0.21.3/img/8f4f76678eb50ebccaba25e86961ff3e.jpg deleted file mode 100644 index c5a635f6a95343c17db39b975d38ecc47632a063..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8f4f76678eb50ebccaba25e86961ff3e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8f62a01deaf67a7f9960d853abd9dcca.jpg b/docs/0.21.3/img/8f62a01deaf67a7f9960d853abd9dcca.jpg deleted file mode 100644 index 0b681d45bd557dd9fa8ef916a0c35dccb25f9e06..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8f62a01deaf67a7f9960d853abd9dcca.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8f839ebe5b506fef19bd8cc121b3f557.jpg b/docs/0.21.3/img/8f839ebe5b506fef19bd8cc121b3f557.jpg deleted file mode 100644 index e745bf0703932cba51a199433fbaf6cd6cd2187d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8f839ebe5b506fef19bd8cc121b3f557.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8fae035cff5a2ccfbc80e38fab4907cd.jpg b/docs/0.21.3/img/8fae035cff5a2ccfbc80e38fab4907cd.jpg deleted file mode 100644 index 75b4712ce83e6620d967d220fe8b027cdf6d8584..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8fae035cff5a2ccfbc80e38fab4907cd.jpg and /dev/null differ diff --git a/docs/0.21.3/img/8fe0d726b364f224c93e31cd3248a1f6.jpg b/docs/0.21.3/img/8fe0d726b364f224c93e31cd3248a1f6.jpg deleted file mode 100644 index a943b4dc47354b02e9d276d380b60e234e250220..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/8fe0d726b364f224c93e31cd3248a1f6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9127c3e2b5748eee602354fed5570605.jpg b/docs/0.21.3/img/9127c3e2b5748eee602354fed5570605.jpg deleted file mode 100644 index 5f9699cc771f4e557147f57fa8ab0545a5d2f54d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9127c3e2b5748eee602354fed5570605.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9255ba83a88cb73b04d1ca968f9c2b4e.jpg b/docs/0.21.3/img/9255ba83a88cb73b04d1ca968f9c2b4e.jpg deleted file mode 100644 index 3ea6dfb32262c329f79c34f0769dc389923e6a4d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9255ba83a88cb73b04d1ca968f9c2b4e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/92570652e9c52768c76f5b9cf8f97a28.jpg b/docs/0.21.3/img/92570652e9c52768c76f5b9cf8f97a28.jpg deleted file mode 100644 index 917b3329d3377b3f3d03f96c6328dd55f1dfb835..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/92570652e9c52768c76f5b9cf8f97a28.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9259b19a18f30f67db9e45b8c0b361c7.jpg b/docs/0.21.3/img/9259b19a18f30f67db9e45b8c0b361c7.jpg deleted file mode 100644 index 1cdd3840051891bdae00a2900b3cce0b4566e4c4..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9259b19a18f30f67db9e45b8c0b361c7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/929e25fd2cb34bf9709d68d266786fd3.jpg b/docs/0.21.3/img/929e25fd2cb34bf9709d68d266786fd3.jpg deleted file mode 100644 index f0d5625f2be2f43e9cc1a3bb1220e6b40ca1f53e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/929e25fd2cb34bf9709d68d266786fd3.jpg and /dev/null differ diff --git a/docs/0.21.3/img/92c470d884176abfcc29a5218ccf0aef.jpg b/docs/0.21.3/img/92c470d884176abfcc29a5218ccf0aef.jpg deleted file mode 100644 index 9dedc86bf720b21fa121372e4c1dfd1d96e268a0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/92c470d884176abfcc29a5218ccf0aef.jpg and /dev/null differ diff --git a/docs/0.21.3/img/92e5a41435bd53653e9ad36f030cbd61.jpg b/docs/0.21.3/img/92e5a41435bd53653e9ad36f030cbd61.jpg deleted file mode 100644 index 33ff5bdcdc81787f2a0d12f263fbce45f81f74d7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/92e5a41435bd53653e9ad36f030cbd61.jpg and /dev/null differ diff --git a/docs/0.21.3/img/93074566222e67121a8ab55e90d8e1af.jpg b/docs/0.21.3/img/93074566222e67121a8ab55e90d8e1af.jpg deleted file mode 100644 index 8f67194eac8e8756d904f27114bb8fe7e045ae2c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/93074566222e67121a8ab55e90d8e1af.jpg and /dev/null differ diff --git a/docs/0.21.3/img/93401b902ac1e2a94ff3ce04e7f05882.jpg b/docs/0.21.3/img/93401b902ac1e2a94ff3ce04e7f05882.jpg deleted file mode 100644 index 492c8491496da6a34e28163f54bb6cc5f0b6ae29..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/93401b902ac1e2a94ff3ce04e7f05882.jpg and /dev/null differ diff --git a/docs/0.21.3/img/938ee5c0c620fd2298ea16abe621e7bb.jpg b/docs/0.21.3/img/938ee5c0c620fd2298ea16abe621e7bb.jpg deleted file mode 100644 index e1f164f414df5a066e9a230c5b47a438885e0db2..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/938ee5c0c620fd2298ea16abe621e7bb.jpg and /dev/null differ diff --git a/docs/0.21.3/img/93cdc140e4de4cbb0d093fc7ad5c6a36.jpg b/docs/0.21.3/img/93cdc140e4de4cbb0d093fc7ad5c6a36.jpg deleted file mode 100644 index 83dff265f873b41369b36ff6561f05a0521b4f8d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/93cdc140e4de4cbb0d093fc7ad5c6a36.jpg and /dev/null differ diff --git a/docs/0.21.3/img/93d2f2876517637396e99e36132252f3.jpg b/docs/0.21.3/img/93d2f2876517637396e99e36132252f3.jpg deleted file mode 100644 index f2d6c39e470dbf0fab82249b3029a27644f442dc..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/93d2f2876517637396e99e36132252f3.jpg and /dev/null differ diff --git a/docs/0.21.3/img/94156b879a7455cb0d516efa9c9c0991.jpg b/docs/0.21.3/img/94156b879a7455cb0d516efa9c9c0991.jpg deleted file mode 100644 index 23c3acdd48cb44440fa887dacea341ecc6bcbeb8..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/94156b879a7455cb0d516efa9c9c0991.jpg and /dev/null differ diff --git a/docs/0.21.3/img/942734d190e4b1d2c51b0e2ee6c24428.jpg b/docs/0.21.3/img/942734d190e4b1d2c51b0e2ee6c24428.jpg deleted file mode 100644 index c194ce3c29005b9201f013b0921d90979d60b57b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/942734d190e4b1d2c51b0e2ee6c24428.jpg and /dev/null differ diff --git a/docs/0.21.3/img/943add7649d85f7ef63a83356dd6f234.jpg b/docs/0.21.3/img/943add7649d85f7ef63a83356dd6f234.jpg deleted file mode 100644 index f02f31879de3eeef12a6b139da8863f13c5e5f4b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/943add7649d85f7ef63a83356dd6f234.jpg and /dev/null differ diff --git a/docs/0.21.3/img/94435503540f66cab82015a35139213d.jpg b/docs/0.21.3/img/94435503540f66cab82015a35139213d.jpg deleted file mode 100644 index 92ece3f32340fa5cf979c761434bd6356fad9d8e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/94435503540f66cab82015a35139213d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/947ae691edda29c53c3b962665b052c6.jpg b/docs/0.21.3/img/947ae691edda29c53c3b962665b052c6.jpg deleted file mode 100644 index 4e3cc5a9ebe092e48726824421188ed518929bfb..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/947ae691edda29c53c3b962665b052c6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/94a5c73d8f351280b6313519455a11c7.jpg b/docs/0.21.3/img/94a5c73d8f351280b6313519455a11c7.jpg deleted file mode 100644 index 8fc9d035480b59a226d0d52a376e1ea5339ba210..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/94a5c73d8f351280b6313519455a11c7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/94f627411c005fe4911552b1dd5b6ff1.jpg b/docs/0.21.3/img/94f627411c005fe4911552b1dd5b6ff1.jpg deleted file mode 100644 index 5ca038cc0efaac982419afe1d297effb3ee13a7d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/94f627411c005fe4911552b1dd5b6ff1.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9521899a181a367c5873e61b9f7785ce.jpg b/docs/0.21.3/img/9521899a181a367c5873e61b9f7785ce.jpg deleted file mode 100644 index 839170378b62644f218838deceeff27060242c72..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9521899a181a367c5873e61b9f7785ce.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9642d01a97f06869baba6159e3438677.jpg b/docs/0.21.3/img/9642d01a97f06869baba6159e3438677.jpg deleted file mode 100644 index 0d7da2a6145f4e7fb557815cbc5b7a1c6885afa6..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9642d01a97f06869baba6159e3438677.jpg and /dev/null differ diff --git a/docs/0.21.3/img/966bd0680e0e71a4df98abab98818724.jpg b/docs/0.21.3/img/966bd0680e0e71a4df98abab98818724.jpg deleted file mode 100644 index 25812ff2d07200e7e4690efcf5557ed1036da257..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/966bd0680e0e71a4df98abab98818724.jpg and /dev/null differ diff --git a/docs/0.21.3/img/971b86cde9801a3bb1a80af70bd05466.jpg b/docs/0.21.3/img/971b86cde9801a3bb1a80af70bd05466.jpg deleted file mode 100644 index 1807ad101963dc8c5330a434b3ecff45d83c0fe8..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/971b86cde9801a3bb1a80af70bd05466.jpg and /dev/null differ diff --git a/docs/0.21.3/img/97b3ab2cc18a43b00c07a1cf6e118798.jpg b/docs/0.21.3/img/97b3ab2cc18a43b00c07a1cf6e118798.jpg deleted file mode 100644 index e233acabff8a535a587ea9de6309dda5f6b466e5..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/97b3ab2cc18a43b00c07a1cf6e118798.jpg and /dev/null differ diff --git a/docs/0.21.3/img/97f4093251d6c6f6f7d0902a86a08dbe.jpg b/docs/0.21.3/img/97f4093251d6c6f6f7d0902a86a08dbe.jpg deleted file mode 100644 index e8a012cce9daae158513ce610a0376ef04551c5a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/97f4093251d6c6f6f7d0902a86a08dbe.jpg and /dev/null differ diff --git a/docs/0.21.3/img/97f450040417800904df33c9702d2c66.jpg b/docs/0.21.3/img/97f450040417800904df33c9702d2c66.jpg deleted file mode 100644 index 94765a3da1f6d8e34e1d36c1bd36edb3c4df36f6..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/97f450040417800904df33c9702d2c66.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9812effbd6ddac1053fd0b63ebe8c2fb.jpg b/docs/0.21.3/img/9812effbd6ddac1053fd0b63ebe8c2fb.jpg deleted file mode 100644 index af2863db8b7ffe0b77d02b1effa0665d7ca34637..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9812effbd6ddac1053fd0b63ebe8c2fb.jpg and /dev/null differ diff --git a/docs/0.21.3/img/983133e80141fbf289a10f379c11b34f.jpg b/docs/0.21.3/img/983133e80141fbf289a10f379c11b34f.jpg deleted file mode 100644 index 6fc7662e834057e4c49156bc5aa9d66e3ebb5739..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/983133e80141fbf289a10f379c11b34f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9839512f63b7e5de021f13f7e6bd6b22.jpg b/docs/0.21.3/img/9839512f63b7e5de021f13f7e6bd6b22.jpg deleted file mode 100644 index eea76f1e8be629446273f6b084486dfee89a91ed..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9839512f63b7e5de021f13f7e6bd6b22.jpg and /dev/null differ diff --git a/docs/0.21.3/img/987fc6b717a40e57a95fb79a8e809309.jpg b/docs/0.21.3/img/987fc6b717a40e57a95fb79a8e809309.jpg deleted file mode 100644 index 2bd38f62604343fd6c89c5e2f7bd0a190138d755..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/987fc6b717a40e57a95fb79a8e809309.jpg and /dev/null differ diff --git a/docs/0.21.3/img/995e683eac95f8e8e65d96c6516858e7.jpg b/docs/0.21.3/img/995e683eac95f8e8e65d96c6516858e7.jpg deleted file mode 100644 index 954f12db845afa63afb4ca0cf2fd4c5fd3cb4e83..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/995e683eac95f8e8e65d96c6516858e7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/997e17f4d9f18abfb95e6c9f1f289098.jpg b/docs/0.21.3/img/997e17f4d9f18abfb95e6c9f1f289098.jpg deleted file mode 100644 index 592de0ebd059553d547eacde073a6cba26ef8593..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/997e17f4d9f18abfb95e6c9f1f289098.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9997b300f697e018f955724f7106ad09.jpg b/docs/0.21.3/img/9997b300f697e018f955724f7106ad09.jpg deleted file mode 100644 index 6dd731abd238e018cf6eb32f383a28dcae6c5803..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9997b300f697e018f955724f7106ad09.jpg and /dev/null differ diff --git a/docs/0.21.3/img/99988260d9d836d14b2569c2fc921e81.jpg b/docs/0.21.3/img/99988260d9d836d14b2569c2fc921e81.jpg deleted file mode 100644 index 9ed95b29e788ab233dd9158e6d23c972874bad0f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/99988260d9d836d14b2569c2fc921e81.jpg and /dev/null differ diff --git a/docs/0.21.3/img/99d4804dc3d2ef82e10d91de99d0142a.jpg b/docs/0.21.3/img/99d4804dc3d2ef82e10d91de99d0142a.jpg deleted file mode 100644 index c5e4c8a065a7b44950fba9967dd8a0a493b09bcd..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/99d4804dc3d2ef82e10d91de99d0142a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/99dfcad081b3f6e1f4648a9f7d24f103.jpg b/docs/0.21.3/img/99dfcad081b3f6e1f4648a9f7d24f103.jpg deleted file mode 100644 index 1bde6ddd47ff1f6b9fe664422df61eaaa4ef7688..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/99dfcad081b3f6e1f4648a9f7d24f103.jpg and /dev/null differ diff --git a/docs/0.21.3/img/99e96cb74c925ba51098fe6167e22c44.jpg b/docs/0.21.3/img/99e96cb74c925ba51098fe6167e22c44.jpg deleted file mode 100644 index e6d72d2d90cc948194001577df1115c370e9cb26..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/99e96cb74c925ba51098fe6167e22c44.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9a2b4cb70f12a0e7419ffde362e1bed4.jpg b/docs/0.21.3/img/9a2b4cb70f12a0e7419ffde362e1bed4.jpg deleted file mode 100644 index 1c65a6f1f816057335ad1f0c937cfd83c98fafb7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9a2b4cb70f12a0e7419ffde362e1bed4.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9a55689143b2e4d90adcdfe1f95b9ffd.jpg b/docs/0.21.3/img/9a55689143b2e4d90adcdfe1f95b9ffd.jpg deleted file mode 100644 index 5b08521bfda94a26b6c2da36b9cbcfce336f697f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9a55689143b2e4d90adcdfe1f95b9ffd.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9a5f8912e7fe77be2acea88fd091a5d8.jpg b/docs/0.21.3/img/9a5f8912e7fe77be2acea88fd091a5d8.jpg deleted file mode 100644 index 9132a776f5825a4a4798fe5f99e64af30b4f78cd..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9a5f8912e7fe77be2acea88fd091a5d8.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9ad9b5d15124615ced9c9721a8ef4d3b.jpg b/docs/0.21.3/img/9ad9b5d15124615ced9c9721a8ef4d3b.jpg deleted file mode 100644 index f2a5a99976205ece0b7e81475063ffc64ac689f1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9ad9b5d15124615ced9c9721a8ef4d3b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9afe9de54aeed2a857e99cf6444ff0e5.jpg b/docs/0.21.3/img/9afe9de54aeed2a857e99cf6444ff0e5.jpg deleted file mode 100644 index 54801827a6dbee3593483f9dc6e2e2fa096d094d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9afe9de54aeed2a857e99cf6444ff0e5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9b4b00422c0cec29f80a03fe1d772100.jpg b/docs/0.21.3/img/9b4b00422c0cec29f80a03fe1d772100.jpg deleted file mode 100644 index f67db812947e3cc0ff03fee919af1faf74025139..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9b4b00422c0cec29f80a03fe1d772100.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9b5fb6c6e0f320a3e8e0ba606d601c98.jpg b/docs/0.21.3/img/9b5fb6c6e0f320a3e8e0ba606d601c98.jpg deleted file mode 100644 index 494c9edad7ae5dd16915620a22a81e9f6950e24e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9b5fb6c6e0f320a3e8e0ba606d601c98.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9b6c97851ffb568abc5688d5c9e81800.jpg b/docs/0.21.3/img/9b6c97851ffb568abc5688d5c9e81800.jpg deleted file mode 100644 index a01b0bfa4b704eebb83ebb3aa69b8333415b447d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9b6c97851ffb568abc5688d5c9e81800.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9b7a1b832e3f1e4ea340038115e6b00d.jpg b/docs/0.21.3/img/9b7a1b832e3f1e4ea340038115e6b00d.jpg deleted file mode 100644 index a285d87375fc2b21ecd76ccccc4df9b2fbc19f24..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9b7a1b832e3f1e4ea340038115e6b00d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9b85a5f7098321120773184b4673cbeb.jpg b/docs/0.21.3/img/9b85a5f7098321120773184b4673cbeb.jpg deleted file mode 100644 index 4ebe6be64f8b40f4c9c15e27cb0e71da42b1ec69..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9b85a5f7098321120773184b4673cbeb.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9b9ee41d276ad49322856b95cb6c7e43.jpg b/docs/0.21.3/img/9b9ee41d276ad49322856b95cb6c7e43.jpg deleted file mode 100644 index c6942f4219e22e9778fc6bab76ed7f495abccd97..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9b9ee41d276ad49322856b95cb6c7e43.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9ca39b9e9aa5f1a4660e45f3c9b5ef7b.jpg b/docs/0.21.3/img/9ca39b9e9aa5f1a4660e45f3c9b5ef7b.jpg deleted file mode 100644 index 0b26b541bae7625151cffa380340c58442f49b7d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9ca39b9e9aa5f1a4660e45f3c9b5ef7b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9cb7de99579cbd4664159c8a06417d13.jpg b/docs/0.21.3/img/9cb7de99579cbd4664159c8a06417d13.jpg deleted file mode 100644 index cf39f7039144f3aeae5584aa1b514b5b7433ebae..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9cb7de99579cbd4664159c8a06417d13.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9d2e3befcfa08a4b6a7cfed8dadbd5c0.jpg b/docs/0.21.3/img/9d2e3befcfa08a4b6a7cfed8dadbd5c0.jpg deleted file mode 100644 index 6943fbab2b68e866e06148ad2ee14b4e6ceaeaa8..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9d2e3befcfa08a4b6a7cfed8dadbd5c0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9e49f9c5d629711b032b027324d531b9.jpg b/docs/0.21.3/img/9e49f9c5d629711b032b027324d531b9.jpg deleted file mode 100644 index c4c33a1e35de12b0c1b5bf3d0fb1fcd0999ff258..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9e49f9c5d629711b032b027324d531b9.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9ef5bf146675caa32b298d7e8318fc43.jpg b/docs/0.21.3/img/9ef5bf146675caa32b298d7e8318fc43.jpg deleted file mode 100644 index 98582f481ba9b5675641ec4f0a3b2a92d07b5919..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9ef5bf146675caa32b298d7e8318fc43.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9f2872d8b84b398d8dd6408fd880d3b4.jpg b/docs/0.21.3/img/9f2872d8b84b398d8dd6408fd880d3b4.jpg deleted file mode 100644 index a9f965ba68cb0d26df244171e7845c51a3b24f74..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9f2872d8b84b398d8dd6408fd880d3b4.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9f4178a540cbe2b9f093702d71bafbe5.jpg b/docs/0.21.3/img/9f4178a540cbe2b9f093702d71bafbe5.jpg deleted file mode 100644 index 1727aea15f162358da3dea836d84c33fd9e627e2..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9f4178a540cbe2b9f093702d71bafbe5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/9fd83615429a9be9e5698d35bec8642a.jpg b/docs/0.21.3/img/9fd83615429a9be9e5698d35bec8642a.jpg deleted file mode 100644 index cb8e8d2542533f1f01ea28c450e2b89638c54295..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/9fd83615429a9be9e5698d35bec8642a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a036c2c31320cfaea7959236c1b81d4c.jpg b/docs/0.21.3/img/a036c2c31320cfaea7959236c1b81d4c.jpg deleted file mode 100644 index 4eba4631c24c3f3e72124a2623b1ee2eb060f4ae..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a036c2c31320cfaea7959236c1b81d4c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a060693e746caf8e0ff030ed5411520f.jpg b/docs/0.21.3/img/a060693e746caf8e0ff030ed5411520f.jpg deleted file mode 100644 index 90defd3df5c2bdac599f3d167e9a42fa9bddb0c0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a060693e746caf8e0ff030ed5411520f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a0bb00db4979d538e9ca2f0a8b423286.jpg b/docs/0.21.3/img/a0bb00db4979d538e9ca2f0a8b423286.jpg deleted file mode 100644 index c973332309cbcf66c7a8f50231a49f4f3654ed72..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a0bb00db4979d538e9ca2f0a8b423286.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a0c2e3fe9c6a7a8416435260aa55dc4a.jpg b/docs/0.21.3/img/a0c2e3fe9c6a7a8416435260aa55dc4a.jpg deleted file mode 100644 index 73b7891522d783f96f20f9ceb55a7f3503581736..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a0c2e3fe9c6a7a8416435260aa55dc4a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a0fc07cc08abaf336142bf23fb4f5cc2.jpg b/docs/0.21.3/img/a0fc07cc08abaf336142bf23fb4f5cc2.jpg deleted file mode 100644 index 72ea222cef0eaf0948b3f83b9f136f66e899652b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a0fc07cc08abaf336142bf23fb4f5cc2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a1670c1fcb5b7ad10830f43812ed50da.jpg b/docs/0.21.3/img/a1670c1fcb5b7ad10830f43812ed50da.jpg deleted file mode 100644 index 77989351b857c5fb1b481cf10bae143ab6e4c854..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a1670c1fcb5b7ad10830f43812ed50da.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a19f2294e2649252ad2b5766d295e75e.jpg b/docs/0.21.3/img/a19f2294e2649252ad2b5766d295e75e.jpg deleted file mode 100644 index a71d1dae1ddbe29b6374339a10950f1396ef023b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a19f2294e2649252ad2b5766d295e75e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a1bd06d03e764db224f0e10b4f024bdd.jpg b/docs/0.21.3/img/a1bd06d03e764db224f0e10b4f024bdd.jpg deleted file mode 100644 index e908741cb25f5c139399fca57562fc90a81d6e34..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a1bd06d03e764db224f0e10b4f024bdd.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a201561ab545f4fd9cba5a2e0eae9a94.jpg b/docs/0.21.3/img/a201561ab545f4fd9cba5a2e0eae9a94.jpg deleted file mode 100644 index 944b50b47ece114d08a4549861b5e73be7a685a0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a201561ab545f4fd9cba5a2e0eae9a94.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a243fb2cabe46c32a3a66214f514d623.jpg b/docs/0.21.3/img/a243fb2cabe46c32a3a66214f514d623.jpg deleted file mode 100644 index 9605c970fc1874af6b50682abb52a18af131c8f1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a243fb2cabe46c32a3a66214f514d623.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a24e299927ed136dd98d6c87904c973d.jpg b/docs/0.21.3/img/a24e299927ed136dd98d6c87904c973d.jpg deleted file mode 100644 index 55ec8055ac9d62a88d35cfacc7618eb90dc08f31..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a24e299927ed136dd98d6c87904c973d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a25320a2e009abd4269f291f85062a5d.jpg b/docs/0.21.3/img/a25320a2e009abd4269f291f85062a5d.jpg deleted file mode 100644 index 9d04e14ae0904a3335420d120ba83dabd29c6ec8..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a25320a2e009abd4269f291f85062a5d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a25ab5d7faac5be22a6d242286376161.jpg b/docs/0.21.3/img/a25ab5d7faac5be22a6d242286376161.jpg deleted file mode 100644 index 1f23e9bb79bcfb93218cdee43542029b21f93f7e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a25ab5d7faac5be22a6d242286376161.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a35122280170c396ab3c9d8fa3b62446.jpg b/docs/0.21.3/img/a35122280170c396ab3c9d8fa3b62446.jpg deleted file mode 100644 index 2fc97430336246985b6a1dd72a6a58482f337deb..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a35122280170c396ab3c9d8fa3b62446.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a44a7c045f2217894a894c482861387a.jpg b/docs/0.21.3/img/a44a7c045f2217894a894c482861387a.jpg deleted file mode 100644 index c7b0ff3e5155cc04fff4e59e983582e866a07837..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a44a7c045f2217894a894c482861387a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a4775baaa990a4fbffcfc2688e3b5578.jpg b/docs/0.21.3/img/a4775baaa990a4fbffcfc2688e3b5578.jpg deleted file mode 100644 index b2c86fa07e0fb3dd78888decc27fe8dcaa683d9a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a4775baaa990a4fbffcfc2688e3b5578.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a4a20739f22e7059a927ba615ec373da.jpg b/docs/0.21.3/img/a4a20739f22e7059a927ba615ec373da.jpg deleted file mode 100644 index 05a54a0de86e48feaf43a598c40aa4bd9bb8237f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a4a20739f22e7059a927ba615ec373da.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a4dd5119f3eeb13b99180aab64917975.jpg b/docs/0.21.3/img/a4dd5119f3eeb13b99180aab64917975.jpg deleted file mode 100644 index bf7b8983ff6f88ef6ba5f2f9ac1c74723ac00bf2..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a4dd5119f3eeb13b99180aab64917975.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a51f44dfa9b1942326c669c5ffe3f9f6.jpg b/docs/0.21.3/img/a51f44dfa9b1942326c669c5ffe3f9f6.jpg deleted file mode 100644 index b1d92bb34e78606c38f3ebefbc39425bc78d5857..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a51f44dfa9b1942326c669c5ffe3f9f6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a539f6901c50549f8d30f6d7f6f3e177.jpg b/docs/0.21.3/img/a539f6901c50549f8d30f6d7f6f3e177.jpg deleted file mode 100644 index a80b612354e5156c37053cf68a746e8fc9837420..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a539f6901c50549f8d30f6d7f6f3e177.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a561362ff63affeb799b9d33423235a3.jpg b/docs/0.21.3/img/a561362ff63affeb799b9d33423235a3.jpg deleted file mode 100644 index e9f5b95f7bd16a697f8dcb8eaab8bfcedea6751f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a561362ff63affeb799b9d33423235a3.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a6334506478d6feb4025038294ccfa00.jpg b/docs/0.21.3/img/a6334506478d6feb4025038294ccfa00.jpg deleted file mode 100644 index 013000c0d883ae9416ed760d04eb5e40213e91b5..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a6334506478d6feb4025038294ccfa00.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a6509a4f7b1838eb6d76d30036a00ffd.jpg b/docs/0.21.3/img/a6509a4f7b1838eb6d76d30036a00ffd.jpg deleted file mode 100644 index 1329036da66c05f9faa672baf8b7e9fc37cb4200..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a6509a4f7b1838eb6d76d30036a00ffd.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a6dba4aa006d4689de18a4de5acaa949.jpg b/docs/0.21.3/img/a6dba4aa006d4689de18a4de5acaa949.jpg deleted file mode 100644 index 9ddbb036f711f1188967296dce37a165c1cd71a7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a6dba4aa006d4689de18a4de5acaa949.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a70da26e29baa95b2f65f3cbc2e5fbfa.jpg b/docs/0.21.3/img/a70da26e29baa95b2f65f3cbc2e5fbfa.jpg deleted file mode 100644 index fcd15be2365094941e734e99ab311ca7a6fbee01..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a70da26e29baa95b2f65f3cbc2e5fbfa.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a71a1d9e35b09d284da476b2175edf6f.jpg b/docs/0.21.3/img/a71a1d9e35b09d284da476b2175edf6f.jpg deleted file mode 100644 index f160acfa4d9aa93839da4bdff9ce32dd233dd50c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a71a1d9e35b09d284da476b2175edf6f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a8e210a94f6eac6c32bc219dbc049288.jpg b/docs/0.21.3/img/a8e210a94f6eac6c32bc219dbc049288.jpg deleted file mode 100644 index 0067904defe95eeff3daa0dbc0de28f0aaae9e60..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a8e210a94f6eac6c32bc219dbc049288.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a8f0b97723e99a7ddae947c83f43ff45.jpg b/docs/0.21.3/img/a8f0b97723e99a7ddae947c83f43ff45.jpg deleted file mode 100644 index 9686a085e85daa775e9671aa89620fbdab4e2cf1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a8f0b97723e99a7ddae947c83f43ff45.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a921f24886997e2a5b94e2abb46d8402.jpg b/docs/0.21.3/img/a921f24886997e2a5b94e2abb46d8402.jpg deleted file mode 100644 index 81efff451f1e89bd1a24124d59126bf95e9cd979..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a921f24886997e2a5b94e2abb46d8402.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a960dd9452e5e5da7b211f6fdc120a0d.jpg b/docs/0.21.3/img/a960dd9452e5e5da7b211f6fdc120a0d.jpg deleted file mode 100644 index 931d72e3496dd6bbe14829189c9a748db67e1f88..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a960dd9452e5e5da7b211f6fdc120a0d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a98f0fb22381bfc1d14fc1e3f7e737e5.jpg b/docs/0.21.3/img/a98f0fb22381bfc1d14fc1e3f7e737e5.jpg deleted file mode 100644 index fcd5737e26f437e2c4a2cc8619229a295b255697..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a98f0fb22381bfc1d14fc1e3f7e737e5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a9cd44019704ddd9877089f25d6a229e.jpg b/docs/0.21.3/img/a9cd44019704ddd9877089f25d6a229e.jpg deleted file mode 100644 index bc3d6612c28d5dd371824df65f78e29e3ae7807f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a9cd44019704ddd9877089f25d6a229e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/a9e58e92cdae50e285a704a6d1ccbafc.jpg b/docs/0.21.3/img/a9e58e92cdae50e285a704a6d1ccbafc.jpg deleted file mode 100644 index c523fd1b40190fc0b64b31d9b50928f36e98edfb..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/a9e58e92cdae50e285a704a6d1ccbafc.jpg and /dev/null differ diff --git a/docs/0.21.3/img/aa0c61cd560f0fdab4fe10c7b12e5082.jpg b/docs/0.21.3/img/aa0c61cd560f0fdab4fe10c7b12e5082.jpg deleted file mode 100644 index a178ddd280b645af599d408ea018f3013f964828..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/aa0c61cd560f0fdab4fe10c7b12e5082.jpg and /dev/null differ diff --git a/docs/0.21.3/img/aa5e9ace265afd9e1f881564a1923a17.jpg b/docs/0.21.3/img/aa5e9ace265afd9e1f881564a1923a17.jpg deleted file mode 100644 index 1d005130477bf24749c18437e75feecfda00d2a2..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/aa5e9ace265afd9e1f881564a1923a17.jpg and /dev/null differ diff --git a/docs/0.21.3/img/aaa84c285eb96ed446fd34be4b51bbec.jpg b/docs/0.21.3/img/aaa84c285eb96ed446fd34be4b51bbec.jpg deleted file mode 100644 index 16902b9f552b657b905c9418ee4ccad33d08e2b2..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/aaa84c285eb96ed446fd34be4b51bbec.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ab2096ee4087e644cca732d92d241edf.jpg b/docs/0.21.3/img/ab2096ee4087e644cca732d92d241edf.jpg deleted file mode 100644 index 9b2fd505bdfdb474461942bc0101edd26707b1a9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ab2096ee4087e644cca732d92d241edf.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ab81f225a7e452d651b4888d437d07d2.jpg b/docs/0.21.3/img/ab81f225a7e452d651b4888d437d07d2.jpg deleted file mode 100644 index 66ce97755dbafae8195fa4b76d12eb8c6fd1a7bf..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ab81f225a7e452d651b4888d437d07d2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/aba080a369ca542a90a264a04dd518c5.jpg b/docs/0.21.3/img/aba080a369ca542a90a264a04dd518c5.jpg deleted file mode 100644 index 0ec9ea4ce295669f7c8b756278444173b47da115..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/aba080a369ca542a90a264a04dd518c5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/aba64ff85b1f99c5d1c4f8e1ace15f89.jpg b/docs/0.21.3/img/aba64ff85b1f99c5d1c4f8e1ace15f89.jpg deleted file mode 100644 index cfedc0a30a11475cf177d85b5851f7d261b80ffa..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/aba64ff85b1f99c5d1c4f8e1ace15f89.jpg and /dev/null differ diff --git a/docs/0.21.3/img/abd232bd41a9d1b51021b788e2a82dd9.jpg b/docs/0.21.3/img/abd232bd41a9d1b51021b788e2a82dd9.jpg deleted file mode 100644 index 2ee5ba477b922871b757f6ae42f3e27611685800..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/abd232bd41a9d1b51021b788e2a82dd9.jpg and /dev/null differ diff --git a/docs/0.21.3/img/abed66e83395b34fe3c020cfcab3dce9.jpg b/docs/0.21.3/img/abed66e83395b34fe3c020cfcab3dce9.jpg deleted file mode 100644 index feea920aa16dd14b5fbb0ca396909bd3bac35cdf..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/abed66e83395b34fe3c020cfcab3dce9.jpg and /dev/null differ diff --git a/docs/0.21.3/img/abee3460000f8532d0df4e1b1d1928e8.jpg b/docs/0.21.3/img/abee3460000f8532d0df4e1b1d1928e8.jpg deleted file mode 100644 index bbe40f632efb4f088b099bf4e6b1a5f6d30dcf02..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/abee3460000f8532d0df4e1b1d1928e8.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ac11972df0ad68aba63757a4ba1ee02b.jpg b/docs/0.21.3/img/ac11972df0ad68aba63757a4ba1ee02b.jpg deleted file mode 100644 index cdb793f42b66748adeb4facb62ec38c14cb49461..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ac11972df0ad68aba63757a4ba1ee02b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ac23b915eb44e4fa668b8d56785e2c20.jpg b/docs/0.21.3/img/ac23b915eb44e4fa668b8d56785e2c20.jpg deleted file mode 100644 index 162897358b85938dab5942c52e57bbbdfc93a1bc..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ac23b915eb44e4fa668b8d56785e2c20.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ac9afe17947eb296e1701877b220779d.jpg b/docs/0.21.3/img/ac9afe17947eb296e1701877b220779d.jpg deleted file mode 100644 index 8f06aff27fb3e2c3bb41188118bd0ce5043d4d28..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ac9afe17947eb296e1701877b220779d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/accc37ed7ec2ed38ec70c71f5d6aeebe.jpg b/docs/0.21.3/img/accc37ed7ec2ed38ec70c71f5d6aeebe.jpg deleted file mode 100644 index 1cd90f0b1a916dbb33cea5ead077fafbe3019df1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/accc37ed7ec2ed38ec70c71f5d6aeebe.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ad8371d06b000849fa4e2fbd6b386c7d.jpg b/docs/0.21.3/img/ad8371d06b000849fa4e2fbd6b386c7d.jpg deleted file mode 100644 index 9d4ebbc9201b15d72dcf624eee3c47d4c6f6db19..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ad8371d06b000849fa4e2fbd6b386c7d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ad854ab6b0056f9b521d823a98548d3f.jpg b/docs/0.21.3/img/ad854ab6b0056f9b521d823a98548d3f.jpg deleted file mode 100644 index 4e514a25c33e6a0ab61fd8da624c8968947b7335..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ad854ab6b0056f9b521d823a98548d3f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ad946e6478bb10e60ac9663066f26ee8.jpg b/docs/0.21.3/img/ad946e6478bb10e60ac9663066f26ee8.jpg deleted file mode 100644 index a14151b7894192fc49e70c2c4db610893cd1a360..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ad946e6478bb10e60ac9663066f26ee8.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ad9ce0e67dc83e5380738d3193819195.jpg b/docs/0.21.3/img/ad9ce0e67dc83e5380738d3193819195.jpg deleted file mode 100644 index 366a949d87f9c55319e1331b86f27cf7c204b3b9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ad9ce0e67dc83e5380738d3193819195.jpg and /dev/null differ diff --git a/docs/0.21.3/img/adc60d285d73d89dac7cb76f51617e64.jpg b/docs/0.21.3/img/adc60d285d73d89dac7cb76f51617e64.jpg deleted file mode 100644 index 42e1ce46f2d4d34873f8f540dbd12b71984989e9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/adc60d285d73d89dac7cb76f51617e64.jpg and /dev/null differ diff --git a/docs/0.21.3/img/adf83056bc2bd05628e24c40cb728b3d.jpg b/docs/0.21.3/img/adf83056bc2bd05628e24c40cb728b3d.jpg deleted file mode 100644 index 868cb81ac1b3ce1a76da87872b82d14708d60e5f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/adf83056bc2bd05628e24c40cb728b3d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ae1e2652c240448ae994f4b236379d6d.jpg b/docs/0.21.3/img/ae1e2652c240448ae994f4b236379d6d.jpg deleted file mode 100644 index ee44acfc0a0cd682b5d880eea6ca35781ec2131f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ae1e2652c240448ae994f4b236379d6d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ae484baf10384efcf4d993631f4641e7.jpg b/docs/0.21.3/img/ae484baf10384efcf4d993631f4641e7.jpg deleted file mode 100644 index 19fbe368374a1aac70c3b873c5b72b5d2a2fe5ce..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ae484baf10384efcf4d993631f4641e7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ae82b9adb507cb166d4721c004ae5f40.jpg b/docs/0.21.3/img/ae82b9adb507cb166d4721c004ae5f40.jpg deleted file mode 100644 index ec44fa8019656d687639a429dd3375e051c62ced..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ae82b9adb507cb166d4721c004ae5f40.jpg and /dev/null differ diff --git a/docs/0.21.3/img/aee8fc1c253da16851991ef3ceff663b.jpg b/docs/0.21.3/img/aee8fc1c253da16851991ef3ceff663b.jpg deleted file mode 100644 index bc104767cf44089c9c086f7e7a2c3c923eae5fe8..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/aee8fc1c253da16851991ef3ceff663b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/af78ae4aadd0f0961cf4d9564897b1ff.jpg b/docs/0.21.3/img/af78ae4aadd0f0961cf4d9564897b1ff.jpg deleted file mode 100644 index f502e74f6e184b4d271e1f4f1f3b73a746605ec1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/af78ae4aadd0f0961cf4d9564897b1ff.jpg and /dev/null differ diff --git a/docs/0.21.3/img/af7b81123e6cdf0b42acec802041beef.jpg b/docs/0.21.3/img/af7b81123e6cdf0b42acec802041beef.jpg deleted file mode 100644 index aefe44ac2a38de4cb30c17554f176c8169da9fd9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/af7b81123e6cdf0b42acec802041beef.jpg and /dev/null differ diff --git a/docs/0.21.3/img/af875bce0483bd18603c4d247e6a3745.jpg b/docs/0.21.3/img/af875bce0483bd18603c4d247e6a3745.jpg deleted file mode 100644 index dc4c950a925e3d568f0cde1f2a889b037ede586f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/af875bce0483bd18603c4d247e6a3745.jpg and /dev/null differ diff --git a/docs/0.21.3/img/afcad7956ba0a3a4a6771ee9810280c2.jpg b/docs/0.21.3/img/afcad7956ba0a3a4a6771ee9810280c2.jpg deleted file mode 100644 index e291755d04458d03de1cdf3ce954aa935f2e880b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/afcad7956ba0a3a4a6771ee9810280c2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/afee107e82d448558078835ad82086e5.jpg b/docs/0.21.3/img/afee107e82d448558078835ad82086e5.jpg deleted file mode 100644 index 6d0a2f4e2a602f4bc86a23ace28f5572d61e6f67..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/afee107e82d448558078835ad82086e5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/algo.jpg b/docs/0.21.3/img/algo.jpg deleted file mode 100644 index 7b986c947740d02235ee98a7fd4dfac617a50ccf..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/algo.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b003858334d1ad594207911e84219151.jpg b/docs/0.21.3/img/b003858334d1ad594207911e84219151.jpg deleted file mode 100644 index 64671f3b34b9f68260e6b14f6e6285d3779e6078..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b003858334d1ad594207911e84219151.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b019b19dda07f07208f1bd2576ebad30.jpg b/docs/0.21.3/img/b019b19dda07f07208f1bd2576ebad30.jpg deleted file mode 100644 index 9ab980220b4467f18d94c3a80531b8dbeffc701d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b019b19dda07f07208f1bd2576ebad30.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b0471e4ce10b5565385c611ba381fa0d.jpg b/docs/0.21.3/img/b0471e4ce10b5565385c611ba381fa0d.jpg deleted file mode 100644 index 8fdcc5a0c1795cb7fb6625ca8df1f02e1d1bce62..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b0471e4ce10b5565385c611ba381fa0d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b10afb1bc4c68539a74de379254c7655.jpg b/docs/0.21.3/img/b10afb1bc4c68539a74de379254c7655.jpg deleted file mode 100644 index d38d2e0e1bd6be08054d206f8e4e51004f9fe8c8..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b10afb1bc4c68539a74de379254c7655.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b146555411b22bcf0ad73d4720455038.jpg b/docs/0.21.3/img/b146555411b22bcf0ad73d4720455038.jpg deleted file mode 100644 index 5689e4bd823ca2f7b386c58ed15704012f228637..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b146555411b22bcf0ad73d4720455038.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b25f834ac79280901c702fb1449740a3.jpg b/docs/0.21.3/img/b25f834ac79280901c702fb1449740a3.jpg deleted file mode 100644 index ce4056999dd2d24175ae43d947d126c88bcfebb6..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b25f834ac79280901c702fb1449740a3.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b2996ad4866e8a26c7ba42c0229385af.jpg b/docs/0.21.3/img/b2996ad4866e8a26c7ba42c0229385af.jpg deleted file mode 100644 index cf29541405fd78329d44900109e24307db000d28..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b2996ad4866e8a26c7ba42c0229385af.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b29b59eca5c581c3f54d92c1671f2b2e.jpg b/docs/0.21.3/img/b29b59eca5c581c3f54d92c1671f2b2e.jpg deleted file mode 100644 index 5e1f86906383ed4ad7bb3ce7c9ed4478571787a2..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b29b59eca5c581c3f54d92c1671f2b2e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b2b4edffe444aa936ad59a769317f692.jpg b/docs/0.21.3/img/b2b4edffe444aa936ad59a769317f692.jpg deleted file mode 100644 index d8561853d0296ca76a516dd34d5c10c47757ebf3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b2b4edffe444aa936ad59a769317f692.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b2ea359213f8f5b01eead0821e29e856.jpg b/docs/0.21.3/img/b2ea359213f8f5b01eead0821e29e856.jpg deleted file mode 100644 index de9c84a5eed2dc7d919180b1fe2be9fa22141998..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b2ea359213f8f5b01eead0821e29e856.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b3206aa7b52a9c0918727730873d1363.jpg b/docs/0.21.3/img/b3206aa7b52a9c0918727730873d1363.jpg deleted file mode 100644 index 5f7282d2eb503efa0974f087b3a19b950dbb5a9a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b3206aa7b52a9c0918727730873d1363.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b3348b4a0dc8e97bcefc5c7489b006db.jpg b/docs/0.21.3/img/b3348b4a0dc8e97bcefc5c7489b006db.jpg deleted file mode 100644 index a0ff2828642cfe449da171f4b29582564fa58c82..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b3348b4a0dc8e97bcefc5c7489b006db.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b335c88114c4fec7e72304006810c82c.jpg b/docs/0.21.3/img/b335c88114c4fec7e72304006810c82c.jpg deleted file mode 100644 index f8f0c5d1e2d3dd69a343e44810fb463df0156da8..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b335c88114c4fec7e72304006810c82c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b36270d22513e9645235b5ad4c3cd7dd.jpg b/docs/0.21.3/img/b36270d22513e9645235b5ad4c3cd7dd.jpg deleted file mode 100644 index 215327ba4ff6be9d33f71d0a914c4910167a873a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b36270d22513e9645235b5ad4c3cd7dd.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b382a1d99ddfadf17b35d32b0b156b5b.jpg b/docs/0.21.3/img/b382a1d99ddfadf17b35d32b0b156b5b.jpg deleted file mode 100644 index 6cc937d308d27630364f0fa5293be393c240eb5a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b382a1d99ddfadf17b35d32b0b156b5b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b38a0de3f98aa9b8837354765bc9e3f6.jpg b/docs/0.21.3/img/b38a0de3f98aa9b8837354765bc9e3f6.jpg deleted file mode 100644 index 4875bf8d2fd7b57ff3ba8e8897ae053b097d9876..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b38a0de3f98aa9b8837354765bc9e3f6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b38aca53acb7894dca026d3325f61a00.jpg b/docs/0.21.3/img/b38aca53acb7894dca026d3325f61a00.jpg deleted file mode 100644 index 9b71caa8d124863a6955651f8d04ddd8c340404c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b38aca53acb7894dca026d3325f61a00.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b3ca25c4cc9cb42878f6fc39525b7446.jpg b/docs/0.21.3/img/b3ca25c4cc9cb42878f6fc39525b7446.jpg deleted file mode 100644 index bd5b793c7c98efc04b7e99728f65ef0cfb51ae9c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b3ca25c4cc9cb42878f6fc39525b7446.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b3ea6ae2442e72f261f037571e580979.jpg b/docs/0.21.3/img/b3ea6ae2442e72f261f037571e580979.jpg deleted file mode 100644 index c0354e25620a5af8f57a6f4e9ec463d28b81998c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b3ea6ae2442e72f261f037571e580979.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b3edbb24837112f795a22e3574457416.jpg b/docs/0.21.3/img/b3edbb24837112f795a22e3574457416.jpg deleted file mode 100644 index c3b3cadccb5f38cbab9f21021734c9d9cc308f50..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b3edbb24837112f795a22e3574457416.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b47a023e9edbe1976993ce76c7dbc286.jpg b/docs/0.21.3/img/b47a023e9edbe1976993ce76c7dbc286.jpg deleted file mode 100644 index 61c2381c31850b87047f9026fd89bd194c5baa24..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b47a023e9edbe1976993ce76c7dbc286.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b4e752f6314fe52f8c066964d26145a8.jpg b/docs/0.21.3/img/b4e752f6314fe52f8c066964d26145a8.jpg deleted file mode 100644 index a4960fd70309140969089d9d5f9eb3cc9a694708..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b4e752f6314fe52f8c066964d26145a8.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b6305894a6f400569f3ff2b899370b54.jpg b/docs/0.21.3/img/b6305894a6f400569f3ff2b899370b54.jpg deleted file mode 100644 index 79e9ca806d0a1a9f61aef08841581739524f848d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b6305894a6f400569f3ff2b899370b54.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b67ce2997477f658a6a39026c01e07c4.jpg b/docs/0.21.3/img/b67ce2997477f658a6a39026c01e07c4.jpg deleted file mode 100644 index 3c9a7666a951105dbd38efb62dd7c907699c38d4..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b67ce2997477f658a6a39026c01e07c4.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b68e95efa751d5e14b6517cff553419b.jpg b/docs/0.21.3/img/b68e95efa751d5e14b6517cff553419b.jpg deleted file mode 100644 index 00255327e3ba05a3f14c0b13998db775a41ded53..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b68e95efa751d5e14b6517cff553419b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b6a1f98637a242005be08bb10541a524.jpg b/docs/0.21.3/img/b6a1f98637a242005be08bb10541a524.jpg deleted file mode 100644 index 0cb9e15d63a6c258f68bfc3035ae4cb97903f2f4..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b6a1f98637a242005be08bb10541a524.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b6cea83c1722562f844aebd98fb3f59d.jpg b/docs/0.21.3/img/b6cea83c1722562f844aebd98fb3f59d.jpg deleted file mode 100644 index 40aaaebed9c9a1c12488b6b2a405b2571cadd56d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b6cea83c1722562f844aebd98fb3f59d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b714492d7f23932738745c4ed05fe7ae.jpg b/docs/0.21.3/img/b714492d7f23932738745c4ed05fe7ae.jpg deleted file mode 100644 index bedc42ea2f53ba7dcd2b392a16421fb5b0296dc0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b714492d7f23932738745c4ed05fe7ae.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b74decc4f9ee591a92a5281d0187f05a.jpg b/docs/0.21.3/img/b74decc4f9ee591a92a5281d0187f05a.jpg deleted file mode 100644 index d1d2947b953e7b79d4ea9cda2f3d2ebf8a266c4b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b74decc4f9ee591a92a5281d0187f05a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b7a68272ceb9cb09f48103e44f469470.jpg b/docs/0.21.3/img/b7a68272ceb9cb09f48103e44f469470.jpg deleted file mode 100644 index 6909d5e54deaea2a89f60d986f40f303a20e47c3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b7a68272ceb9cb09f48103e44f469470.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b8c91e64943f8e5e311a51bc901a2c7e.jpg b/docs/0.21.3/img/b8c91e64943f8e5e311a51bc901a2c7e.jpg deleted file mode 100644 index 6305fa9ffd3b36e646cb6db52f1b14569bcabd86..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b8c91e64943f8e5e311a51bc901a2c7e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b8d08f24f6c909a25190cb38127ec809.jpg b/docs/0.21.3/img/b8d08f24f6c909a25190cb38127ec809.jpg deleted file mode 100644 index 0b7147895f0b2c481fec492ab73f0b26e99fd37c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b8d08f24f6c909a25190cb38127ec809.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b8e446d22ed902423187ead2d67af58c.jpg b/docs/0.21.3/img/b8e446d22ed902423187ead2d67af58c.jpg deleted file mode 100644 index cd8b3f9dcf3189664924f5a644f9c18ffacff361..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b8e446d22ed902423187ead2d67af58c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b91e4507d9fd7068b02f689d697f8714.jpg b/docs/0.21.3/img/b91e4507d9fd7068b02f689d697f8714.jpg deleted file mode 100644 index a332c982b491c43a01fd8efe41658eb269a2e1a7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b91e4507d9fd7068b02f689d697f8714.jpg and /dev/null differ diff --git a/docs/0.21.3/img/b94b3a3837e7741f704e3b9b23ba0880.jpg b/docs/0.21.3/img/b94b3a3837e7741f704e3b9b23ba0880.jpg deleted file mode 100644 index 43a4dbcda38efc976406390df17e99140e6f0707..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/b94b3a3837e7741f704e3b9b23ba0880.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ba3c1f82d7a66df41015761326619e26.jpg b/docs/0.21.3/img/ba3c1f82d7a66df41015761326619e26.jpg deleted file mode 100644 index b424ef8f48add5f1a11fcfff312eaecc25a779fd..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ba3c1f82d7a66df41015761326619e26.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ba5932f77767fa05771311d1f926e3ee.jpg b/docs/0.21.3/img/ba5932f77767fa05771311d1f926e3ee.jpg deleted file mode 100644 index 10756312a34ccc1637c26f5190a978be165549ac..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ba5932f77767fa05771311d1f926e3ee.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ba90d4193a98b9023d3d8526a20fe1ac.jpg b/docs/0.21.3/img/ba90d4193a98b9023d3d8526a20fe1ac.jpg deleted file mode 100644 index 925215e79e0835503b10ac9fb44bae6d9955cb2c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ba90d4193a98b9023d3d8526a20fe1ac.jpg and /dev/null differ diff --git a/docs/0.21.3/img/bafb2b9486fa2f91dcc020843770eef6.jpg b/docs/0.21.3/img/bafb2b9486fa2f91dcc020843770eef6.jpg deleted file mode 100644 index a0ff2828642cfe449da171f4b29582564fa58c82..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/bafb2b9486fa2f91dcc020843770eef6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/bb0a3257b0276e1ade46d7fa84c49ad0.jpg b/docs/0.21.3/img/bb0a3257b0276e1ade46d7fa84c49ad0.jpg deleted file mode 100644 index 253ecdd5a937767a6b867dc6212900b71a37a98e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/bb0a3257b0276e1ade46d7fa84c49ad0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/bbdbd3f496f907578ff01cc798adde74.jpg b/docs/0.21.3/img/bbdbd3f496f907578ff01cc798adde74.jpg deleted file mode 100644 index 07925bf858e956d14b6bbfd31ec2a90458cd1f99..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/bbdbd3f496f907578ff01cc798adde74.jpg and /dev/null differ diff --git a/docs/0.21.3/img/bc08d23c9d8a06975f20eb514faae9ef.jpg b/docs/0.21.3/img/bc08d23c9d8a06975f20eb514faae9ef.jpg deleted file mode 100644 index df188a12a3f1b628504705ae460abbb3abaa9d76..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/bc08d23c9d8a06975f20eb514faae9ef.jpg and /dev/null differ diff --git a/docs/0.21.3/img/bc0cfc8c8661055fd60ca8e90b21d1dd.jpg b/docs/0.21.3/img/bc0cfc8c8661055fd60ca8e90b21d1dd.jpg deleted file mode 100644 index 2e8de82073a3756d20329d2f9c966eb7a03a02e5..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/bc0cfc8c8661055fd60ca8e90b21d1dd.jpg and /dev/null differ diff --git a/docs/0.21.3/img/bc35316fd422689a9bc65845d63c1433.jpg b/docs/0.21.3/img/bc35316fd422689a9bc65845d63c1433.jpg deleted file mode 100644 index 18dee679c39668135a3effe1aa448ea8f85b3359..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/bc35316fd422689a9bc65845d63c1433.jpg and /dev/null differ diff --git a/docs/0.21.3/img/bc7418a3ab8f749f1abd139faa96bee2.jpg b/docs/0.21.3/img/bc7418a3ab8f749f1abd139faa96bee2.jpg deleted file mode 100644 index c80713a081f86775d05749cc39dda645c4e3fd28..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/bc7418a3ab8f749f1abd139faa96bee2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/bd3f0762bab34671ec8bfb8ace2cc129.jpg b/docs/0.21.3/img/bd3f0762bab34671ec8bfb8ace2cc129.jpg deleted file mode 100644 index 2fbfc7551b59ea30cf6d37dafeeea2bb1888aee1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/bd3f0762bab34671ec8bfb8ace2cc129.jpg and /dev/null differ diff --git a/docs/0.21.3/img/bdc1e4261347e1c74950e91fa4f2230f.jpg b/docs/0.21.3/img/bdc1e4261347e1c74950e91fa4f2230f.jpg deleted file mode 100644 index f8d4d3d25c48232d1f3cac43a8251c2e7024d222..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/bdc1e4261347e1c74950e91fa4f2230f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/be2b3bbef9fe377c6f748dd05355b58b.jpg b/docs/0.21.3/img/be2b3bbef9fe377c6f748dd05355b58b.jpg deleted file mode 100644 index 1c1f22b062f3222ee55788f284c07378b3bc2fb9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/be2b3bbef9fe377c6f748dd05355b58b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/be4190a760361bd7ae65c77218465778.jpg b/docs/0.21.3/img/be4190a760361bd7ae65c77218465778.jpg deleted file mode 100644 index 6572866efcaa940f947c2366e0de0c48848ba2eb..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/be4190a760361bd7ae65c77218465778.jpg and /dev/null differ diff --git a/docs/0.21.3/img/be71aa00cd62f24b4657f7993d1b3a45.jpg b/docs/0.21.3/img/be71aa00cd62f24b4657f7993d1b3a45.jpg deleted file mode 100644 index e0931a5e4b1d343198d0817a0596270d96f94a12..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/be71aa00cd62f24b4657f7993d1b3a45.jpg and /dev/null differ diff --git a/docs/0.21.3/img/be8c80153a3cafbe4309f1fe3b62d96b.jpg b/docs/0.21.3/img/be8c80153a3cafbe4309f1fe3b62d96b.jpg deleted file mode 100644 index 2fc4b03c1dd498af5434c9009ae8ce3464d4d29f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/be8c80153a3cafbe4309f1fe3b62d96b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/bec3afcb1362068f9caf79c5c58ea816.jpg b/docs/0.21.3/img/bec3afcb1362068f9caf79c5c58ea816.jpg deleted file mode 100644 index e69c933af6af8ddc2aab7021e21e5945c6fdb54a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/bec3afcb1362068f9caf79c5c58ea816.jpg and /dev/null differ diff --git a/docs/0.21.3/img/bee2cb707f91d8e36ae11638b6698fe4.jpg b/docs/0.21.3/img/bee2cb707f91d8e36ae11638b6698fe4.jpg deleted file mode 100644 index 6402ef8c53d31ee2e8d48442850e59fbb252de6a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/bee2cb707f91d8e36ae11638b6698fe4.jpg and /dev/null differ diff --git a/docs/0.21.3/img/beee3f6e512d1e3caf1d1f6cfff468ae.jpg b/docs/0.21.3/img/beee3f6e512d1e3caf1d1f6cfff468ae.jpg deleted file mode 100644 index 0da411d6bec5b6f6ba2d9e9b44759325d91fa085..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/beee3f6e512d1e3caf1d1f6cfff468ae.jpg and /dev/null differ diff --git a/docs/0.21.3/img/bf95d88f4f17676409c7bab64ba036dc.jpg b/docs/0.21.3/img/bf95d88f4f17676409c7bab64ba036dc.jpg deleted file mode 100644 index 3db87e63e3c97755d4d0f8eec56b4f88dab63915..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/bf95d88f4f17676409c7bab64ba036dc.jpg and /dev/null differ diff --git a/docs/0.21.3/img/bf9baf4863bf6d025348b7d91c888066.jpg b/docs/0.21.3/img/bf9baf4863bf6d025348b7d91c888066.jpg deleted file mode 100644 index b67ae93d48f3975943465aeb53a4d801e4a0d50a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/bf9baf4863bf6d025348b7d91c888066.jpg and /dev/null differ diff --git a/docs/0.21.3/img/bf9fb1354c2e0ea50d37e5cad7866314.jpg b/docs/0.21.3/img/bf9fb1354c2e0ea50d37e5cad7866314.jpg deleted file mode 100644 index 671a231d2d68df18ca1a8b526347094ed5cf0ea7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/bf9fb1354c2e0ea50d37e5cad7866314.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c001247a5528df69cdcc243c70f61d01.jpg b/docs/0.21.3/img/c001247a5528df69cdcc243c70f61d01.jpg deleted file mode 100644 index 29fc3db5f6bd0727f04d68627d0f8e88120dd5c8..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c001247a5528df69cdcc243c70f61d01.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c009aed89f1926875e5637127af6000c.jpg b/docs/0.21.3/img/c009aed89f1926875e5637127af6000c.jpg deleted file mode 100644 index 631c23c0366181cfb8b3e7a62b68671eb8ce8c22..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c009aed89f1926875e5637127af6000c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c019126f38fb92a868a7155bd707a5f8.jpg b/docs/0.21.3/img/c019126f38fb92a868a7155bd707a5f8.jpg deleted file mode 100644 index b81ec1cd21ae6fcfe613dc61d203f037cd0119c7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c019126f38fb92a868a7155bd707a5f8.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c03e9014ab434e11e9323f87908ed15e.jpg b/docs/0.21.3/img/c03e9014ab434e11e9323f87908ed15e.jpg deleted file mode 100644 index 58bb748e1d1f653b2735f13f63060f48603e258c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c03e9014ab434e11e9323f87908ed15e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c236b4ae30d04ba7fae7fa499a2ba9ea.jpg b/docs/0.21.3/img/c236b4ae30d04ba7fae7fa499a2ba9ea.jpg deleted file mode 100644 index e2fae7498817527cad8be789b43bf1f6a0256bb1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c236b4ae30d04ba7fae7fa499a2ba9ea.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c3567127ff1f678758b338a50e9c4880.jpg b/docs/0.21.3/img/c3567127ff1f678758b338a50e9c4880.jpg deleted file mode 100644 index 4dad07f8896cf852a96c7158731a9feaabb2839e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c3567127ff1f678758b338a50e9c4880.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c39b576ee6e4fc82b4d9edd06ffc8c9c.jpg b/docs/0.21.3/img/c39b576ee6e4fc82b4d9edd06ffc8c9c.jpg deleted file mode 100644 index 61f02b39b1e3fe555436ad7d11b0c60092a044d9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c39b576ee6e4fc82b4d9edd06ffc8c9c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c3c22734435fdd94f6819708bc55d8a6.jpg b/docs/0.21.3/img/c3c22734435fdd94f6819708bc55d8a6.jpg deleted file mode 100644 index 6ae25bd53ae975490296dfd3138c99d10fb66d77..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c3c22734435fdd94f6819708bc55d8a6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c3de98827a889725d91141a5780692b5.jpg b/docs/0.21.3/img/c3de98827a889725d91141a5780692b5.jpg deleted file mode 100644 index a7bb2acff1f6d74679a11dce0f6a42c3904f9da6..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c3de98827a889725d91141a5780692b5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c3e91e4b6783eb9fe281bc3e2e29aaea.jpg b/docs/0.21.3/img/c3e91e4b6783eb9fe281bc3e2e29aaea.jpg deleted file mode 100644 index a35d1147abb4c4c163aab50d06b7e59f1a5fa66a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c3e91e4b6783eb9fe281bc3e2e29aaea.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c4373cf7ea98d1425608569103286d28.jpg b/docs/0.21.3/img/c4373cf7ea98d1425608569103286d28.jpg deleted file mode 100644 index c0bbb79139fb70964b51b279e9784b553dd1b5a9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c4373cf7ea98d1425608569103286d28.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c458cf14df5a22e0d44d7c4fa458361d.jpg b/docs/0.21.3/img/c458cf14df5a22e0d44d7c4fa458361d.jpg deleted file mode 100644 index c822ca9f7c5c77b2682fc6fed07800647521b30c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c458cf14df5a22e0d44d7c4fa458361d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c46633c42aaa3e030b14d90aadb323fc.jpg b/docs/0.21.3/img/c46633c42aaa3e030b14d90aadb323fc.jpg deleted file mode 100644 index b27a9363cbbd8ab15882aedf0ca744ff7a375b0c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c46633c42aaa3e030b14d90aadb323fc.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c471a6ca04f68a6d888d4c8ad95ba189.jpg b/docs/0.21.3/img/c471a6ca04f68a6d888d4c8ad95ba189.jpg deleted file mode 100644 index e1087165edc3f81834485392acdab3b8958328e4..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c471a6ca04f68a6d888d4c8ad95ba189.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c5396cf8ee04b897a37bc7cd54383eaa.jpg b/docs/0.21.3/img/c5396cf8ee04b897a37bc7cd54383eaa.jpg deleted file mode 100644 index 51736ae70752f8d541f9e21e860d97f6a5208d1d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c5396cf8ee04b897a37bc7cd54383eaa.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c57acf47ae694e71f55f0005d1e52c55.jpg b/docs/0.21.3/img/c57acf47ae694e71f55f0005d1e52c55.jpg deleted file mode 100644 index 1c0cb8ebf5e76f0984ae9d3aa8553168b4912478..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c57acf47ae694e71f55f0005d1e52c55.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c57c1c5b116586e218fdaa3d0696d246.jpg b/docs/0.21.3/img/c57c1c5b116586e218fdaa3d0696d246.jpg deleted file mode 100644 index ebbe39409c60185d1711987e651831d34b9e69f9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c57c1c5b116586e218fdaa3d0696d246.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c593cc77e5133571028587b75182d3b3.jpg b/docs/0.21.3/img/c593cc77e5133571028587b75182d3b3.jpg deleted file mode 100644 index e1fb47e0a3e315e2d33016e61039ec740463b8cc..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c593cc77e5133571028587b75182d3b3.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c5b0e465d16add1d02594ec434515c04.jpg b/docs/0.21.3/img/c5b0e465d16add1d02594ec434515c04.jpg deleted file mode 100644 index 4fc2b215d2d3f6d33dcf169fe5090a42e2a27f38..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c5b0e465d16add1d02594ec434515c04.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c5f2af9df9f65f0e399542ecf7f40554.jpg b/docs/0.21.3/img/c5f2af9df9f65f0e399542ecf7f40554.jpg deleted file mode 100644 index 51f47e7864816160913bf36ecabca74689379b2a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c5f2af9df9f65f0e399542ecf7f40554.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c5f49595b56010ad04fce358940848e5.jpg b/docs/0.21.3/img/c5f49595b56010ad04fce358940848e5.jpg deleted file mode 100644 index 9ab7af7b1a23191febcc3e31adc89c7718163aa7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c5f49595b56010ad04fce358940848e5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c63c614232be2789284b906792195a15.jpg b/docs/0.21.3/img/c63c614232be2789284b906792195a15.jpg deleted file mode 100644 index 4d60b42eae049c7868c2b153cb67cf1a5a7e01c9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c63c614232be2789284b906792195a15.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c63f13d52ac4f65cde6e5dfd9e941562.jpg b/docs/0.21.3/img/c63f13d52ac4f65cde6e5dfd9e941562.jpg deleted file mode 100644 index 3a20d84d3b85045bffc1987fb821a430012a92b7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c63f13d52ac4f65cde6e5dfd9e941562.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c683d0fa5d21d783e383612dda8ecad3.jpg b/docs/0.21.3/img/c683d0fa5d21d783e383612dda8ecad3.jpg deleted file mode 100644 index 9d979091b4abb035ca3ec80ae6073ca7c3fdcc09..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c683d0fa5d21d783e383612dda8ecad3.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c6b27df44672e7fa50d1d81ffbbebfbd.jpg b/docs/0.21.3/img/c6b27df44672e7fa50d1d81ffbbebfbd.jpg deleted file mode 100644 index 3c25c9309a7d5ed4f6a8219023d50de5e56201c8..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c6b27df44672e7fa50d1d81ffbbebfbd.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c74889dd434ec9a5f4e1b57a549263e7.jpg b/docs/0.21.3/img/c74889dd434ec9a5f4e1b57a549263e7.jpg deleted file mode 100644 index 10d38ef916d491687556e1082a60005d52ad1417..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c74889dd434ec9a5f4e1b57a549263e7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c7e49892dca2f0df35d1261a276693f2.jpg b/docs/0.21.3/img/c7e49892dca2f0df35d1261a276693f2.jpg deleted file mode 100644 index 54606cd3e7a8f705530621b9d217cd1ddec3a6d5..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c7e49892dca2f0df35d1261a276693f2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c7fbb786df17a75de12baa56eb99a2c2.jpg b/docs/0.21.3/img/c7fbb786df17a75de12baa56eb99a2c2.jpg deleted file mode 100644 index 0f54f5ff10002a1067d30fdc9dfb9b68830b1dda..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c7fbb786df17a75de12baa56eb99a2c2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c82c4d24e15330860a4ca71a31ddd553.jpg b/docs/0.21.3/img/c82c4d24e15330860a4ca71a31ddd553.jpg deleted file mode 100644 index 6959a47531ff93917331ebb50876f3efe9ae5f24..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c82c4d24e15330860a4ca71a31ddd553.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c851b3cdef3493f17f70f7249928e34b.jpg b/docs/0.21.3/img/c851b3cdef3493f17f70f7249928e34b.jpg deleted file mode 100644 index bd17b2ab426947689b18cf3c498a4c5e51a80e45..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c851b3cdef3493f17f70f7249928e34b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c87d9110f3d32ffa5fa08671e4af11fb.jpg b/docs/0.21.3/img/c87d9110f3d32ffa5fa08671e4af11fb.jpg deleted file mode 100644 index b7562bcd03df0cf77c9da84b38aff3128a68a0bf..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c87d9110f3d32ffa5fa08671e4af11fb.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c8b386f383c840e769d6dae0eeac73dd.jpg b/docs/0.21.3/img/c8b386f383c840e769d6dae0eeac73dd.jpg deleted file mode 100644 index 10aa38e301945db54187a03f3b24376bbe4080bd..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c8b386f383c840e769d6dae0eeac73dd.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c95237387255f824359f6c772cbb1df0.jpg b/docs/0.21.3/img/c95237387255f824359f6c772cbb1df0.jpg deleted file mode 100644 index c905caf260866d68a9816ee06ad3defed4c5ebab..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c95237387255f824359f6c772cbb1df0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c9a9a1cec953f556f78c5f400277b422.jpg b/docs/0.21.3/img/c9a9a1cec953f556f78c5f400277b422.jpg deleted file mode 100644 index 6c7c5d9ea9bda40ff75abb0b870b30573fea9276..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c9a9a1cec953f556f78c5f400277b422.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c9e8d19526fed76c122a77c246f59313.jpg b/docs/0.21.3/img/c9e8d19526fed76c122a77c246f59313.jpg deleted file mode 100644 index 6b89cc351f292f78704b717d05c66fe4c4849980..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c9e8d19526fed76c122a77c246f59313.jpg and /dev/null differ diff --git a/docs/0.21.3/img/c9f28da3986a32d6c1421f357d52b9fa.jpg b/docs/0.21.3/img/c9f28da3986a32d6c1421f357d52b9fa.jpg deleted file mode 100644 index dd25c06f5135b092620844b67f39e9acc8b9168c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/c9f28da3986a32d6c1421f357d52b9fa.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ca04f56b8f8c29e1eec03620f0f601b0.jpg b/docs/0.21.3/img/ca04f56b8f8c29e1eec03620f0f601b0.jpg deleted file mode 100644 index 9004ec15011aa412741563b32af3d79c7fde8fbf..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ca04f56b8f8c29e1eec03620f0f601b0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ca22762150e0516b4847c03efd5ebf6d.jpg b/docs/0.21.3/img/ca22762150e0516b4847c03efd5ebf6d.jpg deleted file mode 100644 index 98e3fb9516f8a40242946453926cc41ddaecaf60..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ca22762150e0516b4847c03efd5ebf6d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/cb598ee06bc5060d2dabe4acba00faa7.jpg b/docs/0.21.3/img/cb598ee06bc5060d2dabe4acba00faa7.jpg deleted file mode 100644 index 3927ca02fd08fc98615ab10f9165e66391c11d95..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/cb598ee06bc5060d2dabe4acba00faa7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/cb5a89fd247e8cbbea21b00a12d188e6.jpg b/docs/0.21.3/img/cb5a89fd247e8cbbea21b00a12d188e6.jpg deleted file mode 100644 index 91556561bc2fdfb9aa1d0c19a14ccac4c6053a19..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/cb5a89fd247e8cbbea21b00a12d188e6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/cba233fc4178da6d3fe0b177cbbb6318.jpg b/docs/0.21.3/img/cba233fc4178da6d3fe0b177cbbb6318.jpg deleted file mode 100644 index a220b8f9641b7c2e3753aea35c30252cf57727b9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/cba233fc4178da6d3fe0b177cbbb6318.jpg and /dev/null differ diff --git a/docs/0.21.3/img/cc41a8d314f9b97ecdf236aa0c21d984.jpg b/docs/0.21.3/img/cc41a8d314f9b97ecdf236aa0c21d984.jpg deleted file mode 100644 index ea047984bec3eb18b4cc007bc17d45eab57a5979..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/cc41a8d314f9b97ecdf236aa0c21d984.jpg and /dev/null differ diff --git a/docs/0.21.3/img/cc9d324e8bc61a67cc1947f73bf5b618.jpg b/docs/0.21.3/img/cc9d324e8bc61a67cc1947f73bf5b618.jpg deleted file mode 100644 index e836d0d45a878b6e094cb32b69db146795ead180..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/cc9d324e8bc61a67cc1947f73bf5b618.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ccc8bedf9424617c5d6a61fbe9a1cc36.jpg b/docs/0.21.3/img/ccc8bedf9424617c5d6a61fbe9a1cc36.jpg deleted file mode 100644 index 126f4b09f37d29d0131ec66c309bc0c3ee39dc46..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ccc8bedf9424617c5d6a61fbe9a1cc36.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ccd727d4b039d28f8146546bd5f614b3.jpg b/docs/0.21.3/img/ccd727d4b039d28f8146546bd5f614b3.jpg deleted file mode 100644 index 152b3b51ba1ce0c33b0fbd2ea1663ec47b2a184c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ccd727d4b039d28f8146546bd5f614b3.jpg and /dev/null differ diff --git a/docs/0.21.3/img/cd0c1a5b7ac7d76f9fe724cc7a723374.jpg b/docs/0.21.3/img/cd0c1a5b7ac7d76f9fe724cc7a723374.jpg deleted file mode 100644 index fca149de4ec6fb5c2ae3326c826008726fae80b0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/cd0c1a5b7ac7d76f9fe724cc7a723374.jpg and /dev/null differ diff --git a/docs/0.21.3/img/cd345cf1e9e01448cd544361983ab95a.jpg b/docs/0.21.3/img/cd345cf1e9e01448cd544361983ab95a.jpg deleted file mode 100644 index ec3a9aa191650463c273ecf18b1052db732ef1ec..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/cd345cf1e9e01448cd544361983ab95a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/cd58ff0ab17f3ead1d5179426f2dae50.jpg b/docs/0.21.3/img/cd58ff0ab17f3ead1d5179426f2dae50.jpg deleted file mode 100644 index b0eea5c591a286e169ac355649252438c597e299..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/cd58ff0ab17f3ead1d5179426f2dae50.jpg and /dev/null differ diff --git a/docs/0.21.3/img/cd8ca25fe0dc0cc43949bcaa5d2674c2.jpg b/docs/0.21.3/img/cd8ca25fe0dc0cc43949bcaa5d2674c2.jpg deleted file mode 100644 index 63c1a735bb54508147c3bcdd7afcfcb549535e84..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/cd8ca25fe0dc0cc43949bcaa5d2674c2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/cda529a3abe8af421f1f218b1a390091.jpg b/docs/0.21.3/img/cda529a3abe8af421f1f218b1a390091.jpg deleted file mode 100644 index 982ee492480806ba72ce2d4789f804e0cfe8e094..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/cda529a3abe8af421f1f218b1a390091.jpg and /dev/null differ diff --git a/docs/0.21.3/img/cdaca3963c7797054326117c0bc0b368.jpg b/docs/0.21.3/img/cdaca3963c7797054326117c0bc0b368.jpg deleted file mode 100644 index 4dd140e6b3c0911965fa2888c0a49f882847567b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/cdaca3963c7797054326117c0bc0b368.jpg and /dev/null differ diff --git a/docs/0.21.3/img/cdc5ef75d769259ef0537940296ab0b4.jpg b/docs/0.21.3/img/cdc5ef75d769259ef0537940296ab0b4.jpg deleted file mode 100644 index 6e9e4600b8e47385bc8f8de27aa2a83e218c6eed..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/cdc5ef75d769259ef0537940296ab0b4.jpg and /dev/null differ diff --git a/docs/0.21.3/img/cddb30ab60430b100271b055376e8363.jpg b/docs/0.21.3/img/cddb30ab60430b100271b055376e8363.jpg deleted file mode 100644 index 5e0a7ff3d52d89ce4f879330bc234c448289a617..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/cddb30ab60430b100271b055376e8363.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ce7fd91ddb116ab5d747de0316caf657.jpg b/docs/0.21.3/img/ce7fd91ddb116ab5d747de0316caf657.jpg deleted file mode 100644 index 2c80c7f4c57d2705fa6c45e5b58413c378555141..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ce7fd91ddb116ab5d747de0316caf657.jpg and /dev/null differ diff --git a/docs/0.21.3/img/cf52655ee609af9f3c27c06448a5bf67.jpg b/docs/0.21.3/img/cf52655ee609af9f3c27c06448a5bf67.jpg deleted file mode 100644 index ea5ec276708a3ce1aa677b6f6c4f30434fbc3700..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/cf52655ee609af9f3c27c06448a5bf67.jpg and /dev/null differ diff --git a/docs/0.21.3/img/cf8cc964dfa6df1a7473fe033f9fb642.jpg b/docs/0.21.3/img/cf8cc964dfa6df1a7473fe033f9fb642.jpg deleted file mode 100644 index 4fc2b215d2d3f6d33dcf169fe5090a42e2a27f38..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/cf8cc964dfa6df1a7473fe033f9fb642.jpg and /dev/null differ diff --git a/docs/0.21.3/img/cfe45a2d171ae9c5933cd6d48cd48cb0.jpg b/docs/0.21.3/img/cfe45a2d171ae9c5933cd6d48cd48cb0.jpg deleted file mode 100644 index 02fd2f766ff3097e4aa32d1b4ef4eca870a51f54..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/cfe45a2d171ae9c5933cd6d48cd48cb0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d06a11a8d6ed2efac238ab0bdbd33326.jpg b/docs/0.21.3/img/d06a11a8d6ed2efac238ab0bdbd33326.jpg deleted file mode 100644 index 0d7ec8704ef87b6290ad05f1df4788691ae01759..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d06a11a8d6ed2efac238ab0bdbd33326.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d11a3c7c81eef9f2c8ece06f91411e9e.jpg b/docs/0.21.3/img/d11a3c7c81eef9f2c8ece06f91411e9e.jpg deleted file mode 100644 index 98ce9cbac5dad73451466de4ed761e07d3f49c1a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d11a3c7c81eef9f2c8ece06f91411e9e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d12d5f9823ac608127ac67df8cecff9d.jpg b/docs/0.21.3/img/d12d5f9823ac608127ac67df8cecff9d.jpg deleted file mode 100644 index 523dc850a069d482fca4047d93bf52f1a7919c59..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d12d5f9823ac608127ac67df8cecff9d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d1d5abd40c8364a2da2f181ede69fa56.jpg b/docs/0.21.3/img/d1d5abd40c8364a2da2f181ede69fa56.jpg deleted file mode 100644 index e58296db1f60d37c9d0e882673c20b5bfd627d55..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d1d5abd40c8364a2da2f181ede69fa56.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d2b34f499ce1bbd28a276bc0d7afdde1.jpg b/docs/0.21.3/img/d2b34f499ce1bbd28a276bc0d7afdde1.jpg deleted file mode 100644 index 2875c61ca34d4f345f71374e2bfd815945ecfb5d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d2b34f499ce1bbd28a276bc0d7afdde1.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d2fed0ae8e2b987a781ee01a92c31dfb.jpg b/docs/0.21.3/img/d2fed0ae8e2b987a781ee01a92c31dfb.jpg deleted file mode 100644 index 313c8f37092d5127375c3a9374fbf0c8c9cfdf31..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d2fed0ae8e2b987a781ee01a92c31dfb.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d325b0db5d92ebf952f4b6d810fa43bd.jpg b/docs/0.21.3/img/d325b0db5d92ebf952f4b6d810fa43bd.jpg deleted file mode 100644 index 3bae1ef281ec021349dea98e8e434a31d72a5830..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d325b0db5d92ebf952f4b6d810fa43bd.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d35b85fc7ddd819b1fec30a6ef410fc9.jpg b/docs/0.21.3/img/d35b85fc7ddd819b1fec30a6ef410fc9.jpg deleted file mode 100644 index 0e8ca4d76de1d8731f8f6614cd757fb833f464bc..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d35b85fc7ddd819b1fec30a6ef410fc9.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d3c1bd7a2bac2e7cc22203e423d56e7e.jpg b/docs/0.21.3/img/d3c1bd7a2bac2e7cc22203e423d56e7e.jpg deleted file mode 100644 index 1cdfdcbc2dde29a0f96bc3408afe2ee2121512a4..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d3c1bd7a2bac2e7cc22203e423d56e7e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d3d363339c8708bf2058b128facd0aea.jpg b/docs/0.21.3/img/d3d363339c8708bf2058b128facd0aea.jpg deleted file mode 100644 index 0a55d7120a0137e6d47041bc154a7079d5bb48b4..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d3d363339c8708bf2058b128facd0aea.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d41288778c3d66bcae947c3078469126.jpg b/docs/0.21.3/img/d41288778c3d66bcae947c3078469126.jpg deleted file mode 100644 index d378a11f36de7e299d6fc1f824e22c50fd4f9c6c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d41288778c3d66bcae947c3078469126.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d459482314974b92f7f44cc36d6eae3e.jpg b/docs/0.21.3/img/d459482314974b92f7f44cc36d6eae3e.jpg deleted file mode 100644 index 1841003a9d08ff017929cf91b0b6e42c8d072b02..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d459482314974b92f7f44cc36d6eae3e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d47bd99afb1d5dd3bff5b9809371c476.jpg b/docs/0.21.3/img/d47bd99afb1d5dd3bff5b9809371c476.jpg deleted file mode 100644 index c8c59464c5ba4a8feb6a69f9c1c18f9cfbbdce02..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d47bd99afb1d5dd3bff5b9809371c476.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d49a868d9c8c944f42202a30647ff7cf.jpg b/docs/0.21.3/img/d49a868d9c8c944f42202a30647ff7cf.jpg deleted file mode 100644 index 7201e59f559a25b23d6ba483edd063f2ad1f1c40..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d49a868d9c8c944f42202a30647ff7cf.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d49c17958d641e42faa6fd3a46ac860a.jpg b/docs/0.21.3/img/d49c17958d641e42faa6fd3a46ac860a.jpg deleted file mode 100644 index 6b71ca9ac65801dc2643af854ffc94adb58f54c4..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d49c17958d641e42faa6fd3a46ac860a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d5021b539c18587624a07ef6df00f585.jpg b/docs/0.21.3/img/d5021b539c18587624a07ef6df00f585.jpg deleted file mode 100644 index e0a042ef440618a6e11442917e89f6c2078dbbe4..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d5021b539c18587624a07ef6df00f585.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d5a26fae0e652d4e951d9ec9ae1a01e5.jpg b/docs/0.21.3/img/d5a26fae0e652d4e951d9ec9ae1a01e5.jpg deleted file mode 100644 index 713d713e82ac53b5b67fa8d9da25afa6aaee978e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d5a26fae0e652d4e951d9ec9ae1a01e5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d5c9a11453ea30a1be50a1034052bd6b.jpg b/docs/0.21.3/img/d5c9a11453ea30a1be50a1034052bd6b.jpg deleted file mode 100644 index bc92c8fa10828dd7e87183863ace600186ef6b26..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d5c9a11453ea30a1be50a1034052bd6b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d61124c62424b8a8d38adc3c41bb71f6.jpg b/docs/0.21.3/img/d61124c62424b8a8d38adc3c41bb71f6.jpg deleted file mode 100644 index 587a8c8221c41d818b15c0aeb0bc693e17feec63..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d61124c62424b8a8d38adc3c41bb71f6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d6127761ddbd135a1317ec14f1ddfac4.jpg b/docs/0.21.3/img/d6127761ddbd135a1317ec14f1ddfac4.jpg deleted file mode 100644 index cdf71e12319d0cd18d1198643692e9387112c9fd..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d6127761ddbd135a1317ec14f1ddfac4.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d6293957048ac05c3ae0dfac9949537c.jpg b/docs/0.21.3/img/d6293957048ac05c3ae0dfac9949537c.jpg deleted file mode 100644 index e4d17035b61c5fb8ffc156fc0f2b2f5109d3d8c2..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d6293957048ac05c3ae0dfac9949537c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d670eea3215462f64d74d9366622a490.jpg b/docs/0.21.3/img/d670eea3215462f64d74d9366622a490.jpg deleted file mode 100644 index 631db309e6bdd7eff33b3d13adfab55a988e7f67..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d670eea3215462f64d74d9366622a490.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d69db8c22e9315a6fb454b276d5ce534.jpg b/docs/0.21.3/img/d69db8c22e9315a6fb454b276d5ce534.jpg deleted file mode 100644 index 62b9de24198910cc2adeb855f4e653054f5e0a90..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d69db8c22e9315a6fb454b276d5ce534.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d6d6e6638cd01ead4811579660e36b44.jpg b/docs/0.21.3/img/d6d6e6638cd01ead4811579660e36b44.jpg deleted file mode 100644 index c73d063b20a9cb75efec05891a52f1dbf977c7bf..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d6d6e6638cd01ead4811579660e36b44.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d6e5649338670ffec641327eeaa0521a.jpg b/docs/0.21.3/img/d6e5649338670ffec641327eeaa0521a.jpg deleted file mode 100644 index 1dd71e3b24bce86fdfc3cd958deb33a51a55e9ec..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d6e5649338670ffec641327eeaa0521a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d6f34fca0b5561181aa5263dbb97df74.jpg b/docs/0.21.3/img/d6f34fca0b5561181aa5263dbb97df74.jpg deleted file mode 100644 index 6ad47463a105da29d42def0402cea1ddf0df70e1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d6f34fca0b5561181aa5263dbb97df74.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d7151d4911c077ded512eba1c6cd2bb0.jpg b/docs/0.21.3/img/d7151d4911c077ded512eba1c6cd2bb0.jpg deleted file mode 100644 index 5902aeda0f990c204fbc5775a258fbdc87f38dd1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d7151d4911c077ded512eba1c6cd2bb0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d7228aff11bb03497e40badd984560a6.jpg b/docs/0.21.3/img/d7228aff11bb03497e40badd984560a6.jpg deleted file mode 100644 index 64ae506de6cd8fcbde6a69d19f6f69544b1137f9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d7228aff11bb03497e40badd984560a6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d7b279566c62332b11d20ca6ff026505.jpg b/docs/0.21.3/img/d7b279566c62332b11d20ca6ff026505.jpg deleted file mode 100644 index 456fe1225d625e165f79000be45f3c04f6c2d08b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d7b279566c62332b11d20ca6ff026505.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d7e5ca264ffbd335db57ba194e2a5d0f.jpg b/docs/0.21.3/img/d7e5ca264ffbd335db57ba194e2a5d0f.jpg deleted file mode 100644 index e14c38fdf10ba31f6715b315a4dff1f2b586cd3c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d7e5ca264ffbd335db57ba194e2a5d0f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d7f26dee1f8849176f6438863fb775fb.jpg b/docs/0.21.3/img/d7f26dee1f8849176f6438863fb775fb.jpg deleted file mode 100644 index e6d7649a864981730c9eda541bc2f96c137307d1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d7f26dee1f8849176f6438863fb775fb.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d7ff3091308658ce388554d420581459.jpg b/docs/0.21.3/img/d7ff3091308658ce388554d420581459.jpg deleted file mode 100644 index e49c8bd515f101244ddd32570ba2499e0ad85298..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d7ff3091308658ce388554d420581459.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d822c46462e0ffda4dd99f74a070b6b3.jpg b/docs/0.21.3/img/d822c46462e0ffda4dd99f74a070b6b3.jpg deleted file mode 100644 index e0c79633a4157609aedbf52a6a8a6741d8f202fa..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d822c46462e0ffda4dd99f74a070b6b3.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d8b3d5242d513369a44f8bf0c6112744.jpg b/docs/0.21.3/img/d8b3d5242d513369a44f8bf0c6112744.jpg deleted file mode 100644 index ff0a49a244d3f4f92748e0d34edc469ade2a0c16..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d8b3d5242d513369a44f8bf0c6112744.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d90bb77f4f60c523c2bc041f768e8a49.jpg b/docs/0.21.3/img/d90bb77f4f60c523c2bc041f768e8a49.jpg deleted file mode 100644 index b2df456db9181c19bd2ea3012a52a3e52f961a52..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d90bb77f4f60c523c2bc041f768e8a49.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d97ae32100e54dfed8139aef0fcc9b68.jpg b/docs/0.21.3/img/d97ae32100e54dfed8139aef0fcc9b68.jpg deleted file mode 100644 index 2c15b56917488ad4dc632c8df407b6b5ba8d16e8..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d97ae32100e54dfed8139aef0fcc9b68.jpg and /dev/null differ diff --git a/docs/0.21.3/img/d9ac7cfff134bd66e853020e32d76f5c.jpg b/docs/0.21.3/img/d9ac7cfff134bd66e853020e32d76f5c.jpg deleted file mode 100644 index 94b6e1ff5387de03630db1e62b46e1f2589a52c5..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/d9ac7cfff134bd66e853020e32d76f5c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/da2ce2d49bbab0c389600d1c82fccf9b.jpg b/docs/0.21.3/img/da2ce2d49bbab0c389600d1c82fccf9b.jpg deleted file mode 100644 index efaf8945edddeb9e092462f071a9e6b40a068af5..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/da2ce2d49bbab0c389600d1c82fccf9b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/da31be9c84ea7617ab534b511701d650.jpg b/docs/0.21.3/img/da31be9c84ea7617ab534b511701d650.jpg deleted file mode 100644 index 0bbb2a930f6fd3f5227dcd2751868365ec9eb670..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/da31be9c84ea7617ab534b511701d650.jpg and /dev/null differ diff --git a/docs/0.21.3/img/da928d409a2cf1615368a82030e09380.jpg b/docs/0.21.3/img/da928d409a2cf1615368a82030e09380.jpg deleted file mode 100644 index 74faea8e11b0a1769e174f86bf7a7fb960cd981f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/da928d409a2cf1615368a82030e09380.jpg and /dev/null differ diff --git a/docs/0.21.3/img/db23fadfab6b660dbfa2934c4536beb1.jpg b/docs/0.21.3/img/db23fadfab6b660dbfa2934c4536beb1.jpg deleted file mode 100644 index 87da205e6eb5a7c74b02c8826a60f4cf7b394acf..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/db23fadfab6b660dbfa2934c4536beb1.jpg and /dev/null differ diff --git a/docs/0.21.3/img/db24e5f707f974690c4334cfa218bbee.jpg b/docs/0.21.3/img/db24e5f707f974690c4334cfa218bbee.jpg deleted file mode 100644 index ce88bce96828abf8f19463f39f5a35e96c7724be..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/db24e5f707f974690c4334cfa218bbee.jpg and /dev/null differ diff --git a/docs/0.21.3/img/db30d43fd890d5f28b84a667ddfbb39d.jpg b/docs/0.21.3/img/db30d43fd890d5f28b84a667ddfbb39d.jpg deleted file mode 100644 index c7b5712868be739621404c782a24842a6bd1bc1c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/db30d43fd890d5f28b84a667ddfbb39d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/dc074c105944810a277030dfab298376.jpg b/docs/0.21.3/img/dc074c105944810a277030dfab298376.jpg deleted file mode 100644 index ecd211be3338409d7ba5e562888e8e55ab069ae9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/dc074c105944810a277030dfab298376.jpg and /dev/null differ diff --git a/docs/0.21.3/img/dc219bfd2e157456e106676575955251.jpg b/docs/0.21.3/img/dc219bfd2e157456e106676575955251.jpg deleted file mode 100644 index 51f04711b8de69244ae5d820f1d19bfcf65b93a4..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/dc219bfd2e157456e106676575955251.jpg and /dev/null differ diff --git a/docs/0.21.3/img/dc40e3a6d4022bfb488e0a4283b656b9.jpg b/docs/0.21.3/img/dc40e3a6d4022bfb488e0a4283b656b9.jpg deleted file mode 100644 index 95c05422328a2a0eb5c16e8c5b18706574b68c2f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/dc40e3a6d4022bfb488e0a4283b656b9.jpg and /dev/null differ diff --git a/docs/0.21.3/img/dc8f095e63b3defdb85fcf54d7d2d8c2.jpg b/docs/0.21.3/img/dc8f095e63b3defdb85fcf54d7d2d8c2.jpg deleted file mode 100644 index eb9182c6a145b207fb6fd453bd10c1364b492d7b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/dc8f095e63b3defdb85fcf54d7d2d8c2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/dd310c2fa94418ac4f4d12638444fd3b.jpg b/docs/0.21.3/img/dd310c2fa94418ac4f4d12638444fd3b.jpg deleted file mode 100644 index 2eb8ecb03bd1f32d1053aab841fe2aae0e54532b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/dd310c2fa94418ac4f4d12638444fd3b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/dd9b7456f8406b6fac80cfd3ca11ccfc.jpg b/docs/0.21.3/img/dd9b7456f8406b6fac80cfd3ca11ccfc.jpg deleted file mode 100644 index a2b2fa07652d1536b637c8ba9efcf6f739140841..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/dd9b7456f8406b6fac80cfd3ca11ccfc.jpg and /dev/null differ diff --git a/docs/0.21.3/img/dda3ed622f104bd7e6abffbcb1691998.jpg b/docs/0.21.3/img/dda3ed622f104bd7e6abffbcb1691998.jpg deleted file mode 100644 index 7b3778dca125ed900827047b4e18cd3bb5796c2f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/dda3ed622f104bd7e6abffbcb1691998.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ddb7802ca4af9cffa650eec942feb790.jpg b/docs/0.21.3/img/ddb7802ca4af9cffa650eec942feb790.jpg deleted file mode 100644 index 820a97947fd0cce2b9d69bd9ca88160d254f90cb..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ddb7802ca4af9cffa650eec942feb790.jpg and /dev/null differ diff --git a/docs/0.21.3/img/dde55f7a409ac46b5694e689c4b151f5.jpg b/docs/0.21.3/img/dde55f7a409ac46b5694e689c4b151f5.jpg deleted file mode 100644 index 02128102691805ab136ada58c8c4a05ddb0061bb..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/dde55f7a409ac46b5694e689c4b151f5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/de55c53f911184b6ad3e562a4d694c01.jpg b/docs/0.21.3/img/de55c53f911184b6ad3e562a4d694c01.jpg deleted file mode 100644 index 4d511b790ef8fd4a6e1bec0d4aa144ce1746214f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/de55c53f911184b6ad3e562a4d694c01.jpg and /dev/null differ diff --git a/docs/0.21.3/img/de6303ad5b9808c7ae8c64ddc632d893.jpg b/docs/0.21.3/img/de6303ad5b9808c7ae8c64ddc632d893.jpg deleted file mode 100644 index bfabf1ebd1762a85de6eca2ff5e903592030e8fa..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/de6303ad5b9808c7ae8c64ddc632d893.jpg and /dev/null differ diff --git a/docs/0.21.3/img/decc30cee202697370eb9e21062c54b7.jpg b/docs/0.21.3/img/decc30cee202697370eb9e21062c54b7.jpg deleted file mode 100644 index 8ca3af74f72f7c3d7952772832acc0d9ae69c3a3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/decc30cee202697370eb9e21062c54b7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/dedef2ddd0f96df639d4c85fffb9bbd5.jpg b/docs/0.21.3/img/dedef2ddd0f96df639d4c85fffb9bbd5.jpg deleted file mode 100644 index dc2cda260070e57ae70fdae82c7da617fd4129ed..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/dedef2ddd0f96df639d4c85fffb9bbd5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/def4737951f9990642e65b2403941350.jpg b/docs/0.21.3/img/def4737951f9990642e65b2403941350.jpg deleted file mode 100644 index 92afb7997c8842c7ae6a6cde8fcb6ea569086883..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/def4737951f9990642e65b2403941350.jpg and /dev/null differ diff --git a/docs/0.21.3/img/df49142f65f7afa86c2e18f598f00729.jpg b/docs/0.21.3/img/df49142f65f7afa86c2e18f598f00729.jpg deleted file mode 100644 index 9c809572b162aee43eb6d011a22eaf72e5bfae9a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/df49142f65f7afa86c2e18f598f00729.jpg and /dev/null differ diff --git a/docs/0.21.3/img/dfab82d3a21680e5b6d3898a02dc6e01.jpg b/docs/0.21.3/img/dfab82d3a21680e5b6d3898a02dc6e01.jpg deleted file mode 100644 index 73289cb06f24546f73ff5e66dcb88e6a973c787b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/dfab82d3a21680e5b6d3898a02dc6e01.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e02e680946360c19e1cee28c92173bc4.jpg b/docs/0.21.3/img/e02e680946360c19e1cee28c92173bc4.jpg deleted file mode 100644 index 91204288150e877f5491c2cc3e09b366edb926a6..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e02e680946360c19e1cee28c92173bc4.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e03066df748abd9273db055cb79f0f01.jpg b/docs/0.21.3/img/e03066df748abd9273db055cb79f0f01.jpg deleted file mode 100644 index aca5aadcde8d4b9d697fba67b761b1157e181290..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e03066df748abd9273db055cb79f0f01.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e0532dc18cc4c92c2b39f4b29d33cd13.jpg b/docs/0.21.3/img/e0532dc18cc4c92c2b39f4b29d33cd13.jpg deleted file mode 100644 index 7b72ea068ffc8227716c434f231bffa97b2bb8c9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e0532dc18cc4c92c2b39f4b29d33cd13.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e0d8dbb9574d5eb264279927dcf8baaf.jpg b/docs/0.21.3/img/e0d8dbb9574d5eb264279927dcf8baaf.jpg deleted file mode 100644 index e38b01c01ba92260e62caf0823f4b83fff68fd5e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e0d8dbb9574d5eb264279927dcf8baaf.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e18ade3134bef595ea6ddf488ff9557a.jpg b/docs/0.21.3/img/e18ade3134bef595ea6ddf488ff9557a.jpg deleted file mode 100644 index d2680bc5c6b93c2bc96a33031331481ec5c9cbc0..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e18ade3134bef595ea6ddf488ff9557a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e1b4d08b93d1d222e96d99475a766281.jpg b/docs/0.21.3/img/e1b4d08b93d1d222e96d99475a766281.jpg deleted file mode 100644 index bebc5e2656ce8c9b4226f84ce8e74991a4868b44..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e1b4d08b93d1d222e96d99475a766281.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e24edaeb407b6a696ddb188697f0934d.jpg b/docs/0.21.3/img/e24edaeb407b6a696ddb188697f0934d.jpg deleted file mode 100644 index da658239eee144413589bf03a13fbc1d8b5f5042..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e24edaeb407b6a696ddb188697f0934d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e2632203a52191f8ba8e393e34545100.jpg b/docs/0.21.3/img/e2632203a52191f8ba8e393e34545100.jpg deleted file mode 100644 index 76e5ff08de65c6e759b7098aba116e099c451a2b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e2632203a52191f8ba8e393e34545100.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e2650a6b3222cf44bd311f7205909f06.jpg b/docs/0.21.3/img/e2650a6b3222cf44bd311f7205909f06.jpg deleted file mode 100644 index 1289b5033e0493cd35b34d4bdfd5363d42a857b5..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e2650a6b3222cf44bd311f7205909f06.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e270fdc1fb7cabab295d31d189d77258.jpg b/docs/0.21.3/img/e270fdc1fb7cabab295d31d189d77258.jpg deleted file mode 100644 index 3c081e4eff823df8fd60423e477eb534b8c83692..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e270fdc1fb7cabab295d31d189d77258.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e279b8169ddd6581c5606c868ba52fae.jpg b/docs/0.21.3/img/e279b8169ddd6581c5606c868ba52fae.jpg deleted file mode 100644 index aa578668c7630700d07ea05cd9dbd58d780c948b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e279b8169ddd6581c5606c868ba52fae.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e2bd3aaa1586d4d17301f7fe016eefd7.jpg b/docs/0.21.3/img/e2bd3aaa1586d4d17301f7fe016eefd7.jpg deleted file mode 100644 index a6297ce4d895876c7b51352d1349433ce5e4dad6..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e2bd3aaa1586d4d17301f7fe016eefd7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e2f9b08680b30cfb80102f69264fdd5c.jpg b/docs/0.21.3/img/e2f9b08680b30cfb80102f69264fdd5c.jpg deleted file mode 100644 index 337ef4f2561e57d5e246c116d7ae277b74085367..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e2f9b08680b30cfb80102f69264fdd5c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e310c621bd78988800b952eb7542cd88.jpg b/docs/0.21.3/img/e310c621bd78988800b952eb7542cd88.jpg deleted file mode 100644 index 3a787f9b4a1f5a96ce05521c2b55769899be3572..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e310c621bd78988800b952eb7542cd88.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e3eebe26bb077cc3986d3beba9de4ac5.jpg b/docs/0.21.3/img/e3eebe26bb077cc3986d3beba9de4ac5.jpg deleted file mode 100644 index 273e5ede136093f629cbc88ddc973793afe09bf5..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e3eebe26bb077cc3986d3beba9de4ac5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e3ff277d54a34043adefa98a9e1a69d1.jpg b/docs/0.21.3/img/e3ff277d54a34043adefa98a9e1a69d1.jpg deleted file mode 100644 index 0656a46ea206015c631da0df2560f880e3c9dedd..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e3ff277d54a34043adefa98a9e1a69d1.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e473a2606f078eaa7b86800b11f4d62b.jpg b/docs/0.21.3/img/e473a2606f078eaa7b86800b11f4d62b.jpg deleted file mode 100644 index 68f815a4f2ae8b576b6611f9cc42b86f8e465d95..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e473a2606f078eaa7b86800b11f4d62b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e4e213d17043826a96dd917dcbdf5d85.jpg b/docs/0.21.3/img/e4e213d17043826a96dd917dcbdf5d85.jpg deleted file mode 100644 index f1a28f743b8013367c2dc1fdddcf987e35744f44..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e4e213d17043826a96dd917dcbdf5d85.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e5012484ffa6afb2c720d363b39a36b0.jpg b/docs/0.21.3/img/e5012484ffa6afb2c720d363b39a36b0.jpg deleted file mode 100644 index 26d5c8653bba7dc633218731cd3ffb0e190df25c..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e5012484ffa6afb2c720d363b39a36b0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e56abe6d36f21c0c6dd22d2a84535415.jpg b/docs/0.21.3/img/e56abe6d36f21c0c6dd22d2a84535415.jpg deleted file mode 100644 index 89473c4658d9e8dce44b565344451bd705ef93f2..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e56abe6d36f21c0c6dd22d2a84535415.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e5ad06b17e1bacf475bf9247d93d1419.jpg b/docs/0.21.3/img/e5ad06b17e1bacf475bf9247d93d1419.jpg deleted file mode 100644 index 37375802c9aeb9d63a510e36e2dcf5be66a6f4e6..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e5ad06b17e1bacf475bf9247d93d1419.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e5b3516a2cd7fbf2916643478e0bed70.jpg b/docs/0.21.3/img/e5b3516a2cd7fbf2916643478e0bed70.jpg deleted file mode 100644 index 462e5d3d297be2e842e7b66b39af224ef944e51e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e5b3516a2cd7fbf2916643478e0bed70.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e615670f11d811f002d1b58effe99dc0.jpg b/docs/0.21.3/img/e615670f11d811f002d1b58effe99dc0.jpg deleted file mode 100644 index ef348e4e1013a7e3335d96eb00d921d0c8d34f48..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e615670f11d811f002d1b58effe99dc0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e64298b4d9439c3db54eeddbf3d92b4b.jpg b/docs/0.21.3/img/e64298b4d9439c3db54eeddbf3d92b4b.jpg deleted file mode 100644 index 39110139d6adb7a318e48865ef892e0d7e919648..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e64298b4d9439c3db54eeddbf3d92b4b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e668ecc249e709e47f6955a74528bf7b.jpg b/docs/0.21.3/img/e668ecc249e709e47f6955a74528bf7b.jpg deleted file mode 100644 index e5392a3bcccae5912a83efa1e30cbc21c3466d27..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e668ecc249e709e47f6955a74528bf7b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e6811d3f6333e9490d602db8dc1e3d96.jpg b/docs/0.21.3/img/e6811d3f6333e9490d602db8dc1e3d96.jpg deleted file mode 100644 index 88692c1dc908cd6f392d9a0d916220433221ad6e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e6811d3f6333e9490d602db8dc1e3d96.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e73c79ca71fe87074008fd5f464d686d.jpg b/docs/0.21.3/img/e73c79ca71fe87074008fd5f464d686d.jpg deleted file mode 100644 index 9a3c1b0198deffc15b29b7e58276c0b7817b8f26..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e73c79ca71fe87074008fd5f464d686d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e7a07569c8c6af174aa061b9f8921065.jpg b/docs/0.21.3/img/e7a07569c8c6af174aa061b9f8921065.jpg deleted file mode 100644 index 1bb46027c32a51d85fbf8cf5d4e7611f78cb5cd7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e7a07569c8c6af174aa061b9f8921065.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e7a3ba1e52e7e8add5e2c14602a92e3a.jpg b/docs/0.21.3/img/e7a3ba1e52e7e8add5e2c14602a92e3a.jpg deleted file mode 100644 index a6992d57061c0d0b21db5aae2891a3fe2bf982fb..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e7a3ba1e52e7e8add5e2c14602a92e3a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e83376afb9facc5992c857d659c7d812.jpg b/docs/0.21.3/img/e83376afb9facc5992c857d659c7d812.jpg deleted file mode 100644 index aa564e9780b54407f84ab96f196eee255a596b9d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e83376afb9facc5992c857d659c7d812.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e83fafb56db497bec93433bd0b0ee316.jpg b/docs/0.21.3/img/e83fafb56db497bec93433bd0b0ee316.jpg deleted file mode 100644 index d4feb58a5ae1a21f7de969f03628c4f4d7cfc92b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e83fafb56db497bec93433bd0b0ee316.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e84b0861711b65f28923da7c268645e7.jpg b/docs/0.21.3/img/e84b0861711b65f28923da7c268645e7.jpg deleted file mode 100644 index 42b71fc8ef68e9602251c5d1342d9f11c6208a82..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e84b0861711b65f28923da7c268645e7.jpg and /dev/null differ diff --git a/docs/0.21.3/img/e996da94de858e5248f145e01733ed9d.jpg b/docs/0.21.3/img/e996da94de858e5248f145e01733ed9d.jpg deleted file mode 100644 index c03a020dfd9af89b398fb71afc772116d0a1c925..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/e996da94de858e5248f145e01733ed9d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ea1fbc6466fa8a62aa1f55a550a686b3.jpg b/docs/0.21.3/img/ea1fbc6466fa8a62aa1f55a550a686b3.jpg deleted file mode 100644 index 0feb163d2c1185c0e5eb296397a8405a20c72d30..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ea1fbc6466fa8a62aa1f55a550a686b3.jpg and /dev/null differ diff --git a/docs/0.21.3/img/eaba00919535dcb10574f0228b451481.jpg b/docs/0.21.3/img/eaba00919535dcb10574f0228b451481.jpg deleted file mode 100644 index 2fa791510f943cb8ed2da151f0efece045873251..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/eaba00919535dcb10574f0228b451481.jpg and /dev/null differ diff --git a/docs/0.21.3/img/eac4cdf0a783ddcd7098023e25bb16ef.jpg b/docs/0.21.3/img/eac4cdf0a783ddcd7098023e25bb16ef.jpg deleted file mode 100644 index a3c0e60d7274e3f26eb18c0b1982011d82b40f64..0000000000000000000000000000000000000000 --- a/docs/0.21.3/img/eac4cdf0a783ddcd7098023e25bb16ef.jpg +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - -Tree - - -0 - -petal length (cm) ≤ 2.45 -gini = 0.6667 -samples = 150 -value = [50, 50, 50] -class = setosa - - -1 - -gini = 0.0 -samples = 50 -value = [50, 0, 0] -class = setosa - - -0->1 - - -True - - -2 - -petal width (cm) ≤ 1.75 -gini = 0.5 -samples = 100 -value = [0, 50, 50] -class = versicolor - - -0->2 - - -False - - -3 - -petal length (cm) ≤ 4.95 -gini = 0.168 -samples = 54 -value = [0, 49, 5] -class = versicolor - - -2->3 - - - - -12 - -petal length (cm) ≤ 4.85 -gini = 0.0425 -samples = 46 -value = [0, 1, 45] -class = virginica - - -2->12 - - - - -4 - -petal width (cm) ≤ 1.65 -gini = 0.0408 -samples = 48 -value = [0, 47, 1] -class = versicolor - - -3->4 - - - - -7 - -petal width (cm) ≤ 1.55 -gini = 0.4444 -samples = 6 -value = [0, 2, 4] -class = virginica - - -3->7 - - - - -5 - -gini = 0.0 -samples = 47 -value = [0, 47, 0] -class = versicolor - - -4->5 - - - - -6 - -gini = 0.0 -samples = 1 -value = [0, 0, 1] -class = virginica - - -4->6 - - - - -8 - -gini = 0.0 -samples = 3 -value = [0, 0, 3] -class = virginica - - -7->8 - - - - -9 - -sepal length (cm) ≤ 6.95 -gini = 0.4444 -samples = 3 -value = [0, 2, 1] -class = versicolor - - -7->9 - - - - -10 - -gini = 0.0 -samples = 2 -value = [0, 2, 0] -class = versicolor - - -9->10 - - - - -11 - -gini = 0.0 -samples = 1 -value = [0, 0, 1] -class = virginica - - -9->11 - - - - -13 - -sepal length (cm) ≤ 5.95 -gini = 0.4444 -samples = 3 -value = [0, 1, 2] -class = virginica - - -12->13 - - - - -16 - -gini = 0.0 -samples = 43 -value = [0, 0, 43] -class = virginica - - -12->16 - - - - -14 - -gini = 0.0 -samples = 1 -value = [0, 1, 0] -class = versicolor - - -13->14 - - - - -15 - -gini = 0.0 -samples = 2 -value = [0, 0, 2] -class = virginica - - -13->15 - - - - - diff --git a/docs/0.21.3/img/eada6f59eaee0a758bddb97b44835751.jpg b/docs/0.21.3/img/eada6f59eaee0a758bddb97b44835751.jpg deleted file mode 100644 index 0b091444121980a505230f28274ad4b459d43cb2..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/eada6f59eaee0a758bddb97b44835751.jpg and /dev/null differ diff --git a/docs/0.21.3/img/eaf558e2c8d1fbd5426664c1698d80bd.jpg b/docs/0.21.3/img/eaf558e2c8d1fbd5426664c1698d80bd.jpg deleted file mode 100644 index 0f71e90256a2c97c75492c46763d11ef32351abe..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/eaf558e2c8d1fbd5426664c1698d80bd.jpg and /dev/null differ diff --git a/docs/0.21.3/img/eb604628a01ce7d6db62d61eba6e2e2f.jpg b/docs/0.21.3/img/eb604628a01ce7d6db62d61eba6e2e2f.jpg deleted file mode 100644 index 70ddbe805060283ab79b902f7eac38b98c3ec6b3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/eb604628a01ce7d6db62d61eba6e2e2f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/eb89c7ce95ca7e68685f180915bf0511.jpg b/docs/0.21.3/img/eb89c7ce95ca7e68685f180915bf0511.jpg deleted file mode 100644 index cb68f75bea3f58ca7229e1dc6c9387d8f97e6f3b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/eb89c7ce95ca7e68685f180915bf0511.jpg and /dev/null differ diff --git a/docs/0.21.3/img/eba6c21adbb5d5905624446cc970a7d3.jpg b/docs/0.21.3/img/eba6c21adbb5d5905624446cc970a7d3.jpg deleted file mode 100644 index ad7b8824d8fd0f3056e1b829acf47d70161d7f9a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/eba6c21adbb5d5905624446cc970a7d3.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ebdfa216db7c73e9067f547e1e65ca02.jpg b/docs/0.21.3/img/ebdfa216db7c73e9067f547e1e65ca02.jpg deleted file mode 100644 index 697df8429d2789f33a6829614ea5974f065d6d90..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ebdfa216db7c73e9067f547e1e65ca02.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ec29f705a6be2ce512a10c266dd755f0.jpg b/docs/0.21.3/img/ec29f705a6be2ce512a10c266dd755f0.jpg deleted file mode 100644 index 5f136176b2fc2fcd95537fdb7862a105caa0bee3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ec29f705a6be2ce512a10c266dd755f0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ed352c0fca166fdaa12d7da93676df50.jpg b/docs/0.21.3/img/ed352c0fca166fdaa12d7da93676df50.jpg deleted file mode 100644 index 1a833ca450002ca56b35f32b19a6bb329f3e11ac..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ed352c0fca166fdaa12d7da93676df50.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ed407df5e0211da2859805a96e271751.jpg b/docs/0.21.3/img/ed407df5e0211da2859805a96e271751.jpg deleted file mode 100644 index 96b558eb8cc47dbaf541e6ffd1f3fa23dae6698d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ed407df5e0211da2859805a96e271751.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ed51906ca8fbc868248006c841aefa2b.jpg b/docs/0.21.3/img/ed51906ca8fbc868248006c841aefa2b.jpg deleted file mode 100644 index 53624306a1c9a51df251252846be933e7702a7a6..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ed51906ca8fbc868248006c841aefa2b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ed6a1db8527fda759b14943c1b36d88e.jpg b/docs/0.21.3/img/ed6a1db8527fda759b14943c1b36d88e.jpg deleted file mode 100644 index 6aef6e1a6088f19eb0e43c3b1eec55e71aac8abd..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ed6a1db8527fda759b14943c1b36d88e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ed70b000f50fb169ffe20ca2979e4a75.jpg b/docs/0.21.3/img/ed70b000f50fb169ffe20ca2979e4a75.jpg deleted file mode 100644 index 24cddc7c4902bc728d7d8cb1fcac605a9c067409..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ed70b000f50fb169ffe20ca2979e4a75.jpg and /dev/null differ diff --git a/docs/0.21.3/img/edbf7affc28abad1a964eeeeac3e711c.jpg b/docs/0.21.3/img/edbf7affc28abad1a964eeeeac3e711c.jpg deleted file mode 100644 index 59293f658f91b066515be816a2c98ed56c0e186e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/edbf7affc28abad1a964eeeeac3e711c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ede6a26a443c24b8cea943a4a6f144f0.jpg b/docs/0.21.3/img/ede6a26a443c24b8cea943a4a6f144f0.jpg deleted file mode 100644 index edd935086d6bc0e2755efcb022b991550f85110e..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ede6a26a443c24b8cea943a4a6f144f0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ee5d94bdc1dac94ab975f3db18552505.jpg b/docs/0.21.3/img/ee5d94bdc1dac94ab975f3db18552505.jpg deleted file mode 100644 index b4f3c6d2d33b0539bc496fd4a56d095c60149b35..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ee5d94bdc1dac94ab975f3db18552505.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ee68d82006856c6355aa0dca42cd5054.jpg b/docs/0.21.3/img/ee68d82006856c6355aa0dca42cd5054.jpg deleted file mode 100644 index 7dc6c820a98bfb4685d39fc293d6667b213b0745..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ee68d82006856c6355aa0dca42cd5054.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ee78ab463ea8dc72594f270f5193a7a6.jpg b/docs/0.21.3/img/ee78ab463ea8dc72594f270f5193a7a6.jpg deleted file mode 100644 index 2e225f5638fb803b244192237b83fa9c45d408eb..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ee78ab463ea8dc72594f270f5193a7a6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/eeaf066f8cca5064b706ccfc4728323d.jpg b/docs/0.21.3/img/eeaf066f8cca5064b706ccfc4728323d.jpg deleted file mode 100644 index 0af1ede42f7a9dd90c9b8555d7f077b443436e5b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/eeaf066f8cca5064b706ccfc4728323d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/eeb2bac86ebedef3d8d2dcbf5b8c735b.jpg b/docs/0.21.3/img/eeb2bac86ebedef3d8d2dcbf5b8c735b.jpg deleted file mode 100644 index ea59b9342bbdcb42b565b12e72a96fa689a447c7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/eeb2bac86ebedef3d8d2dcbf5b8c735b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ef59d065ac32862cd7527b0c3fcf7956.jpg b/docs/0.21.3/img/ef59d065ac32862cd7527b0c3fcf7956.jpg deleted file mode 100644 index 6c8e4fdc1652f2e739d1b1dc0bb83ab07816b2f9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ef59d065ac32862cd7527b0c3fcf7956.jpg and /dev/null differ diff --git a/docs/0.21.3/img/efaeec5dadbe79caddb0f92abab55f5b.jpg b/docs/0.21.3/img/efaeec5dadbe79caddb0f92abab55f5b.jpg deleted file mode 100644 index 244196bc6f595da6b0ca9311032e4c0de4cc5ee8..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/efaeec5dadbe79caddb0f92abab55f5b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/efb0c43ded3d4bdfb4b1d2092c8ee446.jpg b/docs/0.21.3/img/efb0c43ded3d4bdfb4b1d2092c8ee446.jpg deleted file mode 100644 index 78584503a138b708a4b31e10e364eb7d7ba2f6d2..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/efb0c43ded3d4bdfb4b1d2092c8ee446.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f0b72920659961ba27aec1da59f3019c.jpg b/docs/0.21.3/img/f0b72920659961ba27aec1da59f3019c.jpg deleted file mode 100644 index 5356034663ad19ff087409e98138edee76ed3655..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f0b72920659961ba27aec1da59f3019c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f15b9946d9078749f894a78579dc6778.jpg b/docs/0.21.3/img/f15b9946d9078749f894a78579dc6778.jpg deleted file mode 100644 index eab13cbbef967ac387e02845d1a48e6066962bc2..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f15b9946d9078749f894a78579dc6778.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f19ea7e3ca675413d6ee0f2faff14b75.jpg b/docs/0.21.3/img/f19ea7e3ca675413d6ee0f2faff14b75.jpg deleted file mode 100644 index e6a3b16ba69fec605fb9950ad295ed2e436aa325..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f19ea7e3ca675413d6ee0f2faff14b75.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f1c8c9b812ae1b6ec189eda900e47269.jpg b/docs/0.21.3/img/f1c8c9b812ae1b6ec189eda900e47269.jpg deleted file mode 100644 index 42eb1a90951c68c943ec92543cd6b6b34aaea1da..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f1c8c9b812ae1b6ec189eda900e47269.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f1fa822436569807fdc9dca5d2879d99.jpg b/docs/0.21.3/img/f1fa822436569807fdc9dca5d2879d99.jpg deleted file mode 100644 index 3f6e68b8f186a84527ca345fb6ff08a678fa5945..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f1fa822436569807fdc9dca5d2879d99.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f1fb5834480bfa9770be94da12bbd514.jpg b/docs/0.21.3/img/f1fb5834480bfa9770be94da12bbd514.jpg deleted file mode 100644 index d77e5a94f5faef7a3f20c3cfb40ae891f2f3ee84..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f1fb5834480bfa9770be94da12bbd514.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f1fc9ca63c663059f76c2af6729189d1.jpg b/docs/0.21.3/img/f1fc9ca63c663059f76c2af6729189d1.jpg deleted file mode 100644 index 88814f16e2c16fc88e37a33426df84b3860affb7..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f1fc9ca63c663059f76c2af6729189d1.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f211ed45608192b0763ed51c85b60811.jpg b/docs/0.21.3/img/f211ed45608192b0763ed51c85b60811.jpg deleted file mode 100644 index df8b6d66c3bf5071eaf1dfb416d8264bffc79474..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f211ed45608192b0763ed51c85b60811.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f28436a66fb892c9e8923e6649f19065.jpg b/docs/0.21.3/img/f28436a66fb892c9e8923e6649f19065.jpg deleted file mode 100644 index 68e6c2ee8c100c396064de126094620865f44621..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f28436a66fb892c9e8923e6649f19065.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f298c2b42dd32bed6f02df3c6d4f7cf9.jpg b/docs/0.21.3/img/f298c2b42dd32bed6f02df3c6d4f7cf9.jpg deleted file mode 100644 index 9e0d30c68d7f99db188019dcf2312b572a920337..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f298c2b42dd32bed6f02df3c6d4f7cf9.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f3432e537038cc7e319db4ea1ff6a8e3.jpg b/docs/0.21.3/img/f3432e537038cc7e319db4ea1ff6a8e3.jpg deleted file mode 100644 index 31c91f78d0593a08dda262517575c792411b3765..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f3432e537038cc7e319db4ea1ff6a8e3.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f34cef4cb73bfa4cbe2f9b4300a8940c.jpg b/docs/0.21.3/img/f34cef4cb73bfa4cbe2f9b4300a8940c.jpg deleted file mode 100644 index 5f58776b392e217799c3e04125e04ac031c748c1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f34cef4cb73bfa4cbe2f9b4300a8940c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f35f174b5f70ab18c19107e3f0fbe889.jpg b/docs/0.21.3/img/f35f174b5f70ab18c19107e3f0fbe889.jpg deleted file mode 100644 index bd4d789c40f6ce85e79df07a2045d22660012b72..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f35f174b5f70ab18c19107e3f0fbe889.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f3893160388ee4203c313659d729cef0.jpg b/docs/0.21.3/img/f3893160388ee4203c313659d729cef0.jpg deleted file mode 100644 index 9ada5b13a9d6a5b7f75cd1d34fd538f20259a607..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f3893160388ee4203c313659d729cef0.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f38f84b73c7da2884c38bdfca1a38b1c.jpg b/docs/0.21.3/img/f38f84b73c7da2884c38bdfca1a38b1c.jpg deleted file mode 100644 index a8805c9236dbabfa76a73e493e38392111809a2d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f38f84b73c7da2884c38bdfca1a38b1c.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f40416aceb254b77100eb361321c1804.jpg b/docs/0.21.3/img/f40416aceb254b77100eb361321c1804.jpg deleted file mode 100644 index 6832ac9683e917e0419439edf753694d22438906..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f40416aceb254b77100eb361321c1804.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f43793e26fc93870e33eb062060e309a.jpg b/docs/0.21.3/img/f43793e26fc93870e33eb062060e309a.jpg deleted file mode 100644 index b94387bf101a3ceae0eefe92b67731eea18c1ac1..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f43793e26fc93870e33eb062060e309a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f4ad81b759af5604d12ae25c4c541224.jpg b/docs/0.21.3/img/f4ad81b759af5604d12ae25c4c541224.jpg deleted file mode 100644 index fc6adf081cffbd42e836d63072a0695eadab934a..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f4ad81b759af5604d12ae25c4c541224.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f4c7787828dd90f6b47e1677bbc806da.jpg b/docs/0.21.3/img/f4c7787828dd90f6b47e1677bbc806da.jpg deleted file mode 100644 index ef0f6e9b3a819300a03a5b69061581ed1183caf9..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f4c7787828dd90f6b47e1677bbc806da.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f5291f866455b62cd6c68f419444e5cf.jpg b/docs/0.21.3/img/f5291f866455b62cd6c68f419444e5cf.jpg deleted file mode 100644 index 86a1c3249f6d5543a5f0f4f275cb2284d1697283..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f5291f866455b62cd6c68f419444e5cf.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f60c0101ae8f649bb02ed8b24b30fd83.jpg b/docs/0.21.3/img/f60c0101ae8f649bb02ed8b24b30fd83.jpg deleted file mode 100644 index b52d65b39eead8ea54ebf058afbb1ed1b5a182d2..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f60c0101ae8f649bb02ed8b24b30fd83.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f6ce0899ba52f1169500b726ee9c8a92.jpg b/docs/0.21.3/img/f6ce0899ba52f1169500b726ee9c8a92.jpg deleted file mode 100644 index fd4bd2a09f97ceaa949bf32bcc7d4a0f935f06d5..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f6ce0899ba52f1169500b726ee9c8a92.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f7129cf20abc58eaa0e261335a7606a6.jpg b/docs/0.21.3/img/f7129cf20abc58eaa0e261335a7606a6.jpg deleted file mode 100644 index 81bdba458d473caf55d748c6022fbce49d278865..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f7129cf20abc58eaa0e261335a7606a6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f72a2f9f160a11abc8568b72386776fe.jpg b/docs/0.21.3/img/f72a2f9f160a11abc8568b72386776fe.jpg deleted file mode 100644 index 2a62280281fa8a26313ac89d9aeebff848601f0f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f72a2f9f160a11abc8568b72386776fe.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f7dd5b16c1d8c3e278e9a1fa7f49dcd2.jpg b/docs/0.21.3/img/f7dd5b16c1d8c3e278e9a1fa7f49dcd2.jpg deleted file mode 100644 index 92a3aee8c3f8d821cbfb3773eac5da87a59ad681..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f7dd5b16c1d8c3e278e9a1fa7f49dcd2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f7ee2b868860148ea59bc617d8ba7bb1.jpg b/docs/0.21.3/img/f7ee2b868860148ea59bc617d8ba7bb1.jpg deleted file mode 100644 index c3534e8f33ae8b9b37474e32467722951f89ab15..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f7ee2b868860148ea59bc617d8ba7bb1.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f7f0b321634c8d80ceacdc75ee3c68b6.jpg b/docs/0.21.3/img/f7f0b321634c8d80ceacdc75ee3c68b6.jpg deleted file mode 100644 index 063ab65f8268bd3e877cd0042680b5bbc54b6bf3..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f7f0b321634c8d80ceacdc75ee3c68b6.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f8d66dde73704b8821db5322592a0cc2.jpg b/docs/0.21.3/img/f8d66dde73704b8821db5322592a0cc2.jpg deleted file mode 100644 index 82efa1f1000e658706c84ad413ef1f9ecbe80fea..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f8d66dde73704b8821db5322592a0cc2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f8e0c6c9a82bcbf369e2d0b7fc7aba8d.jpg b/docs/0.21.3/img/f8e0c6c9a82bcbf369e2d0b7fc7aba8d.jpg deleted file mode 100644 index 6af7a23de34ccd31c04028a4ddd9592203b14c28..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f8e0c6c9a82bcbf369e2d0b7fc7aba8d.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f8f807bd22e1f9f3c4271c78c8cb33fa.jpg b/docs/0.21.3/img/f8f807bd22e1f9f3c4271c78c8cb33fa.jpg deleted file mode 100644 index 9564c108bfc0d0f83a3da4531a1e03ac68462b0d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f8f807bd22e1f9f3c4271c78c8cb33fa.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f92e6fadff74949dcf9c70e40d1a7619.jpg b/docs/0.21.3/img/f92e6fadff74949dcf9c70e40d1a7619.jpg deleted file mode 100644 index 0faa54bbca19d750a6cbf08ce26d069f28bebfd2..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f92e6fadff74949dcf9c70e40d1a7619.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f93871977da52a6d11045d57c3e18728.jpg b/docs/0.21.3/img/f93871977da52a6d11045d57c3e18728.jpg deleted file mode 100644 index f411cdfc973491474602a574907a115e9a303974..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f93871977da52a6d11045d57c3e18728.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f94e86205401e8da73308b60aa64b05b.jpg b/docs/0.21.3/img/f94e86205401e8da73308b60aa64b05b.jpg deleted file mode 100644 index 2cddc84f37f1ba78e7839b3543ad052948dc6ddf..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f94e86205401e8da73308b60aa64b05b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f996477bc9806499e6b6a1ea4d9ae8eb.jpg b/docs/0.21.3/img/f996477bc9806499e6b6a1ea4d9ae8eb.jpg deleted file mode 100644 index 4e33ea77acef97c9708e7dd32f2ae25a6744b227..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f996477bc9806499e6b6a1ea4d9ae8eb.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f9d2fc91f381e1772999a738d3c8c32b.jpg b/docs/0.21.3/img/f9d2fc91f381e1772999a738d3c8c32b.jpg deleted file mode 100644 index 87c7e57910e6ff3e4ad87c56bcc0930effaba917..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f9d2fc91f381e1772999a738d3c8c32b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/f9e7fc3940e2875bf542aeda657d0718.jpg b/docs/0.21.3/img/f9e7fc3940e2875bf542aeda657d0718.jpg deleted file mode 100644 index cd71fb6c1ed4b7f0d193158c70abdab360272450..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/f9e7fc3940e2875bf542aeda657d0718.jpg and /dev/null differ diff --git a/docs/0.21.3/img/fa1895bee67b8c643cbaab1e8da8620f.jpg b/docs/0.21.3/img/fa1895bee67b8c643cbaab1e8da8620f.jpg deleted file mode 100644 index cd6f18f18a6ef1614e00c4e483c270163aca4020..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/fa1895bee67b8c643cbaab1e8da8620f.jpg and /dev/null differ diff --git a/docs/0.21.3/img/fa48fa696e5242bb078fb786e6dc24c3.jpg b/docs/0.21.3/img/fa48fa696e5242bb078fb786e6dc24c3.jpg deleted file mode 100644 index d6d1566d7cbad156cf57173f0efcacbc6fd3ae8d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/fa48fa696e5242bb078fb786e6dc24c3.jpg and /dev/null differ diff --git a/docs/0.21.3/img/fae30a190cd9e5f5d06f534d956df5f5.jpg b/docs/0.21.3/img/fae30a190cd9e5f5d06f534d956df5f5.jpg deleted file mode 100644 index 0279eaf241f958725e6b3eb0ba3c6ec57f517180..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/fae30a190cd9e5f5d06f534d956df5f5.jpg and /dev/null differ diff --git a/docs/0.21.3/img/fb8da9a6dd6e45015b629002d748d9b1.jpg b/docs/0.21.3/img/fb8da9a6dd6e45015b629002d748d9b1.jpg deleted file mode 100644 index c35dfce71c86a5473d56a3acf3417403fc05a5fe..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/fb8da9a6dd6e45015b629002d748d9b1.jpg and /dev/null differ diff --git a/docs/0.21.3/img/fb9cbfd2ff15ac51a36902f0a6037c28.jpg b/docs/0.21.3/img/fb9cbfd2ff15ac51a36902f0a6037c28.jpg deleted file mode 100644 index 0c00eac9034493b051d972e116e3facd850756db..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/fb9cbfd2ff15ac51a36902f0a6037c28.jpg and /dev/null differ diff --git a/docs/0.21.3/img/fc080793a40b71dc553fe8966ad7516a.jpg b/docs/0.21.3/img/fc080793a40b71dc553fe8966ad7516a.jpg deleted file mode 100644 index b234a0547c1cd50de97ea613ea8552ef4acb080d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/fc080793a40b71dc553fe8966ad7516a.jpg and /dev/null differ diff --git a/docs/0.21.3/img/fc333385a9012524b39bc23303de30d4.jpg b/docs/0.21.3/img/fc333385a9012524b39bc23303de30d4.jpg deleted file mode 100644 index 329fd6b16ef7f0ae1b24018838a1ce4937994b58..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/fc333385a9012524b39bc23303de30d4.jpg and /dev/null differ diff --git a/docs/0.21.3/img/fcf31635bf1c46833111df71ab92b68e.jpg b/docs/0.21.3/img/fcf31635bf1c46833111df71ab92b68e.jpg deleted file mode 100644 index 329fd6b16ef7f0ae1b24018838a1ce4937994b58..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/fcf31635bf1c46833111df71ab92b68e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/fd6f65ce4fb7491d7628d1ce576c19d4.jpg b/docs/0.21.3/img/fd6f65ce4fb7491d7628d1ce576c19d4.jpg deleted file mode 100644 index 6eb04bbcfbc2e22ee3c7f921f4b0da0c78275d09..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/fd6f65ce4fb7491d7628d1ce576c19d4.jpg and /dev/null differ diff --git a/docs/0.21.3/img/fd785ede0569b8be0bea11bc8eecd583.jpg b/docs/0.21.3/img/fd785ede0569b8be0bea11bc8eecd583.jpg deleted file mode 100644 index 0f0a3ff306646e0369fe392175d442bf06c55590..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/fd785ede0569b8be0bea11bc8eecd583.jpg and /dev/null differ diff --git a/docs/0.21.3/img/fde3a2898bfc0ce1823058fe7b706b9e.jpg b/docs/0.21.3/img/fde3a2898bfc0ce1823058fe7b706b9e.jpg deleted file mode 100644 index be99dd8f95b273033506d8f89bc8eebd6bc08f6d..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/fde3a2898bfc0ce1823058fe7b706b9e.jpg and /dev/null differ diff --git a/docs/0.21.3/img/fdff527ccbac4fd87c2ca9c4bed5fce2.jpg b/docs/0.21.3/img/fdff527ccbac4fd87c2ca9c4bed5fce2.jpg deleted file mode 100644 index 11c6404b68037d0f380026d4613dba80925fbad2..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/fdff527ccbac4fd87c2ca9c4bed5fce2.jpg and /dev/null differ diff --git a/docs/0.21.3/img/fe1d79339349f9b6263e123094ffce7b.jpg b/docs/0.21.3/img/fe1d79339349f9b6263e123094ffce7b.jpg deleted file mode 100644 index e4897806127806ca435578375a41de303784c745..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/fe1d79339349f9b6263e123094ffce7b.jpg and /dev/null differ diff --git a/docs/0.21.3/img/fe5ed835e0d3407e3f2d694d8bc049a1.jpg b/docs/0.21.3/img/fe5ed835e0d3407e3f2d694d8bc049a1.jpg deleted file mode 100644 index 9eaa763e9647475e78de6d4e0ea4ee9b19f4a44f..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/fe5ed835e0d3407e3f2d694d8bc049a1.jpg and /dev/null differ diff --git a/docs/0.21.3/img/fe62193b4391c9f60e373f03623696ac.jpg b/docs/0.21.3/img/fe62193b4391c9f60e373f03623696ac.jpg deleted file mode 100644 index 525d382cb62a15d9c7a73f4e04da5d1d405f9b89..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/fe62193b4391c9f60e373f03623696ac.jpg and /dev/null differ diff --git a/docs/0.21.3/img/fe9e5bb155154914f761d6497915e9cb.jpg b/docs/0.21.3/img/fe9e5bb155154914f761d6497915e9cb.jpg deleted file mode 100644 index 84c0f3ecde283af02d3159908799ed757969d197..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/fe9e5bb155154914f761d6497915e9cb.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ff5428ca3c50ed06f5162ad194377188.jpg b/docs/0.21.3/img/ff5428ca3c50ed06f5162ad194377188.jpg deleted file mode 100644 index fc84749dd1574c6b3b71863b046cf98d5dea2ade..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ff5428ca3c50ed06f5162ad194377188.jpg and /dev/null differ diff --git a/docs/0.21.3/img/ff5e98366afa13070d3b410c55a80db1.jpg b/docs/0.21.3/img/ff5e98366afa13070d3b410c55a80db1.jpg deleted file mode 100644 index 1bc0fd6da78661928141c6754486b3e8ba26892b..0000000000000000000000000000000000000000 Binary files a/docs/0.21.3/img/ff5e98366afa13070d3b410c55a80db1.jpg and /dev/null differ diff --git a/auto_examples/Linear-Models/plot_document_classification_20newsgroups.md b/docs/examples/Generalized_Linear_Models/plot_document_classification_20newsgroups.md similarity index 100% rename from auto_examples/Linear-Models/plot_document_classification_20newsgroups.md rename to docs/examples/Generalized_Linear_Models/plot_document_classification_20newsgroups.md diff --git a/auto_examples/Linear-Models/plot_lasso_and_elasticnet.md b/docs/examples/Generalized_Linear_Models/plot_lasso_and_elasticnet.md similarity index 100% rename from auto_examples/Linear-Models/plot_lasso_and_elasticnet.md rename to docs/examples/Generalized_Linear_Models/plot_lasso_and_elasticnet.md diff --git a/auto_examples/Linear-Models/plot_lasso_coordinate_descent_path.md b/docs/examples/Generalized_Linear_Models/plot_lasso_coordinate_descent_path.md similarity index 100% rename from auto_examples/Linear-Models/plot_lasso_coordinate_descent_path.md rename to docs/examples/Generalized_Linear_Models/plot_lasso_coordinate_descent_path.md diff --git a/auto_examples/Linear-Models/plot_lasso_model_selection.md b/docs/examples/Generalized_Linear_Models/plot_lasso_model_selection.md similarity index 100% rename from auto_examples/Linear-Models/plot_lasso_model_selection.md rename to docs/examples/Generalized_Linear_Models/plot_lasso_model_selection.md diff --git a/auto_examples/Linear-Models/plot_multi_task_lasso_support.md b/docs/examples/Generalized_Linear_Models/plot_multi_task_lasso_support.md similarity index 100% rename from auto_examples/Linear-Models/plot_multi_task_lasso_support.md rename to docs/examples/Generalized_Linear_Models/plot_multi_task_lasso_support.md diff --git a/auto_examples/Linear-Models/plot_ols.md b/docs/examples/Generalized_Linear_Models/plot_ols.md similarity index 100% rename from auto_examples/Linear-Models/plot_ols.md rename to docs/examples/Generalized_Linear_Models/plot_ols.md diff --git a/auto_examples/Linear-Models/plot_ridge_path.md b/docs/examples/Generalized_Linear_Models/plot_ridge_path.md similarity index 100% rename from auto_examples/Linear-Models/plot_ridge_path.md rename to docs/examples/Generalized_Linear_Models/plot_ridge_path.md diff --git a/auto_examples/Linear-Models/plot_tomography_l1_reconstruction.md b/docs/examples/Generalized_Linear_Models/plot_tomography_l1_reconstruction.md similarity index 100% rename from auto_examples/Linear-Models/plot_tomography_l1_reconstruction.md rename to docs/examples/Generalized_Linear_Models/plot_tomography_l1_reconstruction.md diff --git a/docs/examples/README.md b/docs/examples/README.md new file mode 100644 index 0000000000000000000000000000000000000000..5d846e7f31684776fa0add9c0b7e30dad3482e39 --- /dev/null +++ b/docs/examples/README.md @@ -0,0 +1,316 @@ +# 例子 + +英文地址: + +## 其他例子 + +scikit学习的其他和入门示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_changed_only_pprint_parameter_thumb.png)
[紧凑的估计表示](https://scikit-learn.org/stable/auto_examples/plot_changed_only_pprint_parameter.html#sphx-glr-auto-examples-plot-changed-only-pprint-parameter-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id2) | ![](img/sphx_glr_plot_roc_curve_visualization_api_thumb.png)
[带有可视化API的ROC曲线](https://scikit-learn.org/stable/auto_examples/plot_roc_curve_visualization_api.html#sphx-glr-auto-examples-plot-roc-curve-visualization-api-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id3) | ![](img/sphx_glr_plot_isotonic_regression_thumb.png)
[序回归](https://scikit-learn.org/stable/auto_examples/plot_isotonic_regression.html#sphx-glr-auto-examples-plot-isotonic-regression-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id4) | ![](img/sphx_glr_plot_partial_dependence_visualization_api_thumb.png)
[先进的绘图具有部分依赖](https://scikit-learn.org/stable/auto_examples/plot_partial_dependence_visualization_api.html#sphx-glr-auto-examples-plot-partial-dependence-visualization-api-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id5) | +| ![](img/sphx_glr_plot_multioutput_face_completion_thumb.png)
[使用多输出估计器完成人脸](https://scikit-learn.org/stable/auto_examples/plot_multioutput_face_completion.html#sphx-glr-auto-examples-plot-multioutput-face-completion-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id6) | ![](img/sphx_glr_plot_multilabel_thumb.png)
[多标签分类](https://scikit-learn.org/stable/auto_examples/plot_multilabel.html#sphx-glr-auto-examples-plot-multilabel-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id7) | ![](img/sphx_glr_plot_anomaly_comparison_thumb.png)
[比较异常检测算法以对玩具数据集进行异常检测](https://scikit-learn.org/stable/auto_examples/plot_anomaly_comparison.html#sphx-glr-auto-examples-plot-anomaly-comparison-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id8) | ![](img/sphx_glr_plot_johnson_lindenstrauss_bound_thumb.png)
[具有随机投影嵌入的Johnson-Lindenstrauss边界](https://scikit-learn.org/stable/auto_examples/plot_johnson_lindenstrauss_bound.html#sphx-glr-auto-examples-plot-johnson-lindenstrauss-bound-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id9) | +| ![](img/sphx_glr_plot_kernel_ridge_regression_thumb.png)
[内核岭回归和SVR的比较](https://scikit-learn.org/stable/auto_examples/plot_kernel_ridge_regression.html#sphx-glr-auto-examples-plot-kernel-ridge-regression-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id10) | ![](img/sphx_glr_plot_kernel_approximation_thumb.png)
[RBF内核的显式特征图逼近](https://scikit-learn.org/stable/auto_examples/plot_kernel_approximation.html#sphx-glr-auto-examples-plot-kernel-approximation-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id11) | + + +## 集群化 + +有关`sklearn.cluster.bicluster`模块的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_spectral_coclustering_thumb.png)
[频谱共聚算法演示](https://scikit-learn.org/stable/auto_examples/bicluster/plot_spectral_coclustering.html#sphx-glr-auto-examples-bicluster-plot-spectral-coclustering-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id12) | ![](img/sphx_glr_plot_spectral_biclustering_thumb.png)
[频谱二值化算法的演示](https://scikit-learn.org/stable/auto_examples/bicluster/plot_spectral_biclustering.html#sphx-glr-auto-examples-bicluster-plot-spectral-biclustering-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id13) | ![](img/sphx_glr_plot_bicluster_newsgroups_thumb.png)
[使用频谱共同聚类算法对文档进行聚类](https://scikit-learn.org/stable/auto_examples/bicluster/plot_bicluster_newsgroups.html#sphx-glr-auto-examples-bicluster-plot-bicluster-newsgroups-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id14) | + + +## 校准 + +举例说明了对分类器的预测概率进行校准的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_compare_calibration_thumb.png)
[分类器校准的比较](https://scikit-learn.org/stable/auto_examples/calibration/plot_compare_calibration.html#sphx-glr-auto-examples-calibration-plot-compare-calibration-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id15) | ![](img/sphx_glr_plot_calibration_curve_thumb.png)
[概率校准曲线](https://scikit-learn.org/stable/auto_examples/calibration/plot_calibration_curve.html#sphx-glr-auto-examples-calibration-plot-calibration-curve-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id16) | ![](img/sphx_glr_plot_calibration_thumb.png)
[分类器的概率校准](https://scikit-learn.org/stable/auto_examples/calibration/plot_calibration.html#sphx-glr-auto-examples-calibration-plot-calibration-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id17) | ![](img/sphx_glr_plot_calibration_multiclass_thumb.png)
[3级分类的概率校准](https://scikit-learn.org/stable/auto_examples/calibration/plot_calibration_multiclass.html#sphx-glr-auto-examples-calibration-plot-calibration-multiclass-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id18) | + + +## 分类 + +有关分类算法的一般示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_lda_thumb.png)
[分类法线和收缩线线性判别分析](https://scikit-learn.org/stable/auto_examples/classification/plot_lda.html#sphx-glr-auto-examples-classification-plot-lda-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id19) | ![](img/sphx_glr_plot_digits_classification_thumb.png)
[识别手写数字](https://scikit-learn.org/stable/auto_examples/classification/plot_digits_classification.html#sphx-glr-auto-examples-classification-plot-digits-classification-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id20) | ![](img/sphx_glr_plot_classification_probability_thumb.png)
[情节分类概率](https://scikit-learn.org/stable/auto_examples/classification/plot_classification_probability.html#sphx-glr-auto-examples-classification-plot-classification-probability-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id21) | ![](img/sphx_glr_plot_classifier_comparison_thumb.png)
[分类器比较](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html#sphx-glr-auto-examples-classification-plot-classifier-comparison-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id22) | +| ![](img/sphx_glr_plot_lda_qda_thumb.png)
[线性和二次判别分析与协方差椭球](https://scikit-learn.org/stable/auto_examples/classification/plot_lda_qda.html#sphx-glr-auto-examples-classification-plot-lda-qda-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id23) | + + +## 集群 + +有关[`sklearn.cluster`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.cluster "sklearn.cluster")模块的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_agglomerative_dendrogram_thumb.png)
[绘制层次聚类树状图](https://scikit-learn.org/stable/auto_examples/cluster/plot_agglomerative_dendrogram.html#sphx-glr-auto-examples-cluster-plot-agglomerative-dendrogram-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id24) | ![](img/sphx_glr_plot_digits_agglomeration_thumb.png)
[功能集聚](https://scikit-learn.org/stable/auto_examples/cluster/plot_digits_agglomeration.html#sphx-glr-auto-examples-cluster-plot-digits-agglomeration-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id25) | ![](img/sphx_glr_plot_mean_shift_thumb.png)
[均值漂移聚类算法的演示](https://scikit-learn.org/stable/auto_examples/cluster/plot_mean_shift.html#sphx-glr-auto-examples-cluster-plot-mean-shift-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id26) | ![](img/sphx_glr_plot_kmeans_assumptions_thumb.png)
[的k均值假设示范](https://scikit-learn.org/stable/auto_examples/cluster/plot_kmeans_assumptions.html#sphx-glr-auto-examples-cluster-plot-kmeans-assumptions-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id27) | +| ![](img/sphx_glr_plot_dict_face_patches_thumb.png)
[在线学习面部表情字典](https://scikit-learn.org/stable/auto_examples/cluster/plot_dict_face_patches.html#sphx-glr-auto-examples-cluster-plot-dict-face-patches-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id28) | ![](img/sphx_glr_plot_face_compress_thumb.png)
[矢量量化示例](https://scikit-learn.org/stable/auto_examples/cluster/plot_face_compress.html#sphx-glr-auto-examples-cluster-plot-face-compress-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id29) | ![](img/sphx_glr_plot_affinity_propagation_thumb.png)
[相似性传播聚类算法演示](https://scikit-learn.org/stable/auto_examples/cluster/plot_affinity_propagation.html#sphx-glr-auto-examples-cluster-plot-affinity-propagation-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id30) | ![](img/sphx_glr_plot_agglomerative_clustering_thumb.png)
[有和没有结构的聚集聚类](https://scikit-learn.org/stable/auto_examples/cluster/plot_agglomerative_clustering.html#sphx-glr-auto-examples-cluster-plot-agglomerative-clustering-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id31) | +| ![](img/sphx_glr_plot_coin_segmentation_thumb.png)
[分割区域中希腊硬币的图片](https://scikit-learn.org/stable/auto_examples/cluster/plot_coin_segmentation.html#sphx-glr-auto-examples-cluster-plot-coin-segmentation-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id32) | ![](img/sphx_glr_plot_digits_linkage_thumb.png)
[二维数字嵌入中的各种聚集聚类](https://scikit-learn.org/stable/auto_examples/cluster/plot_digits_linkage.html#sphx-glr-auto-examples-cluster-plot-digits-linkage-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id33) | ![](img/sphx_glr_plot_cluster_iris_thumb.png)
[K-means聚类](https://scikit-learn.org/stable/auto_examples/cluster/plot_cluster_iris.html#sphx-glr-auto-examples-cluster-plot-cluster-iris-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id34) | ![](img/sphx_glr_plot_segmentation_toy_thumb.png)
[光谱聚类用于图像分割](https://scikit-learn.org/stable/auto_examples/cluster/plot_segmentation_toy.html#sphx-glr-auto-examples-cluster-plot-segmentation-toy-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id35) | +| ![](img/sphx_glr_plot_coin_ward_segmentation_thumb.png)
[硬币图像上的结构化Ward层次聚类演示](https://scikit-learn.org/stable/auto_examples/cluster/plot_coin_ward_segmentation.html#sphx-glr-auto-examples-cluster-plot-coin-ward-segmentation-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id36) | ![](img/sphx_glr_plot_dbscan_thumb.png)
[DBSCAN聚类算法演示](https://scikit-learn.org/stable/auto_examples/cluster/plot_dbscan.html#sphx-glr-auto-examples-cluster-plot-dbscan-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id37) | ![](img/sphx_glr_plot_color_quantization_thumb.png)
[使用K均值的颜色量化](https://scikit-learn.org/stable/auto_examples/cluster/plot_color_quantization.html#sphx-glr-auto-examples-cluster-plot-color-quantization-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id38) | ![](img/sphx_glr_plot_ward_structured_vs_unstructured_thumb.png)
[分层聚类:结构化与非结构化病房](https://scikit-learn.org/stable/auto_examples/cluster/plot_ward_structured_vs_unstructured.html#sphx-glr-auto-examples-cluster-plot-ward-structured-vs-unstructured-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id39) | +| ![](img/sphx_glr_plot_agglomerative_clustering_metrics_thumb.png)
[具有不同指标的聚集集群](https://scikit-learn.org/stable/auto_examples/cluster/plot_agglomerative_clustering_metrics.html#sphx-glr-auto-examples-cluster-plot-agglomerative-clustering-metrics-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id40) | ![](img/sphx_glr_plot_inductive_clustering_thumb.png)
[归纳聚类](https://scikit-learn.org/stable/auto_examples/cluster/plot_inductive_clustering.html#sphx-glr-auto-examples-cluster-plot-inductive-clustering-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id41) | ![](img/sphx_glr_plot_optics_thumb.png)
[OPTICS聚类算法演示](https://scikit-learn.org/stable/auto_examples/cluster/plot_optics.html#sphx-glr-auto-examples-cluster-plot-optics-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id42) | ![](img/sphx_glr_plot_birch_vs_minibatchkmeans_thumb.png)
[比较桦木和MiniBatchKMeans](https://scikit-learn.org/stable/auto_examples/cluster/plot_birch_vs_minibatchkmeans.html#sphx-glr-auto-examples-cluster-plot-birch-vs-minibatchkmeans-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id43) | +| ![](img/sphx_glr_plot_kmeans_stability_low_dim_dense_thumb.png)
[k均值初始化影响的实证评估](https://scikit-learn.org/stable/auto_examples/cluster/plot_kmeans_stability_low_dim_dense.html#sphx-glr-auto-examples-cluster-plot-kmeans-stability-low-dim-dense-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id44) | ![](img/sphx_glr_plot_adjusted_for_chance_measures_thumb.png)
[集群绩效评估中机会的调整](https://scikit-learn.org/stable/auto_examples/cluster/plot_adjusted_for_chance_measures.html#sphx-glr-auto-examples-cluster-plot-adjusted-for-chance-measures-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id45) | ![](img/sphx_glr_plot_mini_batch_kmeans_thumb.png)
[K-Means和MiniBatchKMeans聚类算法的比较](https://scikit-learn.org/stable/auto_examples/cluster/plot_mini_batch_kmeans.html#sphx-glr-auto-examples-cluster-plot-mini-batch-kmeans-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id46) | ![](img/sphx_glr_plot_feature_agglomeration_vs_univariate_selection_thumb.png)
[特征集聚与单变量选择](https://scikit-learn.org/stable/auto_examples/cluster/plot_feature_agglomeration_vs_univariate_selection.html#sphx-glr-auto-examples-cluster-plot-feature-agglomeration-vs-univariate-selection-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id47) | +| ![](img/sphx_glr_plot_kmeans_digits_thumb.png)
[手写数字数据上的K-Means聚类演示](https://scikit-learn.org/stable/auto_examples/cluster/plot_kmeans_digits.html#sphx-glr-auto-examples-cluster-plot-kmeans-digits-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id48) | ![](img/sphx_glr_plot_linkage_comparison_thumb.png)
[比较玩具数据集上的不同层次链接方法](https://scikit-learn.org/stable/auto_examples/cluster/plot_linkage_comparison.html#sphx-glr-auto-examples-cluster-plot-linkage-comparison-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id49) | ![](img/sphx_glr_plot_kmeans_silhouette_analysis_thumb.png)
[在KMeans聚类上通过轮廓分析选择聚类数量](https://scikit-learn.org/stable/auto_examples/cluster/plot_kmeans_silhouette_analysis.html#sphx-glr-auto-examples-cluster-plot-kmeans-silhouette-analysis-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id50) | ![](img/sphx_glr_plot_cluster_comparison_thumb.png)
[比较玩具数据集上的不同聚类算法](https://scikit-learn.org/stable/auto_examples/cluster/plot_cluster_comparison.html#sphx-glr-auto-examples-cluster-plot-cluster-comparison-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id51) | + + +## 协方差估计 + +有关[`sklearn.covariance`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.covariance)模块的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_lw_vs_oas_thumb.png)
[Ledoit-Wolf与OAS估计](https://scikit-learn.org/stable/auto_examples/covariance/plot_lw_vs_oas.html#sphx-glr-auto-examples-covariance-plot-lw-vs-oas-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id52) | ![](img/sphx_glr_plot_sparse_cov_thumb.png)
[稀疏逆协方差估计](https://scikit-learn.org/stable/auto_examples/covariance/plot_sparse_cov.html#sphx-glr-auto-examples-covariance-plot-sparse-cov-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id53) | ![](img/sphx_glr_plot_covariance_estimation_thumb.png)
[收缩协方差估计:LedoitWolf与OAS和最大似然性](https://scikit-learn.org/stable/auto_examples/covariance/plot_covariance_estimation.html#sphx-glr-auto-examples-covariance-plot-covariance-estimation-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id54) | ![](img/sphx_glr_plot_mahalanobis_distances_thumb.png)
[健壮的协方差估计和马氏距离相关性](https://scikit-learn.org/stable/auto_examples/covariance/plot_mahalanobis_distances.html#sphx-glr-auto-examples-covariance-plot-mahalanobis-distances-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id55) | +| ![](img/sphx_glr_plot_robust_vs_empirical_covariance_thumb.png)
[乐百氏VS实证协方差估计](https://scikit-learn.org/stable/auto_examples/covariance/plot_robust_vs_empirical_covariance.html#sphx-glr-auto-examples-covariance-plot-robust-vs-empirical-covariance-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id56) | + + +## 交叉分解 + +有关[`sklearn.cross_decomposition`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.cross_decomposition "sklearn.cross_decomposition")模块的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_compare_cross_decomposition_thumb.png)
[比较交叉分解方法](https://scikit-learn.org/stable/auto_examples/cross_decomposition/plot_compare_cross_decomposition.html#sphx-glr-auto-examples-cross-decomposition-plot-compare-cross-decomposition-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id57) | + + +## 数据集的例子 + +有关[`sklearn.datasets`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.datasets "sklearn.datasets")模块的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_digits_last_image_thumb.png)
[Digit数据集](https://scikit-learn.org/stable/auto_examples/datasets/plot_digits_last_image.html#sphx-glr-auto-examples-datasets-plot-digits-last-image-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id58) | ![](img/sphx_glr_plot_iris_dataset_thumb.png)
[虹膜数据集](https://scikit-learn.org/stable/auto_examples/datasets/plot_iris_dataset.html#sphx-glr-auto-examples-datasets-plot-iris-dataset-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id59) | ![](img/sphx_glr_plot_random_dataset_thumb.png)
[绘制随机生成的分类数据集](https://scikit-learn.org/stable/auto_examples/datasets/plot_random_dataset.html#sphx-glr-auto-examples-datasets-plot-random-dataset-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id60) | ![](img/sphx_glr_plot_random_multilabel_dataset_thumb.png)
[绘制随机生成的多标签数据集](https://scikit-learn.org/stable/auto_examples/datasets/plot_random_multilabel_dataset.html#sphx-glr-auto-examples-datasets-plot-random-multilabel-dataset-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id61) | + + +## 决策树 + +有关[`sklearn.tree`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.tree "sklearn.tree")模块的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_tree_regression_thumb.png)
[决策树回归](https://scikit-learn.org/stable/auto_examples/tree/plot_tree_regression.html#sphx-glr-auto-examples-tree-plot-tree-regression-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id62) | ![](img/sphx_glr_plot_tree_regression_multioutput_thumb.png)
[多路输出决策树回归](https://scikit-learn.org/stable/auto_examples/tree/plot_tree_regression_multioutput.html#sphx-glr-auto-examples-tree-plot-tree-regression-multioutput-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id63) | ![](img/sphx_glr_plot_iris_dtc_thumb.png)
[在虹膜数据集上绘制决策树的决策面](https://scikit-learn.org/stable/auto_examples/tree/plot_iris_dtc.html#sphx-glr-auto-examples-tree-plot-iris-dtc-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id64) | ![](img/sphx_glr_plot_cost_complexity_pruning_thumb.png)
[使用成本复杂度修剪来修剪修剪决策树](https://scikit-learn.org/stable/auto_examples/tree/plot_cost_complexity_pruning.html#sphx-glr-auto-examples-tree-plot-cost-complexity-pruning-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id65) | +| ![](img/sphx_glr_plot_unveil_tree_structure_thumb.png)
[了解决策树结构](https://scikit-learn.org/stable/auto_examples/tree/plot_unveil_tree_structure.html#sphx-glr-auto-examples-tree-plot-unveil-tree-structure-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id66) | + + +## 分解 + +有关[`sklearn.decomposition`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.decomposition "sklearn。分解")模块的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_beta_divergence_thumb.png)
[β-发散损失函数](https://scikit-learn.org/stable/auto_examples/decomposition/plot_beta_divergence.html#sphx-glr-auto-examples-decomposition-plot-beta-divergence-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id67) | ![](img/sphx_glr_plot_pca_iris_thumb.png)
[具有虹膜数据集的PCA示例](https://scikit-learn.org/stable/auto_examples/decomposition/plot_pca_iris.html#sphx-glr-auto-examples-decomposition-plot-pca-iris-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id68) | ![](img/sphx_glr_plot_incremental_pca_thumb.png)
[增量](https://scikit-learn.org/stable/auto_examples/decomposition/plot_incremental_pca.html#sphx-glr-auto-examples-decomposition-plot-incremental-pca-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id69) | ![](img/sphx_glr_plot_pca_vs_lda_thumb.png)
[Iris数据集的LDA和PCA二维投影的比较](https://scikit-learn.org/stable/auto_examples/decomposition/plot_pca_vs_lda.html#sphx-glr-auto-examples-decomposition-plot-pca-vs-lda-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id70) | +| ![](img/sphx_glr_plot_ica_blind_source_separation_thumb.png)
[使用FastICA进行盲源分离](https://scikit-learn.org/stable/auto_examples/decomposition/plot_ica_blind_source_separation.html#sphx-glr-auto-examples-decomposition-plot-ica-blind-source-separation-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id71) | ![](img/sphx_glr_plot_pca_3d_thumb.png)
[主成分分析(PCA)](https://scikit-learn.org/stable/auto_examples/decomposition/plot_pca_3d.html#sphx-glr-auto-examples-decomposition-plot-pca-3d-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id72) | ![](img/sphx_glr_plot_ica_vs_pca_thumb.png)
[2D点云上的](https://scikit-learn.org/stable/auto_examples/decomposition/plot_ica_vs_pca.html#sphx-glr-auto-examples-decomposition-plot-ica-vs-pca-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id73) | ![](img/sphx_glr_plot_kernel_pca_thumb.png)
[内核](https://scikit-learn.org/stable/auto_examples/decomposition/plot_kernel_pca.html#sphx-glr-auto-examples-decomposition-plot-kernel-pca-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id74) | +| ![](img/sphx_glr_plot_pca_vs_fa_model_selection_thumb.png)
[概率PCA和因子分析(FA)进行模型选择](https://scikit-learn.org/stable/auto_examples/decomposition/plot_pca_vs_fa_model_selection.html#sphx-glr-auto-examples-decomposition-plot-pca-vs-fa-model-selection-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id75) | ![](img/sphx_glr_plot_sparse_coding_thumb.png)
[使用预先计算的字典进行稀疏编码](https://scikit-learn.org/stable/auto_examples/decomposition/plot_sparse_coding.html#sphx-glr-auto-examples-decomposition-plot-sparse-coding-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id76) | ![](img/sphx_glr_plot_image_denoising_thumb.png)
[图片使用字典学习去噪](https://scikit-learn.org/stable/auto_examples/decomposition/plot_image_denoising.html#sphx-glr-auto-examples-decomposition-plot-image-denoising-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id77) | ![](img/sphx_glr_plot_faces_decomposition_thumb.png)
[Faces数据集分解](https://scikit-learn.org/stable/auto_examples/decomposition/plot_faces_decomposition.html#sphx-glr-auto-examples-decomposition-plot-faces-decomposition-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id78) | + + +## 集成方法 + +有关[`sklearn.ensemble`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.ensemble "sklearn.ensemble")模块的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_forest_importances_faces_thumb.png)
[并行树木森林的像素重要性](https://scikit-learn.org/stable/auto_examples/ensemble/plot_forest_importances_faces.html#sphx-glr-auto-examples-ensemble-plot-forest-importances-faces-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id79) | ![](img/sphx_glr_plot_adaboost_regression_thumb.png)
[使用AdaBoost进行决策树回归](https://scikit-learn.org/stable/auto_examples/ensemble/plot_adaboost_regression.html#sphx-glr-auto-examples-ensemble-plot-adaboost-regression-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id80) | ![](img/sphx_glr_plot_voting_regressor_thumb.png)
[绘制个人和投票回归预测](https://scikit-learn.org/stable/auto_examples/ensemble/plot_voting_regressor.html#sphx-glr-auto-examples-ensemble-plot-voting-regressor-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id81) | ![](img/sphx_glr_plot_forest_importances_thumb.png)
[树木森林的功能重要性](https://scikit-learn.org/stable/auto_examples/ensemble/plot_forest_importances.html#sphx-glr-auto-examples-ensemble-plot-forest-importances-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id82) | +| ![](img/sphx_glr_plot_isolation_forest_thumb.png)
[IsolationForest示例](https://scikit-learn.org/stable/auto_examples/ensemble/plot_isolation_forest.html#sphx-glr-auto-examples-ensemble-plot-isolation-forest-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id83) | ![](img/sphx_glr_plot_voting_decision_regions_thumb.png)
[绘制VotingClassifier的决策边界](https://scikit-learn.org/stable/auto_examples/ensemble/plot_voting_decision_regions.html#sphx-glr-auto-examples-ensemble-plot-voting-decision-regions-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id84) | ![](img/sphx_glr_plot_random_forest_regression_multioutput_thumb.png)
[比较随机森林和多输出元估计器](https://scikit-learn.org/stable/auto_examples/ensemble/plot_random_forest_regression_multioutput.html#sphx-glr-auto-examples-ensemble-plot-random-forest-regression-multioutput-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id85) | ![](img/sphx_glr_plot_gradient_boosting_quantile_thumb.png)
[梯度提升回归的预测间隔](https://scikit-learn.org/stable/auto_examples/ensemble/plot_gradient_boosting_quantile.html#sphx-glr-auto-examples-ensemble-plot-gradient-boosting-quantile-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id86) | +| ![](img/sphx_glr_plot_gradient_boosting_regularization_thumb.png)
[梯度提升正则化](https://scikit-learn.org/stable/auto_examples/ensemble/plot_gradient_boosting_regularization.html#sphx-glr-auto-examples-ensemble-plot-gradient-boosting-regularization-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id87) | ![](img/sphx_glr_plot_voting_probas_thumb.png)
[绘制由VotingClassifier计算的类概率](https://scikit-learn.org/stable/auto_examples/ensemble/plot_voting_probas.html#sphx-glr-auto-examples-ensemble-plot-voting-probas-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id88) | ![](img/sphx_glr_plot_gradient_boosting_regression_thumb.png)
[梯度推进回归](https://scikit-learn.org/stable/auto_examples/ensemble/plot_gradient_boosting_regression.html#sphx-glr-auto-examples-ensemble-plot-gradient-boosting-regression-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id89) | ![](img/sphx_glr_plot_ensemble_oob_thumb.png)
[随机森林的OOB错误](https://scikit-learn.org/stable/auto_examples/ensemble/plot_ensemble_oob.html#sphx-glr-auto-examples-ensemble-plot-ensemble-oob-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id90) | +| ![](img/sphx_glr_plot_adaboost_twoclass_thumb.png)
[两个级的AdaBoost](https://scikit-learn.org/stable/auto_examples/ensemble/plot_adaboost_twoclass.html#sphx-glr-auto-examples-ensemble-plot-adaboost-twoclass-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id91) | ![](img/sphx_glr_plot_random_forest_embedding_thumb.png)
[使用完全随机树的哈希特征转换](https://scikit-learn.org/stable/auto_examples/ensemble/plot_random_forest_embedding.html#sphx-glr-auto-examples-ensemble-plot-random-forest-embedding-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id92) | ![](img/sphx_glr_plot_adaboost_multiclass_thumb.png)
[多类AdaBoosted决策树](https://scikit-learn.org/stable/auto_examples/ensemble/plot_adaboost_multiclass.html#sphx-glr-auto-examples-ensemble-plot-adaboost-multiclass-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id93) | ![](img/sphx_glr_plot_adaboost_hastie_10_2_thumb.png)
[离散相对真正的AdaBoost](https://scikit-learn.org/stable/auto_examples/ensemble/plot_adaboost_hastie_10_2.html#sphx-glr-auto-examples-ensemble-plot-adaboost-hastie-10-2-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id94) | +| ![](img/sphx_glr_plot_stack_predictors_thumb.png)
[使用堆叠组合预测](https://scikit-learn.org/stable/auto_examples/ensemble/plot_stack_predictors.html#sphx-glr-auto-examples-ensemble-plot-stack-predictors-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id95) | ![](img/sphx_glr_plot_gradient_boosting_early_stopping_thumb.png)
[提前终止的梯度推进](https://scikit-learn.org/stable/auto_examples/ensemble/plot_gradient_boosting_early_stopping.html#sphx-glr-auto-examples-ensemble-plot-gradient-boosting-early-stopping-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id96) | ![](img/sphx_glr_plot_feature_transformation_thumb.png)
[带有树群的特征变换](https://scikit-learn.org/stable/auto_examples/ensemble/plot_feature_transformation.html#sphx-glr-auto-examples-ensemble-plot-feature-transformation-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id97) | ![](img/sphx_glr_plot_gradient_boosting_oob_thumb.png)
[梯度提升袋外估计](https://scikit-learn.org/stable/auto_examples/ensemble/plot_gradient_boosting_oob.html#sphx-glr-auto-examples-ensemble-plot-gradient-boosting-oob-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id98) | +| ![](img/sphx_glr_plot_bias_variance_thumb.png)
[单一估计器与装袋:偏差方差分解](https://scikit-learn.org/stable/auto_examples/ensemble/plot_bias_variance.html#sphx-glr-auto-examples-ensemble-plot-bias-variance-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id99) | ![](img/sphx_glr_plot_forest_iris_thumb.png)
[在虹膜数据集上绘制树木合奏的决策面](https://scikit-learn.org/stable/auto_examples/ensemble/plot_forest_iris.html#sphx-glr-auto-examples-ensemble-plot-forest-iris-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id100) | + + +## 基于现实世界数据集的示例 + +具有一些中等大小的数据集或交互式用户界面的现实问题的应用程序。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_outlier_detection_housing_thumb.png)
[真实数据集的异常值检测](https://scikit-learn.org/stable/auto_examples/applications/plot_outlier_detection_housing.html#sphx-glr-auto-examples-applications-plot-outlier-detection-housing-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id101) | ![](img/sphx_glr_plot_tomography_l1_reconstruction_thumb.png)
[压缩感测:使用L1先验(Lasso)进行层析成像重建](https://scikit-learn.org/stable/auto_examples/applications/plot_tomography_l1_reconstruction.html#sphx-glr-auto-examples-applications-plot-tomography-l1-reconstruction-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id102) | ![](img/sphx_glr_plot_topics_extraction_with_nmf_lda_thumb.png)
[非负矩阵分解和隐含狄利克雷分布话题提取](https://scikit-learn.org/stable/auto_examples/applications/plot_topics_extraction_with_nmf_lda.html#sphx-glr-auto-examples-applications-plot-topics-extraction-with-nmf-lda-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id103) | ![](img/sphx_glr_plot_face_recognition_thumb.png)
[使用特征脸和支持向量机的](https://scikit-learn.org/stable/auto_examples/applications/plot_face_recognition.html#sphx-glr-auto-examples-applications-plot-face-recognition-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id104 "Permalink to this image")[识别示例](https://scikit-learn.org/stable/auto_examples/applications/plot_face_recognition.html#sphx-glr-auto-examples-applications-plot-face-recognition-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id104) | +| ![](img/sphx_glr_plot_model_complexity_influence_thumb.png)
[模型复杂度影响](https://scikit-learn.org/stable/auto_examples/applications/plot_model_complexity_influence.html#sphx-glr-auto-examples-applications-plot-model-complexity-influence-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id105) | ![](img/sphx_glr_plot_stock_market_thumb.png)
[可视化的股市结构](https://scikit-learn.org/stable/auto_examples/applications/plot_stock_market.html#sphx-glr-auto-examples-applications-plot-stock-market-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id106) | ![](img/sphx_glr_wikipedia_principal_eigenvector_thumb.png)
[维基百科的主要特征向量](https://scikit-learn.org/stable/auto_examples/applications/wikipedia_principal_eigenvector.html#sphx-glr-auto-examples-applications-wikipedia-principal-eigenvector-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id107) | ![](img/sphx_glr_plot_species_distribution_modeling_thumb.png)
[物种分布建模](https://scikit-learn.org/stable/auto_examples/applications/plot_species_distribution_modeling.html#sphx-glr-auto-examples-applications-plot-species-distribution-modeling-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id108) | +| ![](img/sphx_glr_svm_gui_thumb.png)
[Libsvm](https://scikit-learn.org/stable/auto_examples/applications/svm_gui.html#sphx-glr-auto-examples-applications-svm-gui-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id109) | ![](img/sphx_glr_plot_prediction_latency_thumb.png)
[预测延迟](https://scikit-learn.org/stable/auto_examples/applications/plot_prediction_latency.html#sphx-glr-auto-examples-applications-plot-prediction-latency-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id110) | ![](img/sphx_glr_plot_out_of_core_classification_thumb.png)
[文本文档的核心分类](https://scikit-learn.org/stable/auto_examples/applications/plot_out_of_core_classification.html#sphx-glr-auto-examples-applications-plot-out-of-core-classification-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id111) | + + +## 特征选择 + +有关[`sklearn.feature_selection`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.feature_selection "sklearn.feature_selection")模块的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_rfe_digits_thumb.png)
[递归特征消除](https://scikit-learn.org/stable/auto_examples/feature_selection/plot_rfe_digits.html#sphx-glr-auto-examples-feature-selection-plot-rfe-digits-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id112) | ![](img/sphx_glr_plot_f_test_vs_mi_thumb.png)
[F检验和相互信息的比较](https://scikit-learn.org/stable/auto_examples/feature_selection/plot_f_test_vs_mi.html#sphx-glr-auto-examples-feature-selection-plot-f-test-vs-mi-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id113) | ![](img/sphx_glr_plot_feature_selection_pipeline_thumb.png)
[管道Anova](https://scikit-learn.org/stable/auto_examples/feature_selection/plot_feature_selection_pipeline.html#sphx-glr-auto-examples-feature-selection-plot-feature-selection-pipeline-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id114) | ![](img/sphx_glr_plot_rfe_with_cross_validation_thumb.png)
[通过交叉验证消除递归特征](https://scikit-learn.org/stable/auto_examples/feature_selection/plot_rfe_with_cross_validation.html#sphx-glr-auto-examples-feature-selection-plot-rfe-with-cross-validation-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id115) | +| ![](img/sphx_glr_plot_select_from_model_boston_thumb.png)
[使用SelectFromModel和LassoCV特征选择](https://scikit-learn.org/stable/auto_examples/feature_selection/plot_select_from_model_boston.html#sphx-glr-auto-examples-feature-selection-plot-select-from-model-boston-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id116) | ![](img/sphx_glr_plot_permutation_test_for_classification_thumb.png)
[与排列测试的分类评分的意义](https://scikit-learn.org/stable/auto_examples/feature_selection/plot_permutation_test_for_classification.html#sphx-glr-auto-examples-feature-selection-plot-permutation-test-for-classification-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id117) | ![](img/sphx_glr_plot_feature_selection_thumb.png)
[单变量特征选择](https://scikit-learn.org/stable/auto_examples/feature_selection/plot_feature_selection.html#sphx-glr-auto-examples-feature-selection-plot-feature-selection-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id118) | + + +## 高斯混合模型 + +有关[`sklearn.mixture`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.mixture "sklearn.mixture")模块的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_gmm_pdf_thumb.png)
[高斯混合的密度估计](https://scikit-learn.org/stable/auto_examples/mixture/plot_gmm_pdf.html#sphx-glr-auto-examples-mixture-plot-gmm-pdf-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id119) | ![](img/sphx_glr_plot_gmm_thumb.png)
[高斯混合模型椭球](https://scikit-learn.org/stable/auto_examples/mixture/plot_gmm.html#sphx-glr-auto-examples-mixture-plot-gmm-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id120) | ![](img/sphx_glr_plot_gmm_selection_thumb.png)
[高斯混合模型选择](https://scikit-learn.org/stable/auto_examples/mixture/plot_gmm_selection.html#sphx-glr-auto-examples-mixture-plot-gmm-selection-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id121) | ![](img/sphx_glr_plot_gmm_covariances_thumb.png)
[GMM协方差](https://scikit-learn.org/stable/auto_examples/mixture/plot_gmm_covariances.html#sphx-glr-auto-examples-mixture-plot-gmm-covariances-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id122) | +| ![](img/sphx_glr_plot_gmm_sin_thumb.png)
[高斯混合模型正弦曲线](https://scikit-learn.org/stable/auto_examples/mixture/plot_gmm_sin.html#sphx-glr-auto-examples-mixture-plot-gmm-sin-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id123) | ![](img/sphx_glr_plot_concentration_prior_thumb.png)
[贝叶斯高斯混合变量的浓度先验类型分析](https://scikit-learn.org/stable/auto_examples/mixture/plot_concentration_prior.html#sphx-glr-auto-examples-mixture-plot-concentration-prior-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id124) | + + +## 高斯机器学习过程 + +有关[`sklearn.gaussian_process`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.gaussian_process "sklearn.gaussian_process")模块的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_gpc_xor_thumb.png)
[XOR数据集上的高斯过程分类(GPC)的图示](https://scikit-learn.org/stable/auto_examples/gaussian_process/plot_gpc_xor.html#sphx-glr-auto-examples-gaussian-process-plot-gpc-xor-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id125) | ![](img/sphx_glr_plot_gpc_iris_thumb.png)
[虹膜数据集上的高斯过程分类(GPC)](https://scikit-learn.org/stable/auto_examples/gaussian_process/plot_gpc_iris.html#sphx-glr-auto-examples-gaussian-process-plot-gpc-iris-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id126) | ![](img/sphx_glr_plot_compare_gpr_krr_thumb.png)
[核岭和高斯过程回归的比较](https://scikit-learn.org/stable/auto_examples/gaussian_process/plot_compare_gpr_krr.html#sphx-glr-auto-examples-gaussian-process-plot-compare-gpr-krr-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id127) | ![](img/sphx_glr_plot_gpr_prior_posterior_thumb.png)
[不同内核的先验和后验高斯过程的图示](https://scikit-learn.org/stable/auto_examples/gaussian_process/plot_gpr_prior_posterior.html#sphx-glr-auto-examples-gaussian-process-plot-gpr-prior-posterior-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id128) | +| ![](img/sphx_glr_plot_gpc_isoprobability_thumb.png)
[高斯过程分类(GPC)的等概率线](https://scikit-learn.org/stable/auto_examples/gaussian_process/plot_gpc_isoprobability.html#sphx-glr-auto-examples-gaussian-process-plot-gpc-isoprobability-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id129) | ![](img/sphx_glr_plot_gpc_thumb.png)
[概率预测的结果与高斯过程分类(GPC)](https://scikit-learn.org/stable/auto_examples/gaussian_process/plot_gpc.html#sphx-glr-auto-examples-gaussian-process-plot-gpc-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id130) | ![](img/sphx_glr_plot_gpr_noisy_thumb.png)
[具有噪声水平估计的高斯过程回归(GPR)](https://scikit-learn.org/stable/auto_examples/gaussian_process/plot_gpr_noisy.html#sphx-glr-auto-examples-gaussian-process-plot-gpr-noisy-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id131) | ![](img/sphx_glr_plot_gpr_noisy_targets_thumb.png)
[高斯过程回归:基本入门示例](https://scikit-learn.org/stable/auto_examples/gaussian_process/plot_gpr_noisy_targets.html#sphx-glr-auto-examples-gaussian-process-plot-gpr-noisy-targets-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id132) | +| ![](img/sphx_glr_plot_gpr_co2_thumb.png)
[基于Mauna Loa CO2数据的高斯过程回归(GPR)。](https://scikit-learn.org/stable/auto_examples/gaussian_process/plot_gpr_co2.html#sphx-glr-auto-examples-gaussian-process-plot-gpr-co2-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id133) | ![](img/sphx_glr_plot_gpr_on_structured_data_thumb.png)
[离散数据结构上的高斯过程](https://scikit-learn.org/stable/auto_examples/gaussian_process/plot_gpr_on_structured_data.html#sphx-glr-auto-examples-gaussian-process-plot-gpr-on-structured-data-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id134) | + + +## 广义线性模型 + +有关[`sklearn.linear_model`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.linear_model "sklearn.linear_model")模块的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_lasso_lars_thumb.png)
[使用LARS的套索路径](https://scikit-learn.org/stable/auto_examples/linear_model/plot_lasso_lars.html#sphx-glr-auto-examples-linear-model-plot-lasso-lars-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id135) | ![](img/sphx_glr_plot_ridge_path_thumb.png)
[绘制岭系数作为正则化的函数](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ridge_path.html#sphx-glr-auto-examples-linear-model-plot-ridge-path-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id136) | ![](img/sphx_glr_plot_sgd_separating_hyperplane_thumb.png)
[SGD:最大余量分隔超平面](https://scikit-learn.org/stable/auto_examples/linear_model/plot_sgd_separating_hyperplane.html#sphx-glr-auto-examples-linear-model-plot-sgd-separating-hyperplane-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id137) | ![](img/sphx_glr_plot_sgd_loss_functions_thumb.png)
[SGD:凸损失函数](https://scikit-learn.org/stable/auto_examples/linear_model/plot_sgd_loss_functions.html#sphx-glr-auto-examples-linear-model-plot-sgd-loss-functions-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id138) | +| ![](img/sphx_glr_plot_ols_ridge_variance_thumb.png)
[普通最小二乘法和岭回归方差](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols_ridge_variance.html#sphx-glr-auto-examples-linear-model-plot-ols-ridge-variance-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id139) | ![](img/sphx_glr_plot_ridge_coeffs_thumb.png)
[绘制Ridge系数作为L2正则化的函数](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ridge_coeffs.html#sphx-glr-auto-examples-linear-model-plot-ridge-coeffs-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id140) | ![](img/sphx_glr_plot_sgd_penalties_thumb.png)
[SGD:罚款](https://scikit-learn.org/stable/auto_examples/linear_model/plot_sgd_penalties.html#sphx-glr-auto-examples-linear-model-plot-sgd-penalties-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id141) | ![](img/sphx_glr_plot_polynomial_interpolation_thumb.png)
[多项式插值](https://scikit-learn.org/stable/auto_examples/linear_model/plot_polynomial_interpolation.html#sphx-glr-auto-examples-linear-model-plot-polynomial-interpolation-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id142) | +| ![](img/sphx_glr_plot_logistic_thumb.png)
[物流功能](https://scikit-learn.org/stable/auto_examples/linear_model/plot_logistic.html#sphx-glr-auto-examples-linear-model-plot-logistic-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id143) | ![](img/sphx_glr_plot_logistic_path_thumb.png)
[L1-Logistic回归的正规化道路](https://scikit-learn.org/stable/auto_examples/linear_model/plot_logistic_path.html#sphx-glr-auto-examples-linear-model-plot-logistic-path-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id144) | ![](img/sphx_glr_plot_iris_logistic_thumb.png)
[Logistic回归3类分类器](https://scikit-learn.org/stable/auto_examples/linear_model/plot_iris_logistic.html#sphx-glr-auto-examples-linear-model-plot-iris-logistic-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id145) | ![](img/sphx_glr_plot_sgd_weighted_samples_thumb.png)
[SGD:加权样本](https://scikit-learn.org/stable/auto_examples/linear_model/plot_sgd_weighted_samples.html#sphx-glr-auto-examples-linear-model-plot-sgd-weighted-samples-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id146) | +| ![](img/sphx_glr_plot_ols_thumb.png)
[线性回归示例](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id147) | ![](img/sphx_glr_plot_ransac_thumb.png)
[使用RANSAC进行稳健的线性模型估计](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ransac.html#sphx-glr-auto-examples-linear-model-plot-ransac-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id148) | ![](img/sphx_glr_plot_ols_3d_thumb.png)
[稀疏实施例:装修仅设有1和2](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols_3d.html#sphx-glr-auto-examples-linear-model-plot-ols-3d-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id149) | ![](img/sphx_glr_plot_huber_vs_ridge_thumb.png)
[HuberRegressor VS岭集具有较强的异常](https://scikit-learn.org/stable/auto_examples/linear_model/plot_huber_vs_ridge.html#sphx-glr-auto-examples-linear-model-plot-huber-vs-ridge-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id150) | +| ![](img/sphx_glr_plot_lasso_dense_vs_sparse_data_thumb.png)
[套索上密集和稀疏数据](https://scikit-learn.org/stable/auto_examples/linear_model/plot_lasso_dense_vs_sparse_data.html#sphx-glr-auto-examples-linear-model-plot-lasso-dense-vs-sparse-data-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id151) | ![](img/sphx_glr_plot_sgd_comparison_thumb.png)
[比较各种在线求解器](https://scikit-learn.org/stable/auto_examples/linear_model/plot_sgd_comparison.html#sphx-glr-auto-examples-linear-model-plot-sgd-comparison-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id152) | ![](img/sphx_glr_plot_multi_task_lasso_support_thumb.png)
[多任务套索的联合特征选择](https://scikit-learn.org/stable/auto_examples/linear_model/plot_multi_task_lasso_support.html#sphx-glr-auto-examples-linear-model-plot-multi-task-lasso-support-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id153) | ![](img/sphx_glr_plot_sparse_logistic_regression_mnist_thumb.png)
[使用多项式逻辑+ L1的MNIST分类](https://scikit-learn.org/stable/auto_examples/linear_model/plot_sparse_logistic_regression_mnist.html#sphx-glr-auto-examples-linear-model-plot-sparse-logistic-regression-mnist-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id154) | ![](img/sphx_glr_plot_sgd_iris_thumb.png)
[在虹膜数据集上绘制多类](https://scikit-learn.org/stable/auto_examples/linear_model/plot_sgd_iris.html#sphx-glr-auto-examples-linear-model-plot-sgd-iris-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id155) | +| ![](img/sphx_glr_plot_omp_thumb.png)
[正交匹配追踪](https://scikit-learn.org/stable/auto_examples/linear_model/plot_omp.html#sphx-glr-auto-examples-linear-model-plot-omp-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id156) | ![](img/sphx_glr_plot_lasso_and_elasticnet_thumb.png)
[套索和弹性网用于稀疏信号](https://scikit-learn.org/stable/auto_examples/linear_model/plot_lasso_and_elasticnet.html#sphx-glr-auto-examples-linear-model-plot-lasso-and-elasticnet-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id157) | ![](img/sphx_glr_plot_bayesian_ridge_curvefit_thumb.png)
[贝叶斯岭回归的曲线拟合](https://scikit-learn.org/stable/auto_examples/linear_model/plot_bayesian_ridge_curvefit.html#sphx-glr-auto-examples-linear-model-plot-bayesian-ridge-curvefit-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id158) | ![](img/sphx_glr_plot_theilsen_thumb.png)
[Theil-Sen回归](https://scikit-learn.org/stable/auto_examples/linear_model/plot_theilsen.html#sphx-glr-auto-examples-linear-model-plot-theilsen-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id159) | +| ![](img/sphx_glr_plot_logistic_multinomial_thumb.png)
[绘制多项式和一对一静态Logistic回归](https://scikit-learn.org/stable/auto_examples/linear_model/plot_logistic_multinomial.html#sphx-glr-auto-examples-linear-model-plot-logistic-multinomial-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id160) | ![](img/sphx_glr_plot_robust_fit_thumb.png)
[稳健的线性估计器拟合](https://scikit-learn.org/stable/auto_examples/linear_model/plot_robust_fit.html#sphx-glr-auto-examples-linear-model-plot-robust-fit-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id161) | ![](img/sphx_glr_plot_logistic_l1_l2_sparsity_thumb.png)
[Logistic回归中的L1惩罚和稀疏性](https://scikit-learn.org/stable/auto_examples/linear_model/plot_logistic_l1_l2_sparsity.html#sphx-glr-auto-examples-linear-model-plot-logistic-l1-l2-sparsity-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id162) | ![](img/sphx_glr_plot_lasso_coordinate_descent_path_thumb.png)
[套索和弹性网络](https://scikit-learn.org/stable/auto_examples/linear_model/plot_lasso_coordinate_descent_path.html#sphx-glr-auto-examples-linear-model-plot-lasso-coordinate-descent-path-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id163) | +| ![](img/sphx_glr_plot_ard_thumb.png)
[自动相关性确定回归(ARD)](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ard.html#sphx-glr-auto-examples-linear-model-plot-ard-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id164) | ![](img/sphx_glr_plot_bayesian_ridge_thumb.png)
[贝叶斯岭回归](https://scikit-learn.org/stable/auto_examples/linear_model/plot_bayesian_ridge.html#sphx-glr-auto-examples-linear-model-plot-bayesian-ridge-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id165) | ![](img/sphx_glr_plot_sparse_logistic_regression_20newsgroups_thumb.png)
[20newgroups上的多类稀疏逻辑回归](https://scikit-learn.org/stable/auto_examples/linear_model/plot_sparse_logistic_regression_20newsgroups.html#sphx-glr-auto-examples-linear-model-plot-sparse-logistic-regression-20newsgroups-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id166) | ![](img/sphx_glr_plot_lasso_model_selection_thumb.png)
[套索模型选择:交叉验证/ AIC /](https://scikit-learn.org/stable/auto_examples/linear_model/plot_lasso_model_selection.html#sphx-glr-auto-examples-linear-model-plot-lasso-model-selection-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id167) | +| ![](img/sphx_glr_plot_sgd_early_stopping_thumb.png)
[早期停止随机梯度下降的](https://scikit-learn.org/stable/auto_examples/linear_model/plot_sgd_early_stopping.html#sphx-glr-auto-examples-linear-model-plot-sgd-early-stopping-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id168) | + + +## 检查 + +与[`sklearn.inspection`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.inspection "斯克莱恩检查")模块有关的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_permutation_importance_multicollinear_thumb.png)
[具有多重共线性或相关特征的置换重要性](https://scikit-learn.org/stable/auto_examples/inspection/plot_permutation_importance_multicollinear.html#sphx-glr-auto-examples-inspection-plot-permutation-importance-multicollinear-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id169) | ![](img/sphx_glr_plot_permutation_importance_thumb.png)
[排列重要性与随机森林特征重要性(MDI)](https://scikit-learn.org/stable/auto_examples/inspection/plot_permutation_importance.html#sphx-glr-auto-examples-inspection-plot-permutation-importance-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id170) | ![](img/sphx_glr_plot_partial_dependence_thumb.png)
[部分依赖图](https://scikit-learn.org/stable/auto_examples/inspection/plot_partial_dependence.html#sphx-glr-auto-examples-inspection-plot-partial-dependence-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id171) | + + +## 流形学习 + +有关[`sklearn.manifold`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.manifold "sklearn。流形")模块的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_swissroll_thumb.png)
[使用LLE减少瑞士卷](https://scikit-learn.org/stable/auto_examples/manifold/plot_swissroll.html#sphx-glr-auto-examples-manifold-plot-swissroll-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id172) | ![](img/sphx_glr_plot_compare_methods_thumb.png)
[流形学习方法的比较](https://scikit-learn.org/stable/auto_examples/manifold/plot_compare_methods.html#sphx-glr-auto-examples-manifold-plot-compare-methods-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id173) | ![](img/sphx_glr_plot_mds_thumb.png)
[多维缩放](https://scikit-learn.org/stable/auto_examples/manifold/plot_mds.html#sphx-glr-auto-examples-manifold-plot-mds-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id174) | ![](img/sphx_glr_plot_t_sne_perplexity_thumb.png)
[叔SNE:各种困惑值对形状的影响](https://scikit-learn.org/stable/auto_examples/manifold/plot_t_sne_perplexity.html#sphx-glr-auto-examples-manifold-plot-t-sne-perplexity-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id175) | +| ![](img/sphx_glr_plot_manifold_sphere_thumb.png)
[截断球面上的流形学习方法](https://scikit-learn.org/stable/auto_examples/manifold/plot_manifold_sphere.html#sphx-glr-auto-examples-manifold-plot-manifold-sphere-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id176) | ![](img/sphx_glr_plot_lle_digits_thumb.png)
[手写数字流形学习:局部线性嵌入,Isomap…](https://scikit-learn.org/stable/auto_examples/manifold/plot_lle_digits.html#sphx-glr-auto-examples-manifold-plot-lle-digits-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id177) | + + +## 缺失值插补 + +有关[`sklearn.impute`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.impute "sklearn.impute")模块的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_iterative_imputer_variants_comparison_thumb.png)
[使用IterativeImputer的变体估算缺失值](https://scikit-learn.org/stable/auto_examples/impute/plot_iterative_imputer_variants_comparison.html#sphx-glr-auto-examples-impute-plot-iterative-imputer-variants-comparison-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id178) | ![](img/sphx_glr_plot_missing_values_thumb.png)
[在构建估算器之前估算缺失值](https://scikit-learn.org/stable/auto_examples/impute/plot_missing_values.html#sphx-glr-auto-examples-impute-plot-missing-values-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id179) | + + +## 选型 + +与[`sklearn.model_selection`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.model_selection "sklearn.model_selection")模块有关的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_cv_predict_thumb.png)
[绘制交叉验证的预测](https://scikit-learn.org/stable/auto_examples/model_selection/plot_cv_predict.html#sphx-glr-auto-examples-model-selection-plot-cv-predict-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id180) | ![](img/sphx_glr_plot_confusion_matrix_thumb.png)
[混淆矩阵](https://scikit-learn.org/stable/auto_examples/model_selection/plot_confusion_matrix.html#sphx-glr-auto-examples-model-selection-plot-confusion-matrix-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id181) | ![](img/sphx_glr_plot_validation_curve_thumb.png)
[绘图验证曲线](https://scikit-learn.org/stable/auto_examples/model_selection/plot_validation_curve.html#sphx-glr-auto-examples-model-selection-plot-validation-curve-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id182) | ![](img/sphx_glr_plot_underfitting_overfitting_thumb.png)
[拟合不足与拟合过度](https://scikit-learn.org/stable/auto_examples/model_selection/plot_underfitting_overfitting.html#sphx-glr-auto-examples-model-selection-plot-underfitting-overfitting-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id183) | +| ![](img/sphx_glr_plot_grid_search_digits_thumb.png)
[使用带有交叉验证的网格搜索进行参数估计](https://scikit-learn.org/stable/auto_examples/model_selection/plot_grid_search_digits.html#sphx-glr-auto-examples-model-selection-plot-grid-search-digits-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id184) | ![](img/sphx_glr_plot_randomized_search_thumb.png)
[对于比较估计超参数随机搜索和网格搜索](https://scikit-learn.org/stable/auto_examples/model_selection/plot_randomized_search.html#sphx-glr-auto-examples-model-selection-plot-randomized-search-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id185) | ![](img/sphx_glr_plot_train_error_vs_test_error_thumb.png)
[训练错误与测试错误](https://scikit-learn.org/stable/auto_examples/model_selection/plot_train_error_vs_test_error.html#sphx-glr-auto-examples-model-selection-plot-train-error-vs-test-error-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id186) | ![](img/sphx_glr_plot_roc_crossval_thumb.png)
[具有交叉验证的接收器操作特性(ROC)](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc_crossval.html#sphx-glr-auto-examples-model-selection-plot-roc-crossval-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id187) | +| ![](img/sphx_glr_plot_nested_cross_validation_iris_thumb.png)
[嵌套与非嵌套交叉验证](https://scikit-learn.org/stable/auto_examples/model_selection/plot_nested_cross_validation_iris.html#sphx-glr-auto-examples-model-selection-plot-nested-cross-validation-iris-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id188) | ![](img/sphx_glr_plot_multi_metric_evaluation_thumb.png)
[在cross_val_score和GridSearchCV上进行多指标评估的演示](https://scikit-learn.org/stable/auto_examples/model_selection/plot_multi_metric_evaluation.html#sphx-glr-auto-examples-model-selection-plot-multi-metric-evaluation-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id189) | ![](img/sphx_glr_grid_search_text_feature_extraction_thumb.png)
[用于文本特征提取和评估的示例管道](https://scikit-learn.org/stable/auto_examples/model_selection/grid_search_text_feature_extraction.html#sphx-glr-auto-examples-model-selection-grid-search-text-feature-extraction-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id190) | ![](img/sphx_glr_plot_grid_search_refit_callable_thumb.png)
[平衡模型的复杂性和交叉验证的分数](https://scikit-learn.org/stable/auto_examples/model_selection/plot_grid_search_refit_callable.html#sphx-glr-auto-examples-model-selection-plot-grid-search-refit-callable-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id191) | +| ![](img/sphx_glr_plot_cv_indices_thumb.png)
[在scikit-learn中可视化交叉验证行为](https://scikit-learn.org/stable/auto_examples/model_selection/plot_cv_indices.html#sphx-glr-auto-examples-model-selection-plot-cv-indices-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id192) | ![](img/sphx_glr_plot_roc_thumb.png)
[接收器工作特性(ROC)](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html#sphx-glr-auto-examples-model-selection-plot-roc-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id193) | ![](img/sphx_glr_plot_precision_recall_thumb.png)
[精密召回](https://scikit-learn.org/stable/auto_examples/model_selection/plot_precision_recall.html#sphx-glr-auto-examples-model-selection-plot-precision-recall-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id194) | ![](img/sphx_glr_plot_learning_curve_thumb.png)
[绘制学习曲线](https://scikit-learn.org/stable/auto_examples/model_selection/plot_learning_curve.html#sphx-glr-auto-examples-model-selection-plot-learning-curve-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id195) | + + +## 多输出方法 + +有关[`sklearn.multioutput`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.multioutput "sklearn.multioutput")模块的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_classifier_chain_yeast_thumb.png)
[分类器链](https://scikit-learn.org/stable/auto_examples/multioutput/plot_classifier_chain_yeast.html#sphx-glr-auto-examples-multioutput-plot-classifier-chain-yeast-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id196) | + + +## 最近邻 + +有关[`sklearn.neighbors`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.neighbors "sklearn.neighbors")模块的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_regression_thumb.png)
[最近邻居回归](https://scikit-learn.org/stable/auto_examples/neighbors/plot_regression.html#sphx-glr-auto-examples-neighbors-plot-regression-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id197) | ![](img/sphx_glr_plot_lof_outlier_detection_thumb.png)
[使用局部离群因子(LOF)进行离群检测](https://scikit-learn.org/stable/auto_examples/neighbors/plot_lof_outlier_detection.html#sphx-glr-auto-examples-neighbors-plot-lof-outlier-detection-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id198) | ![](img/sphx_glr_plot_classification_thumb.png)
[最近邻居分类](https://scikit-learn.org/stable/auto_examples/neighbors/plot_classification.html#sphx-glr-auto-examples-neighbors-plot-classification-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id199) | ![](img/sphx_glr_plot_nearest_centroid_thumb.png)
[最近质心分类](https://scikit-learn.org/stable/auto_examples/neighbors/plot_nearest_centroid.html#sphx-glr-auto-examples-neighbors-plot-nearest-centroid-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id200) | +| ![](img/sphx_glr_plot_digits_kde_sampling_thumb.png)
[核密度估计](https://scikit-learn.org/stable/auto_examples/neighbors/plot_digits_kde_sampling.html#sphx-glr-auto-examples-neighbors-plot-digits-kde-sampling-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id201) | ![](img/sphx_glr_plot_caching_nearest_neighbors_thumb.png)
[缓存最近的邻居](https://scikit-learn.org/stable/auto_examples/neighbors/plot_caching_nearest_neighbors.html#sphx-glr-auto-examples-neighbors-plot-caching-nearest-neighbors-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id202) | ![](img/sphx_glr_plot_nca_illustration_thumb.png)
[邻域成分分析图](https://scikit-learn.org/stable/auto_examples/neighbors/plot_nca_illustration.html#sphx-glr-auto-examples-neighbors-plot-nca-illustration-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id203) | ![](img/sphx_glr_plot_lof_novelty_detection_thumb.png)
[具有局部异常值(LOF)的新颖性检测](https://scikit-learn.org/stable/auto_examples/neighbors/plot_lof_novelty_detection.html#sphx-glr-auto-examples-neighbors-plot-lof-novelty-detection-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id204) | +| ![](img/sphx_glr_plot_nca_classification_thumb.png)
[比较具有和不具有邻域分量分析的最近邻域](https://scikit-learn.org/stable/auto_examples/neighbors/plot_nca_classification.html#sphx-glr-auto-examples-neighbors-plot-nca-classification-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id205) | ![](img/sphx_glr_plot_nca_dim_reduction_thumb.png)
[使用邻域分量分析进行](https://scikit-learn.org/stable/auto_examples/neighbors/plot_nca_dim_reduction.html#sphx-glr-auto-examples-neighbors-plot-nca-dim-reduction-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id206)[维](https://scikit-learn.org/stable/auto_examples/neighbors/plot_nca_dim_reduction.html#sphx-glr-auto-examples-neighbors-plot-nca-dim-reduction-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id206) | ![](img/sphx_glr_plot_species_kde_thumb.png)
[物种分布的核密度估计](https://scikit-learn.org/stable/auto_examples/neighbors/plot_species_kde.html#sphx-glr-auto-examples-neighbors-plot-species-kde-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id207) | ![](img/sphx_glr_plot_kde_1d_thumb.png)
[简单的1D内核密度估计](https://scikit-learn.org/stable/auto_examples/neighbors/plot_kde_1d.html#sphx-glr-auto-examples-neighbors-plot-kde-1d-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id208) | +| ![](img/sphx_glr_approximate_nearest_neighbors_thumb.png)
[TSNE中的近似最近邻居](https://scikit-learn.org/stable/auto_examples/neighbors/approximate_nearest_neighbors.html#sphx-glr-auto-examples-neighbors-approximate-nearest-neighbors-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id209) | + + +## 神经网络 + +有关[`sklearn.neural_network`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.neural_network "sklearn.neural_network")模块的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_mnist_filters_thumb.png)
[在MNIST上可视化MLP权重](https://scikit-learn.org/stable/auto_examples/neural_networks/plot_mnist_filters.html#sphx-glr-auto-examples-neural-networks-plot-mnist-filters-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id210) | ![](img/sphx_glr_plot_rbm_logistic_classification_thumb.png)
[用于数字分类的受限玻尔兹曼机功能](https://scikit-learn.org/stable/auto_examples/neural_networks/plot_rbm_logistic_classification.html#sphx-glr-auto-examples-neural-networks-plot-rbm-logistic-classification-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id211) | ![](img/sphx_glr_plot_mlp_alpha_thumb.png)
[在多层感知变化正规化](https://scikit-learn.org/stable/auto_examples/neural_networks/plot_mlp_alpha.html#sphx-glr-auto-examples-neural-networks-plot-mlp-alpha-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id212) | ![](img/sphx_glr_plot_mlp_training_curves_thumb.png)
[比较随机学习策略MLPClassifier](https://scikit-learn.org/stable/auto_examples/neural_networks/plot_mlp_training_curves.html#sphx-glr-auto-examples-neural-networks-plot-mlp-training-curves-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id213) | + + +## 管道和复合估计器 + +由其他估算器组成变压器和管道的示例。请参阅《[用户指南》](https://scikit-learn.org/stable/modules/compose.html#combining-estimators)。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_feature_union_thumb.png)
[连结多个特征提取方法](https://scikit-learn.org/stable/auto_examples/compose/plot_feature_union.html#sphx-glr-auto-examples-compose-plot-feature-union-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id214) | ![](img/sphx_glr_plot_digits_pipe_thumb.png)
[流水线:链接PCA和逻辑回归](https://scikit-learn.org/stable/auto_examples/compose/plot_digits_pipe.html#sphx-glr-auto-examples-compose-plot-digits-pipe-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id215) | ![](img/sphx_glr_plot_column_transformer_mixed_types_thumb.png)
[混合类型的列转换器](https://scikit-learn.org/stable/auto_examples/compose/plot_column_transformer_mixed_types.html#sphx-glr-auto-examples-compose-plot-column-transformer-mixed-types-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id216) | ![](img/sphx_glr_plot_compare_reduction_thumb.png)
[使用Pipeline和GridSearchCV选择降维](https://scikit-learn.org/stable/auto_examples/compose/plot_compare_reduction.html#sphx-glr-auto-examples-compose-plot-compare-reduction-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id217) | +| ![](img/sphx_glr_plot_column_transformer_thumb.png)
[具有异构数据源的列转换器](https://scikit-learn.org/stable/auto_examples/compose/plot_column_transformer.html#sphx-glr-auto-examples-compose-plot-column-transformer-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id218) | ![](img/sphx_glr_plot_transformed_target_thumb.png)
[在回归模型中转换目标的效果](https://scikit-learn.org/stable/auto_examples/compose/plot_transformed_target.html#sphx-glr-auto-examples-compose-plot-transformed-target-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id219) | + + +## 预处理 + +有关[`sklearn.preprocessing`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.preprocessing "sklearn。预处理")模块的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_function_transformer_thumb.png)
[使用FunctionTransformer选择列](https://scikit-learn.org/stable/auto_examples/preprocessing/plot_function_transformer.html#sphx-glr-auto-examples-preprocessing-plot-function-transformer-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id220) | ![](img/sphx_glr_plot_discretization_thumb.png)
[使用KBinsDiscretizer离散化连续特征](https://scikit-learn.org/stable/auto_examples/preprocessing/plot_discretization.html#sphx-glr-auto-examples-preprocessing-plot-discretization-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id221) | ![](img/sphx_glr_plot_discretization_strategies_thumb.png)
[演示KBinsDiscretizer的不同策略](https://scikit-learn.org/stable/auto_examples/preprocessing/plot_discretization_strategies.html#sphx-glr-auto-examples-preprocessing-plot-discretization-strategies-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id222) | ![](img/sphx_glr_plot_scaling_importance_thumb.png)
[特征缩放的重要性](https://scikit-learn.org/stable/auto_examples/preprocessing/plot_scaling_importance.html#sphx-glr-auto-examples-preprocessing-plot-scaling-importance-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id223) | +| ![](img/sphx_glr_plot_map_data_to_normal_thumb.png)
[地图数据正态分布](https://scikit-learn.org/stable/auto_examples/preprocessing/plot_map_data_to_normal.html#sphx-glr-auto-examples-preprocessing-plot-map-data-to-normal-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id224) | ![](img/sphx_glr_plot_discretization_classification_thumb.png)
[功能离散](https://scikit-learn.org/stable/auto_examples/preprocessing/plot_discretization_classification.html#sphx-glr-auto-examples-preprocessing-plot-discretization-classification-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id225) | ![](img/sphx_glr_plot_all_scaling_thumb.png)
[比较不同缩放器对数据与异常值的影响](https://scikit-learn.org/stable/auto_examples/preprocessing/plot_all_scaling.html#sphx-glr-auto-examples-preprocessing-plot-all-scaling-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id226) | + + +## 发布要点 + +这些示例说明了scikit-learn发行版的主要功能。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_release_highlights_0_22_0_thumb.png)
[scikit-learn 0.22的发行要点](https://scikit-learn.org/stable/auto_examples/release_highlights/plot_release_highlights_0_22_0.html#sphx-glr-auto-examples-release-highlights-plot-release-highlights-0-22-0-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id227) | + + +## 半监督分类 + +有关[`sklearn.semi_supervised`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.semi_supervised "sklearn.semi_supervised")模块的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_label_propagation_versus_svm_iris_thumb.png)
[Iris数据集上标签传播与SVM的决策边界](https://scikit-learn.org/stable/auto_examples/semi_supervised/plot_label_propagation_versus_svm_iris.html#sphx-glr-auto-examples-semi-supervised-plot-label-propagation-versus-svm-iris-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id228) | ![](img/sphx_glr_plot_label_propagation_structure_thumb.png)
[标签传播学习复杂的结构](https://scikit-learn.org/stable/auto_examples/semi_supervised/plot_label_propagation_structure.html#sphx-glr-auto-examples-semi-supervised-plot-label-propagation-structure-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id229) | ![](img/sphx_glr_plot_label_propagation_digits_thumb.png)
[标签传播数字:演示性能](https://scikit-learn.org/stable/auto_examples/semi_supervised/plot_label_propagation_digits.html#sphx-glr-auto-examples-semi-supervised-plot-label-propagation-digits-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id230) | ![](img/sphx_glr_plot_label_propagation_digits_active_learning_thumb.png)
[标签传播数字主动学习](https://scikit-learn.org/stable/auto_examples/semi_supervised/plot_label_propagation_digits_active_learning.html#sphx-glr-auto-examples-semi-supervised-plot-label-propagation-digits-active-learning-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id231) | + + +## 支持向量机 + +有关[`sklearn.svm`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.svm "sklearn.svm")模块的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_svm_nonlinear_thumb.png)
[非线性](https://scikit-learn.org/stable/auto_examples/svm/plot_svm_nonlinear.html#sphx-glr-auto-examples-svm-plot-svm-nonlinear-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id232) | ![](img/sphx_glr_plot_separating_hyperplane_thumb.png)
[SVM:最大余量分隔超平面](https://scikit-learn.org/stable/auto_examples/svm/plot_separating_hyperplane.html#sphx-glr-auto-examples-svm-plot-separating-hyperplane-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id233) | ![](img/sphx_glr_plot_custom_kernel_thumb.png)
[具有自定义内核的](https://scikit-learn.org/stable/auto_examples/svm/plot_custom_kernel.html#sphx-glr-auto-examples-svm-plot-custom-kernel-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id234) | ![](img/sphx_glr_plot_linearsvc_support_vectors_thumb.png)
[在LinearSVC中绘制支持向量](https://scikit-learn.org/stable/auto_examples/svm/plot_linearsvc_support_vectors.html#sphx-glr-auto-examples-svm-plot-linearsvc-support-vectors-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id235) | +| ![](img/sphx_glr_plot_svm_tie_breaking_thumb.png)
[SVM中断示例](https://scikit-learn.org/stable/auto_examples/svm/plot_svm_tie_breaking.html#sphx-glr-auto-examples-svm-plot-svm-tie-breaking-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id236) | ![](img/sphx_glr_plot_weighted_samples_thumb.png)
[SVM:加权样本](https://scikit-learn.org/stable/auto_examples/svm/plot_weighted_samples.html#sphx-glr-auto-examples-svm-plot-weighted-samples-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id237) | ![](img/sphx_glr_plot_separating_hyperplane_unbalanced_thumb.png)
[SVM:为不平衡的类分离超平面](https://scikit-learn.org/stable/auto_examples/svm/plot_separating_hyperplane_unbalanced.html#sphx-glr-auto-examples-svm-plot-separating-hyperplane-unbalanced-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id238) | ![](img/sphx_glr_plot_svm_kernels_thumb.png)
[SVM内核](https://scikit-learn.org/stable/auto_examples/svm/plot_svm_kernels.html#sphx-glr-auto-examples-svm-plot-svm-kernels-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id239) | +| ![](img/sphx_glr_plot_svm_anova_thumb.png)
[SVM-Anova:具有单变量特征选择的](https://scikit-learn.org/stable/auto_examples/svm/plot_svm_anova.html#sphx-glr-auto-examples-svm-plot-svm-anova-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id240) | ![](img/sphx_glr_plot_svm_regression_thumb.png)
[使用线性和非线性内核支持向量回归(SVR)](https://scikit-learn.org/stable/auto_examples/svm/plot_svm_regression.html#sphx-glr-auto-examples-svm-plot-svm-regression-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id241) | ![](img/sphx_glr_plot_svm_margin_thumb.png)
[SVM保证金示例](https://scikit-learn.org/stable/auto_examples/svm/plot_svm_margin.html#sphx-glr-auto-examples-svm-plot-svm-margin-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id242) | ![](img/sphx_glr_plot_oneclass_thumb.png)
[具有非线性内核(RBF)的一类](https://scikit-learn.org/stable/auto_examples/svm/plot_oneclass.html#sphx-glr-auto-examples-svm-plot-oneclass-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id243) | +| ![](img/sphx_glr_plot_iris_svc_thumb.png)
[在虹膜数据集中绘制不同的SVM分类器](https://scikit-learn.org/stable/auto_examples/svm/plot_iris_svc.html#sphx-glr-auto-examples-svm-plot-iris-svc-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id244) | ![](img/sphx_glr_plot_svm_scale_c_thumb.png)
[扩展SVC的正则化参数](https://scikit-learn.org/stable/auto_examples/svm/plot_svm_scale_c.html#sphx-glr-auto-examples-svm-plot-svm-scale-c-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id245) | ![](img/sphx_glr_plot_rbf_parameters_thumb.png)
[RBF SVM参数](https://scikit-learn.org/stable/auto_examples/svm/plot_rbf_parameters.html#sphx-glr-auto-examples-svm-plot-rbf-parameters-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id246) | + + +## 教程练习 + +教程练习 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_digits_classification_exercise_thumb.png)
[数字分类练习](https://scikit-learn.org/stable/auto_examples/exercises/plot_digits_classification_exercise.html#sphx-glr-auto-examples-exercises-plot-digits-classification-exercise-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id247) | ![](img/sphx_glr_plot_cv_digits_thumb.png)
[交叉验证数字数据集练习](https://scikit-learn.org/stable/auto_examples/exercises/plot_cv_digits.html#sphx-glr-auto-examples-exercises-plot-cv-digits-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id248) | ![](img/sphx_glr_plot_iris_exercise_thumb.png)
[SVM练习](https://scikit-learn.org/stable/auto_examples/exercises/plot_iris_exercise.html#sphx-glr-auto-examples-exercises-plot-iris-exercise-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id249) | ![](img/sphx_glr_plot_cv_diabetes_thumb.png)
[糖尿病运动数据集交叉验证](https://scikit-learn.org/stable/auto_examples/exercises/plot_cv_diabetes.html#sphx-glr-auto-examples-exercises-plot-cv-diabetes-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id250) | + + +## 文本文档工作 + +有关[`sklearn.feature_extraction.text`](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.feature_extraction.text "sklearn.feature_extraction.text")模块的示例。 + +| | | | | +| -- | -- | -- | -- | +| ![](img/sphx_glr_plot_hashing_vs_dict_vectorizer_thumb.png)
[FeatureHasher和DictVectorizer比较](https://scikit-learn.org/stable/auto_examples/text/plot_hashing_vs_dict_vectorizer.html#sphx-glr-auto-examples-text-plot-hashing-vs-dict-vectorizer-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id251) | ![](img/sphx_glr_plot_document_clustering_thumb.png)
[使用k-means聚类文本文档](https://scikit-learn.org/stable/auto_examples/text/plot_document_clustering.html#sphx-glr-auto-examples-text-plot-document-clustering-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id252) | ![](img/sphx_glr_plot_document_classification_20newsgroups_thumb.png)
[使用稀疏特征对文本文档进行分类](https://scikit-learn.org/stable/auto_examples/text/plot_document_classification_20newsgroups.html#sphx-glr-auto-examples-text-plot-document-classification-20newsgroups-py)[](https://scikit-learn.org/stable/auto_examples/index.html#id253) diff --git a/docs/examples/SUMMARY.md b/docs/examples/SUMMARY.md new file mode 100644 index 0000000000000000000000000000000000000000..5dada0fc294caabad58d810ae6264af0dce5487f --- /dev/null +++ b/docs/examples/SUMMARY.md @@ -0,0 +1,10 @@ +* 其他例子 +* 广义线性模型 + * [分类特征稀疏的文本](Generalized_Linear_Models/plot_document_classification_20newsgroups.md) + * [Lasso和Elastic Net(弹性网络)在稀疏信号上的表现](Generalized_Linear_Models/plot_lasso_and_elasticnet.md) + * [Lasso和Elastic Net(弹性网络)](Generalized_Linear_Models/plot_lasso_coordinate_descent_path.md) + * [Lasso模型选择:交叉验证 / AIC / BIC](Generalized_Linear_Models/plot_lasso_model_selection.md) + * [多任务Lasso实现联合特征选择](Generalized_Linear_Models/plot_multi_task_lasso_support.md) + * [线性回归](Generalized_Linear_Models/plot_ols.md) + * [岭系数对回归系数的影响](Generalized_Linear_Models/plot_ridge_path.md) + * [压缩感知_断层重建](Generalized_Linear_Models/plot_tomography_l1_reconstruction.md) diff --git a/docs/examples/book.json b/docs/examples/book.json new file mode 100644 index 0000000000000000000000000000000000000000..7c4e8b00a66195ac15b655930e6992fc128dfd40 --- /dev/null +++ b/docs/examples/book.json @@ -0,0 +1,176 @@ +{ + "title" : "sklearn 中文文档", + "author" : "ApacheCN", + "description" : "sklearn 中文文档: 教程和文档", + "language" : "zh-hans", + "plugins": [ + "github", + "github-buttons", + "-sharing", + "insert-logo", + "sharing-plus", + "back-to-top-button", + "code", + "copy-code-button", + "katex", + "pageview-count", + "edit-link", + "emphasize", + "alerts", + "auto-scroll-table", + "popup", + "hide-element", + "page-toc-button", + "tbfed-pagefooter", + "sitemap", + "advanced-emoji", + "expandable-chapters", + "splitter", + "search-pro" + ], + "pluginsConfig": { + "github": { + "url": "https://github.com/apachecn/sklearn-doc-zh" + }, + "github-buttons": { + "buttons": [ + { + "user": "apachecn", + "repo": "sklearn-doc-zh", + "type": "star", + "count": true, + "size": "small" + } + ] + }, + "insert-logo": { + "url": "http://data.apachecn.org/img/logo.jpg", + "style": "background: none; max-height: 150px; min-height: 150px" + }, + "hide-element": { + "elements": [".gitbook-link"] + }, + "edit-link": { + "base": "https://github.com/apachecn/sklearn-doc-zh/blob/master/docs/examples", + "label": "编辑本页" + }, + "sharing": { + "qzone": true, + "weibo": true, + "twitter": false, + "facebook": false, + "google": false, + "qq": false, + "line": false, + "whatsapp": false, + "douban": false, + "all": [ + "qq", "douban", "facebook", "google", "linkedin", "twitter", "weibo", "whatsapp" + ] + }, + "page-toc-button": { + "maxTocDepth": 4, + "minTocSize": 4 + }, + "tbfed-pagefooter": { + "copyright":"Copyright © ibooker.org.cn 2019", + "modify_label": "该文件修订时间: ", + "modify_format": "YYYY-MM-DD HH:mm:ss" + }, + "sitemap": { + "hostname": "http://sklearn.apachecn.org" + } + }, + "my_links" : { + "sidebar" : { + "Home" : "https://www.baidu.com" + } + }, + "my_plugins": [ + "donate", + "todo", + "-lunr", + "-search", + "expandable-chapters-small", + "chapter-fold", + "expandable-chapters", + "expandable-chapters-small", + "back-to-top-button", + "ga", + "baidu", + "sitemap", + "tbfed-pagefooter", + "advanced-emoji", + "sectionx", + "page-treeview", + "simple-page-toc", + "ancre-navigation", + "theme-apachecn@git+https://github.com/apachecn/theme-apachecn#HEAD", + "pagefooter-apachecn@git+https://github.com/apachecn/gitbook-plugin-pagefooter-apachecn#HEAD" + ], + "my_pluginsConfig": { + "github-buttons": { + "buttons": [ + { + "user": "apachecn", + "repo": "sklearn-doc-zh", + "type": "star", + "count": true, + "size": "small" + }, + { + "user": "apachecn", + "width": "160", + "type": "follow", + "count": true, + "size": "small" + } + ] + }, + "ignores": ["node_modules"], + "simple-page-toc": { + "maxDepth": 3, + "skipFirstH1": true + }, + "page-toc-button": { + "maxTocDepth": 2, + "minTocSize": 2 + }, + "page-treeview": { + "copyright": "Copyright © aleen42", + "minHeaderCount": "2", + "minHeaderDeep": "2" + }, + "donate": { + "wechat": "微信收款的二维码URL", + "alipay": "支付宝收款的二维码URL", + "title": "", + "button": "赏", + "alipayText": "支付宝打赏", + "wechatText": "微信打赏" + }, + "page-copyright": { + "description": "modified at", + "signature": "你的签名", + "wisdom": "Designer, Frontend Developer & overall web enthusiast", + "format": "YYYY-MM-dd hh:mm:ss", + "copyright": "Copyright © 你的名字", + "timeColor": "#666", + "copyrightColor": "#666", + "utcOffset": "8", + "style": "normal", + "noPowered": false + }, + "ga": { + "token": "UA-102475051-10" + }, + "baidu": { + "token": "75439e2cbd22bdd813226000e9dcc12f" + }, + "pagefooter-apachecn": { + "copyright":"Copyright © ibooker.org.cn 2019", + "modify_label": "该文件修订时间: ", + "modify_format": "YYYY-MM-DD HH:mm:ss" + } + } +} diff --git a/docs/examples/img/sphx_glr_approximate_nearest_neighbors_thumb.png b/docs/examples/img/sphx_glr_approximate_nearest_neighbors_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..233f8e605efca4bef384a7c603d53fdc385428bc Binary files /dev/null and b/docs/examples/img/sphx_glr_approximate_nearest_neighbors_thumb.png differ diff --git a/docs/examples/img/sphx_glr_grid_search_text_feature_extraction_thumb.png b/docs/examples/img/sphx_glr_grid_search_text_feature_extraction_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..233f8e605efca4bef384a7c603d53fdc385428bc Binary files /dev/null and b/docs/examples/img/sphx_glr_grid_search_text_feature_extraction_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_adaboost_hastie_10_2_thumb.png b/docs/examples/img/sphx_glr_plot_adaboost_hastie_10_2_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..4a4f0279bb886ff51eb091be9d900f235f6b7a44 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_adaboost_hastie_10_2_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_adaboost_multiclass_thumb.png b/docs/examples/img/sphx_glr_plot_adaboost_multiclass_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..3f447e53c2d1c9cd767d85641b80eb2d44c9f649 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_adaboost_multiclass_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_adaboost_regression_thumb.png b/docs/examples/img/sphx_glr_plot_adaboost_regression_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..9c396ef9ac755b89f734a814ff8640e03843e67f Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_adaboost_regression_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_adaboost_twoclass_thumb.png b/docs/examples/img/sphx_glr_plot_adaboost_twoclass_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..af631cb034cc910a805cae0b690dfa4542a54b30 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_adaboost_twoclass_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_adjusted_for_chance_measures_thumb.png b/docs/examples/img/sphx_glr_plot_adjusted_for_chance_measures_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..04e10799fb1f956c4f5687641073e47c1da0cb50 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_adjusted_for_chance_measures_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_affinity_propagation_thumb.png b/docs/examples/img/sphx_glr_plot_affinity_propagation_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..50fd98dd6eeddc1c6146f6e2451c074760e2de63 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_affinity_propagation_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_agglomerative_clustering_metrics_thumb.png b/docs/examples/img/sphx_glr_plot_agglomerative_clustering_metrics_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..3710f06e6d97e9b6b5a52dab0f2f203409c29637 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_agglomerative_clustering_metrics_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_agglomerative_clustering_thumb.png b/docs/examples/img/sphx_glr_plot_agglomerative_clustering_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..77fb097e353edb0f2673d7ddfb9756e83ec59e29 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_agglomerative_clustering_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_agglomerative_dendrogram_thumb.png b/docs/examples/img/sphx_glr_plot_agglomerative_dendrogram_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..31bda72cec6bbb63da570a00c6a0d1350f45fddd Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_agglomerative_dendrogram_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_all_scaling_thumb.png b/docs/examples/img/sphx_glr_plot_all_scaling_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..fd245cca8566c3066ced3287957f5a9a6d586838 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_all_scaling_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_anomaly_comparison_thumb.png b/docs/examples/img/sphx_glr_plot_anomaly_comparison_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..b5674181397e3a1b0887a99c72a7c9b080271ea4 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_anomaly_comparison_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_ard_thumb.png b/docs/examples/img/sphx_glr_plot_ard_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..fa47c4335682ade79ae4c0a40031416da6c70c97 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_ard_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_bayesian_ridge_curvefit_thumb.png b/docs/examples/img/sphx_glr_plot_bayesian_ridge_curvefit_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..ad058dccf8b8625d8a4ed2f48ca0d67aad3313d2 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_bayesian_ridge_curvefit_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_bayesian_ridge_thumb.png b/docs/examples/img/sphx_glr_plot_bayesian_ridge_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..03b0d23c9422f27b9f5cfa0e6c15abec153a72f2 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_bayesian_ridge_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_beta_divergence_thumb.png b/docs/examples/img/sphx_glr_plot_beta_divergence_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..453f47b07872dd284697ed36b95600e125efcbf5 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_beta_divergence_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_bias_variance_thumb.png b/docs/examples/img/sphx_glr_plot_bias_variance_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..7bd0c8fd5b01b7a8a1a6252e9d66d21979cb7834 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_bias_variance_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_bicluster_newsgroups_thumb.png b/docs/examples/img/sphx_glr_plot_bicluster_newsgroups_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..233f8e605efca4bef384a7c603d53fdc385428bc Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_bicluster_newsgroups_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_birch_vs_minibatchkmeans_thumb.png b/docs/examples/img/sphx_glr_plot_birch_vs_minibatchkmeans_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..d1667b3e7afeb41a1ba673cbd38d27514860a049 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_birch_vs_minibatchkmeans_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_caching_nearest_neighbors_thumb.png b/docs/examples/img/sphx_glr_plot_caching_nearest_neighbors_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..5d28500499d65cbd0960fb0eedc732a8568c4ce4 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_caching_nearest_neighbors_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_calibration_curve_thumb.png b/docs/examples/img/sphx_glr_plot_calibration_curve_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..d4386bb896c7835512253d579ac7e79e2d6f0b8a Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_calibration_curve_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_calibration_multiclass_thumb.png b/docs/examples/img/sphx_glr_plot_calibration_multiclass_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..70fa4a2fb971fb34baf447e8349115b2ce642231 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_calibration_multiclass_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_calibration_thumb.png b/docs/examples/img/sphx_glr_plot_calibration_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..decc9d2f88b74ca18a62a79c27f7bdaef818805a Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_calibration_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_changed_only_pprint_parameter_thumb.png b/docs/examples/img/sphx_glr_plot_changed_only_pprint_parameter_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..233f8e605efca4bef384a7c603d53fdc385428bc Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_changed_only_pprint_parameter_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_classification_probability_thumb.png b/docs/examples/img/sphx_glr_plot_classification_probability_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..de3abf9924034aa8af8ad8bee2d6e078a622a524 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_classification_probability_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_classification_thumb.png b/docs/examples/img/sphx_glr_plot_classification_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..08fed406b3223b54ed1324cb2af89038b9436796 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_classification_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_classifier_chain_yeast_thumb.png b/docs/examples/img/sphx_glr_plot_classifier_chain_yeast_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..cd89e51b5836c7f4bb365c24e88e716b97a8e10f Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_classifier_chain_yeast_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_classifier_comparison_thumb.png b/docs/examples/img/sphx_glr_plot_classifier_comparison_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..38d8879cf85fd17a99435a5b4abb1382c77e8ff8 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_classifier_comparison_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_cluster_comparison_thumb.png b/docs/examples/img/sphx_glr_plot_cluster_comparison_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..9d66fee1e13d281caff88a630e923b02693a24f7 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_cluster_comparison_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_cluster_iris_thumb.png b/docs/examples/img/sphx_glr_plot_cluster_iris_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..ab5cc7b18e39ee5c5e5a08cc98329c033f1e5364 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_cluster_iris_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_coin_segmentation_thumb.png b/docs/examples/img/sphx_glr_plot_coin_segmentation_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..40d1df3212cda099b9dfeb4137d6bfdfb2ce8d4e Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_coin_segmentation_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_coin_ward_segmentation_thumb.png b/docs/examples/img/sphx_glr_plot_coin_ward_segmentation_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..9a20375a1e084daa751a8b3e3809b9a39917be2e Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_coin_ward_segmentation_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_color_quantization_thumb.png b/docs/examples/img/sphx_glr_plot_color_quantization_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..1ad2435ac1f448c109082dc39d9938e8a1e1bd17 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_color_quantization_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_column_transformer_mixed_types_thumb.png b/docs/examples/img/sphx_glr_plot_column_transformer_mixed_types_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..233f8e605efca4bef384a7c603d53fdc385428bc Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_column_transformer_mixed_types_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_column_transformer_thumb.png b/docs/examples/img/sphx_glr_plot_column_transformer_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..233f8e605efca4bef384a7c603d53fdc385428bc Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_column_transformer_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_compare_calibration_thumb.png b/docs/examples/img/sphx_glr_plot_compare_calibration_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..3b8251ef21ad5adb0d8f25412c3c05f1986862e3 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_compare_calibration_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_compare_cross_decomposition_thumb.png b/docs/examples/img/sphx_glr_plot_compare_cross_decomposition_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..b398f0b50ec3916dc171ac247f42bca49aa66de8 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_compare_cross_decomposition_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_compare_gpr_krr_thumb.png b/docs/examples/img/sphx_glr_plot_compare_gpr_krr_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..ac9f67fef5cc4ad4395713eb2ecbdb78d598df33 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_compare_gpr_krr_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_compare_methods_thumb.png b/docs/examples/img/sphx_glr_plot_compare_methods_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..29b889cc907538ec97a62bfc747bb02cc77cc2a1 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_compare_methods_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_compare_reduction_thumb.png b/docs/examples/img/sphx_glr_plot_compare_reduction_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..302045c1940cd149ce3f0e27cbcc7cb5adcbd44d Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_compare_reduction_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_concentration_prior_thumb.png b/docs/examples/img/sphx_glr_plot_concentration_prior_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..05809460509b293b0bb6e1b62cb9b01848109d82 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_concentration_prior_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_confusion_matrix_thumb.png b/docs/examples/img/sphx_glr_plot_confusion_matrix_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..e21b5fd5498c5d9e92c9caec38f049ecc3872fcc Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_confusion_matrix_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_cost_complexity_pruning_thumb.png b/docs/examples/img/sphx_glr_plot_cost_complexity_pruning_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..e00c257c5cee4d2e5502704dd8b77325754522ca Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_cost_complexity_pruning_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_covariance_estimation_thumb.png b/docs/examples/img/sphx_glr_plot_covariance_estimation_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..d0a8816c1cd7f08120523ecfabd8e4f78a943914 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_covariance_estimation_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_custom_kernel_thumb.png b/docs/examples/img/sphx_glr_plot_custom_kernel_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..75c396936d97cf1b61059c0496e81b11092b4122 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_custom_kernel_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_cv_diabetes_thumb.png b/docs/examples/img/sphx_glr_plot_cv_diabetes_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..ed2639aa83c6c075b68f3fb7900a8fa2bd7b8855 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_cv_diabetes_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_cv_digits_thumb.png b/docs/examples/img/sphx_glr_plot_cv_digits_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..0a2c6e05bb9d1548debbfc95811b8676942cfa4e Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_cv_digits_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_cv_indices_thumb.png b/docs/examples/img/sphx_glr_plot_cv_indices_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..2f9c495eb5b699bc87d504737ebfab517be7d669 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_cv_indices_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_cv_predict_thumb.png b/docs/examples/img/sphx_glr_plot_cv_predict_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..4b180b09500690139b0f7873d91494a71a3ade7b Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_cv_predict_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_dbscan_thumb.png b/docs/examples/img/sphx_glr_plot_dbscan_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..aebb0df3c53529f7a7705a373311ed32dead95d8 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_dbscan_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_dict_face_patches_thumb.png b/docs/examples/img/sphx_glr_plot_dict_face_patches_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..068dff6583ca6261d6c3f5e78894227d8f2d6cf2 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_dict_face_patches_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_digits_agglomeration_thumb.png b/docs/examples/img/sphx_glr_plot_digits_agglomeration_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..7e7f5d5afcf97563e82711dfd5a3ebed8ee5f6a4 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_digits_agglomeration_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_digits_classification_exercise_thumb.png b/docs/examples/img/sphx_glr_plot_digits_classification_exercise_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..233f8e605efca4bef384a7c603d53fdc385428bc Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_digits_classification_exercise_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_digits_classification_thumb.png b/docs/examples/img/sphx_glr_plot_digits_classification_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..dd961b30d6f222bd766597acde1fa9d6a11e78d6 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_digits_classification_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_digits_kde_sampling_thumb.png b/docs/examples/img/sphx_glr_plot_digits_kde_sampling_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..927215fd48dcaff4d2e659ba933e949ad24ec962 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_digits_kde_sampling_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_digits_last_image_thumb.png b/docs/examples/img/sphx_glr_plot_digits_last_image_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..a46542d38d5f887cbdbfa0fba9535f7abe782681 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_digits_last_image_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_digits_linkage_thumb.png b/docs/examples/img/sphx_glr_plot_digits_linkage_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..8642091fcc203e2602c5dfab79dbd870228c7592 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_digits_linkage_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_digits_pipe_thumb.png b/docs/examples/img/sphx_glr_plot_digits_pipe_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..01ed6e0f422740e75b917017e0ef698ec6b4ca42 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_digits_pipe_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_discretization_classification_thumb.png b/docs/examples/img/sphx_glr_plot_discretization_classification_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..1c48381ad716a7d2550233d17fdc2844f4a9bc35 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_discretization_classification_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_discretization_strategies_thumb.png b/docs/examples/img/sphx_glr_plot_discretization_strategies_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..3868bed0ccd4507749d343797b29a36354b61b17 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_discretization_strategies_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_discretization_thumb.png b/docs/examples/img/sphx_glr_plot_discretization_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..549dfb16a7e816c968bcd72ad4e51b1fcce778e2 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_discretization_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_document_classification_20newsgroups_thumb.png b/docs/examples/img/sphx_glr_plot_document_classification_20newsgroups_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..6e6ddb96707cb81f4c114925775016050501ddbc Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_document_classification_20newsgroups_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_document_clustering_thumb.png b/docs/examples/img/sphx_glr_plot_document_clustering_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..233f8e605efca4bef384a7c603d53fdc385428bc Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_document_clustering_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_ensemble_oob_thumb.png b/docs/examples/img/sphx_glr_plot_ensemble_oob_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..e738b45ce0f377a5a7602e3daea69ec3b5bc7f3f Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_ensemble_oob_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_f_test_vs_mi_thumb.png b/docs/examples/img/sphx_glr_plot_f_test_vs_mi_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..38984f9d57f18dde44497a4621e06d76d7011335 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_f_test_vs_mi_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_face_compress_thumb.png b/docs/examples/img/sphx_glr_plot_face_compress_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..dd67e885191cde311859dbac7f67ade5cfa9ad11 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_face_compress_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_face_recognition_thumb.png b/docs/examples/img/sphx_glr_plot_face_recognition_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..6a17e476e63bf19244664b725e6db0af15c3833f Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_face_recognition_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_faces_decomposition_thumb.png b/docs/examples/img/sphx_glr_plot_faces_decomposition_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..701c6dea7b363e8d20176764e7a071dc0d0a60d5 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_faces_decomposition_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_feature_agglomeration_vs_univariate_selection_thumb.png b/docs/examples/img/sphx_glr_plot_feature_agglomeration_vs_univariate_selection_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..4bbd0cc6b785b22b6cd43b1786aa138ace357a43 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_feature_agglomeration_vs_univariate_selection_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_feature_selection_pipeline_thumb.png b/docs/examples/img/sphx_glr_plot_feature_selection_pipeline_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..233f8e605efca4bef384a7c603d53fdc385428bc Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_feature_selection_pipeline_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_feature_selection_thumb.png b/docs/examples/img/sphx_glr_plot_feature_selection_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..23420ad3cdc4643ac6e3fe00d5d0c30654a629c0 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_feature_selection_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_feature_transformation_thumb.png b/docs/examples/img/sphx_glr_plot_feature_transformation_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..882523e83040b1b7a4e65028c02e2bc685041a72 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_feature_transformation_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_feature_union_thumb.png b/docs/examples/img/sphx_glr_plot_feature_union_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..233f8e605efca4bef384a7c603d53fdc385428bc Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_feature_union_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_forest_importances_faces_thumb.png b/docs/examples/img/sphx_glr_plot_forest_importances_faces_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..63ef2cdbde99b0866fbf4878e28d5abc25ac8a93 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_forest_importances_faces_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_forest_importances_thumb.png b/docs/examples/img/sphx_glr_plot_forest_importances_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..af39060726db807f975db44e6eb455a3afb4012f Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_forest_importances_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_forest_iris_thumb.png b/docs/examples/img/sphx_glr_plot_forest_iris_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..cd8797135f6d7949b0f1cdf6a107e0ad27647fd6 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_forest_iris_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_function_transformer_thumb.png b/docs/examples/img/sphx_glr_plot_function_transformer_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..3c7b3ae4f6a6bf0b7569bfe8328de2b0cd580603 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_function_transformer_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_gmm_covariances_thumb.png b/docs/examples/img/sphx_glr_plot_gmm_covariances_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..153c324f1a65159d673ea8d05fed5f2ad68e53a3 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_gmm_covariances_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_gmm_pdf_thumb.png b/docs/examples/img/sphx_glr_plot_gmm_pdf_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..d7955e0e1446ab624a91d83c6fcade20745d1cea Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_gmm_pdf_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_gmm_selection_thumb.png b/docs/examples/img/sphx_glr_plot_gmm_selection_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..e96048d80eaff8aebf058027222048d7ce28a44d Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_gmm_selection_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_gmm_sin_thumb.png b/docs/examples/img/sphx_glr_plot_gmm_sin_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..24aeefd5dc254701ef12de744dd139168772cf53 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_gmm_sin_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_gmm_thumb.png b/docs/examples/img/sphx_glr_plot_gmm_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..49a0c9f8d968243bc74e62b15673212a3d7e1c95 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_gmm_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_gpc_iris_thumb.png b/docs/examples/img/sphx_glr_plot_gpc_iris_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..cfcb317db5c870966f0ea5caefb726c7c8002f6c Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_gpc_iris_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_gpc_isoprobability_thumb.png b/docs/examples/img/sphx_glr_plot_gpc_isoprobability_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..10afd810f89f81b078530be73dc90dfc1bffe83e Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_gpc_isoprobability_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_gpc_thumb.png b/docs/examples/img/sphx_glr_plot_gpc_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..b813da2510c7043f143ef5634d351cfa0116c249 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_gpc_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_gpc_xor_thumb.png b/docs/examples/img/sphx_glr_plot_gpc_xor_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..fc04caa2ccc83433cc77a21524af40d4d99be8f0 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_gpc_xor_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_gpr_co2_thumb.png b/docs/examples/img/sphx_glr_plot_gpr_co2_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..bb96de9b8e26552dfd39ba64b55f575fa1eb4500 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_gpr_co2_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_gpr_noisy_targets_thumb.png b/docs/examples/img/sphx_glr_plot_gpr_noisy_targets_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..23ad2ff697f904d8fce0cba796df5b3db8f96186 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_gpr_noisy_targets_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_gpr_noisy_thumb.png b/docs/examples/img/sphx_glr_plot_gpr_noisy_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..11e036583e33bb9244311dae2f4c560e0e7de59d Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_gpr_noisy_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_gpr_on_structured_data_thumb.png b/docs/examples/img/sphx_glr_plot_gpr_on_structured_data_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..86a03b7ef8d3192278f64a84ef8a49f88f753d35 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_gpr_on_structured_data_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_gpr_prior_posterior_thumb.png b/docs/examples/img/sphx_glr_plot_gpr_prior_posterior_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..7ed40d2766fd9ba86c851ef0c810ad4477a26b0a Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_gpr_prior_posterior_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_gradient_boosting_early_stopping_thumb.png b/docs/examples/img/sphx_glr_plot_gradient_boosting_early_stopping_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..325316c326427254d74a02161686ef698f2cb9a7 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_gradient_boosting_early_stopping_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_gradient_boosting_oob_thumb.png b/docs/examples/img/sphx_glr_plot_gradient_boosting_oob_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..d8b2e419750c14b39ec71cb926cdb02dd44f34b0 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_gradient_boosting_oob_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_gradient_boosting_quantile_thumb.png b/docs/examples/img/sphx_glr_plot_gradient_boosting_quantile_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..1a8e44458d3a799dd92168e6d730612103ff6351 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_gradient_boosting_quantile_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_gradient_boosting_regression_thumb.png b/docs/examples/img/sphx_glr_plot_gradient_boosting_regression_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..9874bcef20cb397dc8c5ec3a8c35b702cfa4f1e4 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_gradient_boosting_regression_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_gradient_boosting_regularization_thumb.png b/docs/examples/img/sphx_glr_plot_gradient_boosting_regularization_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..771ab7b79c6c756a1b9561740b8f0bedc0a3a4b4 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_gradient_boosting_regularization_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_grid_search_digits_thumb.png b/docs/examples/img/sphx_glr_plot_grid_search_digits_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..233f8e605efca4bef384a7c603d53fdc385428bc Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_grid_search_digits_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_grid_search_refit_callable_thumb.png b/docs/examples/img/sphx_glr_plot_grid_search_refit_callable_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..4164c79e2124a41eb58587249042a97d1a1f7af4 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_grid_search_refit_callable_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_hashing_vs_dict_vectorizer_thumb.png b/docs/examples/img/sphx_glr_plot_hashing_vs_dict_vectorizer_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..233f8e605efca4bef384a7c603d53fdc385428bc Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_hashing_vs_dict_vectorizer_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_huber_vs_ridge_thumb.png b/docs/examples/img/sphx_glr_plot_huber_vs_ridge_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..21677a96fa44262d07069c42d6e3602a6ff99f57 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_huber_vs_ridge_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_ica_blind_source_separation_thumb.png b/docs/examples/img/sphx_glr_plot_ica_blind_source_separation_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..66f890d7bcf00389711db036e007ffa4a75c218b Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_ica_blind_source_separation_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_ica_vs_pca_thumb.png b/docs/examples/img/sphx_glr_plot_ica_vs_pca_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..b1d19d040ab4dbc3810062aa6b60a1a1654536c0 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_ica_vs_pca_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_image_denoising_thumb.png b/docs/examples/img/sphx_glr_plot_image_denoising_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..c497e6fde69745428a3f72d0cbe1608b68aad2ea Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_image_denoising_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_incremental_pca_thumb.png b/docs/examples/img/sphx_glr_plot_incremental_pca_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..e63e447690eb0a518b8af0ffd3d54ffe2c3456fb Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_incremental_pca_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_inductive_clustering_thumb.png b/docs/examples/img/sphx_glr_plot_inductive_clustering_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..7269d6fc0691f7109e308768679684d5f6adaa17 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_inductive_clustering_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_iris_dataset_thumb.png b/docs/examples/img/sphx_glr_plot_iris_dataset_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..b22c9f69d9394eb69b3b559def81e22f15b55412 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_iris_dataset_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_iris_dtc_thumb.png b/docs/examples/img/sphx_glr_plot_iris_dtc_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..ed8d8dd546df73bcf2af8bb3678e3d452d219c8b Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_iris_dtc_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_iris_exercise_thumb.png b/docs/examples/img/sphx_glr_plot_iris_exercise_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..cd0216e41b4e3604f58bc3fc70c92b5f1a39613d Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_iris_exercise_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_iris_logistic_thumb.png b/docs/examples/img/sphx_glr_plot_iris_logistic_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..67d0f7e0b0d0ebec481ed8eb6d34828c76b561fd Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_iris_logistic_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_iris_svc_thumb.png b/docs/examples/img/sphx_glr_plot_iris_svc_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..dc150816d5b24d5454d4cac1a01a1688185a879a Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_iris_svc_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_isolation_forest_thumb.png b/docs/examples/img/sphx_glr_plot_isolation_forest_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..a0523ac16974d9a700d4a43264d2a67dbb61f05f Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_isolation_forest_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_isotonic_regression_thumb.png b/docs/examples/img/sphx_glr_plot_isotonic_regression_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..6c5ba2703466228106116c3ed9cd075c9d466b83 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_isotonic_regression_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_iterative_imputer_variants_comparison_thumb.png b/docs/examples/img/sphx_glr_plot_iterative_imputer_variants_comparison_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..564a11d277d91f1affd83022a1f8797a82323a53 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_iterative_imputer_variants_comparison_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_johnson_lindenstrauss_bound_thumb.png b/docs/examples/img/sphx_glr_plot_johnson_lindenstrauss_bound_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..4d2cd323b0dca4a75bb884d9bfee74563da6fdd2 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_johnson_lindenstrauss_bound_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_kde_1d_thumb.png b/docs/examples/img/sphx_glr_plot_kde_1d_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..5bae1626edc9d6df113752fdb3a51b63897dfd17 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_kde_1d_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_kernel_approximation_thumb.png b/docs/examples/img/sphx_glr_plot_kernel_approximation_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..5bb6af0ce99ebc2b59afcc6bb8f1c97e75b3f240 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_kernel_approximation_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_kernel_pca_thumb.png b/docs/examples/img/sphx_glr_plot_kernel_pca_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..2de92ef784e12444a58b5a25e08b75bd0ea77e9a Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_kernel_pca_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_kernel_ridge_regression_thumb.png b/docs/examples/img/sphx_glr_plot_kernel_ridge_regression_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..7f8bd3c27cc72978c441a9262d51cf9f74577954 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_kernel_ridge_regression_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_kmeans_assumptions_thumb.png b/docs/examples/img/sphx_glr_plot_kmeans_assumptions_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..6a59b0ffc33ae7edfacf158dd21a1ea7f39d1f72 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_kmeans_assumptions_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_kmeans_digits_thumb.png b/docs/examples/img/sphx_glr_plot_kmeans_digits_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..7634fe3075c420d91d43194bd5267a9813f7ef44 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_kmeans_digits_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_kmeans_silhouette_analysis_thumb.png b/docs/examples/img/sphx_glr_plot_kmeans_silhouette_analysis_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..fa9f113bb3871f46a95aaf1a18786c0201138ddd Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_kmeans_silhouette_analysis_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_kmeans_stability_low_dim_dense_thumb.png b/docs/examples/img/sphx_glr_plot_kmeans_stability_low_dim_dense_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..530972f3f15c600149e9c84c36e50352b3f39e1e Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_kmeans_stability_low_dim_dense_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_label_propagation_digits_active_learning_thumb.png b/docs/examples/img/sphx_glr_plot_label_propagation_digits_active_learning_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..c6c334a222391581e09a52cf5d6a2b29ab30bc07 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_label_propagation_digits_active_learning_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_label_propagation_digits_thumb.png b/docs/examples/img/sphx_glr_plot_label_propagation_digits_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..36e00b3d61a951447d98f1ab324a554cf060e4cf Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_label_propagation_digits_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_label_propagation_structure_thumb.png b/docs/examples/img/sphx_glr_plot_label_propagation_structure_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..d26a4886d8b9dbf09fbb86de8e9666b2f88243a2 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_label_propagation_structure_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_label_propagation_versus_svm_iris_thumb.png b/docs/examples/img/sphx_glr_plot_label_propagation_versus_svm_iris_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..90d78b971c6084c9f08f8f03ce051232c7f3a7b0 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_label_propagation_versus_svm_iris_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_lasso_and_elasticnet_thumb.png b/docs/examples/img/sphx_glr_plot_lasso_and_elasticnet_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..1674d26b3aa73d18998b09e74287cca307c4212d Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_lasso_and_elasticnet_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_lasso_coordinate_descent_path_thumb.png b/docs/examples/img/sphx_glr_plot_lasso_coordinate_descent_path_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..adb62b91c9a4fc971db9eb76e05cec1894691b2b Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_lasso_coordinate_descent_path_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_lasso_dense_vs_sparse_data_thumb.png b/docs/examples/img/sphx_glr_plot_lasso_dense_vs_sparse_data_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..233f8e605efca4bef384a7c603d53fdc385428bc Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_lasso_dense_vs_sparse_data_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_lasso_lars_thumb.png b/docs/examples/img/sphx_glr_plot_lasso_lars_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..ad09b52186b40d59dd0a15a4d695420aa7256c19 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_lasso_lars_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_lasso_model_selection_thumb.png b/docs/examples/img/sphx_glr_plot_lasso_model_selection_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..980cca4f94a75f6349f68f157c109671a0ef9eb2 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_lasso_model_selection_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_lda_qda_thumb.png b/docs/examples/img/sphx_glr_plot_lda_qda_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..bb769aee62ca809d8d2c31438e37b49ab8a766a5 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_lda_qda_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_lda_thumb.png b/docs/examples/img/sphx_glr_plot_lda_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..4c5ff5806cf0e27091603d78cab8699acd95e050 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_lda_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_learning_curve_thumb.png b/docs/examples/img/sphx_glr_plot_learning_curve_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..f35f22016de01d5c6704af783f6aca469215d75a Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_learning_curve_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_linearsvc_support_vectors_thumb.png b/docs/examples/img/sphx_glr_plot_linearsvc_support_vectors_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..c43516c90ba1db00d967db9222aa5ae483c0d5e3 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_linearsvc_support_vectors_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_linkage_comparison_thumb.png b/docs/examples/img/sphx_glr_plot_linkage_comparison_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..8c491bca44e110779ca501872ccdec9983ae0774 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_linkage_comparison_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_lle_digits_thumb.png b/docs/examples/img/sphx_glr_plot_lle_digits_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..f36ee7ca9af28aeee1898b6815c2f5979487edb5 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_lle_digits_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_lof_novelty_detection_thumb.png b/docs/examples/img/sphx_glr_plot_lof_novelty_detection_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..622f2b373a69ec922ae98eaf5bb2d9cd014d4ad9 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_lof_novelty_detection_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_lof_outlier_detection_thumb.png b/docs/examples/img/sphx_glr_plot_lof_outlier_detection_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..b91a183262e6d9039f5c67dc1d772e5082188acd Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_lof_outlier_detection_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_logistic_l1_l2_sparsity_thumb.png b/docs/examples/img/sphx_glr_plot_logistic_l1_l2_sparsity_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..be2ef27d77c55c9ccf5953970e574010a7a9d0ef Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_logistic_l1_l2_sparsity_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_logistic_multinomial_thumb.png b/docs/examples/img/sphx_glr_plot_logistic_multinomial_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..9dc422957ae0cc1ae3743b394421d88c9b87d858 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_logistic_multinomial_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_logistic_path_thumb.png b/docs/examples/img/sphx_glr_plot_logistic_path_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..b96aefc9a81a6655e959dd3640d77530cfb2c4d8 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_logistic_path_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_logistic_thumb.png b/docs/examples/img/sphx_glr_plot_logistic_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..2633a8fa94dd4a56d7e0476cf864518cbeb54324 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_logistic_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_lw_vs_oas_thumb.png b/docs/examples/img/sphx_glr_plot_lw_vs_oas_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..ee81463836001da819ef69510e6941ea433dbe35 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_lw_vs_oas_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_mahalanobis_distances_thumb.png b/docs/examples/img/sphx_glr_plot_mahalanobis_distances_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..394fb5125265a03ae05ced86a3256bacd45745a3 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_mahalanobis_distances_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_manifold_sphere_thumb.png b/docs/examples/img/sphx_glr_plot_manifold_sphere_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..18ae046d030d22e83a966354458f1adae540de3b Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_manifold_sphere_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_map_data_to_normal_thumb.png b/docs/examples/img/sphx_glr_plot_map_data_to_normal_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..d3a4ae5ed1594085b87fc22ea81051967013a9ea Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_map_data_to_normal_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_mds_thumb.png b/docs/examples/img/sphx_glr_plot_mds_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..4116455782fcb292f48baee2e078ff2ba50a6b79 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_mds_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_mean_shift_thumb.png b/docs/examples/img/sphx_glr_plot_mean_shift_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..333c647391fc5b159ebad0a0e1379db75b788b51 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_mean_shift_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_mini_batch_kmeans_thumb.png b/docs/examples/img/sphx_glr_plot_mini_batch_kmeans_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..d7eed860d747868541ee2059ca619223ef03726b Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_mini_batch_kmeans_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_missing_values_thumb.png b/docs/examples/img/sphx_glr_plot_missing_values_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..3a3599d45b17695f06635ffc0e7cc3ee7b241daf Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_missing_values_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_mlp_alpha_thumb.png b/docs/examples/img/sphx_glr_plot_mlp_alpha_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..1f5ec3c6fdd813c8c2c44bf663c98129e8cbc757 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_mlp_alpha_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_mlp_training_curves_thumb.png b/docs/examples/img/sphx_glr_plot_mlp_training_curves_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..8f2f4e9ea8031b254957b6ffdef220792a199fb9 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_mlp_training_curves_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_mnist_filters_thumb.png b/docs/examples/img/sphx_glr_plot_mnist_filters_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..368075d47bb2c43151379b998cf40a1e7fe3006b Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_mnist_filters_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_model_complexity_influence_thumb.png b/docs/examples/img/sphx_glr_plot_model_complexity_influence_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..069af3bd0c76072aec50393d5b67daf19ea4f146 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_model_complexity_influence_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_multi_metric_evaluation_thumb.png b/docs/examples/img/sphx_glr_plot_multi_metric_evaluation_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..55ca18c874ef3a5aad28df27f8fc648eef5f1de5 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_multi_metric_evaluation_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_multi_task_lasso_support_thumb.png b/docs/examples/img/sphx_glr_plot_multi_task_lasso_support_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..4ad233dd944fa21304e123bf3344a512f2c03fb3 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_multi_task_lasso_support_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_multilabel_thumb.png b/docs/examples/img/sphx_glr_plot_multilabel_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..829f7c0d2b3ce752aad6e66cd5dbce52b64efd0d Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_multilabel_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_multioutput_face_completion_thumb.png b/docs/examples/img/sphx_glr_plot_multioutput_face_completion_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..2720915d91c9022a0bc2315ba69093006503c170 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_multioutput_face_completion_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_nca_classification_thumb.png b/docs/examples/img/sphx_glr_plot_nca_classification_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..58021270374b2de4a869a07b57760927b29f7ba6 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_nca_classification_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_nca_dim_reduction_thumb.png b/docs/examples/img/sphx_glr_plot_nca_dim_reduction_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..b8fa51b3557440dfdec3301becc7a921e8ad3902 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_nca_dim_reduction_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_nca_illustration_thumb.png b/docs/examples/img/sphx_glr_plot_nca_illustration_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..25f17a9dd655bbd83395316fd3ac239856ffe384 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_nca_illustration_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_nearest_centroid_thumb.png b/docs/examples/img/sphx_glr_plot_nearest_centroid_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..802f0100b8d637042d0783f467d6029c384801d5 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_nearest_centroid_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_nested_cross_validation_iris_thumb.png b/docs/examples/img/sphx_glr_plot_nested_cross_validation_iris_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..01b822eea88bf5507c4147a1e40f26e179511584 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_nested_cross_validation_iris_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_ols_3d_thumb.png b/docs/examples/img/sphx_glr_plot_ols_3d_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..1ce299fc0e6c3a604d412f3355907b1a967c2d65 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_ols_3d_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_ols_ridge_variance_thumb.png b/docs/examples/img/sphx_glr_plot_ols_ridge_variance_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..b458d6a8b1ad9ab76ed55aa461201ca0372eb771 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_ols_ridge_variance_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_ols_thumb.png b/docs/examples/img/sphx_glr_plot_ols_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..14d80e3bcd1022c42c9c9bb43ccdb49cad477c21 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_ols_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_omp_thumb.png b/docs/examples/img/sphx_glr_plot_omp_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..c9817bcd44f0bafc1f06f87441cbda03f5e3442a Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_omp_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_oneclass_thumb.png b/docs/examples/img/sphx_glr_plot_oneclass_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..b9863211be896cdfe058abfd304d31d5b469475f Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_oneclass_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_optics_thumb.png b/docs/examples/img/sphx_glr_plot_optics_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..226926b461523164b6d01272088307c0eba60e14 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_optics_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_out_of_core_classification_thumb.png b/docs/examples/img/sphx_glr_plot_out_of_core_classification_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..7350b57aba370f9d6a1bc9c47b43f88b247d121f Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_out_of_core_classification_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_outlier_detection_housing_thumb.png b/docs/examples/img/sphx_glr_plot_outlier_detection_housing_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..3b292f56101bc17326f8da9642df02f4a9aa9d21 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_outlier_detection_housing_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_partial_dependence_thumb.png b/docs/examples/img/sphx_glr_plot_partial_dependence_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..ff2d4765ad31dcf75320c83282872b833bc61bfc Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_partial_dependence_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_partial_dependence_visualization_api_thumb.png b/docs/examples/img/sphx_glr_plot_partial_dependence_visualization_api_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1112ea9d550bcf7cca8ea81aa1a3b2c7b17067 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_partial_dependence_visualization_api_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_pca_3d_thumb.png b/docs/examples/img/sphx_glr_plot_pca_3d_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..9fbef10a0b6edeb476e47343db56a9d90d1b30e8 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_pca_3d_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_pca_iris_thumb.png b/docs/examples/img/sphx_glr_plot_pca_iris_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..2ab9be6b56291eea45d02c91832c9b2b792b798e Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_pca_iris_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_pca_vs_fa_model_selection_thumb.png b/docs/examples/img/sphx_glr_plot_pca_vs_fa_model_selection_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..ac2ddad3a66f0314bcd7274c29e0c43d4300d43e Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_pca_vs_fa_model_selection_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_pca_vs_lda_thumb.png b/docs/examples/img/sphx_glr_plot_pca_vs_lda_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..0e396c0ec4c73ecbe9a5700140108bca668e9c7f Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_pca_vs_lda_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_permutation_importance_multicollinear_thumb.png b/docs/examples/img/sphx_glr_plot_permutation_importance_multicollinear_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..fc0e7cc6a904edf7d97dabcde5fb8817776a0b2e Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_permutation_importance_multicollinear_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_permutation_importance_thumb.png b/docs/examples/img/sphx_glr_plot_permutation_importance_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..d455540e15eb039164a13f5f42a2afcc0fbdbe59 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_permutation_importance_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_permutation_test_for_classification_thumb.png b/docs/examples/img/sphx_glr_plot_permutation_test_for_classification_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..4fc67f21920d17935215c815d10d65197e802df5 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_permutation_test_for_classification_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_polynomial_interpolation_thumb.png b/docs/examples/img/sphx_glr_plot_polynomial_interpolation_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..4a74fea3ff6add092f2fb3fa75c7bb3596132006 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_polynomial_interpolation_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_precision_recall_thumb.png b/docs/examples/img/sphx_glr_plot_precision_recall_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..ab9bdb40f730fb75caf00697cb87be17a3299552 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_precision_recall_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_prediction_latency_thumb.png b/docs/examples/img/sphx_glr_plot_prediction_latency_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..aa362d325d291774ca8c56027d170129f45330bc Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_prediction_latency_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_random_dataset_thumb.png b/docs/examples/img/sphx_glr_plot_random_dataset_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..1b74d10ed2c615399cd518914c6356104443e8a6 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_random_dataset_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_random_forest_embedding_thumb.png b/docs/examples/img/sphx_glr_plot_random_forest_embedding_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..7864b1a9428ba49b9957fca26b871317b1325257 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_random_forest_embedding_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_random_forest_regression_multioutput_thumb.png b/docs/examples/img/sphx_glr_plot_random_forest_regression_multioutput_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..dcbebf114d6612d03d38f52d8caf0895c20a91e1 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_random_forest_regression_multioutput_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_random_multilabel_dataset_thumb.png b/docs/examples/img/sphx_glr_plot_random_multilabel_dataset_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..a34a626d2e07024fa993137871ae0a486b37bb64 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_random_multilabel_dataset_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_randomized_search_thumb.png b/docs/examples/img/sphx_glr_plot_randomized_search_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..233f8e605efca4bef384a7c603d53fdc385428bc Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_randomized_search_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_ransac_thumb.png b/docs/examples/img/sphx_glr_plot_ransac_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..96b896df4d2435742d2be086d3052252f1f45980 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_ransac_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_rbf_parameters_thumb.png b/docs/examples/img/sphx_glr_plot_rbf_parameters_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..0c34175d66a5e5b0b041cd9b6779fd5100c25da6 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_rbf_parameters_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_rbm_logistic_classification_thumb.png b/docs/examples/img/sphx_glr_plot_rbm_logistic_classification_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..f06b324464f44f976e64d405baa62306322f2584 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_rbm_logistic_classification_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_regression_thumb.png b/docs/examples/img/sphx_glr_plot_regression_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..b93ecd5b95f863a49b5424581800a478ec0c10fd Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_regression_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_release_highlights_0_22_0_thumb.png b/docs/examples/img/sphx_glr_plot_release_highlights_0_22_0_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..fea50acc56fbb54cb9f5e1ab7a515de6ae56f383 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_release_highlights_0_22_0_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_rfe_digits_thumb.png b/docs/examples/img/sphx_glr_plot_rfe_digits_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..94615a1e696b4db88bdfbed7ea76512ca8dfb37f Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_rfe_digits_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_rfe_with_cross_validation_thumb.png b/docs/examples/img/sphx_glr_plot_rfe_with_cross_validation_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..a9f9159fffc7b82d4e8231a9352b5f967a8173c4 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_rfe_with_cross_validation_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_ridge_coeffs_thumb.png b/docs/examples/img/sphx_glr_plot_ridge_coeffs_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..79afe1bcbe259a5e5e26a1f5ed67a18c60c3fe3c Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_ridge_coeffs_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_ridge_path_thumb.png b/docs/examples/img/sphx_glr_plot_ridge_path_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..67ece6e3bd54583f8968cccae3ebafeb81c7daba Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_ridge_path_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_robust_fit_thumb.png b/docs/examples/img/sphx_glr_plot_robust_fit_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..eacc59ef60a919900cb693839638de78abded63d Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_robust_fit_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_robust_vs_empirical_covariance_thumb.png b/docs/examples/img/sphx_glr_plot_robust_vs_empirical_covariance_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..1940e52de93e48d0498e2bd242b46e1be20b2698 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_robust_vs_empirical_covariance_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_roc_crossval_thumb.png b/docs/examples/img/sphx_glr_plot_roc_crossval_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..005dedd3400c66784b06638cd408ed1184ee57df Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_roc_crossval_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_roc_curve_visualization_api_thumb.png b/docs/examples/img/sphx_glr_plot_roc_curve_visualization_api_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..0af1c7ebbb635a81cfce5e0ed1d56252ae31aea2 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_roc_curve_visualization_api_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_roc_thumb.png b/docs/examples/img/sphx_glr_plot_roc_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..15edc621e2d5ae98002e1f73561d3d07cae66f8b Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_roc_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_scaling_importance_thumb.png b/docs/examples/img/sphx_glr_plot_scaling_importance_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..efe09600c81d7a04d2869a989090b189ea03d1b2 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_scaling_importance_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_segmentation_toy_thumb.png b/docs/examples/img/sphx_glr_plot_segmentation_toy_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..20c4f2e78523ec3fec9b88f663db128b7dab0713 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_segmentation_toy_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_select_from_model_boston_thumb.png b/docs/examples/img/sphx_glr_plot_select_from_model_boston_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..3b1b080ad6bd70c544e16bcb0f855ad296202972 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_select_from_model_boston_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_separating_hyperplane_thumb.png b/docs/examples/img/sphx_glr_plot_separating_hyperplane_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..6094f648b3ef6ebfbaad3472561fa62a2db66e05 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_separating_hyperplane_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_separating_hyperplane_unbalanced_thumb.png b/docs/examples/img/sphx_glr_plot_separating_hyperplane_unbalanced_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..c3f4f3c1ffb8f9aec9d52639475d4f9156167db3 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_separating_hyperplane_unbalanced_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_sgd_comparison_thumb.png b/docs/examples/img/sphx_glr_plot_sgd_comparison_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..0bba5579e4ee7bfdadd3cc40f586f87432454a77 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_sgd_comparison_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_sgd_early_stopping_thumb.png b/docs/examples/img/sphx_glr_plot_sgd_early_stopping_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..8cb8b7782cc446d30c089080f1724549dc0668bd Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_sgd_early_stopping_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_sgd_iris_thumb.png b/docs/examples/img/sphx_glr_plot_sgd_iris_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..b9d54404655d9be602cebca6fbc77f85c845d8e6 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_sgd_iris_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_sgd_loss_functions_thumb.png b/docs/examples/img/sphx_glr_plot_sgd_loss_functions_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..8a159d48d7b137f09f274f1b6354c4943f35a7d0 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_sgd_loss_functions_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_sgd_penalties_thumb.png b/docs/examples/img/sphx_glr_plot_sgd_penalties_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..1fe223b5b5b0f3012bbb011ee2de5e5094e976b7 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_sgd_penalties_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_sgd_separating_hyperplane_thumb.png b/docs/examples/img/sphx_glr_plot_sgd_separating_hyperplane_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..dba4d2235e909427d6af2f3ecfdf8f8dec12410e Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_sgd_separating_hyperplane_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_sgd_weighted_samples_thumb.png b/docs/examples/img/sphx_glr_plot_sgd_weighted_samples_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..dc730fb14ff2213ab90746efbd8eeb729616f4ed Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_sgd_weighted_samples_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_sparse_coding_thumb.png b/docs/examples/img/sphx_glr_plot_sparse_coding_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..1ceae13f5645eab3db68a5a16078260d262916ab Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_sparse_coding_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_sparse_cov_thumb.png b/docs/examples/img/sphx_glr_plot_sparse_cov_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..f2c48ef890a84f9fe35e2f7f6b0f25cff249d538 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_sparse_cov_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_sparse_logistic_regression_20newsgroups_thumb.png b/docs/examples/img/sphx_glr_plot_sparse_logistic_regression_20newsgroups_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..2e753f53269b3fb446090f69760d94748004a3aa Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_sparse_logistic_regression_20newsgroups_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_sparse_logistic_regression_mnist_thumb.png b/docs/examples/img/sphx_glr_plot_sparse_logistic_regression_mnist_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..efb2ca24264610faa104de154057c663c3d214d5 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_sparse_logistic_regression_mnist_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_species_distribution_modeling_thumb.png b/docs/examples/img/sphx_glr_plot_species_distribution_modeling_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..ffa623e9a1185c1ae7a0d482f43034e9fa4f229e Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_species_distribution_modeling_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_species_kde_thumb.png b/docs/examples/img/sphx_glr_plot_species_kde_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..90bad1fc4db7e6569de0d933c5ea22960eca7305 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_species_kde_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_spectral_biclustering_thumb.png b/docs/examples/img/sphx_glr_plot_spectral_biclustering_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..29894b19c9a622a15b13cc13fa9e31e6e2c39a20 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_spectral_biclustering_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_spectral_coclustering_thumb.png b/docs/examples/img/sphx_glr_plot_spectral_coclustering_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..16f5f3f7fa8c6abb31a7839bee6c950b0240e6e9 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_spectral_coclustering_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_stack_predictors_thumb.png b/docs/examples/img/sphx_glr_plot_stack_predictors_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..0aca80052d592213871c6df58df71553ca84b910 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_stack_predictors_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_stock_market_thumb.png b/docs/examples/img/sphx_glr_plot_stock_market_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..55aaa8e283027b69a0d03af0feb196e22bd08d7c Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_stock_market_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_svm_anova_thumb.png b/docs/examples/img/sphx_glr_plot_svm_anova_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..4b776fc073b061fbf6c624da548df72802ab6451 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_svm_anova_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_svm_kernels_thumb.png b/docs/examples/img/sphx_glr_plot_svm_kernels_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..d2b3317bb365e22fb8c318383462178837c34fb5 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_svm_kernels_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_svm_margin_thumb.png b/docs/examples/img/sphx_glr_plot_svm_margin_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..8370bfb1fd6e47859c3b4b31fee26b21020d21a7 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_svm_margin_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_svm_nonlinear_thumb.png b/docs/examples/img/sphx_glr_plot_svm_nonlinear_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..3079513596a419857484e9bc90b88e6b8062b7b7 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_svm_nonlinear_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_svm_regression_thumb.png b/docs/examples/img/sphx_glr_plot_svm_regression_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..5fa8c66e1e077513a87a5cb7199389c3f1b8b908 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_svm_regression_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_svm_scale_c_thumb.png b/docs/examples/img/sphx_glr_plot_svm_scale_c_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..ba245c5cc88fb7980b335337c964bfeff2884b68 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_svm_scale_c_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_svm_tie_breaking_thumb.png b/docs/examples/img/sphx_glr_plot_svm_tie_breaking_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..cb74e592dd2eea529d08aa740fccfefc7deffd99 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_svm_tie_breaking_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_swissroll_thumb.png b/docs/examples/img/sphx_glr_plot_swissroll_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..40960976708b06ec225cbd2b13d50c2f2b990fa4 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_swissroll_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_t_sne_perplexity_thumb.png b/docs/examples/img/sphx_glr_plot_t_sne_perplexity_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..c104d575a8dc0f1c76563876b7bac5ffda16f909 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_t_sne_perplexity_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_theilsen_thumb.png b/docs/examples/img/sphx_glr_plot_theilsen_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..6e9b9906b50cf5eab25a212bab25f241c9fa4514 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_theilsen_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_tomography_l1_reconstruction_thumb.png b/docs/examples/img/sphx_glr_plot_tomography_l1_reconstruction_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..442d33f9a291fe1528f58f7d94026806093fc4bd Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_tomography_l1_reconstruction_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_topics_extraction_with_nmf_lda_thumb.png b/docs/examples/img/sphx_glr_plot_topics_extraction_with_nmf_lda_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..233f8e605efca4bef384a7c603d53fdc385428bc Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_topics_extraction_with_nmf_lda_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_train_error_vs_test_error_thumb.png b/docs/examples/img/sphx_glr_plot_train_error_vs_test_error_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..7c91851262dde19b1e11b20ab1976ebeea45ec4e Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_train_error_vs_test_error_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_transformed_target_thumb.png b/docs/examples/img/sphx_glr_plot_transformed_target_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..677e6e4ee4a954491144f1f13ce5c440fd46474e Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_transformed_target_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_tree_regression_multioutput_thumb.png b/docs/examples/img/sphx_glr_plot_tree_regression_multioutput_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..e8dc9d7df96886d8d3b5caaed5b996361a6bbac7 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_tree_regression_multioutput_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_tree_regression_thumb.png b/docs/examples/img/sphx_glr_plot_tree_regression_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..bafc1411bc5bbdeaf4449c37289148393a345ead Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_tree_regression_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_underfitting_overfitting_thumb.png b/docs/examples/img/sphx_glr_plot_underfitting_overfitting_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..a4e464c213c61792e2e5860dc8b017a280e3d838 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_underfitting_overfitting_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_unveil_tree_structure_thumb.png b/docs/examples/img/sphx_glr_plot_unveil_tree_structure_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..233f8e605efca4bef384a7c603d53fdc385428bc Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_unveil_tree_structure_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_validation_curve_thumb.png b/docs/examples/img/sphx_glr_plot_validation_curve_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..e6fd3a9159e3cca8cbb92f66950f53008855cfd9 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_validation_curve_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_voting_decision_regions_thumb.png b/docs/examples/img/sphx_glr_plot_voting_decision_regions_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f168d7381488af2c53cb1f2dfebeecaa490b2 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_voting_decision_regions_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_voting_probas_thumb.png b/docs/examples/img/sphx_glr_plot_voting_probas_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..1988282d30bed5aa1ea291abc2362575bec208ba Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_voting_probas_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_voting_regressor_thumb.png b/docs/examples/img/sphx_glr_plot_voting_regressor_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..a2f6632a3b0624d9d53433c4c787d34bf3b82a33 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_voting_regressor_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_ward_structured_vs_unstructured_thumb.png b/docs/examples/img/sphx_glr_plot_ward_structured_vs_unstructured_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..c9f7e056c40bcc128f7e06709ad05345fce9d202 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_ward_structured_vs_unstructured_thumb.png differ diff --git a/docs/examples/img/sphx_glr_plot_weighted_samples_thumb.png b/docs/examples/img/sphx_glr_plot_weighted_samples_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..46f083612fcb2e068f74a6a0254efa8eab7b5d60 Binary files /dev/null and b/docs/examples/img/sphx_glr_plot_weighted_samples_thumb.png differ diff --git a/docs/examples/img/sphx_glr_svm_gui_thumb.png b/docs/examples/img/sphx_glr_svm_gui_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..233f8e605efca4bef384a7c603d53fdc385428bc Binary files /dev/null and b/docs/examples/img/sphx_glr_svm_gui_thumb.png differ diff --git a/docs/examples/img/sphx_glr_wikipedia_principal_eigenvector_thumb.png b/docs/examples/img/sphx_glr_wikipedia_principal_eigenvector_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..233f8e605efca4bef384a7c603d53fdc385428bc Binary files /dev/null and b/docs/examples/img/sphx_glr_wikipedia_principal_eigenvector_thumb.png differ diff --git a/docs/img/scikit-learn-logo.png b/docs/img/scikit-learn-logo.png deleted file mode 100644 index a20d5256356aad04475e9f6cbb5b20a1f2ca3947..0000000000000000000000000000000000000000 Binary files a/docs/img/scikit-learn-logo.png and /dev/null differ diff --git a/docs/0.21.3/1.md b/docs/master/1.md similarity index 100% rename from docs/0.21.3/1.md rename to docs/master/1.md diff --git a/docs/0.21.3/10.md b/docs/master/10.md similarity index 100% rename from docs/0.21.3/10.md rename to docs/master/10.md diff --git a/docs/0.21.3/11.md b/docs/master/11.md similarity index 100% rename from docs/0.21.3/11.md rename to docs/master/11.md diff --git a/docs/0.21.3/12.md b/docs/master/12.md similarity index 100% rename from docs/0.21.3/12.md rename to docs/master/12.md diff --git a/docs/0.21.3/13.md b/docs/master/13.md similarity index 100% rename from docs/0.21.3/13.md rename to docs/master/13.md diff --git a/docs/0.21.3/14.md b/docs/master/14.md similarity index 100% rename from docs/0.21.3/14.md rename to docs/master/14.md diff --git a/docs/0.21.3/15.md b/docs/master/15.md similarity index 100% rename from docs/0.21.3/15.md rename to docs/master/15.md diff --git a/docs/0.21.3/16.md b/docs/master/16.md similarity index 100% rename from docs/0.21.3/16.md rename to docs/master/16.md diff --git a/docs/0.21.3/17.md b/docs/master/17.md similarity index 100% rename from docs/0.21.3/17.md rename to docs/master/17.md diff --git a/docs/master/18.md b/docs/master/18.md new file mode 100644 index 0000000000000000000000000000000000000000..2fd54c32224f2eb0df3f6e494d7003aaaf0afae9 --- /dev/null +++ b/docs/master/18.md @@ -0,0 +1,224 @@ +# 1.17. 神经网络模型(有监督) + +校验者: +        [@tiantian1412](https://github.com/tiantian1412) +        [@火星](https://github.com/apachecn/scikit-learn-doc-zh) +        [@Loopy](https://github.com/loopyme) +        [@N!no](https://github.com/lovelybuggies) +翻译者: +        [@A](https://github.com/apachecn/scikit-learn-doc-zh) + +>**警告** +> +>此实现不适用于大规模数据应用。 特别是 scikit-learn 不支持 GPU。如果想要提高运行速度并使用基于 GPU 的实现以及为构建深度学习架构提供更多灵活性的框架,请参阅 [Related Projects](https://scikit-learn.org/stable/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 对特征归一化很敏感。 + +克服这些缺点的方法请参阅 [实用使用技巧](#1178-实用技巧) 部分。 + +## 1.17.2. 分类 + + [`MLPClassifier`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html#sklearn.neural_network.MLPClassifier "sklearn.neural_network.MLPClassifier") 类实现了通过 [Backpropagation](http://ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithm) 进行训练的多层感知器(MLP)算法。 + +MLP 在两个数组上进行训练:大小为 (n_samples, n_features) 的数组 X,用来储存表示训练样本的浮点型特征向量; 大小为 (n_samples,) 的数组 y,用来储存训练样本的目标值(类别标签): + +```python +>>> 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(alpha=1e-05, hidden_layer_sizes=(5, 2), random_state=1, + solver='lbfgs') +``` + +拟合(训练)后,该模型可以预测新样本的标签: + +```python +>>> clf.predict([[2., 2.], [-1., -2.]]) +array([1, 0]) +``` + +MLP 可以为训练数据拟合一个非线性模型。 `clf.coefs_` 包含了构成模型参数的权值矩阵: + +```python +>>> [coef.shape for coef in clf.coefs_] +[(2, 5), (5, 2), (2, 1)] +``` + +目前, [`MLPClassifier`](https://scikit-learn.org/stable/modules/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): + +```python +>>> clf.predict_proba([[2., 2.], [1., 2.]]) +array([[1.967...e-04, 9.998...-01], + [1.967...e-04, 9.998...-01]]) +``` + +[`MLPClassifier`](https://scikit-learn.org/stable/modules/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 的索引表示该样本的分类类别: + +```python +>>> 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(alpha=1e-05, hidden_layer_sizes=(15,), random_state=1, + solver='lbfgs') +>>> clf.predict([[1., 2.]]) +array([[1, 1]]) +>>> clf.predict([[0., 0.]]) +array([[0, 1]]) +``` + +更多内容请参阅下面的示例和文档 [`MLPClassifier.fit`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html#sklearn.neural_network.MLPClassifier.fit "sklearn.neural_network.MLPClassifier.fit") 。 + +> **示例**: +> +>* [Compare Stochastic learning strategies for MLPClassifier](https://scikit-learn.org/stable/auto_examples/neural_networks/plot_mlp_training_curves.html#sphx-glr-auto-examples-neural-networks-plot-mlp-training-curves-py) +>* [Visualization of MLP weights on MNIST](https://scikit-learn.org/stable/auto_examples/neural_networks/plot_mnist_filters.html#sphx-glr-auto-examples-neural-networks-plot-mnist-filters-py) + +## 1.17.3. 回归 + +[`MLPRegressor`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPRegressor.html#sklearn.neural_network.MLPRegressor "sklearn.neural_network.MLPRegressor") 类实现了多层感知器(MLP),它使用反向传播进行训练,输出层没有使用激活函数,也可以被看作是使用恒等函数(identity function)作为激活函数。 因此,它使用平方误差作为损失函数,输出是一组连续值。 + +[`MLPRegressor`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPRegressor.html#sklearn.neural_network.MLPRegressor "sklearn.neural_network.MLPRegressor") 还支持多输出回归,其中一个样本可以有多个目标值。 + +## 1.17.4. 正则化 + +[`MLPRegressor`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPRegressor.html#sklearn.neural_network.MLPRegressor "sklearn.neural_network.MLPRegressor") 类和 [`MLPClassifier`](https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html#sklearn.neural_network.MLPClassifier "sklearn.neural_network.MLPClassifier") 类都使用参数 `alpha` 作为正则化( L2 正则化)系数,正则化通过惩罚大数量级的权重值以避免过拟合问题。 下面的图表展示了不同的 alpha 值下的决策函数的变化。 + +[![http://sklearn.apachecn.org/cn/master/_images/sphx_glr_plot_mlp_alpha_0011.png](img/cfe45a2d171ae9c5933cd6d48cd48cb0.jpg)](https://scikit-learn.org/stable/_images/sphx_glr_plot_mlp_alpha_0011.png) + +详细信息,请参阅下面的示例。 + +> **示例**: +> +> * [Varying regularization in Multi-layer Perceptron](https://scikit-learn.org/stable/auto_examples/neural_networks/plot_mlp_alpha.html#sphx-glr-auto-examples-neural-networks-plot-mlp-alpha-py) + +## 1.17.5. 算法 + +MLP 使用 [随机梯度下降(Stochastic Gradient Descent)](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](6) 的文档中找到 。 + +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 > 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` 进行标准化。 + + ```python + >>> from sklearn.preprocessing import StandardScaler # doctest: +SKIP + >>> scaler = StandardScaler() # doctest: +SKIP + >>> # Don't cheat - fit only on training data + >>> scaler.fit(X_train) # doctest: +SKIP + >>> X_train = scaler.transform(X_train) # doctest: +SKIP + >>> # apply same transformation to test data + >>> X_test = scaler.transform(X_test) # doctest: +SKIP + ``` + 另一个推荐的方法是在 `Pipeline` 中使用的 `StandardScaler` 。 +* 最好使用 `GridSearchCV` 找到一个合理的正则化参数 ![\alpha](img/d8b3d5242d513369a44f8bf0c6112744.jpg) ,通常范围是在 `10.0 ** -np.arange(1, 7)` 。 +* 据经验可知,我们观察到 *L-BFGS* 是收敛速度更快的且在小数据集上表现更好的解决方案。对于规模相对比较大的数据集,*Adam* 是非常鲁棒的。 它通常会迅速收敛,并得到相当不错的表现。另一方面,如果学习率调整得正确, 使用 momentum 或 nesterov’s momentum 的 *SGD* 可能比这两种算法更好。 + +## 1.17.9. 使用 warm_start 的更多控制 + +如果您希望更多地控制 SGD 中的停止标准或学习率,或者想要进行额外的监视,使用 `warm_start=True` 和 `max_iter=1` 并且自身迭代可能会有所帮助: + +```python +>>> 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). + diff --git a/docs/0.21.3/19.md b/docs/master/19.md similarity index 100% rename from docs/0.21.3/19.md rename to docs/master/19.md diff --git a/docs/0.21.3/2.md b/docs/master/2.md similarity index 100% rename from docs/0.21.3/2.md rename to docs/master/2.md diff --git a/docs/0.21.3/20.md b/docs/master/20.md similarity index 100% rename from docs/0.21.3/20.md rename to docs/master/20.md diff --git a/docs/0.21.3/21.md b/docs/master/21.md similarity index 100% rename from docs/0.21.3/21.md rename to docs/master/21.md diff --git a/docs/0.21.3/22.md b/docs/master/22.md similarity index 100% rename from docs/0.21.3/22.md rename to docs/master/22.md diff --git a/docs/0.21.3/23.md b/docs/master/23.md similarity index 100% rename from docs/0.21.3/23.md rename to docs/master/23.md diff --git a/docs/0.21.3/24.md b/docs/master/24.md similarity index 100% rename from docs/0.21.3/24.md rename to docs/master/24.md diff --git a/docs/0.21.3/25.md b/docs/master/25.md similarity index 100% rename from docs/0.21.3/25.md rename to docs/master/25.md diff --git a/docs/0.21.3/26.md b/docs/master/26.md similarity index 100% rename from docs/0.21.3/26.md rename to docs/master/26.md diff --git a/docs/0.21.3/27.md b/docs/master/27.md similarity index 100% rename from docs/0.21.3/27.md rename to docs/master/27.md diff --git a/docs/0.21.3/28.md b/docs/master/28.md similarity index 100% rename from docs/0.21.3/28.md rename to docs/master/28.md diff --git a/docs/0.21.3/29.md b/docs/master/29.md similarity index 100% rename from docs/0.21.3/29.md rename to docs/master/29.md diff --git a/docs/0.21.3/3.md b/docs/master/3.md similarity index 100% rename from docs/0.21.3/3.md rename to docs/master/3.md diff --git a/docs/0.21.3/30.md b/docs/master/30.md similarity index 100% rename from docs/0.21.3/30.md rename to docs/master/30.md diff --git a/docs/0.21.3/31.md b/docs/master/31.md similarity index 100% rename from docs/0.21.3/31.md rename to docs/master/31.md diff --git a/docs/0.21.3/32.md b/docs/master/32.md similarity index 100% rename from docs/0.21.3/32.md rename to docs/master/32.md diff --git a/docs/0.21.3/33.md b/docs/master/33.md similarity index 100% rename from docs/0.21.3/33.md rename to docs/master/33.md diff --git a/docs/0.21.3/34.md b/docs/master/34.md similarity index 100% rename from docs/0.21.3/34.md rename to docs/master/34.md diff --git a/docs/0.21.3/35.md b/docs/master/35.md similarity index 100% rename from docs/0.21.3/35.md rename to docs/master/35.md diff --git a/docs/0.21.3/36.md b/docs/master/36.md similarity index 100% rename from docs/0.21.3/36.md rename to docs/master/36.md diff --git a/docs/0.21.3/37.md b/docs/master/37.md similarity index 100% rename from docs/0.21.3/37.md rename to docs/master/37.md diff --git a/docs/0.21.3/38.md b/docs/master/38.md similarity index 100% rename from docs/0.21.3/38.md rename to docs/master/38.md diff --git a/docs/0.21.3/39.md b/docs/master/39.md similarity index 100% rename from docs/0.21.3/39.md rename to docs/master/39.md diff --git a/docs/0.21.3/4.md b/docs/master/4.md similarity index 100% rename from docs/0.21.3/4.md rename to docs/master/4.md diff --git a/docs/0.21.3/40.md b/docs/master/40.md similarity index 100% rename from docs/0.21.3/40.md rename to docs/master/40.md diff --git a/docs/0.21.3/41.md b/docs/master/41.md similarity index 100% rename from docs/0.21.3/41.md rename to docs/master/41.md diff --git a/docs/0.21.3/42.md b/docs/master/42.md similarity index 100% rename from docs/0.21.3/42.md rename to docs/master/42.md diff --git a/docs/0.21.3/43.md b/docs/master/43.md similarity index 100% rename from docs/0.21.3/43.md rename to docs/master/43.md diff --git a/docs/0.21.3/44.md b/docs/master/44.md similarity index 100% rename from docs/0.21.3/44.md rename to docs/master/44.md diff --git a/docs/0.21.3/45.md b/docs/master/45.md similarity index 100% rename from docs/0.21.3/45.md rename to docs/master/45.md diff --git a/docs/0.21.3/46.md b/docs/master/46.md similarity index 100% rename from docs/0.21.3/46.md rename to docs/master/46.md diff --git a/docs/0.21.3/47.md b/docs/master/47.md similarity index 100% rename from docs/0.21.3/47.md rename to docs/master/47.md diff --git a/docs/0.21.3/48.md b/docs/master/48.md similarity index 100% rename from docs/0.21.3/48.md rename to docs/master/48.md diff --git a/docs/0.21.3/5.md b/docs/master/5.md similarity index 100% rename from docs/0.21.3/5.md rename to docs/master/5.md diff --git a/docs/0.21.3/50.md b/docs/master/50.md similarity index 100% rename from docs/0.21.3/50.md rename to docs/master/50.md diff --git a/docs/0.21.3/51.md b/docs/master/51.md similarity index 100% rename from docs/0.21.3/51.md rename to docs/master/51.md diff --git a/docs/0.21.3/52.md b/docs/master/52.md similarity index 100% rename from docs/0.21.3/52.md rename to docs/master/52.md diff --git a/docs/0.21.3/53.md b/docs/master/53.md similarity index 100% rename from docs/0.21.3/53.md rename to docs/master/53.md diff --git a/docs/0.21.3/54.md b/docs/master/54.md similarity index 100% rename from docs/0.21.3/54.md rename to docs/master/54.md diff --git a/docs/0.21.3/55.md b/docs/master/55.md similarity index 100% rename from docs/0.21.3/55.md rename to docs/master/55.md diff --git a/docs/0.21.3/56.md b/docs/master/56.md similarity index 100% rename from docs/0.21.3/56.md rename to docs/master/56.md diff --git a/docs/0.21.3/57.md b/docs/master/57.md similarity index 100% rename from docs/0.21.3/57.md rename to docs/master/57.md diff --git a/docs/0.21.3/58.md b/docs/master/58.md similarity index 100% rename from docs/0.21.3/58.md rename to docs/master/58.md diff --git a/docs/0.21.3/59.md b/docs/master/59.md similarity index 100% rename from docs/0.21.3/59.md rename to docs/master/59.md diff --git a/docs/0.21.3/6.md b/docs/master/6.md similarity index 100% rename from docs/0.21.3/6.md rename to docs/master/6.md diff --git a/docs/0.21.3/60.md b/docs/master/60.md similarity index 100% rename from docs/0.21.3/60.md rename to docs/master/60.md diff --git a/docs/0.21.3/61.md b/docs/master/61.md similarity index 100% rename from docs/0.21.3/61.md rename to docs/master/61.md diff --git a/docs/0.21.3/62.md b/docs/master/62.md similarity index 100% rename from docs/0.21.3/62.md rename to docs/master/62.md diff --git a/docs/0.21.3/63.md b/docs/master/63.md similarity index 100% rename from docs/0.21.3/63.md rename to docs/master/63.md diff --git a/docs/0.21.3/64.md b/docs/master/64.md similarity index 100% rename from docs/0.21.3/64.md rename to docs/master/64.md diff --git a/docs/0.21.3/7.md b/docs/master/7.md similarity index 100% rename from docs/0.21.3/7.md rename to docs/master/7.md diff --git a/docs/0.21.3/8.md b/docs/master/8.md similarity index 100% rename from docs/0.21.3/8.md rename to docs/master/8.md diff --git a/docs/0.21.3/9.md b/docs/master/9.md similarity index 100% rename from docs/0.21.3/9.md rename to docs/master/9.md diff --git a/docs/0.21.3/SUMMARY.md b/docs/master/SUMMARY.md similarity index 100% rename from docs/0.21.3/SUMMARY.md rename to docs/master/SUMMARY.md diff --git a/docs/0.21.3/book.json b/docs/master/book.json similarity index 100% rename from docs/0.21.3/book.json rename to docs/master/book.json diff --git a/docs/0.19.x/img/001d34ad977d110ce0931112c362d07e.jpg b/docs/master/img/001d34ad977d110ce0931112c362d07e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/001d34ad977d110ce0931112c362d07e.jpg rename to docs/master/img/001d34ad977d110ce0931112c362d07e.jpg diff --git a/docs/0.19.x/img/00a1e1837f700cef7352acfafd328607.jpg b/docs/master/img/00a1e1837f700cef7352acfafd328607.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/00a1e1837f700cef7352acfafd328607.jpg rename to docs/master/img/00a1e1837f700cef7352acfafd328607.jpg diff --git a/docs/0.19.x/img/00af2cbeb1deda7098a17d0491060339.jpg b/docs/master/img/00af2cbeb1deda7098a17d0491060339.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/00af2cbeb1deda7098a17d0491060339.jpg rename to docs/master/img/00af2cbeb1deda7098a17d0491060339.jpg diff --git a/docs/0.19.x/img/01024e528443374ebac4e8cb2f6dc463.jpg b/docs/master/img/01024e528443374ebac4e8cb2f6dc463.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/01024e528443374ebac4e8cb2f6dc463.jpg rename to docs/master/img/01024e528443374ebac4e8cb2f6dc463.jpg diff --git a/docs/0.19.x/img/014b479ec81146a77562d251269a0f2e.jpg b/docs/master/img/014b479ec81146a77562d251269a0f2e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/014b479ec81146a77562d251269a0f2e.jpg rename to docs/master/img/014b479ec81146a77562d251269a0f2e.jpg diff --git a/docs/0.19.x/img/015fcf78112c08948e66bb51171ae137.jpg b/docs/master/img/015fcf78112c08948e66bb51171ae137.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/015fcf78112c08948e66bb51171ae137.jpg rename to docs/master/img/015fcf78112c08948e66bb51171ae137.jpg diff --git a/docs/0.19.x/img/017a1400b81bc9ef956adc43050bb5c8.jpg b/docs/master/img/017a1400b81bc9ef956adc43050bb5c8.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/017a1400b81bc9ef956adc43050bb5c8.jpg rename to docs/master/img/017a1400b81bc9ef956adc43050bb5c8.jpg diff --git a/docs/0.19.x/img/018a312145ba4dee4c257135644ced91.jpg b/docs/master/img/018a312145ba4dee4c257135644ced91.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/018a312145ba4dee4c257135644ced91.jpg rename to docs/master/img/018a312145ba4dee4c257135644ced91.jpg diff --git a/docs/0.19.x/img/01e7c74ccc13a6832f6bfcd46b442a1b.jpg b/docs/master/img/01e7c74ccc13a6832f6bfcd46b442a1b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/01e7c74ccc13a6832f6bfcd46b442a1b.jpg rename to docs/master/img/01e7c74ccc13a6832f6bfcd46b442a1b.jpg diff --git a/docs/0.21.3/img/021new1.jpg b/docs/master/img/021new1.jpg similarity index 100% rename from docs/0.21.3/img/021new1.jpg rename to docs/master/img/021new1.jpg diff --git a/docs/0.19.x/img/0243e3516b65d89a7e3da13680c1a1b7.jpg b/docs/master/img/0243e3516b65d89a7e3da13680c1a1b7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0243e3516b65d89a7e3da13680c1a1b7.jpg rename to docs/master/img/0243e3516b65d89a7e3da13680c1a1b7.jpg diff --git a/docs/0.19.x/img/02848ebe72029503696b6523e4052c0c.jpg b/docs/master/img/02848ebe72029503696b6523e4052c0c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/02848ebe72029503696b6523e4052c0c.jpg rename to docs/master/img/02848ebe72029503696b6523e4052c0c.jpg diff --git a/docs/0.19.x/img/03269860556d3525e4ae266f30c6982d.jpg b/docs/master/img/03269860556d3525e4ae266f30c6982d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/03269860556d3525e4ae266f30c6982d.jpg rename to docs/master/img/03269860556d3525e4ae266f30c6982d.jpg diff --git a/docs/0.19.x/img/0333d4e1607c1cab19f576a212267ec1.jpg b/docs/master/img/0333d4e1607c1cab19f576a212267ec1.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0333d4e1607c1cab19f576a212267ec1.jpg rename to docs/master/img/0333d4e1607c1cab19f576a212267ec1.jpg diff --git a/docs/0.19.x/img/0345993f9c673bd3a928dc6cb07bcae1.jpg b/docs/master/img/0345993f9c673bd3a928dc6cb07bcae1.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0345993f9c673bd3a928dc6cb07bcae1.jpg rename to docs/master/img/0345993f9c673bd3a928dc6cb07bcae1.jpg diff --git a/docs/0.19.x/img/035f009eecfdebf82b493f797843a919.jpg b/docs/master/img/035f009eecfdebf82b493f797843a919.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/035f009eecfdebf82b493f797843a919.jpg rename to docs/master/img/035f009eecfdebf82b493f797843a919.jpg diff --git a/docs/0.19.x/img/03aa3da890dedc42b04c1df154062257.jpg b/docs/master/img/03aa3da890dedc42b04c1df154062257.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/03aa3da890dedc42b04c1df154062257.jpg rename to docs/master/img/03aa3da890dedc42b04c1df154062257.jpg diff --git a/docs/0.19.x/img/03dc262433e357325639af531c5bf70e.jpg b/docs/master/img/03dc262433e357325639af531c5bf70e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/03dc262433e357325639af531c5bf70e.jpg rename to docs/master/img/03dc262433e357325639af531c5bf70e.jpg diff --git a/docs/0.19.x/img/04388b884d40fc8b56559b6c2364e7ce.jpg b/docs/master/img/04388b884d40fc8b56559b6c2364e7ce.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/04388b884d40fc8b56559b6c2364e7ce.jpg rename to docs/master/img/04388b884d40fc8b56559b6c2364e7ce.jpg diff --git a/docs/0.19.x/img/0449a2a9bce6d759e7253da7d17fa938.jpg b/docs/master/img/0449a2a9bce6d759e7253da7d17fa938.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0449a2a9bce6d759e7253da7d17fa938.jpg rename to docs/master/img/0449a2a9bce6d759e7253da7d17fa938.jpg diff --git a/docs/0.19.x/img/047826f1c2e6f2687b304cb5217be8d8.jpg b/docs/master/img/047826f1c2e6f2687b304cb5217be8d8.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/047826f1c2e6f2687b304cb5217be8d8.jpg rename to docs/master/img/047826f1c2e6f2687b304cb5217be8d8.jpg diff --git a/docs/0.19.x/img/05459a925be9207abbb2f72203e48cf2.jpg b/docs/master/img/05459a925be9207abbb2f72203e48cf2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/05459a925be9207abbb2f72203e48cf2.jpg rename to docs/master/img/05459a925be9207abbb2f72203e48cf2.jpg diff --git a/docs/0.19.x/img/05588cdc4e82289930a92b0097f67d2d.jpg b/docs/master/img/05588cdc4e82289930a92b0097f67d2d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/05588cdc4e82289930a92b0097f67d2d.jpg rename to docs/master/img/05588cdc4e82289930a92b0097f67d2d.jpg diff --git a/docs/0.19.x/img/0563dd4e7c322dfdafde0770d8a9dc4a.jpg b/docs/master/img/0563dd4e7c322dfdafde0770d8a9dc4a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0563dd4e7c322dfdafde0770d8a9dc4a.jpg rename to docs/master/img/0563dd4e7c322dfdafde0770d8a9dc4a.jpg diff --git a/docs/0.19.x/img/05c3632395ec8941c82954de930b9d3e.jpg b/docs/master/img/05c3632395ec8941c82954de930b9d3e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/05c3632395ec8941c82954de930b9d3e.jpg rename to docs/master/img/05c3632395ec8941c82954de930b9d3e.jpg diff --git a/docs/0.19.x/img/06731dd14500ea710a28370843818539.jpg b/docs/master/img/06731dd14500ea710a28370843818539.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/06731dd14500ea710a28370843818539.jpg rename to docs/master/img/06731dd14500ea710a28370843818539.jpg diff --git a/docs/0.19.x/img/0679b7c6ff086b5e9ad73b1cb08d9205.jpg b/docs/master/img/0679b7c6ff086b5e9ad73b1cb08d9205.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0679b7c6ff086b5e9ad73b1cb08d9205.jpg rename to docs/master/img/0679b7c6ff086b5e9ad73b1cb08d9205.jpg diff --git a/docs/0.19.x/img/06d3f93ccdf3b4b5cd0fea7225848848.jpg b/docs/master/img/06d3f93ccdf3b4b5cd0fea7225848848.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/06d3f93ccdf3b4b5cd0fea7225848848.jpg rename to docs/master/img/06d3f93ccdf3b4b5cd0fea7225848848.jpg diff --git a/docs/0.19.x/img/070018458bf56c0d94293de45828e878.jpg b/docs/master/img/070018458bf56c0d94293de45828e878.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/070018458bf56c0d94293de45828e878.jpg rename to docs/master/img/070018458bf56c0d94293de45828e878.jpg diff --git a/docs/0.19.x/img/07610ee9d3a524eb0a3fb7ae409614c1.jpg b/docs/master/img/07610ee9d3a524eb0a3fb7ae409614c1.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/07610ee9d3a524eb0a3fb7ae409614c1.jpg rename to docs/master/img/07610ee9d3a524eb0a3fb7ae409614c1.jpg diff --git a/docs/0.19.x/img/0775c03fc710a24df297dedcec515aaf.jpg b/docs/master/img/0775c03fc710a24df297dedcec515aaf.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0775c03fc710a24df297dedcec515aaf.jpg rename to docs/master/img/0775c03fc710a24df297dedcec515aaf.jpg diff --git a/docs/0.19.x/img/07794b8fa83c7e18c5d1fb175fd7d7bd.jpg b/docs/master/img/07794b8fa83c7e18c5d1fb175fd7d7bd.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/07794b8fa83c7e18c5d1fb175fd7d7bd.jpg rename to docs/master/img/07794b8fa83c7e18c5d1fb175fd7d7bd.jpg diff --git a/docs/0.19.x/img/07921ae49a32570fd5559004f1cca103.jpg b/docs/master/img/07921ae49a32570fd5559004f1cca103.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/07921ae49a32570fd5559004f1cca103.jpg rename to docs/master/img/07921ae49a32570fd5559004f1cca103.jpg diff --git a/docs/0.19.x/img/088266f72839f4195c9058dfd17d778b.jpg b/docs/master/img/088266f72839f4195c9058dfd17d778b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/088266f72839f4195c9058dfd17d778b.jpg rename to docs/master/img/088266f72839f4195c9058dfd17d778b.jpg diff --git a/docs/0.19.x/img/08a5f2b42e497598497f5265194ce4a3.jpg b/docs/master/img/08a5f2b42e497598497f5265194ce4a3.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/08a5f2b42e497598497f5265194ce4a3.jpg rename to docs/master/img/08a5f2b42e497598497f5265194ce4a3.jpg diff --git a/docs/0.19.x/img/094a3a73abc84f5a6c1e0b72e15152d7.jpg b/docs/master/img/094a3a73abc84f5a6c1e0b72e15152d7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/094a3a73abc84f5a6c1e0b72e15152d7.jpg rename to docs/master/img/094a3a73abc84f5a6c1e0b72e15152d7.jpg diff --git a/docs/0.19.x/img/0992b23a98660c7b2102695e74407be2.jpg b/docs/master/img/0992b23a98660c7b2102695e74407be2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0992b23a98660c7b2102695e74407be2.jpg rename to docs/master/img/0992b23a98660c7b2102695e74407be2.jpg diff --git a/docs/0.19.x/img/09eb9862841b1c17d77e2e4830df3770.jpg b/docs/master/img/09eb9862841b1c17d77e2e4830df3770.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/09eb9862841b1c17d77e2e4830df3770.jpg rename to docs/master/img/09eb9862841b1c17d77e2e4830df3770.jpg diff --git a/docs/0.19.x/img/09ed5f467366506cf3b8d425d00db588.jpg b/docs/master/img/09ed5f467366506cf3b8d425d00db588.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/09ed5f467366506cf3b8d425d00db588.jpg rename to docs/master/img/09ed5f467366506cf3b8d425d00db588.jpg diff --git a/docs/0.19.x/img/0a3546c8f30354c128ef2acb96e91e16.jpg b/docs/master/img/0a3546c8f30354c128ef2acb96e91e16.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0a3546c8f30354c128ef2acb96e91e16.jpg rename to docs/master/img/0a3546c8f30354c128ef2acb96e91e16.jpg diff --git a/docs/0.19.x/img/0a7b173908e1ba21b1132121dd409ded.jpg b/docs/master/img/0a7b173908e1ba21b1132121dd409ded.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0a7b173908e1ba21b1132121dd409ded.jpg rename to docs/master/img/0a7b173908e1ba21b1132121dd409ded.jpg diff --git a/docs/0.19.x/img/0acf1512409eb0a9a90102698304fd52.jpg b/docs/master/img/0acf1512409eb0a9a90102698304fd52.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0acf1512409eb0a9a90102698304fd52.jpg rename to docs/master/img/0acf1512409eb0a9a90102698304fd52.jpg diff --git a/docs/0.19.x/img/0bb5a8e1b524523dcfb5104d9f20ba2b.jpg b/docs/master/img/0bb5a8e1b524523dcfb5104d9f20ba2b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0bb5a8e1b524523dcfb5104d9f20ba2b.jpg rename to docs/master/img/0bb5a8e1b524523dcfb5104d9f20ba2b.jpg diff --git a/docs/0.19.x/img/0bc78b13595e61ff422e00bb2686c7e8.jpg b/docs/master/img/0bc78b13595e61ff422e00bb2686c7e8.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0bc78b13595e61ff422e00bb2686c7e8.jpg rename to docs/master/img/0bc78b13595e61ff422e00bb2686c7e8.jpg diff --git a/docs/0.19.x/img/0cd05229735908f0f99e59deb90a4434.jpg b/docs/master/img/0cd05229735908f0f99e59deb90a4434.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0cd05229735908f0f99e59deb90a4434.jpg rename to docs/master/img/0cd05229735908f0f99e59deb90a4434.jpg diff --git a/docs/0.19.x/img/0ce3ae4e9a8bbd17b08f5fae78d60f21.jpg b/docs/master/img/0ce3ae4e9a8bbd17b08f5fae78d60f21.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0ce3ae4e9a8bbd17b08f5fae78d60f21.jpg rename to docs/master/img/0ce3ae4e9a8bbd17b08f5fae78d60f21.jpg diff --git a/docs/0.19.x/img/0d0c4e4a12f6e3bb90bf30161951dcc5.jpg b/docs/master/img/0d0c4e4a12f6e3bb90bf30161951dcc5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0d0c4e4a12f6e3bb90bf30161951dcc5.jpg rename to docs/master/img/0d0c4e4a12f6e3bb90bf30161951dcc5.jpg diff --git a/docs/0.19.x/img/0dd4aedd59a06ecbaead248c17a3ce80.jpg b/docs/master/img/0dd4aedd59a06ecbaead248c17a3ce80.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0dd4aedd59a06ecbaead248c17a3ce80.jpg rename to docs/master/img/0dd4aedd59a06ecbaead248c17a3ce80.jpg diff --git a/docs/0.19.x/img/0e7d39317aed470ee92522354b5fbe04.jpg b/docs/master/img/0e7d39317aed470ee92522354b5fbe04.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0e7d39317aed470ee92522354b5fbe04.jpg rename to docs/master/img/0e7d39317aed470ee92522354b5fbe04.jpg diff --git a/docs/0.19.x/img/0e8aa67015918fa2807e6ddf7192c32f.jpg b/docs/master/img/0e8aa67015918fa2807e6ddf7192c32f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0e8aa67015918fa2807e6ddf7192c32f.jpg rename to docs/master/img/0e8aa67015918fa2807e6ddf7192c32f.jpg diff --git a/docs/0.19.x/img/0f30c5ace43eda2a8d25c6e9365264d7.jpg b/docs/master/img/0f30c5ace43eda2a8d25c6e9365264d7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0f30c5ace43eda2a8d25c6e9365264d7.jpg rename to docs/master/img/0f30c5ace43eda2a8d25c6e9365264d7.jpg diff --git a/docs/0.19.x/img/0f92bc682b050115d03c625ce770c77d.jpg b/docs/master/img/0f92bc682b050115d03c625ce770c77d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0f92bc682b050115d03c625ce770c77d.jpg rename to docs/master/img/0f92bc682b050115d03c625ce770c77d.jpg diff --git a/docs/0.19.x/img/0faa297883831c0432cf4d72960eeb6c.jpg b/docs/master/img/0faa297883831c0432cf4d72960eeb6c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0faa297883831c0432cf4d72960eeb6c.jpg rename to docs/master/img/0faa297883831c0432cf4d72960eeb6c.jpg diff --git a/docs/0.19.x/img/0fac1c7ec23344da41ff45485bb3ac12.jpg b/docs/master/img/0fac1c7ec23344da41ff45485bb3ac12.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0fac1c7ec23344da41ff45485bb3ac12.jpg rename to docs/master/img/0fac1c7ec23344da41ff45485bb3ac12.jpg diff --git a/docs/0.19.x/img/0fccbdc535b0a4d8003725e8ad606561.jpg b/docs/master/img/0fccbdc535b0a4d8003725e8ad606561.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0fccbdc535b0a4d8003725e8ad606561.jpg rename to docs/master/img/0fccbdc535b0a4d8003725e8ad606561.jpg diff --git a/docs/0.19.x/img/0fd5cc61b1ca3db3b190fbfad2a38813.jpg b/docs/master/img/0fd5cc61b1ca3db3b190fbfad2a38813.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0fd5cc61b1ca3db3b190fbfad2a38813.jpg rename to docs/master/img/0fd5cc61b1ca3db3b190fbfad2a38813.jpg diff --git a/docs/0.19.x/img/0fec9d3a9833abc417480a03be883b3e.jpg b/docs/master/img/0fec9d3a9833abc417480a03be883b3e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/0fec9d3a9833abc417480a03be883b3e.jpg rename to docs/master/img/0fec9d3a9833abc417480a03be883b3e.jpg diff --git a/docs/0.19.x/img/10026a0d2a4dcca9387e58932c14f0e7.jpg b/docs/master/img/10026a0d2a4dcca9387e58932c14f0e7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/10026a0d2a4dcca9387e58932c14f0e7.jpg rename to docs/master/img/10026a0d2a4dcca9387e58932c14f0e7.jpg diff --git a/docs/0.19.x/img/107556ec49c074270575d6b99f3d2029.jpg b/docs/master/img/107556ec49c074270575d6b99f3d2029.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/107556ec49c074270575d6b99f3d2029.jpg rename to docs/master/img/107556ec49c074270575d6b99f3d2029.jpg diff --git a/docs/0.19.x/img/1091409a4db7e77230536d6b05b4fae6.jpg b/docs/master/img/1091409a4db7e77230536d6b05b4fae6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1091409a4db7e77230536d6b05b4fae6.jpg rename to docs/master/img/1091409a4db7e77230536d6b05b4fae6.jpg diff --git a/docs/0.19.x/img/10a8344b866fca53744b728ef788a668.jpg b/docs/master/img/10a8344b866fca53744b728ef788a668.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/10a8344b866fca53744b728ef788a668.jpg rename to docs/master/img/10a8344b866fca53744b728ef788a668.jpg diff --git a/docs/0.19.x/img/10bfda066ccebace59b1d11135e10196.jpg b/docs/master/img/10bfda066ccebace59b1d11135e10196.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/10bfda066ccebace59b1d11135e10196.jpg rename to docs/master/img/10bfda066ccebace59b1d11135e10196.jpg diff --git a/docs/0.19.x/img/10ce8fc56aa233e3e9cec9776dc315e6.jpg b/docs/master/img/10ce8fc56aa233e3e9cec9776dc315e6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/10ce8fc56aa233e3e9cec9776dc315e6.jpg rename to docs/master/img/10ce8fc56aa233e3e9cec9776dc315e6.jpg diff --git a/docs/0.19.x/img/11265c80ea298a58e0a1010736d28b38.jpg b/docs/master/img/11265c80ea298a58e0a1010736d28b38.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/11265c80ea298a58e0a1010736d28b38.jpg rename to docs/master/img/11265c80ea298a58e0a1010736d28b38.jpg diff --git a/docs/0.19.x/img/11336a74b43f75a360b60ce81f9cbdc0.jpg b/docs/master/img/11336a74b43f75a360b60ce81f9cbdc0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/11336a74b43f75a360b60ce81f9cbdc0.jpg rename to docs/master/img/11336a74b43f75a360b60ce81f9cbdc0.jpg diff --git a/docs/0.19.x/img/114b22cba4861a82ce7df1eab3219a0d.jpg b/docs/master/img/114b22cba4861a82ce7df1eab3219a0d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/114b22cba4861a82ce7df1eab3219a0d.jpg rename to docs/master/img/114b22cba4861a82ce7df1eab3219a0d.jpg diff --git a/docs/0.19.x/img/11c00539ec3e5944afd76511830591db.jpg b/docs/master/img/11c00539ec3e5944afd76511830591db.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/11c00539ec3e5944afd76511830591db.jpg rename to docs/master/img/11c00539ec3e5944afd76511830591db.jpg diff --git a/docs/0.19.x/img/11cde057716cf1a820780a60c8ffa8e4.jpg b/docs/master/img/11cde057716cf1a820780a60c8ffa8e4.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/11cde057716cf1a820780a60c8ffa8e4.jpg rename to docs/master/img/11cde057716cf1a820780a60c8ffa8e4.jpg diff --git a/docs/0.19.x/img/1252aa7af065b0afd424b2ff01b4e2a5.jpg b/docs/master/img/1252aa7af065b0afd424b2ff01b4e2a5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1252aa7af065b0afd424b2ff01b4e2a5.jpg rename to docs/master/img/1252aa7af065b0afd424b2ff01b4e2a5.jpg diff --git a/docs/0.19.x/img/12867664a0e0e6047ee303c542b4deac.jpg b/docs/master/img/12867664a0e0e6047ee303c542b4deac.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/12867664a0e0e6047ee303c542b4deac.jpg rename to docs/master/img/12867664a0e0e6047ee303c542b4deac.jpg diff --git a/docs/0.19.x/img/12ab1980b4b3f069be032c0d4f1184ed.jpg b/docs/master/img/12ab1980b4b3f069be032c0d4f1184ed.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/12ab1980b4b3f069be032c0d4f1184ed.jpg rename to docs/master/img/12ab1980b4b3f069be032c0d4f1184ed.jpg diff --git a/docs/0.19.x/img/12b2c1da1f9041738fa7153efc651372.jpg b/docs/master/img/12b2c1da1f9041738fa7153efc651372.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/12b2c1da1f9041738fa7153efc651372.jpg rename to docs/master/img/12b2c1da1f9041738fa7153efc651372.jpg diff --git a/docs/0.19.x/img/12ecd862769bee1e71c75c134b6423bb.jpg b/docs/master/img/12ecd862769bee1e71c75c134b6423bb.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/12ecd862769bee1e71c75c134b6423bb.jpg rename to docs/master/img/12ecd862769bee1e71c75c134b6423bb.jpg diff --git a/docs/0.19.x/img/1375f487efd6b9db955b7f7aafecc441.jpg b/docs/master/img/1375f487efd6b9db955b7f7aafecc441.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1375f487efd6b9db955b7f7aafecc441.jpg rename to docs/master/img/1375f487efd6b9db955b7f7aafecc441.jpg diff --git a/docs/0.19.x/img/13e06e04807641041a1d2df7a80043e2.jpg b/docs/master/img/13e06e04807641041a1d2df7a80043e2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/13e06e04807641041a1d2df7a80043e2.jpg rename to docs/master/img/13e06e04807641041a1d2df7a80043e2.jpg diff --git a/docs/0.19.x/img/14120d5c5d7ad74513d356eed762622b.jpg b/docs/master/img/14120d5c5d7ad74513d356eed762622b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/14120d5c5d7ad74513d356eed762622b.jpg rename to docs/master/img/14120d5c5d7ad74513d356eed762622b.jpg diff --git a/docs/0.19.x/img/148aed7690723555d32f36019c3d6948.jpg b/docs/master/img/148aed7690723555d32f36019c3d6948.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/148aed7690723555d32f36019c3d6948.jpg rename to docs/master/img/148aed7690723555d32f36019c3d6948.jpg diff --git a/docs/0.19.x/img/14d65d3148b0ea7c9ecb364423ecb0ed.jpg b/docs/master/img/14d65d3148b0ea7c9ecb364423ecb0ed.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/14d65d3148b0ea7c9ecb364423ecb0ed.jpg rename to docs/master/img/14d65d3148b0ea7c9ecb364423ecb0ed.jpg diff --git a/docs/0.19.x/img/14f6506599a88a5297ea712fa70eece4.jpg b/docs/master/img/14f6506599a88a5297ea712fa70eece4.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/14f6506599a88a5297ea712fa70eece4.jpg rename to docs/master/img/14f6506599a88a5297ea712fa70eece4.jpg diff --git a/docs/0.19.x/img/153aceb3cdac953277c6c840339ac023.jpg b/docs/master/img/153aceb3cdac953277c6c840339ac023.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/153aceb3cdac953277c6c840339ac023.jpg rename to docs/master/img/153aceb3cdac953277c6c840339ac023.jpg diff --git a/docs/0.19.x/img/156554c81cfe5f0230627ac0487fd07f.jpg b/docs/master/img/156554c81cfe5f0230627ac0487fd07f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/156554c81cfe5f0230627ac0487fd07f.jpg rename to docs/master/img/156554c81cfe5f0230627ac0487fd07f.jpg diff --git a/docs/0.19.x/img/15a03cac7d4ab66fdf23e702ee75da2a.jpg b/docs/master/img/15a03cac7d4ab66fdf23e702ee75da2a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/15a03cac7d4ab66fdf23e702ee75da2a.jpg rename to docs/master/img/15a03cac7d4ab66fdf23e702ee75da2a.jpg diff --git a/docs/0.19.x/img/163f83188195d81958bfb733b7a3daa2.jpg b/docs/master/img/163f83188195d81958bfb733b7a3daa2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/163f83188195d81958bfb733b7a3daa2.jpg rename to docs/master/img/163f83188195d81958bfb733b7a3daa2.jpg diff --git a/docs/0.19.x/img/165303a7d56136efa39130cd3cd9539e.jpg b/docs/master/img/165303a7d56136efa39130cd3cd9539e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/165303a7d56136efa39130cd3cd9539e.jpg rename to docs/master/img/165303a7d56136efa39130cd3cd9539e.jpg diff --git a/docs/0.19.x/img/16622481c2bbb001363e20660b549ae9.jpg b/docs/master/img/16622481c2bbb001363e20660b549ae9.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/16622481c2bbb001363e20660b549ae9.jpg rename to docs/master/img/16622481c2bbb001363e20660b549ae9.jpg diff --git a/docs/0.19.x/img/170bd587959dabf132e4e0f39fa0a7b7.jpg b/docs/master/img/170bd587959dabf132e4e0f39fa0a7b7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/170bd587959dabf132e4e0f39fa0a7b7.jpg rename to docs/master/img/170bd587959dabf132e4e0f39fa0a7b7.jpg diff --git a/docs/0.19.x/img/17430579d0bcbef3e2d99eba470792c8.jpg b/docs/master/img/17430579d0bcbef3e2d99eba470792c8.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/17430579d0bcbef3e2d99eba470792c8.jpg rename to docs/master/img/17430579d0bcbef3e2d99eba470792c8.jpg diff --git a/docs/0.19.x/img/17689bafe240fb42feab1cca674b5b88.jpg b/docs/master/img/17689bafe240fb42feab1cca674b5b88.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/17689bafe240fb42feab1cca674b5b88.jpg rename to docs/master/img/17689bafe240fb42feab1cca674b5b88.jpg diff --git a/docs/0.19.x/img/187eddee2de4e12860dc001c5f74b2b4.jpg b/docs/master/img/187eddee2de4e12860dc001c5f74b2b4.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/187eddee2de4e12860dc001c5f74b2b4.jpg rename to docs/master/img/187eddee2de4e12860dc001c5f74b2b4.jpg diff --git a/docs/0.19.x/img/18906a7fe0c5d78e0a291e472ded58ce.jpg b/docs/master/img/18906a7fe0c5d78e0a291e472ded58ce.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/18906a7fe0c5d78e0a291e472ded58ce.jpg rename to docs/master/img/18906a7fe0c5d78e0a291e472ded58ce.jpg diff --git a/docs/0.19.x/img/195ff50d437f1bb16125cdb1c311f3ab.jpg b/docs/master/img/195ff50d437f1bb16125cdb1c311f3ab.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/195ff50d437f1bb16125cdb1c311f3ab.jpg rename to docs/master/img/195ff50d437f1bb16125cdb1c311f3ab.jpg diff --git a/docs/0.21.3/img/1_1_3.gif b/docs/master/img/1_1_3.gif similarity index 100% rename from docs/0.21.3/img/1_1_3.gif rename to docs/master/img/1_1_3.gif diff --git a/docs/0.21.3/img/1_1_4.gif b/docs/master/img/1_1_4.gif similarity index 100% rename from docs/0.21.3/img/1_1_4.gif rename to docs/master/img/1_1_4.gif diff --git a/docs/0.21.3/img/1_1_5.gif b/docs/master/img/1_1_5.gif similarity index 100% rename from docs/0.21.3/img/1_1_5.gif rename to docs/master/img/1_1_5.gif diff --git a/docs/0.21.3/img/1_1_6.gif b/docs/master/img/1_1_6.gif similarity index 100% rename from docs/0.21.3/img/1_1_6.gif rename to docs/master/img/1_1_6.gif diff --git a/docs/0.21.3/img/1_1_7.gif b/docs/master/img/1_1_7.gif similarity index 100% rename from docs/0.21.3/img/1_1_7.gif rename to docs/master/img/1_1_7.gif diff --git a/docs/0.21.3/img/1_6_1.png b/docs/master/img/1_6_1.png similarity index 100% rename from docs/0.21.3/img/1_6_1.png rename to docs/master/img/1_6_1.png diff --git a/docs/0.21.3/img/1_6_2.png b/docs/master/img/1_6_2.png similarity index 100% rename from docs/0.21.3/img/1_6_2.png rename to docs/master/img/1_6_2.png diff --git a/docs/0.19.x/img/1a125d0568be1ce93a6bc7b3ee1071e1.jpg b/docs/master/img/1a125d0568be1ce93a6bc7b3ee1071e1.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1a125d0568be1ce93a6bc7b3ee1071e1.jpg rename to docs/master/img/1a125d0568be1ce93a6bc7b3ee1071e1.jpg diff --git a/docs/0.19.x/img/1a1bc66f06af187108d4250f068748c9.jpg b/docs/master/img/1a1bc66f06af187108d4250f068748c9.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1a1bc66f06af187108d4250f068748c9.jpg rename to docs/master/img/1a1bc66f06af187108d4250f068748c9.jpg diff --git a/docs/0.19.x/img/1a78828504944887ab23097011f807d5.jpg b/docs/master/img/1a78828504944887ab23097011f807d5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1a78828504944887ab23097011f807d5.jpg rename to docs/master/img/1a78828504944887ab23097011f807d5.jpg diff --git a/docs/0.19.x/img/1a91bab921cf39f58a522ed15f475235.jpg b/docs/master/img/1a91bab921cf39f58a522ed15f475235.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1a91bab921cf39f58a522ed15f475235.jpg rename to docs/master/img/1a91bab921cf39f58a522ed15f475235.jpg diff --git a/docs/0.19.x/img/1ae6d373d81c5f3f50905f336b4a070a.jpg b/docs/master/img/1ae6d373d81c5f3f50905f336b4a070a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1ae6d373d81c5f3f50905f336b4a070a.jpg rename to docs/master/img/1ae6d373d81c5f3f50905f336b4a070a.jpg diff --git a/docs/0.19.x/img/1b6228a71a038f66ac7b8a2743adf4e7.jpg b/docs/master/img/1b6228a71a038f66ac7b8a2743adf4e7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1b6228a71a038f66ac7b8a2743adf4e7.jpg rename to docs/master/img/1b6228a71a038f66ac7b8a2743adf4e7.jpg diff --git a/docs/0.19.x/img/1c12ea7ea179efd16ce513645034d41a.jpg b/docs/master/img/1c12ea7ea179efd16ce513645034d41a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1c12ea7ea179efd16ce513645034d41a.jpg rename to docs/master/img/1c12ea7ea179efd16ce513645034d41a.jpg diff --git a/docs/0.19.x/img/1c25ce7b0d4e2c7da1f0e73d2565c431.jpg b/docs/master/img/1c25ce7b0d4e2c7da1f0e73d2565c431.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1c25ce7b0d4e2c7da1f0e73d2565c431.jpg rename to docs/master/img/1c25ce7b0d4e2c7da1f0e73d2565c431.jpg diff --git a/docs/0.19.x/img/1cde7e5f92efe9056f9f53e23ea04102.jpg b/docs/master/img/1cde7e5f92efe9056f9f53e23ea04102.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1cde7e5f92efe9056f9f53e23ea04102.jpg rename to docs/master/img/1cde7e5f92efe9056f9f53e23ea04102.jpg diff --git a/docs/0.19.x/img/1ce6ae6c075734e41812dc91b67d16e5.jpg b/docs/master/img/1ce6ae6c075734e41812dc91b67d16e5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1ce6ae6c075734e41812dc91b67d16e5.jpg rename to docs/master/img/1ce6ae6c075734e41812dc91b67d16e5.jpg diff --git a/docs/0.19.x/img/1d57cc4e24d28b8283f98bda247d84e7.jpg b/docs/master/img/1d57cc4e24d28b8283f98bda247d84e7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1d57cc4e24d28b8283f98bda247d84e7.jpg rename to docs/master/img/1d57cc4e24d28b8283f98bda247d84e7.jpg diff --git a/docs/0.19.x/img/1d9a1eb9200948482ebfd5811679276a.jpg b/docs/master/img/1d9a1eb9200948482ebfd5811679276a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1d9a1eb9200948482ebfd5811679276a.jpg rename to docs/master/img/1d9a1eb9200948482ebfd5811679276a.jpg diff --git a/docs/0.19.x/img/1da4a8f74cdb166cdc91e2f691cf3ac5.jpg b/docs/master/img/1da4a8f74cdb166cdc91e2f691cf3ac5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1da4a8f74cdb166cdc91e2f691cf3ac5.jpg rename to docs/master/img/1da4a8f74cdb166cdc91e2f691cf3ac5.jpg diff --git a/docs/0.19.x/img/1daad9ca4ebf0fe49529674b890b3df2.jpg b/docs/master/img/1daad9ca4ebf0fe49529674b890b3df2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1daad9ca4ebf0fe49529674b890b3df2.jpg rename to docs/master/img/1daad9ca4ebf0fe49529674b890b3df2.jpg diff --git a/docs/0.19.x/img/1ddb602277c74f97c01c61af96da4a87.jpg b/docs/master/img/1ddb602277c74f97c01c61af96da4a87.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1ddb602277c74f97c01c61af96da4a87.jpg rename to docs/master/img/1ddb602277c74f97c01c61af96da4a87.jpg diff --git a/docs/0.19.x/img/1e4e584cd8a99da7f18a5581de1f7be3.jpg b/docs/master/img/1e4e584cd8a99da7f18a5581de1f7be3.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1e4e584cd8a99da7f18a5581de1f7be3.jpg rename to docs/master/img/1e4e584cd8a99da7f18a5581de1f7be3.jpg diff --git a/docs/0.19.x/img/1f1667a67d885f419222cbd85c70dd56.jpg b/docs/master/img/1f1667a67d885f419222cbd85c70dd56.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1f1667a67d885f419222cbd85c70dd56.jpg rename to docs/master/img/1f1667a67d885f419222cbd85c70dd56.jpg diff --git a/docs/0.19.x/img/1f7b275b5002d3772b809055d9199f91.jpg b/docs/master/img/1f7b275b5002d3772b809055d9199f91.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1f7b275b5002d3772b809055d9199f91.jpg rename to docs/master/img/1f7b275b5002d3772b809055d9199f91.jpg diff --git a/docs/0.19.x/img/1f8c02d4fdbdbcaa014972bca5620cf3.jpg b/docs/master/img/1f8c02d4fdbdbcaa014972bca5620cf3.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1f8c02d4fdbdbcaa014972bca5620cf3.jpg rename to docs/master/img/1f8c02d4fdbdbcaa014972bca5620cf3.jpg diff --git a/docs/0.19.x/img/1f9000a4bf057edcb9b87d7a4abb8e8d.jpg b/docs/master/img/1f9000a4bf057edcb9b87d7a4abb8e8d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1f9000a4bf057edcb9b87d7a4abb8e8d.jpg rename to docs/master/img/1f9000a4bf057edcb9b87d7a4abb8e8d.jpg diff --git a/docs/0.19.x/img/1fa419ff78b610bf4a5b3b71df728cec.jpg b/docs/master/img/1fa419ff78b610bf4a5b3b71df728cec.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1fa419ff78b610bf4a5b3b71df728cec.jpg rename to docs/master/img/1fa419ff78b610bf4a5b3b71df728cec.jpg diff --git a/docs/0.19.x/img/1fc7cc5cbdba693962c7708456165810.jpg b/docs/master/img/1fc7cc5cbdba693962c7708456165810.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1fc7cc5cbdba693962c7708456165810.jpg rename to docs/master/img/1fc7cc5cbdba693962c7708456165810.jpg diff --git a/docs/0.19.x/img/1fc92e9d8efa5433f7346284592e9ea0.jpg b/docs/master/img/1fc92e9d8efa5433f7346284592e9ea0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1fc92e9d8efa5433f7346284592e9ea0.jpg rename to docs/master/img/1fc92e9d8efa5433f7346284592e9ea0.jpg diff --git a/docs/0.19.x/img/1ff26934befcf3ca9623f1e729a8824c.jpg b/docs/master/img/1ff26934befcf3ca9623f1e729a8824c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1ff26934befcf3ca9623f1e729a8824c.jpg rename to docs/master/img/1ff26934befcf3ca9623f1e729a8824c.jpg diff --git a/docs/0.19.x/img/1ff751c4de3bbad5543f0dbbad73dd35.jpg b/docs/master/img/1ff751c4de3bbad5543f0dbbad73dd35.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/1ff751c4de3bbad5543f0dbbad73dd35.jpg rename to docs/master/img/1ff751c4de3bbad5543f0dbbad73dd35.jpg diff --git a/docs/0.19.x/img/20310556eb1fb84146ff2584e166fd9c.jpg b/docs/master/img/20310556eb1fb84146ff2584e166fd9c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/20310556eb1fb84146ff2584e166fd9c.jpg rename to docs/master/img/20310556eb1fb84146ff2584e166fd9c.jpg diff --git a/docs/0.19.x/img/203c5a2c58d6567a86dbc86faa92209e.jpg b/docs/master/img/203c5a2c58d6567a86dbc86faa92209e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/203c5a2c58d6567a86dbc86faa92209e.jpg rename to docs/master/img/203c5a2c58d6567a86dbc86faa92209e.jpg diff --git a/docs/0.19.x/img/207e92cfc624372bc9c72a160c02114f.jpg b/docs/master/img/207e92cfc624372bc9c72a160c02114f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/207e92cfc624372bc9c72a160c02114f.jpg rename to docs/master/img/207e92cfc624372bc9c72a160c02114f.jpg diff --git a/docs/0.19.x/img/20d6857e752f6ffdfdd20a88c32f837c.jpg b/docs/master/img/20d6857e752f6ffdfdd20a88c32f837c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/20d6857e752f6ffdfdd20a88c32f837c.jpg rename to docs/master/img/20d6857e752f6ffdfdd20a88c32f837c.jpg diff --git a/docs/0.19.x/img/21937e85250a7aaa8aea86e4fbf93452.jpg b/docs/master/img/21937e85250a7aaa8aea86e4fbf93452.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/21937e85250a7aaa8aea86e4fbf93452.jpg rename to docs/master/img/21937e85250a7aaa8aea86e4fbf93452.jpg diff --git a/docs/0.19.x/img/21b6e31779ad3b1a382b13e65ec917c7.jpg b/docs/master/img/21b6e31779ad3b1a382b13e65ec917c7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/21b6e31779ad3b1a382b13e65ec917c7.jpg rename to docs/master/img/21b6e31779ad3b1a382b13e65ec917c7.jpg diff --git a/docs/0.19.x/img/21e9f42c5b6730d593e37a11c6ffb13a.jpg b/docs/master/img/21e9f42c5b6730d593e37a11c6ffb13a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/21e9f42c5b6730d593e37a11c6ffb13a.jpg rename to docs/master/img/21e9f42c5b6730d593e37a11c6ffb13a.jpg diff --git a/docs/0.19.x/img/2238e05d9e3ae45b81577c9902a9cfbb.jpg b/docs/master/img/2238e05d9e3ae45b81577c9902a9cfbb.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2238e05d9e3ae45b81577c9902a9cfbb.jpg rename to docs/master/img/2238e05d9e3ae45b81577c9902a9cfbb.jpg diff --git a/docs/0.19.x/img/223988a8bef489edcaa2f198e5e3a9a5.jpg b/docs/master/img/223988a8bef489edcaa2f198e5e3a9a5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/223988a8bef489edcaa2f198e5e3a9a5.jpg rename to docs/master/img/223988a8bef489edcaa2f198e5e3a9a5.jpg diff --git a/docs/0.19.x/img/224162d8cfff6c8ad85718be6b261b70.jpg b/docs/master/img/224162d8cfff6c8ad85718be6b261b70.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/224162d8cfff6c8ad85718be6b261b70.jpg rename to docs/master/img/224162d8cfff6c8ad85718be6b261b70.jpg diff --git a/docs/0.19.x/img/22c1b7663568bf6c404a07778507a93e.jpg b/docs/master/img/22c1b7663568bf6c404a07778507a93e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/22c1b7663568bf6c404a07778507a93e.jpg rename to docs/master/img/22c1b7663568bf6c404a07778507a93e.jpg diff --git a/docs/0.19.x/img/22f3a10ad9acceb77ea6193f945b11cf.jpg b/docs/master/img/22f3a10ad9acceb77ea6193f945b11cf.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/22f3a10ad9acceb77ea6193f945b11cf.jpg rename to docs/master/img/22f3a10ad9acceb77ea6193f945b11cf.jpg diff --git a/docs/0.19.x/img/23bd4397a3e30a81d2ee26977f708e63.jpg b/docs/master/img/23bd4397a3e30a81d2ee26977f708e63.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/23bd4397a3e30a81d2ee26977f708e63.jpg rename to docs/master/img/23bd4397a3e30a81d2ee26977f708e63.jpg diff --git a/docs/0.19.x/img/23dac8b2be31a1cbe914b59ff2670dbf.jpg b/docs/master/img/23dac8b2be31a1cbe914b59ff2670dbf.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/23dac8b2be31a1cbe914b59ff2670dbf.jpg rename to docs/master/img/23dac8b2be31a1cbe914b59ff2670dbf.jpg diff --git a/docs/0.19.x/img/2490002eaeb5d875d22825fc267ef925.jpg b/docs/master/img/2490002eaeb5d875d22825fc267ef925.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2490002eaeb5d875d22825fc267ef925.jpg rename to docs/master/img/2490002eaeb5d875d22825fc267ef925.jpg diff --git a/docs/0.19.x/img/25a334612cb5a1736ebcc7eec00c7b29.jpg b/docs/master/img/25a334612cb5a1736ebcc7eec00c7b29.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/25a334612cb5a1736ebcc7eec00c7b29.jpg rename to docs/master/img/25a334612cb5a1736ebcc7eec00c7b29.jpg diff --git a/docs/0.19.x/img/2639e09c454322633772269753a50710.jpg b/docs/master/img/2639e09c454322633772269753a50710.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2639e09c454322633772269753a50710.jpg rename to docs/master/img/2639e09c454322633772269753a50710.jpg diff --git a/docs/0.19.x/img/264ba68c53c2e2867b9e307e8b940d49.jpg b/docs/master/img/264ba68c53c2e2867b9e307e8b940d49.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/264ba68c53c2e2867b9e307e8b940d49.jpg rename to docs/master/img/264ba68c53c2e2867b9e307e8b940d49.jpg diff --git a/docs/0.19.x/img/264dc5b617a5aa98151c4ea6975e9a90.jpg b/docs/master/img/264dc5b617a5aa98151c4ea6975e9a90.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/264dc5b617a5aa98151c4ea6975e9a90.jpg rename to docs/master/img/264dc5b617a5aa98151c4ea6975e9a90.jpg diff --git a/docs/0.19.x/img/26f66401927461c0129b7f4ad33e5322.jpg b/docs/master/img/26f66401927461c0129b7f4ad33e5322.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/26f66401927461c0129b7f4ad33e5322.jpg rename to docs/master/img/26f66401927461c0129b7f4ad33e5322.jpg diff --git a/docs/0.19.x/img/2736dbaab8f81e4cb2d0e388f2b0c6b2.jpg b/docs/master/img/2736dbaab8f81e4cb2d0e388f2b0c6b2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2736dbaab8f81e4cb2d0e388f2b0c6b2.jpg rename to docs/master/img/2736dbaab8f81e4cb2d0e388f2b0c6b2.jpg diff --git a/docs/0.19.x/img/27449ee75d40c9391b04e2ca48c4d83b.jpg b/docs/master/img/27449ee75d40c9391b04e2ca48c4d83b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/27449ee75d40c9391b04e2ca48c4d83b.jpg rename to docs/master/img/27449ee75d40c9391b04e2ca48c4d83b.jpg diff --git a/docs/0.19.x/img/27eaae520bfaa9c4bdbef494c5029741.jpg b/docs/master/img/27eaae520bfaa9c4bdbef494c5029741.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/27eaae520bfaa9c4bdbef494c5029741.jpg rename to docs/master/img/27eaae520bfaa9c4bdbef494c5029741.jpg diff --git a/docs/0.19.x/img/280a00b263d3144cd3a9c424ed44ee51.jpg b/docs/master/img/280a00b263d3144cd3a9c424ed44ee51.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/280a00b263d3144cd3a9c424ed44ee51.jpg rename to docs/master/img/280a00b263d3144cd3a9c424ed44ee51.jpg diff --git a/docs/0.19.x/img/287e15c4b3d9b3f227fdc8e364609382.jpg b/docs/master/img/287e15c4b3d9b3f227fdc8e364609382.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/287e15c4b3d9b3f227fdc8e364609382.jpg rename to docs/master/img/287e15c4b3d9b3f227fdc8e364609382.jpg diff --git a/docs/0.19.x/img/2953c3498ec0877c5ebcc172050cce88.jpg b/docs/master/img/2953c3498ec0877c5ebcc172050cce88.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2953c3498ec0877c5ebcc172050cce88.jpg rename to docs/master/img/2953c3498ec0877c5ebcc172050cce88.jpg diff --git a/docs/0.21.3/img/2a0c137e7b86ad939e131293a273579b.jpg b/docs/master/img/2a0c137e7b86ad939e131293a273579b.jpg similarity index 100% rename from docs/0.21.3/img/2a0c137e7b86ad939e131293a273579b.jpg rename to docs/master/img/2a0c137e7b86ad939e131293a273579b.jpg diff --git a/docs/0.21.3/img/2a0c137e7b86ad939e131293a273579b.png b/docs/master/img/2a0c137e7b86ad939e131293a273579b.png similarity index 100% rename from docs/0.21.3/img/2a0c137e7b86ad939e131293a273579b.png rename to docs/master/img/2a0c137e7b86ad939e131293a273579b.png diff --git a/docs/0.19.x/img/2a332823ff053f404ac53657eb86b1a0.jpg b/docs/master/img/2a332823ff053f404ac53657eb86b1a0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2a332823ff053f404ac53657eb86b1a0.jpg rename to docs/master/img/2a332823ff053f404ac53657eb86b1a0.jpg diff --git a/docs/0.19.x/img/2a58cf81e4ccf9022d6033557d49aed5.jpg b/docs/master/img/2a58cf81e4ccf9022d6033557d49aed5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2a58cf81e4ccf9022d6033557d49aed5.jpg rename to docs/master/img/2a58cf81e4ccf9022d6033557d49aed5.jpg diff --git a/docs/0.19.x/img/2a96390b6e7eb8fc07579c2f9066fc4d.jpg b/docs/master/img/2a96390b6e7eb8fc07579c2f9066fc4d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2a96390b6e7eb8fc07579c2f9066fc4d.jpg rename to docs/master/img/2a96390b6e7eb8fc07579c2f9066fc4d.jpg diff --git a/docs/0.19.x/img/2ad6b07024498864a0ce275913a42d9f.jpg b/docs/master/img/2ad6b07024498864a0ce275913a42d9f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2ad6b07024498864a0ce275913a42d9f.jpg rename to docs/master/img/2ad6b07024498864a0ce275913a42d9f.jpg diff --git a/docs/0.19.x/img/2af4d75ca07ede34c7d38b8f7708723d.jpg b/docs/master/img/2af4d75ca07ede34c7d38b8f7708723d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2af4d75ca07ede34c7d38b8f7708723d.jpg rename to docs/master/img/2af4d75ca07ede34c7d38b8f7708723d.jpg diff --git a/docs/0.19.x/img/2b0d9f09a2b8a107ace9ce7aa234481e.jpg b/docs/master/img/2b0d9f09a2b8a107ace9ce7aa234481e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2b0d9f09a2b8a107ace9ce7aa234481e.jpg rename to docs/master/img/2b0d9f09a2b8a107ace9ce7aa234481e.jpg diff --git a/docs/0.19.x/img/2b117c8d0556a027e7ee3bb265a6bf63.jpg b/docs/master/img/2b117c8d0556a027e7ee3bb265a6bf63.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2b117c8d0556a027e7ee3bb265a6bf63.jpg rename to docs/master/img/2b117c8d0556a027e7ee3bb265a6bf63.jpg diff --git a/docs/0.19.x/img/2bd24ed32bcf24db79058c3cc81f5331.jpg b/docs/master/img/2bd24ed32bcf24db79058c3cc81f5331.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2bd24ed32bcf24db79058c3cc81f5331.jpg rename to docs/master/img/2bd24ed32bcf24db79058c3cc81f5331.jpg diff --git a/docs/0.19.x/img/2bf67de05d37f31bd2154fdc96690102.jpg b/docs/master/img/2bf67de05d37f31bd2154fdc96690102.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2bf67de05d37f31bd2154fdc96690102.jpg rename to docs/master/img/2bf67de05d37f31bd2154fdc96690102.jpg diff --git a/docs/0.19.x/img/2c1da71c882c95ba6660cdad0d976f6d.jpg b/docs/master/img/2c1da71c882c95ba6660cdad0d976f6d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2c1da71c882c95ba6660cdad0d976f6d.jpg rename to docs/master/img/2c1da71c882c95ba6660cdad0d976f6d.jpg diff --git a/docs/0.19.x/img/2c2dcc83fc38e46810a36e59b2614a5c.jpg b/docs/master/img/2c2dcc83fc38e46810a36e59b2614a5c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2c2dcc83fc38e46810a36e59b2614a5c.jpg rename to docs/master/img/2c2dcc83fc38e46810a36e59b2614a5c.jpg diff --git a/docs/0.19.x/img/2c90187d36ba884ee9ae4c99334fb3b4.jpg b/docs/master/img/2c90187d36ba884ee9ae4c99334fb3b4.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2c90187d36ba884ee9ae4c99334fb3b4.jpg rename to docs/master/img/2c90187d36ba884ee9ae4c99334fb3b4.jpg diff --git a/docs/0.19.x/img/2ca002ed0f4e27f9040d3f3ec58fbb38.jpg b/docs/master/img/2ca002ed0f4e27f9040d3f3ec58fbb38.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2ca002ed0f4e27f9040d3f3ec58fbb38.jpg rename to docs/master/img/2ca002ed0f4e27f9040d3f3ec58fbb38.jpg diff --git a/docs/0.19.x/img/2d3029206649000f40ed9f51bbeceafb.jpg b/docs/master/img/2d3029206649000f40ed9f51bbeceafb.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2d3029206649000f40ed9f51bbeceafb.jpg rename to docs/master/img/2d3029206649000f40ed9f51bbeceafb.jpg diff --git a/docs/0.19.x/img/2d4c303729e327500afa8bdb343713ff.jpg b/docs/master/img/2d4c303729e327500afa8bdb343713ff.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2d4c303729e327500afa8bdb343713ff.jpg rename to docs/master/img/2d4c303729e327500afa8bdb343713ff.jpg diff --git a/docs/0.19.x/img/2d7a3ddf62ceb125c15ba1947173e790.jpg b/docs/master/img/2d7a3ddf62ceb125c15ba1947173e790.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2d7a3ddf62ceb125c15ba1947173e790.jpg rename to docs/master/img/2d7a3ddf62ceb125c15ba1947173e790.jpg diff --git a/docs/0.19.x/img/2e06713c93719ff874fb9f4fab7a6fbf.jpg b/docs/master/img/2e06713c93719ff874fb9f4fab7a6fbf.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2e06713c93719ff874fb9f4fab7a6fbf.jpg rename to docs/master/img/2e06713c93719ff874fb9f4fab7a6fbf.jpg diff --git a/docs/0.19.x/img/2e2461d59015f9759fa0612965e2425e.jpg b/docs/master/img/2e2461d59015f9759fa0612965e2425e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2e2461d59015f9759fa0612965e2425e.jpg rename to docs/master/img/2e2461d59015f9759fa0612965e2425e.jpg diff --git a/docs/0.19.x/img/2edeef5a5007d4bd8b4f43fe2670cf85.jpg b/docs/master/img/2edeef5a5007d4bd8b4f43fe2670cf85.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2edeef5a5007d4bd8b4f43fe2670cf85.jpg rename to docs/master/img/2edeef5a5007d4bd8b4f43fe2670cf85.jpg diff --git a/docs/0.19.x/img/2f373d871220ee042a8c2ee44e6fff3a.jpg b/docs/master/img/2f373d871220ee042a8c2ee44e6fff3a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2f373d871220ee042a8c2ee44e6fff3a.jpg rename to docs/master/img/2f373d871220ee042a8c2ee44e6fff3a.jpg diff --git a/docs/0.19.x/img/2f6a285b749960084841d17c3c97f2d7.jpg b/docs/master/img/2f6a285b749960084841d17c3c97f2d7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/2f6a285b749960084841d17c3c97f2d7.jpg rename to docs/master/img/2f6a285b749960084841d17c3c97f2d7.jpg diff --git a/docs/0.21.3/img/3-5-001.png b/docs/master/img/3-5-001.png similarity index 100% rename from docs/0.21.3/img/3-5-001.png rename to docs/master/img/3-5-001.png diff --git a/docs/0.19.x/img/3001d4b4ed72087e1a6010f43c053cc6.jpg b/docs/master/img/3001d4b4ed72087e1a6010f43c053cc6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3001d4b4ed72087e1a6010f43c053cc6.jpg rename to docs/master/img/3001d4b4ed72087e1a6010f43c053cc6.jpg diff --git a/docs/0.19.x/img/300d1995dc6050bbfd575b2c14ec81ae.jpg b/docs/master/img/300d1995dc6050bbfd575b2c14ec81ae.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/300d1995dc6050bbfd575b2c14ec81ae.jpg rename to docs/master/img/300d1995dc6050bbfd575b2c14ec81ae.jpg diff --git a/docs/0.19.x/img/30641b10b766d35775b6bbb4d21e74b7.jpg b/docs/master/img/30641b10b766d35775b6bbb4d21e74b7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/30641b10b766d35775b6bbb4d21e74b7.jpg rename to docs/master/img/30641b10b766d35775b6bbb4d21e74b7.jpg diff --git a/docs/0.19.x/img/30fc2a610fc7de5c19317e1fc584765f.jpg b/docs/master/img/30fc2a610fc7de5c19317e1fc584765f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/30fc2a610fc7de5c19317e1fc584765f.jpg rename to docs/master/img/30fc2a610fc7de5c19317e1fc584765f.jpg diff --git a/docs/0.19.x/img/3109bc087a626380237668dfcc4ecd96.jpg b/docs/master/img/3109bc087a626380237668dfcc4ecd96.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3109bc087a626380237668dfcc4ecd96.jpg rename to docs/master/img/3109bc087a626380237668dfcc4ecd96.jpg diff --git a/docs/0.19.x/img/319e234a072e86b6b55ce431ca56b43e.jpg b/docs/master/img/319e234a072e86b6b55ce431ca56b43e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/319e234a072e86b6b55ce431ca56b43e.jpg rename to docs/master/img/319e234a072e86b6b55ce431ca56b43e.jpg diff --git a/docs/0.19.x/img/32246af90101d1607825a589ebea6880.jpg b/docs/master/img/32246af90101d1607825a589ebea6880.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/32246af90101d1607825a589ebea6880.jpg rename to docs/master/img/32246af90101d1607825a589ebea6880.jpg diff --git a/docs/0.19.x/img/32f500a4e2eba65727c1e003699dff90.jpg b/docs/master/img/32f500a4e2eba65727c1e003699dff90.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/32f500a4e2eba65727c1e003699dff90.jpg rename to docs/master/img/32f500a4e2eba65727c1e003699dff90.jpg diff --git a/docs/0.19.x/img/337f0e255aa71dafb655629cb09a0c14.jpg b/docs/master/img/337f0e255aa71dafb655629cb09a0c14.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/337f0e255aa71dafb655629cb09a0c14.jpg rename to docs/master/img/337f0e255aa71dafb655629cb09a0c14.jpg diff --git a/docs/0.19.x/img/33a8ceddf8e3edfad259a804819c2637.jpg b/docs/master/img/33a8ceddf8e3edfad259a804819c2637.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/33a8ceddf8e3edfad259a804819c2637.jpg rename to docs/master/img/33a8ceddf8e3edfad259a804819c2637.jpg diff --git a/docs/0.19.x/img/33b1cdc0654561cadac36a1232552b99.jpg b/docs/master/img/33b1cdc0654561cadac36a1232552b99.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/33b1cdc0654561cadac36a1232552b99.jpg rename to docs/master/img/33b1cdc0654561cadac36a1232552b99.jpg diff --git a/docs/0.19.x/img/33b99b5c21f0cf5b03e92fe60cbe6ad0.jpg b/docs/master/img/33b99b5c21f0cf5b03e92fe60cbe6ad0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/33b99b5c21f0cf5b03e92fe60cbe6ad0.jpg rename to docs/master/img/33b99b5c21f0cf5b03e92fe60cbe6ad0.jpg diff --git a/docs/0.19.x/img/33d1bf322bf0f6046a1145dbc264803b.jpg b/docs/master/img/33d1bf322bf0f6046a1145dbc264803b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/33d1bf322bf0f6046a1145dbc264803b.jpg rename to docs/master/img/33d1bf322bf0f6046a1145dbc264803b.jpg diff --git a/docs/0.19.x/img/33eb0dacfcc0df16c84bfaed52d31859.jpg b/docs/master/img/33eb0dacfcc0df16c84bfaed52d31859.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/33eb0dacfcc0df16c84bfaed52d31859.jpg rename to docs/master/img/33eb0dacfcc0df16c84bfaed52d31859.jpg diff --git a/docs/0.19.x/img/33f1b6fb64999d2af571c675b7f17f34.jpg b/docs/master/img/33f1b6fb64999d2af571c675b7f17f34.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/33f1b6fb64999d2af571c675b7f17f34.jpg rename to docs/master/img/33f1b6fb64999d2af571c675b7f17f34.jpg diff --git a/docs/0.19.x/img/3405852dc63c9a78447d479784f1ee7e.jpg b/docs/master/img/3405852dc63c9a78447d479784f1ee7e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3405852dc63c9a78447d479784f1ee7e.jpg rename to docs/master/img/3405852dc63c9a78447d479784f1ee7e.jpg diff --git a/docs/0.19.x/img/341145ae3a937e5fa152262d13dc6fcf.jpg b/docs/master/img/341145ae3a937e5fa152262d13dc6fcf.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/341145ae3a937e5fa152262d13dc6fcf.jpg rename to docs/master/img/341145ae3a937e5fa152262d13dc6fcf.jpg diff --git a/docs/0.19.x/img/343401666d8fc0aeeea395495b9dc570.jpg b/docs/master/img/343401666d8fc0aeeea395495b9dc570.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/343401666d8fc0aeeea395495b9dc570.jpg rename to docs/master/img/343401666d8fc0aeeea395495b9dc570.jpg diff --git a/docs/0.19.x/img/345ab99b5a1246fb019e249dae570191.jpg b/docs/master/img/345ab99b5a1246fb019e249dae570191.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/345ab99b5a1246fb019e249dae570191.jpg rename to docs/master/img/345ab99b5a1246fb019e249dae570191.jpg diff --git a/docs/0.19.x/img/352bc5f9f9d6aefcdaf8deca4f7964ff.jpg b/docs/master/img/352bc5f9f9d6aefcdaf8deca4f7964ff.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/352bc5f9f9d6aefcdaf8deca4f7964ff.jpg rename to docs/master/img/352bc5f9f9d6aefcdaf8deca4f7964ff.jpg diff --git a/docs/0.19.x/img/355df435a05593b653d7d988c06e5d3c.jpg b/docs/master/img/355df435a05593b653d7d988c06e5d3c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/355df435a05593b653d7d988c06e5d3c.jpg rename to docs/master/img/355df435a05593b653d7d988c06e5d3c.jpg diff --git a/docs/0.19.x/img/3579ce0b5c145fb891d865367eeba3ac.jpg b/docs/master/img/3579ce0b5c145fb891d865367eeba3ac.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3579ce0b5c145fb891d865367eeba3ac.jpg rename to docs/master/img/3579ce0b5c145fb891d865367eeba3ac.jpg diff --git a/docs/0.19.x/img/35a2693b8dbfe5cf9335dc2659c6ef96.jpg b/docs/master/img/35a2693b8dbfe5cf9335dc2659c6ef96.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/35a2693b8dbfe5cf9335dc2659c6ef96.jpg rename to docs/master/img/35a2693b8dbfe5cf9335dc2659c6ef96.jpg diff --git a/docs/0.19.x/img/35b3276dd7e50cda7dd79a91161a1a26.jpg b/docs/master/img/35b3276dd7e50cda7dd79a91161a1a26.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/35b3276dd7e50cda7dd79a91161a1a26.jpg rename to docs/master/img/35b3276dd7e50cda7dd79a91161a1a26.jpg diff --git a/docs/0.19.x/img/362af37df82b07d11576fc5e45db7828.jpg b/docs/master/img/362af37df82b07d11576fc5e45db7828.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/362af37df82b07d11576fc5e45db7828.jpg rename to docs/master/img/362af37df82b07d11576fc5e45db7828.jpg diff --git a/docs/0.19.x/img/36846302fd24ac609e0cfef5fe6f8678.jpg b/docs/master/img/36846302fd24ac609e0cfef5fe6f8678.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/36846302fd24ac609e0cfef5fe6f8678.jpg rename to docs/master/img/36846302fd24ac609e0cfef5fe6f8678.jpg diff --git a/docs/0.19.x/img/369b6e6bd43ee84fe99e14c8d78cdc9f.jpg b/docs/master/img/369b6e6bd43ee84fe99e14c8d78cdc9f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/369b6e6bd43ee84fe99e14c8d78cdc9f.jpg rename to docs/master/img/369b6e6bd43ee84fe99e14c8d78cdc9f.jpg diff --git a/docs/0.19.x/img/36aff9afacf42a6a0b903bb6cd3409dc.jpg b/docs/master/img/36aff9afacf42a6a0b903bb6cd3409dc.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/36aff9afacf42a6a0b903bb6cd3409dc.jpg rename to docs/master/img/36aff9afacf42a6a0b903bb6cd3409dc.jpg diff --git a/docs/0.19.x/img/36c2dba9ae7680cd09eff62c73e37963.jpg b/docs/master/img/36c2dba9ae7680cd09eff62c73e37963.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/36c2dba9ae7680cd09eff62c73e37963.jpg rename to docs/master/img/36c2dba9ae7680cd09eff62c73e37963.jpg diff --git a/docs/0.19.x/img/36f54997ff4df647587d1bfd2ddb3ee2.jpg b/docs/master/img/36f54997ff4df647587d1bfd2ddb3ee2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/36f54997ff4df647587d1bfd2ddb3ee2.jpg rename to docs/master/img/36f54997ff4df647587d1bfd2ddb3ee2.jpg diff --git a/docs/0.19.x/img/375fd0c32c15c4547b00ae36c0ec0a6a.jpg b/docs/master/img/375fd0c32c15c4547b00ae36c0ec0a6a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/375fd0c32c15c4547b00ae36c0ec0a6a.jpg rename to docs/master/img/375fd0c32c15c4547b00ae36c0ec0a6a.jpg diff --git a/docs/0.19.x/img/3771db7af1e3b7bf33e15ec20d278f39.jpg b/docs/master/img/3771db7af1e3b7bf33e15ec20d278f39.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3771db7af1e3b7bf33e15ec20d278f39.jpg rename to docs/master/img/3771db7af1e3b7bf33e15ec20d278f39.jpg diff --git a/docs/0.19.x/img/3776f899ba5f1d7432c553c6c3aae381.jpg b/docs/master/img/3776f899ba5f1d7432c553c6c3aae381.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3776f899ba5f1d7432c553c6c3aae381.jpg rename to docs/master/img/3776f899ba5f1d7432c553c6c3aae381.jpg diff --git a/docs/0.19.x/img/377b02d08a6b388008fc8cb132080d20.jpg b/docs/master/img/377b02d08a6b388008fc8cb132080d20.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/377b02d08a6b388008fc8cb132080d20.jpg rename to docs/master/img/377b02d08a6b388008fc8cb132080d20.jpg diff --git a/docs/0.19.x/img/37e4251726a37bc02df4ef4390572e9a.jpg b/docs/master/img/37e4251726a37bc02df4ef4390572e9a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/37e4251726a37bc02df4ef4390572e9a.jpg rename to docs/master/img/37e4251726a37bc02df4ef4390572e9a.jpg diff --git a/docs/0.19.x/img/38320089278fc639e640f3f772eac6b1.jpg b/docs/master/img/38320089278fc639e640f3f772eac6b1.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/38320089278fc639e640f3f772eac6b1.jpg rename to docs/master/img/38320089278fc639e640f3f772eac6b1.jpg diff --git a/docs/0.19.x/img/38437ee82743c886e2ebfbb5bd5e0c89.jpg b/docs/master/img/38437ee82743c886e2ebfbb5bd5e0c89.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/38437ee82743c886e2ebfbb5bd5e0c89.jpg rename to docs/master/img/38437ee82743c886e2ebfbb5bd5e0c89.jpg diff --git a/docs/0.19.x/img/385a9104b38457eeb59acf86cf974472.jpg b/docs/master/img/385a9104b38457eeb59acf86cf974472.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/385a9104b38457eeb59acf86cf974472.jpg rename to docs/master/img/385a9104b38457eeb59acf86cf974472.jpg diff --git a/docs/0.19.x/img/38a411931f9f49e71b888f7998427122.jpg b/docs/master/img/38a411931f9f49e71b888f7998427122.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/38a411931f9f49e71b888f7998427122.jpg rename to docs/master/img/38a411931f9f49e71b888f7998427122.jpg diff --git a/docs/0.19.x/img/390e2bdab30b6e7421082f13e8cfd6b0.jpg b/docs/master/img/390e2bdab30b6e7421082f13e8cfd6b0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/390e2bdab30b6e7421082f13e8cfd6b0.jpg rename to docs/master/img/390e2bdab30b6e7421082f13e8cfd6b0.jpg diff --git a/docs/0.19.x/img/3944d32654b4bf939d248b496f950b10.jpg b/docs/master/img/3944d32654b4bf939d248b496f950b10.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3944d32654b4bf939d248b496f950b10.jpg rename to docs/master/img/3944d32654b4bf939d248b496f950b10.jpg diff --git a/docs/0.19.x/img/395ca6ce9617a4fc0695db973496d29b.jpg b/docs/master/img/395ca6ce9617a4fc0695db973496d29b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/395ca6ce9617a4fc0695db973496d29b.jpg rename to docs/master/img/395ca6ce9617a4fc0695db973496d29b.jpg diff --git a/docs/0.19.x/img/3a03009ea272ed427cfa033086b89c72.jpg b/docs/master/img/3a03009ea272ed427cfa033086b89c72.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3a03009ea272ed427cfa033086b89c72.jpg rename to docs/master/img/3a03009ea272ed427cfa033086b89c72.jpg diff --git a/docs/0.19.x/img/3a378bb516408c0bd771667be478b787.jpg b/docs/master/img/3a378bb516408c0bd771667be478b787.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3a378bb516408c0bd771667be478b787.jpg rename to docs/master/img/3a378bb516408c0bd771667be478b787.jpg diff --git a/docs/0.19.x/img/3a876d35f8a2c82a19a71b0fd52f7153.jpg b/docs/master/img/3a876d35f8a2c82a19a71b0fd52f7153.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3a876d35f8a2c82a19a71b0fd52f7153.jpg rename to docs/master/img/3a876d35f8a2c82a19a71b0fd52f7153.jpg diff --git a/docs/0.19.x/img/3ad7487dba3ebdba90bc11d2016d0c99.jpg b/docs/master/img/3ad7487dba3ebdba90bc11d2016d0c99.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3ad7487dba3ebdba90bc11d2016d0c99.jpg rename to docs/master/img/3ad7487dba3ebdba90bc11d2016d0c99.jpg diff --git a/docs/0.19.x/img/3ae54efdf60edfa32ccbe7388834b0f2.jpg b/docs/master/img/3ae54efdf60edfa32ccbe7388834b0f2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3ae54efdf60edfa32ccbe7388834b0f2.jpg rename to docs/master/img/3ae54efdf60edfa32ccbe7388834b0f2.jpg diff --git a/docs/0.19.x/img/3af1cb0026efe5789c3acf3669ff5bc6.jpg b/docs/master/img/3af1cb0026efe5789c3acf3669ff5bc6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3af1cb0026efe5789c3acf3669ff5bc6.jpg rename to docs/master/img/3af1cb0026efe5789c3acf3669ff5bc6.jpg diff --git a/docs/0.19.x/img/3b1e10150e98ef95e977c12ad0607620.jpg b/docs/master/img/3b1e10150e98ef95e977c12ad0607620.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3b1e10150e98ef95e977c12ad0607620.jpg rename to docs/master/img/3b1e10150e98ef95e977c12ad0607620.jpg diff --git a/docs/0.19.x/img/3b70a99c882760b6d8ed230e145ed742.jpg b/docs/master/img/3b70a99c882760b6d8ed230e145ed742.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3b70a99c882760b6d8ed230e145ed742.jpg rename to docs/master/img/3b70a99c882760b6d8ed230e145ed742.jpg diff --git a/docs/0.19.x/img/3b87b19c6aee2b7c40b6ede968a45c07.jpg b/docs/master/img/3b87b19c6aee2b7c40b6ede968a45c07.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3b87b19c6aee2b7c40b6ede968a45c07.jpg rename to docs/master/img/3b87b19c6aee2b7c40b6ede968a45c07.jpg diff --git a/docs/0.19.x/img/3bdd2a9b74f6a2e0db32e159c63ffec0.jpg b/docs/master/img/3bdd2a9b74f6a2e0db32e159c63ffec0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3bdd2a9b74f6a2e0db32e159c63ffec0.jpg rename to docs/master/img/3bdd2a9b74f6a2e0db32e159c63ffec0.jpg diff --git a/docs/0.19.x/img/3bf32d926cdf24f440b6b831f0d9cc37.jpg b/docs/master/img/3bf32d926cdf24f440b6b831f0d9cc37.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3bf32d926cdf24f440b6b831f0d9cc37.jpg rename to docs/master/img/3bf32d926cdf24f440b6b831f0d9cc37.jpg diff --git a/docs/0.19.x/img/3cc550ecff73666ed35ae1efee48b4f4.jpg b/docs/master/img/3cc550ecff73666ed35ae1efee48b4f4.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3cc550ecff73666ed35ae1efee48b4f4.jpg rename to docs/master/img/3cc550ecff73666ed35ae1efee48b4f4.jpg diff --git a/docs/0.19.x/img/3cca81fd08a4732dc7061cd246b323ed.jpg b/docs/master/img/3cca81fd08a4732dc7061cd246b323ed.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3cca81fd08a4732dc7061cd246b323ed.jpg rename to docs/master/img/3cca81fd08a4732dc7061cd246b323ed.jpg diff --git a/docs/0.19.x/img/3d43f503466701e58ca2d516de2db505.jpg b/docs/master/img/3d43f503466701e58ca2d516de2db505.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3d43f503466701e58ca2d516de2db505.jpg rename to docs/master/img/3d43f503466701e58ca2d516de2db505.jpg diff --git a/docs/0.19.x/img/3d4ce0d796d2662b24eb8fa7b4f9710c.jpg b/docs/master/img/3d4ce0d796d2662b24eb8fa7b4f9710c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3d4ce0d796d2662b24eb8fa7b4f9710c.jpg rename to docs/master/img/3d4ce0d796d2662b24eb8fa7b4f9710c.jpg diff --git a/docs/0.19.x/img/3d52bf36b893b26195748e89c94273f0.jpg b/docs/master/img/3d52bf36b893b26195748e89c94273f0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3d52bf36b893b26195748e89c94273f0.jpg rename to docs/master/img/3d52bf36b893b26195748e89c94273f0.jpg diff --git a/docs/0.19.x/img/3d59995ed97bdad674b6afd6fbd928ec.jpg b/docs/master/img/3d59995ed97bdad674b6afd6fbd928ec.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3d59995ed97bdad674b6afd6fbd928ec.jpg rename to docs/master/img/3d59995ed97bdad674b6afd6fbd928ec.jpg diff --git a/docs/0.19.x/img/3dae1c97513f643047c2e33ee90ca8b5.jpg b/docs/master/img/3dae1c97513f643047c2e33ee90ca8b5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3dae1c97513f643047c2e33ee90ca8b5.jpg rename to docs/master/img/3dae1c97513f643047c2e33ee90ca8b5.jpg diff --git a/docs/0.19.x/img/3e0dffeddefe6ba1e809bd9b6276c771.jpg b/docs/master/img/3e0dffeddefe6ba1e809bd9b6276c771.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3e0dffeddefe6ba1e809bd9b6276c771.jpg rename to docs/master/img/3e0dffeddefe6ba1e809bd9b6276c771.jpg diff --git a/docs/0.19.x/img/3e233cefc937a43bb4481dd23d728b54.jpg b/docs/master/img/3e233cefc937a43bb4481dd23d728b54.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3e233cefc937a43bb4481dd23d728b54.jpg rename to docs/master/img/3e233cefc937a43bb4481dd23d728b54.jpg diff --git a/docs/0.19.x/img/3f5adc0c9b0e51a0759ed6ac49f94431.jpg b/docs/master/img/3f5adc0c9b0e51a0759ed6ac49f94431.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/3f5adc0c9b0e51a0759ed6ac49f94431.jpg rename to docs/master/img/3f5adc0c9b0e51a0759ed6ac49f94431.jpg diff --git a/docs/0.19.x/img/401b1228a76ba9190680851b9d095653.jpg b/docs/master/img/401b1228a76ba9190680851b9d095653.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/401b1228a76ba9190680851b9d095653.jpg rename to docs/master/img/401b1228a76ba9190680851b9d095653.jpg diff --git a/docs/0.19.x/img/403595258114953d3411fd1bfbf335f8.jpg b/docs/master/img/403595258114953d3411fd1bfbf335f8.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/403595258114953d3411fd1bfbf335f8.jpg rename to docs/master/img/403595258114953d3411fd1bfbf335f8.jpg diff --git a/docs/0.19.x/img/405095229d24f3525298dc6f99077666.jpg b/docs/master/img/405095229d24f3525298dc6f99077666.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/405095229d24f3525298dc6f99077666.jpg rename to docs/master/img/405095229d24f3525298dc6f99077666.jpg diff --git a/docs/0.19.x/img/407341c3d4d055b857bb3229003b9daf.jpg b/docs/master/img/407341c3d4d055b857bb3229003b9daf.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/407341c3d4d055b857bb3229003b9daf.jpg rename to docs/master/img/407341c3d4d055b857bb3229003b9daf.jpg diff --git a/docs/0.19.x/img/412f5988c3736daa68f47a0dc9fba659.jpg b/docs/master/img/412f5988c3736daa68f47a0dc9fba659.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/412f5988c3736daa68f47a0dc9fba659.jpg rename to docs/master/img/412f5988c3736daa68f47a0dc9fba659.jpg diff --git a/docs/0.19.x/img/418f3dbcb32031257a948ec23d05e53e.jpg b/docs/master/img/418f3dbcb32031257a948ec23d05e53e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/418f3dbcb32031257a948ec23d05e53e.jpg rename to docs/master/img/418f3dbcb32031257a948ec23d05e53e.jpg diff --git a/docs/0.19.x/img/41c9612e6e74708a274b11f770810663.jpg b/docs/master/img/41c9612e6e74708a274b11f770810663.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/41c9612e6e74708a274b11f770810663.jpg rename to docs/master/img/41c9612e6e74708a274b11f770810663.jpg diff --git a/docs/0.19.x/img/423f64b70bdfeba3566e0bbcca01c277.jpg b/docs/master/img/423f64b70bdfeba3566e0bbcca01c277.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/423f64b70bdfeba3566e0bbcca01c277.jpg rename to docs/master/img/423f64b70bdfeba3566e0bbcca01c277.jpg diff --git a/docs/0.19.x/img/4246a718076893e37084bc69a7e16007.jpg b/docs/master/img/4246a718076893e37084bc69a7e16007.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/4246a718076893e37084bc69a7e16007.jpg rename to docs/master/img/4246a718076893e37084bc69a7e16007.jpg diff --git a/docs/0.19.x/img/42edb18b0951c4f7ab739e5c24bf9ba3.jpg b/docs/master/img/42edb18b0951c4f7ab739e5c24bf9ba3.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/42edb18b0951c4f7ab739e5c24bf9ba3.jpg rename to docs/master/img/42edb18b0951c4f7ab739e5c24bf9ba3.jpg diff --git a/docs/0.19.x/img/42f93b2b294f585223e6c663f86504d0.jpg b/docs/master/img/42f93b2b294f585223e6c663f86504d0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/42f93b2b294f585223e6c663f86504d0.jpg rename to docs/master/img/42f93b2b294f585223e6c663f86504d0.jpg diff --git a/docs/0.19.x/img/433674c5864f3cec96b82f9e63b80fb7.jpg b/docs/master/img/433674c5864f3cec96b82f9e63b80fb7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/433674c5864f3cec96b82f9e63b80fb7.jpg rename to docs/master/img/433674c5864f3cec96b82f9e63b80fb7.jpg diff --git a/docs/0.19.x/img/433fedd575581cddbd612624b65e5dac.jpg b/docs/master/img/433fedd575581cddbd612624b65e5dac.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/433fedd575581cddbd612624b65e5dac.jpg rename to docs/master/img/433fedd575581cddbd612624b65e5dac.jpg diff --git a/docs/0.19.x/img/4341393efadcef482cea0dd54509e011.jpg b/docs/master/img/4341393efadcef482cea0dd54509e011.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/4341393efadcef482cea0dd54509e011.jpg rename to docs/master/img/4341393efadcef482cea0dd54509e011.jpg diff --git a/docs/0.19.x/img/43996aff9311511e6e2f81912a249c7e.jpg b/docs/master/img/43996aff9311511e6e2f81912a249c7e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/43996aff9311511e6e2f81912a249c7e.jpg rename to docs/master/img/43996aff9311511e6e2f81912a249c7e.jpg diff --git a/docs/0.19.x/img/43c1fea57579e54f80c0535bc582626f.jpg b/docs/master/img/43c1fea57579e54f80c0535bc582626f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/43c1fea57579e54f80c0535bc582626f.jpg rename to docs/master/img/43c1fea57579e54f80c0535bc582626f.jpg diff --git a/docs/0.19.x/img/43e13b580daefe5ba754b790dfbd216c.jpg b/docs/master/img/43e13b580daefe5ba754b790dfbd216c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/43e13b580daefe5ba754b790dfbd216c.jpg rename to docs/master/img/43e13b580daefe5ba754b790dfbd216c.jpg diff --git a/docs/0.19.x/img/43fc75930300610d8cb41a8d15899c15.jpg b/docs/master/img/43fc75930300610d8cb41a8d15899c15.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/43fc75930300610d8cb41a8d15899c15.jpg rename to docs/master/img/43fc75930300610d8cb41a8d15899c15.jpg diff --git a/docs/0.19.x/img/43fc8286f3bb11d7c8eb1e83e6538ac6.jpg b/docs/master/img/43fc8286f3bb11d7c8eb1e83e6538ac6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/43fc8286f3bb11d7c8eb1e83e6538ac6.jpg rename to docs/master/img/43fc8286f3bb11d7c8eb1e83e6538ac6.jpg diff --git a/docs/0.19.x/img/446d6d36c20a79508f1cc84c737a597b.jpg b/docs/master/img/446d6d36c20a79508f1cc84c737a597b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/446d6d36c20a79508f1cc84c737a597b.jpg rename to docs/master/img/446d6d36c20a79508f1cc84c737a597b.jpg diff --git a/docs/0.19.x/img/451ef7ed1a14a6cdc38324c8a5c7c683.jpg b/docs/master/img/451ef7ed1a14a6cdc38324c8a5c7c683.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/451ef7ed1a14a6cdc38324c8a5c7c683.jpg rename to docs/master/img/451ef7ed1a14a6cdc38324c8a5c7c683.jpg diff --git a/docs/0.19.x/img/45c6e9fedc8fe61dd8d3f388a0464d30.jpg b/docs/master/img/45c6e9fedc8fe61dd8d3f388a0464d30.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/45c6e9fedc8fe61dd8d3f388a0464d30.jpg rename to docs/master/img/45c6e9fedc8fe61dd8d3f388a0464d30.jpg diff --git a/docs/0.19.x/img/45e0e70e4566592b549e6835d6cba2a8.jpg b/docs/master/img/45e0e70e4566592b549e6835d6cba2a8.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/45e0e70e4566592b549e6835d6cba2a8.jpg rename to docs/master/img/45e0e70e4566592b549e6835d6cba2a8.jpg diff --git a/docs/0.19.x/img/4609693b88f682790da8203535625471.jpg b/docs/master/img/4609693b88f682790da8203535625471.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/4609693b88f682790da8203535625471.jpg rename to docs/master/img/4609693b88f682790da8203535625471.jpg diff --git a/docs/0.19.x/img/468283fb7514d3373112cb7db7c43356.jpg b/docs/master/img/468283fb7514d3373112cb7db7c43356.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/468283fb7514d3373112cb7db7c43356.jpg rename to docs/master/img/468283fb7514d3373112cb7db7c43356.jpg diff --git a/docs/0.19.x/img/46cc434e4ffc05f8d38712603b34bf7f.jpg b/docs/master/img/46cc434e4ffc05f8d38712603b34bf7f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/46cc434e4ffc05f8d38712603b34bf7f.jpg rename to docs/master/img/46cc434e4ffc05f8d38712603b34bf7f.jpg diff --git a/docs/0.19.x/img/47738e3e36a9bddb5bc708e8fc666204.jpg b/docs/master/img/47738e3e36a9bddb5bc708e8fc666204.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/47738e3e36a9bddb5bc708e8fc666204.jpg rename to docs/master/img/47738e3e36a9bddb5bc708e8fc666204.jpg diff --git a/docs/0.19.x/img/47d90c837620a14d53233bae4fe8fe57.jpg b/docs/master/img/47d90c837620a14d53233bae4fe8fe57.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/47d90c837620a14d53233bae4fe8fe57.jpg rename to docs/master/img/47d90c837620a14d53233bae4fe8fe57.jpg diff --git a/docs/0.19.x/img/48a36c240dcfa54de5ea4cc6250087fa.jpg b/docs/master/img/48a36c240dcfa54de5ea4cc6250087fa.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/48a36c240dcfa54de5ea4cc6250087fa.jpg rename to docs/master/img/48a36c240dcfa54de5ea4cc6250087fa.jpg diff --git a/docs/0.19.x/img/48cf684e54ca494e275074761259069c.jpg b/docs/master/img/48cf684e54ca494e275074761259069c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/48cf684e54ca494e275074761259069c.jpg rename to docs/master/img/48cf684e54ca494e275074761259069c.jpg diff --git a/docs/0.19.x/img/4953c9da8999e3eb76b63a4dd0432896.jpg b/docs/master/img/4953c9da8999e3eb76b63a4dd0432896.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/4953c9da8999e3eb76b63a4dd0432896.jpg rename to docs/master/img/4953c9da8999e3eb76b63a4dd0432896.jpg diff --git a/docs/0.19.x/img/499e262369261799dec950eb33da9ccf.jpg b/docs/master/img/499e262369261799dec950eb33da9ccf.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/499e262369261799dec950eb33da9ccf.jpg rename to docs/master/img/499e262369261799dec950eb33da9ccf.jpg diff --git a/docs/0.19.x/img/49b0512284893ed2ca56a2b8c0b7d0b5.jpg b/docs/master/img/49b0512284893ed2ca56a2b8c0b7d0b5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/49b0512284893ed2ca56a2b8c0b7d0b5.jpg rename to docs/master/img/49b0512284893ed2ca56a2b8c0b7d0b5.jpg diff --git a/docs/0.19.x/img/4a22ca544916918b2358e5fc7c71b8e6.jpg b/docs/master/img/4a22ca544916918b2358e5fc7c71b8e6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/4a22ca544916918b2358e5fc7c71b8e6.jpg rename to docs/master/img/4a22ca544916918b2358e5fc7c71b8e6.jpg diff --git a/docs/0.21.3/img/4a22ca544916918b2358e5fc7c71b8e7.png b/docs/master/img/4a22ca544916918b2358e5fc7c71b8e7.png similarity index 100% rename from docs/0.21.3/img/4a22ca544916918b2358e5fc7c71b8e7.png rename to docs/master/img/4a22ca544916918b2358e5fc7c71b8e7.png diff --git a/docs/0.19.x/img/4a733ee899c074bde7a4d5292c9fc83e.jpg b/docs/master/img/4a733ee899c074bde7a4d5292c9fc83e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/4a733ee899c074bde7a4d5292c9fc83e.jpg rename to docs/master/img/4a733ee899c074bde7a4d5292c9fc83e.jpg diff --git a/docs/0.19.x/img/4aafe42b7f9cf8d06d93b9246d01bbfd.jpg b/docs/master/img/4aafe42b7f9cf8d06d93b9246d01bbfd.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/4aafe42b7f9cf8d06d93b9246d01bbfd.jpg rename to docs/master/img/4aafe42b7f9cf8d06d93b9246d01bbfd.jpg diff --git a/docs/0.19.x/img/4b3d9c4467b467af3714ba45c54e5c2e.jpg b/docs/master/img/4b3d9c4467b467af3714ba45c54e5c2e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/4b3d9c4467b467af3714ba45c54e5c2e.jpg rename to docs/master/img/4b3d9c4467b467af3714ba45c54e5c2e.jpg diff --git a/docs/0.19.x/img/4b64f9acb85d7f2b6169e5a58f255e44.jpg b/docs/master/img/4b64f9acb85d7f2b6169e5a58f255e44.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/4b64f9acb85d7f2b6169e5a58f255e44.jpg rename to docs/master/img/4b64f9acb85d7f2b6169e5a58f255e44.jpg diff --git a/docs/0.19.x/img/4b6d782a67ac392e97215c46b7590bf7.jpg b/docs/master/img/4b6d782a67ac392e97215c46b7590bf7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/4b6d782a67ac392e97215c46b7590bf7.jpg rename to docs/master/img/4b6d782a67ac392e97215c46b7590bf7.jpg diff --git a/docs/0.19.x/img/4bb6ac59e053fd48275c31c9af35b2d1.jpg b/docs/master/img/4bb6ac59e053fd48275c31c9af35b2d1.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/4bb6ac59e053fd48275c31c9af35b2d1.jpg rename to docs/master/img/4bb6ac59e053fd48275c31c9af35b2d1.jpg diff --git a/docs/0.19.x/img/4bcd849c1a2c10ab9857df1dc223e175.jpg b/docs/master/img/4bcd849c1a2c10ab9857df1dc223e175.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/4bcd849c1a2c10ab9857df1dc223e175.jpg rename to docs/master/img/4bcd849c1a2c10ab9857df1dc223e175.jpg diff --git a/docs/0.19.x/img/4bfe956324cef23278c5192b0fb8029b.jpg b/docs/master/img/4bfe956324cef23278c5192b0fb8029b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/4bfe956324cef23278c5192b0fb8029b.jpg rename to docs/master/img/4bfe956324cef23278c5192b0fb8029b.jpg diff --git a/docs/0.19.x/img/4c0a0003e110c44c538fbf113c159a3a.jpg b/docs/master/img/4c0a0003e110c44c538fbf113c159a3a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/4c0a0003e110c44c538fbf113c159a3a.jpg rename to docs/master/img/4c0a0003e110c44c538fbf113c159a3a.jpg diff --git a/docs/0.19.x/img/4d1bc681619acee3db7da4d570bcb4cd.jpg b/docs/master/img/4d1bc681619acee3db7da4d570bcb4cd.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/4d1bc681619acee3db7da4d570bcb4cd.jpg rename to docs/master/img/4d1bc681619acee3db7da4d570bcb4cd.jpg diff --git a/docs/0.19.x/img/4d831898e5c564ee2d4df9fa647a97ce.jpg b/docs/master/img/4d831898e5c564ee2d4df9fa647a97ce.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/4d831898e5c564ee2d4df9fa647a97ce.jpg rename to docs/master/img/4d831898e5c564ee2d4df9fa647a97ce.jpg diff --git a/docs/0.19.x/img/4dee38783cbd4faef5d5639ce23a5c59.jpg b/docs/master/img/4dee38783cbd4faef5d5639ce23a5c59.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/4dee38783cbd4faef5d5639ce23a5c59.jpg rename to docs/master/img/4dee38783cbd4faef5d5639ce23a5c59.jpg diff --git a/docs/0.19.x/img/4e0d8935ff82f26fc3a46a3202bd1fa3.jpg b/docs/master/img/4e0d8935ff82f26fc3a46a3202bd1fa3.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/4e0d8935ff82f26fc3a46a3202bd1fa3.jpg rename to docs/master/img/4e0d8935ff82f26fc3a46a3202bd1fa3.jpg diff --git a/docs/0.19.x/img/4e6d5ce51d78cff57187dc09b6710a7c.jpg b/docs/master/img/4e6d5ce51d78cff57187dc09b6710a7c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/4e6d5ce51d78cff57187dc09b6710a7c.jpg rename to docs/master/img/4e6d5ce51d78cff57187dc09b6710a7c.jpg diff --git a/docs/0.19.x/img/4ee9f6c666393981b6458e54c3ec89d0.jpg b/docs/master/img/4ee9f6c666393981b6458e54c3ec89d0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/4ee9f6c666393981b6458e54c3ec89d0.jpg rename to docs/master/img/4ee9f6c666393981b6458e54c3ec89d0.jpg diff --git a/docs/0.19.x/img/4f11727a275459ce82826a9e02800c28.jpg b/docs/master/img/4f11727a275459ce82826a9e02800c28.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/4f11727a275459ce82826a9e02800c28.jpg rename to docs/master/img/4f11727a275459ce82826a9e02800c28.jpg diff --git a/docs/0.19.x/img/4f8138b00b37d9734bb93aec7e00ac5e.jpg b/docs/master/img/4f8138b00b37d9734bb93aec7e00ac5e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/4f8138b00b37d9734bb93aec7e00ac5e.jpg rename to docs/master/img/4f8138b00b37d9734bb93aec7e00ac5e.jpg diff --git a/docs/0.19.x/img/500efeff217bde3e862144e9bc90b049.jpg b/docs/master/img/500efeff217bde3e862144e9bc90b049.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/500efeff217bde3e862144e9bc90b049.jpg rename to docs/master/img/500efeff217bde3e862144e9bc90b049.jpg diff --git a/docs/0.19.x/img/502926bb104c175c6f3e809b0207830c.jpg b/docs/master/img/502926bb104c175c6f3e809b0207830c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/502926bb104c175c6f3e809b0207830c.jpg rename to docs/master/img/502926bb104c175c6f3e809b0207830c.jpg diff --git a/docs/0.19.x/img/505ffca1dc9570f24fd66272d18abb1f.jpg b/docs/master/img/505ffca1dc9570f24fd66272d18abb1f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/505ffca1dc9570f24fd66272d18abb1f.jpg rename to docs/master/img/505ffca1dc9570f24fd66272d18abb1f.jpg diff --git a/docs/0.19.x/img/5062c88fba7988fa39aca3bc91857721.jpg b/docs/master/img/5062c88fba7988fa39aca3bc91857721.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5062c88fba7988fa39aca3bc91857721.jpg rename to docs/master/img/5062c88fba7988fa39aca3bc91857721.jpg diff --git a/docs/0.19.x/img/507fd1a87cb6a0196c0203a0af5e9bbb.jpg b/docs/master/img/507fd1a87cb6a0196c0203a0af5e9bbb.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/507fd1a87cb6a0196c0203a0af5e9bbb.jpg rename to docs/master/img/507fd1a87cb6a0196c0203a0af5e9bbb.jpg diff --git a/docs/0.19.x/img/50bc02ed6fb21594c72e30d1a33bbf89.jpg b/docs/master/img/50bc02ed6fb21594c72e30d1a33bbf89.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/50bc02ed6fb21594c72e30d1a33bbf89.jpg rename to docs/master/img/50bc02ed6fb21594c72e30d1a33bbf89.jpg diff --git a/docs/0.19.x/img/50eda5a92ebcfda1468e1508393b748a.jpg b/docs/master/img/50eda5a92ebcfda1468e1508393b748a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/50eda5a92ebcfda1468e1508393b748a.jpg rename to docs/master/img/50eda5a92ebcfda1468e1508393b748a.jpg diff --git a/docs/0.19.x/img/515ee7781876d7344cc383bb43cb30ea.jpg b/docs/master/img/515ee7781876d7344cc383bb43cb30ea.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/515ee7781876d7344cc383bb43cb30ea.jpg rename to docs/master/img/515ee7781876d7344cc383bb43cb30ea.jpg diff --git a/docs/0.19.x/img/51d052e3e4c7f694f3c05eb4159ba243.jpg b/docs/master/img/51d052e3e4c7f694f3c05eb4159ba243.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/51d052e3e4c7f694f3c05eb4159ba243.jpg rename to docs/master/img/51d052e3e4c7f694f3c05eb4159ba243.jpg diff --git a/docs/0.19.x/img/51d70ae60903891457d75099cc46e450.jpg b/docs/master/img/51d70ae60903891457d75099cc46e450.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/51d70ae60903891457d75099cc46e450.jpg rename to docs/master/img/51d70ae60903891457d75099cc46e450.jpg diff --git a/docs/0.19.x/img/51fa9007646861e0569f8f66731c64e7.jpg b/docs/master/img/51fa9007646861e0569f8f66731c64e7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/51fa9007646861e0569f8f66731c64e7.jpg rename to docs/master/img/51fa9007646861e0569f8f66731c64e7.jpg diff --git a/docs/0.19.x/img/520d26d427ec8afe74b5538d779f5f49.jpg b/docs/master/img/520d26d427ec8afe74b5538d779f5f49.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/520d26d427ec8afe74b5538d779f5f49.jpg rename to docs/master/img/520d26d427ec8afe74b5538d779f5f49.jpg diff --git a/docs/0.19.x/img/522bc8957a5d77edbdc533813dbef086.jpg b/docs/master/img/522bc8957a5d77edbdc533813dbef086.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/522bc8957a5d77edbdc533813dbef086.jpg rename to docs/master/img/522bc8957a5d77edbdc533813dbef086.jpg diff --git a/docs/0.19.x/img/52654d94cd29c421bad069f802bb69c4.jpg b/docs/master/img/52654d94cd29c421bad069f802bb69c4.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/52654d94cd29c421bad069f802bb69c4.jpg rename to docs/master/img/52654d94cd29c421bad069f802bb69c4.jpg diff --git a/docs/0.19.x/img/526e2da298d085b5fd557f49433d4143.jpg b/docs/master/img/526e2da298d085b5fd557f49433d4143.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/526e2da298d085b5fd557f49433d4143.jpg rename to docs/master/img/526e2da298d085b5fd557f49433d4143.jpg diff --git a/docs/0.19.x/img/5303ecbc70bf5189b8785555c03c54ee.jpg b/docs/master/img/5303ecbc70bf5189b8785555c03c54ee.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5303ecbc70bf5189b8785555c03c54ee.jpg rename to docs/master/img/5303ecbc70bf5189b8785555c03c54ee.jpg diff --git a/docs/0.19.x/img/533e54759d696211ebe7819cc107d3bc.jpg b/docs/master/img/533e54759d696211ebe7819cc107d3bc.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/533e54759d696211ebe7819cc107d3bc.jpg rename to docs/master/img/533e54759d696211ebe7819cc107d3bc.jpg diff --git a/docs/0.19.x/img/535f86af715e90b9c394e3cbf53d99eb.jpg b/docs/master/img/535f86af715e90b9c394e3cbf53d99eb.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/535f86af715e90b9c394e3cbf53d99eb.jpg rename to docs/master/img/535f86af715e90b9c394e3cbf53d99eb.jpg diff --git a/docs/0.19.x/img/53f6b3d47807f65fe25b4fa232cd7abc.jpg b/docs/master/img/53f6b3d47807f65fe25b4fa232cd7abc.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/53f6b3d47807f65fe25b4fa232cd7abc.jpg rename to docs/master/img/53f6b3d47807f65fe25b4fa232cd7abc.jpg diff --git a/docs/0.19.x/img/53fd9843c9af9a7ea05df92bce997456.jpg b/docs/master/img/53fd9843c9af9a7ea05df92bce997456.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/53fd9843c9af9a7ea05df92bce997456.jpg rename to docs/master/img/53fd9843c9af9a7ea05df92bce997456.jpg diff --git a/docs/0.19.x/img/5421b26a31de754ee8d186d038006fa3.jpg b/docs/master/img/5421b26a31de754ee8d186d038006fa3.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5421b26a31de754ee8d186d038006fa3.jpg rename to docs/master/img/5421b26a31de754ee8d186d038006fa3.jpg diff --git a/docs/0.19.x/img/55f40b1e092983fff81024042966adec.jpg b/docs/master/img/55f40b1e092983fff81024042966adec.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/55f40b1e092983fff81024042966adec.jpg rename to docs/master/img/55f40b1e092983fff81024042966adec.jpg diff --git a/docs/0.19.x/img/55f44df097de0ddde791d3084a69a1bf.jpg b/docs/master/img/55f44df097de0ddde791d3084a69a1bf.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/55f44df097de0ddde791d3084a69a1bf.jpg rename to docs/master/img/55f44df097de0ddde791d3084a69a1bf.jpg diff --git a/docs/0.19.x/img/5656d5270c0ee866d09e2b271ed04a67.jpg b/docs/master/img/5656d5270c0ee866d09e2b271ed04a67.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5656d5270c0ee866d09e2b271ed04a67.jpg rename to docs/master/img/5656d5270c0ee866d09e2b271ed04a67.jpg diff --git a/docs/0.19.x/img/5679f1fec5dfb7ab05db5e5aa9fa11a2.jpg b/docs/master/img/5679f1fec5dfb7ab05db5e5aa9fa11a2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5679f1fec5dfb7ab05db5e5aa9fa11a2.jpg rename to docs/master/img/5679f1fec5dfb7ab05db5e5aa9fa11a2.jpg diff --git a/docs/0.19.x/img/56c751b0714a570fdcef0caf63f81580.jpg b/docs/master/img/56c751b0714a570fdcef0caf63f81580.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/56c751b0714a570fdcef0caf63f81580.jpg rename to docs/master/img/56c751b0714a570fdcef0caf63f81580.jpg diff --git a/docs/0.19.x/img/572f614c4b9bc376ebbf6ca259b6558e.jpg b/docs/master/img/572f614c4b9bc376ebbf6ca259b6558e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/572f614c4b9bc376ebbf6ca259b6558e.jpg rename to docs/master/img/572f614c4b9bc376ebbf6ca259b6558e.jpg diff --git a/docs/0.19.x/img/578c95150175e4efdf851fe66d503079.jpg b/docs/master/img/578c95150175e4efdf851fe66d503079.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/578c95150175e4efdf851fe66d503079.jpg rename to docs/master/img/578c95150175e4efdf851fe66d503079.jpg diff --git a/docs/0.19.x/img/57e15e43b846791e47a202e1a9a5d8ce.jpg b/docs/master/img/57e15e43b846791e47a202e1a9a5d8ce.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/57e15e43b846791e47a202e1a9a5d8ce.jpg rename to docs/master/img/57e15e43b846791e47a202e1a9a5d8ce.jpg diff --git a/docs/0.19.x/img/580270908cf4e5ba3907b7267fcfbb44.jpg b/docs/master/img/580270908cf4e5ba3907b7267fcfbb44.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/580270908cf4e5ba3907b7267fcfbb44.jpg rename to docs/master/img/580270908cf4e5ba3907b7267fcfbb44.jpg diff --git a/docs/0.19.x/img/587f27ca8cf947779c1929d65c697e0c.jpg b/docs/master/img/587f27ca8cf947779c1929d65c697e0c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/587f27ca8cf947779c1929d65c697e0c.jpg rename to docs/master/img/587f27ca8cf947779c1929d65c697e0c.jpg diff --git a/docs/0.19.x/img/58d06eb9b8003c392af19e09ce5ab1a4.jpg b/docs/master/img/58d06eb9b8003c392af19e09ce5ab1a4.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/58d06eb9b8003c392af19e09ce5ab1a4.jpg rename to docs/master/img/58d06eb9b8003c392af19e09ce5ab1a4.jpg diff --git a/docs/0.19.x/img/58d86a5573e0796f320435a8ce8346ea.jpg b/docs/master/img/58d86a5573e0796f320435a8ce8346ea.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/58d86a5573e0796f320435a8ce8346ea.jpg rename to docs/master/img/58d86a5573e0796f320435a8ce8346ea.jpg diff --git a/docs/0.19.x/img/58ef9e1b5d2ee139dcb588a3879ca1a6.jpg b/docs/master/img/58ef9e1b5d2ee139dcb588a3879ca1a6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/58ef9e1b5d2ee139dcb588a3879ca1a6.jpg rename to docs/master/img/58ef9e1b5d2ee139dcb588a3879ca1a6.jpg diff --git a/docs/0.19.x/img/59100a001bb4b110e00f7ddf1354cd5b.jpg b/docs/master/img/59100a001bb4b110e00f7ddf1354cd5b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/59100a001bb4b110e00f7ddf1354cd5b.jpg rename to docs/master/img/59100a001bb4b110e00f7ddf1354cd5b.jpg diff --git a/docs/0.19.x/img/59420186f988199ba986eefc023fb637.jpg b/docs/master/img/59420186f988199ba986eefc023fb637.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/59420186f988199ba986eefc023fb637.jpg rename to docs/master/img/59420186f988199ba986eefc023fb637.jpg diff --git a/docs/0.19.x/img/5959a6fe3c27570b7d474f26126eb628.jpg b/docs/master/img/5959a6fe3c27570b7d474f26126eb628.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5959a6fe3c27570b7d474f26126eb628.jpg rename to docs/master/img/5959a6fe3c27570b7d474f26126eb628.jpg diff --git a/docs/0.21.3/img/5959a6fe3c27570b7d474f26126eb628.png b/docs/master/img/5959a6fe3c27570b7d474f26126eb628.png similarity index 100% rename from docs/0.21.3/img/5959a6fe3c27570b7d474f26126eb628.png rename to docs/master/img/5959a6fe3c27570b7d474f26126eb628.png diff --git a/docs/0.19.x/img/5a5de287d8a2c74dd12f86219cc19697.jpg b/docs/master/img/5a5de287d8a2c74dd12f86219cc19697.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5a5de287d8a2c74dd12f86219cc19697.jpg rename to docs/master/img/5a5de287d8a2c74dd12f86219cc19697.jpg diff --git a/docs/0.19.x/img/5a8d4539001fa07eb00b24f2e74adeca.jpg b/docs/master/img/5a8d4539001fa07eb00b24f2e74adeca.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5a8d4539001fa07eb00b24f2e74adeca.jpg rename to docs/master/img/5a8d4539001fa07eb00b24f2e74adeca.jpg diff --git a/docs/0.19.x/img/5b84281b8f1a26c9e9cba1b6cb0126ce.jpg b/docs/master/img/5b84281b8f1a26c9e9cba1b6cb0126ce.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5b84281b8f1a26c9e9cba1b6cb0126ce.jpg rename to docs/master/img/5b84281b8f1a26c9e9cba1b6cb0126ce.jpg diff --git a/docs/0.19.x/img/5b87e1a1b34a0ac402ef602b152ee2f9.jpg b/docs/master/img/5b87e1a1b34a0ac402ef602b152ee2f9.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5b87e1a1b34a0ac402ef602b152ee2f9.jpg rename to docs/master/img/5b87e1a1b34a0ac402ef602b152ee2f9.jpg diff --git a/docs/0.19.x/img/5bb034cee5851ab5105aca4c40a4e16e.jpg b/docs/master/img/5bb034cee5851ab5105aca4c40a4e16e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5bb034cee5851ab5105aca4c40a4e16e.jpg rename to docs/master/img/5bb034cee5851ab5105aca4c40a4e16e.jpg diff --git a/docs/0.19.x/img/5bd6037aeb804486a6f7cc0415ace8fc.jpg b/docs/master/img/5bd6037aeb804486a6f7cc0415ace8fc.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5bd6037aeb804486a6f7cc0415ace8fc.jpg rename to docs/master/img/5bd6037aeb804486a6f7cc0415ace8fc.jpg diff --git a/docs/0.19.x/img/5c0b2807058791d6069327b709fae60c.jpg b/docs/master/img/5c0b2807058791d6069327b709fae60c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5c0b2807058791d6069327b709fae60c.jpg rename to docs/master/img/5c0b2807058791d6069327b709fae60c.jpg diff --git a/docs/0.19.x/img/5c3cdb1b3bec4126d850a52d7fe8dc18.jpg b/docs/master/img/5c3cdb1b3bec4126d850a52d7fe8dc18.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5c3cdb1b3bec4126d850a52d7fe8dc18.jpg rename to docs/master/img/5c3cdb1b3bec4126d850a52d7fe8dc18.jpg diff --git a/docs/0.19.x/img/5c82dbae35dc43d2f556f9f284d9d184.jpg b/docs/master/img/5c82dbae35dc43d2f556f9f284d9d184.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5c82dbae35dc43d2f556f9f284d9d184.jpg rename to docs/master/img/5c82dbae35dc43d2f556f9f284d9d184.jpg diff --git a/docs/0.19.x/img/5cc4d35f246f0aeb95f154a5343635c2.jpg b/docs/master/img/5cc4d35f246f0aeb95f154a5343635c2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5cc4d35f246f0aeb95f154a5343635c2.jpg rename to docs/master/img/5cc4d35f246f0aeb95f154a5343635c2.jpg diff --git a/docs/0.19.x/img/5cf078f7cdbb5755436e396cad3c37a0.jpg b/docs/master/img/5cf078f7cdbb5755436e396cad3c37a0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5cf078f7cdbb5755436e396cad3c37a0.jpg rename to docs/master/img/5cf078f7cdbb5755436e396cad3c37a0.jpg diff --git a/docs/0.19.x/img/5d0c433dc4dc7ca883ac8173e6e2096f.jpg b/docs/master/img/5d0c433dc4dc7ca883ac8173e6e2096f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5d0c433dc4dc7ca883ac8173e6e2096f.jpg rename to docs/master/img/5d0c433dc4dc7ca883ac8173e6e2096f.jpg diff --git a/docs/0.19.x/img/5d0d4b3cde172f7fd71da81c2e1b21a9.jpg b/docs/master/img/5d0d4b3cde172f7fd71da81c2e1b21a9.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5d0d4b3cde172f7fd71da81c2e1b21a9.jpg rename to docs/master/img/5d0d4b3cde172f7fd71da81c2e1b21a9.jpg diff --git a/docs/0.19.x/img/5d197c73e8e0bc6ba78f74b2a205886e.jpg b/docs/master/img/5d197c73e8e0bc6ba78f74b2a205886e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5d197c73e8e0bc6ba78f74b2a205886e.jpg rename to docs/master/img/5d197c73e8e0bc6ba78f74b2a205886e.jpg diff --git a/docs/0.19.x/img/5d71bcc9676eddcac89936397b2cd79c.jpg b/docs/master/img/5d71bcc9676eddcac89936397b2cd79c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5d71bcc9676eddcac89936397b2cd79c.jpg rename to docs/master/img/5d71bcc9676eddcac89936397b2cd79c.jpg diff --git a/docs/0.19.x/img/5d8cf5fcf13a72776158a787bc29143c.jpg b/docs/master/img/5d8cf5fcf13a72776158a787bc29143c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5d8cf5fcf13a72776158a787bc29143c.jpg rename to docs/master/img/5d8cf5fcf13a72776158a787bc29143c.jpg diff --git a/docs/0.19.x/img/5daa1b5d6a3d63020722cb0f4b41eee2.jpg b/docs/master/img/5daa1b5d6a3d63020722cb0f4b41eee2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5daa1b5d6a3d63020722cb0f4b41eee2.jpg rename to docs/master/img/5daa1b5d6a3d63020722cb0f4b41eee2.jpg diff --git a/docs/0.19.x/img/5db611c8f58fbd9a9776c013656a16ff.jpg b/docs/master/img/5db611c8f58fbd9a9776c013656a16ff.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5db611c8f58fbd9a9776c013656a16ff.jpg rename to docs/master/img/5db611c8f58fbd9a9776c013656a16ff.jpg diff --git a/docs/0.19.x/img/5df8f915c528f34f0ada91db5228605f.jpg b/docs/master/img/5df8f915c528f34f0ada91db5228605f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5df8f915c528f34f0ada91db5228605f.jpg rename to docs/master/img/5df8f915c528f34f0ada91db5228605f.jpg diff --git a/docs/0.19.x/img/5e45807b4775fcfaca64f6363102dc5e.jpg b/docs/master/img/5e45807b4775fcfaca64f6363102dc5e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5e45807b4775fcfaca64f6363102dc5e.jpg rename to docs/master/img/5e45807b4775fcfaca64f6363102dc5e.jpg diff --git a/docs/0.19.x/img/5ec012661471fa940c27472afcce01a2.jpg b/docs/master/img/5ec012661471fa940c27472afcce01a2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5ec012661471fa940c27472afcce01a2.jpg rename to docs/master/img/5ec012661471fa940c27472afcce01a2.jpg diff --git a/docs/0.19.x/img/5eea9f6c78020e75b9cc37d038d297ab.jpg b/docs/master/img/5eea9f6c78020e75b9cc37d038d297ab.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5eea9f6c78020e75b9cc37d038d297ab.jpg rename to docs/master/img/5eea9f6c78020e75b9cc37d038d297ab.jpg diff --git a/docs/0.19.x/img/5f0a6e9a20a071d688e183c9675544e5.jpg b/docs/master/img/5f0a6e9a20a071d688e183c9675544e5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5f0a6e9a20a071d688e183c9675544e5.jpg rename to docs/master/img/5f0a6e9a20a071d688e183c9675544e5.jpg diff --git a/docs/0.19.x/img/5fc2f399717cfe5187dc09896972a850.jpg b/docs/master/img/5fc2f399717cfe5187dc09896972a850.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/5fc2f399717cfe5187dc09896972a850.jpg rename to docs/master/img/5fc2f399717cfe5187dc09896972a850.jpg diff --git a/docs/0.19.x/img/60337a9162822d71dc32e68952b4e02a.jpg b/docs/master/img/60337a9162822d71dc32e68952b4e02a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/60337a9162822d71dc32e68952b4e02a.jpg rename to docs/master/img/60337a9162822d71dc32e68952b4e02a.jpg diff --git a/docs/0.19.x/img/6042b714de932f6ed841e71bfe9acede.jpg b/docs/master/img/6042b714de932f6ed841e71bfe9acede.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6042b714de932f6ed841e71bfe9acede.jpg rename to docs/master/img/6042b714de932f6ed841e71bfe9acede.jpg diff --git a/docs/0.19.x/img/6081a672a0d5d6cc7563c531599dde91.jpg b/docs/master/img/6081a672a0d5d6cc7563c531599dde91.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6081a672a0d5d6cc7563c531599dde91.jpg rename to docs/master/img/6081a672a0d5d6cc7563c531599dde91.jpg diff --git a/docs/0.19.x/img/60fef7a79e647e4e8dc02f0b0dc25772.jpg b/docs/master/img/60fef7a79e647e4e8dc02f0b0dc25772.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/60fef7a79e647e4e8dc02f0b0dc25772.jpg rename to docs/master/img/60fef7a79e647e4e8dc02f0b0dc25772.jpg diff --git a/docs/0.19.x/img/610475f160f25407a547e5430c792460.jpg b/docs/master/img/610475f160f25407a547e5430c792460.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/610475f160f25407a547e5430c792460.jpg rename to docs/master/img/610475f160f25407a547e5430c792460.jpg diff --git a/docs/0.19.x/img/611639bdcfd73c857a43842913d6e826.jpg b/docs/master/img/611639bdcfd73c857a43842913d6e826.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/611639bdcfd73c857a43842913d6e826.jpg rename to docs/master/img/611639bdcfd73c857a43842913d6e826.jpg diff --git a/docs/0.19.x/img/6122e23454910f4f076c71a84c068291.jpg b/docs/master/img/6122e23454910f4f076c71a84c068291.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6122e23454910f4f076c71a84c068291.jpg rename to docs/master/img/6122e23454910f4f076c71a84c068291.jpg diff --git a/docs/0.19.x/img/61a540d6591602c8f513910fd2f33b40.jpg b/docs/master/img/61a540d6591602c8f513910fd2f33b40.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/61a540d6591602c8f513910fd2f33b40.jpg rename to docs/master/img/61a540d6591602c8f513910fd2f33b40.jpg diff --git a/docs/0.19.x/img/61a79d63783315d8e68d8ecf1324105f.jpg b/docs/master/img/61a79d63783315d8e68d8ecf1324105f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/61a79d63783315d8e68d8ecf1324105f.jpg rename to docs/master/img/61a79d63783315d8e68d8ecf1324105f.jpg diff --git a/docs/0.19.x/img/61b05c3bf030b831f23f257ca8182f51.jpg b/docs/master/img/61b05c3bf030b831f23f257ca8182f51.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/61b05c3bf030b831f23f257ca8182f51.jpg rename to docs/master/img/61b05c3bf030b831f23f257ca8182f51.jpg diff --git a/docs/0.19.x/img/6211fb320c2cdb794a80e9e0b800a6a1.jpg b/docs/master/img/6211fb320c2cdb794a80e9e0b800a6a1.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6211fb320c2cdb794a80e9e0b800a6a1.jpg rename to docs/master/img/6211fb320c2cdb794a80e9e0b800a6a1.jpg diff --git a/docs/0.19.x/img/62eb544f1f6e234c61099fea1517300b.jpg b/docs/master/img/62eb544f1f6e234c61099fea1517300b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/62eb544f1f6e234c61099fea1517300b.jpg rename to docs/master/img/62eb544f1f6e234c61099fea1517300b.jpg diff --git a/docs/0.19.x/img/638e0b526b8a69a226bc23950f6eeb3f.jpg b/docs/master/img/638e0b526b8a69a226bc23950f6eeb3f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/638e0b526b8a69a226bc23950f6eeb3f.jpg rename to docs/master/img/638e0b526b8a69a226bc23950f6eeb3f.jpg diff --git a/docs/0.19.x/img/639e82f3829a0ad677110cc33a028c98.jpg b/docs/master/img/639e82f3829a0ad677110cc33a028c98.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/639e82f3829a0ad677110cc33a028c98.jpg rename to docs/master/img/639e82f3829a0ad677110cc33a028c98.jpg diff --git a/docs/0.19.x/img/63f146cd209ad922f402bf81bfdeb621.jpg b/docs/master/img/63f146cd209ad922f402bf81bfdeb621.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/63f146cd209ad922f402bf81bfdeb621.jpg rename to docs/master/img/63f146cd209ad922f402bf81bfdeb621.jpg diff --git a/docs/0.19.x/img/642372b631f22b9db0dc4f30d9ab67e6.jpg b/docs/master/img/642372b631f22b9db0dc4f30d9ab67e6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/642372b631f22b9db0dc4f30d9ab67e6.jpg rename to docs/master/img/642372b631f22b9db0dc4f30d9ab67e6.jpg diff --git a/docs/0.19.x/img/6447f40a171271e014eed37b28b4a711.jpg b/docs/master/img/6447f40a171271e014eed37b28b4a711.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6447f40a171271e014eed37b28b4a711.jpg rename to docs/master/img/6447f40a171271e014eed37b28b4a711.jpg diff --git a/docs/0.19.x/img/6479476ebd2e5d741f1a712f671fccb6.jpg b/docs/master/img/6479476ebd2e5d741f1a712f671fccb6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6479476ebd2e5d741f1a712f671fccb6.jpg rename to docs/master/img/6479476ebd2e5d741f1a712f671fccb6.jpg diff --git a/docs/0.19.x/img/64ccaf1b6c08784a30158f809c081987.jpg b/docs/master/img/64ccaf1b6c08784a30158f809c081987.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/64ccaf1b6c08784a30158f809c081987.jpg rename to docs/master/img/64ccaf1b6c08784a30158f809c081987.jpg diff --git a/docs/0.19.x/img/64ecb0afa71752378a987a33e1e4e76f.jpg b/docs/master/img/64ecb0afa71752378a987a33e1e4e76f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/64ecb0afa71752378a987a33e1e4e76f.jpg rename to docs/master/img/64ecb0afa71752378a987a33e1e4e76f.jpg diff --git a/docs/0.19.x/img/6518e8fbaaadd8a258c9a3f96b2ef42e.jpg b/docs/master/img/6518e8fbaaadd8a258c9a3f96b2ef42e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6518e8fbaaadd8a258c9a3f96b2ef42e.jpg rename to docs/master/img/6518e8fbaaadd8a258c9a3f96b2ef42e.jpg diff --git a/docs/0.19.x/img/6521e34e11e73c0fae9a5bd3c7980a9f.jpg b/docs/master/img/6521e34e11e73c0fae9a5bd3c7980a9f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6521e34e11e73c0fae9a5bd3c7980a9f.jpg rename to docs/master/img/6521e34e11e73c0fae9a5bd3c7980a9f.jpg diff --git a/docs/0.19.x/img/6526868397aa8da766b3dc60bbcc30ef.jpg b/docs/master/img/6526868397aa8da766b3dc60bbcc30ef.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6526868397aa8da766b3dc60bbcc30ef.jpg rename to docs/master/img/6526868397aa8da766b3dc60bbcc30ef.jpg diff --git a/docs/0.19.x/img/6552bde3d3999c1a9728016416932af7.jpg b/docs/master/img/6552bde3d3999c1a9728016416932af7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6552bde3d3999c1a9728016416932af7.jpg rename to docs/master/img/6552bde3d3999c1a9728016416932af7.jpg diff --git a/docs/0.19.x/img/6569ca3d831148970ddb4c7dfc3f2572.jpg b/docs/master/img/6569ca3d831148970ddb4c7dfc3f2572.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6569ca3d831148970ddb4c7dfc3f2572.jpg rename to docs/master/img/6569ca3d831148970ddb4c7dfc3f2572.jpg diff --git a/docs/0.19.x/img/658840c7508dc5a73ca6180323904862.jpg b/docs/master/img/658840c7508dc5a73ca6180323904862.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/658840c7508dc5a73ca6180323904862.jpg rename to docs/master/img/658840c7508dc5a73ca6180323904862.jpg diff --git a/docs/0.19.x/img/6653de9b4dea7e5e9a897b5f34e7a4f0.jpg b/docs/master/img/6653de9b4dea7e5e9a897b5f34e7a4f0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6653de9b4dea7e5e9a897b5f34e7a4f0.jpg rename to docs/master/img/6653de9b4dea7e5e9a897b5f34e7a4f0.jpg diff --git a/docs/0.19.x/img/6689aa593e8e42bb5c2caa474e642b5f.jpg b/docs/master/img/6689aa593e8e42bb5c2caa474e642b5f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6689aa593e8e42bb5c2caa474e642b5f.jpg rename to docs/master/img/6689aa593e8e42bb5c2caa474e642b5f.jpg diff --git a/docs/0.19.x/img/67f18f488d2173299bc076b212f6aee9.jpg b/docs/master/img/67f18f488d2173299bc076b212f6aee9.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/67f18f488d2173299bc076b212f6aee9.jpg rename to docs/master/img/67f18f488d2173299bc076b212f6aee9.jpg diff --git a/docs/0.19.x/img/67f62308a1f409829599e546c843d53f.jpg b/docs/master/img/67f62308a1f409829599e546c843d53f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/67f62308a1f409829599e546c843d53f.jpg rename to docs/master/img/67f62308a1f409829599e546c843d53f.jpg diff --git a/docs/0.19.x/img/67f9d3900eb064f6354d23271f16c2b0.jpg b/docs/master/img/67f9d3900eb064f6354d23271f16c2b0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/67f9d3900eb064f6354d23271f16c2b0.jpg rename to docs/master/img/67f9d3900eb064f6354d23271f16c2b0.jpg diff --git a/docs/0.19.x/img/685006d43de154949bfb11efd87df4f1.jpg b/docs/master/img/685006d43de154949bfb11efd87df4f1.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/685006d43de154949bfb11efd87df4f1.jpg rename to docs/master/img/685006d43de154949bfb11efd87df4f1.jpg diff --git a/docs/0.19.x/img/6875a3a68e07bfa51a631f014fcf8a4f.jpg b/docs/master/img/6875a3a68e07bfa51a631f014fcf8a4f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6875a3a68e07bfa51a631f014fcf8a4f.jpg rename to docs/master/img/6875a3a68e07bfa51a631f014fcf8a4f.jpg diff --git a/docs/0.19.x/img/69bbc745b66051792cd1b5166ce18420.jpg b/docs/master/img/69bbc745b66051792cd1b5166ce18420.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/69bbc745b66051792cd1b5166ce18420.jpg rename to docs/master/img/69bbc745b66051792cd1b5166ce18420.jpg diff --git a/docs/0.19.x/img/69be855df457ccfee81f59ace2595a23.jpg b/docs/master/img/69be855df457ccfee81f59ace2595a23.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/69be855df457ccfee81f59ace2595a23.jpg rename to docs/master/img/69be855df457ccfee81f59ace2595a23.jpg diff --git a/docs/0.19.x/img/6a0ac3a1f45ae7072f58ae85160eca33.jpg b/docs/master/img/6a0ac3a1f45ae7072f58ae85160eca33.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6a0ac3a1f45ae7072f58ae85160eca33.jpg rename to docs/master/img/6a0ac3a1f45ae7072f58ae85160eca33.jpg diff --git a/docs/0.19.x/img/6a0cf5d5f1d5ad90f9713a46fa55111f.jpg b/docs/master/img/6a0cf5d5f1d5ad90f9713a46fa55111f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6a0cf5d5f1d5ad90f9713a46fa55111f.jpg rename to docs/master/img/6a0cf5d5f1d5ad90f9713a46fa55111f.jpg diff --git a/docs/0.19.x/img/6a8621a4ada40acd48b43436ca6a4527.jpg b/docs/master/img/6a8621a4ada40acd48b43436ca6a4527.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6a8621a4ada40acd48b43436ca6a4527.jpg rename to docs/master/img/6a8621a4ada40acd48b43436ca6a4527.jpg diff --git a/docs/0.19.x/img/6ade66280d509fe54883d82b315259e1.jpg b/docs/master/img/6ade66280d509fe54883d82b315259e1.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6ade66280d509fe54883d82b315259e1.jpg rename to docs/master/img/6ade66280d509fe54883d82b315259e1.jpg diff --git a/docs/0.19.x/img/6ae91fb0f3221b92d2dd4e22204d8008.jpg b/docs/master/img/6ae91fb0f3221b92d2dd4e22204d8008.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6ae91fb0f3221b92d2dd4e22204d8008.jpg rename to docs/master/img/6ae91fb0f3221b92d2dd4e22204d8008.jpg diff --git a/docs/0.19.x/img/6b0371e0d33eebe00fe5ec3d59de5b43.jpg b/docs/master/img/6b0371e0d33eebe00fe5ec3d59de5b43.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6b0371e0d33eebe00fe5ec3d59de5b43.jpg rename to docs/master/img/6b0371e0d33eebe00fe5ec3d59de5b43.jpg diff --git a/docs/0.19.x/img/6b1c74edd599db63c339ead392e8e54a.jpg b/docs/master/img/6b1c74edd599db63c339ead392e8e54a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6b1c74edd599db63c339ead392e8e54a.jpg rename to docs/master/img/6b1c74edd599db63c339ead392e8e54a.jpg diff --git a/docs/0.19.x/img/6b474f60cd7fcc77b4a950334fc6483f.jpg b/docs/master/img/6b474f60cd7fcc77b4a950334fc6483f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6b474f60cd7fcc77b4a950334fc6483f.jpg rename to docs/master/img/6b474f60cd7fcc77b4a950334fc6483f.jpg diff --git a/docs/0.19.x/img/6b7248d635f4161b925734dbc60de37a.jpg b/docs/master/img/6b7248d635f4161b925734dbc60de37a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6b7248d635f4161b925734dbc60de37a.jpg rename to docs/master/img/6b7248d635f4161b925734dbc60de37a.jpg diff --git a/docs/0.19.x/img/6bcc641ece97b81c42261e28eaad3ad7.jpg b/docs/master/img/6bcc641ece97b81c42261e28eaad3ad7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6bcc641ece97b81c42261e28eaad3ad7.jpg rename to docs/master/img/6bcc641ece97b81c42261e28eaad3ad7.jpg diff --git a/docs/0.19.x/img/6c281997fc8d9f34a530a7e2bc854adf.jpg b/docs/master/img/6c281997fc8d9f34a530a7e2bc854adf.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6c281997fc8d9f34a530a7e2bc854adf.jpg rename to docs/master/img/6c281997fc8d9f34a530a7e2bc854adf.jpg diff --git a/docs/0.19.x/img/6c446734a6837b7541db12e2b55f1a2b.jpg b/docs/master/img/6c446734a6837b7541db12e2b55f1a2b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6c446734a6837b7541db12e2b55f1a2b.jpg rename to docs/master/img/6c446734a6837b7541db12e2b55f1a2b.jpg diff --git a/docs/0.19.x/img/6c70b46b88f05e00e292f1a0f98d2aa8.jpg b/docs/master/img/6c70b46b88f05e00e292f1a0f98d2aa8.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6c70b46b88f05e00e292f1a0f98d2aa8.jpg rename to docs/master/img/6c70b46b88f05e00e292f1a0f98d2aa8.jpg diff --git a/docs/0.19.x/img/6c8db7614197ace6a4bf0f437c085e6d.jpg b/docs/master/img/6c8db7614197ace6a4bf0f437c085e6d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6c8db7614197ace6a4bf0f437c085e6d.jpg rename to docs/master/img/6c8db7614197ace6a4bf0f437c085e6d.jpg diff --git a/docs/0.19.x/img/6d8a1d709ef804f4629126d6e1c449f1.jpg b/docs/master/img/6d8a1d709ef804f4629126d6e1c449f1.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6d8a1d709ef804f4629126d6e1c449f1.jpg rename to docs/master/img/6d8a1d709ef804f4629126d6e1c449f1.jpg diff --git a/docs/0.19.x/img/6d8b62cf31afb168e2b2acb89d6abccd.jpg b/docs/master/img/6d8b62cf31afb168e2b2acb89d6abccd.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6d8b62cf31afb168e2b2acb89d6abccd.jpg rename to docs/master/img/6d8b62cf31afb168e2b2acb89d6abccd.jpg diff --git a/docs/0.19.x/img/6da3d48746433a02996c5821013ac4e7.jpg b/docs/master/img/6da3d48746433a02996c5821013ac4e7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6da3d48746433a02996c5821013ac4e7.jpg rename to docs/master/img/6da3d48746433a02996c5821013ac4e7.jpg diff --git a/docs/0.19.x/img/6db85b1ad926d9ad860d58629ff5f235.jpg b/docs/master/img/6db85b1ad926d9ad860d58629ff5f235.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6db85b1ad926d9ad860d58629ff5f235.jpg rename to docs/master/img/6db85b1ad926d9ad860d58629ff5f235.jpg diff --git a/docs/0.19.x/img/6e87bd4511cfd9af64076cc1cf8f1bbc.jpg b/docs/master/img/6e87bd4511cfd9af64076cc1cf8f1bbc.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6e87bd4511cfd9af64076cc1cf8f1bbc.jpg rename to docs/master/img/6e87bd4511cfd9af64076cc1cf8f1bbc.jpg diff --git a/docs/0.19.x/img/6edba8b762eb4f9d843ba76d9e344c2a.jpg b/docs/master/img/6edba8b762eb4f9d843ba76d9e344c2a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6edba8b762eb4f9d843ba76d9e344c2a.jpg rename to docs/master/img/6edba8b762eb4f9d843ba76d9e344c2a.jpg diff --git a/docs/0.19.x/img/6efb484bc0e0c91b3ba13708bfe46aba.jpg b/docs/master/img/6efb484bc0e0c91b3ba13708bfe46aba.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6efb484bc0e0c91b3ba13708bfe46aba.jpg rename to docs/master/img/6efb484bc0e0c91b3ba13708bfe46aba.jpg diff --git a/docs/0.19.x/img/6f0cdccb5dc60bae6e7a303075ddbdf6.jpg b/docs/master/img/6f0cdccb5dc60bae6e7a303075ddbdf6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6f0cdccb5dc60bae6e7a303075ddbdf6.jpg rename to docs/master/img/6f0cdccb5dc60bae6e7a303075ddbdf6.jpg diff --git a/docs/0.21.3/img/6f25bd1d6d3abb565ca3007f8ac1d855.jpg b/docs/master/img/6f25bd1d6d3abb565ca3007f8ac1d855.jpg similarity index 100% rename from docs/0.21.3/img/6f25bd1d6d3abb565ca3007f8ac1d855.jpg rename to docs/master/img/6f25bd1d6d3abb565ca3007f8ac1d855.jpg diff --git a/docs/0.19.x/img/6f98755e60bfb560a671770b8e51cb28.jpg b/docs/master/img/6f98755e60bfb560a671770b8e51cb28.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6f98755e60bfb560a671770b8e51cb28.jpg rename to docs/master/img/6f98755e60bfb560a671770b8e51cb28.jpg diff --git a/docs/0.19.x/img/6fcf3a401454fd3c65ac740912e12467.jpg b/docs/master/img/6fcf3a401454fd3c65ac740912e12467.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/6fcf3a401454fd3c65ac740912e12467.jpg rename to docs/master/img/6fcf3a401454fd3c65ac740912e12467.jpg diff --git a/docs/0.19.x/img/7057da795219773c01c26cde1adf90e5.jpg b/docs/master/img/7057da795219773c01c26cde1adf90e5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7057da795219773c01c26cde1adf90e5.jpg rename to docs/master/img/7057da795219773c01c26cde1adf90e5.jpg diff --git a/docs/0.19.x/img/7085885523458d64e2f9981f39c7b038.jpg b/docs/master/img/7085885523458d64e2f9981f39c7b038.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7085885523458d64e2f9981f39c7b038.jpg rename to docs/master/img/7085885523458d64e2f9981f39c7b038.jpg diff --git a/docs/0.19.x/img/70abd4aa320170aa6dbe8204a5ed846e.jpg b/docs/master/img/70abd4aa320170aa6dbe8204a5ed846e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/70abd4aa320170aa6dbe8204a5ed846e.jpg rename to docs/master/img/70abd4aa320170aa6dbe8204a5ed846e.jpg diff --git a/docs/0.19.x/img/71581bfc44b992a82bd0bc7a6eee38f4.jpg b/docs/master/img/71581bfc44b992a82bd0bc7a6eee38f4.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/71581bfc44b992a82bd0bc7a6eee38f4.jpg rename to docs/master/img/71581bfc44b992a82bd0bc7a6eee38f4.jpg diff --git a/docs/0.19.x/img/715cb9aaddb7a5ea10028eb49f509f61.jpg b/docs/master/img/715cb9aaddb7a5ea10028eb49f509f61.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/715cb9aaddb7a5ea10028eb49f509f61.jpg rename to docs/master/img/715cb9aaddb7a5ea10028eb49f509f61.jpg diff --git a/docs/0.19.x/img/725082a3e3f2eacec65e9c1435a6960d.jpg b/docs/master/img/725082a3e3f2eacec65e9c1435a6960d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/725082a3e3f2eacec65e9c1435a6960d.jpg rename to docs/master/img/725082a3e3f2eacec65e9c1435a6960d.jpg diff --git a/docs/0.19.x/img/7304e7fb0302be38d7fa1688bcd14df4.jpg b/docs/master/img/7304e7fb0302be38d7fa1688bcd14df4.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7304e7fb0302be38d7fa1688bcd14df4.jpg rename to docs/master/img/7304e7fb0302be38d7fa1688bcd14df4.jpg diff --git a/docs/0.19.x/img/73658f99647e50786817b44416d09df1.jpg b/docs/master/img/73658f99647e50786817b44416d09df1.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/73658f99647e50786817b44416d09df1.jpg rename to docs/master/img/73658f99647e50786817b44416d09df1.jpg diff --git a/docs/0.19.x/img/74f4ea0e25b673d30d56ab4269f03f3b.jpg b/docs/master/img/74f4ea0e25b673d30d56ab4269f03f3b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/74f4ea0e25b673d30d56ab4269f03f3b.jpg rename to docs/master/img/74f4ea0e25b673d30d56ab4269f03f3b.jpg diff --git a/docs/0.19.x/img/75a6f2c15bfb418edcb993c4e27873d0.jpg b/docs/master/img/75a6f2c15bfb418edcb993c4e27873d0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/75a6f2c15bfb418edcb993c4e27873d0.jpg rename to docs/master/img/75a6f2c15bfb418edcb993c4e27873d0.jpg diff --git a/docs/0.19.x/img/75d98860b528f3fcd2b060ad5e624ca0.jpg b/docs/master/img/75d98860b528f3fcd2b060ad5e624ca0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/75d98860b528f3fcd2b060ad5e624ca0.jpg rename to docs/master/img/75d98860b528f3fcd2b060ad5e624ca0.jpg diff --git a/docs/0.19.x/img/75fd7809a46f43dcd922f39ff8f91026.jpg b/docs/master/img/75fd7809a46f43dcd922f39ff8f91026.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/75fd7809a46f43dcd922f39ff8f91026.jpg rename to docs/master/img/75fd7809a46f43dcd922f39ff8f91026.jpg diff --git a/docs/0.19.x/img/76530e85b09bd8385fad05337b968caf.jpg b/docs/master/img/76530e85b09bd8385fad05337b968caf.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/76530e85b09bd8385fad05337b968caf.jpg rename to docs/master/img/76530e85b09bd8385fad05337b968caf.jpg diff --git a/docs/0.19.x/img/76814b51cd880ede8da9a2b5ad3d4143.jpg b/docs/master/img/76814b51cd880ede8da9a2b5ad3d4143.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/76814b51cd880ede8da9a2b5ad3d4143.jpg rename to docs/master/img/76814b51cd880ede8da9a2b5ad3d4143.jpg diff --git a/docs/0.19.x/img/7682696b3b598c55d49ca030059f0a18.jpg b/docs/master/img/7682696b3b598c55d49ca030059f0a18.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7682696b3b598c55d49ca030059f0a18.jpg rename to docs/master/img/7682696b3b598c55d49ca030059f0a18.jpg diff --git a/docs/0.19.x/img/7695a05e60c9dc0ec13f779fc19da966.jpg b/docs/master/img/7695a05e60c9dc0ec13f779fc19da966.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7695a05e60c9dc0ec13f779fc19da966.jpg rename to docs/master/img/7695a05e60c9dc0ec13f779fc19da966.jpg diff --git a/docs/0.19.x/img/769ae28b43c9c1f02556a7d6d878c7e0.jpg b/docs/master/img/769ae28b43c9c1f02556a7d6d878c7e0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/769ae28b43c9c1f02556a7d6d878c7e0.jpg rename to docs/master/img/769ae28b43c9c1f02556a7d6d878c7e0.jpg diff --git a/docs/0.19.x/img/77e01a63c0620550a5f11a7613001120.jpg b/docs/master/img/77e01a63c0620550a5f11a7613001120.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/77e01a63c0620550a5f11a7613001120.jpg rename to docs/master/img/77e01a63c0620550a5f11a7613001120.jpg diff --git a/docs/0.19.x/img/77e9cd089beb314666ac8397f95afc0a.jpg b/docs/master/img/77e9cd089beb314666ac8397f95afc0a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/77e9cd089beb314666ac8397f95afc0a.jpg rename to docs/master/img/77e9cd089beb314666ac8397f95afc0a.jpg diff --git a/docs/0.19.x/img/77ee769c7c80ba4738fa4b34ff922e25.jpg b/docs/master/img/77ee769c7c80ba4738fa4b34ff922e25.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/77ee769c7c80ba4738fa4b34ff922e25.jpg rename to docs/master/img/77ee769c7c80ba4738fa4b34ff922e25.jpg diff --git a/docs/0.19.x/img/77eee205b1d286584f4002a39c9b32a3.jpg b/docs/master/img/77eee205b1d286584f4002a39c9b32a3.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/77eee205b1d286584f4002a39c9b32a3.jpg rename to docs/master/img/77eee205b1d286584f4002a39c9b32a3.jpg diff --git a/docs/0.19.x/img/7881dd425f1090aadc25eca46dc0daec.jpg b/docs/master/img/7881dd425f1090aadc25eca46dc0daec.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7881dd425f1090aadc25eca46dc0daec.jpg rename to docs/master/img/7881dd425f1090aadc25eca46dc0daec.jpg diff --git a/docs/0.19.x/img/7947f721109ac76f1366b72715d3e7e3.jpg b/docs/master/img/7947f721109ac76f1366b72715d3e7e3.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7947f721109ac76f1366b72715d3e7e3.jpg rename to docs/master/img/7947f721109ac76f1366b72715d3e7e3.jpg diff --git a/docs/0.19.x/img/79b52c5c00ce59ba04383f6a0d670c6d.jpg b/docs/master/img/79b52c5c00ce59ba04383f6a0d670c6d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/79b52c5c00ce59ba04383f6a0d670c6d.jpg rename to docs/master/img/79b52c5c00ce59ba04383f6a0d670c6d.jpg diff --git a/docs/0.19.x/img/7a6d4f1e7672a61d5284203113eb5b2a.jpg b/docs/master/img/7a6d4f1e7672a61d5284203113eb5b2a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7a6d4f1e7672a61d5284203113eb5b2a.jpg rename to docs/master/img/7a6d4f1e7672a61d5284203113eb5b2a.jpg diff --git a/docs/0.19.x/img/7a79f764bd3db11876c1065b6677af80.jpg b/docs/master/img/7a79f764bd3db11876c1065b6677af80.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7a79f764bd3db11876c1065b6677af80.jpg rename to docs/master/img/7a79f764bd3db11876c1065b6677af80.jpg diff --git a/docs/0.19.x/img/7a958d3bae3db42cc0811b186bbc4e00.jpg b/docs/master/img/7a958d3bae3db42cc0811b186bbc4e00.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7a958d3bae3db42cc0811b186bbc4e00.jpg rename to docs/master/img/7a958d3bae3db42cc0811b186bbc4e00.jpg diff --git a/docs/0.19.x/img/7a95e7e32309847d96c207051da29ea9.jpg b/docs/master/img/7a95e7e32309847d96c207051da29ea9.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7a95e7e32309847d96c207051da29ea9.jpg rename to docs/master/img/7a95e7e32309847d96c207051da29ea9.jpg diff --git a/docs/0.19.x/img/7a9775b9051c948f74639f1856f6c585.jpg b/docs/master/img/7a9775b9051c948f74639f1856f6c585.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7a9775b9051c948f74639f1856f6c585.jpg rename to docs/master/img/7a9775b9051c948f74639f1856f6c585.jpg diff --git a/docs/0.19.x/img/7ab8c51f211ad5aea8e4e78337ca3624.jpg b/docs/master/img/7ab8c51f211ad5aea8e4e78337ca3624.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7ab8c51f211ad5aea8e4e78337ca3624.jpg rename to docs/master/img/7ab8c51f211ad5aea8e4e78337ca3624.jpg diff --git a/docs/0.19.x/img/7acaacd6f5e4219eb0e02cc0ce0aff63.jpg b/docs/master/img/7acaacd6f5e4219eb0e02cc0ce0aff63.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7acaacd6f5e4219eb0e02cc0ce0aff63.jpg rename to docs/master/img/7acaacd6f5e4219eb0e02cc0ce0aff63.jpg diff --git a/docs/0.19.x/img/7afe3c56e3473a3a7f18cf983ed5e79c.jpg b/docs/master/img/7afe3c56e3473a3a7f18cf983ed5e79c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7afe3c56e3473a3a7f18cf983ed5e79c.jpg rename to docs/master/img/7afe3c56e3473a3a7f18cf983ed5e79c.jpg diff --git a/docs/0.19.x/img/7b0e2ed0273c0a1650cc9f78eabe93c4.jpg b/docs/master/img/7b0e2ed0273c0a1650cc9f78eabe93c4.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7b0e2ed0273c0a1650cc9f78eabe93c4.jpg rename to docs/master/img/7b0e2ed0273c0a1650cc9f78eabe93c4.jpg diff --git a/docs/0.19.x/img/7b215f2882ce8aaa33a97e43ad626314.jpg b/docs/master/img/7b215f2882ce8aaa33a97e43ad626314.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7b215f2882ce8aaa33a97e43ad626314.jpg rename to docs/master/img/7b215f2882ce8aaa33a97e43ad626314.jpg diff --git a/docs/0.19.x/img/7b6cebf625d680ab33eba86d34885910.jpg b/docs/master/img/7b6cebf625d680ab33eba86d34885910.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7b6cebf625d680ab33eba86d34885910.jpg rename to docs/master/img/7b6cebf625d680ab33eba86d34885910.jpg diff --git a/docs/0.19.x/img/7ba11d33e68a1e32f2d8d9387bbc1eba.jpg b/docs/master/img/7ba11d33e68a1e32f2d8d9387bbc1eba.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7ba11d33e68a1e32f2d8d9387bbc1eba.jpg rename to docs/master/img/7ba11d33e68a1e32f2d8d9387bbc1eba.jpg diff --git a/docs/0.19.x/img/7c228fb3025521b5d9c2aef929547d1d.jpg b/docs/master/img/7c228fb3025521b5d9c2aef929547d1d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7c228fb3025521b5d9c2aef929547d1d.jpg rename to docs/master/img/7c228fb3025521b5d9c2aef929547d1d.jpg diff --git a/docs/0.19.x/img/7c9ce57d4e2ba5270352f4e118af7fac.jpg b/docs/master/img/7c9ce57d4e2ba5270352f4e118af7fac.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7c9ce57d4e2ba5270352f4e118af7fac.jpg rename to docs/master/img/7c9ce57d4e2ba5270352f4e118af7fac.jpg diff --git a/docs/0.19.x/img/7ca5945518e2f3eff72bd67b029e919a.jpg b/docs/master/img/7ca5945518e2f3eff72bd67b029e919a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7ca5945518e2f3eff72bd67b029e919a.jpg rename to docs/master/img/7ca5945518e2f3eff72bd67b029e919a.jpg diff --git a/docs/0.19.x/img/7cda18e6ccd378c8ef9714e3035506c9.jpg b/docs/master/img/7cda18e6ccd378c8ef9714e3035506c9.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7cda18e6ccd378c8ef9714e3035506c9.jpg rename to docs/master/img/7cda18e6ccd378c8ef9714e3035506c9.jpg diff --git a/docs/0.19.x/img/7ce09555ac9e490df7f81ef7eb0e58e8.jpg b/docs/master/img/7ce09555ac9e490df7f81ef7eb0e58e8.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7ce09555ac9e490df7f81ef7eb0e58e8.jpg rename to docs/master/img/7ce09555ac9e490df7f81ef7eb0e58e8.jpg diff --git a/docs/0.19.x/img/7d1cd85c2f165c7bde33eccf4be29e75.jpg b/docs/master/img/7d1cd85c2f165c7bde33eccf4be29e75.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7d1cd85c2f165c7bde33eccf4be29e75.jpg rename to docs/master/img/7d1cd85c2f165c7bde33eccf4be29e75.jpg diff --git a/docs/0.19.x/img/7d1d547b1a46ad827caeb7f0e85b213d.jpg b/docs/master/img/7d1d547b1a46ad827caeb7f0e85b213d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7d1d547b1a46ad827caeb7f0e85b213d.jpg rename to docs/master/img/7d1d547b1a46ad827caeb7f0e85b213d.jpg diff --git a/docs/0.19.x/img/7d32ef1e04f69e63d69e04b09b973946.jpg b/docs/master/img/7d32ef1e04f69e63d69e04b09b973946.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7d32ef1e04f69e63d69e04b09b973946.jpg rename to docs/master/img/7d32ef1e04f69e63d69e04b09b973946.jpg diff --git a/docs/0.19.x/img/7d379816608eb84009d45f0e26772256.jpg b/docs/master/img/7d379816608eb84009d45f0e26772256.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7d379816608eb84009d45f0e26772256.jpg rename to docs/master/img/7d379816608eb84009d45f0e26772256.jpg diff --git a/docs/0.19.x/img/7d4aae450c85e9ea83d3746485791394.jpg b/docs/master/img/7d4aae450c85e9ea83d3746485791394.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7d4aae450c85e9ea83d3746485791394.jpg rename to docs/master/img/7d4aae450c85e9ea83d3746485791394.jpg diff --git a/docs/0.19.x/img/7d9b5103fb50fe740fbc421247d2a5c7.jpg b/docs/master/img/7d9b5103fb50fe740fbc421247d2a5c7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7d9b5103fb50fe740fbc421247d2a5c7.jpg rename to docs/master/img/7d9b5103fb50fe740fbc421247d2a5c7.jpg diff --git a/docs/0.19.x/img/7df17fc33fdb4c71b329c593ad30f47e.jpg b/docs/master/img/7df17fc33fdb4c71b329c593ad30f47e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7df17fc33fdb4c71b329c593ad30f47e.jpg rename to docs/master/img/7df17fc33fdb4c71b329c593ad30f47e.jpg diff --git a/docs/0.19.x/img/7e76cbbbf685f7ec4bec704a9b5ea007.jpg b/docs/master/img/7e76cbbbf685f7ec4bec704a9b5ea007.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7e76cbbbf685f7ec4bec704a9b5ea007.jpg rename to docs/master/img/7e76cbbbf685f7ec4bec704a9b5ea007.jpg diff --git a/docs/0.19.x/img/7e8b544e8ce168b079607ff9674a2c91.jpg b/docs/master/img/7e8b544e8ce168b079607ff9674a2c91.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7e8b544e8ce168b079607ff9674a2c91.jpg rename to docs/master/img/7e8b544e8ce168b079607ff9674a2c91.jpg diff --git a/docs/0.19.x/img/7ea4ef13cdad8ec1dea90fc195d058b1.jpg b/docs/master/img/7ea4ef13cdad8ec1dea90fc195d058b1.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7ea4ef13cdad8ec1dea90fc195d058b1.jpg rename to docs/master/img/7ea4ef13cdad8ec1dea90fc195d058b1.jpg diff --git a/docs/0.19.x/img/7eb576473ec1de4500c33294115b0719.jpg b/docs/master/img/7eb576473ec1de4500c33294115b0719.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7eb576473ec1de4500c33294115b0719.jpg rename to docs/master/img/7eb576473ec1de4500c33294115b0719.jpg diff --git a/docs/0.19.x/img/7ec998f799acf05b040856bc6b37657f.jpg b/docs/master/img/7ec998f799acf05b040856bc6b37657f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7ec998f799acf05b040856bc6b37657f.jpg rename to docs/master/img/7ec998f799acf05b040856bc6b37657f.jpg diff --git a/docs/0.19.x/img/7ece088a96a66cb9675fde4610d67980.jpg b/docs/master/img/7ece088a96a66cb9675fde4610d67980.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7ece088a96a66cb9675fde4610d67980.jpg rename to docs/master/img/7ece088a96a66cb9675fde4610d67980.jpg diff --git a/docs/0.19.x/img/7efe29500f4af973643a15b3ed29a926.jpg b/docs/master/img/7efe29500f4af973643a15b3ed29a926.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7efe29500f4af973643a15b3ed29a926.jpg rename to docs/master/img/7efe29500f4af973643a15b3ed29a926.jpg diff --git a/docs/0.19.x/img/7f1cafe91ec3b94b27f8759724287242.jpg b/docs/master/img/7f1cafe91ec3b94b27f8759724287242.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7f1cafe91ec3b94b27f8759724287242.jpg rename to docs/master/img/7f1cafe91ec3b94b27f8759724287242.jpg diff --git a/docs/0.19.x/img/7f35ead97a9f7be07b87ff7b860bcab9.jpg b/docs/master/img/7f35ead97a9f7be07b87ff7b860bcab9.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7f35ead97a9f7be07b87ff7b860bcab9.jpg rename to docs/master/img/7f35ead97a9f7be07b87ff7b860bcab9.jpg diff --git a/docs/0.19.x/img/7f37b8cd4340f3d0981f518f14670c26.jpg b/docs/master/img/7f37b8cd4340f3d0981f518f14670c26.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7f37b8cd4340f3d0981f518f14670c26.jpg rename to docs/master/img/7f37b8cd4340f3d0981f518f14670c26.jpg diff --git a/docs/0.19.x/img/7fb5b8aaa79d55e35332a1f02a5aee04.jpg b/docs/master/img/7fb5b8aaa79d55e35332a1f02a5aee04.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7fb5b8aaa79d55e35332a1f02a5aee04.jpg rename to docs/master/img/7fb5b8aaa79d55e35332a1f02a5aee04.jpg diff --git a/docs/0.19.x/img/7ff85adefbea266b138eec7868e87fa9.jpg b/docs/master/img/7ff85adefbea266b138eec7868e87fa9.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/7ff85adefbea266b138eec7868e87fa9.jpg rename to docs/master/img/7ff85adefbea266b138eec7868e87fa9.jpg diff --git a/docs/0.19.x/img/80a5660d27392922e501744cab3623da.jpg b/docs/master/img/80a5660d27392922e501744cab3623da.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/80a5660d27392922e501744cab3623da.jpg rename to docs/master/img/80a5660d27392922e501744cab3623da.jpg diff --git a/docs/0.19.x/img/81da9e05103270be5e500ebc67cd1b45.jpg b/docs/master/img/81da9e05103270be5e500ebc67cd1b45.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/81da9e05103270be5e500ebc67cd1b45.jpg rename to docs/master/img/81da9e05103270be5e500ebc67cd1b45.jpg diff --git a/docs/0.19.x/img/81dfab5bd4f0d37601684acb3d714e9d.jpg b/docs/master/img/81dfab5bd4f0d37601684acb3d714e9d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/81dfab5bd4f0d37601684acb3d714e9d.jpg rename to docs/master/img/81dfab5bd4f0d37601684acb3d714e9d.jpg diff --git a/docs/0.19.x/img/827de4e90947894fc96dd0432ff0d7dd.jpg b/docs/master/img/827de4e90947894fc96dd0432ff0d7dd.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/827de4e90947894fc96dd0432ff0d7dd.jpg rename to docs/master/img/827de4e90947894fc96dd0432ff0d7dd.jpg diff --git a/docs/0.19.x/img/841ad1e8353dcbf5fed2a58b2008873f.jpg b/docs/master/img/841ad1e8353dcbf5fed2a58b2008873f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/841ad1e8353dcbf5fed2a58b2008873f.jpg rename to docs/master/img/841ad1e8353dcbf5fed2a58b2008873f.jpg diff --git a/docs/0.19.x/img/84298218bd1f4087ce7f8d55a4de1843.jpg b/docs/master/img/84298218bd1f4087ce7f8d55a4de1843.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/84298218bd1f4087ce7f8d55a4de1843.jpg rename to docs/master/img/84298218bd1f4087ce7f8d55a4de1843.jpg diff --git a/docs/0.19.x/img/842c30bfbcf39ee4d2ac5d7587f7168c.jpg b/docs/master/img/842c30bfbcf39ee4d2ac5d7587f7168c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/842c30bfbcf39ee4d2ac5d7587f7168c.jpg rename to docs/master/img/842c30bfbcf39ee4d2ac5d7587f7168c.jpg diff --git a/docs/0.19.x/img/843ad36e77423c1d0d068bf1b0af24fb.jpg b/docs/master/img/843ad36e77423c1d0d068bf1b0af24fb.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/843ad36e77423c1d0d068bf1b0af24fb.jpg rename to docs/master/img/843ad36e77423c1d0d068bf1b0af24fb.jpg diff --git a/docs/0.19.x/img/8480724cd60359c7a8ceda7bee5590bd.jpg b/docs/master/img/8480724cd60359c7a8ceda7bee5590bd.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8480724cd60359c7a8ceda7bee5590bd.jpg rename to docs/master/img/8480724cd60359c7a8ceda7bee5590bd.jpg diff --git a/docs/0.19.x/img/848835d5b40c5bd74a6e592a65eed5d6.jpg b/docs/master/img/848835d5b40c5bd74a6e592a65eed5d6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/848835d5b40c5bd74a6e592a65eed5d6.jpg rename to docs/master/img/848835d5b40c5bd74a6e592a65eed5d6.jpg diff --git a/docs/0.19.x/img/8494ed588e1c79e569f4d2add722ecf5.jpg b/docs/master/img/8494ed588e1c79e569f4d2add722ecf5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8494ed588e1c79e569f4d2add722ecf5.jpg rename to docs/master/img/8494ed588e1c79e569f4d2add722ecf5.jpg diff --git a/docs/0.19.x/img/851c667ab0811688c25c6819aafacba0.jpg b/docs/master/img/851c667ab0811688c25c6819aafacba0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/851c667ab0811688c25c6819aafacba0.jpg rename to docs/master/img/851c667ab0811688c25c6819aafacba0.jpg diff --git a/docs/0.19.x/img/855d4e5dae2b0286042ee7eef0c91ab5.jpg b/docs/master/img/855d4e5dae2b0286042ee7eef0c91ab5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/855d4e5dae2b0286042ee7eef0c91ab5.jpg rename to docs/master/img/855d4e5dae2b0286042ee7eef0c91ab5.jpg diff --git a/docs/0.19.x/img/85f7fc9836edfbdcd2a7533674940b46.jpg b/docs/master/img/85f7fc9836edfbdcd2a7533674940b46.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/85f7fc9836edfbdcd2a7533674940b46.jpg rename to docs/master/img/85f7fc9836edfbdcd2a7533674940b46.jpg diff --git a/docs/0.19.x/img/86003b5287219bcbec1586985a110629.jpg b/docs/master/img/86003b5287219bcbec1586985a110629.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/86003b5287219bcbec1586985a110629.jpg rename to docs/master/img/86003b5287219bcbec1586985a110629.jpg diff --git a/docs/0.19.x/img/860af894555b3d5f52e893bab6cafc11.jpg b/docs/master/img/860af894555b3d5f52e893bab6cafc11.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/860af894555b3d5f52e893bab6cafc11.jpg rename to docs/master/img/860af894555b3d5f52e893bab6cafc11.jpg diff --git a/docs/0.19.x/img/8610705cf45aa68b12197abd65653479.jpg b/docs/master/img/8610705cf45aa68b12197abd65653479.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8610705cf45aa68b12197abd65653479.jpg rename to docs/master/img/8610705cf45aa68b12197abd65653479.jpg diff --git a/docs/0.19.x/img/8615ac5c8ea1fb8ae6e726f7659a29e9.jpg b/docs/master/img/8615ac5c8ea1fb8ae6e726f7659a29e9.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8615ac5c8ea1fb8ae6e726f7659a29e9.jpg rename to docs/master/img/8615ac5c8ea1fb8ae6e726f7659a29e9.jpg diff --git a/docs/0.19.x/img/866891e7bebe66615daa04976af79f99.jpg b/docs/master/img/866891e7bebe66615daa04976af79f99.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/866891e7bebe66615daa04976af79f99.jpg rename to docs/master/img/866891e7bebe66615daa04976af79f99.jpg diff --git a/docs/0.19.x/img/86d43b01a4c13ac9d69265ff0d546720.jpg b/docs/master/img/86d43b01a4c13ac9d69265ff0d546720.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/86d43b01a4c13ac9d69265ff0d546720.jpg rename to docs/master/img/86d43b01a4c13ac9d69265ff0d546720.jpg diff --git a/docs/0.19.x/img/86f7969b00fb3d0914f0bababac102a0.jpg b/docs/master/img/86f7969b00fb3d0914f0bababac102a0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/86f7969b00fb3d0914f0bababac102a0.jpg rename to docs/master/img/86f7969b00fb3d0914f0bababac102a0.jpg diff --git a/docs/0.19.x/img/87ae31ef4f2e7b4385b9a25aa8fed533.jpg b/docs/master/img/87ae31ef4f2e7b4385b9a25aa8fed533.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/87ae31ef4f2e7b4385b9a25aa8fed533.jpg rename to docs/master/img/87ae31ef4f2e7b4385b9a25aa8fed533.jpg diff --git a/docs/0.19.x/img/87c11f44388ae80ae9244e8d56a2dc86.jpg b/docs/master/img/87c11f44388ae80ae9244e8d56a2dc86.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/87c11f44388ae80ae9244e8d56a2dc86.jpg rename to docs/master/img/87c11f44388ae80ae9244e8d56a2dc86.jpg diff --git a/docs/0.19.x/img/87dfb2676632ee8a92713f4861ccc84e.jpg b/docs/master/img/87dfb2676632ee8a92713f4861ccc84e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/87dfb2676632ee8a92713f4861ccc84e.jpg rename to docs/master/img/87dfb2676632ee8a92713f4861ccc84e.jpg diff --git a/docs/0.19.x/img/87fef5b961bf8a90d58faa5e4084a081.jpg b/docs/master/img/87fef5b961bf8a90d58faa5e4084a081.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/87fef5b961bf8a90d58faa5e4084a081.jpg rename to docs/master/img/87fef5b961bf8a90d58faa5e4084a081.jpg diff --git a/docs/0.19.x/img/8851bd0fe9749b4841b30cee41fb040d.jpg b/docs/master/img/8851bd0fe9749b4841b30cee41fb040d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8851bd0fe9749b4841b30cee41fb040d.jpg rename to docs/master/img/8851bd0fe9749b4841b30cee41fb040d.jpg diff --git a/docs/0.19.x/img/887928b507a2f01847b6ae5f5b0e733f.jpg b/docs/master/img/887928b507a2f01847b6ae5f5b0e733f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/887928b507a2f01847b6ae5f5b0e733f.jpg rename to docs/master/img/887928b507a2f01847b6ae5f5b0e733f.jpg diff --git a/docs/0.19.x/img/88c766439d728ffb597e180a42f41d00.jpg b/docs/master/img/88c766439d728ffb597e180a42f41d00.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/88c766439d728ffb597e180a42f41d00.jpg rename to docs/master/img/88c766439d728ffb597e180a42f41d00.jpg diff --git a/docs/0.19.x/img/88d9981d54cd398165b20856ed5043e1.jpg b/docs/master/img/88d9981d54cd398165b20856ed5043e1.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/88d9981d54cd398165b20856ed5043e1.jpg rename to docs/master/img/88d9981d54cd398165b20856ed5043e1.jpg diff --git a/docs/0.19.x/img/88ef3c9a51bdadd21593bf89887a04b5.jpg b/docs/master/img/88ef3c9a51bdadd21593bf89887a04b5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/88ef3c9a51bdadd21593bf89887a04b5.jpg rename to docs/master/img/88ef3c9a51bdadd21593bf89887a04b5.jpg diff --git a/docs/0.19.x/img/89807b9fa9f5924b027486f280324b1a.jpg b/docs/master/img/89807b9fa9f5924b027486f280324b1a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/89807b9fa9f5924b027486f280324b1a.jpg rename to docs/master/img/89807b9fa9f5924b027486f280324b1a.jpg diff --git a/docs/0.19.x/img/8a58e8df6a985a3273e39bac7dd72b1f.jpg b/docs/master/img/8a58e8df6a985a3273e39bac7dd72b1f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8a58e8df6a985a3273e39bac7dd72b1f.jpg rename to docs/master/img/8a58e8df6a985a3273e39bac7dd72b1f.jpg diff --git a/docs/0.19.x/img/8a76c85f2de3d3777fe72f5d8e32e0cf.jpg b/docs/master/img/8a76c85f2de3d3777fe72f5d8e32e0cf.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8a76c85f2de3d3777fe72f5d8e32e0cf.jpg rename to docs/master/img/8a76c85f2de3d3777fe72f5d8e32e0cf.jpg diff --git a/docs/0.19.x/img/8aca5aa85ff13bf8e8687220b137f9d3.jpg b/docs/master/img/8aca5aa85ff13bf8e8687220b137f9d3.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8aca5aa85ff13bf8e8687220b137f9d3.jpg rename to docs/master/img/8aca5aa85ff13bf8e8687220b137f9d3.jpg diff --git a/docs/0.19.x/img/8ae33567ac5e4d4e9b1b14ae12220ea9.jpg b/docs/master/img/8ae33567ac5e4d4e9b1b14ae12220ea9.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8ae33567ac5e4d4e9b1b14ae12220ea9.jpg rename to docs/master/img/8ae33567ac5e4d4e9b1b14ae12220ea9.jpg diff --git a/docs/0.19.x/img/8b3be66a25e0c33787b341667b261360.jpg b/docs/master/img/8b3be66a25e0c33787b341667b261360.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8b3be66a25e0c33787b341667b261360.jpg rename to docs/master/img/8b3be66a25e0c33787b341667b261360.jpg diff --git a/docs/0.19.x/img/8bce1ab1dca39a6b7fcb97dcf959a1f7.jpg b/docs/master/img/8bce1ab1dca39a6b7fcb97dcf959a1f7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8bce1ab1dca39a6b7fcb97dcf959a1f7.jpg rename to docs/master/img/8bce1ab1dca39a6b7fcb97dcf959a1f7.jpg diff --git a/docs/0.19.x/img/8c0b5b6a48349ecfb1f20d9168d166b7.jpg b/docs/master/img/8c0b5b6a48349ecfb1f20d9168d166b7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8c0b5b6a48349ecfb1f20d9168d166b7.jpg rename to docs/master/img/8c0b5b6a48349ecfb1f20d9168d166b7.jpg diff --git a/docs/0.19.x/img/8c187292cd29fea23a4983db349e7545.jpg b/docs/master/img/8c187292cd29fea23a4983db349e7545.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8c187292cd29fea23a4983db349e7545.jpg rename to docs/master/img/8c187292cd29fea23a4983db349e7545.jpg diff --git a/docs/0.19.x/img/8c43dd6816e66709ef3f9d681ec3941a.jpg b/docs/master/img/8c43dd6816e66709ef3f9d681ec3941a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8c43dd6816e66709ef3f9d681ec3941a.jpg rename to docs/master/img/8c43dd6816e66709ef3f9d681ec3941a.jpg diff --git a/docs/0.19.x/img/8c4a5c99b21079b9fb1be49910ff96e3.jpg b/docs/master/img/8c4a5c99b21079b9fb1be49910ff96e3.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8c4a5c99b21079b9fb1be49910ff96e3.jpg rename to docs/master/img/8c4a5c99b21079b9fb1be49910ff96e3.jpg diff --git a/docs/0.19.x/img/8c4beae51da320d8fffd739a9e9e3852.jpg b/docs/master/img/8c4beae51da320d8fffd739a9e9e3852.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8c4beae51da320d8fffd739a9e9e3852.jpg rename to docs/master/img/8c4beae51da320d8fffd739a9e9e3852.jpg diff --git a/docs/0.19.x/img/8c8211edce4dbaeb44032f8d71a12135.jpg b/docs/master/img/8c8211edce4dbaeb44032f8d71a12135.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8c8211edce4dbaeb44032f8d71a12135.jpg rename to docs/master/img/8c8211edce4dbaeb44032f8d71a12135.jpg diff --git a/docs/0.19.x/img/8c8c09a18e398935473d8b69cf1b617e.jpg b/docs/master/img/8c8c09a18e398935473d8b69cf1b617e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8c8c09a18e398935473d8b69cf1b617e.jpg rename to docs/master/img/8c8c09a18e398935473d8b69cf1b617e.jpg diff --git a/docs/0.19.x/img/8cc09b4045e2fece3222e52d7333c1e5.jpg b/docs/master/img/8cc09b4045e2fece3222e52d7333c1e5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8cc09b4045e2fece3222e52d7333c1e5.jpg rename to docs/master/img/8cc09b4045e2fece3222e52d7333c1e5.jpg diff --git a/docs/0.19.x/img/8cddd8c0c85ca4a1b6dce8bbf145a8aa.jpg b/docs/master/img/8cddd8c0c85ca4a1b6dce8bbf145a8aa.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8cddd8c0c85ca4a1b6dce8bbf145a8aa.jpg rename to docs/master/img/8cddd8c0c85ca4a1b6dce8bbf145a8aa.jpg diff --git a/docs/0.19.x/img/8dab78bd2e80188f99e0c88c4c83472a.jpg b/docs/master/img/8dab78bd2e80188f99e0c88c4c83472a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8dab78bd2e80188f99e0c88c4c83472a.jpg rename to docs/master/img/8dab78bd2e80188f99e0c88c4c83472a.jpg diff --git a/docs/0.19.x/img/8dcf0f01f9d255c37e21948ad3821885.jpg b/docs/master/img/8dcf0f01f9d255c37e21948ad3821885.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8dcf0f01f9d255c37e21948ad3821885.jpg rename to docs/master/img/8dcf0f01f9d255c37e21948ad3821885.jpg diff --git a/docs/0.19.x/img/8dd0e1ef4fdc9bbfcc8b0ce3fa8a4321.jpg b/docs/master/img/8dd0e1ef4fdc9bbfcc8b0ce3fa8a4321.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8dd0e1ef4fdc9bbfcc8b0ce3fa8a4321.jpg rename to docs/master/img/8dd0e1ef4fdc9bbfcc8b0ce3fa8a4321.jpg diff --git a/docs/0.19.x/img/8ef970a809e9beef56eb7a78d0133978.jpg b/docs/master/img/8ef970a809e9beef56eb7a78d0133978.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8ef970a809e9beef56eb7a78d0133978.jpg rename to docs/master/img/8ef970a809e9beef56eb7a78d0133978.jpg diff --git a/docs/0.19.x/img/8f4e82e4dfa89ac81c42992c603a953e.jpg b/docs/master/img/8f4e82e4dfa89ac81c42992c603a953e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8f4e82e4dfa89ac81c42992c603a953e.jpg rename to docs/master/img/8f4e82e4dfa89ac81c42992c603a953e.jpg diff --git a/docs/0.19.x/img/8f4f76678eb50ebccaba25e86961ff3e.jpg b/docs/master/img/8f4f76678eb50ebccaba25e86961ff3e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8f4f76678eb50ebccaba25e86961ff3e.jpg rename to docs/master/img/8f4f76678eb50ebccaba25e86961ff3e.jpg diff --git a/docs/0.19.x/img/8f62a01deaf67a7f9960d853abd9dcca.jpg b/docs/master/img/8f62a01deaf67a7f9960d853abd9dcca.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8f62a01deaf67a7f9960d853abd9dcca.jpg rename to docs/master/img/8f62a01deaf67a7f9960d853abd9dcca.jpg diff --git a/docs/0.19.x/img/8f839ebe5b506fef19bd8cc121b3f557.jpg b/docs/master/img/8f839ebe5b506fef19bd8cc121b3f557.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8f839ebe5b506fef19bd8cc121b3f557.jpg rename to docs/master/img/8f839ebe5b506fef19bd8cc121b3f557.jpg diff --git a/docs/0.19.x/img/8fae035cff5a2ccfbc80e38fab4907cd.jpg b/docs/master/img/8fae035cff5a2ccfbc80e38fab4907cd.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8fae035cff5a2ccfbc80e38fab4907cd.jpg rename to docs/master/img/8fae035cff5a2ccfbc80e38fab4907cd.jpg diff --git a/docs/0.19.x/img/8fe0d726b364f224c93e31cd3248a1f6.jpg b/docs/master/img/8fe0d726b364f224c93e31cd3248a1f6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/8fe0d726b364f224c93e31cd3248a1f6.jpg rename to docs/master/img/8fe0d726b364f224c93e31cd3248a1f6.jpg diff --git a/docs/0.19.x/img/9127c3e2b5748eee602354fed5570605.jpg b/docs/master/img/9127c3e2b5748eee602354fed5570605.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9127c3e2b5748eee602354fed5570605.jpg rename to docs/master/img/9127c3e2b5748eee602354fed5570605.jpg diff --git a/docs/0.19.x/img/9255ba83a88cb73b04d1ca968f9c2b4e.jpg b/docs/master/img/9255ba83a88cb73b04d1ca968f9c2b4e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9255ba83a88cb73b04d1ca968f9c2b4e.jpg rename to docs/master/img/9255ba83a88cb73b04d1ca968f9c2b4e.jpg diff --git a/docs/0.19.x/img/92570652e9c52768c76f5b9cf8f97a28.jpg b/docs/master/img/92570652e9c52768c76f5b9cf8f97a28.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/92570652e9c52768c76f5b9cf8f97a28.jpg rename to docs/master/img/92570652e9c52768c76f5b9cf8f97a28.jpg diff --git a/docs/0.19.x/img/9259b19a18f30f67db9e45b8c0b361c7.jpg b/docs/master/img/9259b19a18f30f67db9e45b8c0b361c7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9259b19a18f30f67db9e45b8c0b361c7.jpg rename to docs/master/img/9259b19a18f30f67db9e45b8c0b361c7.jpg diff --git a/docs/0.19.x/img/929e25fd2cb34bf9709d68d266786fd3.jpg b/docs/master/img/929e25fd2cb34bf9709d68d266786fd3.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/929e25fd2cb34bf9709d68d266786fd3.jpg rename to docs/master/img/929e25fd2cb34bf9709d68d266786fd3.jpg diff --git a/docs/0.19.x/img/92c470d884176abfcc29a5218ccf0aef.jpg b/docs/master/img/92c470d884176abfcc29a5218ccf0aef.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/92c470d884176abfcc29a5218ccf0aef.jpg rename to docs/master/img/92c470d884176abfcc29a5218ccf0aef.jpg diff --git a/docs/0.19.x/img/92e5a41435bd53653e9ad36f030cbd61.jpg b/docs/master/img/92e5a41435bd53653e9ad36f030cbd61.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/92e5a41435bd53653e9ad36f030cbd61.jpg rename to docs/master/img/92e5a41435bd53653e9ad36f030cbd61.jpg diff --git a/docs/0.19.x/img/93074566222e67121a8ab55e90d8e1af.jpg b/docs/master/img/93074566222e67121a8ab55e90d8e1af.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/93074566222e67121a8ab55e90d8e1af.jpg rename to docs/master/img/93074566222e67121a8ab55e90d8e1af.jpg diff --git a/docs/0.19.x/img/93401b902ac1e2a94ff3ce04e7f05882.jpg b/docs/master/img/93401b902ac1e2a94ff3ce04e7f05882.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/93401b902ac1e2a94ff3ce04e7f05882.jpg rename to docs/master/img/93401b902ac1e2a94ff3ce04e7f05882.jpg diff --git a/docs/0.19.x/img/938ee5c0c620fd2298ea16abe621e7bb.jpg b/docs/master/img/938ee5c0c620fd2298ea16abe621e7bb.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/938ee5c0c620fd2298ea16abe621e7bb.jpg rename to docs/master/img/938ee5c0c620fd2298ea16abe621e7bb.jpg diff --git a/docs/0.19.x/img/93cdc140e4de4cbb0d093fc7ad5c6a36.jpg b/docs/master/img/93cdc140e4de4cbb0d093fc7ad5c6a36.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/93cdc140e4de4cbb0d093fc7ad5c6a36.jpg rename to docs/master/img/93cdc140e4de4cbb0d093fc7ad5c6a36.jpg diff --git a/docs/0.19.x/img/93d2f2876517637396e99e36132252f3.jpg b/docs/master/img/93d2f2876517637396e99e36132252f3.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/93d2f2876517637396e99e36132252f3.jpg rename to docs/master/img/93d2f2876517637396e99e36132252f3.jpg diff --git a/docs/0.19.x/img/94156b879a7455cb0d516efa9c9c0991.jpg b/docs/master/img/94156b879a7455cb0d516efa9c9c0991.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/94156b879a7455cb0d516efa9c9c0991.jpg rename to docs/master/img/94156b879a7455cb0d516efa9c9c0991.jpg diff --git a/docs/0.19.x/img/942734d190e4b1d2c51b0e2ee6c24428.jpg b/docs/master/img/942734d190e4b1d2c51b0e2ee6c24428.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/942734d190e4b1d2c51b0e2ee6c24428.jpg rename to docs/master/img/942734d190e4b1d2c51b0e2ee6c24428.jpg diff --git a/docs/0.19.x/img/943add7649d85f7ef63a83356dd6f234.jpg b/docs/master/img/943add7649d85f7ef63a83356dd6f234.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/943add7649d85f7ef63a83356dd6f234.jpg rename to docs/master/img/943add7649d85f7ef63a83356dd6f234.jpg diff --git a/docs/0.19.x/img/94435503540f66cab82015a35139213d.jpg b/docs/master/img/94435503540f66cab82015a35139213d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/94435503540f66cab82015a35139213d.jpg rename to docs/master/img/94435503540f66cab82015a35139213d.jpg diff --git a/docs/0.19.x/img/947ae691edda29c53c3b962665b052c6.jpg b/docs/master/img/947ae691edda29c53c3b962665b052c6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/947ae691edda29c53c3b962665b052c6.jpg rename to docs/master/img/947ae691edda29c53c3b962665b052c6.jpg diff --git a/docs/0.19.x/img/94a5c73d8f351280b6313519455a11c7.jpg b/docs/master/img/94a5c73d8f351280b6313519455a11c7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/94a5c73d8f351280b6313519455a11c7.jpg rename to docs/master/img/94a5c73d8f351280b6313519455a11c7.jpg diff --git a/docs/0.19.x/img/94f627411c005fe4911552b1dd5b6ff1.jpg b/docs/master/img/94f627411c005fe4911552b1dd5b6ff1.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/94f627411c005fe4911552b1dd5b6ff1.jpg rename to docs/master/img/94f627411c005fe4911552b1dd5b6ff1.jpg diff --git a/docs/0.19.x/img/9521899a181a367c5873e61b9f7785ce.jpg b/docs/master/img/9521899a181a367c5873e61b9f7785ce.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9521899a181a367c5873e61b9f7785ce.jpg rename to docs/master/img/9521899a181a367c5873e61b9f7785ce.jpg diff --git a/docs/0.19.x/img/9642d01a97f06869baba6159e3438677.jpg b/docs/master/img/9642d01a97f06869baba6159e3438677.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9642d01a97f06869baba6159e3438677.jpg rename to docs/master/img/9642d01a97f06869baba6159e3438677.jpg diff --git a/docs/0.19.x/img/966bd0680e0e71a4df98abab98818724.jpg b/docs/master/img/966bd0680e0e71a4df98abab98818724.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/966bd0680e0e71a4df98abab98818724.jpg rename to docs/master/img/966bd0680e0e71a4df98abab98818724.jpg diff --git a/docs/0.19.x/img/971b86cde9801a3bb1a80af70bd05466.jpg b/docs/master/img/971b86cde9801a3bb1a80af70bd05466.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/971b86cde9801a3bb1a80af70bd05466.jpg rename to docs/master/img/971b86cde9801a3bb1a80af70bd05466.jpg diff --git a/docs/0.19.x/img/97b3ab2cc18a43b00c07a1cf6e118798.jpg b/docs/master/img/97b3ab2cc18a43b00c07a1cf6e118798.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/97b3ab2cc18a43b00c07a1cf6e118798.jpg rename to docs/master/img/97b3ab2cc18a43b00c07a1cf6e118798.jpg diff --git a/docs/0.19.x/img/97f4093251d6c6f6f7d0902a86a08dbe.jpg b/docs/master/img/97f4093251d6c6f6f7d0902a86a08dbe.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/97f4093251d6c6f6f7d0902a86a08dbe.jpg rename to docs/master/img/97f4093251d6c6f6f7d0902a86a08dbe.jpg diff --git a/docs/0.19.x/img/97f450040417800904df33c9702d2c66.jpg b/docs/master/img/97f450040417800904df33c9702d2c66.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/97f450040417800904df33c9702d2c66.jpg rename to docs/master/img/97f450040417800904df33c9702d2c66.jpg diff --git a/docs/0.19.x/img/9812effbd6ddac1053fd0b63ebe8c2fb.jpg b/docs/master/img/9812effbd6ddac1053fd0b63ebe8c2fb.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9812effbd6ddac1053fd0b63ebe8c2fb.jpg rename to docs/master/img/9812effbd6ddac1053fd0b63ebe8c2fb.jpg diff --git a/docs/0.19.x/img/983133e80141fbf289a10f379c11b34f.jpg b/docs/master/img/983133e80141fbf289a10f379c11b34f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/983133e80141fbf289a10f379c11b34f.jpg rename to docs/master/img/983133e80141fbf289a10f379c11b34f.jpg diff --git a/docs/0.19.x/img/9839512f63b7e5de021f13f7e6bd6b22.jpg b/docs/master/img/9839512f63b7e5de021f13f7e6bd6b22.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9839512f63b7e5de021f13f7e6bd6b22.jpg rename to docs/master/img/9839512f63b7e5de021f13f7e6bd6b22.jpg diff --git a/docs/0.19.x/img/987fc6b717a40e57a95fb79a8e809309.jpg b/docs/master/img/987fc6b717a40e57a95fb79a8e809309.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/987fc6b717a40e57a95fb79a8e809309.jpg rename to docs/master/img/987fc6b717a40e57a95fb79a8e809309.jpg diff --git a/docs/0.19.x/img/995e683eac95f8e8e65d96c6516858e7.jpg b/docs/master/img/995e683eac95f8e8e65d96c6516858e7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/995e683eac95f8e8e65d96c6516858e7.jpg rename to docs/master/img/995e683eac95f8e8e65d96c6516858e7.jpg diff --git a/docs/0.19.x/img/997e17f4d9f18abfb95e6c9f1f289098.jpg b/docs/master/img/997e17f4d9f18abfb95e6c9f1f289098.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/997e17f4d9f18abfb95e6c9f1f289098.jpg rename to docs/master/img/997e17f4d9f18abfb95e6c9f1f289098.jpg diff --git a/docs/0.19.x/img/9997b300f697e018f955724f7106ad09.jpg b/docs/master/img/9997b300f697e018f955724f7106ad09.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9997b300f697e018f955724f7106ad09.jpg rename to docs/master/img/9997b300f697e018f955724f7106ad09.jpg diff --git a/docs/0.19.x/img/99988260d9d836d14b2569c2fc921e81.jpg b/docs/master/img/99988260d9d836d14b2569c2fc921e81.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/99988260d9d836d14b2569c2fc921e81.jpg rename to docs/master/img/99988260d9d836d14b2569c2fc921e81.jpg diff --git a/docs/0.19.x/img/99d4804dc3d2ef82e10d91de99d0142a.jpg b/docs/master/img/99d4804dc3d2ef82e10d91de99d0142a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/99d4804dc3d2ef82e10d91de99d0142a.jpg rename to docs/master/img/99d4804dc3d2ef82e10d91de99d0142a.jpg diff --git a/docs/0.19.x/img/99dfcad081b3f6e1f4648a9f7d24f103.jpg b/docs/master/img/99dfcad081b3f6e1f4648a9f7d24f103.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/99dfcad081b3f6e1f4648a9f7d24f103.jpg rename to docs/master/img/99dfcad081b3f6e1f4648a9f7d24f103.jpg diff --git a/docs/0.19.x/img/99e96cb74c925ba51098fe6167e22c44.jpg b/docs/master/img/99e96cb74c925ba51098fe6167e22c44.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/99e96cb74c925ba51098fe6167e22c44.jpg rename to docs/master/img/99e96cb74c925ba51098fe6167e22c44.jpg diff --git a/docs/0.19.x/img/9a2b4cb70f12a0e7419ffde362e1bed4.jpg b/docs/master/img/9a2b4cb70f12a0e7419ffde362e1bed4.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9a2b4cb70f12a0e7419ffde362e1bed4.jpg rename to docs/master/img/9a2b4cb70f12a0e7419ffde362e1bed4.jpg diff --git a/docs/0.19.x/img/9a55689143b2e4d90adcdfe1f95b9ffd.jpg b/docs/master/img/9a55689143b2e4d90adcdfe1f95b9ffd.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9a55689143b2e4d90adcdfe1f95b9ffd.jpg rename to docs/master/img/9a55689143b2e4d90adcdfe1f95b9ffd.jpg diff --git a/docs/0.19.x/img/9a5f8912e7fe77be2acea88fd091a5d8.jpg b/docs/master/img/9a5f8912e7fe77be2acea88fd091a5d8.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9a5f8912e7fe77be2acea88fd091a5d8.jpg rename to docs/master/img/9a5f8912e7fe77be2acea88fd091a5d8.jpg diff --git a/docs/0.19.x/img/9ad9b5d15124615ced9c9721a8ef4d3b.jpg b/docs/master/img/9ad9b5d15124615ced9c9721a8ef4d3b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9ad9b5d15124615ced9c9721a8ef4d3b.jpg rename to docs/master/img/9ad9b5d15124615ced9c9721a8ef4d3b.jpg diff --git a/docs/0.19.x/img/9afe9de54aeed2a857e99cf6444ff0e5.jpg b/docs/master/img/9afe9de54aeed2a857e99cf6444ff0e5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9afe9de54aeed2a857e99cf6444ff0e5.jpg rename to docs/master/img/9afe9de54aeed2a857e99cf6444ff0e5.jpg diff --git a/docs/0.19.x/img/9b4b00422c0cec29f80a03fe1d772100.jpg b/docs/master/img/9b4b00422c0cec29f80a03fe1d772100.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9b4b00422c0cec29f80a03fe1d772100.jpg rename to docs/master/img/9b4b00422c0cec29f80a03fe1d772100.jpg diff --git a/docs/0.19.x/img/9b5fb6c6e0f320a3e8e0ba606d601c98.jpg b/docs/master/img/9b5fb6c6e0f320a3e8e0ba606d601c98.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9b5fb6c6e0f320a3e8e0ba606d601c98.jpg rename to docs/master/img/9b5fb6c6e0f320a3e8e0ba606d601c98.jpg diff --git a/docs/0.19.x/img/9b6c97851ffb568abc5688d5c9e81800.jpg b/docs/master/img/9b6c97851ffb568abc5688d5c9e81800.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9b6c97851ffb568abc5688d5c9e81800.jpg rename to docs/master/img/9b6c97851ffb568abc5688d5c9e81800.jpg diff --git a/docs/0.19.x/img/9b7a1b832e3f1e4ea340038115e6b00d.jpg b/docs/master/img/9b7a1b832e3f1e4ea340038115e6b00d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9b7a1b832e3f1e4ea340038115e6b00d.jpg rename to docs/master/img/9b7a1b832e3f1e4ea340038115e6b00d.jpg diff --git a/docs/0.19.x/img/9b85a5f7098321120773184b4673cbeb.jpg b/docs/master/img/9b85a5f7098321120773184b4673cbeb.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9b85a5f7098321120773184b4673cbeb.jpg rename to docs/master/img/9b85a5f7098321120773184b4673cbeb.jpg diff --git a/docs/0.19.x/img/9b9ee41d276ad49322856b95cb6c7e43.jpg b/docs/master/img/9b9ee41d276ad49322856b95cb6c7e43.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9b9ee41d276ad49322856b95cb6c7e43.jpg rename to docs/master/img/9b9ee41d276ad49322856b95cb6c7e43.jpg diff --git a/docs/0.19.x/img/9ca39b9e9aa5f1a4660e45f3c9b5ef7b.jpg b/docs/master/img/9ca39b9e9aa5f1a4660e45f3c9b5ef7b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9ca39b9e9aa5f1a4660e45f3c9b5ef7b.jpg rename to docs/master/img/9ca39b9e9aa5f1a4660e45f3c9b5ef7b.jpg diff --git a/docs/0.19.x/img/9cb7de99579cbd4664159c8a06417d13.jpg b/docs/master/img/9cb7de99579cbd4664159c8a06417d13.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9cb7de99579cbd4664159c8a06417d13.jpg rename to docs/master/img/9cb7de99579cbd4664159c8a06417d13.jpg diff --git a/docs/0.19.x/img/9d2e3befcfa08a4b6a7cfed8dadbd5c0.jpg b/docs/master/img/9d2e3befcfa08a4b6a7cfed8dadbd5c0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9d2e3befcfa08a4b6a7cfed8dadbd5c0.jpg rename to docs/master/img/9d2e3befcfa08a4b6a7cfed8dadbd5c0.jpg diff --git a/docs/0.19.x/img/9e49f9c5d629711b032b027324d531b9.jpg b/docs/master/img/9e49f9c5d629711b032b027324d531b9.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9e49f9c5d629711b032b027324d531b9.jpg rename to docs/master/img/9e49f9c5d629711b032b027324d531b9.jpg diff --git a/docs/0.19.x/img/9ef5bf146675caa32b298d7e8318fc43.jpg b/docs/master/img/9ef5bf146675caa32b298d7e8318fc43.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9ef5bf146675caa32b298d7e8318fc43.jpg rename to docs/master/img/9ef5bf146675caa32b298d7e8318fc43.jpg diff --git a/docs/0.19.x/img/9f2872d8b84b398d8dd6408fd880d3b4.jpg b/docs/master/img/9f2872d8b84b398d8dd6408fd880d3b4.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9f2872d8b84b398d8dd6408fd880d3b4.jpg rename to docs/master/img/9f2872d8b84b398d8dd6408fd880d3b4.jpg diff --git a/docs/0.19.x/img/9f4178a540cbe2b9f093702d71bafbe5.jpg b/docs/master/img/9f4178a540cbe2b9f093702d71bafbe5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9f4178a540cbe2b9f093702d71bafbe5.jpg rename to docs/master/img/9f4178a540cbe2b9f093702d71bafbe5.jpg diff --git a/docs/0.19.x/img/9fd83615429a9be9e5698d35bec8642a.jpg b/docs/master/img/9fd83615429a9be9e5698d35bec8642a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/9fd83615429a9be9e5698d35bec8642a.jpg rename to docs/master/img/9fd83615429a9be9e5698d35bec8642a.jpg diff --git a/docs/0.19.x/img/a036c2c31320cfaea7959236c1b81d4c.jpg b/docs/master/img/a036c2c31320cfaea7959236c1b81d4c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a036c2c31320cfaea7959236c1b81d4c.jpg rename to docs/master/img/a036c2c31320cfaea7959236c1b81d4c.jpg diff --git a/docs/0.19.x/img/a060693e746caf8e0ff030ed5411520f.jpg b/docs/master/img/a060693e746caf8e0ff030ed5411520f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a060693e746caf8e0ff030ed5411520f.jpg rename to docs/master/img/a060693e746caf8e0ff030ed5411520f.jpg diff --git a/docs/0.19.x/img/a0bb00db4979d538e9ca2f0a8b423286.jpg b/docs/master/img/a0bb00db4979d538e9ca2f0a8b423286.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a0bb00db4979d538e9ca2f0a8b423286.jpg rename to docs/master/img/a0bb00db4979d538e9ca2f0a8b423286.jpg diff --git a/docs/0.19.x/img/a0c2e3fe9c6a7a8416435260aa55dc4a.jpg b/docs/master/img/a0c2e3fe9c6a7a8416435260aa55dc4a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a0c2e3fe9c6a7a8416435260aa55dc4a.jpg rename to docs/master/img/a0c2e3fe9c6a7a8416435260aa55dc4a.jpg diff --git a/docs/0.19.x/img/a0fc07cc08abaf336142bf23fb4f5cc2.jpg b/docs/master/img/a0fc07cc08abaf336142bf23fb4f5cc2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a0fc07cc08abaf336142bf23fb4f5cc2.jpg rename to docs/master/img/a0fc07cc08abaf336142bf23fb4f5cc2.jpg diff --git a/docs/0.19.x/img/a1670c1fcb5b7ad10830f43812ed50da.jpg b/docs/master/img/a1670c1fcb5b7ad10830f43812ed50da.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a1670c1fcb5b7ad10830f43812ed50da.jpg rename to docs/master/img/a1670c1fcb5b7ad10830f43812ed50da.jpg diff --git a/docs/0.19.x/img/a19f2294e2649252ad2b5766d295e75e.jpg b/docs/master/img/a19f2294e2649252ad2b5766d295e75e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a19f2294e2649252ad2b5766d295e75e.jpg rename to docs/master/img/a19f2294e2649252ad2b5766d295e75e.jpg diff --git a/docs/0.19.x/img/a1bd06d03e764db224f0e10b4f024bdd.jpg b/docs/master/img/a1bd06d03e764db224f0e10b4f024bdd.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a1bd06d03e764db224f0e10b4f024bdd.jpg rename to docs/master/img/a1bd06d03e764db224f0e10b4f024bdd.jpg diff --git a/docs/0.19.x/img/a201561ab545f4fd9cba5a2e0eae9a94.jpg b/docs/master/img/a201561ab545f4fd9cba5a2e0eae9a94.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a201561ab545f4fd9cba5a2e0eae9a94.jpg rename to docs/master/img/a201561ab545f4fd9cba5a2e0eae9a94.jpg diff --git a/docs/0.19.x/img/a243fb2cabe46c32a3a66214f514d623.jpg b/docs/master/img/a243fb2cabe46c32a3a66214f514d623.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a243fb2cabe46c32a3a66214f514d623.jpg rename to docs/master/img/a243fb2cabe46c32a3a66214f514d623.jpg diff --git a/docs/0.19.x/img/a24e299927ed136dd98d6c87904c973d.jpg b/docs/master/img/a24e299927ed136dd98d6c87904c973d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a24e299927ed136dd98d6c87904c973d.jpg rename to docs/master/img/a24e299927ed136dd98d6c87904c973d.jpg diff --git a/docs/0.19.x/img/a25320a2e009abd4269f291f85062a5d.jpg b/docs/master/img/a25320a2e009abd4269f291f85062a5d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a25320a2e009abd4269f291f85062a5d.jpg rename to docs/master/img/a25320a2e009abd4269f291f85062a5d.jpg diff --git a/docs/0.19.x/img/a25ab5d7faac5be22a6d242286376161.jpg b/docs/master/img/a25ab5d7faac5be22a6d242286376161.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a25ab5d7faac5be22a6d242286376161.jpg rename to docs/master/img/a25ab5d7faac5be22a6d242286376161.jpg diff --git a/docs/0.19.x/img/a35122280170c396ab3c9d8fa3b62446.jpg b/docs/master/img/a35122280170c396ab3c9d8fa3b62446.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a35122280170c396ab3c9d8fa3b62446.jpg rename to docs/master/img/a35122280170c396ab3c9d8fa3b62446.jpg diff --git a/docs/0.19.x/img/a44a7c045f2217894a894c482861387a.jpg b/docs/master/img/a44a7c045f2217894a894c482861387a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a44a7c045f2217894a894c482861387a.jpg rename to docs/master/img/a44a7c045f2217894a894c482861387a.jpg diff --git a/docs/0.19.x/img/a4775baaa990a4fbffcfc2688e3b5578.jpg b/docs/master/img/a4775baaa990a4fbffcfc2688e3b5578.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a4775baaa990a4fbffcfc2688e3b5578.jpg rename to docs/master/img/a4775baaa990a4fbffcfc2688e3b5578.jpg diff --git a/docs/0.19.x/img/a4a20739f22e7059a927ba615ec373da.jpg b/docs/master/img/a4a20739f22e7059a927ba615ec373da.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a4a20739f22e7059a927ba615ec373da.jpg rename to docs/master/img/a4a20739f22e7059a927ba615ec373da.jpg diff --git a/docs/0.19.x/img/a4dd5119f3eeb13b99180aab64917975.jpg b/docs/master/img/a4dd5119f3eeb13b99180aab64917975.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a4dd5119f3eeb13b99180aab64917975.jpg rename to docs/master/img/a4dd5119f3eeb13b99180aab64917975.jpg diff --git a/docs/0.19.x/img/a51f44dfa9b1942326c669c5ffe3f9f6.jpg b/docs/master/img/a51f44dfa9b1942326c669c5ffe3f9f6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a51f44dfa9b1942326c669c5ffe3f9f6.jpg rename to docs/master/img/a51f44dfa9b1942326c669c5ffe3f9f6.jpg diff --git a/docs/0.19.x/img/a539f6901c50549f8d30f6d7f6f3e177.jpg b/docs/master/img/a539f6901c50549f8d30f6d7f6f3e177.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a539f6901c50549f8d30f6d7f6f3e177.jpg rename to docs/master/img/a539f6901c50549f8d30f6d7f6f3e177.jpg diff --git a/docs/0.19.x/img/a561362ff63affeb799b9d33423235a3.jpg b/docs/master/img/a561362ff63affeb799b9d33423235a3.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a561362ff63affeb799b9d33423235a3.jpg rename to docs/master/img/a561362ff63affeb799b9d33423235a3.jpg diff --git a/docs/0.19.x/img/a6334506478d6feb4025038294ccfa00.jpg b/docs/master/img/a6334506478d6feb4025038294ccfa00.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a6334506478d6feb4025038294ccfa00.jpg rename to docs/master/img/a6334506478d6feb4025038294ccfa00.jpg diff --git a/docs/0.19.x/img/a6509a4f7b1838eb6d76d30036a00ffd.jpg b/docs/master/img/a6509a4f7b1838eb6d76d30036a00ffd.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a6509a4f7b1838eb6d76d30036a00ffd.jpg rename to docs/master/img/a6509a4f7b1838eb6d76d30036a00ffd.jpg diff --git a/docs/0.19.x/img/a6dba4aa006d4689de18a4de5acaa949.jpg b/docs/master/img/a6dba4aa006d4689de18a4de5acaa949.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a6dba4aa006d4689de18a4de5acaa949.jpg rename to docs/master/img/a6dba4aa006d4689de18a4de5acaa949.jpg diff --git a/docs/0.19.x/img/a70da26e29baa95b2f65f3cbc2e5fbfa.jpg b/docs/master/img/a70da26e29baa95b2f65f3cbc2e5fbfa.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a70da26e29baa95b2f65f3cbc2e5fbfa.jpg rename to docs/master/img/a70da26e29baa95b2f65f3cbc2e5fbfa.jpg diff --git a/docs/0.19.x/img/a71a1d9e35b09d284da476b2175edf6f.jpg b/docs/master/img/a71a1d9e35b09d284da476b2175edf6f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a71a1d9e35b09d284da476b2175edf6f.jpg rename to docs/master/img/a71a1d9e35b09d284da476b2175edf6f.jpg diff --git a/docs/0.19.x/img/a8e210a94f6eac6c32bc219dbc049288.jpg b/docs/master/img/a8e210a94f6eac6c32bc219dbc049288.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a8e210a94f6eac6c32bc219dbc049288.jpg rename to docs/master/img/a8e210a94f6eac6c32bc219dbc049288.jpg diff --git a/docs/0.19.x/img/a8f0b97723e99a7ddae947c83f43ff45.jpg b/docs/master/img/a8f0b97723e99a7ddae947c83f43ff45.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a8f0b97723e99a7ddae947c83f43ff45.jpg rename to docs/master/img/a8f0b97723e99a7ddae947c83f43ff45.jpg diff --git a/docs/0.19.x/img/a921f24886997e2a5b94e2abb46d8402.jpg b/docs/master/img/a921f24886997e2a5b94e2abb46d8402.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a921f24886997e2a5b94e2abb46d8402.jpg rename to docs/master/img/a921f24886997e2a5b94e2abb46d8402.jpg diff --git a/docs/0.19.x/img/a960dd9452e5e5da7b211f6fdc120a0d.jpg b/docs/master/img/a960dd9452e5e5da7b211f6fdc120a0d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a960dd9452e5e5da7b211f6fdc120a0d.jpg rename to docs/master/img/a960dd9452e5e5da7b211f6fdc120a0d.jpg diff --git a/docs/0.19.x/img/a98f0fb22381bfc1d14fc1e3f7e737e5.jpg b/docs/master/img/a98f0fb22381bfc1d14fc1e3f7e737e5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a98f0fb22381bfc1d14fc1e3f7e737e5.jpg rename to docs/master/img/a98f0fb22381bfc1d14fc1e3f7e737e5.jpg diff --git a/docs/0.19.x/img/a9cd44019704ddd9877089f25d6a229e.jpg b/docs/master/img/a9cd44019704ddd9877089f25d6a229e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a9cd44019704ddd9877089f25d6a229e.jpg rename to docs/master/img/a9cd44019704ddd9877089f25d6a229e.jpg diff --git a/docs/0.19.x/img/a9e58e92cdae50e285a704a6d1ccbafc.jpg b/docs/master/img/a9e58e92cdae50e285a704a6d1ccbafc.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/a9e58e92cdae50e285a704a6d1ccbafc.jpg rename to docs/master/img/a9e58e92cdae50e285a704a6d1ccbafc.jpg diff --git a/docs/0.19.x/img/aa0c61cd560f0fdab4fe10c7b12e5082.jpg b/docs/master/img/aa0c61cd560f0fdab4fe10c7b12e5082.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/aa0c61cd560f0fdab4fe10c7b12e5082.jpg rename to docs/master/img/aa0c61cd560f0fdab4fe10c7b12e5082.jpg diff --git a/docs/0.19.x/img/aa5e9ace265afd9e1f881564a1923a17.jpg b/docs/master/img/aa5e9ace265afd9e1f881564a1923a17.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/aa5e9ace265afd9e1f881564a1923a17.jpg rename to docs/master/img/aa5e9ace265afd9e1f881564a1923a17.jpg diff --git a/docs/0.19.x/img/aaa84c285eb96ed446fd34be4b51bbec.jpg b/docs/master/img/aaa84c285eb96ed446fd34be4b51bbec.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/aaa84c285eb96ed446fd34be4b51bbec.jpg rename to docs/master/img/aaa84c285eb96ed446fd34be4b51bbec.jpg diff --git a/docs/0.19.x/img/ab2096ee4087e644cca732d92d241edf.jpg b/docs/master/img/ab2096ee4087e644cca732d92d241edf.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ab2096ee4087e644cca732d92d241edf.jpg rename to docs/master/img/ab2096ee4087e644cca732d92d241edf.jpg diff --git a/docs/0.19.x/img/ab81f225a7e452d651b4888d437d07d2.jpg b/docs/master/img/ab81f225a7e452d651b4888d437d07d2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ab81f225a7e452d651b4888d437d07d2.jpg rename to docs/master/img/ab81f225a7e452d651b4888d437d07d2.jpg diff --git a/docs/0.19.x/img/aba080a369ca542a90a264a04dd518c5.jpg b/docs/master/img/aba080a369ca542a90a264a04dd518c5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/aba080a369ca542a90a264a04dd518c5.jpg rename to docs/master/img/aba080a369ca542a90a264a04dd518c5.jpg diff --git a/docs/0.19.x/img/aba64ff85b1f99c5d1c4f8e1ace15f89.jpg b/docs/master/img/aba64ff85b1f99c5d1c4f8e1ace15f89.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/aba64ff85b1f99c5d1c4f8e1ace15f89.jpg rename to docs/master/img/aba64ff85b1f99c5d1c4f8e1ace15f89.jpg diff --git a/docs/0.19.x/img/abd232bd41a9d1b51021b788e2a82dd9.jpg b/docs/master/img/abd232bd41a9d1b51021b788e2a82dd9.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/abd232bd41a9d1b51021b788e2a82dd9.jpg rename to docs/master/img/abd232bd41a9d1b51021b788e2a82dd9.jpg diff --git a/docs/0.19.x/img/abed66e83395b34fe3c020cfcab3dce9.jpg b/docs/master/img/abed66e83395b34fe3c020cfcab3dce9.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/abed66e83395b34fe3c020cfcab3dce9.jpg rename to docs/master/img/abed66e83395b34fe3c020cfcab3dce9.jpg diff --git a/docs/0.19.x/img/abee3460000f8532d0df4e1b1d1928e8.jpg b/docs/master/img/abee3460000f8532d0df4e1b1d1928e8.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/abee3460000f8532d0df4e1b1d1928e8.jpg rename to docs/master/img/abee3460000f8532d0df4e1b1d1928e8.jpg diff --git a/docs/0.19.x/img/ac11972df0ad68aba63757a4ba1ee02b.jpg b/docs/master/img/ac11972df0ad68aba63757a4ba1ee02b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ac11972df0ad68aba63757a4ba1ee02b.jpg rename to docs/master/img/ac11972df0ad68aba63757a4ba1ee02b.jpg diff --git a/docs/0.19.x/img/ac23b915eb44e4fa668b8d56785e2c20.jpg b/docs/master/img/ac23b915eb44e4fa668b8d56785e2c20.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ac23b915eb44e4fa668b8d56785e2c20.jpg rename to docs/master/img/ac23b915eb44e4fa668b8d56785e2c20.jpg diff --git a/docs/0.19.x/img/ac9afe17947eb296e1701877b220779d.jpg b/docs/master/img/ac9afe17947eb296e1701877b220779d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ac9afe17947eb296e1701877b220779d.jpg rename to docs/master/img/ac9afe17947eb296e1701877b220779d.jpg diff --git a/docs/0.19.x/img/accc37ed7ec2ed38ec70c71f5d6aeebe.jpg b/docs/master/img/accc37ed7ec2ed38ec70c71f5d6aeebe.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/accc37ed7ec2ed38ec70c71f5d6aeebe.jpg rename to docs/master/img/accc37ed7ec2ed38ec70c71f5d6aeebe.jpg diff --git a/docs/0.19.x/img/ad8371d06b000849fa4e2fbd6b386c7d.jpg b/docs/master/img/ad8371d06b000849fa4e2fbd6b386c7d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ad8371d06b000849fa4e2fbd6b386c7d.jpg rename to docs/master/img/ad8371d06b000849fa4e2fbd6b386c7d.jpg diff --git a/docs/0.19.x/img/ad854ab6b0056f9b521d823a98548d3f.jpg b/docs/master/img/ad854ab6b0056f9b521d823a98548d3f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ad854ab6b0056f9b521d823a98548d3f.jpg rename to docs/master/img/ad854ab6b0056f9b521d823a98548d3f.jpg diff --git a/docs/0.19.x/img/ad946e6478bb10e60ac9663066f26ee8.jpg b/docs/master/img/ad946e6478bb10e60ac9663066f26ee8.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ad946e6478bb10e60ac9663066f26ee8.jpg rename to docs/master/img/ad946e6478bb10e60ac9663066f26ee8.jpg diff --git a/docs/0.19.x/img/ad9ce0e67dc83e5380738d3193819195.jpg b/docs/master/img/ad9ce0e67dc83e5380738d3193819195.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ad9ce0e67dc83e5380738d3193819195.jpg rename to docs/master/img/ad9ce0e67dc83e5380738d3193819195.jpg diff --git a/docs/0.19.x/img/adc60d285d73d89dac7cb76f51617e64.jpg b/docs/master/img/adc60d285d73d89dac7cb76f51617e64.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/adc60d285d73d89dac7cb76f51617e64.jpg rename to docs/master/img/adc60d285d73d89dac7cb76f51617e64.jpg diff --git a/docs/0.19.x/img/adf83056bc2bd05628e24c40cb728b3d.jpg b/docs/master/img/adf83056bc2bd05628e24c40cb728b3d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/adf83056bc2bd05628e24c40cb728b3d.jpg rename to docs/master/img/adf83056bc2bd05628e24c40cb728b3d.jpg diff --git a/docs/0.19.x/img/ae1e2652c240448ae994f4b236379d6d.jpg b/docs/master/img/ae1e2652c240448ae994f4b236379d6d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ae1e2652c240448ae994f4b236379d6d.jpg rename to docs/master/img/ae1e2652c240448ae994f4b236379d6d.jpg diff --git a/docs/0.19.x/img/ae484baf10384efcf4d993631f4641e7.jpg b/docs/master/img/ae484baf10384efcf4d993631f4641e7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ae484baf10384efcf4d993631f4641e7.jpg rename to docs/master/img/ae484baf10384efcf4d993631f4641e7.jpg diff --git a/docs/0.19.x/img/ae82b9adb507cb166d4721c004ae5f40.jpg b/docs/master/img/ae82b9adb507cb166d4721c004ae5f40.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ae82b9adb507cb166d4721c004ae5f40.jpg rename to docs/master/img/ae82b9adb507cb166d4721c004ae5f40.jpg diff --git a/docs/0.19.x/img/aee8fc1c253da16851991ef3ceff663b.jpg b/docs/master/img/aee8fc1c253da16851991ef3ceff663b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/aee8fc1c253da16851991ef3ceff663b.jpg rename to docs/master/img/aee8fc1c253da16851991ef3ceff663b.jpg diff --git a/docs/0.19.x/img/af78ae4aadd0f0961cf4d9564897b1ff.jpg b/docs/master/img/af78ae4aadd0f0961cf4d9564897b1ff.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/af78ae4aadd0f0961cf4d9564897b1ff.jpg rename to docs/master/img/af78ae4aadd0f0961cf4d9564897b1ff.jpg diff --git a/docs/0.19.x/img/af7b81123e6cdf0b42acec802041beef.jpg b/docs/master/img/af7b81123e6cdf0b42acec802041beef.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/af7b81123e6cdf0b42acec802041beef.jpg rename to docs/master/img/af7b81123e6cdf0b42acec802041beef.jpg diff --git a/docs/0.19.x/img/af875bce0483bd18603c4d247e6a3745.jpg b/docs/master/img/af875bce0483bd18603c4d247e6a3745.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/af875bce0483bd18603c4d247e6a3745.jpg rename to docs/master/img/af875bce0483bd18603c4d247e6a3745.jpg diff --git a/docs/0.19.x/img/afcad7956ba0a3a4a6771ee9810280c2.jpg b/docs/master/img/afcad7956ba0a3a4a6771ee9810280c2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/afcad7956ba0a3a4a6771ee9810280c2.jpg rename to docs/master/img/afcad7956ba0a3a4a6771ee9810280c2.jpg diff --git a/docs/0.19.x/img/afee107e82d448558078835ad82086e5.jpg b/docs/master/img/afee107e82d448558078835ad82086e5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/afee107e82d448558078835ad82086e5.jpg rename to docs/master/img/afee107e82d448558078835ad82086e5.jpg diff --git a/docs/0.19.x/img/algo.jpg b/docs/master/img/algo.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/algo.jpg rename to docs/master/img/algo.jpg diff --git a/docs/0.19.x/img/b003858334d1ad594207911e84219151.jpg b/docs/master/img/b003858334d1ad594207911e84219151.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b003858334d1ad594207911e84219151.jpg rename to docs/master/img/b003858334d1ad594207911e84219151.jpg diff --git a/docs/0.19.x/img/b019b19dda07f07208f1bd2576ebad30.jpg b/docs/master/img/b019b19dda07f07208f1bd2576ebad30.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b019b19dda07f07208f1bd2576ebad30.jpg rename to docs/master/img/b019b19dda07f07208f1bd2576ebad30.jpg diff --git a/docs/0.19.x/img/b0471e4ce10b5565385c611ba381fa0d.jpg b/docs/master/img/b0471e4ce10b5565385c611ba381fa0d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b0471e4ce10b5565385c611ba381fa0d.jpg rename to docs/master/img/b0471e4ce10b5565385c611ba381fa0d.jpg diff --git a/docs/0.19.x/img/b10afb1bc4c68539a74de379254c7655.jpg b/docs/master/img/b10afb1bc4c68539a74de379254c7655.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b10afb1bc4c68539a74de379254c7655.jpg rename to docs/master/img/b10afb1bc4c68539a74de379254c7655.jpg diff --git a/docs/0.19.x/img/b146555411b22bcf0ad73d4720455038.jpg b/docs/master/img/b146555411b22bcf0ad73d4720455038.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b146555411b22bcf0ad73d4720455038.jpg rename to docs/master/img/b146555411b22bcf0ad73d4720455038.jpg diff --git a/docs/0.19.x/img/b25f834ac79280901c702fb1449740a3.jpg b/docs/master/img/b25f834ac79280901c702fb1449740a3.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b25f834ac79280901c702fb1449740a3.jpg rename to docs/master/img/b25f834ac79280901c702fb1449740a3.jpg diff --git a/docs/0.19.x/img/b2996ad4866e8a26c7ba42c0229385af.jpg b/docs/master/img/b2996ad4866e8a26c7ba42c0229385af.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b2996ad4866e8a26c7ba42c0229385af.jpg rename to docs/master/img/b2996ad4866e8a26c7ba42c0229385af.jpg diff --git a/docs/0.19.x/img/b29b59eca5c581c3f54d92c1671f2b2e.jpg b/docs/master/img/b29b59eca5c581c3f54d92c1671f2b2e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b29b59eca5c581c3f54d92c1671f2b2e.jpg rename to docs/master/img/b29b59eca5c581c3f54d92c1671f2b2e.jpg diff --git a/docs/0.19.x/img/b2b4edffe444aa936ad59a769317f692.jpg b/docs/master/img/b2b4edffe444aa936ad59a769317f692.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b2b4edffe444aa936ad59a769317f692.jpg rename to docs/master/img/b2b4edffe444aa936ad59a769317f692.jpg diff --git a/docs/0.19.x/img/b2ea359213f8f5b01eead0821e29e856.jpg b/docs/master/img/b2ea359213f8f5b01eead0821e29e856.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b2ea359213f8f5b01eead0821e29e856.jpg rename to docs/master/img/b2ea359213f8f5b01eead0821e29e856.jpg diff --git a/docs/0.19.x/img/b3206aa7b52a9c0918727730873d1363.jpg b/docs/master/img/b3206aa7b52a9c0918727730873d1363.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b3206aa7b52a9c0918727730873d1363.jpg rename to docs/master/img/b3206aa7b52a9c0918727730873d1363.jpg diff --git a/docs/0.19.x/img/b3348b4a0dc8e97bcefc5c7489b006db.jpg b/docs/master/img/b3348b4a0dc8e97bcefc5c7489b006db.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b3348b4a0dc8e97bcefc5c7489b006db.jpg rename to docs/master/img/b3348b4a0dc8e97bcefc5c7489b006db.jpg diff --git a/docs/0.19.x/img/b335c88114c4fec7e72304006810c82c.jpg b/docs/master/img/b335c88114c4fec7e72304006810c82c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b335c88114c4fec7e72304006810c82c.jpg rename to docs/master/img/b335c88114c4fec7e72304006810c82c.jpg diff --git a/docs/0.19.x/img/b36270d22513e9645235b5ad4c3cd7dd.jpg b/docs/master/img/b36270d22513e9645235b5ad4c3cd7dd.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b36270d22513e9645235b5ad4c3cd7dd.jpg rename to docs/master/img/b36270d22513e9645235b5ad4c3cd7dd.jpg diff --git a/docs/0.19.x/img/b382a1d99ddfadf17b35d32b0b156b5b.jpg b/docs/master/img/b382a1d99ddfadf17b35d32b0b156b5b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b382a1d99ddfadf17b35d32b0b156b5b.jpg rename to docs/master/img/b382a1d99ddfadf17b35d32b0b156b5b.jpg diff --git a/docs/0.19.x/img/b38a0de3f98aa9b8837354765bc9e3f6.jpg b/docs/master/img/b38a0de3f98aa9b8837354765bc9e3f6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b38a0de3f98aa9b8837354765bc9e3f6.jpg rename to docs/master/img/b38a0de3f98aa9b8837354765bc9e3f6.jpg diff --git a/docs/0.19.x/img/b38aca53acb7894dca026d3325f61a00.jpg b/docs/master/img/b38aca53acb7894dca026d3325f61a00.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b38aca53acb7894dca026d3325f61a00.jpg rename to docs/master/img/b38aca53acb7894dca026d3325f61a00.jpg diff --git a/docs/0.19.x/img/b3ca25c4cc9cb42878f6fc39525b7446.jpg b/docs/master/img/b3ca25c4cc9cb42878f6fc39525b7446.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b3ca25c4cc9cb42878f6fc39525b7446.jpg rename to docs/master/img/b3ca25c4cc9cb42878f6fc39525b7446.jpg diff --git a/docs/0.19.x/img/b3ea6ae2442e72f261f037571e580979.jpg b/docs/master/img/b3ea6ae2442e72f261f037571e580979.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b3ea6ae2442e72f261f037571e580979.jpg rename to docs/master/img/b3ea6ae2442e72f261f037571e580979.jpg diff --git a/docs/0.19.x/img/b3edbb24837112f795a22e3574457416.jpg b/docs/master/img/b3edbb24837112f795a22e3574457416.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b3edbb24837112f795a22e3574457416.jpg rename to docs/master/img/b3edbb24837112f795a22e3574457416.jpg diff --git a/docs/0.19.x/img/b47a023e9edbe1976993ce76c7dbc286.jpg b/docs/master/img/b47a023e9edbe1976993ce76c7dbc286.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b47a023e9edbe1976993ce76c7dbc286.jpg rename to docs/master/img/b47a023e9edbe1976993ce76c7dbc286.jpg diff --git a/docs/0.19.x/img/b4e752f6314fe52f8c066964d26145a8.jpg b/docs/master/img/b4e752f6314fe52f8c066964d26145a8.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b4e752f6314fe52f8c066964d26145a8.jpg rename to docs/master/img/b4e752f6314fe52f8c066964d26145a8.jpg diff --git a/docs/0.19.x/img/b6305894a6f400569f3ff2b899370b54.jpg b/docs/master/img/b6305894a6f400569f3ff2b899370b54.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b6305894a6f400569f3ff2b899370b54.jpg rename to docs/master/img/b6305894a6f400569f3ff2b899370b54.jpg diff --git a/docs/0.19.x/img/b67ce2997477f658a6a39026c01e07c4.jpg b/docs/master/img/b67ce2997477f658a6a39026c01e07c4.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b67ce2997477f658a6a39026c01e07c4.jpg rename to docs/master/img/b67ce2997477f658a6a39026c01e07c4.jpg diff --git a/docs/0.19.x/img/b68e95efa751d5e14b6517cff553419b.jpg b/docs/master/img/b68e95efa751d5e14b6517cff553419b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b68e95efa751d5e14b6517cff553419b.jpg rename to docs/master/img/b68e95efa751d5e14b6517cff553419b.jpg diff --git a/docs/0.19.x/img/b6a1f98637a242005be08bb10541a524.jpg b/docs/master/img/b6a1f98637a242005be08bb10541a524.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b6a1f98637a242005be08bb10541a524.jpg rename to docs/master/img/b6a1f98637a242005be08bb10541a524.jpg diff --git a/docs/0.19.x/img/b6cea83c1722562f844aebd98fb3f59d.jpg b/docs/master/img/b6cea83c1722562f844aebd98fb3f59d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b6cea83c1722562f844aebd98fb3f59d.jpg rename to docs/master/img/b6cea83c1722562f844aebd98fb3f59d.jpg diff --git a/docs/0.19.x/img/b714492d7f23932738745c4ed05fe7ae.jpg b/docs/master/img/b714492d7f23932738745c4ed05fe7ae.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b714492d7f23932738745c4ed05fe7ae.jpg rename to docs/master/img/b714492d7f23932738745c4ed05fe7ae.jpg diff --git a/docs/0.19.x/img/b74decc4f9ee591a92a5281d0187f05a.jpg b/docs/master/img/b74decc4f9ee591a92a5281d0187f05a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b74decc4f9ee591a92a5281d0187f05a.jpg rename to docs/master/img/b74decc4f9ee591a92a5281d0187f05a.jpg diff --git a/docs/0.19.x/img/b7a68272ceb9cb09f48103e44f469470.jpg b/docs/master/img/b7a68272ceb9cb09f48103e44f469470.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b7a68272ceb9cb09f48103e44f469470.jpg rename to docs/master/img/b7a68272ceb9cb09f48103e44f469470.jpg diff --git a/docs/0.19.x/img/b8c91e64943f8e5e311a51bc901a2c7e.jpg b/docs/master/img/b8c91e64943f8e5e311a51bc901a2c7e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b8c91e64943f8e5e311a51bc901a2c7e.jpg rename to docs/master/img/b8c91e64943f8e5e311a51bc901a2c7e.jpg diff --git a/docs/0.19.x/img/b8d08f24f6c909a25190cb38127ec809.jpg b/docs/master/img/b8d08f24f6c909a25190cb38127ec809.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b8d08f24f6c909a25190cb38127ec809.jpg rename to docs/master/img/b8d08f24f6c909a25190cb38127ec809.jpg diff --git a/docs/0.19.x/img/b8e446d22ed902423187ead2d67af58c.jpg b/docs/master/img/b8e446d22ed902423187ead2d67af58c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b8e446d22ed902423187ead2d67af58c.jpg rename to docs/master/img/b8e446d22ed902423187ead2d67af58c.jpg diff --git a/docs/0.19.x/img/b91e4507d9fd7068b02f689d697f8714.jpg b/docs/master/img/b91e4507d9fd7068b02f689d697f8714.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b91e4507d9fd7068b02f689d697f8714.jpg rename to docs/master/img/b91e4507d9fd7068b02f689d697f8714.jpg diff --git a/docs/0.19.x/img/b94b3a3837e7741f704e3b9b23ba0880.jpg b/docs/master/img/b94b3a3837e7741f704e3b9b23ba0880.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/b94b3a3837e7741f704e3b9b23ba0880.jpg rename to docs/master/img/b94b3a3837e7741f704e3b9b23ba0880.jpg diff --git a/docs/0.19.x/img/ba3c1f82d7a66df41015761326619e26.jpg b/docs/master/img/ba3c1f82d7a66df41015761326619e26.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ba3c1f82d7a66df41015761326619e26.jpg rename to docs/master/img/ba3c1f82d7a66df41015761326619e26.jpg diff --git a/docs/0.19.x/img/ba5932f77767fa05771311d1f926e3ee.jpg b/docs/master/img/ba5932f77767fa05771311d1f926e3ee.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ba5932f77767fa05771311d1f926e3ee.jpg rename to docs/master/img/ba5932f77767fa05771311d1f926e3ee.jpg diff --git a/docs/0.19.x/img/ba90d4193a98b9023d3d8526a20fe1ac.jpg b/docs/master/img/ba90d4193a98b9023d3d8526a20fe1ac.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ba90d4193a98b9023d3d8526a20fe1ac.jpg rename to docs/master/img/ba90d4193a98b9023d3d8526a20fe1ac.jpg diff --git a/docs/0.19.x/img/bafb2b9486fa2f91dcc020843770eef6.jpg b/docs/master/img/bafb2b9486fa2f91dcc020843770eef6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/bafb2b9486fa2f91dcc020843770eef6.jpg rename to docs/master/img/bafb2b9486fa2f91dcc020843770eef6.jpg diff --git a/docs/0.21.3/img/bayes01.png b/docs/master/img/bayes01.png similarity index 100% rename from docs/0.21.3/img/bayes01.png rename to docs/master/img/bayes01.png diff --git a/docs/0.21.3/img/bayes02.png b/docs/master/img/bayes02.png similarity index 100% rename from docs/0.21.3/img/bayes02.png rename to docs/master/img/bayes02.png diff --git a/docs/0.21.3/img/bayse03.png b/docs/master/img/bayse03.png similarity index 100% rename from docs/0.21.3/img/bayse03.png rename to docs/master/img/bayse03.png diff --git a/docs/0.21.3/img/bayse04.png b/docs/master/img/bayse04.png similarity index 100% rename from docs/0.21.3/img/bayse04.png rename to docs/master/img/bayse04.png diff --git a/docs/0.21.3/img/bayse05.png b/docs/master/img/bayse05.png similarity index 100% rename from docs/0.21.3/img/bayse05.png rename to docs/master/img/bayse05.png diff --git a/docs/0.19.x/img/bb0a3257b0276e1ade46d7fa84c49ad0.jpg b/docs/master/img/bb0a3257b0276e1ade46d7fa84c49ad0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/bb0a3257b0276e1ade46d7fa84c49ad0.jpg rename to docs/master/img/bb0a3257b0276e1ade46d7fa84c49ad0.jpg diff --git a/docs/0.19.x/img/bbdbd3f496f907578ff01cc798adde74.jpg b/docs/master/img/bbdbd3f496f907578ff01cc798adde74.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/bbdbd3f496f907578ff01cc798adde74.jpg rename to docs/master/img/bbdbd3f496f907578ff01cc798adde74.jpg diff --git a/docs/0.19.x/img/bc08d23c9d8a06975f20eb514faae9ef.jpg b/docs/master/img/bc08d23c9d8a06975f20eb514faae9ef.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/bc08d23c9d8a06975f20eb514faae9ef.jpg rename to docs/master/img/bc08d23c9d8a06975f20eb514faae9ef.jpg diff --git a/docs/0.19.x/img/bc0cfc8c8661055fd60ca8e90b21d1dd.jpg b/docs/master/img/bc0cfc8c8661055fd60ca8e90b21d1dd.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/bc0cfc8c8661055fd60ca8e90b21d1dd.jpg rename to docs/master/img/bc0cfc8c8661055fd60ca8e90b21d1dd.jpg diff --git a/docs/0.19.x/img/bc35316fd422689a9bc65845d63c1433.jpg b/docs/master/img/bc35316fd422689a9bc65845d63c1433.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/bc35316fd422689a9bc65845d63c1433.jpg rename to docs/master/img/bc35316fd422689a9bc65845d63c1433.jpg diff --git a/docs/0.19.x/img/bc7418a3ab8f749f1abd139faa96bee2.jpg b/docs/master/img/bc7418a3ab8f749f1abd139faa96bee2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/bc7418a3ab8f749f1abd139faa96bee2.jpg rename to docs/master/img/bc7418a3ab8f749f1abd139faa96bee2.jpg diff --git a/docs/0.19.x/img/bd3f0762bab34671ec8bfb8ace2cc129.jpg b/docs/master/img/bd3f0762bab34671ec8bfb8ace2cc129.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/bd3f0762bab34671ec8bfb8ace2cc129.jpg rename to docs/master/img/bd3f0762bab34671ec8bfb8ace2cc129.jpg diff --git a/docs/0.19.x/img/bdc1e4261347e1c74950e91fa4f2230f.jpg b/docs/master/img/bdc1e4261347e1c74950e91fa4f2230f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/bdc1e4261347e1c74950e91fa4f2230f.jpg rename to docs/master/img/bdc1e4261347e1c74950e91fa4f2230f.jpg diff --git a/docs/0.19.x/img/be2b3bbef9fe377c6f748dd05355b58b.jpg b/docs/master/img/be2b3bbef9fe377c6f748dd05355b58b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/be2b3bbef9fe377c6f748dd05355b58b.jpg rename to docs/master/img/be2b3bbef9fe377c6f748dd05355b58b.jpg diff --git a/docs/0.19.x/img/be4190a760361bd7ae65c77218465778.jpg b/docs/master/img/be4190a760361bd7ae65c77218465778.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/be4190a760361bd7ae65c77218465778.jpg rename to docs/master/img/be4190a760361bd7ae65c77218465778.jpg diff --git a/docs/0.19.x/img/be71aa00cd62f24b4657f7993d1b3a45.jpg b/docs/master/img/be71aa00cd62f24b4657f7993d1b3a45.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/be71aa00cd62f24b4657f7993d1b3a45.jpg rename to docs/master/img/be71aa00cd62f24b4657f7993d1b3a45.jpg diff --git a/docs/0.19.x/img/be8c80153a3cafbe4309f1fe3b62d96b.jpg b/docs/master/img/be8c80153a3cafbe4309f1fe3b62d96b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/be8c80153a3cafbe4309f1fe3b62d96b.jpg rename to docs/master/img/be8c80153a3cafbe4309f1fe3b62d96b.jpg diff --git a/docs/0.19.x/img/bec3afcb1362068f9caf79c5c58ea816.jpg b/docs/master/img/bec3afcb1362068f9caf79c5c58ea816.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/bec3afcb1362068f9caf79c5c58ea816.jpg rename to docs/master/img/bec3afcb1362068f9caf79c5c58ea816.jpg diff --git a/docs/0.19.x/img/bee2cb707f91d8e36ae11638b6698fe4.jpg b/docs/master/img/bee2cb707f91d8e36ae11638b6698fe4.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/bee2cb707f91d8e36ae11638b6698fe4.jpg rename to docs/master/img/bee2cb707f91d8e36ae11638b6698fe4.jpg diff --git a/docs/0.19.x/img/beee3f6e512d1e3caf1d1f6cfff468ae.jpg b/docs/master/img/beee3f6e512d1e3caf1d1f6cfff468ae.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/beee3f6e512d1e3caf1d1f6cfff468ae.jpg rename to docs/master/img/beee3f6e512d1e3caf1d1f6cfff468ae.jpg diff --git a/docs/0.19.x/img/bf95d88f4f17676409c7bab64ba036dc.jpg b/docs/master/img/bf95d88f4f17676409c7bab64ba036dc.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/bf95d88f4f17676409c7bab64ba036dc.jpg rename to docs/master/img/bf95d88f4f17676409c7bab64ba036dc.jpg diff --git a/docs/0.19.x/img/bf9baf4863bf6d025348b7d91c888066.jpg b/docs/master/img/bf9baf4863bf6d025348b7d91c888066.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/bf9baf4863bf6d025348b7d91c888066.jpg rename to docs/master/img/bf9baf4863bf6d025348b7d91c888066.jpg diff --git a/docs/0.19.x/img/bf9fb1354c2e0ea50d37e5cad7866314.jpg b/docs/master/img/bf9fb1354c2e0ea50d37e5cad7866314.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/bf9fb1354c2e0ea50d37e5cad7866314.jpg rename to docs/master/img/bf9fb1354c2e0ea50d37e5cad7866314.jpg diff --git a/docs/0.19.x/img/c001247a5528df69cdcc243c70f61d01.jpg b/docs/master/img/c001247a5528df69cdcc243c70f61d01.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c001247a5528df69cdcc243c70f61d01.jpg rename to docs/master/img/c001247a5528df69cdcc243c70f61d01.jpg diff --git a/docs/0.19.x/img/c009aed89f1926875e5637127af6000c.jpg b/docs/master/img/c009aed89f1926875e5637127af6000c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c009aed89f1926875e5637127af6000c.jpg rename to docs/master/img/c009aed89f1926875e5637127af6000c.jpg diff --git a/docs/0.19.x/img/c019126f38fb92a868a7155bd707a5f8.jpg b/docs/master/img/c019126f38fb92a868a7155bd707a5f8.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c019126f38fb92a868a7155bd707a5f8.jpg rename to docs/master/img/c019126f38fb92a868a7155bd707a5f8.jpg diff --git a/docs/0.19.x/img/c03e9014ab434e11e9323f87908ed15e.jpg b/docs/master/img/c03e9014ab434e11e9323f87908ed15e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c03e9014ab434e11e9323f87908ed15e.jpg rename to docs/master/img/c03e9014ab434e11e9323f87908ed15e.jpg diff --git a/docs/0.19.x/img/c236b4ae30d04ba7fae7fa499a2ba9ea.jpg b/docs/master/img/c236b4ae30d04ba7fae7fa499a2ba9ea.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c236b4ae30d04ba7fae7fa499a2ba9ea.jpg rename to docs/master/img/c236b4ae30d04ba7fae7fa499a2ba9ea.jpg diff --git a/docs/0.19.x/img/c3567127ff1f678758b338a50e9c4880.jpg b/docs/master/img/c3567127ff1f678758b338a50e9c4880.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c3567127ff1f678758b338a50e9c4880.jpg rename to docs/master/img/c3567127ff1f678758b338a50e9c4880.jpg diff --git a/docs/0.19.x/img/c39b576ee6e4fc82b4d9edd06ffc8c9c.jpg b/docs/master/img/c39b576ee6e4fc82b4d9edd06ffc8c9c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c39b576ee6e4fc82b4d9edd06ffc8c9c.jpg rename to docs/master/img/c39b576ee6e4fc82b4d9edd06ffc8c9c.jpg diff --git a/docs/0.19.x/img/c3c22734435fdd94f6819708bc55d8a6.jpg b/docs/master/img/c3c22734435fdd94f6819708bc55d8a6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c3c22734435fdd94f6819708bc55d8a6.jpg rename to docs/master/img/c3c22734435fdd94f6819708bc55d8a6.jpg diff --git a/docs/0.19.x/img/c3de98827a889725d91141a5780692b5.jpg b/docs/master/img/c3de98827a889725d91141a5780692b5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c3de98827a889725d91141a5780692b5.jpg rename to docs/master/img/c3de98827a889725d91141a5780692b5.jpg diff --git a/docs/0.19.x/img/c3e91e4b6783eb9fe281bc3e2e29aaea.jpg b/docs/master/img/c3e91e4b6783eb9fe281bc3e2e29aaea.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c3e91e4b6783eb9fe281bc3e2e29aaea.jpg rename to docs/master/img/c3e91e4b6783eb9fe281bc3e2e29aaea.jpg diff --git a/docs/0.19.x/img/c4373cf7ea98d1425608569103286d28.jpg b/docs/master/img/c4373cf7ea98d1425608569103286d28.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c4373cf7ea98d1425608569103286d28.jpg rename to docs/master/img/c4373cf7ea98d1425608569103286d28.jpg diff --git a/docs/0.19.x/img/c458cf14df5a22e0d44d7c4fa458361d.jpg b/docs/master/img/c458cf14df5a22e0d44d7c4fa458361d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c458cf14df5a22e0d44d7c4fa458361d.jpg rename to docs/master/img/c458cf14df5a22e0d44d7c4fa458361d.jpg diff --git a/docs/0.19.x/img/c46633c42aaa3e030b14d90aadb323fc.jpg b/docs/master/img/c46633c42aaa3e030b14d90aadb323fc.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c46633c42aaa3e030b14d90aadb323fc.jpg rename to docs/master/img/c46633c42aaa3e030b14d90aadb323fc.jpg diff --git a/docs/0.19.x/img/c471a6ca04f68a6d888d4c8ad95ba189.jpg b/docs/master/img/c471a6ca04f68a6d888d4c8ad95ba189.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c471a6ca04f68a6d888d4c8ad95ba189.jpg rename to docs/master/img/c471a6ca04f68a6d888d4c8ad95ba189.jpg diff --git a/docs/0.19.x/img/c5396cf8ee04b897a37bc7cd54383eaa.jpg b/docs/master/img/c5396cf8ee04b897a37bc7cd54383eaa.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c5396cf8ee04b897a37bc7cd54383eaa.jpg rename to docs/master/img/c5396cf8ee04b897a37bc7cd54383eaa.jpg diff --git a/docs/0.19.x/img/c57acf47ae694e71f55f0005d1e52c55.jpg b/docs/master/img/c57acf47ae694e71f55f0005d1e52c55.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c57acf47ae694e71f55f0005d1e52c55.jpg rename to docs/master/img/c57acf47ae694e71f55f0005d1e52c55.jpg diff --git a/docs/0.19.x/img/c57c1c5b116586e218fdaa3d0696d246.jpg b/docs/master/img/c57c1c5b116586e218fdaa3d0696d246.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c57c1c5b116586e218fdaa3d0696d246.jpg rename to docs/master/img/c57c1c5b116586e218fdaa3d0696d246.jpg diff --git a/docs/0.19.x/img/c593cc77e5133571028587b75182d3b3.jpg b/docs/master/img/c593cc77e5133571028587b75182d3b3.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c593cc77e5133571028587b75182d3b3.jpg rename to docs/master/img/c593cc77e5133571028587b75182d3b3.jpg diff --git a/docs/0.19.x/img/c5b0e465d16add1d02594ec434515c04.jpg b/docs/master/img/c5b0e465d16add1d02594ec434515c04.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c5b0e465d16add1d02594ec434515c04.jpg rename to docs/master/img/c5b0e465d16add1d02594ec434515c04.jpg diff --git a/docs/0.19.x/img/c5f2af9df9f65f0e399542ecf7f40554.jpg b/docs/master/img/c5f2af9df9f65f0e399542ecf7f40554.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c5f2af9df9f65f0e399542ecf7f40554.jpg rename to docs/master/img/c5f2af9df9f65f0e399542ecf7f40554.jpg diff --git a/docs/0.19.x/img/c5f49595b56010ad04fce358940848e5.jpg b/docs/master/img/c5f49595b56010ad04fce358940848e5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c5f49595b56010ad04fce358940848e5.jpg rename to docs/master/img/c5f49595b56010ad04fce358940848e5.jpg diff --git a/docs/0.19.x/img/c63c614232be2789284b906792195a15.jpg b/docs/master/img/c63c614232be2789284b906792195a15.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c63c614232be2789284b906792195a15.jpg rename to docs/master/img/c63c614232be2789284b906792195a15.jpg diff --git a/docs/0.19.x/img/c63f13d52ac4f65cde6e5dfd9e941562.jpg b/docs/master/img/c63f13d52ac4f65cde6e5dfd9e941562.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c63f13d52ac4f65cde6e5dfd9e941562.jpg rename to docs/master/img/c63f13d52ac4f65cde6e5dfd9e941562.jpg diff --git a/docs/0.19.x/img/c683d0fa5d21d783e383612dda8ecad3.jpg b/docs/master/img/c683d0fa5d21d783e383612dda8ecad3.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c683d0fa5d21d783e383612dda8ecad3.jpg rename to docs/master/img/c683d0fa5d21d783e383612dda8ecad3.jpg diff --git a/docs/0.19.x/img/c6b27df44672e7fa50d1d81ffbbebfbd.jpg b/docs/master/img/c6b27df44672e7fa50d1d81ffbbebfbd.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c6b27df44672e7fa50d1d81ffbbebfbd.jpg rename to docs/master/img/c6b27df44672e7fa50d1d81ffbbebfbd.jpg diff --git a/docs/0.19.x/img/c74889dd434ec9a5f4e1b57a549263e7.jpg b/docs/master/img/c74889dd434ec9a5f4e1b57a549263e7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c74889dd434ec9a5f4e1b57a549263e7.jpg rename to docs/master/img/c74889dd434ec9a5f4e1b57a549263e7.jpg diff --git a/docs/0.19.x/img/c7e49892dca2f0df35d1261a276693f2.jpg b/docs/master/img/c7e49892dca2f0df35d1261a276693f2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c7e49892dca2f0df35d1261a276693f2.jpg rename to docs/master/img/c7e49892dca2f0df35d1261a276693f2.jpg diff --git a/docs/0.19.x/img/c7fbb786df17a75de12baa56eb99a2c2.jpg b/docs/master/img/c7fbb786df17a75de12baa56eb99a2c2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c7fbb786df17a75de12baa56eb99a2c2.jpg rename to docs/master/img/c7fbb786df17a75de12baa56eb99a2c2.jpg diff --git a/docs/0.19.x/img/c82c4d24e15330860a4ca71a31ddd553.jpg b/docs/master/img/c82c4d24e15330860a4ca71a31ddd553.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c82c4d24e15330860a4ca71a31ddd553.jpg rename to docs/master/img/c82c4d24e15330860a4ca71a31ddd553.jpg diff --git a/docs/0.19.x/img/c851b3cdef3493f17f70f7249928e34b.jpg b/docs/master/img/c851b3cdef3493f17f70f7249928e34b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c851b3cdef3493f17f70f7249928e34b.jpg rename to docs/master/img/c851b3cdef3493f17f70f7249928e34b.jpg diff --git a/docs/0.19.x/img/c87d9110f3d32ffa5fa08671e4af11fb.jpg b/docs/master/img/c87d9110f3d32ffa5fa08671e4af11fb.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c87d9110f3d32ffa5fa08671e4af11fb.jpg rename to docs/master/img/c87d9110f3d32ffa5fa08671e4af11fb.jpg diff --git a/docs/0.19.x/img/c8b386f383c840e769d6dae0eeac73dd.jpg b/docs/master/img/c8b386f383c840e769d6dae0eeac73dd.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c8b386f383c840e769d6dae0eeac73dd.jpg rename to docs/master/img/c8b386f383c840e769d6dae0eeac73dd.jpg diff --git a/docs/0.19.x/img/c95237387255f824359f6c772cbb1df0.jpg b/docs/master/img/c95237387255f824359f6c772cbb1df0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c95237387255f824359f6c772cbb1df0.jpg rename to docs/master/img/c95237387255f824359f6c772cbb1df0.jpg diff --git a/docs/0.19.x/img/c9a9a1cec953f556f78c5f400277b422.jpg b/docs/master/img/c9a9a1cec953f556f78c5f400277b422.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c9a9a1cec953f556f78c5f400277b422.jpg rename to docs/master/img/c9a9a1cec953f556f78c5f400277b422.jpg diff --git a/docs/0.19.x/img/c9e8d19526fed76c122a77c246f59313.jpg b/docs/master/img/c9e8d19526fed76c122a77c246f59313.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c9e8d19526fed76c122a77c246f59313.jpg rename to docs/master/img/c9e8d19526fed76c122a77c246f59313.jpg diff --git a/docs/0.19.x/img/c9f28da3986a32d6c1421f357d52b9fa.jpg b/docs/master/img/c9f28da3986a32d6c1421f357d52b9fa.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/c9f28da3986a32d6c1421f357d52b9fa.jpg rename to docs/master/img/c9f28da3986a32d6c1421f357d52b9fa.jpg diff --git a/docs/0.19.x/img/ca04f56b8f8c29e1eec03620f0f601b0.jpg b/docs/master/img/ca04f56b8f8c29e1eec03620f0f601b0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ca04f56b8f8c29e1eec03620f0f601b0.jpg rename to docs/master/img/ca04f56b8f8c29e1eec03620f0f601b0.jpg diff --git a/docs/0.19.x/img/ca22762150e0516b4847c03efd5ebf6d.jpg b/docs/master/img/ca22762150e0516b4847c03efd5ebf6d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ca22762150e0516b4847c03efd5ebf6d.jpg rename to docs/master/img/ca22762150e0516b4847c03efd5ebf6d.jpg diff --git a/docs/0.19.x/img/cb598ee06bc5060d2dabe4acba00faa7.jpg b/docs/master/img/cb598ee06bc5060d2dabe4acba00faa7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/cb598ee06bc5060d2dabe4acba00faa7.jpg rename to docs/master/img/cb598ee06bc5060d2dabe4acba00faa7.jpg diff --git a/docs/0.19.x/img/cb5a89fd247e8cbbea21b00a12d188e6.jpg b/docs/master/img/cb5a89fd247e8cbbea21b00a12d188e6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/cb5a89fd247e8cbbea21b00a12d188e6.jpg rename to docs/master/img/cb5a89fd247e8cbbea21b00a12d188e6.jpg diff --git a/docs/0.19.x/img/cba233fc4178da6d3fe0b177cbbb6318.jpg b/docs/master/img/cba233fc4178da6d3fe0b177cbbb6318.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/cba233fc4178da6d3fe0b177cbbb6318.jpg rename to docs/master/img/cba233fc4178da6d3fe0b177cbbb6318.jpg diff --git a/docs/0.19.x/img/cc41a8d314f9b97ecdf236aa0c21d984.jpg b/docs/master/img/cc41a8d314f9b97ecdf236aa0c21d984.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/cc41a8d314f9b97ecdf236aa0c21d984.jpg rename to docs/master/img/cc41a8d314f9b97ecdf236aa0c21d984.jpg diff --git a/docs/0.19.x/img/cc9d324e8bc61a67cc1947f73bf5b618.jpg b/docs/master/img/cc9d324e8bc61a67cc1947f73bf5b618.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/cc9d324e8bc61a67cc1947f73bf5b618.jpg rename to docs/master/img/cc9d324e8bc61a67cc1947f73bf5b618.jpg diff --git a/docs/0.19.x/img/ccc8bedf9424617c5d6a61fbe9a1cc36.jpg b/docs/master/img/ccc8bedf9424617c5d6a61fbe9a1cc36.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ccc8bedf9424617c5d6a61fbe9a1cc36.jpg rename to docs/master/img/ccc8bedf9424617c5d6a61fbe9a1cc36.jpg diff --git a/docs/0.19.x/img/ccd727d4b039d28f8146546bd5f614b3.jpg b/docs/master/img/ccd727d4b039d28f8146546bd5f614b3.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ccd727d4b039d28f8146546bd5f614b3.jpg rename to docs/master/img/ccd727d4b039d28f8146546bd5f614b3.jpg diff --git a/docs/0.19.x/img/cd0c1a5b7ac7d76f9fe724cc7a723374.jpg b/docs/master/img/cd0c1a5b7ac7d76f9fe724cc7a723374.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/cd0c1a5b7ac7d76f9fe724cc7a723374.jpg rename to docs/master/img/cd0c1a5b7ac7d76f9fe724cc7a723374.jpg diff --git a/docs/0.19.x/img/cd345cf1e9e01448cd544361983ab95a.jpg b/docs/master/img/cd345cf1e9e01448cd544361983ab95a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/cd345cf1e9e01448cd544361983ab95a.jpg rename to docs/master/img/cd345cf1e9e01448cd544361983ab95a.jpg diff --git a/docs/0.19.x/img/cd58ff0ab17f3ead1d5179426f2dae50.jpg b/docs/master/img/cd58ff0ab17f3ead1d5179426f2dae50.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/cd58ff0ab17f3ead1d5179426f2dae50.jpg rename to docs/master/img/cd58ff0ab17f3ead1d5179426f2dae50.jpg diff --git a/docs/0.19.x/img/cd8ca25fe0dc0cc43949bcaa5d2674c2.jpg b/docs/master/img/cd8ca25fe0dc0cc43949bcaa5d2674c2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/cd8ca25fe0dc0cc43949bcaa5d2674c2.jpg rename to docs/master/img/cd8ca25fe0dc0cc43949bcaa5d2674c2.jpg diff --git a/docs/0.19.x/img/cda529a3abe8af421f1f218b1a390091.jpg b/docs/master/img/cda529a3abe8af421f1f218b1a390091.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/cda529a3abe8af421f1f218b1a390091.jpg rename to docs/master/img/cda529a3abe8af421f1f218b1a390091.jpg diff --git a/docs/0.19.x/img/cdaca3963c7797054326117c0bc0b368.jpg b/docs/master/img/cdaca3963c7797054326117c0bc0b368.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/cdaca3963c7797054326117c0bc0b368.jpg rename to docs/master/img/cdaca3963c7797054326117c0bc0b368.jpg diff --git a/docs/0.19.x/img/cdc5ef75d769259ef0537940296ab0b4.jpg b/docs/master/img/cdc5ef75d769259ef0537940296ab0b4.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/cdc5ef75d769259ef0537940296ab0b4.jpg rename to docs/master/img/cdc5ef75d769259ef0537940296ab0b4.jpg diff --git a/docs/0.19.x/img/cddb30ab60430b100271b055376e8363.jpg b/docs/master/img/cddb30ab60430b100271b055376e8363.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/cddb30ab60430b100271b055376e8363.jpg rename to docs/master/img/cddb30ab60430b100271b055376e8363.jpg diff --git a/docs/0.19.x/img/ce7fd91ddb116ab5d747de0316caf657.jpg b/docs/master/img/ce7fd91ddb116ab5d747de0316caf657.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ce7fd91ddb116ab5d747de0316caf657.jpg rename to docs/master/img/ce7fd91ddb116ab5d747de0316caf657.jpg diff --git a/docs/0.19.x/img/cf52655ee609af9f3c27c06448a5bf67.jpg b/docs/master/img/cf52655ee609af9f3c27c06448a5bf67.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/cf52655ee609af9f3c27c06448a5bf67.jpg rename to docs/master/img/cf52655ee609af9f3c27c06448a5bf67.jpg diff --git a/docs/0.19.x/img/cf8cc964dfa6df1a7473fe033f9fb642.jpg b/docs/master/img/cf8cc964dfa6df1a7473fe033f9fb642.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/cf8cc964dfa6df1a7473fe033f9fb642.jpg rename to docs/master/img/cf8cc964dfa6df1a7473fe033f9fb642.jpg diff --git a/docs/0.19.x/img/cfe45a2d171ae9c5933cd6d48cd48cb0.jpg b/docs/master/img/cfe45a2d171ae9c5933cd6d48cd48cb0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/cfe45a2d171ae9c5933cd6d48cd48cb0.jpg rename to docs/master/img/cfe45a2d171ae9c5933cd6d48cd48cb0.jpg diff --git a/docs/0.21.3/img/cluster01.png b/docs/master/img/cluster01.png similarity index 100% rename from docs/0.21.3/img/cluster01.png rename to docs/master/img/cluster01.png diff --git a/docs/0.19.x/img/d06a11a8d6ed2efac238ab0bdbd33326.jpg b/docs/master/img/d06a11a8d6ed2efac238ab0bdbd33326.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d06a11a8d6ed2efac238ab0bdbd33326.jpg rename to docs/master/img/d06a11a8d6ed2efac238ab0bdbd33326.jpg diff --git a/docs/0.19.x/img/d11a3c7c81eef9f2c8ece06f91411e9e.jpg b/docs/master/img/d11a3c7c81eef9f2c8ece06f91411e9e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d11a3c7c81eef9f2c8ece06f91411e9e.jpg rename to docs/master/img/d11a3c7c81eef9f2c8ece06f91411e9e.jpg diff --git a/docs/0.19.x/img/d12d5f9823ac608127ac67df8cecff9d.jpg b/docs/master/img/d12d5f9823ac608127ac67df8cecff9d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d12d5f9823ac608127ac67df8cecff9d.jpg rename to docs/master/img/d12d5f9823ac608127ac67df8cecff9d.jpg diff --git a/docs/0.19.x/img/d1d5abd40c8364a2da2f181ede69fa56.jpg b/docs/master/img/d1d5abd40c8364a2da2f181ede69fa56.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d1d5abd40c8364a2da2f181ede69fa56.jpg rename to docs/master/img/d1d5abd40c8364a2da2f181ede69fa56.jpg diff --git a/docs/0.19.x/img/d2b34f499ce1bbd28a276bc0d7afdde1.jpg b/docs/master/img/d2b34f499ce1bbd28a276bc0d7afdde1.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d2b34f499ce1bbd28a276bc0d7afdde1.jpg rename to docs/master/img/d2b34f499ce1bbd28a276bc0d7afdde1.jpg diff --git a/docs/0.19.x/img/d2fed0ae8e2b987a781ee01a92c31dfb.jpg b/docs/master/img/d2fed0ae8e2b987a781ee01a92c31dfb.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d2fed0ae8e2b987a781ee01a92c31dfb.jpg rename to docs/master/img/d2fed0ae8e2b987a781ee01a92c31dfb.jpg diff --git a/docs/0.19.x/img/d325b0db5d92ebf952f4b6d810fa43bd.jpg b/docs/master/img/d325b0db5d92ebf952f4b6d810fa43bd.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d325b0db5d92ebf952f4b6d810fa43bd.jpg rename to docs/master/img/d325b0db5d92ebf952f4b6d810fa43bd.jpg diff --git a/docs/0.19.x/img/d35b85fc7ddd819b1fec30a6ef410fc9.jpg b/docs/master/img/d35b85fc7ddd819b1fec30a6ef410fc9.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d35b85fc7ddd819b1fec30a6ef410fc9.jpg rename to docs/master/img/d35b85fc7ddd819b1fec30a6ef410fc9.jpg diff --git a/docs/0.19.x/img/d3c1bd7a2bac2e7cc22203e423d56e7e.jpg b/docs/master/img/d3c1bd7a2bac2e7cc22203e423d56e7e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d3c1bd7a2bac2e7cc22203e423d56e7e.jpg rename to docs/master/img/d3c1bd7a2bac2e7cc22203e423d56e7e.jpg diff --git a/docs/0.19.x/img/d3d363339c8708bf2058b128facd0aea.jpg b/docs/master/img/d3d363339c8708bf2058b128facd0aea.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d3d363339c8708bf2058b128facd0aea.jpg rename to docs/master/img/d3d363339c8708bf2058b128facd0aea.jpg diff --git a/docs/0.19.x/img/d41288778c3d66bcae947c3078469126.jpg b/docs/master/img/d41288778c3d66bcae947c3078469126.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d41288778c3d66bcae947c3078469126.jpg rename to docs/master/img/d41288778c3d66bcae947c3078469126.jpg diff --git a/docs/0.19.x/img/d459482314974b92f7f44cc36d6eae3e.jpg b/docs/master/img/d459482314974b92f7f44cc36d6eae3e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d459482314974b92f7f44cc36d6eae3e.jpg rename to docs/master/img/d459482314974b92f7f44cc36d6eae3e.jpg diff --git a/docs/0.19.x/img/d47bd99afb1d5dd3bff5b9809371c476.jpg b/docs/master/img/d47bd99afb1d5dd3bff5b9809371c476.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d47bd99afb1d5dd3bff5b9809371c476.jpg rename to docs/master/img/d47bd99afb1d5dd3bff5b9809371c476.jpg diff --git a/docs/0.19.x/img/d49a868d9c8c944f42202a30647ff7cf.jpg b/docs/master/img/d49a868d9c8c944f42202a30647ff7cf.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d49a868d9c8c944f42202a30647ff7cf.jpg rename to docs/master/img/d49a868d9c8c944f42202a30647ff7cf.jpg diff --git a/docs/0.19.x/img/d49c17958d641e42faa6fd3a46ac860a.jpg b/docs/master/img/d49c17958d641e42faa6fd3a46ac860a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d49c17958d641e42faa6fd3a46ac860a.jpg rename to docs/master/img/d49c17958d641e42faa6fd3a46ac860a.jpg diff --git a/docs/0.19.x/img/d5021b539c18587624a07ef6df00f585.jpg b/docs/master/img/d5021b539c18587624a07ef6df00f585.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d5021b539c18587624a07ef6df00f585.jpg rename to docs/master/img/d5021b539c18587624a07ef6df00f585.jpg diff --git a/docs/0.19.x/img/d5a26fae0e652d4e951d9ec9ae1a01e5.jpg b/docs/master/img/d5a26fae0e652d4e951d9ec9ae1a01e5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d5a26fae0e652d4e951d9ec9ae1a01e5.jpg rename to docs/master/img/d5a26fae0e652d4e951d9ec9ae1a01e5.jpg diff --git a/docs/0.19.x/img/d5c9a11453ea30a1be50a1034052bd6b.jpg b/docs/master/img/d5c9a11453ea30a1be50a1034052bd6b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d5c9a11453ea30a1be50a1034052bd6b.jpg rename to docs/master/img/d5c9a11453ea30a1be50a1034052bd6b.jpg diff --git a/docs/0.19.x/img/d61124c62424b8a8d38adc3c41bb71f6.jpg b/docs/master/img/d61124c62424b8a8d38adc3c41bb71f6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d61124c62424b8a8d38adc3c41bb71f6.jpg rename to docs/master/img/d61124c62424b8a8d38adc3c41bb71f6.jpg diff --git a/docs/0.19.x/img/d6127761ddbd135a1317ec14f1ddfac4.jpg b/docs/master/img/d6127761ddbd135a1317ec14f1ddfac4.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d6127761ddbd135a1317ec14f1ddfac4.jpg rename to docs/master/img/d6127761ddbd135a1317ec14f1ddfac4.jpg diff --git a/docs/0.19.x/img/d6293957048ac05c3ae0dfac9949537c.jpg b/docs/master/img/d6293957048ac05c3ae0dfac9949537c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d6293957048ac05c3ae0dfac9949537c.jpg rename to docs/master/img/d6293957048ac05c3ae0dfac9949537c.jpg diff --git a/docs/0.19.x/img/d670eea3215462f64d74d9366622a490.jpg b/docs/master/img/d670eea3215462f64d74d9366622a490.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d670eea3215462f64d74d9366622a490.jpg rename to docs/master/img/d670eea3215462f64d74d9366622a490.jpg diff --git a/docs/0.19.x/img/d69db8c22e9315a6fb454b276d5ce534.jpg b/docs/master/img/d69db8c22e9315a6fb454b276d5ce534.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d69db8c22e9315a6fb454b276d5ce534.jpg rename to docs/master/img/d69db8c22e9315a6fb454b276d5ce534.jpg diff --git a/docs/0.19.x/img/d6d6e6638cd01ead4811579660e36b44.jpg b/docs/master/img/d6d6e6638cd01ead4811579660e36b44.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d6d6e6638cd01ead4811579660e36b44.jpg rename to docs/master/img/d6d6e6638cd01ead4811579660e36b44.jpg diff --git a/docs/0.19.x/img/d6e5649338670ffec641327eeaa0521a.jpg b/docs/master/img/d6e5649338670ffec641327eeaa0521a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d6e5649338670ffec641327eeaa0521a.jpg rename to docs/master/img/d6e5649338670ffec641327eeaa0521a.jpg diff --git a/docs/0.19.x/img/d6f34fca0b5561181aa5263dbb97df74.jpg b/docs/master/img/d6f34fca0b5561181aa5263dbb97df74.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d6f34fca0b5561181aa5263dbb97df74.jpg rename to docs/master/img/d6f34fca0b5561181aa5263dbb97df74.jpg diff --git a/docs/0.19.x/img/d7151d4911c077ded512eba1c6cd2bb0.jpg b/docs/master/img/d7151d4911c077ded512eba1c6cd2bb0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d7151d4911c077ded512eba1c6cd2bb0.jpg rename to docs/master/img/d7151d4911c077ded512eba1c6cd2bb0.jpg diff --git a/docs/0.19.x/img/d7228aff11bb03497e40badd984560a6.jpg b/docs/master/img/d7228aff11bb03497e40badd984560a6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d7228aff11bb03497e40badd984560a6.jpg rename to docs/master/img/d7228aff11bb03497e40badd984560a6.jpg diff --git a/docs/0.19.x/img/d7b279566c62332b11d20ca6ff026505.jpg b/docs/master/img/d7b279566c62332b11d20ca6ff026505.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d7b279566c62332b11d20ca6ff026505.jpg rename to docs/master/img/d7b279566c62332b11d20ca6ff026505.jpg diff --git a/docs/0.19.x/img/d7e5ca264ffbd335db57ba194e2a5d0f.jpg b/docs/master/img/d7e5ca264ffbd335db57ba194e2a5d0f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d7e5ca264ffbd335db57ba194e2a5d0f.jpg rename to docs/master/img/d7e5ca264ffbd335db57ba194e2a5d0f.jpg diff --git a/docs/0.19.x/img/d7f26dee1f8849176f6438863fb775fb.jpg b/docs/master/img/d7f26dee1f8849176f6438863fb775fb.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d7f26dee1f8849176f6438863fb775fb.jpg rename to docs/master/img/d7f26dee1f8849176f6438863fb775fb.jpg diff --git a/docs/0.19.x/img/d7ff3091308658ce388554d420581459.jpg b/docs/master/img/d7ff3091308658ce388554d420581459.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d7ff3091308658ce388554d420581459.jpg rename to docs/master/img/d7ff3091308658ce388554d420581459.jpg diff --git a/docs/0.19.x/img/d822c46462e0ffda4dd99f74a070b6b3.jpg b/docs/master/img/d822c46462e0ffda4dd99f74a070b6b3.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d822c46462e0ffda4dd99f74a070b6b3.jpg rename to docs/master/img/d822c46462e0ffda4dd99f74a070b6b3.jpg diff --git a/docs/0.19.x/img/d8b3d5242d513369a44f8bf0c6112744.jpg b/docs/master/img/d8b3d5242d513369a44f8bf0c6112744.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d8b3d5242d513369a44f8bf0c6112744.jpg rename to docs/master/img/d8b3d5242d513369a44f8bf0c6112744.jpg diff --git a/docs/0.19.x/img/d90bb77f4f60c523c2bc041f768e8a49.jpg b/docs/master/img/d90bb77f4f60c523c2bc041f768e8a49.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d90bb77f4f60c523c2bc041f768e8a49.jpg rename to docs/master/img/d90bb77f4f60c523c2bc041f768e8a49.jpg diff --git a/docs/0.19.x/img/d97ae32100e54dfed8139aef0fcc9b68.jpg b/docs/master/img/d97ae32100e54dfed8139aef0fcc9b68.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d97ae32100e54dfed8139aef0fcc9b68.jpg rename to docs/master/img/d97ae32100e54dfed8139aef0fcc9b68.jpg diff --git a/docs/0.19.x/img/d9ac7cfff134bd66e853020e32d76f5c.jpg b/docs/master/img/d9ac7cfff134bd66e853020e32d76f5c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/d9ac7cfff134bd66e853020e32d76f5c.jpg rename to docs/master/img/d9ac7cfff134bd66e853020e32d76f5c.jpg diff --git a/docs/0.19.x/img/da2ce2d49bbab0c389600d1c82fccf9b.jpg b/docs/master/img/da2ce2d49bbab0c389600d1c82fccf9b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/da2ce2d49bbab0c389600d1c82fccf9b.jpg rename to docs/master/img/da2ce2d49bbab0c389600d1c82fccf9b.jpg diff --git a/docs/0.19.x/img/da31be9c84ea7617ab534b511701d650.jpg b/docs/master/img/da31be9c84ea7617ab534b511701d650.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/da31be9c84ea7617ab534b511701d650.jpg rename to docs/master/img/da31be9c84ea7617ab534b511701d650.jpg diff --git a/docs/0.19.x/img/da928d409a2cf1615368a82030e09380.jpg b/docs/master/img/da928d409a2cf1615368a82030e09380.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/da928d409a2cf1615368a82030e09380.jpg rename to docs/master/img/da928d409a2cf1615368a82030e09380.jpg diff --git a/docs/0.19.x/img/db23fadfab6b660dbfa2934c4536beb1.jpg b/docs/master/img/db23fadfab6b660dbfa2934c4536beb1.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/db23fadfab6b660dbfa2934c4536beb1.jpg rename to docs/master/img/db23fadfab6b660dbfa2934c4536beb1.jpg diff --git a/docs/0.19.x/img/db24e5f707f974690c4334cfa218bbee.jpg b/docs/master/img/db24e5f707f974690c4334cfa218bbee.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/db24e5f707f974690c4334cfa218bbee.jpg rename to docs/master/img/db24e5f707f974690c4334cfa218bbee.jpg diff --git a/docs/0.19.x/img/db30d43fd890d5f28b84a667ddfbb39d.jpg b/docs/master/img/db30d43fd890d5f28b84a667ddfbb39d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/db30d43fd890d5f28b84a667ddfbb39d.jpg rename to docs/master/img/db30d43fd890d5f28b84a667ddfbb39d.jpg diff --git a/docs/0.19.x/img/dc074c105944810a277030dfab298376.jpg b/docs/master/img/dc074c105944810a277030dfab298376.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/dc074c105944810a277030dfab298376.jpg rename to docs/master/img/dc074c105944810a277030dfab298376.jpg diff --git a/docs/0.19.x/img/dc219bfd2e157456e106676575955251.jpg b/docs/master/img/dc219bfd2e157456e106676575955251.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/dc219bfd2e157456e106676575955251.jpg rename to docs/master/img/dc219bfd2e157456e106676575955251.jpg diff --git a/docs/0.19.x/img/dc40e3a6d4022bfb488e0a4283b656b9.jpg b/docs/master/img/dc40e3a6d4022bfb488e0a4283b656b9.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/dc40e3a6d4022bfb488e0a4283b656b9.jpg rename to docs/master/img/dc40e3a6d4022bfb488e0a4283b656b9.jpg diff --git a/docs/0.19.x/img/dc8f095e63b3defdb85fcf54d7d2d8c2.jpg b/docs/master/img/dc8f095e63b3defdb85fcf54d7d2d8c2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/dc8f095e63b3defdb85fcf54d7d2d8c2.jpg rename to docs/master/img/dc8f095e63b3defdb85fcf54d7d2d8c2.jpg diff --git a/docs/0.19.x/img/dd310c2fa94418ac4f4d12638444fd3b.jpg b/docs/master/img/dd310c2fa94418ac4f4d12638444fd3b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/dd310c2fa94418ac4f4d12638444fd3b.jpg rename to docs/master/img/dd310c2fa94418ac4f4d12638444fd3b.jpg diff --git a/docs/0.19.x/img/dd9b7456f8406b6fac80cfd3ca11ccfc.jpg b/docs/master/img/dd9b7456f8406b6fac80cfd3ca11ccfc.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/dd9b7456f8406b6fac80cfd3ca11ccfc.jpg rename to docs/master/img/dd9b7456f8406b6fac80cfd3ca11ccfc.jpg diff --git a/docs/0.19.x/img/dda3ed622f104bd7e6abffbcb1691998.jpg b/docs/master/img/dda3ed622f104bd7e6abffbcb1691998.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/dda3ed622f104bd7e6abffbcb1691998.jpg rename to docs/master/img/dda3ed622f104bd7e6abffbcb1691998.jpg diff --git a/docs/0.19.x/img/ddb7802ca4af9cffa650eec942feb790.jpg b/docs/master/img/ddb7802ca4af9cffa650eec942feb790.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ddb7802ca4af9cffa650eec942feb790.jpg rename to docs/master/img/ddb7802ca4af9cffa650eec942feb790.jpg diff --git a/docs/0.19.x/img/dde55f7a409ac46b5694e689c4b151f5.jpg b/docs/master/img/dde55f7a409ac46b5694e689c4b151f5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/dde55f7a409ac46b5694e689c4b151f5.jpg rename to docs/master/img/dde55f7a409ac46b5694e689c4b151f5.jpg diff --git a/docs/0.19.x/img/de55c53f911184b6ad3e562a4d694c01.jpg b/docs/master/img/de55c53f911184b6ad3e562a4d694c01.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/de55c53f911184b6ad3e562a4d694c01.jpg rename to docs/master/img/de55c53f911184b6ad3e562a4d694c01.jpg diff --git a/docs/0.19.x/img/de6303ad5b9808c7ae8c64ddc632d893.jpg b/docs/master/img/de6303ad5b9808c7ae8c64ddc632d893.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/de6303ad5b9808c7ae8c64ddc632d893.jpg rename to docs/master/img/de6303ad5b9808c7ae8c64ddc632d893.jpg diff --git a/docs/0.19.x/img/decc30cee202697370eb9e21062c54b7.jpg b/docs/master/img/decc30cee202697370eb9e21062c54b7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/decc30cee202697370eb9e21062c54b7.jpg rename to docs/master/img/decc30cee202697370eb9e21062c54b7.jpg diff --git a/docs/0.19.x/img/dedef2ddd0f96df639d4c85fffb9bbd5.jpg b/docs/master/img/dedef2ddd0f96df639d4c85fffb9bbd5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/dedef2ddd0f96df639d4c85fffb9bbd5.jpg rename to docs/master/img/dedef2ddd0f96df639d4c85fffb9bbd5.jpg diff --git a/docs/0.19.x/img/def4737951f9990642e65b2403941350.jpg b/docs/master/img/def4737951f9990642e65b2403941350.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/def4737951f9990642e65b2403941350.jpg rename to docs/master/img/def4737951f9990642e65b2403941350.jpg diff --git a/docs/0.19.x/img/df49142f65f7afa86c2e18f598f00729.jpg b/docs/master/img/df49142f65f7afa86c2e18f598f00729.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/df49142f65f7afa86c2e18f598f00729.jpg rename to docs/master/img/df49142f65f7afa86c2e18f598f00729.jpg diff --git a/docs/0.19.x/img/dfab82d3a21680e5b6d3898a02dc6e01.jpg b/docs/master/img/dfab82d3a21680e5b6d3898a02dc6e01.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/dfab82d3a21680e5b6d3898a02dc6e01.jpg rename to docs/master/img/dfab82d3a21680e5b6d3898a02dc6e01.jpg diff --git a/docs/0.19.x/img/e02e680946360c19e1cee28c92173bc4.jpg b/docs/master/img/e02e680946360c19e1cee28c92173bc4.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e02e680946360c19e1cee28c92173bc4.jpg rename to docs/master/img/e02e680946360c19e1cee28c92173bc4.jpg diff --git a/docs/0.19.x/img/e03066df748abd9273db055cb79f0f01.jpg b/docs/master/img/e03066df748abd9273db055cb79f0f01.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e03066df748abd9273db055cb79f0f01.jpg rename to docs/master/img/e03066df748abd9273db055cb79f0f01.jpg diff --git a/docs/0.19.x/img/e0532dc18cc4c92c2b39f4b29d33cd13.jpg b/docs/master/img/e0532dc18cc4c92c2b39f4b29d33cd13.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e0532dc18cc4c92c2b39f4b29d33cd13.jpg rename to docs/master/img/e0532dc18cc4c92c2b39f4b29d33cd13.jpg diff --git a/docs/0.19.x/img/e0d8dbb9574d5eb264279927dcf8baaf.jpg b/docs/master/img/e0d8dbb9574d5eb264279927dcf8baaf.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e0d8dbb9574d5eb264279927dcf8baaf.jpg rename to docs/master/img/e0d8dbb9574d5eb264279927dcf8baaf.jpg diff --git a/docs/0.19.x/img/e18ade3134bef595ea6ddf488ff9557a.jpg b/docs/master/img/e18ade3134bef595ea6ddf488ff9557a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e18ade3134bef595ea6ddf488ff9557a.jpg rename to docs/master/img/e18ade3134bef595ea6ddf488ff9557a.jpg diff --git a/docs/0.19.x/img/e1b4d08b93d1d222e96d99475a766281.jpg b/docs/master/img/e1b4d08b93d1d222e96d99475a766281.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e1b4d08b93d1d222e96d99475a766281.jpg rename to docs/master/img/e1b4d08b93d1d222e96d99475a766281.jpg diff --git a/docs/0.19.x/img/e24edaeb407b6a696ddb188697f0934d.jpg b/docs/master/img/e24edaeb407b6a696ddb188697f0934d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e24edaeb407b6a696ddb188697f0934d.jpg rename to docs/master/img/e24edaeb407b6a696ddb188697f0934d.jpg diff --git a/docs/0.19.x/img/e2632203a52191f8ba8e393e34545100.jpg b/docs/master/img/e2632203a52191f8ba8e393e34545100.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e2632203a52191f8ba8e393e34545100.jpg rename to docs/master/img/e2632203a52191f8ba8e393e34545100.jpg diff --git a/docs/0.19.x/img/e2650a6b3222cf44bd311f7205909f06.jpg b/docs/master/img/e2650a6b3222cf44bd311f7205909f06.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e2650a6b3222cf44bd311f7205909f06.jpg rename to docs/master/img/e2650a6b3222cf44bd311f7205909f06.jpg diff --git a/docs/0.19.x/img/e270fdc1fb7cabab295d31d189d77258.jpg b/docs/master/img/e270fdc1fb7cabab295d31d189d77258.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e270fdc1fb7cabab295d31d189d77258.jpg rename to docs/master/img/e270fdc1fb7cabab295d31d189d77258.jpg diff --git a/docs/0.19.x/img/e279b8169ddd6581c5606c868ba52fae.jpg b/docs/master/img/e279b8169ddd6581c5606c868ba52fae.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e279b8169ddd6581c5606c868ba52fae.jpg rename to docs/master/img/e279b8169ddd6581c5606c868ba52fae.jpg diff --git a/docs/0.19.x/img/e2bd3aaa1586d4d17301f7fe016eefd7.jpg b/docs/master/img/e2bd3aaa1586d4d17301f7fe016eefd7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e2bd3aaa1586d4d17301f7fe016eefd7.jpg rename to docs/master/img/e2bd3aaa1586d4d17301f7fe016eefd7.jpg diff --git a/docs/0.19.x/img/e2f9b08680b30cfb80102f69264fdd5c.jpg b/docs/master/img/e2f9b08680b30cfb80102f69264fdd5c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e2f9b08680b30cfb80102f69264fdd5c.jpg rename to docs/master/img/e2f9b08680b30cfb80102f69264fdd5c.jpg diff --git a/docs/0.19.x/img/e310c621bd78988800b952eb7542cd88.jpg b/docs/master/img/e310c621bd78988800b952eb7542cd88.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e310c621bd78988800b952eb7542cd88.jpg rename to docs/master/img/e310c621bd78988800b952eb7542cd88.jpg diff --git a/docs/0.19.x/img/e3eebe26bb077cc3986d3beba9de4ac5.jpg b/docs/master/img/e3eebe26bb077cc3986d3beba9de4ac5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e3eebe26bb077cc3986d3beba9de4ac5.jpg rename to docs/master/img/e3eebe26bb077cc3986d3beba9de4ac5.jpg diff --git a/docs/0.19.x/img/e3ff277d54a34043adefa98a9e1a69d1.jpg b/docs/master/img/e3ff277d54a34043adefa98a9e1a69d1.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e3ff277d54a34043adefa98a9e1a69d1.jpg rename to docs/master/img/e3ff277d54a34043adefa98a9e1a69d1.jpg diff --git a/docs/0.19.x/img/e473a2606f078eaa7b86800b11f4d62b.jpg b/docs/master/img/e473a2606f078eaa7b86800b11f4d62b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e473a2606f078eaa7b86800b11f4d62b.jpg rename to docs/master/img/e473a2606f078eaa7b86800b11f4d62b.jpg diff --git a/docs/0.19.x/img/e4e213d17043826a96dd917dcbdf5d85.jpg b/docs/master/img/e4e213d17043826a96dd917dcbdf5d85.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e4e213d17043826a96dd917dcbdf5d85.jpg rename to docs/master/img/e4e213d17043826a96dd917dcbdf5d85.jpg diff --git a/docs/0.19.x/img/e5012484ffa6afb2c720d363b39a36b0.jpg b/docs/master/img/e5012484ffa6afb2c720d363b39a36b0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e5012484ffa6afb2c720d363b39a36b0.jpg rename to docs/master/img/e5012484ffa6afb2c720d363b39a36b0.jpg diff --git a/docs/0.19.x/img/e56abe6d36f21c0c6dd22d2a84535415.jpg b/docs/master/img/e56abe6d36f21c0c6dd22d2a84535415.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e56abe6d36f21c0c6dd22d2a84535415.jpg rename to docs/master/img/e56abe6d36f21c0c6dd22d2a84535415.jpg diff --git a/docs/0.19.x/img/e5ad06b17e1bacf475bf9247d93d1419.jpg b/docs/master/img/e5ad06b17e1bacf475bf9247d93d1419.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e5ad06b17e1bacf475bf9247d93d1419.jpg rename to docs/master/img/e5ad06b17e1bacf475bf9247d93d1419.jpg diff --git a/docs/0.19.x/img/e5b3516a2cd7fbf2916643478e0bed70.jpg b/docs/master/img/e5b3516a2cd7fbf2916643478e0bed70.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e5b3516a2cd7fbf2916643478e0bed70.jpg rename to docs/master/img/e5b3516a2cd7fbf2916643478e0bed70.jpg diff --git a/docs/0.19.x/img/e615670f11d811f002d1b58effe99dc0.jpg b/docs/master/img/e615670f11d811f002d1b58effe99dc0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e615670f11d811f002d1b58effe99dc0.jpg rename to docs/master/img/e615670f11d811f002d1b58effe99dc0.jpg diff --git a/docs/0.19.x/img/e64298b4d9439c3db54eeddbf3d92b4b.jpg b/docs/master/img/e64298b4d9439c3db54eeddbf3d92b4b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e64298b4d9439c3db54eeddbf3d92b4b.jpg rename to docs/master/img/e64298b4d9439c3db54eeddbf3d92b4b.jpg diff --git a/docs/0.19.x/img/e668ecc249e709e47f6955a74528bf7b.jpg b/docs/master/img/e668ecc249e709e47f6955a74528bf7b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e668ecc249e709e47f6955a74528bf7b.jpg rename to docs/master/img/e668ecc249e709e47f6955a74528bf7b.jpg diff --git a/docs/0.19.x/img/e6811d3f6333e9490d602db8dc1e3d96.jpg b/docs/master/img/e6811d3f6333e9490d602db8dc1e3d96.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e6811d3f6333e9490d602db8dc1e3d96.jpg rename to docs/master/img/e6811d3f6333e9490d602db8dc1e3d96.jpg diff --git a/docs/0.19.x/img/e73c79ca71fe87074008fd5f464d686d.jpg b/docs/master/img/e73c79ca71fe87074008fd5f464d686d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e73c79ca71fe87074008fd5f464d686d.jpg rename to docs/master/img/e73c79ca71fe87074008fd5f464d686d.jpg diff --git a/docs/0.19.x/img/e7a07569c8c6af174aa061b9f8921065.jpg b/docs/master/img/e7a07569c8c6af174aa061b9f8921065.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e7a07569c8c6af174aa061b9f8921065.jpg rename to docs/master/img/e7a07569c8c6af174aa061b9f8921065.jpg diff --git a/docs/0.19.x/img/e7a3ba1e52e7e8add5e2c14602a92e3a.jpg b/docs/master/img/e7a3ba1e52e7e8add5e2c14602a92e3a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e7a3ba1e52e7e8add5e2c14602a92e3a.jpg rename to docs/master/img/e7a3ba1e52e7e8add5e2c14602a92e3a.jpg diff --git a/docs/0.19.x/img/e83376afb9facc5992c857d659c7d812.jpg b/docs/master/img/e83376afb9facc5992c857d659c7d812.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e83376afb9facc5992c857d659c7d812.jpg rename to docs/master/img/e83376afb9facc5992c857d659c7d812.jpg diff --git a/docs/0.19.x/img/e83fafb56db497bec93433bd0b0ee316.jpg b/docs/master/img/e83fafb56db497bec93433bd0b0ee316.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e83fafb56db497bec93433bd0b0ee316.jpg rename to docs/master/img/e83fafb56db497bec93433bd0b0ee316.jpg diff --git a/docs/0.19.x/img/e84b0861711b65f28923da7c268645e7.jpg b/docs/master/img/e84b0861711b65f28923da7c268645e7.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e84b0861711b65f28923da7c268645e7.jpg rename to docs/master/img/e84b0861711b65f28923da7c268645e7.jpg diff --git a/docs/0.19.x/img/e996da94de858e5248f145e01733ed9d.jpg b/docs/master/img/e996da94de858e5248f145e01733ed9d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/e996da94de858e5248f145e01733ed9d.jpg rename to docs/master/img/e996da94de858e5248f145e01733ed9d.jpg diff --git a/docs/0.19.x/img/ea1fbc6466fa8a62aa1f55a550a686b3.jpg b/docs/master/img/ea1fbc6466fa8a62aa1f55a550a686b3.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ea1fbc6466fa8a62aa1f55a550a686b3.jpg rename to docs/master/img/ea1fbc6466fa8a62aa1f55a550a686b3.jpg diff --git a/docs/0.19.x/img/eaba00919535dcb10574f0228b451481.jpg b/docs/master/img/eaba00919535dcb10574f0228b451481.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/eaba00919535dcb10574f0228b451481.jpg rename to docs/master/img/eaba00919535dcb10574f0228b451481.jpg diff --git a/docs/0.19.x/img/eac4cdf0a783ddcd7098023e25bb16ef.jpg b/docs/master/img/eac4cdf0a783ddcd7098023e25bb16ef.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/eac4cdf0a783ddcd7098023e25bb16ef.jpg rename to docs/master/img/eac4cdf0a783ddcd7098023e25bb16ef.jpg diff --git a/docs/0.19.x/img/eada6f59eaee0a758bddb97b44835751.jpg b/docs/master/img/eada6f59eaee0a758bddb97b44835751.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/eada6f59eaee0a758bddb97b44835751.jpg rename to docs/master/img/eada6f59eaee0a758bddb97b44835751.jpg diff --git a/docs/0.19.x/img/eaf558e2c8d1fbd5426664c1698d80bd.jpg b/docs/master/img/eaf558e2c8d1fbd5426664c1698d80bd.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/eaf558e2c8d1fbd5426664c1698d80bd.jpg rename to docs/master/img/eaf558e2c8d1fbd5426664c1698d80bd.jpg diff --git a/docs/0.19.x/img/eb604628a01ce7d6db62d61eba6e2e2f.jpg b/docs/master/img/eb604628a01ce7d6db62d61eba6e2e2f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/eb604628a01ce7d6db62d61eba6e2e2f.jpg rename to docs/master/img/eb604628a01ce7d6db62d61eba6e2e2f.jpg diff --git a/docs/0.19.x/img/eb89c7ce95ca7e68685f180915bf0511.jpg b/docs/master/img/eb89c7ce95ca7e68685f180915bf0511.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/eb89c7ce95ca7e68685f180915bf0511.jpg rename to docs/master/img/eb89c7ce95ca7e68685f180915bf0511.jpg diff --git a/docs/0.19.x/img/eba6c21adbb5d5905624446cc970a7d3.jpg b/docs/master/img/eba6c21adbb5d5905624446cc970a7d3.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/eba6c21adbb5d5905624446cc970a7d3.jpg rename to docs/master/img/eba6c21adbb5d5905624446cc970a7d3.jpg diff --git a/docs/0.19.x/img/ebdfa216db7c73e9067f547e1e65ca02.jpg b/docs/master/img/ebdfa216db7c73e9067f547e1e65ca02.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ebdfa216db7c73e9067f547e1e65ca02.jpg rename to docs/master/img/ebdfa216db7c73e9067f547e1e65ca02.jpg diff --git a/docs/0.19.x/img/ec29f705a6be2ce512a10c266dd755f0.jpg b/docs/master/img/ec29f705a6be2ce512a10c266dd755f0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ec29f705a6be2ce512a10c266dd755f0.jpg rename to docs/master/img/ec29f705a6be2ce512a10c266dd755f0.jpg diff --git a/docs/0.19.x/img/ed352c0fca166fdaa12d7da93676df50.jpg b/docs/master/img/ed352c0fca166fdaa12d7da93676df50.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ed352c0fca166fdaa12d7da93676df50.jpg rename to docs/master/img/ed352c0fca166fdaa12d7da93676df50.jpg diff --git a/docs/0.19.x/img/ed407df5e0211da2859805a96e271751.jpg b/docs/master/img/ed407df5e0211da2859805a96e271751.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ed407df5e0211da2859805a96e271751.jpg rename to docs/master/img/ed407df5e0211da2859805a96e271751.jpg diff --git a/docs/0.19.x/img/ed51906ca8fbc868248006c841aefa2b.jpg b/docs/master/img/ed51906ca8fbc868248006c841aefa2b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ed51906ca8fbc868248006c841aefa2b.jpg rename to docs/master/img/ed51906ca8fbc868248006c841aefa2b.jpg diff --git a/docs/0.19.x/img/ed6a1db8527fda759b14943c1b36d88e.jpg b/docs/master/img/ed6a1db8527fda759b14943c1b36d88e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ed6a1db8527fda759b14943c1b36d88e.jpg rename to docs/master/img/ed6a1db8527fda759b14943c1b36d88e.jpg diff --git a/docs/0.19.x/img/ed70b000f50fb169ffe20ca2979e4a75.jpg b/docs/master/img/ed70b000f50fb169ffe20ca2979e4a75.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ed70b000f50fb169ffe20ca2979e4a75.jpg rename to docs/master/img/ed70b000f50fb169ffe20ca2979e4a75.jpg diff --git a/docs/0.19.x/img/edbf7affc28abad1a964eeeeac3e711c.jpg b/docs/master/img/edbf7affc28abad1a964eeeeac3e711c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/edbf7affc28abad1a964eeeeac3e711c.jpg rename to docs/master/img/edbf7affc28abad1a964eeeeac3e711c.jpg diff --git a/docs/0.19.x/img/ede6a26a443c24b8cea943a4a6f144f0.jpg b/docs/master/img/ede6a26a443c24b8cea943a4a6f144f0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ede6a26a443c24b8cea943a4a6f144f0.jpg rename to docs/master/img/ede6a26a443c24b8cea943a4a6f144f0.jpg diff --git a/docs/0.19.x/img/ee5d94bdc1dac94ab975f3db18552505.jpg b/docs/master/img/ee5d94bdc1dac94ab975f3db18552505.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ee5d94bdc1dac94ab975f3db18552505.jpg rename to docs/master/img/ee5d94bdc1dac94ab975f3db18552505.jpg diff --git a/docs/0.19.x/img/ee68d82006856c6355aa0dca42cd5054.jpg b/docs/master/img/ee68d82006856c6355aa0dca42cd5054.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ee68d82006856c6355aa0dca42cd5054.jpg rename to docs/master/img/ee68d82006856c6355aa0dca42cd5054.jpg diff --git a/docs/0.19.x/img/ee78ab463ea8dc72594f270f5193a7a6.jpg b/docs/master/img/ee78ab463ea8dc72594f270f5193a7a6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ee78ab463ea8dc72594f270f5193a7a6.jpg rename to docs/master/img/ee78ab463ea8dc72594f270f5193a7a6.jpg diff --git a/docs/0.19.x/img/eeaf066f8cca5064b706ccfc4728323d.jpg b/docs/master/img/eeaf066f8cca5064b706ccfc4728323d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/eeaf066f8cca5064b706ccfc4728323d.jpg rename to docs/master/img/eeaf066f8cca5064b706ccfc4728323d.jpg diff --git a/docs/0.19.x/img/eeb2bac86ebedef3d8d2dcbf5b8c735b.jpg b/docs/master/img/eeb2bac86ebedef3d8d2dcbf5b8c735b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/eeb2bac86ebedef3d8d2dcbf5b8c735b.jpg rename to docs/master/img/eeb2bac86ebedef3d8d2dcbf5b8c735b.jpg diff --git a/docs/0.19.x/img/ef59d065ac32862cd7527b0c3fcf7956.jpg b/docs/master/img/ef59d065ac32862cd7527b0c3fcf7956.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ef59d065ac32862cd7527b0c3fcf7956.jpg rename to docs/master/img/ef59d065ac32862cd7527b0c3fcf7956.jpg diff --git a/docs/0.19.x/img/efaeec5dadbe79caddb0f92abab55f5b.jpg b/docs/master/img/efaeec5dadbe79caddb0f92abab55f5b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/efaeec5dadbe79caddb0f92abab55f5b.jpg rename to docs/master/img/efaeec5dadbe79caddb0f92abab55f5b.jpg diff --git a/docs/0.19.x/img/efb0c43ded3d4bdfb4b1d2092c8ee446.jpg b/docs/master/img/efb0c43ded3d4bdfb4b1d2092c8ee446.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/efb0c43ded3d4bdfb4b1d2092c8ee446.jpg rename to docs/master/img/efb0c43ded3d4bdfb4b1d2092c8ee446.jpg diff --git a/docs/0.19.x/img/f0b72920659961ba27aec1da59f3019c.jpg b/docs/master/img/f0b72920659961ba27aec1da59f3019c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f0b72920659961ba27aec1da59f3019c.jpg rename to docs/master/img/f0b72920659961ba27aec1da59f3019c.jpg diff --git a/docs/0.19.x/img/f15b9946d9078749f894a78579dc6778.jpg b/docs/master/img/f15b9946d9078749f894a78579dc6778.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f15b9946d9078749f894a78579dc6778.jpg rename to docs/master/img/f15b9946d9078749f894a78579dc6778.jpg diff --git a/docs/0.19.x/img/f19ea7e3ca675413d6ee0f2faff14b75.jpg b/docs/master/img/f19ea7e3ca675413d6ee0f2faff14b75.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f19ea7e3ca675413d6ee0f2faff14b75.jpg rename to docs/master/img/f19ea7e3ca675413d6ee0f2faff14b75.jpg diff --git a/docs/0.19.x/img/f1c8c9b812ae1b6ec189eda900e47269.jpg b/docs/master/img/f1c8c9b812ae1b6ec189eda900e47269.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f1c8c9b812ae1b6ec189eda900e47269.jpg rename to docs/master/img/f1c8c9b812ae1b6ec189eda900e47269.jpg diff --git a/docs/0.19.x/img/f1fa822436569807fdc9dca5d2879d99.jpg b/docs/master/img/f1fa822436569807fdc9dca5d2879d99.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f1fa822436569807fdc9dca5d2879d99.jpg rename to docs/master/img/f1fa822436569807fdc9dca5d2879d99.jpg diff --git a/docs/0.19.x/img/f1fb5834480bfa9770be94da12bbd514.jpg b/docs/master/img/f1fb5834480bfa9770be94da12bbd514.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f1fb5834480bfa9770be94da12bbd514.jpg rename to docs/master/img/f1fb5834480bfa9770be94da12bbd514.jpg diff --git a/docs/0.19.x/img/f1fc9ca63c663059f76c2af6729189d1.jpg b/docs/master/img/f1fc9ca63c663059f76c2af6729189d1.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f1fc9ca63c663059f76c2af6729189d1.jpg rename to docs/master/img/f1fc9ca63c663059f76c2af6729189d1.jpg diff --git a/docs/0.19.x/img/f211ed45608192b0763ed51c85b60811.jpg b/docs/master/img/f211ed45608192b0763ed51c85b60811.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f211ed45608192b0763ed51c85b60811.jpg rename to docs/master/img/f211ed45608192b0763ed51c85b60811.jpg diff --git a/docs/0.19.x/img/f28436a66fb892c9e8923e6649f19065.jpg b/docs/master/img/f28436a66fb892c9e8923e6649f19065.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f28436a66fb892c9e8923e6649f19065.jpg rename to docs/master/img/f28436a66fb892c9e8923e6649f19065.jpg diff --git a/docs/0.19.x/img/f298c2b42dd32bed6f02df3c6d4f7cf9.jpg b/docs/master/img/f298c2b42dd32bed6f02df3c6d4f7cf9.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f298c2b42dd32bed6f02df3c6d4f7cf9.jpg rename to docs/master/img/f298c2b42dd32bed6f02df3c6d4f7cf9.jpg diff --git a/docs/0.19.x/img/f3432e537038cc7e319db4ea1ff6a8e3.jpg b/docs/master/img/f3432e537038cc7e319db4ea1ff6a8e3.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f3432e537038cc7e319db4ea1ff6a8e3.jpg rename to docs/master/img/f3432e537038cc7e319db4ea1ff6a8e3.jpg diff --git a/docs/0.19.x/img/f34cef4cb73bfa4cbe2f9b4300a8940c.jpg b/docs/master/img/f34cef4cb73bfa4cbe2f9b4300a8940c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f34cef4cb73bfa4cbe2f9b4300a8940c.jpg rename to docs/master/img/f34cef4cb73bfa4cbe2f9b4300a8940c.jpg diff --git a/docs/0.19.x/img/f35f174b5f70ab18c19107e3f0fbe889.jpg b/docs/master/img/f35f174b5f70ab18c19107e3f0fbe889.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f35f174b5f70ab18c19107e3f0fbe889.jpg rename to docs/master/img/f35f174b5f70ab18c19107e3f0fbe889.jpg diff --git a/docs/0.19.x/img/f3893160388ee4203c313659d729cef0.jpg b/docs/master/img/f3893160388ee4203c313659d729cef0.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f3893160388ee4203c313659d729cef0.jpg rename to docs/master/img/f3893160388ee4203c313659d729cef0.jpg diff --git a/docs/0.19.x/img/f38f84b73c7da2884c38bdfca1a38b1c.jpg b/docs/master/img/f38f84b73c7da2884c38bdfca1a38b1c.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f38f84b73c7da2884c38bdfca1a38b1c.jpg rename to docs/master/img/f38f84b73c7da2884c38bdfca1a38b1c.jpg diff --git a/docs/0.19.x/img/f40416aceb254b77100eb361321c1804.jpg b/docs/master/img/f40416aceb254b77100eb361321c1804.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f40416aceb254b77100eb361321c1804.jpg rename to docs/master/img/f40416aceb254b77100eb361321c1804.jpg diff --git a/docs/0.19.x/img/f43793e26fc93870e33eb062060e309a.jpg b/docs/master/img/f43793e26fc93870e33eb062060e309a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f43793e26fc93870e33eb062060e309a.jpg rename to docs/master/img/f43793e26fc93870e33eb062060e309a.jpg diff --git a/docs/0.19.x/img/f4ad81b759af5604d12ae25c4c541224.jpg b/docs/master/img/f4ad81b759af5604d12ae25c4c541224.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f4ad81b759af5604d12ae25c4c541224.jpg rename to docs/master/img/f4ad81b759af5604d12ae25c4c541224.jpg diff --git a/docs/0.19.x/img/f4c7787828dd90f6b47e1677bbc806da.jpg b/docs/master/img/f4c7787828dd90f6b47e1677bbc806da.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f4c7787828dd90f6b47e1677bbc806da.jpg rename to docs/master/img/f4c7787828dd90f6b47e1677bbc806da.jpg diff --git a/docs/0.19.x/img/f5291f866455b62cd6c68f419444e5cf.jpg b/docs/master/img/f5291f866455b62cd6c68f419444e5cf.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f5291f866455b62cd6c68f419444e5cf.jpg rename to docs/master/img/f5291f866455b62cd6c68f419444e5cf.jpg diff --git a/docs/0.19.x/img/f60c0101ae8f649bb02ed8b24b30fd83.jpg b/docs/master/img/f60c0101ae8f649bb02ed8b24b30fd83.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f60c0101ae8f649bb02ed8b24b30fd83.jpg rename to docs/master/img/f60c0101ae8f649bb02ed8b24b30fd83.jpg diff --git a/docs/0.19.x/img/f6ce0899ba52f1169500b726ee9c8a92.jpg b/docs/master/img/f6ce0899ba52f1169500b726ee9c8a92.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f6ce0899ba52f1169500b726ee9c8a92.jpg rename to docs/master/img/f6ce0899ba52f1169500b726ee9c8a92.jpg diff --git a/docs/0.19.x/img/f7129cf20abc58eaa0e261335a7606a6.jpg b/docs/master/img/f7129cf20abc58eaa0e261335a7606a6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f7129cf20abc58eaa0e261335a7606a6.jpg rename to docs/master/img/f7129cf20abc58eaa0e261335a7606a6.jpg diff --git a/docs/0.19.x/img/f72a2f9f160a11abc8568b72386776fe.jpg b/docs/master/img/f72a2f9f160a11abc8568b72386776fe.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f72a2f9f160a11abc8568b72386776fe.jpg rename to docs/master/img/f72a2f9f160a11abc8568b72386776fe.jpg diff --git a/docs/0.19.x/img/f7dd5b16c1d8c3e278e9a1fa7f49dcd2.jpg b/docs/master/img/f7dd5b16c1d8c3e278e9a1fa7f49dcd2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f7dd5b16c1d8c3e278e9a1fa7f49dcd2.jpg rename to docs/master/img/f7dd5b16c1d8c3e278e9a1fa7f49dcd2.jpg diff --git a/docs/0.19.x/img/f7ee2b868860148ea59bc617d8ba7bb1.jpg b/docs/master/img/f7ee2b868860148ea59bc617d8ba7bb1.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f7ee2b868860148ea59bc617d8ba7bb1.jpg rename to docs/master/img/f7ee2b868860148ea59bc617d8ba7bb1.jpg diff --git a/docs/0.19.x/img/f7f0b321634c8d80ceacdc75ee3c68b6.jpg b/docs/master/img/f7f0b321634c8d80ceacdc75ee3c68b6.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f7f0b321634c8d80ceacdc75ee3c68b6.jpg rename to docs/master/img/f7f0b321634c8d80ceacdc75ee3c68b6.jpg diff --git a/docs/0.19.x/img/f8d66dde73704b8821db5322592a0cc2.jpg b/docs/master/img/f8d66dde73704b8821db5322592a0cc2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f8d66dde73704b8821db5322592a0cc2.jpg rename to docs/master/img/f8d66dde73704b8821db5322592a0cc2.jpg diff --git a/docs/0.19.x/img/f8e0c6c9a82bcbf369e2d0b7fc7aba8d.jpg b/docs/master/img/f8e0c6c9a82bcbf369e2d0b7fc7aba8d.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f8e0c6c9a82bcbf369e2d0b7fc7aba8d.jpg rename to docs/master/img/f8e0c6c9a82bcbf369e2d0b7fc7aba8d.jpg diff --git a/docs/0.19.x/img/f8f807bd22e1f9f3c4271c78c8cb33fa.jpg b/docs/master/img/f8f807bd22e1f9f3c4271c78c8cb33fa.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f8f807bd22e1f9f3c4271c78c8cb33fa.jpg rename to docs/master/img/f8f807bd22e1f9f3c4271c78c8cb33fa.jpg diff --git a/docs/0.19.x/img/f92e6fadff74949dcf9c70e40d1a7619.jpg b/docs/master/img/f92e6fadff74949dcf9c70e40d1a7619.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f92e6fadff74949dcf9c70e40d1a7619.jpg rename to docs/master/img/f92e6fadff74949dcf9c70e40d1a7619.jpg diff --git a/docs/0.19.x/img/f93871977da52a6d11045d57c3e18728.jpg b/docs/master/img/f93871977da52a6d11045d57c3e18728.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f93871977da52a6d11045d57c3e18728.jpg rename to docs/master/img/f93871977da52a6d11045d57c3e18728.jpg diff --git a/docs/0.19.x/img/f94e86205401e8da73308b60aa64b05b.jpg b/docs/master/img/f94e86205401e8da73308b60aa64b05b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f94e86205401e8da73308b60aa64b05b.jpg rename to docs/master/img/f94e86205401e8da73308b60aa64b05b.jpg diff --git a/docs/0.19.x/img/f996477bc9806499e6b6a1ea4d9ae8eb.jpg b/docs/master/img/f996477bc9806499e6b6a1ea4d9ae8eb.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f996477bc9806499e6b6a1ea4d9ae8eb.jpg rename to docs/master/img/f996477bc9806499e6b6a1ea4d9ae8eb.jpg diff --git a/docs/0.19.x/img/f9d2fc91f381e1772999a738d3c8c32b.jpg b/docs/master/img/f9d2fc91f381e1772999a738d3c8c32b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f9d2fc91f381e1772999a738d3c8c32b.jpg rename to docs/master/img/f9d2fc91f381e1772999a738d3c8c32b.jpg diff --git a/docs/0.19.x/img/f9e7fc3940e2875bf542aeda657d0718.jpg b/docs/master/img/f9e7fc3940e2875bf542aeda657d0718.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/f9e7fc3940e2875bf542aeda657d0718.jpg rename to docs/master/img/f9e7fc3940e2875bf542aeda657d0718.jpg diff --git a/docs/0.19.x/img/fa1895bee67b8c643cbaab1e8da8620f.jpg b/docs/master/img/fa1895bee67b8c643cbaab1e8da8620f.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/fa1895bee67b8c643cbaab1e8da8620f.jpg rename to docs/master/img/fa1895bee67b8c643cbaab1e8da8620f.jpg diff --git a/docs/0.19.x/img/fa48fa696e5242bb078fb786e6dc24c3.jpg b/docs/master/img/fa48fa696e5242bb078fb786e6dc24c3.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/fa48fa696e5242bb078fb786e6dc24c3.jpg rename to docs/master/img/fa48fa696e5242bb078fb786e6dc24c3.jpg diff --git a/docs/0.19.x/img/fae30a190cd9e5f5d06f534d956df5f5.jpg b/docs/master/img/fae30a190cd9e5f5d06f534d956df5f5.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/fae30a190cd9e5f5d06f534d956df5f5.jpg rename to docs/master/img/fae30a190cd9e5f5d06f534d956df5f5.jpg diff --git a/docs/0.19.x/img/fb8da9a6dd6e45015b629002d748d9b1.jpg b/docs/master/img/fb8da9a6dd6e45015b629002d748d9b1.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/fb8da9a6dd6e45015b629002d748d9b1.jpg rename to docs/master/img/fb8da9a6dd6e45015b629002d748d9b1.jpg diff --git a/docs/0.19.x/img/fb9cbfd2ff15ac51a36902f0a6037c28.jpg b/docs/master/img/fb9cbfd2ff15ac51a36902f0a6037c28.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/fb9cbfd2ff15ac51a36902f0a6037c28.jpg rename to docs/master/img/fb9cbfd2ff15ac51a36902f0a6037c28.jpg diff --git a/docs/0.19.x/img/fc080793a40b71dc553fe8966ad7516a.jpg b/docs/master/img/fc080793a40b71dc553fe8966ad7516a.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/fc080793a40b71dc553fe8966ad7516a.jpg rename to docs/master/img/fc080793a40b71dc553fe8966ad7516a.jpg diff --git a/docs/0.19.x/img/fc333385a9012524b39bc23303de30d4.jpg b/docs/master/img/fc333385a9012524b39bc23303de30d4.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/fc333385a9012524b39bc23303de30d4.jpg rename to docs/master/img/fc333385a9012524b39bc23303de30d4.jpg diff --git a/docs/0.19.x/img/fcf31635bf1c46833111df71ab92b68e.jpg b/docs/master/img/fcf31635bf1c46833111df71ab92b68e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/fcf31635bf1c46833111df71ab92b68e.jpg rename to docs/master/img/fcf31635bf1c46833111df71ab92b68e.jpg diff --git a/docs/0.21.3/img/fd132d0faf19fdc76254a6317ed1acfd.jpg b/docs/master/img/fd132d0faf19fdc76254a6317ed1acfd.jpg similarity index 100% rename from docs/0.21.3/img/fd132d0faf19fdc76254a6317ed1acfd.jpg rename to docs/master/img/fd132d0faf19fdc76254a6317ed1acfd.jpg diff --git a/docs/0.21.3/img/fd132d0faf19fdc76254a6317ed1acfd.png b/docs/master/img/fd132d0faf19fdc76254a6317ed1acfd.png similarity index 100% rename from docs/0.21.3/img/fd132d0faf19fdc76254a6317ed1acfd.png rename to docs/master/img/fd132d0faf19fdc76254a6317ed1acfd.png diff --git a/docs/0.19.x/img/fd6f65ce4fb7491d7628d1ce576c19d4.jpg b/docs/master/img/fd6f65ce4fb7491d7628d1ce576c19d4.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/fd6f65ce4fb7491d7628d1ce576c19d4.jpg rename to docs/master/img/fd6f65ce4fb7491d7628d1ce576c19d4.jpg diff --git a/docs/0.19.x/img/fd785ede0569b8be0bea11bc8eecd583.jpg b/docs/master/img/fd785ede0569b8be0bea11bc8eecd583.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/fd785ede0569b8be0bea11bc8eecd583.jpg rename to docs/master/img/fd785ede0569b8be0bea11bc8eecd583.jpg diff --git a/docs/0.19.x/img/fde3a2898bfc0ce1823058fe7b706b9e.jpg b/docs/master/img/fde3a2898bfc0ce1823058fe7b706b9e.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/fde3a2898bfc0ce1823058fe7b706b9e.jpg rename to docs/master/img/fde3a2898bfc0ce1823058fe7b706b9e.jpg diff --git a/docs/0.19.x/img/fdff527ccbac4fd87c2ca9c4bed5fce2.jpg b/docs/master/img/fdff527ccbac4fd87c2ca9c4bed5fce2.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/fdff527ccbac4fd87c2ca9c4bed5fce2.jpg rename to docs/master/img/fdff527ccbac4fd87c2ca9c4bed5fce2.jpg diff --git a/docs/0.19.x/img/fe1d79339349f9b6263e123094ffce7b.jpg b/docs/master/img/fe1d79339349f9b6263e123094ffce7b.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/fe1d79339349f9b6263e123094ffce7b.jpg rename to docs/master/img/fe1d79339349f9b6263e123094ffce7b.jpg diff --git a/docs/0.19.x/img/fe5ed835e0d3407e3f2d694d8bc049a1.jpg b/docs/master/img/fe5ed835e0d3407e3f2d694d8bc049a1.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/fe5ed835e0d3407e3f2d694d8bc049a1.jpg rename to docs/master/img/fe5ed835e0d3407e3f2d694d8bc049a1.jpg diff --git a/docs/0.19.x/img/fe62193b4391c9f60e373f03623696ac.jpg b/docs/master/img/fe62193b4391c9f60e373f03623696ac.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/fe62193b4391c9f60e373f03623696ac.jpg rename to docs/master/img/fe62193b4391c9f60e373f03623696ac.jpg diff --git a/docs/0.19.x/img/fe9e5bb155154914f761d6497915e9cb.jpg b/docs/master/img/fe9e5bb155154914f761d6497915e9cb.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/fe9e5bb155154914f761d6497915e9cb.jpg rename to docs/master/img/fe9e5bb155154914f761d6497915e9cb.jpg diff --git a/docs/0.19.x/img/ff5428ca3c50ed06f5162ad194377188.jpg b/docs/master/img/ff5428ca3c50ed06f5162ad194377188.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ff5428ca3c50ed06f5162ad194377188.jpg rename to docs/master/img/ff5428ca3c50ed06f5162ad194377188.jpg diff --git a/docs/0.19.x/img/ff5e98366afa13070d3b410c55a80db1.jpg b/docs/master/img/ff5e98366afa13070d3b410c55a80db1.jpg old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/ff5e98366afa13070d3b410c55a80db1.jpg rename to docs/master/img/ff5e98366afa13070d3b410c55a80db1.jpg diff --git a/docs/0.21.3/img/ffecfca02992b6a85e966c9440cb40dd.jpg b/docs/master/img/ffecfca02992b6a85e966c9440cb40dd.jpg similarity index 100% rename from docs/0.21.3/img/ffecfca02992b6a85e966c9440cb40dd.jpg rename to docs/master/img/ffecfca02992b6a85e966c9440cb40dd.jpg diff --git a/docs/0.21.3/img/ffecfca02992b6a85e966c9440cb40dd2.jpg b/docs/master/img/ffecfca02992b6a85e966c9440cb40dd2.jpg similarity index 100% rename from docs/0.21.3/img/ffecfca02992b6a85e966c9440cb40dd2.jpg rename to docs/master/img/ffecfca02992b6a85e966c9440cb40dd2.jpg diff --git a/docs/0.21.3/img/grid_search_cross_validation.png b/docs/master/img/grid_search_cross_validation.png similarity index 100% rename from docs/0.21.3/img/grid_search_cross_validation.png rename to docs/master/img/grid_search_cross_validation.png diff --git a/docs/0.21.3/img/grid_search_workflow.png b/docs/master/img/grid_search_workflow.png similarity index 100% rename from docs/0.21.3/img/grid_search_workflow.png rename to docs/master/img/grid_search_workflow.png diff --git a/docs/0.21.3/img/iris.jpg b/docs/master/img/iris.jpg similarity index 100% rename from docs/0.21.3/img/iris.jpg rename to docs/master/img/iris.jpg diff --git a/docs/0.21.3/img/knn01.png b/docs/master/img/knn01.png similarity index 100% rename from docs/0.21.3/img/knn01.png rename to docs/master/img/knn01.png diff --git a/docs/0.21.3/img/knn02.png b/docs/master/img/knn02.png similarity index 100% rename from docs/0.21.3/img/knn02.png rename to docs/master/img/knn02.png diff --git a/docs/0.21.3/img/knn03.png b/docs/master/img/knn03.png similarity index 100% rename from docs/0.21.3/img/knn03.png rename to docs/master/img/knn03.png diff --git a/docs/0.21.3/img/knn04.png b/docs/master/img/knn04.png similarity index 100% rename from docs/0.21.3/img/knn04.png rename to docs/master/img/knn04.png diff --git a/docs/0.21.3/img/knn05.png b/docs/master/img/knn05.png similarity index 100% rename from docs/0.21.3/img/knn05.png rename to docs/master/img/knn05.png diff --git a/docs/0.21.3/img/preprocessing001.png b/docs/master/img/preprocessing001.png similarity index 100% rename from docs/0.21.3/img/preprocessing001.png rename to docs/master/img/preprocessing001.png diff --git a/docs/0.21.3/img/preprocessing002.png b/docs/master/img/preprocessing002.png similarity index 100% rename from docs/0.21.3/img/preprocessing002.png rename to docs/master/img/preprocessing002.png diff --git a/docs/0.21.3/img/projection001.png b/docs/master/img/projection001.png similarity index 100% rename from docs/0.21.3/img/projection001.png rename to docs/master/img/projection001.png diff --git a/docs/0.21.3/img/projection002.png b/docs/master/img/projection002.png similarity index 100% rename from docs/0.21.3/img/projection002.png rename to docs/master/img/projection002.png diff --git a/docs/0.21.3/img/score001.png b/docs/master/img/score001.png similarity index 100% rename from docs/0.21.3/img/score001.png rename to docs/master/img/score001.png diff --git a/docs/0.21.3/img/score002.png b/docs/master/img/score002.png similarity index 100% rename from docs/0.21.3/img/score002.png rename to docs/master/img/score002.png diff --git a/docs/0.21.3/img/score003.png b/docs/master/img/score003.png similarity index 100% rename from docs/0.21.3/img/score003.png rename to docs/master/img/score003.png diff --git a/docs/0.21.3/img/score004.png b/docs/master/img/score004.png similarity index 100% rename from docs/0.21.3/img/score004.png rename to docs/master/img/score004.png diff --git a/docs/0.21.3/img/score005.png b/docs/master/img/score005.png similarity index 100% rename from docs/0.21.3/img/score005.png rename to docs/master/img/score005.png diff --git a/docs/0.21.3/img/score006.png b/docs/master/img/score006.png similarity index 100% rename from docs/0.21.3/img/score006.png rename to docs/master/img/score006.png diff --git a/docs/0.21.3/img/score007.png b/docs/master/img/score007.png similarity index 100% rename from docs/0.21.3/img/score007.png rename to docs/master/img/score007.png diff --git a/docs/0.21.3/img/score008.png b/docs/master/img/score008.png similarity index 100% rename from docs/0.21.3/img/score008.png rename to docs/master/img/score008.png diff --git a/docs/0.21.3/img/score009.png b/docs/master/img/score009.png similarity index 100% rename from docs/0.21.3/img/score009.png rename to docs/master/img/score009.png diff --git a/docs/0.21.3/img/sphx_glr_plot_agglomerative_clustering_0011.png b/docs/master/img/sphx_glr_plot_agglomerative_clustering_0011.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_agglomerative_clustering_0011.png rename to docs/master/img/sphx_glr_plot_agglomerative_clustering_0011.png diff --git a/docs/0.21.3/img/sphx_glr_plot_agglomerative_clustering_0021.png b/docs/master/img/sphx_glr_plot_agglomerative_clustering_0021.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_agglomerative_clustering_0021.png rename to docs/master/img/sphx_glr_plot_agglomerative_clustering_0021.png diff --git a/docs/0.21.3/img/sphx_glr_plot_agglomerative_clustering_0031.png b/docs/master/img/sphx_glr_plot_agglomerative_clustering_0031.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_agglomerative_clustering_0031.png rename to docs/master/img/sphx_glr_plot_agglomerative_clustering_0031.png diff --git a/docs/0.21.3/img/sphx_glr_plot_agglomerative_clustering_0041.png b/docs/master/img/sphx_glr_plot_agglomerative_clustering_0041.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_agglomerative_clustering_0041.png rename to docs/master/img/sphx_glr_plot_agglomerative_clustering_0041.png diff --git a/docs/0.21.3/img/sphx_glr_plot_anomaly_comparison_0011.png b/docs/master/img/sphx_glr_plot_anomaly_comparison_0011.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_anomaly_comparison_0011.png rename to docs/master/img/sphx_glr_plot_anomaly_comparison_0011.png diff --git a/docs/0.21.3/img/sphx_glr_plot_coin_ward_segmentation_0011.png b/docs/master/img/sphx_glr_plot_coin_ward_segmentation_0011.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_coin_ward_segmentation_0011.png rename to docs/master/img/sphx_glr_plot_coin_ward_segmentation_0011.png diff --git a/docs/0.21.3/img/sphx_glr_plot_cv_indices_0041.png b/docs/master/img/sphx_glr_plot_cv_indices_0041.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_cv_indices_0041.png rename to docs/master/img/sphx_glr_plot_cv_indices_0041.png diff --git a/docs/0.21.3/img/sphx_glr_plot_cv_indices_0051.png b/docs/master/img/sphx_glr_plot_cv_indices_0051.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_cv_indices_0051.png rename to docs/master/img/sphx_glr_plot_cv_indices_0051.png diff --git a/docs/0.21.3/img/sphx_glr_plot_cv_indices_0061.png b/docs/master/img/sphx_glr_plot_cv_indices_0061.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_cv_indices_0061.png rename to docs/master/img/sphx_glr_plot_cv_indices_0061.png diff --git a/docs/0.21.3/img/sphx_glr_plot_cv_indices_0071.png b/docs/master/img/sphx_glr_plot_cv_indices_0071.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_cv_indices_0071.png rename to docs/master/img/sphx_glr_plot_cv_indices_0071.png diff --git a/docs/0.21.3/img/sphx_glr_plot_cv_indices_0081.png b/docs/master/img/sphx_glr_plot_cv_indices_0081.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_cv_indices_0081.png rename to docs/master/img/sphx_glr_plot_cv_indices_0081.png diff --git a/docs/0.21.3/img/sphx_glr_plot_cv_indices_0091.png b/docs/master/img/sphx_glr_plot_cv_indices_0091.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_cv_indices_0091.png rename to docs/master/img/sphx_glr_plot_cv_indices_0091.png diff --git a/docs/0.21.3/img/sphx_glr_plot_faces_decomposition_0111.png b/docs/master/img/sphx_glr_plot_faces_decomposition_0111.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_faces_decomposition_0111.png rename to docs/master/img/sphx_glr_plot_faces_decomposition_0111.png diff --git a/docs/0.21.3/img/sphx_glr_plot_faces_decomposition_0121.png b/docs/master/img/sphx_glr_plot_faces_decomposition_0121.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_faces_decomposition_0121.png rename to docs/master/img/sphx_glr_plot_faces_decomposition_0121.png diff --git a/docs/0.21.3/img/sphx_glr_plot_faces_decomposition_0131.png b/docs/master/img/sphx_glr_plot_faces_decomposition_0131.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_faces_decomposition_0131.png rename to docs/master/img/sphx_glr_plot_faces_decomposition_0131.png diff --git a/docs/0.21.3/img/sphx_glr_plot_faces_decomposition_0141.png b/docs/master/img/sphx_glr_plot_faces_decomposition_0141.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_faces_decomposition_0141.png rename to docs/master/img/sphx_glr_plot_faces_decomposition_0141.png diff --git a/docs/0.21.3/img/sphx_glr_plot_lda_qda_0011.png b/docs/master/img/sphx_glr_plot_lda_qda_0011.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_lda_qda_0011.png rename to docs/master/img/sphx_glr_plot_lda_qda_0011.png diff --git a/docs/0.21.3/img/sphx_glr_plot_linkage_comparison_0011.png b/docs/master/img/sphx_glr_plot_linkage_comparison_0011.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_linkage_comparison_0011.png rename to docs/master/img/sphx_glr_plot_linkage_comparison_0011.png diff --git a/docs/0.21.3/img/sphx_glr_plot_lof_novelty_detection_0011.png b/docs/master/img/sphx_glr_plot_lof_novelty_detection_0011.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_lof_novelty_detection_0011.png rename to docs/master/img/sphx_glr_plot_lof_novelty_detection_0011.png diff --git a/docs/0.21.3/img/sphx_glr_plot_lof_outlier_detection_0011.png b/docs/master/img/sphx_glr_plot_lof_outlier_detection_0011.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_lof_outlier_detection_0011.png rename to docs/master/img/sphx_glr_plot_lof_outlier_detection_0011.png diff --git a/docs/0.21.3/img/sphx_glr_plot_map_data_to_normal_0011.png b/docs/master/img/sphx_glr_plot_map_data_to_normal_0011.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_map_data_to_normal_0011.png rename to docs/master/img/sphx_glr_plot_map_data_to_normal_0011.png diff --git a/docs/0.21.3/img/sphx_glr_plot_mlp_alpha_0011.png b/docs/master/img/sphx_glr_plot_mlp_alpha_0011.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_mlp_alpha_0011.png rename to docs/master/img/sphx_glr_plot_mlp_alpha_0011.png diff --git a/docs/0.21.3/img/sphx_glr_plot_multioutput_face_completion_0011.png b/docs/master/img/sphx_glr_plot_multioutput_face_completion_0011.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_multioutput_face_completion_0011.png rename to docs/master/img/sphx_glr_plot_multioutput_face_completion_0011.png diff --git a/docs/0.21.3/img/sphx_glr_plot_nca_classification_0011.png b/docs/master/img/sphx_glr_plot_nca_classification_0011.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_nca_classification_0011.png rename to docs/master/img/sphx_glr_plot_nca_classification_0011.png diff --git a/docs/0.21.3/img/sphx_glr_plot_nca_classification_0021.png b/docs/master/img/sphx_glr_plot_nca_classification_0021.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_nca_classification_0021.png rename to docs/master/img/sphx_glr_plot_nca_classification_0021.png diff --git a/docs/0.21.3/img/sphx_glr_plot_nca_dim_reduction_0011.png b/docs/master/img/sphx_glr_plot_nca_dim_reduction_0011.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_nca_dim_reduction_0011.png rename to docs/master/img/sphx_glr_plot_nca_dim_reduction_0011.png diff --git a/docs/0.21.3/img/sphx_glr_plot_nca_dim_reduction_0021.png b/docs/master/img/sphx_glr_plot_nca_dim_reduction_0021.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_nca_dim_reduction_0021.png rename to docs/master/img/sphx_glr_plot_nca_dim_reduction_0021.png diff --git a/docs/0.21.3/img/sphx_glr_plot_nca_dim_reduction_0031.png b/docs/master/img/sphx_glr_plot_nca_dim_reduction_0031.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_nca_dim_reduction_0031.png rename to docs/master/img/sphx_glr_plot_nca_dim_reduction_0031.png diff --git a/docs/0.21.3/img/sphx_glr_plot_optics_0011.png b/docs/master/img/sphx_glr_plot_optics_0011.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_optics_0011.png rename to docs/master/img/sphx_glr_plot_optics_0011.png diff --git a/docs/0.21.3/img/sphx_glr_plot_partial_dependence_0021.png b/docs/master/img/sphx_glr_plot_partial_dependence_0021.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_partial_dependence_0021.png rename to docs/master/img/sphx_glr_plot_partial_dependence_0021.png diff --git a/docs/0.21.3/img/sphx_glr_plot_voting_regressor_0011.png b/docs/master/img/sphx_glr_plot_voting_regressor_0011.png similarity index 100% rename from docs/0.21.3/img/sphx_glr_plot_voting_regressor_0011.png rename to docs/master/img/sphx_glr_plot_voting_regressor_0011.png diff --git a/docs/0.19.x/img/scikit-learn-logo.png b/img/logo/scikit-learn-logo.png old mode 100755 new mode 100644 similarity index 100% rename from docs/0.19.x/img/scikit-learn-logo.png rename to img/logo/scikit-learn-logo.png diff --git a/run_website.sh b/run_website.sh index a5a28745791494de43ecc149813cf81f864691ac..c8a9456db8e59005bf07f9d8586960d9879202c1 100644 --- a/run_website.sh +++ b/run_website.sh @@ -2,7 +2,7 @@ loginfo() { echo "[INFO] $@"; } logerror() { echo "[ERROR] $@" 1>&2; } -versions="0.21.3 0.19.x" +versions="examples" python3 src/init_gitbook.py versions python3 src/script.py "home" "book" rm -rf node_modules/gitbook-plugin-tbfed-pagefooter