当前位置: 首页 > article >正文

人工智能直通车系列14【机器学习基础】(逻辑回归原理逻辑回归模型实现)

目录

逻辑回归原理

基本概念

线性组合

逻辑函数(Sigmoid 函数)

决策规则

损失函数与参数优化

逻辑回归模型实现(scikit - learn)

代码实现步骤

代码解释

场景示例

邮件分类

疾病诊断


逻辑回归原理

基本概念

逻辑回归(Logistic Regression)是一种广泛用于二分类问题的机器学习算法,虽然名字中带有 “回归”,但实际上是分类算法。它通过对输入特征进行线性组合,然后使用逻辑函数(也称为 Sigmoid 函数)将线性组合的结果映射到 0 到 1 之间的概率值,以此来进行分类决策。

线性组合

假设我们有一个包含 n 个特征的输入向量 \mathbf{x}=(x_1,x_2,\cdots,x_n),逻辑回归首先对这些特征进行线性组合,得到一个线性得分 z
z = \theta_0+\theta_1x_1+\theta_2x_2+\cdots+\theta_nx_n=\mathbf{\theta}^T\mathbf{x}
其中 \theta = (\theta_0,\theta_1,\cdots,\theta_n) 是模型需要学习的参数,\theta_0​ 是截距项,\mathbf{\theta}^T 是 \theta 的转置。

逻辑函数(Sigmoid 函数)

为了将线性得分 z 转换为概率值,逻辑回归使用 Sigmoid 函数 \sigma(z)
\sigma(z)=\frac{1}{1 + e^{-z}}
Sigmoid 函数的图像呈 S 形,其值域在 (0, 1) 之间。当 z 趋近于正无穷时,\sigma(z) 趋近于 1;当 z 趋近于负无穷时,\sigma(z) 趋近于 0。通过 Sigmoid 函数,我们可以将线性得分 z 映射为一个概率值,表示样本属于正类的概率 P(y = 1|\mathbf{x})
P(y = 1|\mathbf{x})=\sigma(\mathbf{\theta}^T\mathbf{x})=\frac{1}{1 + e^{-\mathbf{\theta}^T\mathbf{x}}}
而样本属于负类的概率则为 P(y = 0|\mathbf{x})=1 - P(y = 1|\mathbf{x})

决策规则

通常,我们会设定一个阈值(一般为 0.5),当 P(y = 1|\mathbf{x})\geq0.5 时,将样本预测为正类;当 P(y = 1|\mathbf{x})<0.5 时,将样本预测为负类。

损失函数与参数优化

逻辑回归使用对数损失函数(也称为交叉熵损失函数)来衡量模型预测的概率与真实标签之间的差异。对于单个样本 (\mathbf{x}_i,y_i),其对数损失函数为:
L(\theta)=-y_i\log(P(y = 1|\mathbf{x}_i))-(1 - y_i)\log(1 - P(y = 1|\mathbf{x}_i))
对于包含 m 个样本的数据集,总的损失函数为所有样本损失的平均值:
J(\theta)=\frac{1}{m}\sum_{i = 1}^{m}L(\theta)=-\frac{1}{m}\sum_{i = 1}^{m}[y_i\log(\sigma(\mathbf{\theta}^T\mathbf{x}_i))+(1 - y_i)\log(1 - \sigma(\mathbf{\theta}^T\mathbf{x}_i))]
模型的目标是找到一组参数 \theta 使得损失函数 J(\theta) 最小化,常用的优化算法有梯度下降法等。

逻辑回归模型实现(scikit - learn)

代码实现步骤

以下是使用 scikit - learn 实现逻辑回归模型的详细步骤和示例代码:

import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix

# 1. 生成示例数据集
# 使用 make_classification 函数生成一个二分类数据集
X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, n_redundant=0, random_state=42)

# 2. 划分训练集和测试集
# 将数据集按照 80:20 的比例划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 3. 创建逻辑回归模型对象
# 创建 LogisticRegression 类的实例,使用默认参数
model = LogisticRegression()

# 4. 训练模型
# 使用训练集数据对模型进行训练
model.fit(X_train, y_train)

# 5. 进行预测
# 使用训练好的模型对测试集数据进行预测
y_pred = model.predict(X_test)

# 6. 评估模型性能
# 计算模型的准确率
accuracy = accuracy_score(y_test, y_pred)
# 计算混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)

print(f"模型准确率: {accuracy}")
print(f"混淆矩阵:\n{conf_matrix}")
代码解释
  1. 数据生成:使用 make_classification 函数生成一个包含 1000 个样本、10 个特征的二分类数据集,其中 5 个特征是有信息的。
  2. 数据划分:使用 train_test_split 函数将数据集划分为训练集和测试集,测试集占比 20%。
  3. 模型创建:创建 LogisticRegression 类的实例 model,使用默认的参数设置。
  4. 模型训练:调用 fit 方法,使用训练集数据 X_train 和对应的标签 y_train 对模型进行训练。
  5. 模型预测:使用训练好的模型对测试集数据 X_test 进行预测,得到预测结果 y_pred
  6. 模型评估:使用 accuracy_score 函数计算模型的准确率,使用 confusion_matrix 函数计算混淆矩阵,以评估模型的性能。

场景示例

邮件分类

假设你要构建一个邮件分类系统,将邮件分为垃圾邮件和正常邮件。你可以收集大量的邮件数据,提取邮件的各种特征,如邮件主题中的关键词、发件人信息、邮件内容中的词汇等,将这些特征作为输入向量 x。邮件的标签(垃圾邮件或正常邮件)作为目标变量 y。使用逻辑回归模型进行训练和预测,根据模型预测的概率值判断邮件是否为垃圾邮件。

疾病诊断

在医学领域,医生可以收集患者的各种生理指标(如年龄、血压、血糖等)作为特征,患者是否患有某种疾病作为目标变量。通过逻辑回归模型,医生可以根据患者的生理指标预测患者患病的概率,辅助进行疾病诊断。


http://www.kler.cn/a/580010.html

相关文章:

  • 【CSS3】元婴篇
  • 常用的分布式 ID 设计方案
  • 【Linux系统】进程状态:一个进程的轮回史
  • 高频算法题精讲(Python解法)——算法+实际场景化拆解
  • Spring Boot+RabbitMQ+Canal 解决数据一致性
  • 【时间序列聚类】Feature-driven Time Series Clustering(特征驱动的时间序列聚类)
  • 为什么大模型网站使用 SSE 而不是 WebSocket?
  • 【JAVA】之路启航——初识Java篇
  • 基于Spring Cloud Alibaba的电商系统微服务化实战:从拆分到高可用部署
  • 物理服务器是指的什么?
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-7.1.1Spark Streaming实时写入ES
  • java学习总结三:springMVC
  • 【批量图片识别改名】如何自动识别图片文字并命名,一次性识别多张图片内容作为文件名,基于WPF和百度OCR,教你如何实现
  • 从头开始开发基于虹软SDK的人脸识别考勤系统(python+RTSP开源)(四)
  • Java本地方法根据线上地址下载图片到本地然后返回本地可以访问的地址
  • c语言笔记 一维数组与二维数组
  • python爬虫:Android自动化工具Auto.js的详细使用
  • RabbitMQ高级特性----生产者确认机制
  • craco.config.js是什么?
  • Java剪刀石头布