# Python逻辑回归分类# 逻辑回归虽然名字带回归实际是分类算法# 本质是用 sigmoid 函数将线性回归输出映射到 [0,1] 概率区间# 1. 导入库import numpy as npimport matplotlib.pyplot as pltfrom sklearn.datasets import make_classification, load_irisfrom sklearn.linear_model import LogisticRegressionfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import accuracy_score, confusion_matrix# 2. 生成二分类数据集X, y make_classification(n_samples300, n_features2, n_redundant0,n_clusters_per_class1, random_state42)X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)# 3. 创建并训练逻辑回归模型# C 是正则化强度的倒数越小正则化越强lr LogisticRegression(C1.0, solverlbfgs, random_state42)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_probay_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_size0.3, random_state42)# 一对多策略 (OvR): 为每个类别训练一个二分类器lr_ovr LogisticRegression(multi_classovr, max_iter1000)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_classmultinomial, max_iter1000)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 控制正则化强度防止过拟合
Python逻辑回归分类
发布时间:2026/5/31 17:41:21
# Python逻辑回归分类# 逻辑回归虽然名字带回归实际是分类算法# 本质是用 sigmoid 函数将线性回归输出映射到 [0,1] 概率区间# 1. 导入库import numpy as npimport matplotlib.pyplot as pltfrom sklearn.datasets import make_classification, load_irisfrom sklearn.linear_model import LogisticRegressionfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import accuracy_score, confusion_matrix# 2. 生成二分类数据集X, y make_classification(n_samples300, n_features2, n_redundant0,n_clusters_per_class1, random_state42)X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)# 3. 创建并训练逻辑回归模型# C 是正则化强度的倒数越小正则化越强lr LogisticRegression(C1.0, solverlbfgs, random_state42)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_probay_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_size0.3, random_state42)# 一对多策略 (OvR): 为每个类别训练一个二分类器lr_ovr LogisticRegression(multi_classovr, max_iter1000)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_classmultinomial, max_iter1000)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 控制正则化强度防止过拟合