2016-07-22 44 views
0

我正在使用sklearn RandomForest分类器/ Bag分类器进行学习,与Java/Weka机器学习库相比,我没有获得预期的结果。 在Weka中,我正在学习模型 - 随机森林中有10棵树,每棵树都是在考虑6个随机特征的情况下构建的。 (setNumFeatures需要设置,默认值是10棵树)如何设置要在随机选择中使用的要素数量sklearn

在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

输入:样品组1条百万个记录与31层的功能。当我运行weka时,提取的规则数量大约是1000,而当我通过sklearn运行相同的东西时 - 我几乎没有70条规则。

我是新来的蟒蛇和sklearn,我想弄清楚我在哪里做错了。 (Weka代码已经很好的测试了,精度达到95%,回忆率达到80% - 所以我认为这很好)

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

这就是我想实现:在样本集,提取规则了解随机森林,评估规则,然后敷在更大的设置

任何建议或输入将真正帮助我渡过这个问题进行调试和迅速解决它。

回答

0

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

list(classifier_list[i].predict(feature_data_arr, check_input = False)) 
相关问题