本文主要是介绍为什么要训练数据集和测试数据集——模型的泛化能力,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
首先,自定义与上一节同样的数据集。
对数据进行 train test split,对测试集数据与预测数据进行均方误差分析:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_errorlin_reg = LinearRegression()
lin_reg.fit(X_train, y_train)
y_predict = lin_reg.predict(X_test)
mean_squared_error(y_test, y_predict)
使用线性回归进行拟合的误差为:2.2199965269396573
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.preprocessing import StandardScalerdef PolynomialRegression(degree):return Pipeline([("poly", PolynomialFeatures(degree=degree)),("std_scaler", StandardScaler()),("lin_reg", LinearRegression())])poly2_reg = PolynomialRegression(degree=2)
poly2_reg.fit(X_train, y_train)
y2_predict = poly2_reg.predict(X_test)
mean_squared_error(y_test, y2_predict)
使用 Pipeline 进行拟合,当 degree=2 ,此时误差为:0.8035641056297902
当 degree=10 ,此时误差为:0.9212930722150697
当 degree=100 ,此时误差为:13123135111.84452
结论:通过 train test split 将数据分为训练集和测试集,使用训练集进行训练,测试集(未进行训练的新数据)进行预测,这样一个模型得到的预测结果就可以检验模型的泛化能力,由结果来看,当 degree=2 时,泛化能力最好,也是最能反应数据特点的拟合效果。
模型复杂度和模型准确率的关系如上图,训练集和测试集的曲线表现不同,想要一个模型拟合的好,往往是是要寻找泛化能力最好的地方,即下图的垂直线的位置:
这篇关于为什么要训练数据集和测试数据集——模型的泛化能力的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!