我有一个包含数百万行的数据框,为了创建模型,我从这个数据集中随机抽取了一个样本,使用了dataset.sample(int(len(dataset)/5))
,这会从对象的某个轴上返回一个随机样本。现在我想验证这个样本是否没有失去总体的统计显著性,也就是说,确保样本中每个特征(列)的概率分布与整个数据集(总体)的概率分布相同。我的数据集既包含数值特征也包含分类特征。如何在Python中检查这些特征是否具有相同的概率分布?
回答:
对于连续变量,你可以使用Kolmogorov-Smirnov统计量。这可以测试两个样本是否来自相同的分布。
在scipy
中的使用方法如下:
scipy.stats.ks_2samp(data1, data2, alternative='two-sided', mode='auto')
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ks_2samp.html
另外,如果你已经知道分布,你可以使用KS测试来对你的数据进行测试,与给定的分布进行比较:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.kstest.html#scipy.stats.kstest