二. 逻辑回归及其python实现

  • 1. 二分类逻辑回归
    • (1). 交叉熵损失函数
    • (2). 交叉熵损失函数原理推导
    • (3). 梯度下降
      • (i). 偏导
      • (ii). 参数更新
  • 2. 多元逻辑回归
    • (1). softmax 多元逻辑回归
    • (2). 损失函数
  • 3. python 实现
    • 1. 一个实例:手写数字识别
    • 2. 结果

1. 二分类逻辑回归

z = x ⃗ w ⃗ = w 0 + w 1 x 1 + w 2 x 2 + . . . + w n x n y = h w ( x ) = s i g m o i d ( z ) = 1 1 + e − z z= \vec{x}\vec{w} = w_0 + w_1x_1 +w_2x_2 + ... +w_nx_n\\ y=h_w(x)=sigmoid(z)=\frac{1}{1+e^{-z}} z=x w =w0​+w1​x1​+w2​x2​+...+wn​xn​y=hw​(x)=sigmoid(z)=1+e−z1​

(1). 交叉熵损失函数

J ( w ) = − 1 m ∑ i = 1 m [ y ( i ) l o g ( y ^ ( i ) ) + ( 1 − y ( i ) ) l o g ( 1 − y ^ ( i ) ) ] J(w) = -\frac{1}{m}\sum_{i=1}^m{[y^{(i)}log(\widehat{y}^{(i)}) + (1-y^{(i)})log(1-\widehat{y}^{(i)})]} J(w)=−m1​i=1∑m​[y(i)log(y ​(i))+(1−y(i))log(1−y ​(i))]

(2). 交叉熵损失函数原理推导

交叉熵损失函数的本质是等价于极大似然估计,已知:
P ( y = 1 ∣ x , w ) = h w ( x ) P ( y − 0 ∣ x , w ) = 1 − h w ( x ) P(y=1|x, w) = h_w(x)\\ P(y-0 |x, w) = 1 - h_w(x) P(y=1∣x,w)=hw​(x)P(y−0∣x,w)=1−hw​(x)
因此
P ( y ∣ x , w ) = h w ( x ) y ( 1 − h w ( x ) ) 1 − y P(y|x, w) = h_w(x)^y(1-h_w(x))^{1-y} P(y∣x,w)=hw​(x)y(1−hw​(x))1−y
极大似然函数
L ( w ) = ∏ i = 1 m h w ( x ( i ) ) y ( i ) ( 1 − h w ( x ( i ) ) ) 1 − y ( i ) L(w) = \prod_{i=1}^m{h_w(x^{(i)})^{y^{(i)}}(1-h_w(x^{(i)}))^{1-y^{(i)}}} L(w)=i=1∏m​hw​(x(i))y(i)(1−hw​(x(i)))1−y(i)
对极大似然函数取对数然后取反,即得交叉熵损失函数(为了样本规模影响loss大小,损失函数除以了m),因此最小化交叉熵损失函数等价于最大化极大似然函数

(3). 梯度下降

(i). 偏导

∂ J ∂ w = 1 m ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) x ( i ) = 1 m X T ( h w ( X ) − y ⃗ ) \frac{\partial{J}}{\partial{w}} = \frac{1}{m}\sum_{i=1}^m{(\widehat{y}^{(i)}-y^{(i)})x^{(i)}}=\frac{1}{m}X^T(h_w(X) - \vec{y}) ∂w∂J​=m1​i=1∑m​(y ​(i)−y(i))x(i)=m1​XT(hw​(X)−y ​)

(ii). 参数更新

w = w − α ∗ ∂ J ∂ w w = w -\alpha * \frac{\partial{J}}{\partial{w}} w=w−α∗∂w∂J​

2. 多元逻辑回归

  • one vs rest 考虑某种类型为正值1,其余全为0,训练K个logistic分类器,适合K个类型不互斥的情况
  • one vs one: 选择一个类别和另一个类别训练分类器, softmax 多元逻辑回归

(1). softmax 多元逻辑回归

P ( y = k ∣ x , w ) = e x w k ∑ t = 1 K e x w t P(y=k|x, w)=\frac{e^{xw_k}}{\sum_{t=1}^Ke^{xw_t}} P(y=k∣x,w)=∑t=1K​exwt​exwk​​

其中 w K ∗ n w_{K*n} wK∗n​

(2). 损失函数

J ( w ) = − ∑ i = 1 m ∑ t = 1 K 1 y = j l o g ( P ( y = t ∣ x , w ) ) J(w) = -\sum_{i=1}^m{\sum_{t=1}^K{1_{y=j}log(P(y=t|x, w))}} J(w)=−i=1∑m​t=1∑K​1y=j​log(P(y=t∣x,w))

3. python 实现

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasetsdef sigmoid(z):return (1/(1+np.exp(-z)))def model(X, theta):"""X array(m * n)theta array(n * 1)return : array (m * 1)"""return sigmoid(X @ theta)def computerCost(X, y, theta):"""X: array(m * n)y: array(m * 1)theta: array(n * 1)"""y_pred = model(X, theta)m = X.shape[0]J = (-1/m) * (y.T @ np.log(y_pred) +(1-y.T) @ np.log(1-y_pred))return np.squeeze(J)def gradientDescent(X, y, theta, alpha, num_iters):'''X: array(m * n)y: array(m * 1)theta: array(n * 1)alpha: learning rate between (0, 1)num_iters: number of iteration timesn should be the feature number plus 1'''J_history = np.empty((num_iters, 1))for i in range(num_iters):theta = theta - alpha * (1/m * (X.T @ (model(X, theta) - y)))J_history[i] = computerCost(X, y, theta)print('.', end='')return theta, J_history# 多元分类
def one_vs_all(X, y, k, theta, alpha, num_iters):J_history = np.empty((k, num_iters, 1))# 训练k个分类器for i in range(k):y_k = (y==i)theta_k = theta[:, i]theta_k = theta_k[:, np.newaxis]theta_k, J_history[i, :, :] = gradientDescent(X, y_k, theta_k, alpha, num_iters)theta[:, i] = np.squeeze(theta_k)print('\n**************\n')return theta, J_historydef predict(X, theta):y_pred = model(X, theta)y_type = np.argmax(y_pred, axis=1)return y_type[:, np.newaxis]

1. 一个实例:手写数字识别

digits = datasets.load_digits()
X = digits.data
y = digits.target
m = len(y)
n = X.shape[1] + 1
X_adjust = np.hstack((np.ones((m, 1)), X))
y = np.expand_dims(y, axis=1)k = 10
alpha = 0.1
num_iters = 100
theta = np.random.random((n, k))theta, J_history = one_vs_all(X_adjust, y, k, theta, alpha, num_iters)# 随意选择一个数据观察预测值和真实值,并可视化该手写数字灰度图
pick_index = 268
x = X[pick_index, :]
x_adjust = np.expand_dims(x, axis=0)
x_adjust = np.hstack((np.ones((1, 1)), x_adjust))
y_pred = predict(x_adjust, theta)
plt.imshow(digits.images[pick_index], cmap='gray')
print("predict number:\n", y_pred)
print("true number:\n", y[pick_index])# 计算准确率
y_pred = predict(X_adjust, theta)
accuracy = np.sum((y_pred == y)) / len(y)
print(accuracy)

2. 结果

逻辑回归及其python实现相关推荐

  1. 【ML/DL】逻辑回归模型Python实现

    逻辑回归模型python实现 文章目录 逻辑回归模型python实现 注: 0.理论知识 逻辑回归模型 计算公式 1.导入需要的包 lr_utils.py 2. 导入数据集 查看数据集shape 查看 ...

  2. 数学建模——逻辑回归模型Python代码

    数学建模--逻辑回归模型详解Python代码 程序用到的测试数据: 链接:https://pan.baidu.com/s/1LGD1MAxk2lxO93smSPNyZg 提取码:uukr 代码正文 i ...

  3. 机器学习(三)逻辑回归以及python简单实现

    虽然有回归两个字,但是依然是解决的时分类问题,是最经典的二分类算法. 分类算法有很多,例如支持向量机和神经网络.而逻辑回归算法应用的比较广,往往是优先选择的算法. Sigmod函数 表达式: g(z) ...

  4. python逻辑回归代码_Logistic 逻辑回归及 python 实现

    1. 引言 2. 数例 3. logistic 函数原理 4. 极大似然估计求出参数值 5. python 代码 1. 引言 Logistic 逻辑回归比较适合分类型因变量的回归,这种问题在现实中很多 ...

  5. 吴恩达机器学习作业2:逻辑回归(Python实现)

    逻辑回归 在训练的初始阶段,将要构建一个逻辑回归模型来预测,某个学生是否被大学录取.设想你是大学相关部分的管理者,想通过申请学生两次测试的评分,来决定他们是否被录取.现在你拥有之前申请学生的可以用于训 ...

  6. 多分类逻辑回归 MNLogit python

    多分类逻辑回归MNLogit 引言 实例及python实现 数据集 查看数据情况 Logistics回归 输出结果 模型评价 Precision.Recall.f1_score ROC曲线及AUC 混 ...

  7. 逻辑斯蒂回归(逻辑回归)Python简单实现(算法笔试)

    Python代码简单实现逻辑回归 之所以说是简单,是因为我们只考虑一维的特征. 实现的关键步骤是 1.根据输入样本计算预测输出y 2.根据标签y'和预测输出y求梯度 3.梯度更新参数 实现代码如下 i ...

  8. 逻辑回归分类python实例_Python逻辑回归原理及实际案例应用

    前言 目录 1. 逻辑回归 2. 优缺点及优化问题 3. 实际案例应用 4. 总结 正文 在前面所介绍的线性回归, 岭回归和Lasso回归这三种回归模型中, 其输出变量均为连续型, 比如常见的线性回归 ...

  9. 【吴恩达】机器学习作业 ex3data1 -- 多分类逻辑回归(Python)

    一.前言 本次是多分类逻辑回归的代码,主题是让你预测5000个手写数字对应的真正数字,每张图片有400个特征值,可以用20*20的方阵表示出来,一共5000行数据,此次的数据集是.mat类型,和以往的 ...

最新文章

  1. LeetCode简单题之二分查找
  2. AtCoder Petrozavodsk Contest 001
  3. 做了个第三方NTFS软RAID
  4. Bootstrap入门(十三)组件7:导航条
  5. LeetCode刷题(46)--Search in Rotated Array
  6. mysql 5.7 plugin 安装_mysql5.7以上版本安装
  7. 云计算-大数据-云安全高等教育改革示范教材
  8. 微信开发-UnionID机制相关文档
  9. 读《Linux运维之道》有感
  10. SmartUpload问题
  11. 浅谈 Lempel-Ziv压缩方法
  12. 没有鸿蒙HarmonyOS,用这个软件也可以实现华为的多屏协助互动!
  13. python爬取小说并下载_python3爬取小说存为文本实现小说下载
  14. 我是怎么做到开源系统的角色权限功能的?
  15. @refreshscope注解
  16. 2021年上半年全球首席执行官任命达到创纪录水平,女性首席执行官翻了一番|美通社头条...
  17. 外贸客户如何选择供应商:5R原则
  18. mysql list dbs_关于mysql_list_dbs()函数的10篇文章推荐
  19. Microsoft 账户已购买 office ,之前用的好好的 office 突然显示未经授权不能编辑文件怎么办?
  20. 程序代码中常用英文单词使用总结

热门文章

  1. 学籍管理系统java_学籍管理系统(Java初级版)
  2. 1W存一年和两个5000存一年,收益有区别吗?
  3. There are no devices registered in your account on the developer website
  4. 开源中国源码学习(四)——主界面总体认识
  5. 利用cmd代码一次性提取电脑登陆过的wifi密码到桌面
  6. linux里怎么看终端类型,如何区分Linux下的几种终端类型:tty、pty和pts
  7. javaScript 原型 和 原型链
  8. 人工智能之深度学习常见应用方向你都了解吗?(文末包邮送书5本)
  9. iview render函数(vue render函数)
  10. 在windows下编译Botan