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

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实现

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

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

相关推荐
程序趣谈1 分钟前
算法随笔_36: 复写零
数据结构·python·算法
九亿AI算法优化工作室&24 分钟前
GWO优化LSBooST回归预测matlab
人工智能·python·算法·机器学习·matlab·数据挖掘·回归
灰灰老师28 分钟前
数据分析系列--⑦RapidMiner模型评价(基于泰坦尼克号案例含数据集)
机器学习·ai·数据挖掘·数据分析·rapidminer
东锋1.31 小时前
Ollama 安装教程:轻松开启本地大语言模型之旅
人工智能
一只昀1 小时前
【产品经理学习案例——AI翻译棒出海业务】
人工智能·ai·产品经理
weixin_307779131 小时前
在AWS上使用Flume搜集分布在不同EC2实例上的应用程序日志具体流程和代码
python·flask·云计算·flume·aws
sirius123451232 小时前
自定义数据集 ,使用朴素贝叶斯对其进行分类
python·分类·numpy
蓝染k9z2 小时前
在Ubuntu上使用Docker部署DeepSeek
linux·人工智能·ubuntu·docker·deepseek+
python算法(魔法师版)2 小时前
基于机器学习鉴别中药材的方法
深度学习·线性代数·算法·机器学习·支持向量机·数据挖掘·动态规划
shanks662 小时前
【PyQt】学习PyQt进行GUI开发从基础到进阶逐步掌握详细路线图和关键知识点
python·pyqt