首页 > 其他 > 详细

线性回归

时间:2020-04-01 17:42:52      阅读:100      评论:0      收藏:0      [点我收藏+]

 

## 分类问题是离散型数据,回归问题是连续型数据  ##

 

 

技术分享图片

 

 

线性关系模型:

一个通过属性的线性组合来进行预测的函数:
f(x) = w1x1 + w2x2 + ... + wdxd + b
w为权重,b成为偏置项,可以理解为:w0*1

什么是线性回归?

定义线性回归通过一个或者多个自变量(特征)与因变量(目标值)之间进行建模的回归分析。其中可
以为一个或多个自变量之间的线性组合(线性回归的一种)
一元线性回归:涉及到的变量只有一个
多远线性回归:涉及到的变量两个或两个以上

 

技术分享图片  # T为转置 #

 

 

 

矩阵乘法
(二维 乘法)
    (m行 , n列) * (n行 , l列) = (m行 , l列)
  各自一一对应相乘相加的到m行的值,形成l列

  技术分享图片

 

 


回归算法的评估:

  预测结果和真实值有一定的误差。

技术分享图片

 

 技术分享图片

 

 

如何去求解模型当中的w,使得损失最小? (目的是找到最小损失对应的w值)

优化方法

最小二乘法之正规方程

技术分享图片

 

 ## -1是倒数的意思,矩阵 * 逆矩阵= 同阶的单位矩阵(对角线为1,其余为0) ##

技术分享图片

 

 最小二乘法之梯度下降

技术分享图片

 

 技术分享图片

 

 正规方程和梯度下降(图示,无动态图):

技术分享图片

 

 ## 一图为不断上下训练缩小损失值,找到最合适的线 二图梯度下降,依次梯度下降,直到最小值. ##

 线性回归正规方程,梯度下降API:

sklearn.linear_model.LinearRegression
  正规方程
  普通最小二乘线性回归
  coef_:回归系数
sklearn.linear_model.SGDRegressor
  梯度下降
  coef_:回归系数

 

回归性能评估

技术分享图片

 

 

sklearn.metrics.mean_squared_error(y_true,y_pred)
    均方误差回归损失
    y_true:真实值
    y_pred:预测值
    return:浮点数结果
注:真实值,预测值为标准化之前的值

 


案例  波士顿房价预测:sklearn 提供的数据集

技术分享图片

 

 案例流程:
1. 获取波士顿地区的房价数据
2. 数据集划分(获取的数据为处理好的,直接使用)
3. 训练与测试集的数据标准化处理
4. 使用最简单的线性回归模型和梯度下降对房价进行预测

 

from sklearn.linear_model import LinearRegression,SGDRegressor,Ridge #最小二乘法:正规方程和梯度下降,
from sklearn.model_selection import train_test_split #数据集划分
from sklearn.datasets import load_boston #波士顿房价数据
from sklearn.preprocessing import StandardScaler #标准化处理
from sklearn.metrics import mean_squared_error # 均方误差评价机制

# 线性回归预测房价
# 1.获取数据
lb =load_boston()
# 2.分割数据集
x_train ,x_test ,y_train , y_test =train_test_split(lb.data,lb.target,test_size=0.25)

# 3.标准化处理,统一标准化,
std_x=StandardScaler()
# 特征值 标准化,(提升数据的稳定性,把值转到一个固定的范围)
x_train=std_x.fit_transform(x_train)
x_test=std_x.transform(x_test)  
# (特征值标准化值缩小,目标值和特征值不一样,需重新实例化)
# 目标值 标准化 ,标准化需要传递二维数据
std_y =StandardScaler()
y_train = std_y.fit_transform(y_train.reshape((-1,1))) #不知道有多少行,填-1,有多少是多少
y_test=std_y.transform(y_test.reshape((-1,1)))

# 正规方程预测
lr=LinearRegression()
lr.fit(x_train,y_train)

print(正规方程求解系数:,lr.coef_,\n)
y_lr_predict =lr.predict(x_test)  #标准化之后的值
y_lr_predict=std_y.inverse_transform(y_lr_predict)  # 转换为原始的数据
print(正规方程房价预测结构:,y_lr_predict)
print(正规方程的均方误差:,mean_squared_error(std_y.inverse_transform(y_test),y_lr_predict))

正规方程??,梯度下降??:

# 梯度下降
sgd=SGDRegressor()
sgd.fit(x_train,y_train.reshape(-1,))  # 梯度下降的目标值,需要为一维的

# 回归系数
print(梯度下降求解系数:,sgd.coef_,\n)
y_sgd_predict =sgd.predict(x_test)  #标准化之后的值
y_sgd_predict=std_y.inverse_transform(y_sgd_predict)  # 反标准化,还原
print(梯度下降房价预测结构:,y_sgd_predict)
print(梯度下降的均方误差:,mean_squared_error(std_y.inverse_transform(y_test),y_sgd_predict))

正规方程和梯度下降输出:

技术分享图片

 

 技术分享图片

 

 技术分享图片

 

 总结:

技术分享图片

 

 

线性回归是最简单,易用的回归模型。从某种程度上限制了使用,尽管如此,在不知道特征之间关系的
前提下,我们仍然使用线性回归作为大多数系统的首要选择。

 

线性回归

原文:https://www.cnblogs.com/luowei93/p/11964737.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!