LinearRegression,RidgeCV,LassoCV,ElasticNetCV各自使用场景
概念:
#线性回归的目的是要得到输出向量Y和输入特征X之间的线性关系,求出线性回归系数θ,也就是Y=Xθ, 其中Y的维度为m x 1,X的维度为 m x n,而θ的维度为 n x 1, m代表样本个数, n代表样本特征的维度
#损失函数:损失函数是用来评价模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数 通常用L(Y,f(x))表示,损失函数越小,模型的性能就越好 ,优化方法:最小二乘法和梯度下降(scikit中采用最小二乘 )
#正则化项:为了防止损失函数过拟合的问题,一般会在损失函数中加上正则化项,增加模型的泛化能力
使用场景:
LinearRegression:只要数据线性相关,LinearRegression是我们的首选,如果发现拟合或者预测的不够好,再考虑其他的线性回归库
LinearRegression 损失函数Pipeline([
('poly', PolynomialFeatures()),
('linear', LinearRegression(fit_intercept=False))
])
RidgeCV(岭回归):只要数据线性相关,用LinearRegression拟合的不是很好,需要正则化,可以考虑使用RidgeCV回归, 如何输入特征的维度很高,而且是稀疏线性关系的话, RidgeCV就不太合适,考虑使用Lasso回归类家族
a为超参数 alphas=np.logspace(-3, 2, 50) 从给定的超参数a中选择一个最优的,logspace用于创建等比数列 本例中 开始点为10的-3次幂,结束点10的2次幂,元素个数为
50,并且从这50个数中选择一个最优的超参数
linspace创建等差数列
Ridge回归中超参数a和回归系数θ的关系,a越大,正则项惩罚的就越厉害,得到的回归系数θ就越小,最终趋近与0
如果a越小,即正则化项越小,那么回归系数θ就越来越接近于普通的线性回归系数
RidgeCV(岭回归)损失函数Pipeline([
('Poly', PolynomialFeatures()),
('Linear', RidgeCV(alphas= np.logspace(-3, 2, 50), fit_intercept=False))
]),
LassoCV:Lasso回归可以使得一些特征的系数变小,甚至还使一些绝对值较小的系数直接变为0,从而增强模型的泛化能力
使用场景:对于高纬的特征数据,尤其是线性关系是稀疏的,就采用Lasso回归,或者是要在一堆特征里面找出主要的特征,那么 Lasso回归更是首选了
a为超参数 alphas=np.logspace(-3, 2, 50) 从给定的超参数a中选择一个最优的,logspace用于创建等比数列 本例中 开始点为10的-3次幂,结束点10的2次幂,元素个数为
50,并且从这50个数中选择一个最优的超参数
linspace创建等差数列
Ridge回归中超参数a和回归系数θ的关系,a越大,正则项惩罚的就越厉害,得到的回归系数θ就越小,最终趋近与0
如果a越小,即正则化项越小,那么回归系数θ就越来越接近于普通的线性回归系数
LassoCV 损失函数Pipeline([
('Poly', PolynomialFeatures()),
('Linear', LassoCV(alphas=np.logspace(-3,2,50), fit_intercept=False))
]),
ElasticNetCV:对超参数a和p使用交叉验证,帮助我们选择合适的a和p
使用场景:ElasticNetCV类在我们发现用Lasso回归太过(太多特征被稀疏为0),而Ridge回归也正则化的不够(回归系数衰减太慢)的时候
alphas=np.logspace(-3, 2, 50), l1_ratio=[.1, .5, .7, .95, 1] ElasticNetCV会从中选出最优的 a和p
ElasticNetCV 损失函数Pipeline([
('Poly', PolynomialFeatures()),
('Linear', ElasticNetCV(alphas= np.logspace(-3, 2, 50), l1_ratio=[.1, .5, .7, .95, 1], fit_intercept=False))
])
网友评论