线性回归(三)---岭回归

岭回归

岭回归是一种用于共线性数据分析的有偏估计回归方法,是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价从而获得更符合实际、更可靠的回归系数,对病态数据(这样的数据中某个元素的微笑变动会导致计算结果误差很大)的拟合效果比最小二乘法好。岭回归通过在代价函数后面加上一个对参数的约束项来防止过拟合。

岭回归参数含义

alpha:{float,array-like},shape(n_targets)
正则化强度; 必须是正浮点数。 正则化改善了问题的条件并减少了估计的方差。 较大的值指定较强的正则化。 Alpha对应于其他线性模型(如Logistic回归或LinearSVC)中的C^-1。 如果传递数组,则假定惩罚被特定于目标。 因此,它们必须在数量上对应。

copy_X:boolean,可选,默认为True ,如果为True,将复制X; 否则,它可能被覆盖。

fit_intercept:boolean 是否计算此模型的截距。 如果设置为false,则不会在计算中使用截距(例如,数据预期已经居中)。

max_iter:int,可选共轭梯度求解器的最大迭代次数。 对于’sparse_cg’和’lsqr’求解器,默认值由scipy.sparse.linalg确定。 对于’sag’求解器,默认值为1000。

normalize:boolean,可选,默认为False
如果为真,则回归X将在回归之前被归一化。 当fit_intercept设置为False时,将忽略此参数。 当回归量归一化时,注意到这使得超参数学习更加鲁棒,并且几乎不依赖于样本的数量。 相同的属性对标准化数据无效。 然而,如果你想标准化,请在调用normalize = False训练估计器之前,使用preprocessing.StandardScaler处理数据。

solver:{‘auto’,‘svd’,‘cholesky’,‘lsqr’,‘sparse_cg’,‘sag’}
用于计算的求解方法:
'auto’根据数据类型自动选择求解器。
'svd’使用X的奇异值分解来计算Ridge系数。对于奇异矩阵比’cholesky’更稳定。
'cholesky’使用标准的scipy.linalg.solve函数来获得闭合形式的解。
'sparse_cg’使用在scipy.sparse.linalg.cg中找到的共轭梯度求解器。作为迭代算法,这个求解器比大规模数据(设置tol和max_iter的可能性)的“cholesky”更合适。
'lsqr’使用专用的正则化最小二乘常数scipy.sparse.linalg.lsqr。它是最快的,但可能不是在旧的scipy版本可用。它还使用迭代过程。
'sag’使用随机平均梯度下降。它也使用迭代过程,并且当n_samples和n_feature都很大时,通常比其他求解器更快。注意,“sag”快速收敛仅在具有近似相同尺度的特征上被保证。您可以使用sklearn.preprocessing的缩放器预处理数据。
所有最后四个求解器支持密集和稀疏数据。但是,当fit_intercept为True时,只有’sag’支持稀疏输入。

tol:float解的精度。

from sklearn.linear_model import Ridge
ridgeRegression = Ridge(alpha=10)           # 创建岭回归模型
                                            # 设置约束项系数为10
                                            # 数值越大,特征对结果的影响越小
X = [[3], [8]]
y = [1, 2]
ridgeRegression.fit(X, y)               # 拟合
Ridge(alpha=10, copy_X=True, fit_intercept=True, max_iter=None,
   normalize=False, random_state=None, solver='auto', tol=0.001)
ridgeRegression.predict([[6]])          # 预测


array([1.55555556])
ridgeRegression.intercept_              # 截距

0.8888888888888888
ridgeRegression.coef_    # 查看回归系数
array([0.11111111])
%config InteractiveShell.ast_node_interactivity = 'all'   #同时输出多行结果
# 更换约束系数对比结果
ridgeRegression = Ridge(alpha=1.0)     # 设置约束项系数为1.0
ridgeRegression.fit(X, y)
Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,
   normalize=False, random_state=None, solver='auto', tol=0.001)
ridgeRegression.coef_
ridgeRegression.intercept_
ridgeRegression.predict([[6]])
Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,
   normalize=False, random_state=None, solver='auto', tol=0.001)
Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,
   normalize=False, random_state=None, solver='auto', tol=0.001)     
   array([0.18518519])  
   0.4814814814814816
   array([1.59259259])
%config InteractiveShell.ast_node_interactivity = 'all'   #同时输出多行结果
ridgeRegression = Ridge(alpha=0.0)     # 约束项系数为0
                                           # 等价于线性回归
ridgeRegression.fit(X, y)
Ridge(alpha=0.0, copy_X=True, fit_intercept=True, max_iter=None,
   normalize=False, random_state=None, solver='auto', tol=0.001)
ridgeRegression.coef_
ridgeRegression.intercept_
ridgeRegression.predict([[6]])


Ridge(alpha=0.0, copy_X=True, fit_intercept=True, max_iter=None,
   normalize=False, random_state=None, solver='auto', tol=0.001)
Ridge(alpha=0.0, copy_X=True, fit_intercept=True, max_iter=None,
   normalize=False, random_state=None, solver='auto', tol=0.001)
array([0.2])
0.40000000000000013
array([1.6])
# 搜索最佳约束系数
import numpy as np
from sklearn.linear_model import RidgeCV
X = [[3], [8]]
y = [1, 2]
reg = RidgeCV(alphas=np.arange(-10,10,0.2))  # 指定alpha参数的范围
reg.fit(X, y)                                # 拟合
RidgeCV(alphas=[-10. ,  -9.8, ...,   9.6,   9.8], cv=None,           #通过RidgeCV可以设置多个参数值,算法使用交叉验证获取最佳参数值
    fit_intercept=True, gcv_mode=None, normalize=False, scoring=None,
    store_cv_values=False)
reg.alpha_                                   # 最佳数值
                                            # 拟合之后该值才可用

reg.predict([[6]])                           # 预测


RidgeCV(alphas=array([-10. ,  -9.8, ...,   9.6,   9.8]), cv=None,
    fit_intercept=True, gcv_mode=None, normalize=False, scoring=None,
    store_cv_values=False)
RidgeCV(alphas=[-10.0, -9.8, Ellipsis, 9.6, 9.8], cv=None, fit_intercept=True,
    gcv_mode=None, normalize=False, scoring=None, store_cv_values=False)
0.9999999999999609
array([1.59259259])
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈伦2019

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值