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

v2-8831fb96dff74c64bdaad9790e1aa61b_1440w.jpg?source=172ae18b

v2-38b709c19a7d76bd690fc6f37866a84f_b.jpg

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

学习曲线

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

v2-5be7c68aeedbd444661fd830080f60e2_b.jpg

绘制流程

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

绘制函数

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

  1. from sklearn.neighbors import KNeighborsClassifier,RadiusNeighborsClassifier
  2. model1 = KNeighborsClassifier(n_neighbors=2)
  3. model1.fit(X_train, Y_train)
  4. score1 = model1.score(X_test, Y_test)
  5. from sklearn.model_selection import learning_curve
  6. train_size, train_score, test_score = learning_curve(model1, X, Y, cv=10, train_sizes=np.linspace(0.1, 1.0, 5))
  7. train_scores_mean = np.mean(train_score, axis=1)
  8. train_scores_std = np.std(train_score, axis=1)
  9. test_scores_mean = np.mean(test_score, axis=1)
  10. test_scores_std = np.std(test_score, axis=1)
  11. plt.fill_between(train_size, train_scores_mean - train_scores_std,
  12. train_scores_mean + train_scores_std, alpha=0.1,
  13. color="r")
  14. plt.fill_between(train_size, test_scores_mean - test_scores_std,
  15. test_scores_mean + test_scores_std, alpha=0.1, color="g")
  16. plt.plot(train_size, train_scores_mean, 'o--', color="r",
  17. label="Training score")
  18. plt.plot(train_size, test_scores_mean, 'o-', color="g",
  19. label="Cross-validation score")
  20. plt.grid()
  21. plt.title('Learn Curve for KNN')
  22. plt.legend(loc="best")

v2-ac1dcccef002f5847a2cbba577b03630_b.jpg

Pipeline

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

Pipeline技术

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

v2-9674b0582b8b37faab47d5a89da3de09_b.jpg

Pipeline代码

以线性回归为例:

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

v2-d6605b19e8380e6f5a110d3257b4118e_b.jpg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值