线性回归—

1.普通线性回归

分类的目标变量是标称型数据,而回归将会对连续型的数据做出预测。

应当怎样从一大堆数据里求出回归方程呢?

假定输人数据存放在矩阵X中,而回归系数存放在向量W中。那么对于给定的数据X1, 预测结果将会通过

Y=X*W

给出。现在的问题是,手里有一些X和对应的Y,怎样才能找到W呢?

一个常用的方法就是找出使误差最小的W。这里的误差是指预测Y值和真实Y值之间的差值,使用该误差的简单累加将使得正差值和负差值相互抵消,所以我 们采用平方误差。

最小二乘法

平方误差可以写做:

对W求导,当导数为零时,平方误差最小,此时W等于:

例如有下面一张图片:

求回归曲线,得到:

实例:

from sklearn.datasets import load_diabetes
from pandas import DataFrame
from sklearn.model_selection import train_test_split

diabetes = load_diabetes()
data = diabetes.data
target = diabetes.target
feature_names = diabetes.feature_names


df=DataFrame(data=data,columns=feature_names)
X_train,X_test,y_train,y_test=train_test_split(data,target,test_size=42)

# 创建模型
linear=LinearRegression()
linear.fit(X_train,y_train)

linear.predict(X_test)

linear.score(X_test,y_test)

linear.score(X_train,y_train)

linear.coef_

linear.intercept_

# 研究每个特征和标记之间的关系
# 用每个特征作为训练数据
plt.figure(figsize=(2*6,4*5))
for i,col in enumerate(feature_names,1):
    # 取数据
    X_train=df[[col]]
    linear=LinearRegression()
    linear.fit(X_train,target)
    
    # 生成预测数据
    X_test=np.linspace(X_train.min(),X_train.max(),100).reshape(-1,1)
    y_=linear.predict(X_test)
    
    # 画图
    axes=plt.subplot(5,2,i)
    axes.scatter(X_train,target)
    axes.plot(X_test,y_,c='r')
    score=linear.score(X_train,target)
    axes.set_title(col+str(i))

2.岭回归

原理

缩减系数来“理解”数据

如果数据的特征比样本点还多应该怎么办?是否还可以使用线性回归和之前的方法来做预测?

答案是否定的,即不能再使用前面介绍的方法。这是因为输入数据的矩阵X不是满秩矩阵。非满秩矩阵在求逆时会出现问题。

为了解决这个问题,统计学家引入了岭回归(ridge regression)的概念

缩减方法可以去掉不重要的参数,因此能更好地理解数据。此外,与简单的线性回归相比,缩减法能取得更好的预测效果。

岭回归是加了二阶正则项(lambda*I)的最小二乘,主要适用于过拟合严重或各变量之间存在多重共线性的时候,岭回归是有bias的,这里的bias是为了让variance更小。

归纳总结

1.岭回归可以解决特征数量比样本量多的问题

2.岭回归作为一种缩减算法可以判断哪些特征重要或者不重要,有点类似于降维的效果

3.缩减算法可以看作是对一个模型增加偏差的同时减少方差

岭回归用于处理下面两类问题:

1.数据点少于变量个数

2.变量间存在共线性(最小二乘回归得到的系数不稳定,方差很大)

 

3.lasso回归

原理

【拉格朗日乘数法】

对于参数w增加一个限定条件,能到达和岭回归一样的效果:

在lambda足够小的时候,一些系数会因此被迫缩减到0

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值