我使用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。
这就是我想要实现的目标:在示例集上学习随机森林,提取规则,评估规则然后应用于更大的集合
任何建议或输入都会帮助我调试问题并快速解决。
答案 0 :(得分:0)
我认为问题是个别树木因为只使用6个功能而感到困惑,但是你给它们31个。你可以尝试通过设置check_input = False
来预测工作:
list(classifier_list[i].predict(feature_data_arr, check_input = False))