【发布时间】:2022-11-11 03:01:59
【问题描述】:
假设我有一个名为 original_df 的数据框,有 20,000 行。我拆分了前 18,000 行用作我的训练集和最后 2,000 行用作我的测试集。当我在original_df 上使用sample 函数时分裂前并在训练集上运行分类器模型,它会产生合理的预测结果:一些假阳性、一些假阴性、一些真阳性和一些真阴性。
但是,当我在训练集和测试集上使用sample 函数拆分非混洗的original_df 后,分类器永远无法做出正面预测:我只会得到真阴性和假阴性;和零假阳性和真阳性。
我只是想了解为什么会发生这种情况,尽管具有相同的采样技术,下面是一些示例 sn-ps。
# This example samples the original dataset directly
training_len = math.ceil(len(X) * 0.9)
X.sample(frac=1, random_state=2) # Features
Y.sample(frac=1, random_state=2) # Labels
X_train = X.loc[:training_len]
Y_train = Y.loc[:training_len]
X_test = X.loc[training_len+1:]
Y_test = Y.loc[training_len+1:]
# fp, fn, tp, tn
# 1314, 1703, 455, 8842
# This example samples the training set directly
training_len = math.ceil(len(X) * 0.9)
X # Features
Y # Labels
X_train = X.loc[:training_len].sample(frac=1, random_state=2)
Y_train = Y.loc[:training_len].sample(frac=1, random_state=2)
X_test = X.loc[training_len+1:]
Y_test = Y.loc[training_len+1:]
# fp, fn, tp, tn
# 0, 425, 0, 2518
我正在使用来自sklearn.naive_bayes 的GaussianNB()
我试图检查训练集和测试集之间是否存在任何索引不匹配,但事实并非如此。
我试图不从训练集和原始集中采样任何东西,它的预测结果与仅对训练集数据集采样时的预测结果相同。这让我觉得X_train 和Y_train 根本没有被洗牌,但是我在采样后打印了训练集的内容,它们确实被洗牌了(X_train 和Y_train 的匹配索引)。
【问题讨论】:
-
不是一个编程问题,因此在这里题外话;请参阅stackoverflow.com/tags/machine-learning/info 中的介绍和注意事项
-
这不是一个编程问题。我可以改写一下,然后问“如何使样本在应用于训练集时发挥作用?”,或者“为什么我的实现没有产生0‘好’的结果”
标签: python pandas dataframe machine-learning classification