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

Python逻辑回归分类

# Python逻辑回归分类
# 逻辑回归虽然名字带"回归",实际是分类算法
# 本质是用 sigmoid 函数将线性回归输出映射到 [0,1] 概率区间

# 1. 导入库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification, load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix

# 2. 生成二分类数据集
X, y = make_classification(
n_samples=300, n_features=2, n_redundant=0,
n_clusters_per_class=1, random_state=42
)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)

# 3. 创建并训练逻辑回归模型
# C 是正则化强度的倒数(越小正则化越强)
lr = LogisticRegression(C=1.0, solver='lbfgs', random_state=42)
lr.fit(X_train, y_train)

# 4. 查看模型参数
print(f"截距 (bias): {lr.intercept_[0]:.4f}")
print(f"系数 (weights): {lr.coef_[0]}")
# 决策边界: w0*x0 + w1*x1 + b = 0

# 5. predict vs predict_proba
y_pred = lr.predict(X_test) # 硬分类 [0 或 1]
y_prob = lr.predict_proba(X_test) # 概率矩阵 [P0, P1]
print(f"\n前 5 个样本预测类别: {y_pred[:5]}")
print(f"前 5 个样本预测概率:\n{y_prob[:5]}")
# 当 P1 >= 0.5 时,预测为类别 1;否则为 0

# 6. sigmoid 函数的计算演示
def sigmoid(z):
"""Sigmoid 函数: 将任意实数映射到 [0,1]"""
return 1.0 / (1.0 + np.exp(-z))

# 计算决策函数值(线性部分)
z = np.dot(X_test, lr.coef_[0]) + lr.intercept_[0]
manual_prob = sigmoid(z)
# 验证手动计算的概率与 predict_proba 一致
print(f"手动计算概率 vs API 概率 (前 3 个):")
print(np.column_stack([manual_prob[:3], y_prob[:3, 1]]))

# 7. 准确率评估
accuracy = accuracy_score(y_test, y_pred)
print(f"\n测试集准确率: {accuracy:.4f}")

# 8. 多分类(OvR 和 multinomial)
# LogisticRegression 默认使用 multinomial(多项逻辑回归)
iris = load_iris()
X_iris, y_iris = iris.data[:, :2], iris.target # 只用前 2 个特征
X_train_i, X_test_i, y_train_i, y_test_i = train_test_split(
X_iris, y_iris, test_size=0.3, random_state=42
)

# 一对多策略 (OvR): 为每个类别训练一个二分类器
lr_ovr = LogisticRegression(multi_class='ovr', max_iter=1000)
lr_ovr.fit(X_train_i, y_train_i)
print(f"\n多分类 (OvR) 准确率: {lr_ovr.score(X_test_i, y_test_i):.4f}")

# 多项逻辑回归 (multinomial): 使用 softmax 函数
lr_multi = LogisticRegression(multi_class='multinomial', max_iter=1000)
lr_multi.fit(X_train_i, y_train_i)
print(f"多分类 (Multinomial) 准确率: {lr_multi.score(X_test_i, y_test_i):.4f}")

# 9. 混淆矩阵
cm = confusion_matrix(y_test_i, lr_multi.predict(X_test_i))
print(f"\n混淆矩阵:\n{cm}")
# 对角线是正确分类,非对角线是错误分类

# 10. 总结
# 逻辑回归关键点:
# - 使用 sigmoid 将线性输出转为概率
# - 默认阈值 0.5,可通过 predict_proba 自定义
# - 多分类支持 OvR 和 softmax (multinomial)
# - 参数 C 控制正则化强度,防止过拟合

http://www.gsyq.cn/news/1435556.html

相关文章:

  • Translumo:打破语言障碍的实时屏幕翻译解决方案
  • 湖北行以学文教育怎么样?靠谱吗?中央电教馆授权招生机构深度评测 ——从官方授权、课程体系、服务体验、拿证效率多维度评测帮你判断这家机构是否靠谱 - 教育官方推荐官
  • 2026合肥黄金回收靠谱商家推荐,三大上门回收平台对比回收价格对比 + 避坑指南 - 资讯纵览
  • 不定长滑动窗口篇--罗姆的刷题记录
  • Python状态机模式
  • Midjourney Edits API 集成指南
  • 2026铣边机/坡口机厂家推荐榜:平板/封头/法兰加工设备TOP3厂家专业+技术+避坑全解析 - 资讯纵览
  • 为什么你的Mac需要智能应用清理工具?Pearcleaner的完整解决方案
  • CAJ转PDF在线转换器免费2026年完整指南|手把手教你快速转换
  • 2026无锡黄金回收多少钱一克?靠谱商家推荐TOP3,全域免费上门秒到账 - 资讯纵览
  • Python特征工程基础
  • 青州抽沙船厂家哪家好 - 舒雯文化
  • 基于Arduino的智能植物浇水系统:自适应阈值灌溉与物联网实践
  • 一键删除Gemini账户?别信!真实流程需完成这6项强制验证,第4步90%用户忽略
  • 紧急!Gemini API调用量突增237%背后的3个隐蔽攻击指纹——附Python自动化检测脚本(限24小时免费领取)
  • 如何一键解密QQ音乐加密文件:QMCDecode音频格式转换实战指南
  • Android逆向工程终极指南:用Androguard轻松掌握APK分析技术
  • Python滑动窗口算法
  • FUXA实战:工业流程管道动画制作全流程指南
  • 2026手把手教你PDF转CSV!工具+在线方法全套教程
  • Windows 11优化神器:用Win11Debloat一键打造纯净高效系统
  • 终极指南:如何在Windows上优雅使用BiliBili-UWP第三方客户端
  • Altium Designer PCB设计全流程:从原理图到生产文件的实战指南
  • 如何高效构建现代化电子签名功能:Signature Pad专业开发指南
  • 基于RP2040 Pico的125Msps任意波形发生器:DMA与PIO硬件加速实战
  • 服务网格Istio实战与微服务治理
  • 从光敏电阻到物联网:手把手教你制作智能酒精消毒提醒器
  • 如何用.NET Windows Desktop Runtime轻松部署Windows桌面应用?终极解决方案来了!
  • 2026终极测评:16款降AIGC软件测评,闭眼入这款就对了! - 降AI小能手
  • Solon Server 启动模式深度解析:从 0.3MB 内核到 10+ Server 插件