Pyspark中对训练集、测试集、验证集进行KS检验

KS检验的目的:验证数据分布特征的一致性

因训练集、测试集、验证集在经过split之后,可能出现特征分布不一致的情况,导致模型训练产生不必要的误差和错误

通过scipy.stats库,进行KS检验:

(假设正在检验的2个数据集拥有同样的分布特征,α=0.05)

import numpy as np
import pandas as pd
import seaborn as sns
from scipy.stats import ks_2samp

#spark环境
data1 = df_new.select(col('label').alias('label'),
                     col('features').alias('features'))
#拆分数据集                     
train,test,validation = data1.randomSplit([0.6,0.2,0.2],seed=10)

#将pyspark.dataframe 转换为1维array,方便计算ks_2samp
set_1_array = np.array(set_1.select(col_name).collect())[:,0]
set_2_array = np.array(set_2.select(col_name).collect())[:,0]

ks_stat,p_value = ks_2samp(set_1_array,set_2_array)
        
print('The KS statistics for label is: %.8f'%(ks_stat))
print('The P value for label is: %.8f'%(p_value))                    

输出:

The KS statistics for label is: 0.04651163
The P value for label is: 0.99999955

从以上结果发现,P_value>α,无法拒绝原假设,即无法拒绝2个数据集属于同一分布,说明数据集经过split之后,仍然具有较一致的分布特征,由此训练得出的模型,相对不易因特征分布不均而导致出现不必要的误差。

**

如果你的问题解决了,欢迎关注+点赞+收藏哦~

**

猜你喜欢

转载自blog.csdn.net/weixin_45281949/article/details/105302704