统计学习:模型评估与模型选择---多项式拟合⽬标函数(python实现版)
统计学习的⽬的是使学到的模型不仅对已知数据,⽽且对于未知数据都能很好地预测能⼒。不同的学习⽅法会给出不同的模型。当损失函数给定时,基于损失函数的模型训练误差(training error)和模型的测试误差(test error)就⾃然成为学习⽅法评估的标准。
如果⼀味的追求提⾼对训练数据的预测能⼒,所选模型的复杂度往往会⽐真模型更⾼。**这种现象被称为–过拟合。**通俗的的解释就是,模型在训练集上表现得⾮常好,但是在预测集上表现得很差。
本次代码使⽤sklearn包来完成模型拟合,使⽤绘图包matplotlib完成绘图制作。
具体的思路就是假设⼀个真模型的函数,然后在真模型函数上进⾏随机取样,但是这⼀取样条件是要服从正态分布。使⽤随机序列产⽣随机值进⾏取样,然后训练模型,使⽤多项式拟合。
import matplotlib.pyplot as plt
import numpy as np
# ⼗字交叉验证,模块导⼊
del_selection import cross_val_score
# 可以将许多算法模型串联起来,⽐如特征提取、归⼀化、分类等组织在⼀起形成典型的机器学习问题⼯作流
from sklearn import pipeline
# 数据预处理模块,⽤于多项式拟合
from sklearn.preprocessing import PolynomialFeatures
# 添加线性回归模型
from sklearn.linear_model import LinearRegression
def true_function(x):
p(-x)*np.sin(x)
def data_samples():
np.random.seed(0)
n_samples =30
# .rand ⽣成0-1之间的随机数字
X = np.sort(np.random.rand(n_samples)*6)
y = true_function(X)+np.random.rand(n_samples)*0.05
return X, y
def train(X, y):
degress =[1,3,5,15]
linspace函数pythonplt.figure(figsize=(20,4))
for i in range(4):
plt.subplot(1,len(degress), i+1)
poly = PolynomialFeatures(degress[i], include_bias=False)
linear_regression = LinearRegression()# 线性回归模型
pipe = pipeline.Pipeline([("poly", poly),("linear_regression", linear_regression)])
pipe.fit(X[:, np.newaxis], y)
# 交叉验证模型性能
scores = cross_val_score(pipe, X[:, np.newaxis], y, scoring="neg_mean_squared_error", cv=10)
# 绘制图像
X_test = np.linspace(0,6,100)
plt.plot(X_test, pipe.predict(X_test[:, np.newaxis]), label='model')
plt.plot(X_test, true_function(X_test), label="True Function")
plt.scatter(X, y, label='Samples')
plt.legend(loc='best', fontsize=6)
plt.xlabel("X", fontsize=6)
plt.ylabel("y", fontsize=6)
plt.title("Degress {}\nMSE = {:.2e}(+/-{:.2e})".format(degress[i],-an(), scores.std(), fontsize=2))
X, y = data_samples()
train(X,y)
plt.show()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论