第23周:机器学习及文献阅读

news2025/1/15 22:53:40

目录

摘要

Abstract

一、理论知识

1、逻辑提升

2、分类任务 

3、10倍交叉验证法 

二、文献阅读

1、模型方法——MLT

(1)特征选择

(2)决策树剪枝

2、分类任务——逻辑回归

3、实验部分

数据集的选取 

代码实践

模型评估

实验结果 

总结


摘要

本周围绕着逻辑回归和决策树阅读了一篇论文,主要是一种用于提高多类多标签分类任务精确度的算法,它结合了决策树作为分类器,采用逻辑回归模型实现多分类的任务。回顾复习了逻辑回归的相关知识,还学习了相关的机器学习的理论知识。然后对原论文种给出的数据集进行收集,以及源代码进行逐行分析。 最后经过与其他算法进行横向比较以及与不同数据集的应用进行纵向比较,得到了MMTML显著优势的结论。

Abstract

一、理论知识

1、逻辑提升

逻辑提升logisticboost:结合逻辑回归和提升方法,通过迭代地训练多个弱分类器并组合它们的预测来提高分类性能。 

2、分类任务 

单标签分类

每个实例(或样本)只与一个标签相关联。这意味着每个数据点只能属于一个类别。 比如垃圾邮件检测、手写数字识别

多标签分类

每个实例可以与多个标签相关联。这意味着每个数据点可以同时属于多个类别。比如文本tag分类、 图像处理

多类多标签分类 

每个实例可以与多个标签相关联,但这些标签属于不同的类别。这意味着每个数据点可以同时属于多个类别,每个类别可以有多个标签。比如复杂的文本分类(一篇文章属于多个类别中的多个tag) 

3、10倍交叉验证法 

是一种常用的模型验证技术,用于评估机器学习模型的性能。它通过将数据集分成10个子集(或“折”)来实现,每个子集轮流作为测试集,而剩余的9个子集作为训练集。 

二、文献阅读

目的:提高多个类和标签的多分类任务的准确度

方法:结合逻辑回归和决策树 

为每个数据集构建一个logistic模型树,得到p个不同的树对应于p个目标属性。然后将这些树聚合起来,形成最终的预测模型

LMT算法将逻辑回归与决策树原则集成,形成了一个灵活的树结构,能够很好地适应各种数据类型

MMLMT方法特别适合于标签数量相对适中的场景。

1、模型方法——MLT

逻辑模型树

决策树:从给定的训练数据集中,依据特征选择的准则,递归的选择最优划分特征,并根据此特征将训练数据进行分割,使得各子数据集有一个最好的分类的过程。

(1)特征选择

信息增益ID3:划分数据集的之前之后信息发生的变化,也就是数据集内特征混乱程度得变化

 计算每个特征值划分数据集获得的信息增益,获取信息增益最高的特征就是最好的选择

信息可以用熵来表示, 交叉熵应用在数据集D_{v}中,其中D_{vk}表示D_{v}中分类为k的样本,信息熵的计算公式如下:

由此我们就可以根据信息熵计算信息增益:

 

也就是说,决策树最终的目的是分类分得越清晰明显越好,我们需要比较不同的特征,使得信息熵在相同特征下的分支处差值最大(信息增益)。最终选择信息增益最大额特征。

信息增益率C4.5: 仅仅采用信息增益来划分属性,就会导致当某一个属性的取值种类非常多时,对应每一个属性取值的样本子集,其分类的信息熵可能会变得很小。所以要平衡样本集数据的多少问题。

简单来说,就是在信息增益的基础上增加了惩罚机制 

 

 这个过程类似于对信息熵进行归一化,先从候选划分属性中找出 信息增益 高于 平均水平 的属性,再从中选择 增益率 最高的。

基尼指数CART:衡量数据的纯度或不确定性。基尼指数越小,代表纯度越高

 

(2)决策树剪枝

决策树过拟合的可能性很大,在训练集上面表现的效果当然很好,但在测试集上面的表现会很差,泛化能力很弱。 

预剪枝:在构造决策树的过程中,先对每个结点在划分前进行估计,如果当前结点的划分不能带来决策树模型泛化性的提升,则不对当前结点进行划分并且将当前结点标记为叶结点

发生在决策树的构建过程中。预剪枝就是设定一个阈值,只有在信息增益大于这个阈值的时候(也即是在分类后的信息混乱程度减小程度大于一定标准的时候)才进行分类。如果在信息增益过小的情况下,即使存在信息增益的现象,也不会对其进行分支。 

后剪枝:先把整颗决策树构造完毕,然后自底向上的对非叶结点进行考察,若将该结点对应的子树换为叶结点能够带来泛化性的提升,则把该子树替换为叶结点。

发生在决策树构建完成后。剪枝的过程是对拥有相同父节点的一组节点进行检查,如果将其合并,熵增小于某一阈值,那么这一组节点可以合并一个节点。如果将其合并后熵增大于这个阈值,那么说明将其分枝是合理的。 

数据集包含N各样例。将数据集划分为p各子数据集并且设定p个目标属性,k个特征(每个数据集都包含k个特征和一个目标属性)。这p个子数据集是作为单独训练的小数据集,应用于p个LMT(逻辑模型树) 进行分类任务;接着将分类的结果进行聚合和评估;最后形成预测模型。

2、分类任务——逻辑回归

逻辑回归主要是处理二分类的问题,也可以拓展为非线性的多分类问题的基础模型。具体实践见周报(22)CSDN 

也就是说,在完整的实验过程中,决策树承担了分类器的生成部分,多个决策树就能生成多个分类器,从而解决了多标签分类问题。接着, 多分类问题需要逻辑回归模型来解决,即为多个分类器作为逻辑回归的输入部分。最终的输出是多类多标签分类的结果向量。

3、实验部分

数据集的选取 

本研究利用8个真实世界的多类多标签数据集来展示所提出的MMLMT方法的功能。每个数据集——毒品消费、安然、黑客地球收养伙伴、音乐情感、场景、太阳爆发2、甲状腺l7和酵母。这些数据集包含了广泛的特征,范围从10到1001,实例从593到18,834不等,标签编号从2到53。它们起源于不同的领域,包括药物、文本、动物、音乐、图像、物理学、医疗保健和生物学。这些数据集包含分类值、数值值和混合类型的值,反映了它们的不同的性质和对不同的分析机器学习技术的适用性。 

代码实践

MMLMT方法 

public static PerformanceMeasure MMLMT(string f, int numLabels)   #执行多类多标签逻辑模型树分类,参数包含“数据文件名”和“目标属性的数量”
{
            int folds = 10;      //0折交叉验证

            PerformanceMeasure pm = new PerformanceMeasure();               
            double accuracy = 0;           
            double sensitivity = 0;            
            double PRC = 0; 

            for (int i = 0; i < numLabels; i++)  //循环每个目标属性
            {
                java.util.Random rand = new java.util.Random(1);   //设置随机种子
           
                weka.core.Instances insts = ReadInstances(new java.io.FileReader("datasets\\" + f));     //读取数据集文件
 
                for (int j =0; j < numLabels; j++)  //处理属性:删除多余的属性,保留单个目标属性
                {
                    if (j > i)
                       insts.deleteAttributeAt(1);
                    else if (j<i)
                       insts.deleteAttributeAt(0);
                }

                insts.setClassIndex(0);  //设置目标类属性的索引

                weka.classifiers.trees.LMT classifier = new weka.classifiers.trees.LMT();          //创建逻辑树模型分类器

                weka.classifiers.Evaluation eval = new weka.classifiers.Evaluation(insts);

                eval.crossValidateModel(classifier, insts, folds, rand);   //使用10叉折叠评估模型

                // 累加性能指标
                accuracy = accuracy + eval.pctCorrect();
                sensitivity = sensitivity + eval.weightedRecall();
                PRC = PRC + eval.weightedAreaUnderPRC();
            }
                 
            // 计算平均性能指标
            pm.Accuracy = Math.Round(accuracy / numLabels, 2);
            pm.Sensitivity = Math.Round(sensitivity / numLabels, 3);
            pm.PRC = Math.Round(PRC / numLabels, 3);
            return pm;
        }
  
        

ReadInstances 方法 

 public static weka.core.Instances ReadInstances(java.io.FileReader fr)  //从数据文件中读取实例,参数是文件读取器
{
    weka.core.Instances instances = new weka.core.Instances(fr);   //创建实例对象
    instances.setClassIndex(instances.numAttributes() - 1);     //设置类索引

    return instances;
}      

main方法

static void Main(string[] args)
        {
            string[] filenames = { "Drug-Consumption", "Enron", "HackerEarth-Adopt-A-Buddy", "Music-Emotions", "Scene", "Solar-Flare-2", "Thyroid-L7", "Yeast"  };  //各数据集文件的名字 
            int[] numLabels = { 18, 53, 2, 6, 6, 3, 7, 14 };   //目标属性的数量

            //打印表头
            Console.WriteLine("MMLMT \n");
            Console.WriteLine("Dataset                     Accuracy     Sensitivity     PRC");

           //计算每个数据集并且打印性能指标
            for (int i = 0; i < filenames.Length; i++)
            {
                Console.Write(filenames[i]);      
                PerformanceMeasure pm = MMLMT(filenames[i] + ".arff", numLabels[i]);
                Console.SetCursorPosition(28, i + 3);
                Console.WriteLine( pm.Accuracy + "\t    " + pm.Sensitivity + "\t " + pm.PRC);         
            }
            Console.ReadLine();
        }

以上这三段代码实现了一个多类多标签逻辑模型树分类器,使用 Weka 库中的逻辑模型树(LMT)分类器进行分类。它通过读取数据文件、处理属性、执行交叉验证和计算性能指标来完成分类任务。

用于存储和管理分类器的性能指标

namespace MMLMT
{
    class PerformanceMeasure
    {
        public double Accuracy { get; set; }
        public double Sensitivity { get; set; }
        public double PRC { get; set; }
    }
}

成员变量

static final long serialVersionUID = -1113212459618104943L;  //序列化
  
protected ReplaceMissingValues m_replaceMissing;   //替换缺失值的过滤器
    
protected NominalToBinary m_nominalToBinary;   //名义属性转换为二进制属性
     
protected LMTNode m_tree;  //逻辑模型树的根节点
    
protected boolean m_fastRegression;  //是否快速回归启发式方法

protected boolean m_convertNominal;  //是否将名义属性转换为二进制属性

protected boolean m_splitOnResiduals;   /是否基于残差进行分割
    
protected boolean m_errorOnProbabilities;   //是否在 LogitBoost 的停止准则中使用概率误差

protected int m_minNumInstances;   //节点可以分割的最小实例

protected int m_numBoostingIterations;   //LogitBoost 的固定迭代次数
    
protected double m_weightTrimBeta;   //用于 LogitBoost 的权重修剪阈值。
  
private boolean m_useAIC = false;  //是否使用 AIC 来选择最佳迭代
  

构造LMT函数

public LMT() {
  m_fastRegression = true;
  m_numBoostingIterations = -1;
  m_minNumInstances = 15;
  m_weightTrimBeta = 0;
  m_useAIC = false;
}

模型评估

在实验中,该篇论文使用了10倍交叉验证的方法来训练和评估分类模型。在评估步骤中,我们采用了一系列全面的标准指标来评估MMLMT方法在不同维度上的。包括准确性灵敏度精度召回曲线(PRC)区域。

该篇论文的8个数据集分别采用了8种多标签分类的算法进行训练,最终与MMTML算法的各个性能进行比较,发现MMTML算法果然优势突出。8种算法的精度比较如下:

实验结果 

MMTML模型在不同数据集上的精确度 

 MMTML模型在不同数据集上的PRC区域

总结

本周阅读了一篇文献,巩固了前几周的机器学习中逻辑回归模型的学习。并且学习了决策树,并将二者融合来解决多类多标签分类任务。下周继续完善该文献得阅读以及完成吴恩达机器学习得下一个实验。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2256538.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2020年国赛高教杯数学建模E题校园供水系统智能管理解题全过程文档及程序

2020年国赛高教杯数学建模 E题 校园供水系统智能管理 原题再现 校园供水系统是校园公用设施的重要组成部分&#xff0c;学校为了保障校园供水系统的正常运行需要投入大量的人力、物力和财力。随着科学技术的发展&#xff0c;校园内已经普遍使用了智能水表&#xff0c;从而可以…

React开发高级篇 - React Hooks以及自定义Hooks实现思路

Hooks介绍 Hooks是react16.8以后新增的钩子API&#xff1b; 目的&#xff1a;增加代码的可复用性&#xff0c;逻辑性&#xff0c;弥补无状态组件没有生命周期&#xff0c;没有数据管理状态state的缺陷。 为什么要使用Hooks&#xff1f; 开发友好&#xff0c;可扩展性强&#…

摩尔线程 国产显卡 MUSA 并行编程 学习笔记-2024/12/03

Learning Roadmap&#xff1a; Section 1: Intro to Parallel Programming & MUSA Deep Learning Ecosystem&#xff08;摩尔线程 国产显卡 MUSA 并行编程 学习笔记-2024/11/30-CSDN博客&#xff09;UbuntuDriverToolkitcondapytorchtorch_musa环境安装(2024/11/24-Ubunt…

如何使用Docker轻松搭建高颜值无广告音乐播放器SPlayer随时随地听歌

前言 在快节奏的生活环境中&#xff0c;音乐成为了许多人放松和享受的重要方式。本文将介绍如何在Linux Ubuntu系统中使用Docker快速部署一款高颜值无广告的某抑云音乐播放器——SPlayer&#xff0c;并结合Cpolar内网穿透工具实现出门在外也能远程访问本地服务&#xff0c;随时…

C# Decimal

文章目录 前言1. Decimal 的基本特性2. 基本用法示例3. 特殊值与转换4. 数学运算示例5. 精度处理示例6. 比较操作示例7. 货币计算示例8. Decimal 的保留小数位数9. 处理 Decimal 的溢出和下溢10. 避免浮点数计算误差总结 前言 decimal 是 C# 中一种用于表示高精度十进制数的关键…

【理论·专业课】第三次作业

第1题&#xff08;存储管理_内存碎片&#xff09; 请指出内部碎片与外部碎片的区别&#xff61; ANS&#xff1a; 内部碎片是分配给进程但未被进程使用且无法被其他进程利用的内存空间 外部碎片是内存中因进程分配释放内存形成的不连续小块&#xff0c;虽总和够但因不连续无…

最新的springboot 3.x的支持s3协议的2.x方法的minio上传文件方法

拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/minio:latest运行命令 docker run -d \--name minio \-p 10087:9000 \-p 10088:9001 \-e MINIO_ROOT_USERminioadmin \-e MINIO_ROOT_PASSWORDY6HYraaphfZ9k8Lv \-v /data/minio/data:/data \-v /data/…

cocos creator接入字节跳动抖音小游戏JSAPI敏感词检测(进行文字输入,但输入敏感词后没有替换为*号)

今天更新了某个抖音小游戏的版本&#xff0c;增加了部分剧情&#xff0c;半天过后一条短信审核未通过&#xff0c;emmm…抖音总是能给开发者惊喜…打开电脑看看这次又整什么幺蛾子… 首先是一脸懵逼&#xff0c;后端早已接入了官方的内容安全检测能力了&#xff08;https://de…

Origin快速拟合荧光寿命、PL Decay (TRPL)数据分析处理-方法二

1.先导入数据到origin 2.导入文件的时候注意&#xff1a;名字短的这个是&#xff0c;或者你打开后看哪个里面有800&#xff0c;因为我的激光重频是1.25Hz&#xff08;应该是&#xff0c;不太确定单位是KHz还是MHz&#xff09;&#xff0c;所以对应的时间是800s。 3.选中两列直接…

17. 面向对象的特征

一、面向对象的三大特征 面向对象的三大特征指的是 封装、继承、多态。 封装&#xff08;encapsulation&#xff0c;有时称为数据隐藏&#xff09;是处理对象的一个重要概念。从形式上看&#xff0c;封装就是将数据和行为组合在一个包中&#xff0c;并对对象的使用者隐藏具体的…

Apache Dolphinscheduler可视化 DAG 工作流任务调度系统

Apache Dolphinscheduler 关于 一个分布式易扩展的可视化 DAG 工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系&#xff0c;使调度系统在数据处理流程中开箱即用。 DolphinScheduler 的主要特性如下&#xff1a; 易于部署&#xff0c;提供四种部署方式&am…

第二部分:基础知识 6.函数 --[JavaScript 新手村:开启编程之旅的第一步]

JavaScript 函数是可重用的代码块&#xff0c;用于执行特定任务。函数可以接受参数&#xff08;输入数据&#xff09;&#xff0c;并且可以返回一个值。JavaScript 提供了多种定义函数的方式&#xff0c;下面将详细介绍这些方式&#xff0c;并给出一些示例。 1. 函数声明 下面…

我眼中的“懂重构”(一)

初识重构 2017年的时候&#xff0c;领导让我看公司的一本书《重构——改善代码的既有设计》&#xff0c;这是一本JAVA版本的&#xff0c;前后看了2遍。那时候看书因为不懂看的格外仔细。我只是那时候不懂&#xff0c;然而多年后的今天我仍然发现很多人对重构充满误解。在刚进入…

机器学习详解(3):线性回归之代码详解

文章目录 1 数据预处理2 构建线性回归模型并绘制回归线初始化方法前向传播&#xff1a;forward_propagation代价函数&#xff1a;cost_function反向传播&#xff1a;backward_propagation参数更新&#xff1a;update_parameters训练方法&#xff1a;train代码运行结果 3 使用Py…

基于openzeppelin插件的智能合约升级

一、作用以及优点 部署可升级合约&#xff0c;插件自动部署proxy和proxyAdmin合约&#xff0c;帮助管理合约升级和交互&#xff1b;升级已部署合约&#xff0c;通过插件快速升级合约&#xff0c;脚本开发方便快捷&#xff1b;管理代理管理员的权限&#xff0c;只有proxyAdmin的…

游戏引擎学习第36天

仓库 :https://gitee.com/mrxiao_com/2d_game 回顾之前的内容 在这个程序中&#xff0c;目标是通过手动编写代码来从头开始制作一个完整的游戏。整个过程不使用任何库或现成的游戏引擎&#xff0c;这样做的目的是为了能够全面了解游戏执行的每一个细节。开发过程中&#xff0…

试题转excel;pdf转excel;试卷转Excel,word试题转excel

一、问题描述 一名教师朋友&#xff0c;偶尔会需要整理一些高质量的题目到excel中 以往都是手动复制搬运&#xff0c;几百道题几乎需要一个下午的时间 关键这些事&#xff0c;枯燥无聊费眼睛&#xff0c;实在是看起来就很蠢的工作 就想着做一个工具&#xff0c;可以自动处理…

16-01、JVM系列之:内存与垃圾回收篇(一)

JVM系列之&#xff1a;内存与垃圾回收篇&#xff08;一&#xff09; ##本篇内容概述&#xff1a; 1、JVM结构 2、类加载子系统 3、运行时数据区之&#xff1a;PC寄存器、Java栈、本地方法栈一、JVM与JAVA体系结构 JAVA虚拟机与JAVA语言并没有必然的联系&#xff0c;它只是与特…

2030. gitLab A仓同步到B仓

文章目录 1 A 仓库备份 到 B 仓库2 B 仓库修改main分支的权限 1 A 仓库备份 到 B 仓库 #!/bin/bash# 定义变量 REPO_DIR"/home/xhome/opt/git_sync/zz_xx_xx" # 替换为你的本地库A的实际路径 REMOTE_ORIGIN"http://192.168.1.66:8181/zzkj_software/zz_xx_xx.…

服务器上部署前端页面-实现IP+端口/index.html在线访问你的网页

首先一点&#xff0c;不管是那个框架开发的网页前端&#xff0c;最后都需要Build,构建完毕以后都是原始的HTML CSS JS 三样文件&#xff01; 所以不管用原始的三剑客&#xff08;HTML CSS JS&#xff09;开发的前端还是用各类框架开发的前端界面&#xff08;只是让开发简单…