逻辑回归简介

文章目录


一、逻辑回归简介

逻辑回归(Logistic Regression)是一种广泛应用于分类问题的统计学习方法,尤其擅长处理二分类问题。尽管名字中带有"回归",但它实际上是一种分类算法。逻辑回归通过Sigmoid函数将线性回归的输出映射到(0,1)区间,从而得到样本属于某一类别的概率。

二、逻辑回归的原理

1. Sigmoid函数

逻辑回归的核心是Sigmoid函数(也称为逻辑函数):
P ( y = 1 ∣ x ) = 1 1 + e − z P(y=1|x) = \frac{1}{1 + e^{-z}} P(y=1∣x)=1+e−z1

其中z是输入特征的线性组合: z = w 0 + w 1 x 1 + w 2 x 2 + . . . + w n x n z = w₀ + w₁x₁ + w₂x₂ + ... + wₙxₙ z=w0+w1x1+w2x2+...+wnxn

2. 决策边界

当 P ( y = 1 ∣ x ) ≥ 0.5 P(y=1|x) ≥ 0.5 P(y=1∣x)≥0.5时,模型预测为正类;当 P ( y = 1 ∣ x ) < 0.5 P(y=1|x) < 0.5 P(y=1∣x)<0.5时,预测为负类。0.5这个阈值形成了决策边界。

3. 损失函数

逻辑回归使用交叉熵损失函数(对数损失函数),通过最大似然估计或梯度下降等优化方法寻找最优参数。

三、逻辑回归的优势与局限

优势:

  • 计算效率高,训练和预测速度快
  • 输出具有概率意义,可解释性强
  • 对线性可分或近似线性可分的数据表现良好
  • 不容易过拟合,尤其适合高维数据

局限:

  • 对非线性决策边界的数据效果有限
  • 对多重共线性敏感
  • 需要较大的样本量来保证参数估计的稳定性

四、示例:银行数据训练

1. 数据准备与探索

python 复制代码
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import pandas as pd
import matplotlib.pyplot as plt
from pylab import mpl
from sklearn.linear_model import LogisticRegression
from sklearn import  metrics

# 读取数据并进行预处理
data = pd.read_csv(r"creditcard.csv")
scaler = StandardScaler()
data["Amount"] = scaler.fit_transform(data[["Amount"]])
data = data.drop(["Time"], axis=1)

# 设置中文字体支持
mpl.rcParams["font.sans-serif"] = ["Microsoft YaHei"]
mpl.rcParams["axes.unicode_minus"] = False

# 查看正负例样本分布
labels_count = pd.value_counts(data["Class"])
print(labels_count)

# 可视化样本分布
plt.title("正负例样本数")
plt.xlabel("类别")
plt.ylabel("频数")
labels_count.plot(kind='bar')
plt.show()

2. 特征选择与数据划分

python 复制代码
# 选择特征列
column_names = ['V1', 'V2', 'V3', 'V4', 'V5', 'V6', 'V7', 'V8', 'V9', 'V10',
                'V11', 'V12', 'V13', 'V14', 'V15', 'V16', 'V17', 'V18', 'V19',
                'V20', 'V21', 'V22', 'V23', 'V24', 'V25', 'V26', 'V27', 'V28', 'Amount']
x_whole = data[column_names]
y_whole = data[["Class"]]

# 划分训练集和测试集(这里使用30%作为训练集)
x_train_w, x_test_w, y_train_w, y_test_w = train_test_split(x_whole, y_whole, train_size=0.3, random_state=1000)

3. 模型训练与评估

python 复制代码
# 创建并训练逻辑回归模型
# C参数是正则化强度的倒数,较小的C值表示更强的正则化
lr = LogisticRegression(C = 0.01)
lr.fit(x_train_w, y_train_w)

# 在测试集上进行预测
test_predicted = lr.predict(x_test_w)
result = lr.score(x_test_w,y_test_w)

# 输出详细的分类报告
print(metrics.classification_report(y_test_w, test_predicted))

图中包含以下关键指标:

  • 精确率(Precision):预测为正例的样本中实际为正例的比例
  • 召回率(Recall):实际为正例的样本中被正确预测的比例
  • F1-score:精确率和召回率的调和平均数
  • 准确率(Accuracy):所有样本中被正确分类的比例
相关推荐
程序员泡椒25 分钟前
二分查找Go版本实现
数据结构·c++·算法·leetcode·go·二分
小雨下雨的雨26 分钟前
Flutter鸿蒙共赢——墨染算法:柏林噪声与鸿蒙生态中的数字水墨意境
算法·flutter·华为·交互·harmonyos·鸿蒙
NAGNIP6 小时前
万字长文!回归模型最全讲解!
算法·面试
知乎的哥廷根数学学派7 小时前
面向可信机械故障诊断的自适应置信度惩罚深度校准算法(Pytorch)
人工智能·pytorch·python·深度学习·算法·机器学习·矩阵
数字化转型20257 小时前
企业数字化架构集成能力建设
大数据·程序人生·机器学习
666HZ6668 小时前
数据结构2.0 线性表
c语言·数据结构·算法
知乎的哥廷根数学学派9 小时前
基于生成对抗U-Net混合架构的隧道衬砌缺陷地质雷达数据智能反演与成像方法(以模拟信号为例,Pytorch)
开发语言·人工智能·pytorch·python·深度学习·机器学习
实心儿儿9 小时前
Linux —— 基础开发工具5
linux·运维·算法
知乎的哥廷根数学学派9 小时前
基于自适应多尺度小波核编码与注意力增强的脉冲神经网络机械故障诊断(Pytorch)
人工智能·pytorch·python·深度学习·神经网络·机器学习
charlie11451419110 小时前
嵌入式的现代C++教程——constexpr与设计技巧
开发语言·c++·笔记·单片机·学习·算法·嵌入式