1.分类和回归最本质的区别

定量输出称为回归,或者说是连续变量预测;
    定性输出称为分类,或者说是离散变量预测。

举个特别好理解的例子:

预测明天的气温是多少度,这是一个回归任务;

预测明天是阴、晴还是雨,就是一个分类任务。

2.线性回归的定义是:

目标值预期是输入变量的线性组合。线性模型形式简单、易于建模,但却蕴含着机器学习中一些重要的基本思想。线性回归,是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。

单变量线性回归:涉及到的变量只有一个。例如:预测房价例子中房子的大小预测房子的价格。f(x) = w1*x+w0,这样通过主要参数w1就可以得出预测的值。通用公式为:

多变量线性回归:涉及到的变量两个或者两个以上。例如:瓜的好坏程度 f(x) = w0+0.2色泽+0.5根蒂+0.3*敲声

,得出的值来判断一个瓜的好与不好的程度。通用公式为:

线性回归的通用公式如下:

线性模型中的向量W值,客观的表达了各属性在预测中的重要性,因此线性模型有很好的解释性。对于这种“多特征预测”也就是(多元线性回归),那么线性回归就是在这个基础上得到这些W的值,然后以这些值来建立模型,预测测试数据。简单的来说就是学得一个线性模型以尽可能准确的预测实值输出标记。

那么如果对于多变量线性回归来说我们可以通过向量的方式来表示W值与特征X值之间的关系:

两向量相乘,结果为一个整数是估计值,其中所有特征集合的第一个特征值x_0x0=1,那么我们可以通过通用的向量公式来表示线性模型:

一个列向量的转置与特征的乘积,得出我们预测的结果,但是显然我们这个模型得到的结果可定会有误差,如下图所示:

单变量:

多变量:

3.损失函数

损失函数是一个贯穿整个机器学习重要的一个概念,大部分机器学习算法都会有误差,我们得通过显性的公式来描述这个误差,并且将这个误差优化到最小值。

对于线性回归模型,将模型与数据点之间的距离差之和做为衡量匹配好坏的标准,误差越小,匹配程度越大。我们要找的模型就是需要将f(x)和我们的真实值之间最相似的状态。于是我们就有了误差公式,模型与数据差的平方和最小(最小二乘法):

上面公式定义了所有的误差和,那么现在需要使这个值最小?那么有两种方法,一种使用梯度下降算法另一种是正规方程解法(只适用于简单的线性回归)。

单变量损失函数直观图:(最低点即损失函数最小)

4.正规方程

缺点:当特征过于复杂时,求解速度太慢。

对于复杂的算法,不能使用正规方程求解。

5.梯度下降

我们以单变量中的w0,w1为例子:

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

6.sklearn线性回归正规方程、梯度下降API

sklearn.linear_model.LinearRegression()普通最小二乘线性回归
coef_:回归系数
sklearn.linear_model.SGDRegressor( )通过使用SGD最小化线性模型
coef_:回归系数

波士顿房价预测:

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression, SGDRegressorlb = 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()
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(lr.coef_)
y_sgd_predict = std_y.inverse_transform(sgd.predict(x_test))
print("使用梯度下降预测的房子价格:", y_sgd_predict)

结果:

第一行数据:回归系数

[[-0.07110004  0.08615889  0.0202595   0.04529581 -0.22254461  0.334093880.01187951 -0.30872724  0.26608433 -0.21076225 -0.22538056  0.1155019-0.38227127]]
使用正规方程每个房子的预测价格: [[20.09395849][ 7.75780455] [31.32890865][28.7085605 ][18.49587736] [19.96238427][23.72283389][23.24285098][18.1368784 ] [36.93921927][16.5198657 ][32.76367153][20.29527606][33.92074648][19.713028  ][27.51034563][20.25491888][20.21605936][13.56587488][28.74732844][19.24479251][17.04491197][22.64405873][ 8.62358537][ 5.62011295][18.05814953][21.14780415][20.31204554][19.65113966][21.14712068][18.43113236][11.0980478 ][43.16397586] [20.9124311 ] [21.15620973] [23.92540998] [18.77503749][22.59984256] [13.59489673] [27.98415227] [36.29917245] [18.81531739] [41.83649405][25.6151952 ][20.76087712] [11.45436917] [12.40058648] [22.26546069] [20.27419562][26.39823994] [24.43034311] [21.10312063] [27.54437518] [29.48756635] [17.53898987][19.47640462] [19.6548141 ] [17.37354367][31.89824482] [18.2063851 ] [16.47210667] [20.48277998] [16.8990683 ] [22.79968676] [-5.46872239] [23.77735018][19.81306667] [18.35743493] [22.39898672] [25.17329992] [22.01602245] [ 4.24147802][31.69162161] [28.73213519] [12.65185419] [40.0616262 ][27.80247031] [16.59949423][ 5.59091431] [15.16137179] [19.14544968] [24.47098474][33.43290072] [27.29195521][21.79981509] [40.65276762] [13.0583617 ] [16.88067478] [22.21407728] [22.13970158] [19.31962385] [14.11739507] [13.43513183] [17.79521648] [24.99292649] [31.1194976 ] [19.46384384] [15.70534771] [12.22164557] [15.39920638] [13.1226957 ] [31.5585473 ][ 3.69700778] [ 7.16909131][21.73385423] [ 9.43926617] [18.16459167] [19.66612955] [21.56944985] [34.96154248] [17.8787807 ] [31.20116587] [31.62536828] [21.63368564] [35.11383774] [31.20850887] [25.31469268] [41.91712757] [13.90480205] [16.98830066][28.48438938] [12.04700768] [33.72136355] [15.97341785] [25.83616065][16.47333155] [33.26404024]]
E:\Python3.7.1\lib\site-packages\sklearn\utils\validation.py:724: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().y = column_or_1d(y, warn=True)
[[-0.07110004  0.08615889  0.0202595   0.04529581 -0.22254461  0.334093880.01187951 -0.30872724  0.26608433 -0.21076225 -0.22538056  0.1155019-0.38227127]]
使用梯度下降预测的房子价格: [20.42570443  8.23313351 31.59248135 29.12108101 17.94262076 20.5657525423.11016219 22.98334928 18.41874767 37.27913865 17.2293773  31.3448592120.58124388 32.60576852 19.52397959 27.48723517 20.85221256 20.576790214.98945013 27.42679315 19.1111466  17.31486075 24.14478815  7.59141257.98308519 18.56284837 22.2908332  20.68488199 20.24815352 21.587941618.28855151 10.99702522 41.51613254 20.99774426 21.97210991 23.564118919.1508575  22.98519911 14.21597604 28.20545266 35.97883679 19.2707087641.62111099 25.47199732 21.01636063 12.21563099 12.75602544 22.1923002220.87170875 26.63997148 24.80844094 21.01538657 26.79155218 29.3173596917.60923055 19.99605401 19.49341462 17.41423209 31.78808718 18.8028586116.80189406 20.7288167  17.94327651 22.76529794 -4.10743251 24.0516021419.77214922 18.48844551 22.05091379 25.08626507 21.96007063  5.1990539331.31703446 28.10599283 13.63894181 39.4880974  27.53222297 17.164604775.57969705 16.14625822 18.93368569 24.57247371 33.20838269 27.0283567623.12510729 40.76209519 13.48343876 16.94595687 22.33629466 22.004341519.50803639 14.74630014 13.51828831 17.97033323 24.96401484 30.6515090119.75771178 16.25640754 11.2600302  18.57399563 13.9886661  31.390998064.27354647  8.58681726 22.08055389 10.66432915 18.56129223 19.8497608321.31095001 34.74986742 17.50495043 31.32361712 31.23532952 21.4309822734.58027063 30.64404323 25.2521442  40.22778487 14.39440457 18.300303128.87639243 12.94033115 33.10748415 15.67984941 25.88724062 16.3682815332.34043352]

7.回归性能评估

对于不同的类别预测,我们不能苛刻的要求回归预测的数值结果要严格的与真实值相同。一般情况下,我们希望衡量预测值与真实值之间的差距。因此,可以测评函数进行评价。其中最为直观的评价指标均方误差(Mean Squared Error)MSE,因为这也是线性回归模型所要优化的目标。

MSE的计算方法如下:

8.sklearn回归性能评估

mean_squared_error(y_true, y_pred)

  • 均方误差回归损失
  • y_true:真实值
  • y_pred:预测值
  • return:浮点数结果

对于前面预测波士顿房价的例子,对其回归性能进行评估

from sklearn.metrics import mean_squared_error
.
.
.
print("正规方程的均方误差:",mean_squared_error(std_y.inverse_transform(y_test),y_lr_predict))
print("正规方程的均方误差:",mean_squared_error(std_y.inverse_transform(y_test),y_lr_predict))

正规方程的均方误差: 19.978543165306537 梯度下降的均方误差: 18.844715397188626

9.正规方程和梯度下降总结

特点:

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

小规模数据:正规方程LinearRegress(不能解决拟合问题)

大规模数据:梯度下降SGDRegress

参考:

《统计机器学习》

吴恩达的机器学习课程

某机构视频

回归算法-线性回归分析-正规方程和梯度下降相关推荐

  1. 回归算法-线性回归分析-过拟合欠拟合岭回归

    1.欠拟合与过拟合 机器学习中的泛化,泛化即是,模型学习到的概念在它处于学习的过程中时模型没有遇见过的样本时候的表现.在机器学习领域中,当我们讨论一个机器学习模型学习和泛化的好坏时,我们通常使用术语: ...

  2. 13_线性回归分析、线性模型、损失函数、最小二乘法之梯度下降、回归性能评估、sklearn回归评估API、线性回归正规方程,梯度下降API、梯度下降 和 正规方程对比

    1.线性回归 1.1 线性模型 试图学得一个通过属性的线性组合来进行预测的函数: 1.2 定义 定义:线性回归通过一个或者多个自变量与因变量之间进行建模的回归分析.其中特点为一个或多个称为回归系数的模 ...

  3. 机器学习(11)线性回归(1)理论:损失函数(含最小二乘法)、正规方程、梯度下降、回归性能评估(均方差)

    目录 一.线性回归基础理论 1.定义与公式 2.线性关系(单特征与双特征) 2-1.单特征线性关系 2-2.双特征平面关系 2-3.其他线性模型 二.线性回归的损失和优化原理 1.损失函数 1.定义 ...

  4. 正规方程,梯度下降,岭回归——机器学习

    线性回归 一. 介绍 1. 1 线性回归API介绍--LinearRegression 二. 线性回归的损失和优化 2.1 全梯度下降算法(FG) 2.2 随机梯度下降算法(SG) 2.3 小批量梯度 ...

  5. 线性支持向量机的随机梯度下降

    文章目录 算法和代码之间的误区 线性支持向量机的随机梯度下降 代码 算法和代码之间的误区 在看统计学习方法的时候,线性支持向量机学习算法变成代码时,下面这个函数不知道如何构造成算法: 为什么我认为需要 ...

  6. SparkML之回归(二)岭回归和Lasso阐述及OLS,梯度下降比较

    岭回归(RidgeRegression)它的上一级称之为Tikhonov regularization,是以Andrey Tikhonov命名的. Lasso(least absolute shrin ...

  7. sklearn - 线性回归(正规方程与梯度下降)

    一: 线性回归方程 ​ 线性回归(英语:linear regression)是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量 之间关系进行建模的一种回归分析.这种函数是一个或多个称为回归 ...

  8. 优化算法中的鞍点与梯度下降

    摘要:本文将讨论寻找凸路径( convex path )时可能会遇到的不同类型的临界点( critical points),特别是基于梯度下降的简单启发式学习方法,在很多情形下会使你在多项式时间内陷入 ...

  9. 最优化算法数学详解之——梯度下降法和牛顿迭代法

    目录 应用情景 为何不直接求解析解? 梯度下降法 牛顿迭代法 两种算法比较 应用情景 当我们有了一堆数据,需要用这堆数据构建模型时,首先需要确定模型中的变量,其次确定模型形式,最后需要确定模型中的参数 ...

最新文章

  1. 收藏:存储知识全面总结
  2. cross_val_score,cross_val_predict,cross_validate理解
  3. 记录一下CMake编译opencv_cuda时的易错点
  4. python【蓝桥杯vip练习题库】ALGO-71比较字符串
  5. 多生产者多消费者问题
  6. 跟老杨学java系列(一)前传
  7. 达摩院携手交通部公路科学研究院 探索国内首个道路智能解决方案
  8. varnish-cache使用
  9. git通过指令查看某一个已经修改的文件的改动
  10. Python oct 函数 - Python零基础入门教程
  11. 特斯拉电动皮卡不太香:预订表现不及3年前的Model 3
  12. android listview 不重绘,重绘listview
  13. wpf之DragDrop研究
  14. EduCoder-Web程序设计基础-html5-表格基本结构-第4关:表格中单元格样式的设置
  15. php 获取header头信息并显示网址,php 获取远程网址header头信息的方法
  16. 深度学习基础:机器学习中的基函数与函数空间
  17. 亚马逊违反受限商品政策三次,亚马逊恢复受限asin
  18. 计算机网络汇聚层,【大白电气】接入层、汇聚层、核心层——中大型计算机网络系统结构介绍及交换机选型建议...
  19. blender_mmd_tools_extra 插件介绍
  20. 基于SpringBoot+vue的前后端分离学生成绩管理系统的设计与实现--毕业设计

热门文章

  1. 单片机定时器和计数器的实验C语言,(单片机原理与应用)定时器/计数器设计实验...
  2. Win7系统禁用驱动程序强制签名的方法(win7 64加载未签名驱动 免签名)
  3. 在 Anaconda3 5.0.0 中安装 Plot.ly Dash
  4. 中国云市场生变:华为云Q2份额超AWS,IaaS+PaaS迎来整体增长
  5. redis 3.0.7 cluster 集群部署
  6. 最新友盟微信,QQ与微博分享集成方案
  7. 游戏测试和普通测试有什么区别?
  8. 安装torch0.4.1的神坑
  9. 服务器无线密码是什么原因,有密码为什么连不上wifi
  10. 二重调度(一):什么是二重调度?