上一篇主要是对线性回归进行简单的入门,本篇主要讲解另外一个模型~
LARS(Least Angle Regression)即最小角回归,作为Forward Stepwise(向前逐步回归)的升级版,LARS是每次先找出和因变量相关度最高的那个变量,在已经入选的变量中,寻找一个新的路径,使得在这个路径上前进时,当前残差与已入选变量的相关系数都是相同的,直到找出新的比当前残差相关系数最大的变量。从几何上来看,当前残差在那些已选入回归集的变量们所构成的空间中的投影,是这些变量的角平分线。 网上对于LARS算法的解释杂且少,具体的可以参考此链接:http://blog.csdn.net/xbinworld/article/details/44284293
Lasso(least absolute shrinkage and selection operator) 线性回归的L1正则化通常称为Lasso回归,一般来说,对于高维的特征数据,尤其线性关系是稀疏的,我们会采用Lasso回归。或者是要在一堆特征里面找出主要的特征,那么Lasso回归更是首选了。Lasso回归的损失函数优化方法常用的有两种,坐标轴下降法和最小角回归法。Lasso类采用的是坐标轴下降法,后面讲到的LassoLars模型采用的是最小角回归法。
LassoLars是一个使用LARS算法实现的lasso模型。和基于坐标下降的实现不同的是,它产生的是精确的解,和一个函数标准系数一样是精确线性的。 具体的参数讲解可查看官方文档:http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LassoLars.html
下面以sklearn中的糖尿病人的数据为例:
import numpy as np import matplotlib.pyplot as plt from sklearn import linear_model from sklearn import datasets diabetes = datasets.load_diabetes() # print diabetes X = diabetes.data y = diabetes.target print("Computing regularization path using the LARS ...") alphas, _, coefs = linear_model.lars_path(X, y, method='lasso', verbose=True) xx = np.sum(np.abs(coefs.T), axis=1) xx /= xx[-1] plt.plot(xx, coefs.T) ymin, ymax = plt.ylim() plt.vlines(xx, ymin, ymax, linestyle='dashed') plt.xlabel('|coef| / max|coef|') plt.ylabel('Coefficients') plt.title('LASSO Path') plt.axis('tight') plt.show()(1)残差平方和 残差是数据集每个实例的实际标记值和预测值之间的差值。 残差平方和有两种说法:SSE(Sum of Squares for Error)是误差项平方和,反映误差情况,RSS (residual sum of squares)反映的也是误差项情况,两者的公式都是一样的~
np.mean((regr.predict(diabetes_X_test) - diabetes_y_test) ** 2))(2)F统计量 方差分析的检验统计量是F统计量,只分析一个因素(变量)的情况,称作一元方差分析(one-way analysis of variance),也称作简单方差分析(simple analysis of variance)。分析一个以上的因素(变量)的方差分析类型是析因方差分析(factorial design)。 F值的计算比较烦,用Python scipy.stats 的f_oneway直接得到结果就好了。
from scipy.stats import f_oneway f,p = f_oneway(clf.predict(X),Y)