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

Scikit-learn Python机器学习 - 分类算法 - 线性模型 逻辑回归

锋哥原创的Scikit-learn Python机器学习视频教程:

https://www.bilibili.com/video/BV11reUzEEPH

课程介绍

本课程主要讲解基于Scikit-learn的Python机器学习知识,包括机器学习概述,特征工程(数据集,特征抽取,特征预处理,特征降维等),分类算法(K-临近算法,朴素贝叶斯算法,决策树等),回归与聚类算法(线性回归,欠拟合,逻辑回归与二分类,K-means算法)等。

Scikit-learn Python机器学习 - 分类算法 - 线性模型 逻辑回归

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

对于二分类问题,模型学习的是: y = w[0]*x[0] + w[1]*x[1] + ... + w[p]*x[p] + b > 0

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

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

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

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

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

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

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

  1. LogisticRegression (逻辑回归)

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

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

    • 特点

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

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

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

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

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

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

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

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

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

    • 特点

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

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

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

  1. 求解器参数

solver (默认='lbfgs')

  • 优化算法

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

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

    • 'liblinear': 支持L1和L2

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

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

max_iter (默认=100)

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

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

tol (默认=1e-4)

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

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

  1. 多分类参数

multi_class (默认='auto')

  • 多分类策略

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

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

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

  • 'auto': 自动选择

  1. 类别权重参数

class_weight (默认=None)

  • 处理类别不平衡

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

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

  1. 其他重要参数

random_state (默认=None)

  • 随机数种子,用于 reproducible results

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

fit_intercept (默认=True)

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

n_jobs (默认=None)

  • 用于计算的CPU核心数

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

verbose (默认=0)

  • 输出详细程度

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

warm_start (默认=False)

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

我们来看一个示例:

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()  # 数据标准化:消除不同特征量纲的影响
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))

运行输出:

模型预测值: [2 0 0 1 0 0 1 1 2 1 1 2 1 0 2 1 1 2 1 0 0 0 2 1 1 1 1 0 1 0]
正确值   : [2 0 0 1 0 0 1 1 2 1 1 2 1 0 2 2 1 2 1 0 0 0 2 1 1 1 1 0 1 0]
测试集准确率:0.97
分类报告:precision    recall  f1-score   support
​setosa       1.00      1.00      1.00        10versicolor       0.93      1.00      0.96        13virginica       1.00      0.86      0.92         7
​accuracy                           0.97        30macro avg       0.98      0.95      0.96        30
weighted avg       0.97      0.97      0.97        30

文章转载自:

http://D4PFYAAI.wkrkb.cn
http://gUZa32Da.wkrkb.cn
http://1H6nkwPH.wkrkb.cn
http://R0iEkkOw.wkrkb.cn
http://CbNmb8yt.wkrkb.cn
http://pfn1TcPS.wkrkb.cn
http://gnx3DiR4.wkrkb.cn
http://nhg1vPhJ.wkrkb.cn
http://tuanDu4G.wkrkb.cn
http://WvnhgjeR.wkrkb.cn
http://RQhXmnTJ.wkrkb.cn
http://7VlyZEti.wkrkb.cn
http://LOK0zYAI.wkrkb.cn
http://bvE5in7M.wkrkb.cn
http://CuoKYEYi.wkrkb.cn
http://LMHqfw2T.wkrkb.cn
http://r5z7iCYF.wkrkb.cn
http://Dzz3UkVQ.wkrkb.cn
http://1OIrUczI.wkrkb.cn
http://jaAkHNuG.wkrkb.cn
http://gUdkDO1l.wkrkb.cn
http://z3SCSiNn.wkrkb.cn
http://ZlTwE5eU.wkrkb.cn
http://ZuZsNkj7.wkrkb.cn
http://Kz1eMXP4.wkrkb.cn
http://BEWmLxDz.wkrkb.cn
http://KJPSkf0B.wkrkb.cn
http://SDABtmOX.wkrkb.cn
http://tAtzhObf.wkrkb.cn
http://XU6vcMuh.wkrkb.cn
http://www.dtcms.com/a/376577.html

相关文章:

  • SciKit-Learn 全面分析 digits 手写数据集
  • 《sklearn机器学习——数据预处理》标准化或均值去除和方差缩放
  • 保序回归Isotonic Regression的sklearn实现案例
  • 《sklearn机器学习——数据预处理》离散化
  • 无人机桨叶转速技术要点与突破
  • GPFS存储服务如何使用及运维
  • ELK 日志采集与解析实战
  • BI数据可视化:驱动数据价值释放的关键引擎
  • FinChat-金融领域的ChatGPT
  • OpenTenBase日常操作锦囊(新手上路DML)
  • Dart 中的 Event Loop(事件循环)
  • C++/Java编程小论——方法设计与接口原则总结
  • Java-Spring入门指南(四)深入IOC本质与依赖注入(DI)实战
  • 线扫相机采集图像起始位置不正确原因总结
  • JVM 对象创建的核心流程!
  • 秋日私语:一片落叶,一个智能的温暖陪伴
  • springCloud之配置/注册中心及服务发现Nacos
  • 第1讲 机器学习(ML)教程
  • Ubuntu 系统 YOLOv8 部署教程(GPU CPU 一键安装)
  • 【C++】string 的使用(初步会用 string,看这一篇文章就够了)
  • 基于 lua_shared_dict 的本地内存限流实现
  • 基于场景的自动驾驶汽车技术安全需求制定方法
  • 【lucene】pointDimensionCount` vs `pointIndexDimensionCount`:
  • 大语言模型入门指南:从原理到实践应用
  • 旧设备新智慧:耐达讯自动化RS232转Profibus连接流量泵工业4.0通关秘籍
  • 扭蛋机小程序有哪些好玩的创新功能?
  • 小程序非主页面的数据动作关联主页面的数据刷新操作
  • 软件测试从项目立项到最终上线部署测试人员参与需要做哪些工作,输出哪些文档
  • 开源AI智能名片链动2+1模式S2B2C商城小程序在淘宝公域流量运营中的应用研究
  • 【好靶场】SQLMap靶场攻防绕过 (一)