1.5sklearn——一元线性回归
from sklearn.linear_model import LinearRegression
import numpy as np
import matplotlib.pyplot as plt
# 载入数据
data = np.genfromtxt("data.csv", delimiter=",")
x_data = data[:,0]
y_data = data[:,1]
plt.scatter(x_data,y_data)
plt.show()
print(x_data.shape)
# 调整数据格式
x_data = data[:,0,np.newaxis]
y_data = data[:,1,np.newaxis]
# 创建并拟合模型
model = LinearRegression()
model.fit(x_data, y_data)
# 画图
plt.plot(x_data, y_data, 'b.')
plt.plot(x_data, model.predict(x_data), 'r')
plt.show()
1.6多元线性回归
多元线性回归的求解和一元线性回归异曲同工,无非是求导的次数增加了
f
(
x
)
=
θ
0
+
θ
1
∗
x
1
+
.
.
.
+
θ
n
∗
x
n
f(x) = \theta_0+\theta_1*x_1+...+\theta_n*x_n
f(x)=θ0+θ1∗x1+...+θn∗xn
Γ
(
θ
0
,
θ
1
,
.
.
.
,
θ
n
)
=
1
2
m
∑
i
=
1
m
(
y
i
−
h
θ
(
x
i
)
)
2
\Gamma(\theta_0,\theta_1,...,\theta_n) = \frac{1}{2m}\sum_{i=1}^{m}(y^i-h_\theta(x^i))^2
Γ(θ0,θ1,...,θn)=2m1i=1∑m(yi−hθ(xi))2
每一次迭代更新权值
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
Γ
(
θ
0
,
θ
1
)
(
f
o
r
1
j
=
0...
n
)
\theta_j:=\theta_j-\alpha \frac{\partial }{\partial \theta_j}\Gamma(\theta_0,\theta_1)(for \hphantom{1} j=0...n)
θj:=θj−α∂θj∂Γ(θ0,θ1)(for1j=0...n)
1.7多项式回归
多项式方程:
f
(
x
)
=
θ
0
+
θ
1
∗
x
+
.
.
.
+
θ
n
∗
x
n
f(x) = \theta_0+\theta_1*x+...+\theta_n*x^n
f(x)=θ0+θ1∗x+...+θn∗xn
梯度下降法求解:
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
import numpy as np
import matplotlib.pyplot as plt
# 载入数据
data = np.genfromtxt("job.csv", delimiter=",")
x_data = data[1:,1]
y_data = data[1:,2]
x_data = x_data[:,np.newaxis]
y_data = y_data[:,np.newaxis]
# 训练模型
model = LinearRegression()
model.fit(x_data, y_data)
# 画图
plt.plot(x_data, y_data, 'b.')
plt.plot(x_data, model.predict(x_data), 'r')
plt.show()
# 定义多项式回归,degree的值可以调节多项式的特征
poly_reg = PolynomialFeatures(degree=3)
# 特征处理
x_poly = poly_reg.fit_transform(x_data)
# 定义回归模型
lin_reg = LinearRegression()
# 训练模型
lin_reg.fit(x_poly, y_data)
# 画图
plt.plot(x_data, y_data, 'b.')
plt.plot(x_data, lin_reg.predict(x_poly), c='r')
plt.show()
标准方程法:
标准方差法与递归下降法主要区别在于其代价函数(cost function)不一致
J
(
θ
)
=
a
θ
2
+
b
θ
+
c
J( \theta) =a\theta^2+b\theta+c
J(θ)=aθ2+bθ+c
∂
∂
θ
J
(
θ
)
=
0
\frac{\partial }{\partial \theta}J(\theta)=0
∂θ∂J(θ)=0
以此求解
θ
0
,
.
.
.
,
θ
n
\theta_0,...,\theta_n
θ0,...,θn
优缺点:
梯度下降法 | 标准方程法 |
---|---|
需要选择学习速率α | 不需要选择学习速率α |
需要多次迭代 | 不需要多次迭代 |
即使n很大,也能很好的工作 | 当n很大,因为需要计算(XTX)-1,会计算的非常慢 |
总结:
当n比较大的时候(通常n>10000),选择梯度下降法
当n不是很大(通常n<10000),选择标准方程法