Scikit Learn 模块使用
回归
1. Linear Regression
y
p
r
e
d
i
c
t
(
w
,
x
)
=
w
0
+
w
1
x
1
+
w
2
x
2
+
.
.
.
w
p
x
p
y^{predict}(w,x) = w_0+w_1x_1+w_2x_2+...w_px_p
ypredict(w,x)=w0+w1x1+w2x2+...wpxp
w
=
(
w
1
,
w
2
,
w
3
.
.
w
p
)
w=(w_1,w_2,w_3..w_p)
w=(w1,w2,w3..wp)为系数(coef_),
w
0
w_0
w0为常数项(intercept_)。
要解决的问题是 m i n ∣ ∣ X w − y ∣ ∣ 2 2 min||Xw-y||_2^2 min∣∣Xw−y∣∣22
from sklearn import linear_model
#匹配常数项
reg = linear_model.LinearRegression(fit_intercept=True)
reg.fit([[0,0],[1,1],[2,2]],[0.5,1.5,2.5])
print('系数:',reg.coef_)
print('常数项',reg.intercept_)
#系数: [0.5 0.5]
#常数项 0.5000000000000001
不过最小二乘法要求特征之间是独立的,因为最小二乘法估计误差的时候就要求误差符合高斯分布。
2. Ridge regression and classification 岭回归
岭回归其实就是最小二乘法加上了l2正则化系数。
m
i
n
∣
∣
X
w
−
y
∣
∣
2
2
+
α
∣
∣
w
∣
∣
2
2
min||Xw-y||_2^2+\alpha||w||_2^2
min∣∣Xw−y∣∣22+α∣∣w∣∣22
reg = linear_model.Ridge(alpha=0.5)
reg.fit([[0,0],[1,1],[2,2]],[0.5,1.5,2.5])
print('系数:',reg.coef_)
print('常数项',reg.intercept_)
#系数: [0.44444444 0.44444444]
#常数项 0.6111111111111112
设置正则化参数:广义交叉验证
RidgeCV 通过内置的关于的 alpha 参数的交叉验证来实现岭回归。 该对象与 GridSearchCV 的使用方法相同,只是它默认为 Generalized Cross-Validation(广义交叉验证 GCV),这是一种有效的留一验证方法:
from sklearn import linear_model
reg = linear_model.RidgeCV(alphas=[0.1, 1.0, 10.0])
reg.fit([[0, 0], [0, 0], [1, 1]], [0, .1, 1])
RidgeCV(alphas=[0.1, 1.0, 10.0], cv=None, fit_intercept=True, scoring=None,
normalize=False)
print(reg.alpha_)
#0.1
Lasso 回归
Lasso 是拟合稀疏系数的线性模型。 它在一些情况下是有用的,因为它倾向于使用具有较少参数值的情况,有效地减少给定解决方案所依赖变量的数量。
最小化目标函数
m
i
n
∣
∣
X
w
−
y
∣
∣
2
2
+
α
∣
∣
w
∣
∣
1
min||Xw-y||_2^2+\alpha||w||_1
min∣∣Xw−y∣∣22+α∣∣w∣∣1
from sklearn import linear_model
reg = linear_model.Lasso(alpha = 0.1)
reg.fit([[0, 0], [1, 1]], [0, 1])
reg.predict([[1, 1]])
# array([ 0.8])