sklearn--回归

一.线性回归

LinearRegression类就是我们平时所说的普通线性回归,它的损失函数如下所示:
scikit-learn(sklearn)线性回归算法类库介绍
对于这个损失函数,一般有梯度下降法和最小二乘法两种极小化损失函数的优化方法,而scikit-learn中的LinearRegression类使用的是最小二乘法。通过最小二乘法,可以解出线性回归系数θ为:scikit-learn(sklearn)线性回归算法类库介绍
验证方法:LinearRegression类并没有用到交叉验证之类的验证方法,需要我们自己把数据集分成训练集和测试集,然后进行训练优化。
使用场景:一般来说,只要我们觉得数据有线性关系,LinearRegression类就是我们的首选。如果发现拟合或者预测的不好,再考虑用其它线性回归类库。
from sklearn.linear_model import LinearRegression
lr=LinearRegression()
lr.fit(train_x,train_y)
print lr.intercept_
print lr.coef_

二.岭回归

由于LinearRegression没有考虑过拟合的问题,有可能导致泛化能力较差,这时损失函数可以加入正则化项,如果加入的是L2范数的正则化项,就是Ridge回归的损失函数,如下所示:
scikit-learn(sklearn)线性回归算法类库介绍
其中α是常数系数,需要进行调优,scikit-learn(sklearn)线性回归算法类库介绍是L2范数。
Ridge回归在不抛弃任何一个特征的情况下,缩小了回归系数(是一种缩放的模型),使得模型相对而言比较稳定,不至于过拟合。
对于这个损失函数,一般有梯度下降法和最小二乘法两种极小化损失函数的优化方法,而scikit-learn中的Ridge类使用的是最小二乘法。通过最小二乘法,可以解出线性回归系数θ为:
scikit-learn(sklearn)线性回归算法类库介绍
其中E是单位矩阵。
验证方法:Ridge类并没有用到交叉验证之类的验证方法,需要我们自己把数据集分成训练集和测试集,需要自己设置好超参数α,然后进行训练优化。
使用场景:一般来说,只要我们觉得数据有线性关系,并且使用LinearRegression类拟合的不是特别好,需要正则化时,可以考虑用Ridge类。但是这个类最大的缺点是每次我们要自己指定一个超参数α,然后自己评估α的好坏,比较麻烦,一般都会使用下面将会讲到的RidgeCV类来跑Ridge回归,不推荐直接用这个Ridge类,除非你只是为了学习Ridge回归。
from sklearn.linear_model import Ridge
from sklearn.model_selection import cross_val_score
alphas=np.logspace(-3,2,50)
test_scores =[]
for alpha in alphas:
    clf=Ridge(alpha)
    test_score=np.sqrt(-cross_val_score(clf,X_train,Y_train,cv=10,scoring='neg_mean_squared_error'))
    test_scores.append(np.mean(test_score))
plt.plot(alphas,test_scores)

  RidgeCV类的损失函数和损失函数的优化方法与Ridge类完全相同,区别在于验证方法。

验证方法:RidgeCV类对超参数α使用了交叉验证,来帮助我们选择一个合适的α值。在初始化RidgeCV类时,我们可以提供一组备选的α值。RidgeCV类会帮我们选择一个合适的α值,免去了我们自己去一轮轮筛选α值的苦恼。
from sklearn.linear_model import RidgeCV
# 在初始化RidgeCV类时, 提供一组备选的α值, RidgeCV类会帮我们选择一个合适的α值.
ridgecv = RidgeCV(alphas=[0.01, 0.1, 0.5, 1, 3, 5, 7, 10, 20, 100], cv=5)
# 拟合训练集
ridgecv.fit(train_X, train_Y)
# 打印最优的α值
print "最优的alpha值: ", ridgecv.alpha_
# 打印模型的系数
print ridgecv.intercept_
print ridgecv.coef_

 三.lasso回归

线性回归的L1正则化通常称为Lasso回归,它和Ridge回归的区别是在损失函数上增加的是L1正则化项,而不是L2正则化项。L1正则化项也有一个常数系数α来调节损失函数的均方差项和正则化项的权重,具体的Lasso回归的损失函数如下所示:
scikit-learn(sklearn)线性回归算法类库介绍
其中m是样本个数,α是常数系数,需要进行调优。scikit-learn(sklearn)线性回归算法类库介绍是L1范数。
Lasso回归可以使得一些特征的系数变小,甚至一些绝对值非常小的系数直接变为0,增强模型的泛化能力

Lasso回归的损失函数的优化方法常用的有两种,分别是坐标轴下降法和最小角回归法。Lasso类采用的是坐标轴下降法,后面讲到的LassoLars类采用的是最小角回归法

from sklearn.linear_model import LassoCV
# 在初始化LassoCV类时, 提供一组备选的α值, LassoCV类会帮我们选择一个合适的α值.
lassocv = LassoCV(alphas=[0.01, 0.1, 0.5, 1, 3, 5, 7, 10, 20, 100], cv=5)
# 拟合训练集
lassocv.fit(train_X, train_Y.values.ravel())
# 打印最优的α值
print "最优的alpha值: ", lassocv.alpha_
# 打印模型的系数
print lassocv.intercept_
print lassocv.coef_

 三.多项式回归

当我们拟合的是一个曲线的时候我们就不能只考虑线性拟合了,我们可以考虑多项式拟合,通过加入高次的特征来来得到总的特征样本,然后在进行线性的拟合

#多项式拟合
from sklearn.preprocessing import PolynomialFeatures
poly_features = PolynomialFeatures(degree=5, include_bias=False)#其中的degree就是指的最高次项的个数
X_poly = poly_features.fit_transform(X)
print(X_poly.shape)
lin_reg = LinearRegression()
lin_reg.fit(X_poly, y)
print(lin_reg.intercept_, lin_reg.coef_)

 四.逻辑回归

逻辑回归之所以被分为线性回归的一种,只因为其本质也是线性回归,只不过得到的线性相加求和之后加上了sigmod函数将其二值化

from sklearn.linear_model import LogiticRegression
lr==Logiticregression()
lr.fit(x,y)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
 
 
 
 
posted @ 2018-10-14 16:20  yskn  阅读(614)  评论(0编辑  收藏  举报