如何设置随机选择中使用的要素数量sklearn

时间:2016-07-22 17:08:23

标签: python scikit-learn random-forest decision-tree

我使用sklearn RandomForest Classifier / Bag分类器进行学习,与Java / Weka机器学习库相比,我没有得到预期的结果。 在Weka中,我正在学习模型 - 随机森林中有10棵树,每棵树都是在考虑6个随机特征时构建的。 (需要设置setNumFeatures,默认为10棵树)

在sklearn中 - 我不确定如何指定在构建10棵树的随机森林时随机考虑的要素数量。这就是我在做的事情:

rf_classifier = RandomForestClassifier(n_estimators=num_trees, max_features=6)
rf_classifier = rf_classifier.fit(train_file, train_file_label)
for items in rf_classifier.estimators_:
    classifier_list.append(items)

我看到了文档并且有一个参数 - max_features但我不确定这是否符合目的。当我试图计算熵时,我得到了这个错误:

# code to calculate voting entropy for all features (unlabeled data)
vote_count_for_features = list(classifier_list[0].predict(feature_data_arr))
for i in range(1, len(classifier_list)):
    res_temp = []
    res_temp = list(classifier_list[i].predict(feature_data_arr))
    vote_count_for_features = [x + y for x, y in zip(vote_count_for_features, res_temp)]

如果我将该参数设置为6,那么我的代码将失败并显示错误消息:

  

模型的功能数量必须与输入匹配。模型n_features   是6,输入n_features是31

输入:包含31个功能的100万条记录的样本集。当我运行weka时,提取的规则数量大约为1000,而当我通过sklearn运行相同的东西时 - 我几乎没有70条规则。

我是python和sklearn的新手,我想知道我在哪里做错了。 (Weka代码经过良好测试,精度达到95%,召回率达到80% - 所以我认为这很好)

注意:我使用了sklearn imputer来使用' mean'来估算缺失值。策略,而Weka有办法处理NaN。

这就是我想要实现的目标:在示例集上学习随机森林,提取规则,评估规则然后应用于更大的集合

任何建议或输入都会帮助我调试问题并快速解决。

1 个答案:

答案 0 :(得分:0)

我认为问题是个别树木因为只使用6个功能而感到困惑,但是你给它们31个。你可以尝试通过设置check_input = False来预测工作:

 list(classifier_list[i].predict(feature_data_arr, check_input = False))