机器学习--scikit-learn(4)---过拟合与模型保存

此文章要讲的是如何判断模型是否过拟合,如何修正它,以及修正好的模型,如何保存,以便留到下次使用。

首先要先搞清楚一个概念,什么是过拟合?

1,过拟合,欠拟合概念

过拟合,按照我自己的理解就是,学习得太猛了,太细枝末节了,导致自己不会举一反三,平时做题做的都是一类,练习的时候都是满分,等到考试的时候题目条件稍微一变化,就不会做了。

欠拟合,就是学的太水了,平时练习题都没最好,考试当然死得惨。

所以可以把过拟合当成书呆子学书,欠拟合就是学渣学书,都考不好。

如何解决模型的这个问题呢?那就要先看看下面一节中的例子。

 

2,如何判断模型拟合情况

首先我们先看一个例子。这个例子是引用自带的数字数据计算出,利用SVC来对数据进行拟合,画出测试集与训练集的mse(最小均方误差)曲线,拟合程度就是要看随着datasizes的加大,训练集和测试集的mse应该要趋于一致,并且都比较小。否则就是欠拟合或者过拟合。过拟合时训练集的mse效果非常好,测试集的就不行了。

 

import numpy as np
from sklearn import datasets
from sklearn.model_selection import learning_curve
from sklearn.svm import SVC
import matplotlib.pyplot as plt

#加载自带数据 digits
digits = datasets.load_digits()
x = digits.data
y = digits.target

#划分训练集与测试集,拟合模型
train_sizes,train_loss,test_loss = learning_curve(SVC(gamma=0.001),x,y,
                                                  cv=10,
                                                  scoring='neg_mean_squared_error',
                                                  train_sizes=[0.1,0.25,0.5,0.75,1])
train_loss_mean = -np.mean(train_loss,axis=1)
test_loss_mean = -np.mean(test_loss,axis=1)

plt.plot(train_sizes,train_loss_mean,'o-',color='r',label='Training')
plt.plot(train_sizes,test_loss_mean,'o-',color='g',label='Cross-validation')

plt.xlabel('Training examples')
plt.ylabel('Loss')
plt.legend('best')
plt.show()

在这个例子中我们要使用from sklearn.model_selection import learning_curve,来计算train_sizes,train_loss,test_loss。

可以看出训练集和测试集的mse是趋于平稳的,证明拟合效果不错。

机器学习--scikit-learn(4)---过拟合与模型保存_第1张图片

 

如果得出的效果不佳,我们就可以通过改变模型里的参数,来观察整个模型的拟合程度,进而修正模型的拟合程度。

 

 

3.模型保存

已经训练好的模型,如何保存下来,用作下次使用呢?很简单。

有如下几种方法。

第一,利用pickle

import pickle

with open(‘你要保存模型的路径+文件名’,‘wb’)as f:

     pickle.dump(clf,f) clf是你要保存的模型的名字。

这样就已经存放好了。

 

如果下次要使用的话,就是:

with open(‘路径+文件名’,‘rb’)as f:

    clf2 = pickle.load(f)

   clf2.predict(你需要预测的数据)

就Ok啦~

 

 

第二 joblib

from sklearn.externals import joblib

#save

joblib.dump(clf,'path+文件名')

#restore

clf3 = joblib.load('文件名')

 

文件名的后缀都是xx.pickle。

 

以上是跟着莫烦python sklearn库的学习笔记全部。

你可能感兴趣的:(机器学习)