尽管所有数据都是从规则生成的,但多类分类的准确性低

数据挖掘 机器学习 scikit-学习 熊猫 机器学习模型 数据科学模型
2022-02-15 11:13:29

我有一个定义明确的数据,我已将数据清理为最终形式,其中有 20 个特征映射到 1 到 100 之间的数字。每行最多启用 5 个特征(值设置为 1)。数据如下所示

 Result|f1|f2|...f19|f20
 45    |0 | 1|... 1 | 0
 92    |0 | 0|... 1 | 1

我正在尝试构建机器学习模型,该模型可以为我提供良好的准确性,最好是可以处理的模型,warm_start 因为每次迭代都会生成 1 行,我需要适应现有的构建模型

下面是我试图设置一些基线的 2 个分类器

randclf = RandomForestClassifier(n_estimators=50)
decclf = DecisionTreeClassifier(criterion = "gini", random_state = 100,max_depth=3, min_samples_leaf=5)

然而,即使有 100,000 条记录,我的结果也很差,准确率约为 15-20%。考虑到数据的可预测性(数据是基于有限的规则集生成的),我期待非常高的准确性。

我做错了什么,我想根据给定的特征对数据(预测结果)进行高精度分类,你能推荐一些可能适用于这类数据的模型吗?张量流和神经网络方法呢?

数据:

https://github.com/sachinhegde6/machinelearningdata

更新: 数据不平衡是我无法帮助的,因为它们是根据规则生成的。

2个回答

我认为神经网络将是计算密集型的,并且需要您拥有良好的 GPU 以及大量的训练数据。您可以尝试使用 warm_start 运行聚类算法,如 k-means 或逻辑回归

我认为最大的问题是您的数据。如果您的标签是平衡的,那么准确性作为一个指标才有意义。您的标签(结果)非常不平衡。您最频繁的标签 (Result = 60) 出现 27326 次,而您最不频繁的标签 (Result = 29) 仅出现 3 次。您可以通过以下方式自行检查:

import pandas as pd
data = pd.read_csv('/PATH/TO/FILE.csv', index_col=0)
data['Result'].value_counts(ascending=True)

或者你可以绘制它:

data['Result'].value_counts().plot.bar()

结果计数条形图

因此,我建议您从生成所有标签均等分布的平衡数据开始。

关于你关于神经网络和张量流的问题。对于您的问题,我不会推荐它。用神经网络解决多类问题的方法是做一种叫做 One vs. All 的事情,这需要你在每个类中训练一个完整的网络。你有 101 个类,训练 101 个神经网络并不实用。我认为你应该尝试像 LightGBM 或 XGBoost 这样的梯度提升分类器。