数据集分布评估-KDE (核密度估计)、KS检验

参考:
https://zhuanlan.zhihu.com/p/368073953
https://blog.csdn.net/u014028070/article/details/75171108
https://www.cnblogs.com/jpld/p/14186239.html
https://cxybb.com/article/qq_23100417/119392520
https://viruspc.github.io/blog/kde.html

在训练集上运行性能良好,却在测试集上效果不佳的模型。

  • 如果此时开发集和测试集的分布相同,那么你就能清楚地明白问题所在:算法在开发集上过拟合了(overfit)。解决方案显然就是去获取更多的开发集数据。
  • 但是如果开发集和测试集服从不同的分布,解决方案就不那么明确了。此时可能存在以下一种或者多种情况:1.算法在开发集上过拟合了。2.测试集比开发集更难进行预测,尽管算法做得足够好了,却很难有进一步的提升空间。3.测试集不一定更难预测,但它与开发集性质并不相同(分布不同)。

因此在开发集上表现良好的算法不一定在测试集上也能够取得出色表现。如果是这种情况,大量针对开发集性,能的改进工作将会是徒劳的。

大部分机器学习算法都有一个前提假设:训练数据样本和位置的测试样本来自同一分布。如果测试数据的分布跟训练数据不一致,那么就会影响模型的效果。

核密度估计((kernel density estimation)

核密度估计(kernel density estimation,KDE)是在概率论中用来估计未知的密度函数,属于非参数检验方法之一,通过核密度估计图可以比较直观的看出数据样本本身的分布特征。

KDE 分布图可以用于对比训练集和测试集的分布,在matlab中利用其自带的核密度估计函数([f,xi] = ksdensity(x))可以实现。
函数:ksdensity
功能:根据给定的数据,估计概率密度分布
具体含义:计算样本向量x的概率密度估计,返回在xi点的概率密度f,此时我们使用plot(xi,f)就可以绘制出概率密度曲线。该函数,首先统计样本x在各个区间的概率(与hist有些相似),再自动选择xi,计算对应的xi点的概率密度

%by dynamic
%see also http://www.matlabsky.com
%contact me matlabsky@gmail.com

%给一个随机样本
x=[randn(30,1); 5+randn(30,1)];

%计算出各点的概率密度
[f,xi]=ksdensity(x);

%绘制图形
subplot(211)
plot(x)
title('样本数据(Sample Data)')

subplot(212)
plot(xi,f)
title('概率密度分布(PDF)')

KS检验(Kolmogorov-Smirnov)

KDE是PDF(概率分布函数Probability Distribution Function)来对比,而KS检验是基于CDF(累计分布函数Cumulative Distribution Function)来检验两个数据分布是否一致,它也是非参数检验方法(即不知道数据分布情况)。两样本K-S检验由于对两样本的经验分布函数的位置和形状参数的差异都敏感,所以成为比较两样本的最有用且最常用的非参数方法之一。(KS适用于样本量比较小的时候)

k-s检验分为单样本kstest和双样本kstest2检验:
1. Single sample Kolmogorov-Smirnov goodness-of-fit hypothesis test.
matlab中kstest函数的使用:

H = kstest(X) %测试向量X是否服从标准正态分布,测试水平为5%。H=0接受原假设,H=1拒绝原假设。
H = kstest(X,cdf) %指定累积分布函数为cdf的测试(cdf=[ ]时表示标准正态分布),测试水平为5%
H = kstest(X,cdf,alpha) % alpha为指定测试水平H=kstest(X,cdf,alpha,tail) % tail=0为双侧检验, tail=1单侧(<)检验, tail=-1单侧(>) 检验
[H,P,KSSTAT,CV] = kstest(X,cdf,alpha) %P为原假设成立的概率,KSSTAT为测试统计量的值,CV为是否接受假设的临界值。

2.Two-sample Kolmogorov-Smirnov test
检验两个数据向量之间的分布的。

[h,p,ks2stat] = kstest2(x1,x2,alpha,tail)

% x1,x2都为向量,ALPHA是显著性水平(默认0.05)。TAIL是表示检验的类型(默认unequal,不平衡)。

对抗验证(Adversarial validation)

除了 KDE 和 KS检验,目前比较流行的是对抗验证,它并不是一种评估模型效果的方法,而是一种用来确认训练集和测试集的分布是否变化的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值