学习曲线作用:

学习曲线是什么?简单来说,就是用学习曲线(learning curve)来判断模型状态:过拟合还是欠拟合。

学习曲线定义:

学习曲线是根据不同训练集大小,模型在训练集和验证集上的得分变化曲线。

学习曲线通俗解释:

也就是以样本数为横坐标,训练和交叉验证集上的得分(如准确率)为纵坐标。learning curve可以帮助我们判断模型现在所处的状态:过拟合(overfiting / high variance) or 欠拟合。

模型欠拟合、过拟合、 时对应的学习曲线如下图所示:

对上图的解释:

(1)左上角的图中训练集和验证集上的曲线能够收敛。在训练集合验证集上准确率相差不大,却都很差。这说明模拟对已知数据和未知都不能进行准确的预测,属于高偏差(欠拟合)。这种情况模型很可能是欠拟合。可以针对欠拟合采取对应的措施。

欠拟合措施:我们可以增加模型参数(特征),比如,构建更多的特征,减小正则项。采用更复杂的模型。此时通过增加数据量是不起作用的。(为什么?)

(2)右上角的图中模型在训练集上和验证集上的准确率差距很大。说明模型能够很好的拟合已知数据,但是泛化能力很差,属于高方差(过拟合)。模拟很可能过拟合,要采取过拟合对应的措施。

过拟合措施:我们可以增大训练集,降低模型复杂度,增大正则项,或者通过特征选择减少特征数,即做一下feature selection,挑出较好的feature的subset来做training

(3)理想情况是找到偏差和方差都很小的情况,即收敛且误差较小。如右角的图(完美)

Python代码(sklearn库):

train_sizes, train_scores, test_scores = learning_curve(estimator, X, y, cv=cv, n_jobs=n_jobs, train_sizes=[0.1,0.25,0.5,0.75,1])print(train_sizes)print(train_scores)print(test_scores)
train_scores_mean = np.mean(train_scores, axis=1)
train_scores_std = np.std(train_scores, axis=1)
test_scores_mean = np.mean(test_scores, axis=1)
test_scores_std = np.std(test_scores, axis=1)
[ 143  359  718 1077 1437]
[[0.93006993 0.94405594 0.95104895 0.87412587 0.95804196][0.8718663  0.90529248 0.91643454 0.88022284 0.90807799][0.8718663  0.86908078 0.90807799 0.88857939 0.8816156 ][0.86258124 0.88857939 0.89415042 0.87093779 0.87743733][0.8559499  0.86986778 0.87543493 0.86499652 0.85247042]]
[[0.79722222 0.73611111 0.68888889 0.76388889 0.74444444][0.81944444 0.86111111 0.83611111 0.83055556 0.825     ][0.82777778 0.86666667 0.84722222 0.85555556 0.85      ][0.83611111 0.89444444 0.85277778 0.85277778 0.84444444][0.825      0.89444444 0.85       0.86111111 0.86944444]]

learning_curve函数中参数解释:

estimator表示我们所使用的的估计器
X输入的feature
y : 输入的target
CV: 做训练集切割成训练集和验证集的时候的折数,cv=5就是5折交叉验证。
train_sizes: 随着训练集的增大,选择在10%,25%,50%,75%,100%的训练集大小上进行采样。比如(CV= 5)10%的意思是先在训练集上选取10%的数据进行五折交叉验证。

返回值解释:

train_sizes:为列表。对应10%,25%,50%,75%,100%的数据量。比如训练集为100,则10%的返回量为10.
train_scores:如上为numpy数组,第一行五个数据为抽取原始训练集10%的数据做的五折交叉验证的训练集指标。,第二行五个数据为抽取原始训练集25%的数据做的五折交叉验证的训练集指标。等等。
test_scores:如上为numpy数组,第一行五个数据为抽取原始训练集10%的数据做的五折交叉验证的验证集指标。,第二行五个数据为抽取原始训练集25%的数据做的五折交叉验证的验证集指标。等等。

完整代码如下:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import learning_curve
from sklearn.model_selection import ShuffleSplit
from sklearn.naive_bayes import GaussianNB
from sklearn.datasets import load_digitsdef plot_learning_curve(estimator, title, X, y, ylim=None, cv=None, n_jobs=None):'''绘制出模型的学习曲线'''plt.title(title)if ylim is not None:plt.ylim(*ylim)train_sizes, train_scores, test_scores = learning_curve(estimator, X, y, cv=cv, n_jobs=n_jobs, train_sizes=[0.1,0.25,0.5,0.75,1])train_scores_mean = np.mean(train_scores, axis=1)train_scores_std = np.std(train_scores, axis=1)test_scores_mean = np.mean(test_scores, axis=1)test_scores_std = np.std(test_scores, axis=1)plt.fill_between(train_sizes, train_scores_mean - train_scores_std, train_scores_mean + train_scores_std, alpha=0.1,color="r", )  # 把模型准确性的平均值的上下标准差的空间里用颜色填充plt.fill_between(train_sizes, test_scores_mean - test_scores_std, test_scores_mean + test_scores_std, alpha=0.1,color="g", )  # 把模型准确性的平均值的上下标准差的空间里用颜色填充plt.plot(train_sizes, train_scores_mean, "o-", color="r", label="Training score")plt.plot(train_sizes, test_scores_mean, "o-", color="g", label="Cross-validation score")plt.legend(loc="best")return plt# 加载数据集
X, y = load_digits(return_X_y=True)
cv1 = ShuffleSplit(n_splits=5, test_size=0.2, random_state=0)  # 数据集分成5份,每份中测试集比例为0.2
estimator1 = GaussianNB()title1 = "(Naive Bayes)"
plt.subplot(121)
plot_learning_curve(estimator1, title1, X, y, ylim=(0.7, 1.01), cv=cv1, n_jobs=4)
plt.show()

由图可得:随着样本数抽取增加模型有着过拟合向刚刚好过渡

机器学习之学习曲线绘制Python-skleran相关推荐

  1. 机器学习笔记——学习曲线的绘制

    机器学习笔记--学习曲线的绘制 为何要绘制学习曲线 学习曲线 高偏差(bias)的情况 高方差(variance)情况 重点总结 高方差(high variance) 高偏差(high bias) 如 ...

  2. 机器学习系列4 使用Python创建Scikit-Learn回归模型

    本文中包含的案例jupyter笔记本可在我的资源中免费下载: 机器学习系列4 使用Python创建Scikit-learn线性回归模型.ipynb 图1 使用Python和Scikit-learn库实 ...

  3. 机器学习实验二---决策树python

    机器学习实验二---决策树python 一.了解一下决策树吧 决策树基本流程 信息增益 决策树的优缺点 二.数据处理 三.决策树的构建 计算给定数据集的香农熵 按照给定特征划分数据集 选择最好的数据划 ...

  4. 机器学习——决策树模型:Python实现

    机器学习--决策树模型:Python实现 1 决策树模型的代码实现 1.1 分类决策树模型(DecisionTreeClassifier) 1.2 回归决策树模型(DecisionTreeRegres ...

  5. 机器学习(六)Python实现进阶人脸识别

    机器学习(六)Python实现进阶版人脸识别 使用到的库:dlib+Opencv python版本:3.8 编译环境:Jupyter Notebook (Anaconda3) 训练模型:dlib_fa ...

  6. 资源 | 机器学习、NLP、Python和Math最好的150余个教程(建议收藏)

    编辑 | MingMing 尽管机器学习的历史可以追溯到1959年,但目前,这个领域正以前所未有的速度发展.最近,我一直在网上寻找关于机器学习和NLP各方面的好资源,为了帮助到和我有相同需求的人,我整 ...

  7. 干货 | 请收下这份2018学习清单:150个最好的机器学习,NLP和Python教程

    本文英文出处:Robbie Allen 翻译/雷锋网字幕组 吴楚 校对/ 雷锋网 田晋阳 机器学习的发展可以追溯到1959年,有着丰富的历史.这个领域也正在以前所未有的速度进化.在之前的一篇文章中,我 ...

  8. 超过 150 个最佳机器学习,NLP 和 Python教程

    作者:chen_h 微信号 & QQ:862251340 微信公众号:coderpai 我的博客:请点击这里 我把这篇文章分为四个部分:机器学习,NLP,Python 和 数学.我在每一部分都 ...

  9. 从变量到封装:一文带你为机器学习打下坚实的Python基础 By 机器之心2017年10月13日 10:43 本文整体梳理了 Python 的基本语法与使用方法,并重点介绍了对机器学习十分重要的且常

    首先,什么是 Python?根据 Python 创建者 Guido van Rossum 所言,Python 是一个:高级编程语言,其设计的核心理念是代码的易读性,以及允许编程者通过若干行代码轻松表达 ...

最新文章

  1. 我们正处于新科学革命的起点 | 学界热议AI for Science
  2. cf手游服务器维护19年9月19,神雕侠侣2手游9月19日停服维护公告_神雕侠侣2手游9月19日更新了什么_玩游戏网...
  3. 【推荐系统】基于用户的协同过滤算法
  4. 后端技术:Java中Spring 和 Spring Boot 有哪些区别,看完你就明白了!
  5. 。。。。。etc 时域错误隐藏个人理解
  6. python3进阶开发-第一个仿博客园的项目(1)
  7. Java即时类| hashCode()方法与示例
  8. RabbitMQ和Kafka的显著差异(over)
  9. ×××须避开的高薪杀手
  10. linux url%7b怎么转化成,shell下解码url
  11. Python测试Kafka集群(pykafka)
  12. 【实验】设计一个加密算法(英文、中文)
  13. PPT宏编程——ChineseCounter
  14. 守护神 Supervisor
  15. pygame之display模块
  16. java生成word文件带上页码,使用apache poi api创建Word文档时,如何以Y的X格式添加页码?...
  17. 《嵌入式系统原理与应用》 |(三) ARM-Cortex M3处理器 知识梳理
  18. CocosCreater 接入手Q (QQ小游戏)、小米快游戏 接入指南、脱坑指南
  19. 克劳士比语录(转载)
  20. 计算机网络(一)——网络编程

热门文章

  1. 推荐几个程序设计竞赛网站
  2. 数据立方体-Hive Cube
  3. comsol官方案例学习——2、二维稳态导热
  4. 真无线蓝牙耳机哪款好?超高性价比蓝牙耳机评测
  5. Linux chkconfig
  6. yyyy-MM-dd'T'HH:mm:ss.SSS'Z'即UTC时间,与String日期转换
  7. 【甘道夫】Win7x64环境下编译Apache Hadoop2.2.0的Eclipse插件
  8. SSM(Mybatis + Spring + Spring MVC)框架整合详细步骤(附jar包和项目下载,免费的)
  9. GUI编程,简易计算器的实现
  10. readdir()函数:读取目录函数