线性回归

分类: 目标值离散
回归: 目标值连续

线性回归:寻找一种能预测的趋势

线性关系:-二维:直线关系-三维:平面

线性关系定义

y=kx+by = kx + by=kx+b

参数b,偏置项,为了对于单个特征的情况更加通用
参数k,权重

f(x)=w1x1+w2x2+...+wdxd+bf(x) = w_1x_1 + w_2x_2 +...+ w_dx_d + bf(x)=w1​x1​+w2​x2​+...+wd​xd​+b

线性回归定义:
线性回归通过一个或多个自变量与因变量之间进行建模的回归分析

一元线性回归:变量只有一个
多元线性回归:变量两个或以上

通用公式:
h(w)=w0+w1x1+w2x2+...=wTxh(w) = w_0 + w_1x_1 + w_2x_2 + ... = w^Tx h(w)=w0​+w1​x1​+w2​x2​+...=wTx
其中w,x为矩阵
w=(w0w1w2)w = \begin{pmatrix} w_0 \\ w_1 \\ w_2 \end{pmatrix}w=⎝⎛​w0​w1​w2​​⎠⎞​, x=(1x1x2)x = \begin{pmatrix} 1 \\ x_1 \\ x_2 \end{pmatrix}x=⎝⎛​1x1​x2​​⎠⎞​

属性和权重的组合来预测结果

矩阵

        数组              矩阵
0维      11维      [1, 2, 3]2维      [               必须是二维的[1, 2, 3],     满足了特定的运算要求[4, 5, 6]      ]3维      [[[1, 2, 3],[4, 5, 6]],[[1, 2, 3],[4, 5, 6]]]

数组的运算:加法,乘法
numpy.ndarray

矩阵乘法:
(m行,l列) * (l行,n列) = (m行,n列)

特征值                 权重              目标值
[[1, 2, 3, 4]]   [[1], [2], [3], [4]]   一个样本一个值
(1, 4)              (4, 1)              (1,1)
(100, 4)              (4, 1)              (100,1)

数组相乘

import numpy as npa = [[1, 2, 3, 4], [5, 6, 7, 8], [1, 4, 3, 5]
]
b = [2, 2, 2, 2]np.multiply(a, b)Out[5]:
array([[ 2,  4,  6,  8],[10, 12, 14, 16],[ 2,  8,  6, 10]])

矩阵相乘

import numpy as npa = [[1, 2, 3, 4], [5, 6, 7, 8], [1, 4, 3, 5]
]
c = [[2], [2], [2], [2]
]np.dot(a, c)
Out[9]:
array([[20],[52],[26]])

线性回归

求函数中的参数w,使得损失函数最小

迭代的算法

损失函数(误差大小)

f(a)=(hw(x1)−y1)2+(hw(x2)−y2)2+...+(hw(xm)−ym)2f(a)=(h_w(x_1)-y_1)^2 + (h_w(x_2)-y_2)^2 + ... +(h_w(x_m)-y_m)^2f(a)=(hw​(x1​)−y1​)2+(hw​(x2​)−y2​)2+...+(hw​(xm​)−ym​)2
f(a)=∑i=1m(hw(xi)−yi)2f(a) = \sum_{i=1}^{m}(h_w(x_i)-y_i)^2f(a)=i=1∑m​(hw​(xi​)−yi​)2
yiy_iyi​ 为第i个训练样本的真实值
hw(xi)h_w(x_i)hw​(xi​) 为第i个训练赝本特征值组合预测函数
又称为最小二乘法

尽量去减少损失,算法的自我学习过程

算法      策略(损失函数) 优化
线性回归     误差平方和    正规方程最小二乘法    梯度下降

最小二乘法之正规方程

w=(XTX)−1XTyw = (X^TX)^{-1}X^Tyw=(XTX)−1XTy

XXX 为特征矩阵
yyy 为目标值矩阵
缺点:当特征过于复杂,求解速度太慢

XTX^TXT 转置

X−1X^-1X−1 求逆 -> X∗?=单位矩阵X * ? = 单位矩阵X∗?=单位矩阵
单位矩阵

[[1, 0, 0], [0, 1, 0], [0, 0, 1]
]

最小二乘法之梯度下降

方向
d=bcost(w0+w1x1)bw1d = \frac{bcost(w0+w1x1)}{bw1}d=bw1bcost(w0+w1x1)​

w1:=−w1−adw1 := -w1 -adw1:=−w1−ad
w0:=−w0−adw0 := -w0 -adw0:=−w0−ad

a是学习速率

沿着这个函数下降的方向找,最后就能找到山谷的最低点,然后更新w值

使用:面对训练数据规模十分庞大的任务

线性回归API

普通最小二乘线性回归
sklearn.linear_model.LinearRegression
coef_ 回归系数

使用SGD最小线性模型
sklearn.linear_model.SGDRegressor
coef_ 回归系数

scikit-learn
优点:封装好,建立模型简单,预测简单
缺点:算法过程,参数都在算法内部优化

v0.18
v0.19 转换器 estimator 要求数据必须是二维数据
reshape(-1, 1)

TensorFlow
封装高低都有,自己实现线性回归

回归性能评估

均方误差(Mean Squared Error)MSE评价机制
MSE=1m∑i=1m(yi−y−)2MSE=\frac{1}{m}\sum_{i=1}^{m}(y^i-y^-)^2MSE=m1​i=1∑m​(yi−y−)2

yiy^iyi预测值
y−y^-y−真实值

梯度下降和正规方程区别

梯度下降 正规方程
需要选择学习率a 不需要
需要多次迭代 一次运算得出
当特征数据量n大时能较好适用 如果特征数量n较大则运算代价较大
适用于各种类型的模型 只适用于线性模型,不适合逻辑回归模型
大规模数据 小规模数据,过拟合

代码示例

# -*- coding: utf-8 -*-from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression, SGDRegressor
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error# 加载数据
boston = load_boston()# 训练集,测试集拆分
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.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()
y_train = std_y.fit_transform(y_train.reshape(-1, 1))
y_test = std_y.transform(y_test.reshape(-1, 1))# 正规方程 线性回归预测
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)# 梯度下降 线性回归预测
sgd = SGDRegressor()
sgd.fit(X_train, y_train)print(sgd.coef_)y_sgd_predict = std_y.inverse_transform(sgd.predict(X_test))
print(y_sgd_predict)# 性能评估 均方误差
lr_mse = mean_squared_error(std_y.inverse_transform(y_test), y_lr_predict)
sgd_mse = mean_squared_error(std_y.inverse_transform(y_test), y_sgd_predict)print(lr_mse)  # 28.97
print(sgd_mse)  # 31.36

机器学习:线性回归梯度下降预测波士顿房价相关推荐

  1. Python实验--线性回归+梯度下降预测波士顿房价

    1. 数据集介绍 先介绍一下将用到的数据集: 共506样本,每个样本包括13个属性以及真实房价 数据预处理: 1.从sklearn的数据库中提取boston的数据库 2.输出每个属性和房价之间的关联 ...

  2. 【梯度下降在波士顿房价预测中的应用】

    数据准备 我们首先需要加载波士顿房价数据集.该数据集包含房屋特征信息和对应的房价标签. import pandas as pd import numpy as npdata_url = "h ...

  3. Udacity机器学习入门项目5:预测波士顿房价

    机器学习工程师纳米学位 模型评价与验证 项目 1: 预测波士顿房价 欢迎来到机器学习工程师纳米学位的第一个项目!在此文件中,有些示例代码已经提供给你,但你还需要实现更多的功能来让项目成功运行.除非有明 ...

  4. 梯度下降法预测波士顿房价以及简单的模型评估

    目录 原理 代码 关于归一化的思考 原理 观察数据可知属性之间差距很大,为了平衡所有的属性对模型参数的影响,首先进行归一化处理. 每一行是一个记录,每一列是个属性,所以对每一列进行归一化. 二维数组归 ...

  5. 【python机器学习】线性回归--梯度下降实现(基于波士顿房价数据集)

    波士顿房价数据集字段说明 crim 房屋所在镇的犯罪率 zn 面积大于25000平凡英尺住宅所占比例 indus 房屋所在镇非零售区域所占比例 chas 房屋是否位于河边 如果在河边,值1 nox 一 ...

  6. 线性回归之案例:波士顿房价预测

    线性回归之案例:波士顿房价预测 数据介绍   [13个特征值,1个目标值] 给定的这些特征,是专家们得出的影响房价的结果属性.此阶段不需要自己去探究特征是否有用,只需要使用这些特征.到后面量化很多特征 ...

  7. 机器学习项目-预测波士顿房价-整体流程

    项目 1: 预测波士顿房价¶ 第一步. 导入数据 在这个项目中,你将利用马萨诸塞州波士顿郊区的房屋信息数据训练和测试一个模型,并对模型的性能和预测能力进行测试.通过该数据训练后的好的模型可以被用来对房 ...

  8. 项目 1: 预测波士顿房价

    机器学习工程师纳米学位 模型评价与验证 项目 1: 预测波士顿房价 欢迎来到机器学习工程师纳米学位的第一个项目!在此文件中,有些示例代码已经提供给你,但你还需要实现更多的功能来让项目成功运行.除非有明 ...

  9. 线性回归—梯度下降python实现

    import numpy as np import pandas as pd 导入数据 data=pd.read_csv(r"F:\数据集\dataset\boston.csv") ...

最新文章

  1. 重要更新 | 谷歌发布 TensorFlow 1.4,迁移Keras,支持分布式训练
  2. springboot jpa 复合主键 联合主键
  3. android 图片二维码识别和保存(二)
  4. 难点电路详解之负反馈放大器电路(4)
  5. Sentinel 与 Hystrix、resilience4j 的对比
  6. 数据结构讲义代码堆和栈、多线程、多进程、网络编程
  7. 一般动态规划问题合集(Leetcode题解-Python语言)
  8. SQLLoader1(简单测试,以控制文件方式导入数据)
  9. sql 占比计算_数据库索引的优化及SQL处理过程(建议收藏)
  10. ​对不起!你的超融合认知已过期……
  11. “页面制作人员”?“页面工程师”?“页面架构师”?滚一边去!
  12. 让Mootools的语法结构像Jquery那样
  13. python学习笔记(二十七)多线程与多进程
  14. Cisco2811做端口映射
  15. 了解 Web 服务规范,第 5 部分: WS-Policy
  16. matlab学习技巧之semilogx和semilogy函数
  17. 任天堂switch底座带网口全新方案分享
  18. iOS 各种证书/签名详解
  19. 艾美捷FLIVO探针:用于细胞活体凋亡检测,助力科研!
  20. CyberLink PowerDVD Ultra v19.0.2005.62极致中文破解版

热门文章

  1. 博客园电子期刊2012年8月刊发布啦
  2. 汽车多重定位,实时定位追踪,远程查看汽车运行轨迹
  3. 遗传算法求解3D打印中零件二维排布问题(MATLAB实现)
  4. 风口上的低代码:诱人的故事,危险的豪赌
  5. 房价这么高,为什么租金却高不起来?
  6. 罗伯塔·威廉姆斯(roberta williams)是世界上第一位图形计算机游戏设计师,但她以...
  7. CF546C. Soldier and Cards(队列+模拟)
  8. Ubuntu共享文件夹设置
  9. 智邦国际ERP生产排产缩短生产周期
  10. 去年一个百万级的小软件项目经验分享,20来个功能模块,项目不太好做有些棘手