【问题标题】:why am I getting a very high test accuracy even when i test my dataset with a single feature为什么即使我使用单个特征测试我的数据集,我的测试准确度也会非常高
【发布时间】: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


【解决方案1】:

这是一个相当大的数据集。你的数据集有多平衡?可能是您的测试拆分主要由一个标签的条目填充,并且每次条目来自另一个标签时都失败。因此,我想说准确性在这里不是一个可以依赖的好衡量标准。

看看这个: Difference of model accuracy and performance

查看您的混淆矩阵并检查您的拆分。

【讨论】:

  • 感谢您的提示。我忘了补充一点,我的数据集几乎是平衡的。但是是的,显然我的测试集包含相同的标签,但即使在我洗牌数据集之后,我再次获得了相当高的准确度。此外,我的准确率和召回率分别得到 1.0 和 0.99。
  • @MaryamIsakhani,我建议进一步检查您的模型。例如,计算您的特征重要性或排列重要性以查看您的特征对模型性能的影响useful link。或者干脆尝试不同的模型,看看行为如何变化。
猜你喜欢
  • 2020-07-05
  • 2023-02-26
  • 2021-01-23
  • 1970-01-01
  • 2011-02-19
  • 1970-01-01
  • 2021-03-25
  • 2018-08-18
  • 2022-06-11
相关资源
最近更新 更多