1 sklearn线性回归

sklearn线性回归

  • 一、普通最小二乘线性回归sklearn.linear_model.LinearRegression
        • 小结
  • 二、岭回归
  • 岭回归分类
  • LASSO

sklearn里面一个类对象就是一个模型,直接封装了训练、预测、测试等goon功能。关于具体的算法过程,优化过程…从直接使用角度不需要关心…

一、普通最小二乘线性回归sklearn.linear_model.LinearRegression

最小二乘法 线性回归问题的 优化目标:
m i n w ∥ X w − y ∥ 2 2 min_{w} \|Xw-y\|_2^2 minwXwy22
其中X的是样本矩阵,每一行是一个样本,每一列代表一种属性/特征。y是样本真实标签。

class sklearn.linear_model.LinearRegression(*, fit_intercept=True, normalize=False, copy_X=True, n_jobs=None)

LinearRegression官方解释

参数:
fit_intercept : bool值,是否计算截距,如果False,则数据被中心化。
normalize : bool值,是否归一化(减去均值后,除以l2范数,怎么和我理解的归一化不一样…)。
copy_X : bool值,是否复制X,否则X会被覆盖。

属性:
coef_: 线性回归问题的估计系数。
intercept_:线性模型中的截距项。如果设置fit_intercept = False,则截距为0.0 。
rank_:矩阵X的秩。仅在X是密集矩阵时可用。
singular_:X的奇异值。仅在X是密集矩阵时可用。

方法:
fit(self, X, y[, sample_weight]):拟合线性模型。
get_params(self[, deep]):获取此估计器的参数。
set_params(self, **params):设置此估计器的参数。
predict(self, X):使用线性模型进行预测。
score(self, X, y[, sample_weight]):返回预测的确定系数R ^ 2。

R^2:
系数R ^ 2定义为(1- u / v),其中u是残差平方和((y_true-y_pred)** 2).sum(),而v是总平方和((y_true- y_true.mean())** 2).sum()。可能的最高得分为1.0,并且也可能为负(因为该模型可能会更差)。一个常数模型总是预测y的期望值,而不考虑输入特征,得到的R^2得分为0.0。

小结

LinearRegression是使用最小二乘法进行线性回归。
训练集训练模型就用方法fit()。可以选择一些参数。
要获取训练过的系数就访问属性coef_. 要获取截距就访问属性intercept_.
预测新样本就使用predict()方法。注意即使只预测一个样本x,x也要求是矩阵形式
度量在预测集上的性能可以使用score()方法,返回指标 R 2 R^2 R2,离1越近,说明预测的越好。等于1,说明预测值与真实标签相等。

# 先导入线性回归模块
# 实际上LinearRegression是一个类
from sklearn.linear_model import LinearRegression

X = np.array([[1, 1],
              [1, 2],
              [2, 2],
              [2, 3]])
y = np.array(np.dot(X, np.array([5, 6])) + 6)
# 创建LinearRegression对象,相当于 一个训练器+测试器+预测器一体
lin_reg = LinearRegression()
lin_reg.fit(X, y)
print(lin_reg.coef_)
print(lin_reg.intercept_)
print(lin_reg.get_params())

X1 = np.array([[4, 5], [7, 8]])
print(lin_reg.predict(X1))
[5. 6.]
6.0
{'copy_X': True, 'fit_intercept': True, 'n_jobs': None, 'normalize': False, 'positive': False}
[56. 89.]

二、岭回归

岭回归的优化目标:
m i n w ∥ X w − y ∥ 2 2 + α ∥ w ∥ 2 2 min_{w} \|Xw-y\|_2^2+\alpha\|w\|_2^2 minwXwy22+αw22
引入了二范数正则化项,降低过拟合风险,看作是一种归纳偏好。【但是没有起到特征选择的作用 】
α \alpha α是正则化系数,对风险项和归纳偏好进行折中。

  • 与最小二乘模式基本一样。
## 岭回归
print('----------------------------------')
ridge_reg = linear_model.Ridge(alpha=.5)  # 创建岭回归对象
ridge_reg.fit(np.array([[0, 0], [0, 0], [1, 1]]), np.array([0, .1, 1]))
print('岭回归系数:', '(%.3f,%.3f)' % (list(ridge_reg.coef_)[0], list(ridge_reg.coef_)[1]), '岭回归截距',
      '%.3f' % ridge_reg.intercept_)
print(ridge_reg.get_params())
print(ridge_reg.predict(np.array([[.1, .1], [0, 0]])))
print(ridge_reg.score(np.array([[0, 0], [0, 0], [1, 1]]), np.array([0, .1, 1])))
岭回归系数: (0.345,0.345) 岭回归截距 0.136
{'alpha': 0.5, 'copy_X': True, 'fit_intercept': True, 'max_iter': None, 'normalize': False, 'random_state': None, 'solver': 'auto', 'tol': 0.001}
[0.20545455 0.13636364]
0.9179910998092816

岭回归分类

这就是软间隔SVM?

LASSO

不同于岭回归,使用的是l-1范数正则项,可以使得解出来的线性系数是稀疏的,因此有特征选择的作用。

  • Lasso及其变体是压缩感知领域的基础。

  • 压缩感知:想用观测信号恢复出稀疏信号,从而再恢复出原始信号。
    优化目标:
    m i n w 1 n s a m p l e s ∥ X w − y ∥ 2 2 + α ∥ w ∥ 1 min_{w} \frac{1}{n_{samples}} \|Xw-y\|_2^2 + \alpha\|w\|_1 minwnsamples1Xwy22+αw1

  • LASSO一般使用PGD(近端梯度下降)迭代求解。

  • 这里LASSO使用坐标下降法作为优化算法。

Lasso类:

class sklearn.linear_model.Lasso(alpha=1.0, *, fit_intercept=True, normalize=False, precompute=False, copy_X=True, max_iter=1000, tol=0.0001, warm_start=False, positive=False, random_state=None, selection='cyclic')

参数:
alpha:正则项系数,alpha=0时就等同于于LinearRegression最小二乘。所以,用Lasso就不要设置alpha=0.
fit_intercept: 设置为False,就是假定数据被中心化了。
normalize : True的话,回归之前会将数据归一化。
max_iter : int, default=1000,最大迭代次数。
warm_start: bool, default=False. 设置为True时,重用前面调用的解决方案来进行初始化,否则,只清除前面的解决方案。

方法:
fit(X, y[, sample_weight, check_input]) 用坐标下降法拟合模型。
…同上面方法。

你可能感兴趣的:(sklearn,线性回归,机器学习)