news 2026/4/22 2:17:40

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/4/20 13:26:15

C#运行外部程序的两种方法

C#运行外部程序的两种方法 ShellExecute using System.Runtime.InteropServices;public enum ShowWindowCommands : int {SW_HIDE = 0,SW_SHOWNORMAL = 1, //用最近的大小和位置显示,激活SW_NORMAL = 1,SW_SHOWMINIMIZED = 2,SW_SHOWMAXIMIZED = 3,SW_MAXIMIZE = 3,SW_SH…

作者头像 李华
网站建设 2026/4/19 1:43:08

33、虚拟化技术:VMware Server 与 Ubuntu Enterprise Cloud 全解析

虚拟化技术:VMware Server 与 Ubuntu Enterprise Cloud 全解析 1. VMware Server 基础操作与功能 在使用 VMware Server 时,右侧主面板有“Commands”部分,这里有执行一系列操作的链接,还包含快照选项、添加硬件和配置虚拟机(VM)的选项。 1.1 VM 控制台访问 当开启一…

作者头像 李华
网站建设 2026/4/20 3:00:59

突破43%成功率!WebRL-GLM-4-9B开源模型颠覆网页自动化行业格局

突破43%成功率!WebRL-GLM-4-9B开源模型颠覆网页自动化行业格局 【免费下载链接】webrl-glm-4-9b 项目地址: https://ai.gitcode.com/zai-org/webrl-glm-4-9b 导语 你还在为网页代理任务成功率不足10%而烦恼吗?智谱AI最新发布的WebRL-GLM-4-9B模…

作者头像 李华
网站建设 2026/4/17 19:40:42

AI_用户增长引擎升级的前端落地全指南

AI当“增长军师”:用户增长引擎升级的前端落地全指南(小白版) 你有没有过这种体验: 打开某购物APP,首页正好是你最近想买的露营装备优惠;刚犹豫要不要下单,就弹出“新客首单减10元”的券&#x…

作者头像 李华
网站建设 2026/4/16 14:01:52

27、Unix 系统中的文档格式化与打印

Unix 系统中的文档格式化与打印 文档格式化系统 在处理小型简单的文本任务时,简单的文本格式化工具表现出色,但对于大型任务,Unix 系统提供了更强大的解决方案。Unix 能在技术和科学用户中流行起来,除了提供强大的多任务、多用户软件开发环境外,还在于它提供了可用于生成…

作者头像 李华
网站建设 2026/4/19 20:01:35

30、编写脚本与项目搭建入门指南

编写脚本与项目搭建入门指南 编写第一个脚本 在 Linux 系统中,编写一个简单的脚本是学习自动化任务的重要一步。让我们从一个经典的“Hello World!”脚本开始。 [me@linuxbox ~]$ echo Hello World! # This is a comment too Hello World!在这个示例中,我们使用 echo 命…

作者头像 李华