• 基于Python实现并对比线性分类器与非线性分类器


    目录
    机器学习与数据挖掘第一次实验报告 1
    实现并对比线性分类器与非线性分类器 1
    目 1
    录 2
    一、分类器简述 2
    一 、分类器简述 2
    1.1 线性分类器 2
    1.3 随机梯度下降 3
    1.4 梯度推导 4
    1.5 基于基函数的非线性分类器 5
    1.6 过拟合与正则化 5
    二 、分类器实现 5
    2.1 线性分类器 5
    2.2 非线性分类器 6
    三 、数据集描述 7
    3.1 Dry Bean 数据集 7
    3.2 葡萄酒数据集 7
    3.3 肥胖症数据集 7
    3.4 数据降维可视化 8
    四 、实验结果分析 8
    4.1 交叉验证学习率 8
    线性分类器: 8
    4.1 交叉验证正则化系数 11
    线性分类器: 11
    4.3 分类器交叉验证 13
    4.4 权重可视化与损失函数变化 14
    0.4左右。 15
    4.5 正确率测试 18
    4.6 精准度和召回率测试 20
    五 、结论 23
    实验结果:
    由于 RedWine 数据集的数据集中在 类别 5 6 7,而在类别 1 2 3 8 9 完全没有样本,类别 3 4 的样本非常少,导致精确率和召回率不稳定。
    对于线性分类器,类别 3 4 的精确率和召回率都为 0 即该分类器完全无法划分出这些类别的数据, 而使用非线性分类器,对识别这些样本稀缺的类别有好处。例如五阶非线性分类器,在训练集中, 对类别 3 4 就有较高的精确率,即预测为 3 4类别的样本基本是正确的,但召回率还是很低,即还
    有大量的类别 3 4 的样本被分到了其他的类别。
    类别 3 4 测试集的准确率和召回率为 0,很大程度是因为样本过少。
    五 、结论
    实验实现了Softmax线性分类器和基于基函数的非线性分类器,对于非线性分类器,我们选择了三阶非 线性和五阶非线性来进行实验,并对三个数据集 DryBean、RedWine、Obesity进行了各个方面的测试,得到以下结论:
    1.通过 t-sne 初步处理数据,我们发现在所有数据集中, DryBean 的同类别聚集和不同类别分散的程度最高,RedWine 最低。
    2.通过对学习率进行交叉验证,我们发现对于上述数据集,线性分类器学习率在1.5 ~ 2 时,验证机预测正确率最高,效果最好。
    3.通过对正则化方法和正则化系数进行交叉验证,我们发现不论是L1正则化还是L2正则化,只有在正 则化系数比较小(1e-4 ~ 1e-5)时,正则化才能可能改善验证集预测正确率,并且改善的幅度比较小。除此之外,本文转载自http://www.biyezuopin.vip/onews.asp?id=16712我们发现L2正则化对正则化系数更加敏感,当学习率为1e-3时,验证集正确率就有 明显的下降。
    4.对比线性分类器、不含正则化的三阶非线性分类器、不含正则化的五阶非线性分类器、含L1正则化 的三阶非线性分类器、含L2 正则化的三阶非线性分类器、含L1正则化的五阶非线性分类器、含L2 正则化的五阶非线性分类器:

    1.对不同的数据集而言,最佳的模型不同:对于 DryBean 数据集,五阶非线性分类器表现最好;对于 Obesity 数据集,三阶非线性分类器表现最好;对于 RedWine 数据集,线性分类器表现最好;
    2.使用L1的正则化效果略优于L2正则化,在正则化系数合适的情况下,使用正则化效果能够提 高分类器的分类效果。
    3.通过观察损失函数变化和预测正确率变化,我们发现高阶非线性模型收敛快,但波动大。
    5.经过测试,DryBean 数据集的训练准确率和测试准确率都在 90% 以上,使用三阶非线性模型分类器, DryBean 的分类正确率能到达92%,Obesity 数据集的训练准确率和测试准确率都在 80% 左右,RedWine 数据集的训练准确率和测试准确率都在 60% 左右。
    6.通过精确率和召回率测试,我们发现分类的效果和大程度上受数据集本身的影响,样本分类不均匀 的数据集,如RedWine,分类效果就偏差。

    from test_utils import *
    from Classifiers.softmax_classifier import SoftmaxLinearClassifier
    from Classifiers.softmax_classifier import SoftmaxNonlinearClassifier
    from Classifiers.kernel import *
    
    
    if __name__ == "__main__":
    
        # 载入数据集
        # X, y, attrs, classes = load_red_wine_quality()
        # X, y, attrs, classes = load_white_wine_quality()
        # X, y, attrs, classes = load_obesity()
        X, y, attrs, classes = load_drybean()
    
        # 数据降维可视化
        # t_sne(X, y, classes)
    
        # 交叉验证
        # learning_rate_cross_validition(X, y, ite_num=2000, batch_size=500)
        # normalization_cross_validition(X, y, ite_num=2000, batch_size=500)
        # learning_rate_cross_validition(X, y, ite_num=2000, batch_size=500, nonlinear_kernel=x_3_kernel)
        # normalization_cross_validition(X, y, ite_num=2000, batch_size=500, nonlinear_kernel=x_3_kernel)
        # learning_rate_cross_validition(X, y, ite_num=2000, batch_size=500, nonlinear_kernel=x_5_kernel)
        # normalization_cross_validition(X, y, ite_num=2000, batch_size=500, nonlinear_kernel=x_5_kernel)
    
        softmax_validition(X, y, ite_num=2000, batch_size=500, reg_style="L0")
        softmax_validition(X, y, ite_num=2000, batch_size=500, reg_style="L1")
        softmax_validition(X, y, ite_num=2000, batch_size=500, reg_style="L2")
    
        # 计算生成权重矩阵
        # softmax = SoftmaxNonlinearClassifier(x_5_kernel)
        # gen_w_loss(X, y, attrs, classes, softmax)
    
        kernel = [None, x_3_kernel, x_5_kernel]
        reg_style = ["L0", "L1", "L2"]
    
        # 测试准确率
        # for k in kernel:
        #     for r in reg_style:
        #         softmax = SoftmaxNonlinearClassifier(kernel_function=k)
        #         test_acc(X, y, softmax,ite_num=500, reg_style=r, reg_strength=1e-4)
    
        # 测试 Precision、Recall
        # for k in kernel:
        #     softmax = SoftmaxNonlinearClassifier(kernel_function=k)
        #     test_pre_rec(X, y, attrs, classes, softmax)
    
    • 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

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    反射机制(Reflection)
    filp_open
    1. 深度学习——激活函数
    图像处理之matlab中meshgrid函数用法详解
    ISAC通信感知一体化学习记录
    【JavaScript】DOM对象&JS事件总结&全局函数
    深入浅出Viterbi算法与python实现
    Java基础之《netty(5)—NIO之Selector》
    6.4 Web安全漏洞学习平台:WebGoat的使用
    节约软件开发成本,关键在这儿。
  • 原文地址:https://blog.csdn.net/newlw/article/details/126802935