继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【九月打卡】第11天 Python3入门机器学习

黄义舜
关注TA
已关注
手记 36
粉丝 4
获赞 32

①课程介绍


课程名称: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纬度高了之后更加地明显

④课程截图


打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP