sklearn调包侠之学习曲线和Pipeline

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

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

学习曲线

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

img_b78c7f8a4f842ec02c118ac2bde9d8cc.png
绘制流程
  • 把数据集划分为多等分(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")
img_bb4cd2590bee4a1e24df5032c20156b5.png

Pipeline

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

Pipeline技术

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

img_8ed1339d0bd102fda1158998a5ddb434.png
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)
img_0cdf7248b986119362895cf2583cf9e8.png
相关文章
|
机器学习/深度学习 Web App开发 数据可视化
训练可视化工具哪款是你的菜?MMCV一行代码随你挑
在深度学习中可视化模型的训练过程有助于我们分析模型的状态。可视化训练过程的库很多,我们将一些常用的库集成到 MMCV 中方便用户使用。在 MMCV 中使用这些库只需简单配置。在本文中将介绍这些库以及它们在 MMCV 中的使用方法。
563 0
训练可视化工具哪款是你的菜?MMCV一行代码随你挑
|
PyTorch 程序员 API
FastAI 之书(面向程序员的 FastAI)(三)(3)
FastAI 之书(面向程序员的 FastAI)(三)(3)
机器学习/深度学习 自然语言处理 程序员
18 2
机器学习/深度学习 PyTorch 程序员
22 2
|
8月前
|
Python
技巧 | 一个以假乱真的Python库,我裂开了。。
技巧 | 一个以假乱真的Python库,我裂开了。。
|
存储 数据可视化 PyTorch
学懂 ONNX,PyTorch 模型部署再也不怕!
在把 PyTorch 模型转换成 ONNX 模型时,我们往往只需要轻松地调用一句 torch.onnx.export 就行了。这个函数的接口看上去简单,但它在使用上还有着诸多的“潜规则”。在这篇教程中,我们会详细介绍 PyTorch 模型转 ONNX 模型的原理及注意事项。除此之外,我们还会介绍 PyTorch 与 ONNX 的算子对应关系,以教会大家如何处理 PyTorch 模型转换时可能会遇到的算子支持问题。
3690 0
学懂 ONNX,PyTorch 模型部署再也不怕!
|
机器学习/深度学习 自然语言处理 数据可视化
scikit-learn的5个秘密武器
虽然scikit-learn在机器学习领域很重要,但是很多人并不知道利用这个库中的一些强大的功能。本文将介绍scikit-learn中5个最有用的5个隐藏的瑰宝,充分利用这些秘密武器将有效提高你的机器学习处理的效率!
255 0
scikit-learn的5个秘密武器
|
机器学习/深度学习 算法 JavaScript
sklearn调包侠之逻辑回归
本系列教程为《机器学习实战》的读书笔记。首先,讲讲写本系列教程的原因: 第一,《机器学习实战》的代码由Python2编写,有些代码在Python3上运行已会报错,本教程基于Python3进行代码的修订. 第二:之前看了一些机器学习的书籍,没有进行记录,很快就忘记掉了,通过编写教程也是一种复习的过程. 第三,机器学习相对于爬虫和数据分析而言,学习难度更大,希望通过本系列文字教程,让读者在学习机器学习的路上少走弯路。
|
算法 数据挖掘 Python
sklearn调包侠之K-Means
K-Means算法 k-均值算法(K-Means算法)是一种典型的无监督机器学习算法,用来解决聚类问题。 算法流程 K-Means聚类首先随机确定 K 个初始点作为质心(这也是K-Means聚类的一个问题,这个K值的不合理选择会使得模型不适应和解释性差)。
1536 0