news 2026/3/10 14:18:55

sklearn函数总结八—线性模型 逻辑回归

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
sklearn函数总结八—线性模型 逻辑回归

纯手打,代码整理中,持续更新中^-^

序号延用总结七

15、线性模型 逻辑回归

15.1 定义

线性模型用于分类的核心思想非常直观:试图找到一个线性决策边界(在特征空间中是一条直线、一个平面或一个超平面),将不同类别的数据点分开。

对于二分类问题,模型学习的是:

  • x[0] 到 x[p] 表示样本的 p 个特征。

  • w[0] 到 w[p] 是模型学习到的权重系数(Coefficients),体现了每个特征对决策的重要性。

  • b 是截距(Intercept),也叫偏置

  • 如果这个线性函数的结果大于 0,样本被预测为类别 A;否则被预测为类别 B。

这个决策边界就是函数y=0 所代表的那个超平面

那么如何将线性输出转换为概率?

虽然决策是线性的,但我们可以通过一个链接函数(如 Sigmoid 函数)将线性输出映射到 [0, 1] 区间,解释为样本属于某个类别的概率。这就是逻辑回归的做法。

先直接看一段代码,然后再详细讲下参数

15.2 代码示例

主要流程就是: 标准化 + 正确的数据划分 + 全面评估

from sklearn.datasets import load_iris from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score, classification_report from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler # 1, 加载数据 iris = load_iris() X = iris.data # 特征矩阵(150个样本,4个特征:萼长、萼宽、瓣长、瓣宽) y = iris.target # 特征值 目标向量(3类鸢尾花:0,1,2) # 2, 数据预处理 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) # 划分训练集和测试集 scaler = StandardScaler() # 数据标准化:消除不同特征量纲的影响 # 这里fit_transform是在训练集上“学习”并“转换” # 然後得到scaler.mean_ 训练集的均值和scaler.scale_ 标准差 X_train_scaled = scaler.fit_transform(X_train) # fit计算生成模型,transform通过模型转换数据 X_test_scaled = scaler.transform(X_test) # 使用训练集的参数转换测试集 # 3, 创建和训练 LogisticRegression 模型 model = LogisticRegression() model.fit(X_train_scaled, y_train) # 使用训练数据拟合(训练)模型 # 4, 进行预测并评估模型 y_pred = model.predict(X_test_scaled) # 在测试集上进行预测 print('模型预测值:', y_pred) print('正确值 :', y_test) accuracy = accuracy_score(y_test, y_pred) # 计算准确率 print(f'测试集准确率:{accuracy:.2f}') print('分类报告:\n', classification_report(y_test, y_pred, target_names=iris.target_names))

结果输出:

15.3 详细参数

上面代码中,LogisticRegression 是 scikit-learn 中用于执行逻辑回归的分类器,适用于二分类和多分类任务。

LogisticRegression(penalty='l2', *, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='lbfgs', max_iter=100, multi_class='auto', verbose=0, warm_start=False, n_jobs=None, l1_ratio=None)
  1. 正则化参数

penalty (默认='l2')

  • 正则化类型,用于防止过拟合

  • 可选值: 'l1', 'l2', 'elasticnet', 'none'

  • 'l1' (Lasso): 产生稀疏模型,可用于特征选择

  • 'l2' (Ridge): 默认值,使所有特征系数变小但不为零

  • 'elasticnet': L1和L2的混合

  • 'none': 无正则化

C (默认=1.0)

  • 正则化强度的倒数

  • 必须是正浮点数

  • 值越小,正则化越强

l1_ratio (默认=None)

  • 仅当 penalty='elasticnet' 时使用

  • 控制L1和L2正则化的混合比例(0到1之间)

  • 0表示纯L2,1表示纯L1


求解器参数

solver (默认='lbfgs')

  • 优化算法

  • 可选值: 'newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'

  • 不同求解器支持不同的正则化类型:

    • 'liblinear': 支持L1和L2

    • 'saga': 支持所有正则化类型

    • 其他: 主要支持L2或无正则化

max_iter (默认=100)

  • 求解器收敛的最大迭代次数

  • 对于大型数据集可能需要增加此值

tol (默认=1e-4)

  • 优化的容忍度/停止阈值

  • 当损失函数变化小于此值时停止迭代


多分类参数

multi_class (默认='auto')

  • 多分类策略

  • 可选值: 'auto', 'ovr', 'multinomial'

  • 'ovr' (one-vs-rest): 为每个类别训练一个二分类器

  • 'multinomial': 直接多分类,使用softmax函数

  • 'auto': 自动选择


类别权重参数

class_weight (默认=None)

  • 处理类别不平衡

  • 可选值: None, 'balanced', 或字典 {class_label: weight}

  • 'balanced': 自动调整权重与类别频率成反比


其他重要参数

random_state (默认=None)

  • 随机数种子,用于 reproducible results

  • 当solver为'sag', 'saga'或'liblinear'时使用

fit_intercept (默认=True)

  • 是否拟合截距项(偏置项)

n_jobs (默认=None)

  • 用于计算的CPU核心数

  • -1表示使用所有可用的核心

verbose (默认=0)

  • 输出详细程度

  • 值越大,输出信息越详细

warm_start (默认=False)

  • 是否使用前一次拟合的结果作为初始化

15.4 分类的线性模型

sklearn.linear_model中,最常用的分类线性模型是:

LogisticRegression(逻辑回归)

  • 原理:虽然名字带“回归”,但它是经典的分类算法。它使用 Sigmoid 函数将线性模型的输出转换为概率值(0 到 1 之间)。

  • 损失函数:通常使用对数损失(Log Loss)或交叉熵损失(Cross-Entropy Loss)来优化模型参数。

  • 特点:

    • 输出有概率意义,可以知道分类的置信度。

    • 可解释性强,权重系数的大小和正负代表了特征的影响方向和程度。

    • 可以通过 penalty 参数施加 L1 或 L2 正则化以防止过拟合。

示例

from sklearn.datasets import load_iris from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.metrics import accuracy_score # 加载数据 X, y = load_iris(return_X_y=True) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 标准化(推荐,尤其使用 L2 正则时) scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) # 创建并训练模型 model = LogisticRegression( penalty='l2', # 正则化类型 C=1.0, # 正则强度(越小正则越强) solver='lbfgs', # 优化器(自动支持多分类) max_iter=200, # 最大迭代次数 random_state=42 ) model.fit(X_train_scaled, y_train) # 预测 y_pred = model.predict(X_test_scaled) y_proba = model.predict_proba(X_test_scaled) # 获取概率 print("准确率:", accuracy_score(y_test, y_pred)) print("预测概率(前3个样本):\n", y_proba[:3])

输出:


SGDClassifier(随机梯度下降分类器)

  • 原理:这是一个通用的线性分类器,它使用随机梯度下降(Stochastic Gradient Descent)来最小化不同的损失函数。

  • 灵活性:通过设置 loss 参数,它可以模拟其他线性模型:

    • loss='log_loss':等价于逻辑回归。

    • loss='hinge':等价于线性支持向量机(SVM)。

    • loss='perceptron':等价于感知机。

  • 特点:

    • 非常适合大规模数据集,因为它是增量式学习的,每次只用一个或一小批样本更新模型。

    • 效率高,但需要仔细调参(如学习率)。

示例

from sklearn.linear_model import SGDClassifier # 注意:SGD 对特征尺度敏感,必须标准化! scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) # 创建 SGD 分类器(设置 loss='log_loss' 等价于逻辑回归) sgd_model = SGDClassifier( loss='log_loss', # ← 关键!指定为逻辑回归 penalty='l2', # 正则化 alpha=1e-4, # 正则强度(注意:SGD 用 alpha,不是 C) learning_rate='optimal', max_iter=1000, tol=1e-3, random_state=42 ) sgd_model.fit(X_train_scaled, y_train) # 预测 y_pred_sgd = sgd_model.predict(X_test_scaled) y_proba_sgd = sgd_model.predict_proba(X_test_scaled) print("SGD 准确率:", accuracy_score(y_test, y_pred_sgd))

输出

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/1 13:59:06

35、RAID 系统迁移与管理全攻略

RAID 系统迁移与管理全攻略 1. RAID 基础管理 在 RAID 系统中,如果需要更换磁盘,可按以下步骤操作: - 用新磁盘替换旧磁盘,并对新磁盘进行分区。要确保新分区的大小等于或大于 RAID 阵列中其他分区。 - 新分区准备好后,使用 --add 命令将其添加到阵列: $ sudo md…

作者头像 李华
网站建设 2026/3/9 13:49:28

37、构建高可用Linux集群:Heartbeat实战指南

构建高可用Linux集群:Heartbeat实战指南 在服务器运行过程中,即使主机配备了RAID和以太网绑定,仍有许多组件可能出现故障,从CPU到主机上的软件都有可能。若要确保服务在主机故障时仍能正常运行,就需要构建集群。本文将介绍基本Linux集群中常用的工具Heartbeat,并详细说明…

作者头像 李华
网站建设 2026/3/3 7:40:42

38、构建高可用集群:Heartbeat与DRBD实战指南

构建高可用集群:Heartbeat与DRBD实战指南 1. 集群准备与Heartbeat简介 在集群搭建过程中,当完成故障转移(fail back)相关操作后,集群就可以进行剩余的测试,适当调整超时设置,随后便可投入实际使用。之前的示例为搭建自己的集群服务提供了一个良好的开端,但它并未涵盖…

作者头像 李华
网站建设 2026/3/6 17:13:26

46、Linux 实用命令与技巧大揭秘

Linux 实用命令与技巧大揭秘 在 Linux 系统的使用过程中,掌握一些实用的命令和技巧能让我们的工作更加高效。下面将为大家详细介绍一系列实用的 Linux 命令及操作方法。 命令路径快捷查找 有时候,我们想查看二进制路径下的某个 shell 脚本,但却记不清它具体位于 /bin 、…

作者头像 李华
网站建设 2026/3/2 1:25:30

25、Ubuntu 网络应用全攻略

Ubuntu 网络应用全攻略 1. Firefox 浏览器使用技巧 Firefox 支持标签式窗口,提供了多种打开新标签的方式: - 点击“New Tab”按钮(现有标签右侧的“+”符号)。 - 按住“Ctrl”键并点击链接,可在新标签中打开。 - 按下“Ctrl - T”组合键。 - 若鼠标有中键,有时点击…

作者头像 李华
网站建设 2026/3/8 15:27:08

26、开启Ubuntu系统下OpenOffice.org的高效办公之旅

开启Ubuntu系统下OpenOffice.org的高效办公之旅 在Ubuntu系统中,我们可以借助网络完成许多操作。若想使用的程序或功能未被提及,可通过Synaptic软件包管理器或Ubuntu软件中心进行搜索,大概率能找到所需的程序或具有类似功能的替代程序。 而开源软件强大功能与能力的一个绝…

作者头像 李华