请和我一起学习机器学习算法(线性回归)_请使用课堂上讲解的线性回归算法对训练集进行训练,并基于测试集进行精度评估。-程序员宅基地

技术标签: 机器学习算法学习  机器学习  

线性回归灵魂三问

  • 什么是线性回归
    所谓线性回归实际上就是利用已知的样本(已知数据),选择一个线性方程,并对其进行拟合,并通过拟合得到的方程来对未知的数据进行预测
  • 线性回归能干什么
    线性回归主要是用来预测,和判断合理性。 比如用身高预测体重,利用广告投入预测商品销售额等等。
  • 线性回归的难点是什么
    难点即是重点:变量选择(多元下的重线性)、预防过拟合、模型检验。

NOTE: 一元线性回归就不在这里赘述了,一般来说想学机器学习算法的人都有一定的数学基础。

线性回归数学分析

一般线性回归

1.公式定义

就我们所知道的那样,多元的线性方程如下。
h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n h_\theta(x)=\theta_0x_0+\theta_{1}x_1+\theta_{2}x_2+...+\theta_{n}x_n hθ(x)=θ0x0+θ1x1+θ2x2+...+θnxn
其中 x 0 = 1 x_0=1 x0=1表示常数项。转化成向量表达为:
h θ ( x ) = Θ T X h_\theta(x)=\Theta^TX hθ(x)=ΘTX
Θ 、 X \Theta、X ΘX为一个一行n+1列的向量。
我们用参数x表示描述一个事物的属性,用h(x)表示我们对给定属性的预测。我们希望我们的预测结果符合客观事实,并且可以作为对未知事物的推测。

要使结果符合客观事实,则我们希望我们的预测结果h(x)和实际实物的标签(比如预测的类别和实际的类别)的误差尽可能的小。于是…

2. 参数求解之梯度下降

现在我们可以将问题转化成我们熟悉的数学表达模式了:
问题:我们有m个已知的样本( ( x 1 , y 1 ) , ( x 2 , y 2 ) . . . ( x n , y n ) (\boldsymbol x^1,y^1),(\boldsymbol x^2,y^2)...(\boldsymbol x^n,y^n) (x1,y1),(x2,y2)...(xn,yn)), 其中 x ( i ) x^{(i)} x(i)是一个n+1维的列向量。求一组参数 ( θ 0 , θ 1 , . . . , θ n ) (\theta_0,\theta_1,...,\theta_n) (θ0,θ1,...,θn),使得 1 m ∑ i = 1 m ( h θ ( x i ) − y i ) \frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(\boldsymbol x^i)-y^i) m1i=1m(hθ(xi)yi)最小。

实际上对于上面公式的的推导,我们默认使用了一种叫做误差平方和的代价函数(预测误差的代价损失,我们希望代价函数越小越好,表示我们使用这个模型的成本越低)。也就是说如果使用不同的代价函数,则得到的误差损失的表达是不同的。 代价函数可以表示为
J ( θ 0 , θ 1 , . . . , θ n ) = 1 2 m ∑ i = 1 m ( h θ ( x i ) − y i ) 2 J(\theta_0,\theta_1,...,\theta_n)=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(\boldsymbol x^i)-y^i)^2 J(θ0,θ1,...,θn)=2m1i=1m(hθ(xi)yi)2
NOTE: 对于权值 1 2 m \frac{1}{2m} 2m1 不必太过纠结,实际上应该是 1 m \frac{1}{m} m1,但是为了方便后续化简,添加了一个二分之一,实际上着这并不会影响我们对其参数进行求解。

接着就可以用梯度下降来优化这些参数了。对于初学者来说,可能对于像我这样的初学者来说,梯度下降不太好理解,但是在机器学习算法中,梯度下降是无处不在的。为了更加全面和完整,这里留个空位,到时如果有必要在专门来梳理一下梯度下降。
【梯度下降 】

θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 , . . . , θ n ) \theta_j:=\theta_j-\alpha \frac{\partial}{\partial \theta_j}J(\theta_0,\theta_1,...,\theta_n) θj:=θjαθjJ(θ0,θ1,...,θn)

上面这个公式,就是使用梯度下降对参数进行更新,其中 α \alpha α表示学习速率,也就是沿着低度方向,向下迈进的步幅。 ∂ ∂ θ j J ( θ 0 , θ 1 , . . . , θ n ) \frac{\partial}{\partial \theta_j}J(\theta_0,\theta_1,...,\theta_n) θjJ(θ0,θ1,...,θn)表示代价函数的梯度方向。
θ j : = θ j − α ∂ ∂ θ j { 1 2 m ∑ i = 1 m ( h θ ( x i ) − y i ) 2 } \theta_j:=\theta_j-\alpha \frac{\partial}{\partial \theta_j}\{\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(\boldsymbol x^i)-y^i)^2 \} θj:=θjαθj{ 2m1i=1m(hθ(xi)yi)2}
加法的求导是可以分别求导的,所以我们可以对括号进行求导
∂ ∂ θ j ( h θ ( x i ) − y i ) 2 ) = 2 ⋅ x j ⋅ ( h θ ( x i ) − y i ) ) \frac{\partial}{\partial \theta_j}(h_{\theta}(\boldsymbol x^i)-y^i)^2) = 2 \cdot x_j \cdot (h_{\theta}(\boldsymbol x^i)-y^i)) θj(hθ(xi)yi)2)=2xj(hθ(xi)yi))
代入上面等式,(原来的引入的那个2,就是在这里消除掉的)
θ j : = θ j − α ⋅ 1 m ∑ i = 1 m ( x j ⋅ ( h θ ( x i ) − y i ) ) ) \theta_j:=\theta_j-\alpha \cdot \frac{1}{m} \sum_{i=1}^{m}(x_j \cdot (h_{\theta}(\boldsymbol x^i)-y^i))) θj:=θjαm1i=1m(xj(hθ(xi)yi)))
我们通过随机一组参数,并且通过上面的梯度下降的方式直接求解,直到收敛。

3. 参数求解之正规方程

我们也可以通过直接解方程的方式获得最后优化参数。
为了很好的解释我们下面所描述的方程,请记得我们最初的向量表达: h θ ( x ) = Θ T X h_\theta(x)=\Theta^TX hθ(x)=ΘTX
如果我们把各个学习样本的 y i y^i yi 组成一个向量Y,则我们需要求解的方程就可以变成
min ⁡ θ ∑ i = 1 m ( Y − Θ T X ) T ( Y − Θ T X ) \min_{\theta} \sum_{i=1}^{m}(Y-\Theta^TX)^T(Y-Θ ^TX) θmini=1m(YΘTX)T(YΘTX)
对向量 Θ \Theta Θ求导(这里又是一个不好理解的点,倍感数学知识不够用啊)
∂ ∂ Θ ∑ i = 1 m ( Y − Θ T X ) T ( Y − Θ T X ) = 2 ⋅ X T ( X Θ T − Y ) \frac{\partial}{\partial \Theta}\sum_{i=1}^{m}(Y-\Theta^TX)^T(Y-Θ ^TX)=2 \cdot X^{T}(X \Theta^T-Y) Θi=1m(YΘTX)T(YΘTX)=2XT(XΘTY)
令上式为0;当 ( X T X ) − 1 (X^TX)^{-1} (XTX)1存在的时候,
Θ T = ( X T X ) − 1 X T Y \Theta^T=(X^TX)^{-1}X^TY ΘT=(XTX)1XTY
如果不存在,则可以通过求伪逆的方式代替。
实际上如果从矩阵的映射的角度来分析的话,对于这个公式就好理解了,问题的关键是,但是矩阵的映射本身就不好理解。

4. 梯度下降和正规方程的对比

梯度下降 正规方程
需要选择合适的学习率 不需选择学习率
需要多次迭代获得参数 一次计算直接获得参数
使用与特征值多的模型 适用于特征值小的模型
使用于各个类型 只使用于线性模型,其他模型不适合

正规方程由于需要求矩阵的逆,一般情况,求n介矩阵的逆需要N的三次方的算法复杂度,所以当n很大的时候(一般>10000)选择梯度下降模型

对数几率回归

在分类任务中,我们希望将线性模型产生的连续的值转化为离散的0、1值用来标记各个样本。理想中我们使用单位阶跃函数来实现,如下图的红色部分。但是由于单位阶跃函数不可微,不变与计算和使用,我们找到一个可以替代单位阶跃函数的 函数。而 对数几率函数(logistic function)就是这样一种函数。

对数几率函数是一种典型的"sigmoid 函数",所谓sigmoid 函数,就是长相是S型的函数,而对数几率函数就是其中的一种。
y = 1 1 + e − Θ T X y=\frac{1}{1+e^{-\Theta^TX}} y=1+eΘTX1
通过简单的化简:
ln ⁡ y 1 − y = Θ T X \ln \frac{y}{1-y}=\Theta^TX ln1yy=ΘTX
如果把y 考虑为正例的概率,而1-y则为反例的概率。两者的比例反映了x作为正例的相对可能性,称为“几率”。对几率取对数,则称为对数几率

实际上,y实际上使我们在X的样本存在条件下认为其为正例的概率,则可以考虑y为在x条件下的后验概率。
ln ⁡ p ( y = 1 ∣ x ) p ( y = 0 ∣ x ) = Θ T X \ln \frac{p(y=1|x)}{p(y=0|x)}=\Theta^TX lnp(y=0x)p(y=1x)=ΘTX
则(直接计算解方程,这两货加起来为1)
p ( y = 1 ∣ x ) = e Θ T X 1 + e Θ T X p ( y = 1 ∣ x ) = 1 1 + e Θ T X p(y=1|x)=\frac{e^{\Theta^TX}}{1+e^{\Theta^TX}} \\ p(y=1|x)=\frac{1}{1+e^{\Theta^TX}} p(y=1x)=1+eΘTXeΘTXp(y=1x)=1+eΘTX1
我们希望的是,每个样本属于自己标记的概率越大越好。
接下来是一段复杂的方法,对于对数回归,先到这里,了解即可。

线性判别分析

线性判别分析 (Linear Discriminant Analysis,简称 LDA) 思想非常朴素,设法将给定样例投影到一条直 线上 ,使得同类样例的投影点尽可能接近、 异类样例 的投影点尽可能远离;在对新样本进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定新样本的类别. 如图
在这里插入图片描述

线性回归的变量选择

多元线性回归的核心问题应该是变量的选择。

变量选择

变量的选择也是模型的对比,我们希望用最小的变量数来获得最好的结果。

  • AIC 准则

AIC准则是由日本统计学家Akaike与1973年提出的,全称是最小化信息量准则(Akaike Information Criterion)。它是拟合精度和参数个数的加权函数:
AIC=2(模型参数的个数)-2ln(模型的极大似然函数)

这个不是太好理解,比如说模型的最大似然函数是什么呢? 在线性模型中所谓的最大似然函数指的就是残差的倒数。

  • BIC 准则

AIC为模型选择提供了有效的规则,但也有不足之处。当样本容量很大时,在AIC准则中拟合误差提供的信息就要受到样本容量的放大,而参数个数的惩罚因子却和样本容量没关系(一直是2),因此当样本容量很大时,使用AIC准则选择的模型不收敛与真实模型,它通常比真实模型所含的未知参数个数要多。BIC(Bayesian InformationCriterion)贝叶斯信息准则是Schwartz在1978年根据Bayes理论提出的判别准则,称为SBC准则(也称BIC),弥补了AIC的不足。
BIC = ln(n)(模型中参数的个数) - 2ln(模型的极大似然函数值)

  • 基于误差的准则

当把预测当成主要任务和目标的时候,通过预测误差作为判断模型的指标
P E = E ∣ ∣ y − y ′ ∣ ∣ 2 PE=E||y-y^{'}||^2 PE=Eyy2

线性回归的训练

多分类的学习

核心思路是拆解法,将类别分界,通过一对一,一对多,多对多
一对一
两两分类,选择分类多的一种
一对多
一和其余分类,选择正例
多对多
先对种类分组,而后在分

类别不平衡的问题

现有技术大体上有三类做法:

  1. 第一类是直接对训练集里的反类样例进行"欠采样" (undersampling) ,即去除一些反倒使得正、反例数日接近7 然后再进行学习;

  2. 第二类是对训练集里的正类样例进行"过来样" (oversampling) ,即增加一些正例使得正、反例数目接近,然后再进行学习;

  3. 第三类则是直接基于原始训练集进行学习,但在用训练好的分类器进行预测时,将类别比例关系嵌入到其决策过程中,称为"阔值移动" (threshold-moving)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Spring_Et/article/details/107228070

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf

推荐文章

热门文章

相关标签