# Sklearn-Algorithm
## 线性回归(回归)
**简单线性回归(simple linear regression)** 简单线性回归通常就是包含一个自变量x和一个因变量y,这两个变量可以用一条直线来模拟。如果包含两个以上的自变量就叫做**多元回归(multiple regresseion)** 被用来描述因变量y和自变量x以及偏差error之间关系的方程叫做回归模型<br>
**线性回归的目的是要得到输出向量Y和输入特征X之间的线性关系,求出`线性回归系数`。为了得到线性回归系数θ,我们需要定义一个`损失函数`,一个极小化损失函数的优化方法,以及一个验证算法的方法。损失函数的不同,损失函数的优化方法的不同,验证方法的不同,就形成了不同的线性回归算法。**
### 损失函数
![](https://github.com/yangxcc/Sklearn-Algorithm/blob/master/image/%E6%8D%9F%E5%A4%B1%E5%87%BD%E6%95%B0.png) <br>
对于这个损失函数,一般有梯度下降法和最小二乘法两种极小化损失函数的优化方法,sklearn中提供的LinearRegression用的是最小二乘法,因为最小二乘法在概率论,统计学等课中学过,所以在这里详细讲解梯度下降法。<br>
### [梯度下降算法](https://www.jianshu.com/p/386645b7e03a)
梯度下降法是一种在学习算法及统计学常用的最优化算法,其思路是对theta取一随机初始值,可以是全零的向量,然后不断迭代改变θ的值使其代价函数J(θ)根据梯度下降的方向减小,直到收敛求出某θ值使得J(θ)最小或者局部最小。其更新规则为:
![](https://github.com/yangxcc/Sklearn-Algorithm/blob/master/image/%E6%A2%AF%E5%BA%A6%E4%B8%8B%E9%99%8D.png)<br>
其中alpha为学习率,控制梯度的下降速度,一般取0.01,0.03,0.1,0.3,…, J(θ)对θ的偏导决定了梯度下降的方向,将J(θ)带入更新规则中得到:
![](https://github.com/yangxcc/Sklearn-Algorithm/blob/master/image/梯度下降2.png)
- 为什么梯度下降可以逐步减小代价函数
- 假设函数`f(x)`
- 泰勒展开:`f(x+△x)=f(x)+f'(x)*△x+o(△x)`
- 令:`△x=-α*f'(x)` ,即负梯度方向乘以一个很小的步长`α`
- 将`△x`代入泰勒展开式中:`f(x+△x)=f(x)-α*[f'(x)]²+o(△x)`
- 可以看出,`α`是取得很小的正数,`[f'(x)]²`也是正数,所以可以得出:`f(x+△x)<=f(x)`
- 所以沿着**负梯度**放下,函数在减小,多维情况一样。
根据本案例中的数据得到梯度下降(代价随迭代次数的变化)的结果为![](https://github.com/yangxcc/Sklearn-Algorithm/blob/master/image/梯度下降结果.png)<br>
### [数据归一化(Normalization)](https://www.jianshu.com/p/95a8f035c86c)
- 目的是使数据都缩放到一个范围内,便于使用梯度下降算法
- 归一化有很多种方法,其中最常见的是**Min-Max归一化,z-score,平均归一化***
- 归一化是把数据变成(0,1)或者(1,1)之间的小数。主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速。归一化还可以把有量纲表达式变成无量纲表达式,便于不同单位或量级的指标能够进行比较和加权。归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。
### 结果
原始数据和调用库函数形成的数据,本例中的模型为y=ax<sub>1</sub>+bx<sub>2</sub>+c,x<sub>1</sub>表示第一列数字,x<sub>2</sub>表示第二列数字,两者为自变量,y为因变量,表示最后一列数字<br>
![](https://github.com/yangxcc/Sklearn-Algorithm/blob/master/image/简单线性回归结果.png)<br>
**多元线性回归是用线性的关系来拟合一个事情的发生规律,找到这个规律的表达公式,将得到的数据带入公式以用来实现预测的目的,我们习惯将这类预测未来的问题称作回归问题.机器学习中按照目的不同可以分为两大类:回归和分类.逻辑回归就可以用来完成分类任务。**
## 逻辑回归(用回归方法做分类问题)
**首先要明确一点,逻辑回归不是用来做回归的,而是用回归的方法来做分类任务。**<br>
### 判定函数sigmod以及阈值的选择
按照多元线性回归的思路,我们可以先对这个任务进行线性回归,学习出这个事情结果的规律,比如根据人的饮食,作息,工作和生存环境等条件预测一个人"有"或者"没有"得恶性肿瘤,可以先通过回归任务来预测人体内肿瘤的大小,取一个平均值作为阈值,假如平均值为y,肿瘤大小超过y为恶性肿瘤,无肿瘤或大小小于y的,为非恶性.这样通过线性回归加设定阈值的办法,就可以完成一个简单的二分类任务.但是使用线性的函数来拟合规律后取阈值的办法是行不通的,行不通的原因在于拟合的函数太直,离群值(也叫异常值)对结果的影响过大。<br>
因此在逻辑回归中选用sigmod函数(又称为Logistic函数)![](https://github.com/yangxcc/Sklearn-Algorithm/blob/master/image/sigmod函数.png)作为判别函数,函数图像为![](https://github.com/yangxcc/Sklearn-Algorithm/blob/master/image/sigmod图像.png)该函数具有很强的鲁棒性(健壮和强壮的意思),并且将函数的输入范围(∞,-∞)映射到了输出的(0,1)之间且具有概率意义.`具有概率意义:将一个样本输入到我们学习到的函数中,输出0.7,意思就是这个样本有70%的概率是正例,1-70%就是30%的概率为负例.`<br>
**我们利用线性回归的办法来拟合然后设置阈值的办法容易受到离群值的影响,sigmod函数可以有效的帮助我们解决这一个问题,所以我们只要在拟合的时候把判定函数换成**![](https://github.com/yangxcc/Sklearn-Algorithm/blob/master/image/逻辑回归判定函数.png),因为g(z)函数的特性,它输出的结果也不再是预测结果,而是一个值预测为正例的概率,预测为负例的概率就是1-g(z).<br>
在逻辑回归中,因为判定函数输出的是一个事件的概率,我们需要设定一个**阈值**来判断这个概率的时间属于哪一类事件,但是在设定阈值的过程中往往是根据实际情况来判断的,不能只是简单的取0.5,比如,我们做了一个肿瘤的良性恶性判断.选定阈值为0.5就意味着,如果一个患者得恶性肿瘤的概率为0.49,模型依旧认为他没有患恶性肿瘤,结果就是造成了严重的医疗事故.此类情况我们应该将阈值设置的小一些.阈值设置的小,加入0.3,一个人患恶性肿瘤的概率超过0.3我们的算法就会报警,造成的结果就是这个人做一个全面检查,比起医疗事故来讲,显然这个更容易接受.<br>
**综上所述,利用逻辑回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类,而求解逻辑回归,就是找到一组系数theta(θ)令判定函数预测正确的概率最大**
### 交叉熵损失函数
根据上述判定函数可得每个单条样本预测正确概率的公式:![](https://github.com/yangxcc/Sklearn-Algorithm/blob/master/image/逻辑回归概率公式.png),若想让预测出的结果全部正确的概率最大,根据[最大似然估计](https://blog.csdn.net/weixin_39445556/article/details/81416133),就是所有样本预测正确的概率相乘得到的P(总体正确)最大,此时我们令逻辑回归判定函数为![](https://github.com/yangxcc/Sklearn-Algorithm/blob/master/image/逻辑回归判定函数2.png),则单条样本预测正确概率为![](https://github.com/yangxcc/Sklearn-Algorithm/blob/master/image/逻辑回归概率公式2.png),为了简化计算,我们对L(θ)这个函数采取两边取log对数的方法,得到<br>
![](https://github.com/yangxcc/Sklearn-Algorithm/blob/master/image/逻辑回归概率公式3.png)<br>
l(θ)越大,证明我们得到
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
机器学习中的主要算法原理以及实现(线性回归、逻辑回归、朴素贝叶斯、K-Means聚类、KNN、PCA主成分分析、BP神经网络) (211个子文件)
data.csv 657B
反向算法推导.jpg 105KB
神经网络.jpg 29KB
data.mat 5KB
README.md 40KB
data1.npy 2KB
BP神经网络过程.png 175KB
kmeans鸢尾花数据聚类.png 174KB
简单线性回归结果.png 124KB
朴素贝叶斯分类.png 118KB
kmeans压缩图片.png 77KB
主元分析3.png 56KB
PCA_02.png 56KB
求解梯度函数.png 47KB
PCA_04.png 47KB
主元分析2.png 46KB
主元分析6.png 43KB
梯度下降结果.png 42KB
调库逻辑回归结果.png 38KB
主元分析5.png 36KB
PCA_08.png 36KB
主元分析.png 36KB
主元分析4.png 34KB
KNN_uniform.png 34KB
KNN_distance.png 34KB
kmeans聚类过程.png 34KB
kmeans聚类.png 34KB
朴素贝叶斯.png 32KB
bird.png 32KB
KNN中k值的选择.png 31KB
梯度下降逻辑回归分类结果.png 29KB
KNN示例.png 27KB
PCA_07.png 26KB
原始数据分类.png 24KB
kmeans聚类结果.png 22KB
距离公式.png 20KB
sigmod图像.png 20KB
PCA_03.png 19KB
PCA_06.png 15KB
神经网络运算.png 14KB
PCA_01.png 9KB
神经元.png 9KB
协方差公式.png 8KB
损失函数.png 6KB
逻辑回归概率公式3.png 6KB
逻辑回归损失函数.png 5KB
梯度下降2.png 4KB
L.png 3KB
逻辑回归概率公式.png 3KB
kmeans.png 3KB
梯度下降.png 2KB
逻辑回归判定函数.png 2KB
sigmod函数.png 1KB
News_NB.py 7KB
Email_NB.py 7KB
Naive_Bay.py 6KB
LogisticRegression.py 5KB
K-Means.py 5KB
LinearRegression.py 4KB
KNN.py 3KB
K-Means_scikit-learn2.py 2KB
LogisticRegression_scikit-learn.py 2KB
Transfer_LinearRegression.py 860B
K-Means_scikit-learn.py 549B
14.txt 16KB
18.txt 13KB
18.txt 12KB
13.txt 10KB
12.txt 9KB
18.txt 9KB
17.txt 8KB
10.txt 8KB
12.txt 7KB
11.txt 7KB
18.txt 7KB
17.txt 7KB
11.txt 7KB
11.txt 7KB
10.txt 6KB
16.txt 6KB
13.txt 5KB
16.txt 5KB
13.txt 5KB
13.txt 5KB
13.txt 5KB
16.txt 5KB
10.txt 4KB
19.txt 4KB
12.txt 4KB
10.txt 4KB
16.txt 4KB
15.txt 4KB
13.txt 4KB
data1.txt 4KB
15.txt 4KB
12.txt 3KB
11.txt 3KB
15.txt 3KB
18.txt 3KB
14.txt 3KB
共 211 条
- 1
- 2
- 3
资源评论
白话机器学习
- 粉丝: 8271
- 资源: 7686
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- rainy-day.jpg
- IMG_20240501_171218.jpg
- Swift-内购封装swift版本
- 经典CNN网络之ResNet 图像分类网络实战项目:7种小麦叶片病害分类(迁移学习)
- Java毕设之ssm010基于ssm的新能源汽车在线租赁管理系统+vue.rar
- Java毕设之ssm009毕业生就业信息统计系统+vue.rar
- Java毕设之ssm008医院门诊挂号系统+jsp.rar
- Java毕设之ssm007亚盛汽车配件销售业绩管理统+jsp.rar
- Java毕设之ssm006基于java的少儿编程网上报名系统+vue.rar
- Java毕设之ssm005基于SSM框架的购物商城系统+jsp.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功