机器学习笔记07:线性回归

1298-范同学

发表文章数:81

热门标签

首页 » 算法 » 正文

线性回归

1.回归问题:

  1. 目标值是连续的。相比分类问题,分类问题的目标值是离散的。
  2. 回归:找一种能预测的趋势。
  3. 线性关系:二维:直线关系;三维:平面关系。
  4. 多个特征:
    机器学习笔记07:线性回归
  5. 定义:
    机器学习笔记07:线性回归
  6. 矩阵
    机器学习笔记07:线性回归
    1. 数组与矩阵的区别:
      机器学习笔记07:线性回归
  7. 损失函数(误差大小):
    机器学习笔记07:线性回归
    1. 方法1:正规方程(不怎么用)
    2. 方法2:梯度下降非常重要,这是一个迭代过程
      机器学习笔记07:线性回归
    3. API:sklearn.linear_model.SGDRegressor
    4. 通过使用SGD最小化线性模型:coef_:回归系数
  8. 案例:
    1. 波士顿地区房价数据获取
    2. 波士顿地区房价数据分割
    3. 训练与测试数据标准化处理
    4. 使用最简单的线性回归模型LinearRegression和梯度下降估计SGDRegressor对房价进行预测
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression,SGDRegressor
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error


def mylinear():
    # 线性回归
    # 获取数据
    lb = load_boston()
    
    # 分割数据集到训练集和测试集
    x_train,x_test,y_train,y_test = train_test_split(lb.data,lb.target,test_size=0.25)
    # 进行标准化处理,特征值和目标值都要进行处理
    std_x = StandardScaler()
    x_train = std_x.fit_transform(x_train)
    x_test = std_x.transform(x_test)
    
    
    std_y = StandardScaler()
    # 0.18 和 0.19 版本,转换器在后者必须是二维的
    y_train = std_y.fit_transform(y_train.reshape(-1,1))
    y_test = std_y.transform(y_test.reshape(-1,1))
    
    # 梯度下降
    sgd = SGDRegressor()
    
    sgd.fit(x_train,y_train)
    
    print(sgd.coef_)
    
    
    y_predict = std_y.inverse_transform(sgd.predict(x_test))
    
    
    print("梯度下降测试集的预测出来的",y_predict)
    print("梯度下降",mean_squared_error(std_y.inverse_transform(y_test),y_predict))

    lr = LinearRegression()
    
    lr.fit(x_train,y_train)
    
    print(lr.coef_)
    
    
    y_lr_predict = std_y.inverse_transform(lr.predict(x_test))
    
    
    print("正规方程测试集的预测出来的",y_lr_predict)
    print("正规方程",mean_squared_error(std_y.inverse_transform(y_test),y_lr_predict))

if __name__ == "__main__":
    mylinear()
  1. 过拟合和欠拟合:
    过拟合:一个假设在训练数据上能够获得比其他假设更好的拟合, 但是在训练数据外的数据集上却不能很好地拟合数据,此时认为这个假设出现了过拟合的现象。(模型过于复杂)
    原因:
    原始特征过多,存在一些嘈杂特征,
    模型过于复杂是因为模型尝试去兼顾
    各个测试数据点
    解决办法:
    进行特征选择,消除关联性大的特征(很难做)
    交叉验证(让所有数据都有过训练)
    正则化:解决方法
    欠拟合:一个假设在训练数据上不能获得更好的拟合, 但是在训练数据外的数据集上也不能很好地拟合数据,此时认为这个假设出现了欠拟合的现象。(模型过于简单)
    **原因:**学习到数据的特征过少
    解决办法:增加数据的特征数量
    机器学习笔记07:线性回归
  2. L2正则化:Ridge岭回归:
    作用:可以使得W的每个元素都很小,都接近于0
    优点:越小的参数说明模型越简单,越简单的模型则越不
    容易产生过拟合现象
    API:sklearn.linear_model.Ridge
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression,SGDRegressor,Ridge
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error


def mylinear():
    # 线性回归
    # 获取数据
    lb = load_boston()
    
    # 分割数据集到训练集和测试集
    x_train,x_test,y_train,y_test = train_test_split(lb.data,lb.target,test_size=0.25)
    # 进行标准化处理,特征值和目标值都要进行处理
    std_x = StandardScaler()
    x_train = std_x.fit_transform(x_train)
    x_test = std_x.transform(x_test)
    
    
    std_y = StandardScaler()
    # 0.18 和 0.19 版本,转换器在后者必须是二维的
    y_train = std_y.fit_transform(y_train.reshape(-1,1))
    y_test = std_y.transform(y_test.reshape(-1,1))

    rd = Ridge(alpha = 1.0)
    
    rd.fit(x_train,y_train)
    
    print(rd.coef_)
    
    
    y_rd_predict = std_y.inverse_transform(rd.predict(x_test))
    
    
    print("岭回归测试集的预测出来的",y_rd_predict)
    print("岭回归",mean_squared_error(std_y.inverse_transform(y_test),y_rd_predict))
    
if __name__ == "__main__":
    mylinear()
     
标签:

未经允许不得转载:作者:1298-范同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《机器学习笔记07:线性回归》 发布于2020-11-10

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录