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

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

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 库来实现逻辑回归模型。以下是一个简单的示例:

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. 导入必要的库

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. 加载数据

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

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

3. 特征提取

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

4. 划分训练集和测试集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

5. 创建和训练模型

model = LogisticRegression()
model.fit(X_train, y_train)

6. 预测和评估

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)

完整代码:

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实现
点击进入:机器学习基础算法 (一)-线性回归

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


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

相关文章:

  • node.js和js
  • SQLite本地数据库的简介和适用场景——集成SpringBoot的图文说明
  • 《迁移学习与联邦学习:推动人工智能发展的关键力量》
  • C/C++ 数据结构与算法【树和森林】 树和森林 详细解析【日常学习,考研必备】带图+详细代码
  • 嵌入式科普(25)Home Assistant米家集成意味着IOT的核心是智能设备
  • python中os.path.isdir()问题
  • 【LeetCode 面试经典150题】详细题解之哈希表篇
  • QT-【常用容器类】-QList类 QLinkedList类
  • stp生成树协议
  • Apache Solr XXE(CVE-2017-12629)--vulhub
  • 低代码开源项目Joget的研究——Joget7社区版安装部署
  • 寻找适合小户型的开源知识库open source knowledge base之路
  • ModbusTCP转Profinet:ABB机器人与PLC的高效连接
  • 《解锁 Python 数据挖掘的奥秘》
  • easegen将教材批量生成可控ppt课件方案设计
  • ubuntu服务器配置IP
  • Ubuntu下通过Docker部署MySQL服务器
  • 【LeetCode】726、原子的数量
  • 43. Three.js案例-绘制100个立方体
  • WPF+MVVM案例实战与特效(四十八)-实现一个自定义饼状图控件
  • Excel中match()函数
  • 【Docker命令】如何使用`docker exec`在容器内执行命令
  • [网鼎杯 2020 朱雀组]phpweb 1
  • 基于FPGA的2ASK+帧同步系统verilog开发,包含testbench,高斯信道,误码统计,可设置SNR
  • 抖音SEO短视频矩阵系统源码:短视频流量密码揭秘
  • openssl 安装及使用