首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【机器学习与实现】逻辑回归分析

【机器学习与实现】逻辑回归分析

作者头像
Francek Chen
发布2025-01-23 00:04:39
发布2025-01-23 00:04:39
36900
代码可运行
举报
运行总次数:0
代码可运行

一、相关概念

(一)回归与分类的区别

回归:因变量取连续值。例如一台4核CPU,3G内存的手机,跑分估计会是多少? 分类:因变量取离散值。例如这台手机的性能应分为哪一类 (高性能还是低性能) ?

手机性能与硬件配置表

核心数

内存

跑分

1

8

5020

8

6

200000

8

4

130000

8

3

105000

10

2

30000

用回归的方法做分类,可以考虑以下步骤:

  1. 求出回归方程的参数
  2. 计算手机的跑分值
  3. 设置一个阈值,比较跑分值和阈值的大小

关键:阈值取多少合适?

(二)跃阶函数和激活函数

阶跃函数和激活函数对比图

1、Sigmoid函数的数学表达式:

g(z)=\frac{1}{1+e^{-z}}
z=0

时,

g(z) = 0.5
  • 随着
z

的增大,对应的

g(z)

值逐渐逼近于1

  • 随着
z

的减小,对应的

g(z)

值逐渐逼近于0

2、两个基本性质:

g(-z)=1-g(z)
\frac{\mathrm{d}g(z)}{\mathrm{d}x}=g(z)[1-g(z)]
  • 相同点:都可以实现对连续值的离散化
  • 不同点:跃阶函数存在瞬间跳变,数学上具有不连续性,不好处理;而Sigmoid激活函数是连续函数,具有良好的数学性质:
g(z)

不仅处处光滑可导,而且是任意阶可导的凸函数。

二、逻辑回归 (logistic Regression)

(一)逻辑回归的基本概念

1、思想:基于回归模型做分类

  • 线性回归模型:
f(X)=\mathbf{w}^TX
  • 待分类样本:
X=(x_1,x_2,...,X_m)^T

(此处的

X表

示单个样本)

  • 分类的目标:将样本
X

划分为正例或返利

  • 关键要点:激活函数
g(f(X))

的设计

Sigmoid函数

\begin{aligned}g(z)=\frac{1}{1+e^{-z}}\end{aligned}

如果阈值取0.5,可以用于分类。

2、二值分类的基本流程

(二)逻辑回归的分类思想

把一个样本

X_i

逻辑回归的函数值

g(X_i)

看成是该样本属于正例

y_i=1

的概率值:

  • 如果该值大于0.5,就可以判定该样本属于正例
  • 如果该值小于0.5,则可判定该样本属于反例
p(y_i=1|X_i)=g(X_i)=\frac{1}{1+e^{-\theta^TX_i}}=\frac{e^{\theta^TX_i}}{1+e^{\theta^TX_i}}
p(y_i=0|X_i)=1-g(X_i)=1-\frac{e^{\theta^TX_i}}{1+e^{\theta^TX_i}}=\frac{1}{1+e^{\theta^TX_i}}
(三)逻辑回归与对数几率的关系

一个事件的几率 (odds) 是指该事件发生的概率与该事件不发生概率的比值,即:如果事件发生概率为

p

,那么该事件的几率等于

\frac{p}{1-p}

。该事件的对数几率 (log odds) 或者 logit (对它取log,即 log it) 函数是:

logit(p)=\log\frac{p}{1-p}

如果求逻辑回归中正例样本的对数几率,则有:

\begin{aligned}\log\frac{p(y_i=1|X_i)}{p(y_i=0|X_i)}=\log\frac{g(X_i)}{1-g(X_i)}=\log\frac{\frac{e^{\theta^TX_i}}{1+e^{\theta^TX_i}}}{\frac{1}{1+e^{\theta^TX_i}}}\end{aligned}=\theta^TX_i

即:逻辑回归中输出

y_i=1

(正例样本) 的对数几率是输入

X_i

的线性函数 (逻辑回归也称为对数几率回归)。

注意另外一个事实:因为非线性函数 (此处是

g(X)

) 经过一定的变换可以变成线性函数,所以可以把一个非线性问题转化成一个线性问题来处理!

(四)逻辑回归的损失函数

1、最大似然估计 (MLE)

为了下面分析过程的符号统一,把样本分类成正例的概率预测值记为

\hat{y}_i

,则有:

\hat{y}_i=p(y_i=1|X_i)=g(\theta^TX_i)

如果已知样本

X_i

为正例,即真实的分类标签

y_i=1

,则希望分类的概率预测值

\hat{y}_i

越大越好;反之如果

X_i

为反例,即真实的标签

y_i=0

,则希望

1 −\hat{y}_i

越大越好,此时可以将正反例的概率分布统一写成:

p(y_i|\theta,X_i)=\hat{y}_i^{y_i}(1-\hat{y}_i)^{1-y_i}

其中,

y_i=1

0

学习的目标是要求上式中的系数向量

\theta

,可以通过最大似然估计来求解。

m

个样本的最大似然估计 (Maximum Likelihood Estimation) 就是是它们的联合概率分布最大化,即使得右式最大化的系数

\theta

就是学习目标:

\theta=\argmax_\theta\prod_{i=1}^m\hat{y}_i^{y_i}(1-\hat{y}_i)^{1-y_i}\tag{公式1}

2、逻辑回归的损失函数

求解公式1等价于求解使对数似然函数最大化的参数向量

\theta

\theta=\argmax_\theta\sum_{i=1}^my_i\ln\hat{y}_i+(1-y_i)\ln(1-\hat{y}_i)

其中,

y_i=1

0

上式也等价于求解使负对数似然函数最小化的参数向量

\theta

\theta=\argmin_\theta\left[-\sum_{i=1}^my_i\ln\hat{y}_i+(1-y_i)\ln(1-\hat{y}_i)\right]\tag{公式2}

如果令

L(\theta)=-\sum_{i=1}^my_i\ln\hat{y}_i+(1-y_i)\ln(1-\hat{y}_i)\tag{公式3}

,则

L(\theta)

就是逻辑回归的损失函数,而使

L(\theta)

最小化的参数向量

\theta

即学习目标。

L(\theta)=-\sum_{i=1}^my_i\ln\hat{y}_i+(1-y_i)\ln(1-\hat{y}_i)

逻辑回归的损失函数使用了负似然对数函数,而非均方误差函数,原因在于前者是凸函数,存在全局最优解;而后者非凸,可能陷入局部极少值点。

逻辑回归的损失函数

L(\theta)

也称为交叉熵损失函数,交叉熵能够衡量两个数据分布的异同程度,在机器学习中就表示为真实概率分布与预测概率分布之间的差异。交叉熵的值越小,模型预测效果就越好。

3、熵增定律及其启示

熵增定律,又称热力学第二定律,指出在一个孤立系统中,如果没有外力做功,熵(代表混乱程度的物理量)总是趋于增加,即系统总是从有序向无序发展。

如果物理学只能留一条定律,我会留熵增定律。——吴国盛 (清华大学的科学史系主任)

如果地球毁灭了,我们怎么能够在一张名片上写下地球文明的全部精髓,让其他文明知道我们曾有过这个文明呢?

吴军老师给出的答案是三个公式:

1+1=2

:代表了数学文明

E=mc

:爱因斯坦的质能方程

S=-\sum P\ln P

:熵的定义

生命就是对抗负熵的过程。

物质总是向着熵增演化,屋子不收拾会变乱,手机会越来越卡,耳机线会凌乱,热水会慢慢变凉,太阳会不断燃烧衰变……直到宇宙的尽头——热寂。因为事物总是向着熵增的方向发展,所以一切符合熵增的,都非常的容易和舒适,比如懒散。因为所有事物都向着无规律、无序和混乱发展,如果你要变得自律,你就得逆着熵增做功,这个过程会非常痛苦。生命本身就是自律的过程,即熵减的过程。

(五)逻辑回归的参数求解

因为

\hat{y}_i=p(y_i|X_i)=g(\theta^TX_i)

是参数向量

\theta

的非线性函数,导致求解公式2没有解析解,而

g(\theta^TX_i)

对于

\theta

又是高阶可导的凸函数,所以可以通过梯度下降法、牛顿法等数值优化的方法求出

\theta

的最优解:

\begin{aligned} \nabla L(\theta)&=-\sum_{i=1}^my_i\frac{\partial\ln\hat{y}_i}{\partial\theta}+(1-y_i)\frac{\partial\ln(1-\hat{y}_i)}{\partial\theta}\\ &=-\sum_{i=1}^m\frac{y_i}{\hat{y}_i}\frac{\partial\ln g(\theta^TX_i)}{\partial\theta}+\frac{(1-y_i)}{(1-\hat{y}_i)}\frac{\partial\ln g(\theta^TX_i)}{\partial\theta}\\ &=-\sum_{i=1}^m\frac{y_i}{\hat{y}_i}\hat{y}_i(1-\hat{y}_i)X_i+\frac{(1-y_i)}{(1-\hat{y}_i)}\hat{y}_i(1-\hat{y}_i)X_i\\ &=\sum_{i=1}^m(\hat{y}_i-y_i)X_i \end{aligned}

梯度下降法迭代求解:

\theta^{k+1}=\theta^k-\gamma\nabla L(\theta^k)
(六)正则化逻辑回归
\theta=\argmin_\theta\left(\left[-\sum_{i=1}^my_i\ln\hat{y}_i+(1-y_i)\ln(1-\hat{y}_i)\right]+\frac{\lambda}{2}\sum_{j=1}^n\theta_j^2\right)

其中,

\begin{aligned}\frac{\lambda}{2}\sum_{j=1}^n\theta_j^2\end{aligned}

l_2

正则项。

正则项系数

\lambda

是一个超参数,表示对于系数向量的惩罚程度。

三、Scikit-learn的LogisticRegression类

sklearnlinear_model模块提供LogisticRegression类用于构建Logistic回归模型。LogisticRegression类的基本语法格式如下:

代码语言:javascript
代码运行次数:0
运行
复制
class sklearn.linear_model.LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0, fit_intercept=True, 
intercept_scaling=1, class_weight=None, random_state=None, solver='liblinear', max_iter=100, multi_class='ovr', 
verbose=0, warm_start=False, n_jobs=1)

1、Logistic回归模型的参数

上面的参数C是正则化系数

\lambda

的倒数,C值越小正则化越强 (对应

\lambda

值越大),分类边界越光滑,泛化性能越好 (但训练误差可能变大)。

2、Logistic回归模型的属性和方法

四、逻辑回归简单示例

以下两个示例代码中用到的数据集下载地址: 链接:https://pan.quark.cn/s/fbc5e2bb995d 提取码:fUvF

示例1

代码语言:javascript
代码运行次数:0
运行
复制
import pandas as pd
data = pd.read_excel('credit.xlsx')
x = data.iloc[:600,:14].as_matrix()
y = data.iloc[:600,14].as_matrix()
x1= data.iloc[600:,:14].as_matrix()
y1= data.iloc[600:,14].as_matrix()
from sklearn.linear_model import LogisticRegression as LR
lr = LR()   #创建逻辑回归模型类
lr.fit(x, y) #训练数据
r=lr.score(x, y); # 模型准确率(针对训练数据)
R=lr.predict(x1)
Z=R-y1
Rs=len(Z[Z==0])/len(Z)
print('预测结果为:',R)
print('预测准确率为:',Rs)

示例2

代码语言:javascript
代码运行次数:0
运行
复制
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report

data = pd.read_csv('LogisticRegression.csv')
data_tr, data_te, label_tr, label_te = train_test_split(data.iloc[:, 1:], data['admit'], test_size=0.2)
clf = LogisticRegression()
clf.fit(data_tr, label_tr)
pre = clf.predict(data_te)
res = classification_report(label_te, pre)
print(res)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、相关概念
    • (一)回归与分类的区别
    • (二)跃阶函数和激活函数
  • 二、逻辑回归 (logistic Regression)
    • (一)逻辑回归的基本概念
    • (二)逻辑回归的分类思想
    • (三)逻辑回归与对数几率的关系
    • (四)逻辑回归的损失函数
    • (五)逻辑回归的参数求解
    • (六)正则化逻辑回归
  • 三、Scikit-learn的LogisticRegression类
  • 四、逻辑回归简单示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档