线性回归中的抗过拟
过拟合是机器学习的模型建立中,由于独立同分布的假设可能并不成立,为了提高模型泛化的能力(推广到未知数据的能力),所以必须在训练模型中抗过拟。
过拟合一直是机器学习中比较头疼的问题。常用的方法有:正则化Regularization(在目标函数或者代价函数加上正则项),early stopping,数据集扩增Data augmentation,Dropout等。参见:机器学习中防止过拟合的处理方法
具体到线性回归,求解线性回归的方法主要是最小二乘法ols(Ordinary Least Square),防止过拟合的方法主要通过添加正则项,主要有岭回归(二范数正则化)和Lasso回归(一范数正则化)。
普通最小二乘法OLS
优化目标:
训练得到一个系数为w=(w1,w2,...,wn)的线性模型最小化其预测值和实际结果的残差平方和。使用ols计算w的公式为:
ols缺点在于鲁棒性差。ols里面的系数依赖于当前的模型。当模型与矩阵X存在近似线性相关的关系时,矩阵会近似奇异,结果就是最小二乘法得到的线性回归对观察结果(估量结果)中出现的随机错误会变得很敏感,以致于产生较大的方差。
岭回归(Ridge Regression)
Ridge Regression通过对代价函数添加二范数惩罚防止过拟。α值越大,惩罚w的程度越大,模型越难以过拟合,α过大会导致欠拟合。
sklearn.linear_model中实现了岭回归。
函数原型:class sklearn.linear_model.Ridge(alpha=0.1,fit_intercept=True,normalize=False,copy_X=True,max_iter=None,tol=0.001,solver='auto',random_state=None)
-
alpha,即为正则化系数,越大越难以过拟合
>>> from sklearn import linear_model >>> reg = linear_model.Ridge (alpha = .5) >>> reg.fit ([[0, 0], [0, 0], [1, 1]], [0, .1, 1]) Ridge(alpha=0.5, copy_X=True, fit_intercept=True, max_iter=None, normalize=False, random_state=None, solver='auto', tol=0.001) >>> reg.coef_ array([0.34545455, 0.34545455]) >>> reg.intercept_ 0.13636...
可以看到,该模型很重要的α是我们需要自己选择的,而α的大小直接关系到模型的优劣。sklearn中与Ridge相似的RidgeCV内置了对α参数交叉验证的岭回归,该对象的工作方式与GridSearchCV相同。
>>> 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)
>>> reg.alpha_
0.1
Lasso回归(Lasso Regression)
Lasso Regression是一个估量稀疏系数的线性模型。在数学概念上,它是由L1作为正则化参数先验后的一个线性模型组成。其代价函数为:
Lasso通过添加了α||w||1的正则化项,达到惩罚参数w的目的。
>>> from sklearn import linear_model
>>> reg = linear_model.Lasso(alpha = 0.1)
>>> reg.fit([[0, 0], [1, 1]], [0, 1])
Lasso(alpha=0.1, copy_X=True, fit_intercept=True, max_iter=1000,
normalize=False, positive=False, precompute=False, random_state=None,
selection='cyclic', tol=0.0001, warm_start=False)
>>> reg.predict([[1, 1]])
array([0.8])
同样,α是需要自行选择的正则项系数,sklearn也提供了linear_model.LassoCV
对参数α进行交叉验证。
弹性网络
弹性网络ElasticNet是一个使用L1和L2范数训练出的线性回归模型,相当于岭回归和Lasso回归的结合体。这种结合体允许学习稀疏模型,例如Lasso这样在权重中带有少量非零项的,同时也能像岭回归那样保留其正规化特性。ElasticNet通过ρ参数控制L1和L2的凸结合。
这里有两个参数α和ρ需要自行选择,可以通过ElasticNetCV
类通过交叉验证来设置。
Ref:http://www.jianshu.com/p/cf2b391a3c95
skearn中关于linear_model的库函数:http://scikit-learn.org/stable/modules/classes.html#module-sklearn.linear_model