繁体   English   中英

如何提高随机森林多类分类模型的准确率?

[英]How to improve accuracy of random forest multiclass classification model?

我正在研究多类分类,根据客户的购买行为和人口统计将客户分为 3 个不同的类。 我不能完全公开数据集,但总的来说它包含大约 300 个特征和 50000 行。 我尝试了以下方法,但无法达到 50% 以上的准确度:

  1. 调整超参数(我在执行 GridSearchCV 后使用调整后的超参数)
  2. 规范化数据集,然后运行我的模型
  3. 尝试了不同的分类方法:OneVsRestClassifier、RandomForestClassification、SVM、KNN 和 LDA
  4. 我还删除了不相关的功能并尝试运行我的模型
  5. 我的班级不平衡,所以我也尝试使用 class_weight =balanced,使用 SMOTE 进行过采样,下采样和重采样。

还有什么我可以尝试提高我的准确度的吗(准确度是指 f-score、precision 和 recall )。

任何帮助将不胜感激。

尝试调整以下参数

n_estimators

这是在进行最大投票或预测平均值之前要构建的树的数量。 树的数量越多,性能越好,但会使代码变慢。 您应该选择处理器可以处理的尽可能高的值,因为这会使您的预测更强大、更稳定。 由于您的数据量较大,因此每次迭代需要更多时间,但请尝试这样做。

最大特征

这些是随机森林允许在单个树中尝试的最大特征数。 Python 中有多个选项可用于分配最大功能。 其中很少有:

  • Auto/None :这将简单地采用所有有意义的功能
    在每棵树中。这里我们只是不对单个树设置任何限制。

    sqrt :此选项将对单个运行中的特征总数取平方根。 例如,如果变量总数为 100,我们只能在单个树中取 10 个。“log2”是 max_features 的另一种类似选项。

    0.2 :此选项允许随机森林在单个运行中采用 20% 的变量。 我们可以以“0.x”格式分配和赋值,其中我们希望考虑 x% 的特征。

min_sample_leaf

叶子是决策树的末端节点。 较小的叶子使模型更容易捕获训练数据中的噪声。 你可以从一些最小值开始,比如 75,然后逐渐增加它。 看看你的准确度哪个值高。

您的培训情况如何? 我假设您的 acc 是您的验证。 如果您的训练 acc 过高,则可能是正常的过度拟合。 随机森林通常可以很好地处理过拟合。

您可以尝试对数据进行 PCA,然后尝试对其进行分类。 这为您提供了占数据中大部分变化的特征,因此如果您无法对原始数据进行分类(并且它也减少了您的特征),那么尝试是一个好主意。

旁注:请记住,SVM 的拟合在点数上是二次的,因此将您的数据减少到 10-20000 左右以调整参数,然后使用子集的最佳参数在完整数据集上拟合 SVM,也可能加快进程。 还要记住考虑为 SVM 尝试不同的内核。

尝试首先使用 PCA 或随机森林进行特征选择,然后拟合链式分类器,首先进行 oneversesall,然后是随机森林或决策树。 你应该得到一个稍微好一点的准确度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM