ubuntu下安装scikit learn模块
1.ubuntu 12.04
2.python2.7
3.输入指令
sudo apt-get install python-sklearn
系统就能自动安装上scikit learn所需要的所有模块。
一般线性回归
1.普通的最小二乘法
知道一些点的坐标,用最小二乘法拟合出一条残差最小的直线来预测这些点未来的走势。
![\hat{y}(w, x) = w_0 + w_1 x_1 + ... + w_p x_p](http://scikit-learn.org/stable/_images/math/1f24b31370fa95ab1c96023fc2dd239cdd932ac9.png)
我们需要计算是x系数的值。
>>> from sklearn import linear_model
>>> clf = linear_model.LinearRegression()
>>> clf.fit ([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
LinearRegression(copy_X=True, fit_intercept=True, normalize=False)
>>> clf.coef_
array([ 0.5, 0.5])
首先导入线性模块,然后生成最小二乘法的对象,其中[1,1]这些都是代表x1,x2的取值,[0,1,2]代表y的取值。
coef_会返回得到的w1,w2等系数,intercept_会返回常数项。
2.岭回归分析
因为本身不是学统计出身的,而且数学一直是自己的弱项,所以只能尝试着讲讲自己的理解了。
岭回归是为了改进最小二乘法的某些缺项而改进的一种算法,比如说:
当我们用最小二乘法来拟合一个二元的线性方程时,拟合得到的参数w1和w2间存在这复共线性,也就是说这两个值之间的样本相关性非常高。
但是最小乘法的公式是
参数的复共线性使XTX非常接近于0,造成了很大的误差。
岭回归对这个问题的处理方法是把XTX的主对角线都加上一个参数k,公式就变成了
这样就避免了之前的问题。
大概讲了一点统计的知识,接下来该结合程序看一下这个岭回归算法到底该怎么编。
scikit learn的官方网站上给出对岭回归的解释是
Ridge
regression addresses some of the problems of
Ordinary Least Squares
by imposing a penalty on the size of coefficients. The ridge coefficients minimize a penalized residual sum of squares,
>>> from sklearn import linear_model
>>> clf = linear_model.Ridge (alpha = .5)
>>> clf.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, solver='auto', tol=0.001)
>>> clf.coef_
array([ 0.34545455, 0.34545455])
>>> clf.intercept_
0.13636...
先导入模块,生成最小二乘法的对象,并设置好权值a的值,接下来的步骤就和最小二乘法一样,没什么变化。
我感觉w就是公式中的单位矩阵I,而a就是那个参数k的值。
但是a的值是我们自己设置的,到底应该设置为多少才是合适的,才能有效避免最小二乘法的缺陷呢。
scikit learn里提供了一个叫做交叉验证的方法,帮我们选出合适的a值:
>>> from sklearn import linear_model
>>> clf = linear_model.RidgeCV(alphas=[0.1, 1.0, 10.0])
>>> clf.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)
>>> clf.alpha_
0.1
这里生成了一个RidgeCV对象,并且设置了测试的a候选集合[0.1,1.0,10.0],然后把训练集输入到fit函数中,最后输出的alpha_就代表了交叉验证后得到的候选集中的最优的a。