有人问过同样的问题。但是由于OP没有发布代码,因此没有给出太多有用的信息。
我遇到了基本上相同的问题,由于某种原因,混洗数据使我的随机森林分类器的准确性大大提高(从45%到94%!)。(就我而言,删除重复项也会影响准确性,但这可能需要再讨论一天)基于我对RF算法工作原理的理解,这确实不应该发生。
我的数据是从几个文件合并而成的,每个文件都包含相同顺序的相同样本。对于每个样本,前三列是单独的输出,但是当前我只关注第一个输出。
import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
TOTAL_OUTPUTS = 3
... (code for merging data and feature engineering)
to_compare = {
"merged": merged,
"merged shuffled": merged.sample(frac=1.0),
"merged distinct": merged.drop_duplicates(),
"merged distinct shuffled": merged.drop_duplicates().sample(frac=1.0)
}
params = {'n_estimators': 300,
'max_depth': 15,
'criterion': 'entropy',
'max_features': 'sqrt'
}
for name, data_to_compare in to_compare.items():
features = data_to_compare.iloc[:, TOTAL_OUTPUTS:]
y = data_to_compare.iloc[:, 0]
rf = RandomForestClassifier(**params)
scores = cross_val_score(rf, features, y, cv=3)
print(name, scores.mean(), np.std(scores))
输出:
merged 0.44977727094363956 0.04442305341799508
merged shuffled 0.9431099584137672 0.0008679933736473513
merged distinct 0.44780773420479303 0.04365860091028133
merged distinct shuffled 0.8486519607843137 0.00042583049485598673
您正在使用的未经改组的数据表明某些要素的值在某些行中趋于恒定。这导致森林变弱,因为组成森林的所有单个发束都变弱。
要看到这一点,请采取极端的推理;如果其中一个特征在整个数据集中都是恒定的(或者如果您使用此数据集中特征恒定的数据块),则此特征(如果选中)不会带来任何熵变化。因此,永远不会选择此功能,并且树会不合适。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句