首页 文章

如何设置随机选择sklearn中使用的功能数量

提问于
浏览
0

我使用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

    我认为问题是个别树木被混淆,因为它们只使用6个特征,但是你给它们31个 . 你可以尝试通过设置 check_input = False 来使预测工作:

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

相关问题