【发布时间】:2021-10-19 22:39:08
【问题描述】:
我正在编写一个小程序,我正在训练一个随机森林来预测一个二进制值。我的数据集有大约 20,000 个条目,每个条目有 25 个特征(连续的和分类的),具有要预测的二进制目标值。 我得到了超过 99% 的测试准确率,这非常高。我试图减少我的特征数量,即使有两个特征我仍然可以获得如此高的准确性。我只是想确保我的代码没有做错任何事情,例如训练集泄漏到我的测试集中。 这是代码sn-p
data = pd.read_csv(r'test.csv')
data = data.drop_duplicates()
#spliting data
X = data.drop('label', axis=1)
y = data['label']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
#preproccessing the dataset by one hot encoding
l1 = OneHotEncoder(handle_unknown='ignore')
l1.fit(X_train)
X_train = l1.transform(X_train)
X_test = l1.transform(X_test)
from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier
classifier = RandomForestClassifier(n_estimators=20, random_state=0)
classifier.fit(X_train, y_train.to_numpy())
#evaluation
y_pred = classifier.predict(X_test)
print(accuracy_score(y_test, y_pred))
另外,我忘了补充一点,我的数据集是平衡的,准确率和召回率是 100%!
【问题讨论】:
-
您的目标值在数据集中的平衡程度如何?
-
您能否制作一个可以在代码 sn-p 中定义的玩具数据集,并添加导入以制作其他任何人都可以运行的代码 sn-p?
-
可能不是答案,但作为建议,您可以更改“random_state=0”。使用零时,random_state 每次都重现相同的输出。
-
@AkinGunduz 我把它改成了 20。这是否意味着我的准确度每次都会改变?
标签: python machine-learning random-forest sklearn-pandas one-hot-encoding