首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

解锁机器学习核心算法 | 逻辑回归:不是回归的“回归”

  • 25-03-02 10:42
  • 3637
  • 12435
blog.csdn.net

引言

前面一篇文章我们介绍了机器学习算法中我们最先会接触到的算法 —— 线性回归:机器学习的基石。今天我们继续学习机器学习中的另一个算法模型 —— 逻辑回归(Logistic Regression)。

一、逻辑回归:不是回归的 “回归”

在机器学习的庞大算法体系中,逻辑回归(Logistic Regression)虽然名字中带有 “回归”,但却是一位不折不扣的 “分类高手”,主要用于解决二分类问题,在众多领域发挥着关键作用。

在医疗领域,医生可通过逻辑回归,综合患者的年龄、性别、家族病史、生活习惯等多维度数据,预测患者患某种疾病的概率,辅助诊断决策。例如,预测一个人患糖尿病的可能性,根据输入的血糖水平、体重指数(BMI)、血压等特征,模型输出患糖尿病概率。若概率大于设定阈值(如 0.5),则判定为可能患病,反之则为可能未患病 。

在互联网广告行业,广告商利用逻辑回归预测用户对广告的点击率,根据用户的年龄、性别、浏览历史、搜索关键词等信息,模型计算出用户点击某广告的概率,帮助广告商优化广告投放策略,提高广告效果和投资回报率。

简单来说,逻辑回归就是这样一种模型,它能根据输入的特征数据,计算出事件发生的概率,从而实现对事物的分类判断。接下来,让我们深入其原理,揭开它的神秘面纱。

在这里插入图片描述

二、逻辑回归原理剖析

(一)逻辑回归与线性回归的渊源

逻辑回归 和 线性回归 虽名字相似,却有着不同的应用方向。线性回归是预测连续数值的算法,如预测房价、股票价格等,它试图找到一条最优直线,使得数据点到直线的误差平方和最小,以此来建立自变量与因变量之间的线性关系。例如,在房价预测中,将房屋面积、房龄等作为自变量,房价作为因变量,通过线性回归找到这些因素与房价之间的线性关系,从而预测不同条件下的房价。

而逻辑回归主要用于解决分类问题,尤其是二分类问题 ,它的核心是通过 Sigmoid 函数将线性回归的结果映射到 [0, 1] 区间,转化为概率值,进而根据概率值判断样本所属类别。比如在判断邮件是否为垃圾邮件时,逻辑回归根据邮件的内容、发件人等特征计算出它是垃圾邮件的概率,若概率大于 0.5,则判定为垃圾邮件,否则为正常邮件。

从发展历程来看,逻辑回归是在线性回归的基础上,引入了 Sigmoid 函数这一非线性变换,实现了从回归到分类的转变。尽管逻辑回归名字里有 “回归”,但本质上它是利用线性回归的思想进行分类,是一种广义的线性模型。

(二)Sigmoid 函数:神奇的概率变换器

Sigmoid 函数在逻辑回归中扮演着核心角色,它就像一个神奇的 “概率变换器”,将线性回归的输出结果转换为概率值。Sigmoid 函数的数学公式为:
σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1 + e^{-z}} σ(z)=1+e−z1​

其中, z z z 是线性回归的输出, σ ( z ) \sigma(z) σ(z) 是经过 Sigmoid 函数变换后的输出,其值域为 (0, 1)。当 z z z 趋近于正无穷时, σ ( z ) \sigma(z) σ(z) 趋近于 1;当 z z z 趋近于负无穷时, σ ( z ) \sigma(z) σ(z) 趋近于 0。从图像上看,Sigmoid 函数呈现出 S 型曲线,这种特殊的形状使得它非常适合用于将线性回归的连续输出映射为概率值,以满足分类任务的需求。

在逻辑回归中,假设线性回归模型为 z = w T x + b z = w^Tx + b z=wTx+b,其中 w w w 是权重向量, x x x 是输入特征向量, b b b 是偏置项。将 z z z 代入 Sigmoid 函数,得到:
P ( y = 1 ∣ x ) = 1 1 + e − ( w T x + b ) P(y = 1|x) = \frac{1}{1 + e^{-(w^Tx + b)}} P(y=1∣x)=1+e−(wTx+b)1​

这里, P ( y = 1 ∣ x ) P(y = 1|x) P(y=1∣x) 表示在给定输入特征 x x x 的情况下,样本属于正类( y = 1 y = 1 y=1)的概率。例如,在预测用户是否会购买某商品时, x x x 可以是用户的年龄、性别、收入、购买历史等特征, w w w 和 b b b 是通过训练学习得到的参数,通过上述公式计算出用户购买商品的概率,若概率大于设定阈值(如 0.5),则预测用户会购买,否则预测用户不会购买。

(三)模型构建与决策边界

逻辑回归模型的数学表达式为:
P ( y = 1 ∣ x ) = 1 1 + e − ( w T x + b ) P(y = 1|x) = \frac{1}{1 + e^{-(w^Tx + b)}} P(y=1∣x)=1+e−(wTx+b)1​

其中, P ( y = 1 ∣ x ) P(y = 1|x) P(y=1∣x) 表示样本 x x x 属于正类的概率, w w w 和 b b b 是模型的参数,通过对训练数据的学习来确定。在实际应用中,我们通常会设定一个阈值 t t t(一般取 0.5),当 P ( y = 1 ∣ x ) > t P(y = 1|x) > t P(y=1∣x)>t 时,将样本 x x x 判定为正类;当 P ( y = 1 ∣ x ) ≤ t P(y = 1|x) \leq t P(y=1∣x)≤t时,将样本 x x x判定为负类。

对于二分类问题,决策边界是将两个类别分开的边界。在逻辑回归中,决策边界是由 P ( y = 1 ∣ x ) = 0.5 P(y = 1|x) = 0.5 P(y=1∣x)=0.5确定的,即:
1 1 + e − ( w T x + b ) = 0.5 \frac{1}{1 + e^{-(w^Tx + b)}} = 0.5 1+e−(wTx+b)1​=0.5

化简可得:
w T x + b = 0 w^Tx + b = 0 wTx+b=0

这是一个线性方程,表示在特征空间中是一个超平面(在二维特征空间中是一条直线,在三维特征空间中是一个平面,以此类推)。例如,在一个二维特征空间中,有两个特征 x 1 x_1 x1​ 和 x 2 x_2 x2​ ,决策边界可以表示为 w 1 x 1 + w 2 x 2 + b = 0 w_1x_1 + w_2x_2 + b = 0 w1​x1​+w2​x2​+b=0,这条直线将平面分为两个区域,直线一侧的样本被判定为正类,另一侧的样本被判定为负类。

对于多分类问题,可以使用 一对多(One-vs-Rest)或 多对多(One-vs-One)等策略将其转化为多个二分类问题来解决。在 “一对多” 策略中,对于每个类别,都构建一个逻辑回归模型,将该类别与其他所有类别区分开来。假设有 K K K 个类别,就需要构建 K K K个逻辑回归模型,第 i i i 个模型预测样本属于第 i i i 类的概率,最终将样本判定为概率最大的类别。在这种情况下,决策边界不再是一个简单的超平面,而是由多个超平面组成的复杂边界。

(四)损失函数与优化算法

逻辑回归常用的损失函数是对数似然损失函数(Log-Likelihood Loss Function),也称为交叉熵损失函数(Cross-Entropy Loss Function)。

对于二分类问题,假设样本 i i i 的真实标签为 y i y_i yi​( y i ∈ { 0 , 1 } y_i \in \{0, 1\} yi​∈{0,1}),预测概率为 y ^ i = P ( y = 1 ∣ x i ) \hat{y}_i = P(y = 1|x_i) y^​i​=P(y=1∣xi​),则单个样本的对数似然损失为:
L ( y i , y ^ i ) = − y i log ⁡ ( y ^ i ) − ( 1 − y i ) log ⁡ ( 1 − y ^ i ) L(y_i, \hat{y}_i) = -y_i \log(\hat{y}_i) - (1 - y_i) \log(1 - \hat{y}_i) L(yi​,y^​i​)=−yi​log(y^​i​)−(1−yi​)log(1−y^​i​)

整个训练数据集的损失函数为所有样本损失的平均值:
J ( w , b ) = − 1 n ∑ i = 1 n [ y i log ⁡ ( y ^ i ) + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] J(w, b) = -\frac{1}{n} \sum_{i = 1}^{n} [y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i)] J(w,b)=−n1​i=1∑n​[yi​log(y^​i​)+(1−yi​)log(1−y^​i​)]

其中, n n n 是训练样本的数量。对数似然损失函数的原理是基于最大似然估计,它衡量了模型预测概率与真实标签之间的差异,损失函数的值越小,说明模型的预测结果与真实标签越接近,模型的性能越好。

为了最小化损失函数,通常使用 梯度下降(Gradient Descent)等优化算法来调整模型的参数 w w w 和 b b b。梯度下降算法的基本思想是:在每一次迭代中,计算损失函数关于参数的梯度,然后沿着梯度的反方向更新参数,使得损失函数逐渐减小。具体来说,对于参数 w w w 和 b b b 的更新公式如下:
w = w − α ∂ J ( w , b ) ∂ w w = w - \alpha \frac{\partial J(w, b)}{\partial w} w=w−α∂w∂J(w,b)​

b = b − α ∂ J ( w , b ) ∂ b b = b - \alpha \frac{\partial J(w, b)}{\partial b} b=b−α∂b∂J(w,b)​

其中, α \alpha α 是学习率,控制每次参数更新的步长。学习率的选择非常重要,如果学习率过大,可能会导致参数更新过快,错过最优解,甚至使模型无法收敛;如果学习率过小,参数更新会非常缓慢,训练时间会大大增加。在实际应用中,通常需要通过实验来选择合适的学习率。

除了梯度下降算法,还有一些其他的优化算法,如随机梯度下降(Stochastic Gradient Descent,SGD)、Adagrad、Adadelta、Adam 等,它们在不同的场景下可能具有更好的性能和收敛速度。例如,随机梯度下降在每次迭代中只使用一个样本(或一小批样本)来计算梯度,相比梯度下降,它的计算效率更高,适用于大规模数据集;Adam 算法结合了 Adagrad 和 Adadelta 的优点,能够自适应地调整学习率,在很多情况下表现出较好的性能。

三、逻辑回归实战演练

(一)数据准备

为了更直观地了解逻辑回归的实际应用,我们以一个预测用户是否会购买某商品的数据集为例。假设我们从某电商平台收集到了一批用户数据,其中包含用户的年龄、性别、收入、浏览商品次数、历史购买次数等特征,以及用户是否购买了目标商品的标签。

1、读取数据

首先,我们使用 Python 的 pandas 库读取数据集:

import pandas as pd

# 读取数据

data = pd.read_csv('user_purchase_data.csv')
  • 1
  • 2
  • 3
  • 4
  • 5
2、清洗和预处理

读取数据后,通常需要进行清洗和预处理,以确保数据的质量和可用性。这可能包括处理缺失值、异常值,以及对数据进行标准化或归一化等操作。

  • 处理缺失值时,如果数据集中存在缺失值,我们可以根据具体情况选择合适的处理方法。比如,对于数值型特征,可以使用均值、中位数或其他统计方法进行填充;对于分类特征,可以使用最频繁出现的类别进行填充。以下是使用均值填充数值型特征缺失值的示例代码:
# 使用均值填充数值型特征的缺失值

numeric_columns = data.select_dtypes(include=['number']).columns

data[numeric_columns] = data[numeric_columns].fillna(data[numeric_columns].mean())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 对于异常值,我们可以使用箱线图等方法来识别数据中的异常值,并根据实际情况进行处理,如删除异常值或进行修正。下面是使用箱线图识别并删除年龄特征异常值的示例代码:
import seaborn as sns

import matplotlib.pyplot as plt

# 绘制年龄特征的箱线图

sns.boxplot(x=data['age'])

plt.show()

# 删除年龄特征的异常值(假设年龄在10到100之间为合理范围)

data = data[(data['age'] >= 10) & (data['age'] <= 100)]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 对于分类特征,我们需要将其转换为数值型数据,以便模型能够处理。常用的方法有独热编码(One - Hot Encoding)和标签编码(Label Encoding)。这里以独热编码处理性别特征为例:
# 使用独热编码处理性别特征

data = pd.get_dummies(data, columns=['gender'])
  • 1
  • 2
  • 3

(二)模型训练与评估

在数据准备好之后,我们使用 Python 的 Scikit - learn 库来训练逻辑回归模型。

1、数据集划分

首先,将数据集划分为训练集和测试集,通常使用 70% 的数据作为训练集,30% 的数据作为测试集:

from sklearn.model_selection import train_test_split

# 划分特征和标签

X = data.drop('is_purchase', axis=1)

y = data['is_purchase']

# 划分训练集和测试集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
2、创建模型并训练

接着,创建逻辑回归模型并进行训练:

from sklearn.linear_model import LogisticRegression

# 创建逻辑回归模型

model = LogisticRegression()

# 训练模型

model.fit(X_train, y_train)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
3、 预测与评估

模型训练完成后,我们使用测试集进行预测,并计算准确率、精确率、召回率、F1 值和 AUC 等指标来评估模型的性能:

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score

# 预测

y_pred = model.predict(X_test)

y_pred_proba = model.predict_proba(X_test)[:, 1]

# 计算评估指标

accuracy = accuracy_score(y_test, y_pred)

precision = precision_score(y_test, y_pred)

recall = recall_score(y_test, y_pred)

f1 = f1_score(y_test, y_pred)

auc = roc_auc_score(y_test, y_pred_proba)

print(f'准确率: {accuracy}')

print(f'精确率: {precision}')

print(f'召回率: {recall}')

print(f'F1值: {f1}')

print(f'AUC: {auc}')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

(三)结果分析与可视化

通过上述评估指标,我们可以对模型的性能进行分析。为了更直观地展示模型的性能,我们可以绘制混淆矩阵和 ROC 曲线。混淆矩阵可以直观地展示模型在各个类别上的预测情况,通过 Seaborn 库和 Matplotlib 库来绘制混淆矩阵:

import seaborn as sns

import matplotlib.pyplot as plt

from sklearn.metrics import confusion_matrix

# 计算混淆矩阵

cm = confusion_matrix(y_test, y_pred)

# 绘制混淆矩阵

plt.figure(figsize=(8, 6))

sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=['未购买', '购买'], yticklabels=['未购买', '购买'])

plt.ylabel('真实标签')

plt.xlabel('预测标签')

plt.title('混淆矩阵')

plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

ROC 曲线则展示了模型在不同阈值下的真正率和假正率之间的关系,通过 Matplotlib 库来绘制 ROC 曲线:

from sklearn.metrics import roc_curve

# 计算ROC曲线数据

fpr, tpr, thresholds = roc_curve(y_test, y_pred_proba)

# 绘制ROC曲线

plt.figure(figsize=(8, 6))

plt.plot(fpr, tpr, color='blue', lw=2, label='ROC curve (area = %0.2f)' % auc)

plt.plot([0, 1], [0, 1], color='red', lw=2, linestyle='--')

plt.xlim([0.0, 1.0])

plt.ylim([0.0, 1.05])

plt.xlabel('假正率')

plt.ylabel('真正率')

plt.title('受试者工作特征曲线')

plt.legend(loc="lower right")

plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

从混淆矩阵中,我们可以清晰地看到模型对正样本和负样本的分类情况,判断模型在哪些类别上容易出现错误分类。ROC 曲线则能帮助我们了解模型在不同阈值下的整体性能,以及模型区分正样本和负样本的能力。通过这些分析和可视化方法,我们可以更全面地评估逻辑回归模型的性能,为进一步优化模型提供依据。

四、逻辑回归的优化与拓展

(一)特征工程

特征工程对逻辑回归至关重要,如同为模型挑选食材,直接影响性能。其关键环节为特征选择与特征提取。

1、特征选择

从原始特征选关键、去冗余,降模型复杂度,提训练效率与泛化能力。常用方法有:

  • 卡方检验:基于卡方分布,算特征与标签独立性评估重要性,卡方值越大越重要,如预测用户购买商品时筛选相关特征。
  • 信息增益:基于信息论,算特征加入对信息熵减少程度,增益越大越有助于分类,如文本分类时选关键特征词。
2、特征提取

从原始数据提新特征,提升性能。如主成分分析(PCA),线性变换原始特征成正交主成分,按方差排序,常留前几个主成分降维,像图像识别时既留主要特征又减数据量。
实际应用中,特征工程需依数据和问题反复尝试优化,选合适方法提模型性能,如高维数据用 PCA,文本数据结合多种技术提取特征。

(二)模型调优

逻辑回归模型的超参数对模型性能有着重要影响,合理调整超参数可以使模型达到更好的效果。其中,正则化参数 C 是一个关键的超参数,它用于控制正则化的强度。常用正则化方法有 L1(Lasso) 和 L2(Ridge)。L1 使部分参数为 0 实现特征选择,让模型稀疏;L2 对参数平方和惩罚,防参数过大,使模型稳定。C 值与正则化强度反比,C 值小,正则化权重增加,约束强,拟合能力弱,防过拟合但可能欠拟合;C 值大,正则化权重减小,约束弱,拟合能力强,但可能过拟合。

找最优超参数组合,常用网格搜索与随机搜索。网格搜索是穷举算法,遍历预定义超参数组合。如定义 C 取值范围 [0.01, 0.1, 1, 10] ,正则化类型取值 [‘l1’, ‘l2’] ,对所有组合训练评估,选最优组合作最终设置。在使用 Scikit-learn 库中的 GridSearchCV 进行网格搜索时,可以这样实现:

from sklearn.model_selection import GridSearchCV

from sklearn.linear_model import LogisticRegression

# 定义逻辑回归模型

lr = LogisticRegression()

# 定义超参数搜索空间

param_grid = {

   'C': [0.01, 0.1, 1, 10],

   'penalty': ['l1', 'l2']

}

# 使用GridSearchCV进行网格搜索

grid_search = GridSearchCV(lr, param_grid, cv=5)

grid_search.fit(X_train, y_train)

# 输出最佳超参数和最佳得分

print("最佳超参数:", grid_search.best_params_)

print("最佳得分:", grid_search.best_score_)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

随机搜索则是在超参数空间中随机选择一定数量的超参数组合进行评估,它适用于超参数空间较大的情况,可以在较短的时间内找到近似最优的超参数组合。相比于网格搜索,随机搜索不需要对所有的超参数组合进行尝试,因此计算成本较低。在使用 Scikit-learn 库中的 RandomizedSearchCV 进行随机搜索时,可以这样实现:

from sklearn.model_selection import RandomizedSearchCV

from sklearn.linear_model import LogisticRegression

from scipy.stats import uniform

# 定义逻辑回归模型

lr = LogisticRegression()

# 定义超参数搜索空间

param_dist = {

   'C': uniform(0.01, 10),

   'penalty': ['l1', 'l2']

}

# 使用RandomizedSearchCV进行随机搜索

random_search = RandomizedSearchCV(lr, param_distributions=param_dist, n_iter=50, cv=5)

random_search.fit(X_train, y_train)

# 输出最佳超参数和最佳得分

print("最佳超参数:", random_search.best_params_)

print("最佳得分:", random_search.best_score_)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

在实际应用中,还可以结合交叉验证(Cross - Validation)来评估模型在不同超参数下的性能。交叉验证是将数据集划分为多个子集,在不同的子集上进行训练和验证,然后综合多个子集的结果来评估模型的性能,这样可以更准确地评估模型的泛化能力,避免因数据集划分的随机性而导致的评估误差。

(三)应对过拟合与欠拟合

在逻辑回归模型的训练过程中,过拟合和欠拟合是常见的问题,它们会导致模型的性能下降,无法准确地对新数据进行预测。

1、过拟合

过拟合是指模型在训练集上表现非常好,但在测试集或新数据上表现很差,即模型过度学习了训练数据中的细节和噪声,而忽略了数据的整体规律,导致泛化能力变差。造成过拟合的原因有很多,数据噪声是一个常见因素,若训练数据中存在大量噪声数据,模型可能会将这些噪声数据的特征也学习进去,从而影响模型的泛化能力。例如,在图像识别任务中,如果训练数据中的图像存在标注错误或噪声干扰,模型可能会学习到这些错误的特征,导致在识别新图像时出现错误。特征过多也可能引发过拟合,当特征数量过多且其中一些特征与目标变量无关或相关性很弱时,模型可能会过度关注这些无关特征,从而导致过拟合。此外,模型复杂度较高,如使用了过于复杂的多项式特征,也容易出现过拟合现象。

为了解决过拟合问题,正则化是一种常用的方法,通过在损失函数中添加正则化项,如 L1 或 L2 正则化项,可以限制模型参数的大小,防止模型过度拟合。以 L2 正则化为例,在逻辑回归的损失函数中添加 L2 正则化项后,损失函数变为:
J ( w , b ) = − 1 n ∑ i = 1 n [ y i log ⁡ ( y ^ i ) + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] + λ 2 ∑ j = 1 m w j 2 J(w, b) = -\frac{1}{n} \sum_{i = 1}^{n} [y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i)] + \frac{\lambda}{2} \sum_{j = 1}^{m} w_j^2 J(w,b)=−n1​i=1∑n​[yi​log(y^​i​)+(1−yi​)log(1−y^​i​)]+2λ​j=1∑m​wj2​

其中, λ \lambda λ 是正则化系数,控制正则化的强度。增加数据量也是有效的解决方法,更多的数据可以让模型学习到更全面的数据规律,减少过拟合的风险。此外,进行特征选择,去除无关或冗余的特征,也可以降低模型的复杂度,防止过拟合。

2、欠拟合

欠拟合则是指模型在训练集和测试集上的表现都很差,即模型无法很好地捕捉数据的特征和规律,对数据的拟合程度不足。欠拟合的原因主要包括模型复杂度过低,当模型过于简单,无法学习到数据中的复杂关系时,就会出现欠拟合。例如,在预测房价时,如果只使用一个简单的线性模型,而房价受到多种因素的复杂影响,那么模型可能无法准确地拟合房价与这些因素之间的关系。数据量过少也可能导致欠拟合,数据量不足时,模型无法学习到足够的信息,从而无法准确地捕捉数据的规律。

针对欠拟合问题,可以通过增加模型复杂度来解决,如添加多项式特征,使模型能够学习到数据中的非线性关系。还可以增加数据量,为模型提供更多的学习信息,帮助模型更好地捕捉数据规律。

(四)多分类问题处理

逻辑回归虽主要用于二分类,借助扩展策略也能处理多分类问题,One - vs - Rest(OvR) 与 Softmax 回归是常用方法。

1、One - vs - Rest(OvR)

OvR(又称OvA),把多分类问题转化为多个二分类问题。 对 K K K 个类别的多分类,训练 K K K 个逻辑回归模型,每个模型将一个类别设为正类,其余 K − 1 K - 1 K−1 类为负类。预测新样本时,各模型计算其为正类概率,选概率最大模型对应的类别为预测结果。如手写数字识别(10个类别),训练10个模型,分别判断是否为0 - 9,新图像经各模型计算概率,概率最高的类别即预测结果。

2、Softmax

Softmax 回归是逻辑回归在多分类上的直接扩展,适用于类别互斥情况。 它用 Softmax 函数将线性回归结果转为多类别概率分布,公式为 P ( y = k ∣ x ) = e w k T x + b k ∑ j = 1 K e w j T x + b j P(y = k|x) = \frac{e^{w_k^Tx + b_k}}{\sum_{j = 1}^{K} e^{w_j^Tx + b_j}} P(y=k∣x)=∑j=1K​ewjT​x+bj​ewkT​x+bk​​训练时用交叉熵损失函数优化参数,使预测概率分布接近真实标签分布。像图像分类(猫、狗、兔子三类),模型依图像特征计算各分类概率,概率最高的类别为预测结果。

实际应用中,选 OvR 还是 Softmax 回归,要依据问题与数据特点。类别互斥且数据分布均匀,Softmax 回归较优;类别有重叠或数据分布不均衡,OvR 可能更合适。还可结合模型训练时间、预测准确性等指标综合评估选择。

五、逻辑回归的应用场景拓展

逻辑回归凭借独特优势,在多领域发挥重要作用。

  • 医疗领域:用于疾病预测,如糖尿病预测,依据患者生理指标、病史等多维度数据,计算患病概率。其可解释性助医生了解各特征影响,制定预防与治疗方案。
  • 金融领域:应用于风险评估,像信用评分与贷款违约预测。考虑客户收入、信用历史等因素,输出违约概率,助金融机构决策,且计算效率高,能快速处理大量数据。
  • 电商领域:助力用户行为分析,预测购买行为实现精准营销,分析用户流失可能性,平台据此采取挽留措施提升用户粘性。
  • 文本分类:可判断文本类别,如新闻分类、情感分析,具有简单高效特点,能快速处理大量文本。

不过,逻辑回归存在局限,处理高维数据和复杂非线性关系时,表现逊于复杂模型,且对数据质量和特征相关性敏感,实际应用需综合考虑适用性并优化。

六、总结与展望

本文我们介绍了逻辑回归是机器学习经典算法,凭借坚实理论、简洁结构与出色可解释性,在多领域意义重大。其原理是借Sigmoid函数,将线性回归结果转概率值,实现回归到分类的转变,解决二分类与多分类问题。通过构建损失函数,用梯度下降等算法调参,优化拟合效果。

实战中,数据准备(清洗、预处理)、模型训练(参数调整优化)、模型评估(多指标分析与可视化)环环相扣,决定模型性能。以用户购买行为预测为例,可了解其应用流程与效果评估。

为提升性能,可采用特征工程、模型调优等策略,应对过拟合与欠拟合。处理多分类问题,One - vs - Rest 和 Softmax 回归拓展其应用。它在医疗、金融等多领域成功应用,彰显实用价值与广泛适用性。

不过,面对数据规模与复杂性增加,逻辑回归面临挑战。未来,有望与深度学习、集成学习等结合,形成更强模型,且计算技术进步或提升其处理大规模、高维数据的效率。


延申阅读

解锁机器学习核心算法 | 线性回归:机器学习的基石

深度学习框架探秘|TensorFlow:AI 世界的万能钥匙

深度学习框架探秘|PyTorch:AI 开发的灵动画笔

深度学习框架探秘|TensorFlow vs PyTorch:AI 框架的巅峰对决

深度学习框架探秘|Keras:深度学习的魔法钥匙

注:本文转载自blog.csdn.net的紫雾凌寒的文章"https://bthvi-leiqi.blog.csdn.net/article/details/145665346"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top