scikit-learn实现线性回归之Lassolars模型

上一篇主要是对线性回归进行简单的入门,本篇主要讲解另外一个模型~

一.关于LARS算法

LARS(Least Angle Regression)即最小角回归,作为Forward Stepwise(向前逐步回归)的升级版,LARS是每次先找出和因变量相关度最高的那个变量,在已经入选的变量中,寻找一个新的路径,使得在这个路径上前进时,当前残差与已入选变量的相关系数都是相同的,直到找出新的比当前残差相关系数最大的变量。从几何上来看,当前残差在那些已选入回归集的变量们所构成的空间中的投影,是这些变量的角平分线。
scikit-learn实现线性回归之Lassolars模型_第1张图片
网上对于LARS算法的解释杂且少,具体的可以参考此链接:http://blog.csdn.net/xbinworld/article/details/44284293

二.关于Lasso模型

Lasso(least absolute shrinkage and selection operator)
线性回归的L1正则化通常称为Lasso回归,一般来说,对于高维的特征数据,尤其线性关系是稀疏的,我们会采用Lasso回归。或者是要在一堆特征里面找出主要的特征,那么Lasso回归更是首选了。Lasso回归的损失函数优化方法常用的有两种,坐标轴下降法和最小角回归法。Lasso类采用的是坐标轴下降法,后面讲到的LassoLars模型采用的是最小角回归法。

三.关于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) 

你可能感兴趣的:(机器学习,回归分析)