「机器学习算法的数学解析与Python实现」Logistic回归

2021/12/25 9:07:29

本文主要是介绍「机器学习算法的数学解析与Python实现」Logistic回归,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Logistic回归:换上“S型曲线马甲”的线性回归

Logistic Regression = Linear Regression + Logistic(Sigmoid) Function

分类问题

分类问题根据要划分的类别数量,可分为:

  • 二元分类(Binary Classification)
  • 多分类(Multi-class Classification):多用Softmax函数解决。

Softmax函数怎么解决???看一下之前的笔记。

二元分类中,通常将“是”类称为“正类”(Positive),而将“否”类称为“负类”(Negative),与之对应的训练集也可划分为“正样本”和“负样本”。

Logistic函数介绍

阶跃函数(StepFunction,又称Heaviside Function)的函数图像:

从图像中可以看出,阶跃函数似乎可用于二元分类问题,但是由于它是不连续的,这样的函数是不可导的,而在机器学习中,可导性非常重要,否则就无法搭配使用梯度下降算法,使得偏差最小了。

因此,最适合的函数是Logistic函数,它既可导,又具有类似阶跃函数的能力。

Logistic函数有一个特性:X轴的值越是小于0,Y轴的值越是接近于0;X轴的值越是大于0,Y轴的值越是接近于1。线性模型的预测结果是一个连续的数值,但是我们只需要把其预测结果再加上Logistic函数,就能够映射到分类问题所需要的预测结果。

思路如下:

  1. 将线性模型的作为Logistic函数的输入;
  2. 当样本为负类时,让线性模型输出的预测值小于0,且越小越好;
  3. 当样本为正类时,让线性模型输出的预测值大于0,且越大越好。

Logistic回归的算法原理

基本思路

把线性回归的预测结果,再套上Logistic函数的“马甲”,使得最终的预测值在 \((0, 1)\) 范围内,假如预测结果大于某个阈值(比如0.5)就认为是正类,否则就认为是负类。

数学解析

1.Logistic回归的数学表达式

Logistic函数的数学表达式:

\[Logistic(z) = \frac{1}{1+e^{-z}} = \frac{1}{1+\exp(-z)} \]

把线性回归的预测值作为Logistic函数的输入值,就得到了Logistic回归的假设函数:

\[H(x) = \frac{1}{1+e^{-(w^Tx_i+b)}} \]

2.Logistic回归的损失函数

Logistic回归的损失函数:

\[L(x) = -y\log H(x) - (1-y) \log (1-H(x)) \]

具体步骤

Logistic回归分类算法信息表

album_temp_1609230893

具体三个步骤和线性回归一样。

在Python中使用Logistic回归算法

在sklearn库中,线性模型都在linear_model类库下。

1.LinearRegression类

对应线性回归算法,也称为普通最小二乘法法(Ordinary Least Square, OLS),其损失函数为:

\[L(x) = \min\limits_{w} \|Xw -y\|_2^2 \]

2.Ridge类

对应Ridge回归算法,又称为岭回归,是在线性回归的基础上添加了L2正则项,其损失函数为:

\[L(x) = \min\limits_{w} \|Xw -y\|_2^2 + a\|w\|_2^2 \]

3.Lasso类

对应Lasso回归算法,是在线性回归的基础上添加了L1正则项,其损失函数为:

\[L(x) = \min\limits_{w} \frac{1}{2n}\|Xw -y\|_2^2 + a\|w\|_1 \]

4.LogisticRegression类

为本章所讲的Logistic回归,用法如下:

# 从sklearn导入线性模型中的Logistic回归算法
from sklearn.linear_model import LogisticRegression

# 导入鸢尾花分类数据集
from sklearn.datasets import load_iris

# 载入鸢尾花数据集
X, y = load_iris(return_X_y=True)

# 训练模型
clf = LogisticRegression().fit(X, y)

# 使用模型进行分类预测
clf.predict(X)

预测结果如下:

array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])

使用默认的性能评估器:

clf.score(X, y)

得分如下:

0.96

Logistic回归算法的使用场景

Logistic回归分类算法结构清晰,原理简单,但在多特征、多类别场景下容易过拟合,表现不如二分类领域。

Logistic回归分类算法的特点

album_temp_1609231626

算法使用案例

研究点击率(Click Through Rate, CTR)时,Google提出的LR-FTRL算法,同样利用了Logistic回归算法。



这篇关于「机器学习算法的数学解析与Python实现」Logistic回归的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程