当前位置: 首页 > 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.cnnetsun.cn/news/2677364.html

相关文章:

  • CentOS 8停服后,yum报错‘No URLs in mirrorlist’的三种修复方案(附一键脚本)
  • 如何一键解密QQ音乐加密文件:QMCDecode音频格式转换实战指南
  • Go语言职业发展:技能图谱
  • 【限时解密】Gemini中国区特供版公关方案(含工信部沟通纪要摘要与央视专访应答红线)
  • 2006-2025年《中国第三产业统计年鉴》Excel+PDF版集合
  • 【Gemini欺诈识别系统合规生死线】:GDPR+《反电信网络诈骗法》双框架下6类数据使用红线与审计通关清单
  • 5分钟打造你的专属微信智能助手:Python微信机器人完全指南
  • 3步快速上手跨平台资源下载神器:新手也能轻松获取无水印视频音频
  • Arduino tone()函数驱动扬声器播放音乐:从Tinkercad仿真到实体电路实战
  • KMS智能激活工具:如何5分钟内完成Windows和Office永久激活
  • Zotero Style:基于TypeScript的文献管理可视化增强架构
  • Gemini中文多轮对话断连问题:92%用户未察觉的上下文丢失陷阱,3行代码修复方案已验证上线
  • 3步轻松下载国家智慧教育平台电子课本:tchMaterial-parser高效解析工具完整指南
  • 基于Arduino与Blynk的智能物联网南瓜灯制作全攻略
  • 如何用自然语言指令掌控AI图像视角:Qwen-Edit-2509多角度LoRA完全指南
  • Jina Reader API内容抓取稳定性架构优化与工程实践
  • WebLaTeX:5分钟打造专业LaTeX写作环境的终极指南
  • 【限时开放】Gemini短信文案合规性诊断系统(v2.3):输入文案秒出工信部《通信短信息服务管理规定》第14条匹配度评分
  • 【大白话说Java面试题 第86题】【Mysql篇】第16题:MySQL 中锁的种类与行锁实现原理?
  • 基于Arduino与WS2812B的DIY动画时钟:从硬件搭建到软件架构全解析
  • GNSS-INS-SIM:开源GNSS惯性导航仿真工具快速入门指南
  • BthPS3:让Windows蓝牙完美支持PS3控制器的终极解决方案
  • Unbound:Z世代如何用区块链与AI原生融合重塑未来
  • 深度解析Fast-GitHub:300%速度提升的智能路由加速技术实现原理
  • AI视频生成落地困局与破局之道(工业级实践白皮书首发):覆盖电商、教育、影视三大高价值场景
  • 为什么你的Gemini通知打开率不足12%?谷歌内部SRE文档流出的6类设备兼容性黑洞与实时兜底策略
  • 基于Arduino与超声波传感器的手势识别游戏机设计与实现
  • 【Gemini内容日历规划黄金法则】:20年AI运营专家亲授7步闭环工作流,错过再等365天
  • novel-downloader:终极跨站点小说下载器深度实战指南
  • ROS2多机通讯实战:当WiFi局域网遇上虚拟机,如何用集中式发现协议绕过UDP组播限制?