sklearn调包侠之学习曲线和Pipeline

作者: 罗罗攀 | 来源:发表于2018-06-30 09:43 被阅读178次

今天不单独讲解某个机器学习算法,而是讲解机器学习中常用的工具或者说是方法。一是绘制学习曲线,看模型的好坏程度(过拟合还是欠拟合);而是减少代码量,利用pipeline构造算法流水线。

学习曲线

训练模型通常有三种情况:欠拟合、拟合较好和过拟合。欠拟合一般比较好判别,模型准确度不高都可以说是模型欠拟合。但判断模型是否过拟合,单独看准确度是不可信的,模型越复杂,其准确度越高,也很容易过拟合,这时就需要绘制学习曲线观察模型的拟合情况。

绘制流程
  • 把数据集划分为多等分(5份或其它)
  • 把数据集划分为训练集和测试集
  • 以训练集准确性和验证集准确性做为纵坐标,训练集个数作为横坐标。
  • 每次增加1等分
绘制函数

在sklearn中,可以通过sklearn.model_selection中的learning_curve来画出学习曲线。这里使用之前KNN算法,通过图可以看出,KNN算法是处于欠拟合状态。

from sklearn.neighbors import KNeighborsClassifier,RadiusNeighborsClassifier

model1 = KNeighborsClassifier(n_neighbors=2)
model1.fit(X_train, Y_train)
score1 = model1.score(X_test, Y_test)

from sklearn.model_selection import learning_curve

train_size, train_score, test_score = learning_curve(model1, X, Y, cv=10, train_sizes=np.linspace(0.1, 1.0, 5))

train_scores_mean = np.mean(train_score, axis=1)
train_scores_std = np.std(train_score, axis=1)
test_scores_mean = np.mean(test_score, axis=1)
test_scores_std = np.std(test_score, axis=1)

plt.fill_between(train_size, train_scores_mean - train_scores_std,
                     train_scores_mean + train_scores_std, alpha=0.1,
                     color="r")
plt.fill_between(train_size, test_scores_mean - test_scores_std,
                     test_scores_mean + test_scores_std, alpha=0.1, color="g")
plt.plot(train_size, train_scores_mean, 'o--', color="r",
             label="Training score")
plt.plot(train_size, test_scores_mean, 'o-', color="g",
             label="Cross-validation score")

plt.grid()
plt.title('Learn Curve for KNN')
plt.legend(loc="best")

Pipeline

在之前的线性回归案例中,我们可以加入多项式项来增加模型的精度,但每次都需要先将数据通过PolynomialFeatures转换为新数据,然后再拟合模型,模型预测和评估也需要将测试集进行多项式转换。那能不能将数据处理和模型拟合结合在一起,减少代码量了?答案是可以,通过Pipeline(管道)技术就行。

Pipeline技术

Pipeline 的中间过程由sklearn相适配的转换器(transformer)构成,最后一步是一个estimator(模型)。中间的节点都可以执行fit和transform方法,这样预处理都可以封装进去;最后节点只需要实现fit方法,通常就是我们的模型。流程如下图所示。

Pipeline代码

以线性回归为例:

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import Normalizer
norm = Normalizer()
poly = PolynomialFeatures(2, include_bias=False)
lr = LinearRegression()
pipeline = Pipeline([('norm', norm),('poly',poly),('lr', lr)])
pipeline.fit(X_train, y_train)

相关文章

  • sklearn调包侠之学习曲线和Pipeline

    今天不单独讲解某个机器学习算法,而是讲解机器学习中常用的工具或者说是方法。一是绘制学习曲线,看模型的好坏程度(过拟...

  • sklearn的基本使用

    前言 于sklearn的使用来说,目前只是想成为一名调包侠,但是调包侠起码也得知道有哪些包可以调,为此找了一些教程...

  • sklearn调包侠之KNN算法

    天下武功,唯快不破。今天就正式讲解如何通过《sklearn小抄》武林秘籍,成为一代宗师调包侠。欲练此功,必先自宫;...

  • sklearn调包侠之线性回归

    线性回归原理 如图所示,这是一组二维的数据,我们先想想如何通过一条直线较好的拟合这些散点了?直白的说:尽量让拟合的...

  • sklearn调包侠之逻辑回归

    算法原理 传送门:机器学习实战之Logistic回归 正则化 这里补充下正则化的知识。当一个模型太复杂时,就容易过...

  • API - Sklearn三大模型 - Transformer、

    sklearn.pipeline.Pipeline == 管道Pipeline == 在Sklearn当中有三大模...

  • sklearn调包侠之K-Means

    K-Means算法 k-均值算法(K-Means算法)是一种典型的无监督机器学习算法,用来解决聚类问题。 算法流程...

  • sklearn调包侠之PCA降维

    PCA PCA(主成分分析),它是一种维度约减算法,即把高维度数据在损失最小的情况下转换为低纬度数据的算法。 实战...

  • sklearn调包侠之支持向量机

    算法原理 对于支持向量机原理,可参考该系列博客(https://www.cnblogs.com/pinard/p/...

  • sklearn调包侠之朴素贝叶斯

    文档处理 朴素贝叶斯算法常用于文档的分类问题上,但计算机是不能直接理解文档内容的,怎么把文档内容转换为计算机可以计...

网友评论

本文标题:sklearn调包侠之学习曲线和Pipeline

本文链接:https://www.haomeiwen.com/subject/dzjayftx.html