机器学习7-逻辑斯蒂回归实现西瓜数据集2.0的二分类
文章目录
- 1 什么是逻辑回归
- 1.1 Sigmoid函数介绍
- 2 逻辑回归公式推导
- 2.1 损失函数推导
- 3 逻辑回归迭代公式
- 3.1 函数特性
- 3.2 求导过程
- 4 逻辑回归实现西瓜数据集2.0的分类
我们在实现西瓜数据集2.0分类之前先讲讲逻辑回归的原理。
1 什么是逻辑回归
逻辑回归不是一个回归的算法,逻辑回归是一个分类的算法,好比卡巴斯基不是司机,红烧狮子头没有狮子头一样。 那为什么逻辑回归不叫逻辑分类?因为逻辑回归算法是基于多元线性回归的算法。而正因为此,逻辑回归这个分类算法是线性的分类器。
逻辑回归算法(LogisticRegression)是分类算法,我们将它作为分类算法使用。有时候可能因为这个算法的名字中出现了“回归”使你感到困惑,但逻辑回归算法实际上是一种分类算法,它适用于标签 y 取值离散的情况,如:1 0 0 1。
逻辑回归中对应一条非常重要的曲线S型曲线,对应的函数是Sigmoid函数:
f(x)=11+e−xf(x) = \frac{1}{1 + e^{-x}}f(x)=1+e−x1
它有一个非常棒的特性,其导数可以用其自身表示:
f′(x)=e−x(1+e−x)2=f(x)∗1+e−x−11+e−x=f(x)∗(1−f(x))f'(x) = \frac{e^{-x}}{(1 + e^{-x})^2} =f(x) * \frac{1 + e^{-x} - 1}{1 + e^{-x}} = f(x) * (1 - f(x))f′(x)=(1+e−x)2e−x=f(x)∗1+e−x1+e−x−1=f(x)∗(1−f(x))
import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x):return 1/(1 + np.exp(-x))
x = np.linspace(-5,5,100)
y = sigmoid(x)
plt.plot(x,y,color = 'green')
1.1 Sigmoid函数介绍
逻辑回归就是在多元线性回归基础上把结果缩放到 0 ~ 1 之间。 hθ(x)h_{\theta}(x)hθ(x) 越接近 1 越是正例,hθ(x)h_{\theta}(x)hθ(x) 越接近 0 越是负例,根据中间 0.5 将数据分为二类。其中hθ(x)h_{\theta}(x)hθ(x) 就是概率函数~
hθ(x)=g(θTx)=11+e−θTxh_{\theta}(x) = g(\theta^Tx) = \frac{1}{1 + e^{-\theta^Tx}}hθ(x)=g(θTx)=1+e−θTx1
我们知道分类器的本质就是要找到分界,所以当我们把 0.5 作为分类边界时,我们要找的就是y^=hθ(x)=11+e−θTx=0.5\hat{y} = h_{\theta}(x) = \frac{1}{1 + e^{-\theta^Tx}} = 0.5y^=hθ(x)=1+e−θTx1=0.5 ,即 z=θTx=0z = \theta^Tx = 0z=θTx=0 时,θ\thetaθ 的解~
求解过程如下:
什么事情,都要做到知其然,知其所以然,我们知道二分类有个特点就是正例的概率 + 负例的概率 = 1。一个非常简单的试验是只有两种可能结果的试验,比如正面或反面,成功或失败,有缺陷或没有缺陷,病人康复或未康复等等。为方便起见,记这两个可能的结果为 0 和 1,下面的定义就是建立在这类试验基础之上的。 如果随机变量 x 只取 0 和 1 两个值,并且相应的概率为:
- Pr(x=1)=p;Pr(x=0)=1−p;0<p<1Pr(x = 1) = p; Pr(x = 0) = 1-p; 0 < p < 1Pr(x=1)=p;Pr(x=0)=1−p;0<p<1
则称随机变量 x 服从参数为 p 的Bernoulli伯努利分布( 0-1分布),则 x 的概率函数可写:
- f(x∣p)={px(1−p)1−x,x=1、00,x≠1、0f(x | p) = \begin{cases}p^x(1 - p)^{1-x}, &x = 1、0\\0,& x \neq 1、0\end{cases}f(x∣p)={px(1−p)1−x,0,x=1、0x=1、0
逻辑回归二分类任务会把正例的 label 设置为 1,负例的 label 设置为 0,对于上面公式就是 x = 0、1。
2 逻辑回归公式推导
2.1 损失函数推导
这里我们依然会用到最大似然估计思想,根据若干已知的 X,y(训练集) 找到一组 θ\thetaθ 使得 X 作为已知条件下 y 发生的概率最大。
关于什么是最大似然估计可以参考我这篇文章哦:机器学习4-线性回归算法推导
P(y∣x;θ)={hθ(x),y=11−hθ(x),y=0P(y|x;\theta) = \begin{cases}h_{\theta}(x), &y = 1\\1-h_{\theta}(x),& y = 0\end{cases}P(y∣x;θ)={hθ(x),1−hθ(x),y=1y=0
整合到一起(二分类就两种情况:1、0)得到逻辑回归表达式:
P(y∣x;θ)=(hθ(x))y(1−hθ(x))1−yP(y|x;\theta) = (h_{\theta}(x))^{y}(1 - h_{\theta}(x))^{1-y}P(y∣x;θ)=(hθ(x))y(1−hθ(x))1−y
我们假设训练样本相互独立,那么似然函数表达式为:
L(θ)=∏i=1nP(y(i)∣x(i);θ)L(\theta) = \prod\limits_{i = 1}^nP(y^{(i)}|x^{(i)};\theta)L(θ)=i=1∏nP(y(i)∣x(i);θ)
L(θ)=∏i=1n(hθ(x(i)))y(i)(1−hθ(x(i)))1−y(i)L(\theta) = \prod\limits_{i=1}^n(h_{\theta}(x^{(i)}))^{y^{(i)}}(1 - h_{\theta}(x^{(i)}))^{1-y^{(i)}}L(θ)=i=1∏n(hθ(x(i)))y(i)(1−hθ(x(i)))1−y(i)
对数转换,自然底数为底
l(θ)=lnL(θ)=ln(∏i=1n(hθ(x(i)))y(i)(1−hθ(x(i)))1−y(i))l(\theta) = \ln{L(\theta)} =\ln( \prod\limits_{i=1}^n(h_{\theta}(x^{(i)}))^{y^{(i)}}(1 - h_{\theta}(x^{(i)}))^{1-y^{(i)}})l(θ)=lnL(θ)=ln(i=1∏n(hθ(x(i)))y(i)(1−hθ(x(i)))1−y(i))
化简,累乘变累加:
l(θ)=lnL(θ)=∑i=1n(y(i)ln(hθ(x(i)))+(1−y(i))ln(1−hθ(x(i))))l(\theta) = \ln{L(\theta)} = \sum\limits_{i = 1}^n(y^{(i)}\ln(h_{\theta}(x^{(i)})) + (1-y^{(i)})\ln(1-h_{\theta}(x^{(i)})))l(θ)=lnL(θ)=i=1∑n(y(i)ln(hθ(x(i)))+(1−y(i))ln(1−hθ(x(i))))
总结,得到了逻辑回归的表达式,下一步跟线性回归类似,构建似然函数,然后最大似然估计,最终推导出 θ\thetaθ 的迭代更新表达式。只不过这里用的不是梯度下降,而是梯度上升,因为这里是最大化似然函数。通常我们一提到损失函数,往往是求最小,这样我们就可以用梯度下降来求解。最终损失函数就是上面公式加负号的形式:
J(θ)=−l(θ)=−∑i=1n[y(i)ln(hθ(x(i)))+(1−y(i))ln(1−hθ(x(i)))]J(\theta) = -l(\theta) = -\sum\limits_{i = 1}^n[y^{(i)}\ln(h_{\theta}(x^{(i)})) + (1-y^{(i)})\ln(1-h_{\theta}(x^{(i)}))]J(θ)=−l(θ)=−i=1∑n[y(i)ln(hθ(x(i)))+(1−y(i))ln(1−hθ(x(i)))]
3 逻辑回归迭代公式
3.1 函数特性
逻辑回归参数更新规则:
θjt+1=θjt−α∂∂θjJ(θ)\theta_j^{t + 1} = \theta_j^t - \alpha\frac{\partial}{\partial_{\theta_j}}J(\theta)θjt+1=θjt−α∂θj∂J(θ)
- α\alphaα 表示学习率
逻辑回归函数:
hθ(x)=g(θTx)=g(z)=11+e−zh_{\theta}(x) = g(\theta^Tx) = g(z) = \frac{1}{1 + e^{-z}}hθ(x)=g(θTx)=g(z)=1+e−z1
- z=θTxz = \theta^Txz=θTx
逻辑回归函数求导时有一个特性,这个特性将在下面的推导中用到,这个特性为:
g′(z)=∂∂z11+e−z=e−z(1+e−z)2=1(1+e−z)2⋅e−z=11+e−z⋅(1−11+e−z)=g(z)⋅(1−g(z))\begin{aligned} g'(z) &= \frac{\partial}{\partial z}\frac{1}{1 + e^{-z}} \\\\&= \frac{e^{-z}}{(1 + e^{-z})^2}\\\\& = \frac{1}{(1 + e^{-z})^2}\cdot e^{-z}\\\\&=\frac{1}{1 + e^{-z}} \cdot (1 - \frac{1}{1 + e^{-z}})\\\\&=g(z)\cdot (1 - g(z))\end{aligned}g′(z)=∂z∂1+e−z1=(1+e−z)2e−z=(1+e−z)21⋅e−z=1+e−z1⋅(1−1+e−z1)=g(z)⋅(1−g(z))
回到逻辑回归损失函数求导:
J(θ)=−∑i=1n(y(i)ln(hθ(xi))+(1−y(i))ln(1−hθ(x(i))))J(\theta) = -\sum\limits_{i = 1}^n(y^{(i)}\ln(h_{\theta}(x^{i})) + (1-y^{(i)})\ln(1-h_{\theta}(x^{(i)})))J(θ)=−i=1∑n(y(i)ln(hθ(xi))+(1−y(i))ln(1−hθ(x(i))))
3.2 求导过程
∂∂θjJ(θ)=−∑i=1n(y(i)1hθ(x(i))∂∂θjhθ(xi)+(1−y(i))11−hθ(x(i))∂∂θj(1−hθ(x(i))))=−∑i=1n(y(i)1hθ(x(i))∂∂θjhθ(x(i))−(1−y(i))11−hθ(x(i))∂∂θjhθ(x(i)))=−∑i=1n(y(i)1hθ(x(i))−(1−y(i))11−hθ(x(i)))∂∂θjhθ(x(i))=−∑i=1n(y(i)1hθ(x(i))−(1−y(i))11−hθ(x(i)))hθ(x(i))(1−hθ(x(i)))∂∂θjθTx=−∑i=1n(y(i)(1−hθ(x(i)))−(1−y(i))hθ(x(i)))∂∂θjθTx=−∑i=1n(y(i)−hθ(x(i)))∂∂θjθTx=∑i=1n(hθ(x(i))−y(i))xj(i)\begin{aligned} \frac{\partial}{\partial{\theta_j}}J(\theta) &= -\sum\limits_{i = 1}^n(y^{(i)}\frac{1}{h_{\theta}(x^{(i)})}\frac{\partial}{\partial_{\theta_j}}h_{\theta}(x^{i}) + (1-y^{(i)})\frac{1}{1-h_{\theta}(x^{(i)})}\frac{\partial}{\partial_{\theta_j}}(1-h_{\theta}(x^{(i)}))) \\\\&=-\sum\limits_{i = 1}^n(y^{(i)}\frac{1}{h_{\theta}(x^{(i)})}\frac{\partial}{\partial_{\theta_j}}h_{\theta}(x^{(i)}) - (1-y^{(i)})\frac{1}{1-h_{\theta}(x^{(i)})}\frac{\partial}{\partial_{\theta_j}}h_{\theta}(x^{(i)}))\\\\&=-\sum\limits_{i = 1}^n(y^{(i)}\frac{1}{h_{\theta}(x^{(i)})} - (1-y^{(i)})\frac{1}{1-h_{\theta}(x^{(i)})})\frac{\partial}{\partial_{\theta_j}}h_{\theta}(x^{(i)})\\\\&=-\sum\limits_{i = 1}^n(y^{(i)}\frac{1}{h_{\theta}(x^{(i)})} - (1-y^{(i)})\frac{1}{1-h_{\theta}(x^{(i)})})h_{\theta}(x^{(i)})(1-h_{\theta}(x^{(i)}))\frac{\partial}{\partial_{\theta_j}}\theta^Tx\\\\&=-\sum\limits_{i = 1}^n(y^{(i)}(1-h_{\theta}(x^{(i)})) - (1-y^{(i)})h_{\theta}(x^{(i)}))\frac{\partial}{\partial_{\theta_j}}\theta^Tx\\\\&=-\sum\limits_{i = 1}^n(y^{(i)} - h_{\theta}(x^{(i)}))\frac{\partial}{\partial_{\theta_j}}\theta^Tx\\\\&=\sum\limits_{i = 1}^n(h_{\theta}(x^{(i)}) -y^{(i)})x_j^{(i)}\end{aligned}∂θj∂J(θ)=−i=1∑n(y(i)hθ(x(i))1∂θj∂hθ(xi)+(1−y(i))1−hθ(x(i))1∂θj∂(1−hθ(x(i))))=−i=1∑n(y(i)hθ(x(i))1∂θj∂hθ(x(i))−(1−y(i))1−hθ(x(i))1∂θj∂hθ(x(i)))=−i=1∑n(y(i)hθ(x(i))1−(1−y(i))1−hθ(x(i))1)∂θj∂hθ(x(i))=−i=1∑n(y(i)hθ(x(i))1−(1−y(i))1−hθ(x(i))1)hθ(x(i))(1−hθ(x(i)))∂θj∂θTx=−i=1∑n(y(i)(1−hθ(x(i)))−(1−y(i))hθ(x(i)))∂θj∂θTx=−i=1∑n(y(i)−hθ(x(i)))∂θj∂θTx=i=1∑n(hθ(x(i))−y(i))xj(i)
求导最终的公式:
∂∂θjJ(θ)=∑i=1n(hθ(x(i))−y(i))xj(i)\frac{\partial}{\partial{\theta_j}}J(\theta) = \sum\limits_{i = 1}^n(h_{\theta}(x^{(i)}) -y^{(i)})x_j^{(i)}∂θj∂J(θ)=i=1∑n(hθ(x(i))−y(i))xj(i)
逻辑回归参数迭代更新公式:
θjt+1=θjt−α⋅∑i=1n(hθ(x(i))−y(i))xj(i)\theta_j^{t+1} = \theta_j^t - \alpha \cdot \sum\limits_{i=1}^{n}(h_{\theta}(x^{(i)}) -y^{(i)})x_j^{(i)}θjt+1=θjt−α⋅i=1∑n(hθ(x(i))−y(i))xj(i)
4 逻辑回归实现西瓜数据集2.0的分类
我们将双线上部划为训练集,双线下部划为验证集。
'''
属性[x]
色泽:乌黑0, 青绿1, 浅白2
根蒂:蜷缩0, 稍蜷1, 硬挺2
敲声:浊响0, 沉闷1, 清脆2
纹理:清晰0, 稍糊1, 模糊2
脐部:凹陷0, 稍凹1, 平坦2
触感:硬滑0, 软粘1预测结果[y]
好瓜1,坏瓜0
'''import numpy as np
from sklearn.linear_model import LogisticRegression# 训练数据,西瓜数据集2.0,表4.2
X_train = np.array([[1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0],[1, 1, 0, 0, 1, 1], [0, 1, 0, 1, 1, 1], [1, 2, 2, 0, 2, 1],[2, 1, 1, 1, 0, 0], [0, 1, 0, 0, 1, 1],[2, 0, 0, 2, 2, 0],[1, 0, 1, 1, 1, 0]])
y_train = np.array([1, 1, 1, 1, 1, 0, 0, 0, 0, 0])# 测试数据 表4.2
X_test = np.array([[1, 0, 1, 0, 0, 0],[2, 0, 0, 0, 0, 0],[0, 1, 0, 0, 1, 0],[0, 1, 1, 1, 1, 0],[2, 2, 2, 2, 2, 0],[2, 0, 0, 2, 2, 1],[1, 1, 0, 1, 0, 0]])
y_test = np.array([1, 1, 1, 0, 0, 0, 0])# 训练
model = LogisticRegression()
model.fit(X_train,y_train)# 预测
y_pred = model.predict(X_test)# 显示是否预测正确
print('预测结果是:',y_pred)
print('真实结果是:',y_test)# 计算概率,第一列为0的概率,第二列为1的概率
proba_ = model.predict_proba(X_test)
print('预测概率是:\n',proba_)
从结果来看。预测结果概率还是很大的,这个前提是训练数据要具有科学合理性和足够多!
机器学习7-逻辑斯蒂回归实现西瓜数据集2.0的二分类相关推荐
- 【机器学习】逻辑斯蒂回归(Logistic Regression)详解
引言 LR回归,虽然这个算法从名字上来看,是回归算法,但其实际上是一个分类算法,学术界也叫它logit regression, maximum-entropy classification (MaxE ...
- 【机器学习】逻辑斯蒂回归原理推导与求解
1.概念 逻辑斯蒂回归又称为"对数几率回归",虽然名字有回归,但是实际上却是一种经典的分类方法,其主要思想是:根据现有数据对分类边界线(Decision Boundary)建立回归 ...
- 【机器学习】逻辑斯蒂回归原理
逻辑斯蒂函数 引入: 在线性感知器算法中,我们使用了一个f(x)=x函数,作为激励函数,而在逻辑斯蒂回归中,我们将会采用sigmoid函数作为激励函数,所以它被称为sigmoid回归也叫对数几率回归( ...
- 【机器学习】逻辑斯蒂回归概率计算和手动计算对比
二分类,逻辑斯蒂回归概率计算 import numpy as np from sklearn import datasets from sklearn.linear_model import Logi ...
- 机器学习笔记——逻辑斯蒂回归(Logistic)
1.线性回归 1.1线性回归概念 如果特征值之间存在线性关系就可以使用线性回归建模对其预测结果. 1.2最小二乘法求解 何为最小二乘法,我们有很多的给定点,这时候我们需要找出一条线去拟合它,那 ...
- 机器学习之逻辑斯蒂回归
目录 一.分类与回归 二.逻辑回归不是回归 三.生成式逻辑回归 四.判别式逻辑回归 五.逻辑回归为什么不用均方误差做损失函数 六.判别模型与生成模型的比较 七.写在最后 一.分类与回归 回归与分类是机 ...
- 机器学习(二)--sklearn之逻辑斯蒂回归和朴素贝叶斯
文章目录 1.逻辑斯蒂回归 2.朴素贝叶斯 3.三种分类算法的比较 上回说到,sklearn中的k近邻算法解决多分类问题.k近邻的基本步骤是:收集数据.创建分类器.训练.预测.评估性能.调参(参数就是 ...
- 【Python-ML】SKlearn库逻辑斯蒂回归(logisticregression) 使用
# -*- coding: utf-8 -*- ''' Created on 2018年1月12日 @author: Jason.F @summary: Scikit-Learn库逻辑斯蒂回归分类算法 ...
- 逻辑斯蒂回归原理及其概率计算
目录 逻辑斯蒂回归 原理过程 预测函数 原理代码实现 例子 最大似然估计 原理 逻辑斯蒂回归概率计算 导包 手动计算 多分类概率计算 逻辑斯蒂回归 利用Logistics回归进行分类的主要思想是:根据 ...
- 逻辑斯蒂回归_逻辑斯蒂回归详细解析 | 统计学习方法学习笔记 | 数据分析 | 机器学习...
本文包括: 重要概念 逻辑斯蒂回归和线性回归 二项逻辑斯谛回归模型 逻辑斯蒂回顾与几率 模型参数估计 多项逻辑斯谛回归 其它有关数据分析,机器学习的文章及社群 1.重要概念: 在正式介绍逻辑斯蒂回归模 ...
最新文章
- 深度学总结:skip-gram pytorch实现
- 关于Android studio找不到sqlite数据库的解决方法
- 使用Hibernate批量获取
- python教程闭包_Python教程 闭包的特性
- “我将 20 年前开发的操作系统迁移到 .NET 6,居然成功了”
- 如何用 Python 实现超级玛丽的界面和状态机?
- web目录字典_Dirmap:一款高级Web目录文件扫描工具
- 算法的稳定性matlab,基于MATLAB地震反应谱数值算法的稳定性和精度分析
- 卡巴斯基破解版 KISV8.0.0.432 Beta 江南混混汉化特别版
- 湘军团练志:罗泽南、李续宾、王錱
- php处理excel里面的重复数据,表格中删除重复项怎么操作
- 构建创新数字基础设施,中泰证券携手华为迈进数字化转型“快车道”
- CIE1931色度坐标及黑体轨迹
- 联想y7000电脑未正确启动_联想拯救者Y7000P装win7系统蓝屏|联想Y7000P重装系统蓝屏怎么解决...
- WHQL认证和代码签名
- 西门子PLC模拟量输入数据类型变换
- fdgfhfghfghgf
- PL/SQL Developer 注册机+汉化包+用户指南
- 稀疏图Johnson算法
- 两次骑行,去年,从无锡到上海;今年,从无锡到苏州来回