①课程介绍
课程名称:Python3入门机器学习 经典算法与应用 入行人工智能
课程章节:8-2;8-3;8-4
主讲老师:liuyubobobo
内容导读
- 第一部分 sklearn多项式回归和pipeline
- 第二部分 关于PoltnomialFeatures
- 第三部分 Pipeline
②课程详细
第一部分 sklearn多项式回归和pipeline
这一章我们使用sklearn库来快速使用多项式回归,
导入函数
import numpy as np
import matplotlib.pyplot as plt
初始化函数
X = np.random.uniform(-3, 3, size=100)
X = X.reshape(-1, 1)
y = 0.5 * X**2 + X + 2 + np.random.normal(0, 1, size=100).reshape(-1,1)
导入多项式回归
from sklearn.preprocessing import PolynomialFeatures
#用于初始化参数
对X添加了最多二次幂函数degree=2
并调用多项式
poly = PolynomialFeatures(degree=2)
poly.fit(X)
X_b_2 = poly.transform(X)
我们来观察一下数据
X_b_2[:10,:]
array([[ 1. , -0.89174859, 0.79521555],
[ 1. , 1.01673673, 1.03375357],
[ 1. , 2.75970041, 7.61594636],
[ 1. , 0.64729695, 0.41899335],
[ 1. , -1.79649753, 3.22740339],
[ 1. , -1.59572187, 2.5463283 ],
[ 1. , -0.54384566, 0.2957681 ],
[ 1. , -2.27008527, 5.15328715],
[ 1. , -2.01257247, 4.05044794],
[ 1. , 0.99735981, 0.99472659]])
可以看出它自动帮我们把X转化成了Xb,并且将第一个维度自动进行了平方,也就是对维度进行操作。
导入多项式函数并进行运算查看结果
from sklearn.linear_model import LinearRegression
lin_reg2 = LinearRegression()
lin_reg2.fit(X_b_2, y)
y_predict = lin_reg2.predict(X_b_2)
对X进行多项式回归
plt.scatter(X, y)
plt.plot(np.sort(X, axis=0), y_predict[np.argsort(X, axis=0)].reshape(-1,1), color='r')
plt.show()
可以看到多项式二次之后拟合地不错
查看拟合后的系数
lin_reg2.coef_
array([[0. , 0.93042221, 0.50934081]])
查看拟合后的截距
lin_reg2.intercept_
第二部分 关于PoltnomialFeatures
第二部分我们将对PoltnomialFeatures多项式回归具体情况进行查看,看看究竟是如何进行多项式回归的。
定义X数据并查看原始数据情况
X = np.arange(1,11).reshape(-1,2)
X
array([[ 1, 2],
[ 3, 4],
[ 5, 6],
[ 7, 8],
[ 9, 10]])
对X进行多项式回归,查看是什么结果
poly2 = PolynomialFeatures(degree=2)
poly2.fit(X)
X2 = poly2.transform(X)
X2.shape
(5, 6)
从2个维度变成6个维度,取出Xb的第一项,也就是2>>>5的维度增加
array([[ 1., 1., 2., 1., 2., 4.],
[ 1., 3., 4., 9., 12., 16.],
[ 1., 5., 6., 25., 30., 36.],
[ 1., 7., 8., 49., 56., 64.],
[ 1., 9., 10., 81., 90., 100.]])
D,X1,X2,X12,X1*X2,X22
六个维度的情况,
接下来进行三维的多项式回归
X = np.arange(1,11).reshape(-1,2)
poly3 = PolynomialFeatures(degree=3)
poly3.fit(X)
X3= poly3.transform(X)
查看变形之前的数据是怎么样的
X
array([[ 1, 2],
[ 3, 4],
[ 5, 6],
[ 7, 8],
[ 9, 10]])
查看变形之后的维度
X3.shape
(5, 10)
2>>>9
X3
array([[ 1., 1., 2., 1., 2., 4., 1., 2., 4.,
8.],
[ 1., 3., 4., 9., 12., 16., 27., 36., 48.,
64.],
[ 1., 5., 6., 25., 30., 36., 125., 150., 180.,
216.],
[ 1., 7., 8., 49., 56., 64., 343., 392., 448.,
512.],
[ 1., 9., 10., 81., 90., 100., 729., 810., 900.,
1000.]])
D,X1,X2,X3,X12,X1*X2,X22,X13,X12 *X2, X1 * X22 ,X23
观察出的结论,
第三部分 Pipeline
接下来就通过管道将多项式升维,归一化,线性回归,结合起来使用。
创造数据
X = np.random.uniform(-3, 3, size=100)
X = X.reshape(-1, 1)
y = 0.5 * X**2 + X + 2 + np.random.normal(0, 1, size=100).reshape(-1,1)
导入函数并加管道,格式如下,
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import PolynomialFeatures
poly_reg = Pipeline([
("poly",PolynomialFeatures(degree=4)),
("stand_scaler",StandardScaler()),
("lin_reg",LinearRegression())
])
对整合之Pipeline进行调用,很方便的使用fit和predict进行调用
%%time
poly_reg.fit(X, y)
y_predict = poly_reg.predict(X)
CPU times: total: 31.2 ms
Wall time: 7 ms
假如维度高了之后,可视化会有什么情况呢
plt.scatter(X, y)
plt.plot(np.sort(X, axis=0), y_predict[np.argsort(X, axis=0)].reshape(-1,1), color='r')
plt.show()
③课程思考
- 在对X进行升维,仅仅3就出现了10个维度,会非常的慢,需要进行数据归一化,然后送进线性回归。
- 升维假如不进行归一化的话,会导致数据间差距变得很大很大,这个情况在degree纬度高了之后更加地明显