机器学习笔记二 单型线性回归
线性回归
- (一)介绍
- (二) 数学模型
- 2.1 一元线性回归公式
- 2.2 方差 - 损失函数 Cost Function
- 2.3 优化方法 Optimization Function
- 2.4 算法步骤
- (三)Python 实现
(一)介绍
机器学习即指机器可以自我学习,而机器学习的方法就是利用现有的数据和算法,解出算法的参,从而得到可以用的模型。
监督学习就是利用已有的数据(我们叫X,或者特征),和数据的标注(叫Y),找到x和y之间的对应关系,或者说是函数f。
回归分析是一种因变量为连续值的监督学习。而线性回归指一种x和y之间的关系为线性关系的回归分析。
y=a1x1+a2x2+by=a1x1+a2x2+by=a1x1+a2x2+b
,这个叫线性关系。如果这里出现了x2,log(x),sin(x)x2,log(x), sin(x)x2,log(x),sin(x)之类的,那就不是线性关系了。
而一元线性回归说的是,自变量x是一个纯量(scalar)。scalar类型的变量,是不可再分的。
**举例:**找出算法工程师和程序员之间的工资关系。这里直接给出北京,上海,杭州,深圳,广州的工资。
画图分析他们之间的关系大致是线性:
这时候,我们就可以试着用一元线性回归去拟合(fit)他们之间的关系。
(二) 数学模型
2.1 一元线性回归公式
公式:
y=ax+b+εy=ax+b+εy=ax+b+ε
y 为应变量 dependent variable
x 为自变量 independent variable
a 为斜率 coeffient
b 为截距 intercept
ε (读作epsilon)为误差,正态分布
线性回归的目标是,找到一组a和b,使得ε最小
y^=ax+b\widehat{y}=ax+by=ax+b
ε=y−y^ε=y−\widehat{y}ε=y−y
y^\widehat{y}y 读作y hat,也读作y帽子。这里的帽子一般表示估计值,用来区别真实值y。
下图帮助理解:
黑色的点为观测样本,即y=ax+b+εy=ax+b+εy=ax+b+ε
x红色的线为回归线,即y^=ax+b\widehat{y}=ax+by=ax+b
x蓝色的线段为误差,即ε=y−y^ε=y−\widehat{y}ε=y−y
2.2 方差 - 损失函数 Cost Function
在机器学习中,很多时候需要找到一个损失函数。有了损失函数,我们就可以经过不断地迭代,找到损失函数的全局或者局部最小值(或者最大值)。损失函数使得我们的问题转化成数学问题,从而可以用计算机求解。在线性回归中,我们用方差作为损失函数。我们的目标是使得方差最小。
下面的表格解释了什么是方差。
其中SSE(Sum of Square Error)是总的方差,MSE(Mean Square Error)是方差的平均值。
而这里的损失函数,用的是0.5 * MSE。即:
J(a,b)=12n∑i=0n(yi−yi^)2J(a,b)= \frac{1}{2n}\sum_{i=0}^{n} (yi−\widehat{yi})^{2}J(a,b)=2n1i=0∑n(yi−yi)2
记住,这里的损失函数是针对参数a和b的函数,y和y^\widehat{y}y其实都是已知的。
2.3 优化方法 Optimization Function
有了损失函数后,还需要一个方法,使得我们可以找到这个损失函数的最小值。机器学习里叫做优化方法。这里的优化方法,就是算损失的方向。或者说,当我的参数变化的时候,我的损失是变大了还是变小了。如果a变大了,损失变小了。那么,说明a增大这个方向是正确的,我们可以朝着这个方向继续小幅度的前进。反之,就应该考虑往相反的方向试试看。因为每个参数(a和b)都是一维的,所以,所谓的方向,无非就是正负符号。
这里,我们需要用偏微分的方法,得到损失函数的变化量。即:
如果你已经忘了微积分,你暂时可以不必纠结上面的公式,只要知道公式给出了损失函数的变化就可以了。伟大的python还提供了sympy,你可以用sympy做微积分。这部分我也放在附件代码里了,有兴趣的可以看一下。
之前说到,整过迭代过程是小幅度进行的。这里,就需要一个超参数来控制这个过程。这个超参数就是α,通常是0.01.
这时,我们就可以去更新a和b的值:
a=a−α∂J∂aa=a−α\frac{∂J}{∂a}a=a−α∂a∂J
b=b−α∂J∂bb=b−α\frac{∂J}{∂b}b=b−α∂b∂J
本身∂J∂a \frac{∂J}{∂a}∂a∂J和 ∂J∂b \frac{∂J}{∂b}∂b∂J 是损失函数的变化量。如果损失函数随着a变大了,即∂J∂a \frac{∂J}{∂a}∂a∂J为正。说明a的增大会导致损失函数的增大。那么是不是说,a的减小会使得损失函数减小呢?而我们的目标是使得J最小,所以,这个时候,我们的a要减小一点点。
2.4 算法步骤
a和b的起始值设置为零
通过模型yˆ=ax+b
y^=ax+b\widehat{y}=ax+by=ax+b,我们可以算出y^\widehat{y}y
有了y^\widehat{y}y,就可以用优化方法算去更新参数
重复2和3,直到找到J的最小值
下图解释了模型,损失函数和优化方法之间的关系。
模型,损失函数和优化方法之间的关系:
(三)Python 实现
首先是模型 :
def model(a, b, x):return a*x + b
损失函数:
def cost_function(a, b, x, y):n = 5return 0.5/n * (np.square(y-a*x-b)).sum()
优化函数:
def optimize(a,b,x,y):n = 5alpha = 1e-1y_hat = model(a,b,x)da = (1.0/n) * ((y_hat-y)*x).sum()db = (1.0/n) * ((y_hat-y).sum())a = a - alpha*dab = b - alpha*dbreturn a, b
三个函数中a和b是标量(scalar value),x和y是向量(vector)
至此,一元线性回归的主要部分就14行代码。
训练模型
用scikit-learn训练和评价模型
import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
%matplotlib inlinex = [13854,12213,11009,10655,9503] #程序员工资,顺序为北京,上海,杭州,深圳,广州
x = np.reshape(x,newshape=(5,1)) / 10000.0
y = [21332, 20162, 19138, 18621, 18016] #算法工程师,顺序和上面一致
y = np.reshape(y,newshape=(5,1)) / 10000.0
# 调用模型
lr = LinearRegression()
# 训练模型
lr.fit(x,y)
# 计算R平方
print lr.score(x,y)
# 计算y_hat
y_hat = lr.predict(x)
# 打印出图
plt.scatter(x,y)
plt.plot(x, y_hat)
plt.show()
有了模型,损失函数,优化函数,我们就可以训练模型了。
这里给出分别训练1次,再训练5次,再训练10次,再训练100,再训练10000次的模型。
分析:随着训练次数的增加,回归线越来越接近样本了。自己写的线性回归比较简单,我只能目测凭直觉感觉损失函数已经达到了最小值。
模型评价
在机器学习中,模型的好坏是有标准的。在回归模型中,我们用R2R^{2}R2 来评价模型。公式:
R2R^{2}R2=SSR/SST
其中
SSR=∑i=0n=(yi^−y‾)SSR=\sum_{i=0}^{n}= (\widehat{yi}−\overline{y})SSR=∑i=0n=(yi−y)
SSR=∑i=0n=(yi−y‾)SSR=\sum_{i=0}^{n}= (yi−\overline{y})SSR=∑i=0n=(yi−y)
y‾\overline{y}y读作y bar,是y的平均值。
可以证明SST=SSR+SSESST=SSR+SSESST=SSR+SSE。
机器学习笔记二 单型线性回归相关推荐
- 吴恩达机器学习笔记二之多变量线性回归
本节目录: 多维特征 多变量梯度下降 特征缩放 学习率 正规方程 1.多维特征 含有多个变量的模型,模型中的特征为(x1,x2,-xn), 比如对房价模型增加多个特征 这里,n代表特征的数量, x(i ...
- [机器学习笔记] Note3--多变量线性回归
继续是机器学习课程的笔记,这节课介绍的是多变量的线性回归. 多变量线性回归 多维特征 上节课介绍的是单变量的线性回归,这节课则是进一步介绍多变量的线性回归方法. 现在假设在房屋问题中增加更多的特征,例 ...
- [机器学习笔记] Note2--单变量线性回归
继续是机器学习课程的笔记,这节介绍的是单变量线性回归算法,线性回归算法也是一个比较基础的算法. 模型表达 首先是以房屋交易问题为例,假设我们回归问题的训练集如下表所示: Size in feet2fe ...
- 吴恩达机器学习笔记 —— 5 多变量线性回归
http://www.cnblogs.com/xing901022/p/9321045.html 本篇主要讲的是多变量的线性回归,从表达式的构建到矩阵的表示方法,再到损失函数和梯度下降求解方法,再到特 ...
- 机器学习笔记(二)模型评估与选择
2.模型评估与选择 2.1经验误差和过拟合 不同学习算法及其不同参数产生的不同模型,涉及到模型选择的问题,关系到两个指标性,就是经验误差和过拟合. 1)经验误差 错误率(errorrate):分类错误 ...
- 机器学习(二)线性回归、多项式回归、多元回归
文章目录 一.线性回归 二.多项式回归 三.多元回归 一.线性回归 简介:线性回归使用数据点之间的关系在所有数据点之间画一条之线,这条直线可以预测未来的值. 可以借助scipy绘制线性回归线. fro ...
- 机器学习笔记二十四 中文分词资料整理
一.常见的中文分词方案 1. 基于字符串匹配(词典) 基于规则的常见的就是最大正/反向匹配,以及双向匹配. 规则里糅合一定的统计规则,会采用动态规划计算最大的概率路径的分词. 以上说起来很简单,其中还 ...
- 机器学习笔记(2):线性回归-使用gluon
代码来自:https://zh.gluon.ai/chapter_supervised-learning/linear-regression-gluon.html 1 from mxnet impor ...
- 脑电图机器学习笔记(二):SVM 脑电波原信号和傅立叶变换的 癫痫信号检测
使用SVM进行癫痫检测 背景: 这是一片论文的简单复现,只是还原思想,不知道是不是我看的不够仔细,我觉得论文说的也就是这样简单的操作 论文名称:Seizure prediction with spec ...
最新文章
- KeyWordHelper-关键字提取类(注:使用第三方组件DictSeg.dll)
- SGU - 507 启发式合并维护平衡树信息
- 全球及中国食品行业发展潜力与投资机会评估报告2022版
- 为CentOS 6 配置本地YUM源
- 数据结构(1) -- 绪论
- 《智慧书》格言91-100
- IDC:IoT市场即将井喷的5大标志
- [Android Pro] 判断Uri对应的ContentProvider所操作的数据库u存在,及DownloadManager的暂停,继续...
- Git pull(拉取),push(上传)命令整理
- Linux内核中Netfilter架构介绍
- Unity 基础 之 Camera摄像机属性介绍
- 开源组件分析工具OpenSCA教程
- 《腾讯是怎么长大的》读书笔记
- MAC上VMware fusion 12安装vmware tools灰色解决办法
- linux离线安装apr-util 报错,Linux 编译 apr-util 时报错
- Codeforces Round #657 (Div. 2)B. Dubious Cyrpto
- 【华为HCIE证书难考吗?】
- 计算机管理服务修复,电脑提示“部署映像服务和管理工具错误87”的修复步骤...
- QueryByExampleExecutor接口的查询
- 隐藏进程命令行参数,例如输入密码等高危操作