• 机器学习——Logistic Regression


    0、前言:

    • Logistic回归是解决分类问题的一种重要的机器学习算法模型。
    • 本文更多从应用层面说明如何使用该模型,原理部分浅尝辄止。
    • Logistic回归在应用中可能会出现关于max_iter:最大迭代次数的警告,就要根据警告调整参数。

    1、基本原理:

    • Logistic Regression 首先是针对二分类任务提出的一种分类方法
    • 如果将概率看成一个数值属性,则二元分类问题的概率预测就可以转化为一个回归问题。这种思路最简单的实现就是直接采用特征组的回归模型来预测概率,但是回归模型的预测结果无法控制在[0,1]之间。这时Sigmoid函数就派上用场了。
      在这里插入图片描述
    • Logistic Regression 算法
      输入:m条训练数据
      输出:是逻辑回归函数的对数损失函数,目的是使损失函数的值最小(将分类问题转换为了回归问题)
      目标函数:称为交叉熵,目标就是使交叉熵最下,这样就可以使损失函数的值最小

    2、用Logistic模型做手写数字识别:

    • 代码
    # 导入三件套
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    
    # 导入手写数字数据集
    from sklearn.datasets import load_digits
    
    Data = load_digits()
    # 拿数据
    data = Data['data']
    target = Data['target']
    target_names = Data['target_names']
    feature_names = Data['feature_names']
    images = Data['images']
    
    # 划分数据集
    from sklearn.model_selection import train_test_split
    
    x_train, x_test, y_train, y_test = train_test_split(data,target,test_size=0.2)
    display(x_train.shape,y_train.shape,x_test.shape,y_test.shape)
    '''
    (1437, 64)
    (1437,)
    (360, 64)
    (360,)
    '''
    
    # 导入机器学习模型
    from sklearn.linear_model import LogisticRegression
    
    '''逻辑回归模型参数说明
    1、penalty选择l2正则,默认就是l2
    2、C=1.0,默认是1.0(惩罚因子,越大越严格,可能导致过拟合,太小又可能欠拟合)
    3、solver:优化算法,有{'newton-cg','libfgs','liblinear','sag','saga'},默认libfgs
        newton-cg、libfgs:适用中数据集
        sag、saga:适用大量数据集(>10万),采用部分样本进行梯度下降,随机平均梯度下降,不适合%%sh数据集
        liblinear:一般适用小数据集,适用的是liblinear库
        后面会使用自动调参,会自动选择适合的优化算法
    4、max_iter:最大迭代次数,默认100,如果不够会警告,就要根据警告不断调节,注意只有{'sag','libfgs','newton-cg'}才会使用该参数
    5、n_jobs:多进程处理,一般设置为CPU数量的1-2倍(电脑win+r,输入msinfo32查看cpu)
    ''' 
    # Lg = LogisticRegression(
    #     solver = 'lbfgs',
    #     max_iter = 2500
    # )
    Lg = LogisticRegression(solver='liblinear')
    %timeit Lg.fit(x_train,y_train)  # 149 ms ± 3.58 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
    
    # 测试数据得分
    Lg.score(x_test,y_test) # 0.9611111111111111
    # 模型得分
    Lg.score(x_train,y_train) # 0.9937369519832986
    
    # 对比KNN模型
    from sklearn.neighbors import KNeighborsClassifier
    
    knn = KNeighborsClassifier()
    %timeit knn.fit(x_train, y_train) # 590 µs ± 17.5 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)
    
    # 计算测试集得分
    knn.score(x_test,y_test) # 0.9833333333333333
    # 计算模型得分
    knn.score(x_train,y_train) # 0.9916492693110647
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65

    3、总结:

    • 在使用Logistic模型时,要根据数据集大小调整模型优化算法。
    • 通过实验发现,Logistic回归算法训练时间比KNN要长,但是预测时间要比KNN短。

  • 相关阅读:
    Flume大白话(●—●)
    Webpack 和 Vite 的区别
    牛客网刷题训练(三)
    Mac系统国内通过nvm快速安装node
    闲鱼垃圾评论检测2019CIKM《Spam Review Detection with Graph Convolutional Networks》
    ESP8266-Arduino网络编程实例-HightCharts实时图表显示BME280数据
    oracle 杀掉正在“执行”的SQL
    企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图
    使用GSAP制作动画视频
    深度解读UUID:结构、原理以及生成机制
  • 原文地址:https://blog.csdn.net/sz1125218970/article/details/132752582