机器学习基础算法 (二)-逻辑回归

python 环境的配置参考 从零开始:Python 环境搭建与工具配置

逻辑回归是一种用于解决二分类问题的机器学习算法,它可以预测输入数据属于某个类别的概率。本文将详细介绍逻辑回归的原理、Python 实现、模型评估和调优,并结合垃圾邮件分类案例进行实战演练。

一、逻辑回归原理

逻辑回归使用 Sigmoid 函数将线性回归模型的输出转换为概率值。Sigmoid 函数的公式如下:

P(y=1|x) = 1 / (1 + exp(-(β₀ + β₁x₁ + ⋯ + βᵣ𝑥ᵣ)))

其中:

  • P(y=1|x) 是输入数据 x 属于类别 1 的概率
  • x₁, x₂, ..., xᵣ 是特征
  • β₀ 是截距
  • β₁, β₂, ..., βᵣ 是系数

逻辑回归模型通过学习训练数据,找到最佳的 β₀, β₁, ..., βᵣ 参数值,使得模型预测的概率值与真实类别之间的误差最小化。

二、Python 实现逻辑回归模型

Python 中可以使用 scikit-learn 库来实现逻辑回归模型。以下是一个简单的示例:

python 复制代码
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix

# 导入数据
# 假设 X 是特征矩阵,y 是目标变量向量

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建逻辑回归模型
model = LogisticRegression()

# 训练模型
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 评估模型
accuracy = accuracy_score(y_test, y_pred)
cm = confusion_matrix(y_test, y_pred)

print('准确率:', accuracy)
print('混淆矩阵:\n', cm)

三、模型评估和调优

逻辑回归模型的评估指标主要包括:

  • 准确率: 衡量模型正确预测的样本比例。
  • 精确率: 衡量预测为正例的样本中真正例的比例。
  • 召回率: 衡量实际为正例的样本中被正确预测为正例的比例。
  • F1 值: 精确率和召回率的调和平均值。
  • ROC 曲线和 AUC: 评估模型在不同阈值下的分类性能。

为了提高模型的性能,可以进行以下调优:

  • 特征工程: 选择合适的特征,进行特征缩放、特征组合等操作。
  • 正则化: 添加 L1 或 L2 正则化项,防止模型过拟合。
  • 超参数调优: 调整模型的超参数,例如惩罚系数 C、求解器 solver 等。

四、案例实战:垃圾邮件分类

下面我们使用逻辑回归模型来进行垃圾邮件分类。

1. 导入必要的库

python 复制代码
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import accuracy_score, confusion_matrix

2. 加载数据

python 复制代码
# 使用 pandas 加载数据
data = pd.read_csv('spam.csv')  # 将 'spam.csv' 替换为实际文件名

# 选择特征和目标变量
X = data['text']  # 使用邮件内容作为特征
y = data['spam']  # 是否为垃圾邮件作为目标变量

3. 特征提取

python 复制代码
# 使用 TfidfVectorizer 将文本转换为数值特征
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(X)

4. 划分训练集和测试集

python 复制代码
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

5. 创建和训练模型

python 复制代码
model = LogisticRegression()
model.fit(X_train, y_train)

6. 预测和评估

python 复制代码
y_pred = model.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)
cm = confusion_matrix(y_test, y_pred)

print('准确率:', accuracy)
print('混淆矩阵:\n', cm)

完整代码:

python 复制代码
import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import accuracy_score, confusion_matrix

# 加载数据
data = pd.read_csv('spam.csv')

# 数据诊断
print("原始数据形状:", data.shape)
print("缺失值统计:\n", data.isnull().sum())
print("\n原始数据前5行:\n", data.head())

# 清理数据
# 1. 检查spam列的值
print("\nSpam列的唯一值:", data['spam'].unique())

# 2. 填充spam列的缺失值(假设缺失值为非垃圾邮件)
data['spam'] = data['spam'].fillna(0)

# 3. 确保spam列为数值型且只包含0和1
data['spam'] = pd.to_numeric(data['spam'], errors='coerce')
data = data[data['spam'].isin([0, 1])]

# 4. 删除text列中的缺失值
data = data.dropna(subset=['text'])

# 验证清理后的数据
print("\n清理后数据形状:", data.shape)
print("清理后spam分布:\n", data['spam'].value_counts())

# 特征提取和模型训练(仅在数据量足够时执行)
if len(data) > 1:
    X = data['text']
    y = data['spam'].values

    vectorizer = TfidfVectorizer(max_features=5000)
    X = vectorizer.fit_transform(X)

    # 划分训练集和测试集(如果数据量太少,增加test_size)
    test_size = 0.2 if len(data) > 10 else 0.1
    X_train, X_test, y_train, y_test = train_test_split(
        X, y, test_size=test_size, random_state=42
    )

    # 创建和训练模型
    model = LogisticRegression(max_iter=1000)
    model.fit(X_train, y_train)

    # 评估模型
    y_pred = model.predict(X_test)
    print("\n模型评估:")
    print("准确率:", accuracy_score(y_test, y_pred))
    print("混淆矩阵:\n", confusion_matrix(y_test, y_pred))
else:
    print("\n错误:数据量不足,无法训练模型")

完整的代码: LogisticRegression

总结:

本文介绍了逻辑回归的原理、Python 实现、模型评估和调优,并通过垃圾邮件分类案例演示了如何使用逻辑回归模型进行分类。逻辑回归是一种简单有效的二分类算法,在许多领域都有广泛的应用。希望本文能帮助你理解逻辑回归,并能够使用 Python 进行实际应用。

想要系统学习AI算法Python实现?这个专栏将带你学习机器学习基础算法、深度学习基础算法、强化学习基础算法、模型优化与调参。每个都将包括原理、算法和实战!

点击进入:AI算法Python实现

点击进入:机器学习基础算法 (一)-线性回归

本文为原创内容,未经许可不得转载。

相关推荐
SelectDB技术团队几秒前
Apache Doris 2025 Roadmap:构建 GenAI 时代实时高效统一的数据底座
大数据·数据库·数据仓库·人工智能·ai·数据分析·湖仓一体
weixin_435208161 分钟前
通过 Markdown 改进 RAG 文档处理
人工智能·python·算法·自然语言处理·面试·nlp·aigc
大数据在线4 分钟前
AI重塑云基础设施,亚马逊云科技打造AI定制版IaaS“样板房”
人工智能·云基础设施·ai大模型·亚马逊云科技
hello_ejb35 分钟前
聊聊Spring AI的RetrievalAugmentationAdvisor
人工智能·spring·restful
东方佑14 分钟前
利用Python自动化处理PPT样式与结构:从提取到生成
python·自动化·powerpoint
你觉得20519 分钟前
浙江大学朱霖潮研究员:《人工智能重塑科学与工程研究》以蛋白质结构预测为例|附PPT下载方法
大数据·人工智能·机器学习·ai·云计算·aigc·powerpoint
橘猫云计算机设计38 分钟前
基于springboot的考研成绩查询系统(源码+lw+部署文档+讲解),源码可白嫖!
java·spring boot·后端·python·考研·django·毕业设计
人工干智能41 分钟前
科普:One-Class SVM和SVDD
人工智能·机器学习·支持向量机
超级小的大杯柠檬水1 小时前
修改Anaconda中Jupyter Notebook默认工作路径的详细图文教程(Win 11)
ide·python·jupyter