分类和逻辑回归(Classification and logistic regression)

本文介绍了逻辑回归的基本原理,包括逻辑函数及其应用,通过梯度上升和牛顿法进行参数估计,并对比了不同方法的优劣。此外,还简单介绍了感知机算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分类问题和线性回归问题问题很像,只是在分类问题中,我们预测的y值包含在一个小的离散数据集里。首先,认识一下二元分类(binary classification),在二元分类中,y的取值只能是0和1.例如,我们要做一个垃圾邮件分类器,则为邮件的特征,而对于y,当它1则为垃圾邮件,取0表示邮件为正常邮件。所以0称之为负类(negative class),1为正类(positive class)

 

逻辑回归

首先看一个肿瘤是否为恶性肿瘤的分类问题,可能我们一开始想到的是用线性回归的方法来求解,如下图:

image

我们知道线性回归问题只能预测连续的值,而分类问题,我们预测值只能够是0或者1,所以我们可能会取一个临界点,大于取1,反之取零。上面的hΘ(x)好像能够很好的解决问题。所以如下图

image

这样还用线性回归模型来求解就显得不合适了,因为它预测的值可以超越[0,1]这个范围。下面我们引入一种新的模型,逻辑回归,它的输出变量范围始终都是在0和1之间。如下:

image

g(z)被称作logistic function或者sigmoid function,它的图像如下:

image

从图像可以看出z → ∞时g(z) →1,z → −∞时g(z) →0。所以令x0 = 1, 则θT x = θ0 + ∑nj=1 θjxj.

在进入正题前,我们先来看logistic function的一个很有用的特征。如下

image

 

现在回到正题,对于给定的逻辑回归问题,我们怎么去拟合出适合的Θ?

假设:

P (y = 1 | x; θ) = hθ(x)   #  hθ(x)的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1 的可能性( estimated probablity)
P (y = 0 | x; θ) = 1 − hθ(x)

把上面两个式子整合一下得到:p(y | x; θ) = (hθ(x))y (1 − hθ(x))1−y

 

梯度上升方法

在线性回归中,我们的思路是构建似然函数,然后求最大似然估计,最终我们得出了θ的迭代规则,那么在逻辑回归中,我们方法也是一样,因为最后我们是要求最大似然估计,所以用到的算法是梯度上升。

假设训练样本相互独立,则似然函数表达为:

image

现在我们对似然函数取对数,如下

image

 

现在我们需要做的就是最大化似然估计了,这里我们就需要用梯度上升方法了。所以用向量来表示的话,更新规则如下

image

注意:因为我们是最大似然估计,所以这里是正好,而不是负号。

下面我们一一个训练样本为例,使用梯度上升规则:

image

 

 

在上面的运算中第二步运用到了我们前面推到的特性g(z) = g(z)(1 − g(z)),所以我们得到更新规则:image

我们发现这个更新规则和LMS算法的更新规则一致,但是应注意这是两个完全不同的算法。在这里是关于的非线性函数。

这不仅是巧合,更深层次的原因在广义线性模型GLM中会提到。

在前面最大化ℓ(θ)时我们使用到的是梯度上升,在这里,再介绍一种最大化ℓ(θ)的方法---牛顿法(Newton’s method)

 

牛顿法(Newton’s method)

给出函数:image,我们要找到一个Θ使得f(θ) = 0成立,注意这里的Θ∈R,这时牛顿方法的更新规则如下:

image

牛顿法的执行过程如下:

image

通过求我们给出点的导数对应的切线与x轴的交点为迭代一次后的点,一直反复迭代,直到f(θ) = 0(无限逼近)

所以对于求f(θ) = 0,牛顿法是一种,那么,怎么去用牛顿法来解决最大化ℓ(θ)呢?

沿着思路,当ℓ(θ)最大的时候,ℓ′(θ)=0,所以这样得到更新如下:

image

 

在逻辑回归中,Θ是一个向量,所以此时的牛顿法可以表达为:

image

∇θℓ(θ) 表示ℓ(θ)的对θi’s的偏导数,H称为黑塞矩阵(Hessian matrix),是一个n*n的矩阵,n是特征量的个数,image

 

牛顿法的收敛速度比批处理梯度下降要快,它只用迭代很少次就能够很接近最小值,但是n很大的时候,每次迭代求黑塞矩阵和黑塞矩阵的逆代价很大.

最后简单的提一下感知机算法

 

感知机算法(The perceptron learning algorithm)

将逻辑回归修改一下,现在强制它的输出不是0就是1,则此时的 g就是一个临界函数(threshold function)

image

hθ(x) = g(θT x)则我们得到更新规则如下:

image

这就是感知机算法。

转载于:https://www.cnblogs.com/czdbest/p/5768467.html

在Python中,实现分层逻辑斯谛回归通常会涉及到使用统计库如statsmodels或专门处理层次模型的库,如pymc3或PyStan。这里我们将使用`pandas`, `numpy`, `statsmodels` 来创建一个简单的例子。 首先,你需要安装必要的库,如果尚未安装可以使用pip: ```bash pip install pandas numpy statsmodels ``` 然后,你可以按照以下步骤进行: 1. 导入所需的库: ```python import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from statsmodels.discrete.discrete_model import Logit ``` 2. 准备数据,假设有一个包含分类变量的DataFrame,例如用户ID、性别、年龄等: ```python data = pd.read_csv('your_data.csv') # 替换为你的数据文件路径 X = data.drop('target_variable', axis=1) # 假设'target_variable'是你要预测的目标列 y = data['target_variable'] ``` 3. 划分训练集测试集: ```python X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` 4. 创建层次逻辑斯谛回归模型,如果你的数据中有层次结构(如用户ID),那么可以将这些特征作为类别变量,并设置为分组(grouped): ```python # 假设'model_id'是用户ID列 model = Logit(y_train, X_train[['model_id', 'sex', 'age']]) groups = {'model_id': range(len(model.endog.unique()))} # 给每个模型分配一个组编号 result = model.fit(method='bfgs', groups=groups) ``` 5. 预测: ```python y_pred = result.predict(X_test) ``` 6. 评估模型性能: ```python from sklearn.metrics import classification_report, confusion_matrix print(classification_report(y_test, y_pred)) ``` 请注意,这只是一个基本示例,实际应用中可能需要更复杂的预处理步骤以及更多的模型调整。此外,如果数据量大或者复杂性更高,你可能会选择使用更高级的工具,如PyMC3进行贝叶斯分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值