import numpy as np
import matplotlib.pyplot as plt
from sklearn.pipeline import Pipeline
#sklearn提供了Pipeline类来处理顺序的操作步骤
from sklearn.preprocessing import PolynomialFeatures
#sklearn.preprocessing.PolynomialFeatures 这个类可以进行特征的
# 构造,构造的方式就是特征与特征相乘(自己与自己,自己与其他人),
# 这种方式叫做使用多项式的方式。
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_val_score
#交叉验证
np.random.seed(0)
"""
设置seed()里的数字就相当于设置了一个盛有随机数的“聚宝盆”,
一个数字代表一个“聚宝盆”,当我们在seed()的括号里设置相同的
seed,“聚宝盆”就是一样的,那当然每次拿出的随机数就会相同
(不要觉得就是从里面随机取数字,只要设置的seed相同取出地随机数
就一样)。如果不设置seed,则每次会生成不同的随机数。
"""
n_samples=30
degrees=[1,2,3,4,15]
true_fun=lambda X:np.cos(1.5*np.pi*X)
X=np.sort(np.random.rand(n_samples))
#np.random.rand使用方法与np.random.randn()函数相同
#通过本函数可以返回一个或一组服从“0~1”均匀分布的随机样本值。
# 随机样本取值范围是[0,1),不包括1.
#np.sort()函数的作用是对给定的数组的元素进行排序
y=true_fun(X)+np.random.randn(n_samples)*0.1
plt.figure(figsize=(14,5))
for i in range(len(degrees)):
ax=plt.subplot(1,len(degrees),i+1)
plt.setp(ax,xticks=(),yticks=())
#plt.setp() 修改线条性质
polynomial_features=PolynomialFeatures(degree=degrees[i],include_bias=False)
#degree:控制多项式的次数;
#include_bias:默认为 True 。如果为 True 的话,那么结果中就会有 0 次幂项,即全为 1 这一列
linear_regression=LinearRegression()
pipeline=Pipeline([("polynomial_features",polynomial_features),
("linear_regression",linear_regression)])
pipeline.fit(X[:,np.newaxis],y)
# Evaluate the models using crossvalidation
scores=cross_val_score(pipeline,X[:,np.newaxis],y,
scoring="neg_mean_squared_error",cv=10)
#交叉验证cross_val_score的scoring参数
#分类:accuracy(准确率)、f1、f1_micro、f1_macro(这两个用于多分类的f1_score)、precision(精确度)、recall(召回率)、roc_auc
#回归:neg_mean_squared_error(MSE、均方误差)、r2
#聚类:adjusted_rand_score、completeness_score等
#soring:调用的方法
#cv:交叉验证生成器或可迭代的次数
X_test=np.linspace(0,1,100)
plt.plot(X_test,pipeline.predict(X_test[:,np.newaxis]),label="Model")
plt.plot(X_test,true_fun(X_test),label="True function")
plt.scatter(X,y,label="Samples")
plt.xlabel("x")
plt.ylabel("y")
plt.xlim((0,1))
plt.ylim((-2,2))
plt.legend(loc="best")
plt.title("Degree {}\nMSE={:.2e}(+/-{:.2e})".format(
degrees[i],-scores.mean(),scores.std()
))
plt.show()
under_over_fit.py
最新推荐文章于 2024-08-31 00:00:00 发布