深入理解逻辑回归算法
1. 介绍
逻辑回归是一种常用于解决二分类问题的机器学习算法。尽管其名为“回归”,实际上逻辑回归是一种分类算法。在本文中,我们将深入探讨逻辑回归算法的原理、应用和实现。
2. 逻辑回归原理
逻辑回归通过将线性回归模型的输出结果经过一个逻辑函数(也称为 sigmoid 函数)进行转换,将结果限制在 0 到 1 之间,代表概率值。通常情况下,大于 0.5 的概率被归为一类,小于 0.5 的概率被归为另一类。
3. 逻辑回归的应用
逻辑回归广泛应用于各种分类问题,如垃圾邮件检测等。由于其简单且效果好,逻辑回归常被用作分类算法的基准模型。
垃圾邮件分类的代码(数据集私信):
#!/usr/bin/env python
# encoding: utf-8
"""
"""
import pandas as pd
import warnings
from sklearn.feature_extraction.text import TfidfVectorizer # 文本型数据处理
from sklearn.preprocessing import LabelEncoder # 字符串型数据编码
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve, auc
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
from matplotlib import rcParams
import matplotlib
# matplotlib.use("Agg") # 输出时不显示绘图
import matplotlib.pyplot as plt # matplotlib.use('agg')必须在本句执行前运行
rcParams['font.family'] = 'simhei' # 可以让图像中显示中文(黑体),无需引用
rcParams['axes.unicode_minus'] = False # 解决负数坐标显示问题
warnings.filterwarnings('ignore')
# #############################################################################################
# 公共部分:分类模型评价体系evaluation
# todo: 构建分类模型的评价体系并存储在evaluation中,方便对比查看,全局变量
evaluation = pd.DataFrame({
'Model': [],
'准确率': [],
'精确率': [],
'召回率': [],
'F1 值': [],
'AUC值': [],
'5折交叉验证的score': []})
# #############################################################################################
# 步骤1 todo: 数据读取、数据集划分及单词文本处理及标签数值化处理
# 步骤1.1 todo: 读取数据并统计数据类别信息
df = pd.read_csv('./垃圾短信预测/data/SMSSpamCollection', delimiter='\t', header=None) # 利用pandas直接读取已有的数据集,数据以tab分割
print(df.head())
print('信息为spam的:', df[df[0] == 'spam'][0].count())
print('信息为ham的:', df[df[0] == 'ham'][0].count())
# 步骤1.2 todo: 先对整体数据按照train_size进行划分,得到训练集和测试集, random_state确保结果的一致性
train_size = 0.67
x_train_raw, x_test_raw, y_train_raw, y_test_raw = train_test_split(df[1], df[0], test_size=train_size, random_state=0)
# 步骤1.3 todo: 对数据集中单词文本进行处理
# 由于数据集为单词文本数据,构建TfidfVectorizer来计算每个单词的TF-IDF权重
tfidf_vectorizer = TfidfVectorizer()
x_train = tfidf_vectorizer.fit_transform(x_train_raw)
x_test = tfidf_vectorizer.transform(x_test_raw)
# 步骤1.4 todo: 目标变量中为字符串型数据,使用labe