Python机器学习/LogisticRegression(逻辑回归模型)(附源码)
LogisticRegression(逻辑回归)
逻辑回归虽然名称上带回归,但实际上它属于监督学习中的分类算法。
1.算法基础
LogisticRegression基本架构源自于Adline算法,只是在激励函数的选择上有所不同,Adline算法使用恒等函数作为激励函数,而Logistic选用sigmoid函数作为激励函数。
LogisticRegression算法的数学基础是两个函数:1)logit函数,2)极大似然函数;通过这两个函数构建了LR算法的基本框架。
1.1 logit函数
在概率问题中,有个比较重要的指标,机率比 :
$\frac{p}{1-p}\\$
p代表二分类问题中正事件发生的概率。
在机率比的基础上延申出logit函数:
$logit(p) = log(\frac{p}{1-p})\\$
这里可以看出,p作为正事件发生的概率,取值范围为[0,1],logit(p)的取值范围是负无穷到正无穷。
将logit(p)与净输入值z关联,p作为数据数据正的概率,那么便有如下过程。
$logit(p) = z\\$
$log(\frac{p}{1-p})=z\\$
$\frac{p}{1-p} = e^{z}\\$
$\therefore p = \frac{1}{1+e^{-z}}\\$
$\frac{1}{1+e^{-z}}$被称为sigmod函数,这也就是为什么LR算法中采用sigmod函数作为激励函数的原因。
1.2极大似然函数
极大似然是概率论中估计值的一种,用于数据相互独立情况下最大概率出现的情况:
$L(w) = p(y|x;w) = \prod_{i=1}^{n}p(y^{(i)}|x^{(i)};w)\\$
$= \prod_{i=1}^{n}(\phi(z^{(i)}))^{y^{(i)}}(1-\phi(z^{(i)}))^{(1-y^{(i)})}\\$
对极大似然函数做对数处理会得到下面的公式:
$l(w) = \sum_{i=1}^{n} log(\phi(z^{(i)}))+(1-y^{(i)})log(1-\phi(z^{(i)}))\\$
将这个l(w)取负数得到的就是LR算法的损失函数。
2.算法框架
2.1净输入函数
$z = w_{0}x_{0} + w_{1}x_{1} + ··· +w_{n}x_{n}={\sum_{j=0}^{n}}w_{j}x_{j}=w^{T}x\\$
其中x0的值为1,用来和函数的偏移量相乘;在实际程序中可以使用两种方式实现净输入函数:
1)在训练数据X中添加值全部为1的列,作为偏移量的乘子;
2)将参数W中的偏移量w0单独提出来另算
用python实现,这里使用第二种方式
#净输入函数
def net_input(x,w):
return np.dot(x,w[1:]) + w[0]
2.2激励函数
Logistic Regression与Adline算法的区别在于激励函数,Adline算法的激励函数是恒等函数,Logistic函数的激励函数时sigmoid函数。
$\phi (z) = \frac{1}{1+e^{-z}}\\$
2.3量化器
$ y=\left\{\begin{matrix}
1,\phi(z)\geq 0.5\\
-1,\phi(z)< 0.5
\end{matrix}\right. $
使用python实现量化器:
#量化器
def quantization(z):
return np.where(z >= 0.5,1,-1)
3.损失函数
Logistic Regression算法的损失函数是由最大似然函数推导出来的,代价函数J的公式如下:
$J(w) = \sum_{i}^{n} -log(\phi(z^{(i)}))-(1-y^{(i)})log(1-\phi(z^{(i)})\\$
推导过程如下:
根据1.2节中的内容可知,最大似然函数为:
$L(w) = p(y|x;w) = \prod_{i=1}^{n}p(y^{(i)}|x^{(i)};w) = \prod_{i=1}^{n}(\phi(z^{(i)}))^{y^{(i)}}(1-\phi(z^{(i)}))^{(1-y^{(i)})}\\$
通过对极大似然函数做对数处理,得到
$l(w) = \sum_{i=1}^{n} log(\phi(z^{(i)}))+(1-y^{(i)})log(1-\phi(z^{(i)}))\\$
将极大似然函数对数取负,即是LogsticRegression的损失函数。
而我们的目标函数即最小化这个损失函数,即:
$min(l(w))\\$
4.优化算法
LR中的优化算法采用的是梯度下降法
$w:=w+\Delta w\\$
$\Delta w_{j} = -\eta \frac{\partial J}{\partial w_{j}} = \eta \sum_{i=1}^{n}(y^{(i)}-\phi(z^{(i)}))x_{j}^{(i)}\\$
5.正则化解决过拟合的问题
5.1正则化
过拟合是指一种现象:在训练集上表现良好,但在测试集上却性能不佳;一般导致过拟合的原因是因为算法过度拟合训练集上的数据,导致失去了泛化特性。
正则化是解决特征之间共线性(特征相关度高)的一个很有效的技术手段,它可以过滤掉数据中的噪声,最终防止过拟合。
最常用的正则化形式为L2正则化,可以写作:
$\frac{\lambda }{2}\sum_{j=1}^{m}w_{j}^{2}\\$
5.2正则化使用
一般是在代价函数中加上正则化函数,例如LogisticRegression算法中加入正则化后的代价函数为:
$J(w) = [\sum_{i}^{n} -log(\phi(z^{(i)}))-(1-y^{(i)})log(1-\phi(z^{(i)})]+\frac{\lambda }{2}\sum_{j=1}^{m}w_{j}^{2}$
在scikit-learn库中的LogisticRegression类的参数中,有个参数C,这个C表示的是正则化系数的倒数,即:
$C=\frac{1}{\lambda }$
6.使用scikit-learn库中的LogisticRegression类实现鸢尾花进行分类
源代码地址如下:
Python机器学习/LogisticRegression(逻辑回归模型)(附源码)的更多相关文章
- Python机器学习经典实例电子版和附带源码
Python机器学习经典实例电子版和附带源码 下载:https://pan.baidu.com/s/1m6ODNJk--PWHW8Vdsdjs-g 提取码:nyc0 分享更多python数据分析相关电 ...
- Python机器学习算法 — 逻辑回归(Logistic Regression)
逻辑回归--简介 逻辑回归(Logistic Regression)就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型 ...
- Python:游戏:扫雷(附源码)
这次我们基于 pygame 来做一个扫雷,上次有园友问我代码的 python 版本,我说明一下,我所有的代码都是基于 python 3.6 的. 先看截图,仿照 XP 上的扫雷做的,感觉 XP 上的样 ...
- Python开发中国象棋实战(附源码)
Pygame 做的中国象棋,一直以来喜欢下象棋,写了 python 就拿来做一个试试,水平有限,电脑走法水平低,需要在下次版本中更新电脑走法,希望源码能帮助大家更好的学习 python.总共分 ...
- Python练手项目实例汇总(附源码下载)
今天给大家分享几个有趣的Python练手项目实例,希望对Python初学者有帮助哈~ 一.经典的俄罗斯方块 1. 绑定功能 1 # 绑定功能 2 class App(Frame): 3 def _ ...
- 福利!Python制作动态字符画(附源码)
字符画,一种由字母.标点.汉字或其他字符组成的图画.简单的字符画是利用字符的形状代替图画的线条来构成简单的人物.事物等形象,它一般由人工制作而成:复杂的字符画通常利用占用不同数量像素的字符代替图画上不 ...
- Java平台调用Python平台已有算法(附源码及解析)
1. 问题描述 Java平台要调用Pyhon平台已有的算法,为了减少耦合度,采用Pyhon平台提供Restful 接口,Java平台负责来调用,采用Http+Json格式交互. 2. 解决方案 2.1 ...
- 基于Python接口自动化测试框架(初级篇)附源码
引言 很多人都知道,目前市场上很多自动化测试工具,比如:Jmeter,Postman,TestLink等,还有一些自动化测试平台,那为啥还要开发接口自动化测试框架呢?相同之处就不说了,先说一下工具的局 ...
- 基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码
引言 在上一篇<基于Python接口自动化测试框架(初级篇)附源码>讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构: 可以看出testcase ...
- 逻辑回归模型(Logistic Regression)及Python实现
逻辑回归模型(Logistic Regression)及Python实现 http://www.cnblogs.com/sumai 1.模型 在分类问题中,比如判断邮件是否为垃圾邮件,判断肿瘤是否为阳 ...
随机推荐
- SVD动态图
library(gganimate) library(gifski) # 构造数据 phi<-pi/6 theta<-pi/3 c<-matrix(c(cos(phi),sin(ph ...
- C++之split字符串分割
在C++中没有直接对应的split函数,字符串分割可借助以下方法实现: 1.借助strtok函数 函数原型:char * strtok (char *str, char * delim); 函数功能: ...
- 华三防火墙主备ACL
dis cur | in policy 查看 policy-based-route 有线网络 permit node 5 policy-based-route 有线网络 permit node 10 ...
- LOD Group
LOD Group 调节摄像机距离,在不同的距离显示不同物体.常用于物体高低模之间的转换,如离摄像机较远时渲染低模物体,离摄像机较近时渲染高模物体.
- Vue项目打包报错 error TS6504
此处提醒:项目是vite还是vue/cli,打包有区别 打包报错问题: 原因: package.json中,build配置vue-tsc的问题,把对应的命令给删掉: . 语法检查问题: 要么<s ...
- js已知多边形坐标点,求多边形的中心点坐标
你需要传入的数据类型如下: // 取面对象 中心点 var calculateCenter = function (lnglatarr) { var total = lnglatarr.length; ...
- chrome 请停用以开发者
链接:https://pan.baidu.com/s/1YhWINGlUVyTE5XyBVIGW_Q 提取码:23t2 转载至 https://www.cnblogs.com/it-tsz/p/9 ...
- 整合mybatis实现简单的增删改查
mybatis配置相关代码 配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE conf ...
- 开始学习Linux
1.路径: 绝对路径: 从根目录开始描述; 相对路径: 从当前位置开始描述的路径; . 当前目录 .. 上级目录 ~/ <===> /home/acs 家目录 ...
- Mysql学习:3、sql数据类型及命令
1.sql功能分类: 2.常见数据类型: 3.sql命令: DDL命令: a.创建数据库: create database testdatabase(数据库名称) character set utf8 ...