0
点赞
收藏
分享

微信扫一扫

快速解决“多分类不平衡”问题

Java旺 2022-04-17 阅读 86

目录

前言

一、问题详细描述

1.项目介绍

2.调参尝试

二、分析原因

1.观察稀疏矩阵

2.解决方案

总结



前言

   我做的是一个多分类问题,特征有55列,标签1列,共有15000条数据。(由于某些原因,不方便展示数据集)



一、问题详细描述

1.项目介绍

 如上图,A18列是标签列,前面的都是属性列。且已经经过数据处理(无空缺值和异常值)。

     训练集、测试集比为8:2。这是我建立RF后,多次调参,所表现出的最佳性能。RF模型表明在测试集上的准确率为72%,AUC为0.85。

2.调参尝试

       我刚遇到这个问题的时候,以为是模型参数导致没有很好的训练,因此我根据一系列步骤 合理地调参,想法设法地提高其准确率。其调参过程如下:

二维网格搜索 

 

 

 

下面是我调试一个参数n_estimators的代码,仅供参考。

accurancyList = {
    'params':[],
    'precision':[]
}

def tune_rf(Xtrain,Ytrain,parameters): 
    rf = RandomForestClassifier(
        n_estimators = parameters['n_estimators'],
        max_leaf_nodes = parameters['max_leaf_nodes'],
        max_depth = parameters['max_depth'],
        min_samples_split = parameters['min_samples_split'],
        min_samples_leaf = parameters['min_samples_leaf'],
        min_weight_fraction_leaf = parameters['min_weight_fraction_leaf'],
        max_features = parameters['max_features'],
        criterion = parameters['criterion']
    )
    # 模型训练
    rf.fit(Xtrain, Ytrain)
    return accuracy_score(Ytest,rf.predict(Xtest))

parameters = {       
        'n_estimators':20,
        'max_leaf_nodes':20,
        'max_depth':20,
        'min_samples_split':20,
        'min_samples_leaf':20,
        'min_weight_fraction_leaf':0.03,
        'max_features':30,
        'criterion':'entropy'
}

for n in range(1,201):
    parameters['n_estimators'] = n
    accurancyList['params'].append(parameters)
    # 将更新后的paramseters投入训练
    accurancyList['precision'].append(tune_rf(Xtrain,Ytrain,parameters))


# 绘制图像
plt.plot(range(1,201),accurancyList['precision'])
plt.xlabel('n')
plt.ylabel('accurancy')
plt.title('Accurancy@n_estimator')
plt.show()

 

 

二、分析原因

1.观察稀疏矩阵

2.解决方案

方案一    处理数据

方案二   改进模型

方案三  调整评价指标

我最近想到了以上的解决方案,具体代码还在测试中~~~~。先挖一个坑,下次补上。


总结

最后补充一些我的一些思考:

@模型调参的过程是构造一个函数F(theta1,theta2,theta3···)=Accurancy,输出值可以是准确率,参数是随机森林的参数(以随机森林举例)。调参的本质是通过修改参数值,降低函数值——>转化成了 最优化 问题。而且,不能使用最优化常用的梯度下降(难以求得梯度)法。

@集成方法是框架,模型融合是方式,我们可以把集成模型融合起来而不是再次集成。因为影响准确率的原因不是模型不好,而是在这种多分类不平衡的情况下,“集成”更倾向于犯错小的方向,因此,必须选用与集成对立的算法融合起来,才能将错误的分类给拉回来。

举报

相关推荐

0 条评论