论文笔记:Do we Need Hundreds of Classifiers to Solve Real World Classification Problems

本文对比测试了179个不同类型的分类器在121个数据集上的表现,涵盖判别分析、贝叶斯等17个类别。结果显示随机森林在大多数数据集上实现了最佳性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Abstract

  • 179个分类器
  • 17个类别(判别分析,贝叶斯,神经网络,支持向量机,决策树,基于规则的分类器,boosting,bagging,stacking,随机森林和其他集成方法,广义线性模型,近邻算法,偏最小二乘(PLS)和主成分回归,逻辑和多项式回归,多元自适应回归样条函数和其他方法)。
  • 121个数据集(the whole UCI data base)

性能最好的是:
1. RF——(R中通过caret存取)达到94.1% 的最大精度克了84.3%的数据集中的90%。
2. SVM with 高斯核——(C using LibSVM)达到92.3%的最大精度。
3. 神经网络
4. boosting ensembles

Introduction

不同的分类器来自于不同的数学以及计算机的研究背景
classifier families 分类器名称
统计学 线性判别分析,广义线性模型
人工智能和数据挖掘 基于规则的分类器,决策树
联结主义方法 神经网络

不同的分类器在不同的数据集上有不同的表现,本文主要做的工作有以下四个:

  • 选出分类效果最好的分类器
  • 将每个分类器按照他的准确度进行排序
  • 确定每一个分类器的可以达到的最好的分类精度
  • 评估在不同的数据集下的分类器的性能的变化

在使用UCI测试数据集进行测试的过程中容易出现一些有趣的错误,下面综合这些错误并讨论如何避免:

  • 有时使用的测试数据集会使得实验结果不准确,因此本文所使用的数据集都是来自于UCI分类库,这样可以避免一些小数据集得到不准确结果的情况,当然不能说UCI的所有数据集合都是完整、可靠地标准化的试验样本。

  • 在提出一个新的分类器时存在两个问题:以往的一些文章是否选择的learners足够多,以及是否将选择的learners都配置到了它们最好的一个状态。有的时候对分类器的知识储备并不足,就一通乱改,这样在对分类器进行优化的时候会使结果跑偏。因此本文不会随意的更改以往的经典分类器算法,只是调参来使分类效果达到最好。

  • 很难获得一个分类器在一个数据集上可能达到的最大的精度,这对评估分类器很困难。本文做一个假定就是所有得到的最高的准确度就是分类器的最高准确度。

  • 数据集可能不完整,也可能存在错误,也就是所谓的噪声,那么本文还是认为测到的就是准确的,哪个分类器效果不好也是因为分类器自身的局限性。

  • 缺乏标准的数据分割,本文的解决方法就是对每个数据集使用相同的分割方法

数据

165个UCI数据集中丢弃57个(大规模数据集、不在一般的UCI版本中的、只有一个输入的等等)再加上现实世界中的4个数据集。其中又有一个数据集实际包含多个数据集的。
共165-57+4=112,112+1+1+4+2+1=121 data sets。

我们不使用预处理,数据转换或特征选择。原因是:
1)可以将这些转换的影响类似于所有分类器;然而,我们的目标不是为每个数据集达到最好的性能(这样最终可能需要进一步预处理),而是比较分类器;
2)如果预处理有利于一些分类器相对其他分类器来说,这种影响应该是随机的,因此比较没有统计学意义;
3)为了避免由于预处理出现的比较偏差,使用原始数据较为明智;
4)为了提高分类结果,进一步预处理最终应该是特定于每个数据集,这将很大程度上增加目前的工作;
5)额外的转换需要知识超出了本文的范围,并且应该在一个不同的研究里探索。

分类器

179中,在C、R、matlab中实现

结果和讨论
在121个数据集上评估179个分类器,给出了21659种组合classifier-data集。
出现错误的原因:
一些分类器在一些数据集上出错是由于共线性的数据,奇异协方差矩阵, 和在某些类所有的训练模式上相同的输入;rrlda_R要求所有的输入必须有不同的值在50%以上的训练模式;其他错误是由离散的输入、数据很少的类(尤其是在许多数据集 类),或过少的类(vbmpRadial需要3类)引起的。大型数据集可能缺乏内存,小数据集可能不满足分类器的每个类最小的模式。
总的来说,我们发现449错误,代表21659例的2.1%。这些错误情况下被排除在每个分类器的平均精度计算外。
验证(。。。。那一大段没看懂)

实验结论

The parRF_t achieves in average 94.1% of the maximum accuracy over all the data sets (Table 5, lower part), and overcomes the 90% of the maximum accuracy in 102 out of 121 data sets.
The random forest in R and tuned with caret (rf t) is slightly worse (93.6% of the maximum accuracy), although it achieves slightly better average accuracy (82.3%) than parRF_t.
The LibSVM implementation of SVM in C with Gaussian kernel (svm C), tuning the regularization and kernel spread, achieves 92.3% of the maximum accuracy.

其余的分类器,包括其他神经网络(径向基函数、学习矢量量化和级联相关)、判别分析、决策树,C5.0,基于规则的分类器, 其他bagging和boosting集成,近邻,贝叶斯,GLM,PLSR,MARS, 等等,没有竞争力。大多数最好的分类器实现R和调优使用caret,这似乎是最好的选择选择一个分类器实现。

通过实验发现大部分的分类器能够获得最好分类效果的可能性小于10%,实验中有二十个分类器的最高准确率高于95%

### 关于数百亿规模的概念或数据 在涉及大规模数据处理的情境下,“hundreds of billions”通常指代非常庞大的数值范围,例如数十亿到上百亿级别的记录数、操作次数或者计算量。以下是几个可能的相关领域及其解释: #### 1. **数据库中的海量数据** PostgreSQL等现代关系型数据库能够轻松应对包含十亿级甚至更高数量级的记录集合[^1]。如果假设每条记录占用固定大小的空间,则存储一个具有67.5亿行和10列的表格对于具备充足磁盘容量的系统来说并非难事。这表明,在实际应用中,“hundreds of billions”的概念可以具体化为超大型表单的设计与管理。 #### 2. **高性能计算环境下的复杂运算** 当提及“hundreds of billions”时也可能联想到科学仿真模拟等领域内的密集型浮点运算需求。例如气候预测模型每天都要执行成百上千次迭代过程,每次都需要完成上万亿次乘加法指令才能得出精确的结果。这种情况下讨论的就是极其繁重的工作负载以及相应硬件设施如何满足其性能指标的要求。 #### 示例代码展示 PostgreSQL 处理大表的方法 下面给出一段 Python 脚本用于连接 PostgreSQL 并分批次读取大数据集: ```python import psycopg2 def fetch_large_dataset_in_chunks(): conn = None try: conn = psycopg2.connect( dbname="your_db", user="username", password="password", host="localhost" ) cursor = conn.cursor() batch_size = 1_000_000 # 每批百万行 offset = 0 while True: query = f""" SELECT * FROM large_table LIMIT {batch_size} OFFSET {offset}; """ cursor.execute(query) rows = cursor.fetchall() if not rows: break process_rows(rows) # 假设有一个函数用来处理每一组数据 offset += batch_size except Exception as e: print(f"Error occurred: {e}") finally: if conn is not None: conn.close() def process_rows(rows): pass # 实现具体的业务逻辑 fetch_large_dataset_in_chunks() ``` 此脚本通过设置合理的 `LIMIT` 和 `OFFSET` 参数实现了高效地逐块获取大量数据的功能,从而避免一次性加载全部内容造成内存溢出等问题发生。 --- ### 结论 综上所述,“hundreds of billions”这一表述广泛应用于描述各种场景下的巨大规模现象,无论是从物理世界的宏观层面还是数字化时代的微观细节角度出发均能找到对应实例加以说明。以上仅列举部分典型例子供参考学习之用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值