在 Python scikit learn 中为 12 个随机森林创建循环

Posted

技术标签:

【中文标题】在 Python scikit learn 中为 12 个随机森林创建循环【英文标题】:Create loop for 12 randomforests in Python scikit learn 【发布时间】:2021-10-19 21:25:16 【问题描述】:

我有十二个不同的数据集,旨在创建十二个不同的随机森林模型。我想创建一个 for 循环,但我不知道如何存储每个模型并根据相关数据集命名每个模型(代码如下所示)。我正处于使用 Scikit learn 学习 python 和机器学习的学习阶段。欢迎任何cmets或建议。

data = [df_AFC,df_AF,df_ESF,df_EXF,df_F,df_GF,df_KRFC,df_KRF,df_MF,df_PF,df_SFC,df_SF]
name = ['AFC','AF','ESF','EXF','F','GF','KRFC','KRF','MF','PF','SFC','SF']

#fix_random_state=42
result = []
for i,j in zip(data,name):
    x = i.drop('class', axis=1)
    y = i['class']
    
    # rus = RandomUnderSampler(sampling_strategy="not minority") # String
    rus = RandomUnderSampler(sampling_strategy=1, random_state=41) # Numerical value
    x_res, y_res = rus.fit_resample(x, y)
    
    #Remove low variance features
    #replace with x_res, y_res from now on
    remove_low_variance(x_res, threshold=0.1)
    
    #Data splitting
    x_train, x_test, y_train, y_test = train_test_split(x_res, y_res, test_size=0.2, random_state=42)
    x_train.shape, x_test.shape
    
    #Model building
    model = RandomForestClassifier(n_estimators=500, random_state=42)
    model.fit(x_train, y_train)
    result.append(model_i)

预期产出

y_train_pred_AFC = model_AFC.predict(unknown)
y_train_pred_AF = model_AF.predict(unknown)
...

【问题讨论】:

【参考方案1】:

我建议将模型存储在这样的字典中:

data_sets = [df_AFC,df_AF,df_ESF,df_EXF,df_F,df_GF,df_KRFC,df_KRF,df_MF,df_PF,df_SFC,df_SF]
names = ['AFC','AF','ESF','EXF','F','GF','KRFC','KRF','MF','PF','SFC','SF']

#fix_random_state=42
models = 
for data, name in zip(data_sets, names):

    # <<< REMOVED CODE >>>
    
    #Model building
    model = RandomForestClassifier(n_estimators=500, random_state=42)
    model.fit(x_train, y_train)
    models[name] = model

然后你可以调用训练好的模型在另一个循环中进行预测,如下所示:

predictions = 
for name, model in models.items():
    predictions[name] = model.predict(test_data)

或一一:

y_train_pred_AFC = models['AFC'].predict(test_data)
#...

【讨论】:

以上是关于在 Python scikit learn 中为 12 个随机森林创建循环的主要内容,如果未能解决你的问题,请参考以下文章

如何在 scikit-learn 中为 OneVsRestClassifier 设置类权重?

如何在 scikit-learn 的分类问题中为 F1 分数做 GridSearchCV?

scikit-learn 中为文本分类排列文本数据的标准方法是啥?

如何在 scikit learn 中为 cross_validate 制作自定义评分指标?

在 scikit-learn 中为 KNN 使用除 p-norm 之外的其他成对距离度量

如何在 scikit learn 中为多元回归绘制最佳拟合平面?