网易首页 > 网易号 > 正文 申请入驻

【机器学习基础】如何检测两组数据是否同分布?

0
分享至

点击关注公众号,干货及时送达

作者:刘洋,中科院大学,Datawhale成员

一个模型中,很重要的技巧就是要确定训练集与测试集特征是否同分布,这也是机器学习的一个很重要的假设,但很多时候我们默认这个道理,却很难有方法来保证数据同分布。

T检验(Binary)

T检验是一种适合小样本的统计分析方法,通过比较不同数据的均值,研究两组数据是否存在差异。

我们参考《python科学计算第二版》:

https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s/sv5QipNA6QPWgDC3R8DuAQ

单样本t检验

单样本t检验是样本均值与总体均值的比较问题。其中总体服从正态分布,从正态总体中抽样得到n个个体组成抽样样本,计算抽样样本均值和标准差,判断总体均值与抽样样本均值是否相同。

from scipy.stats import ttest_1samp
import numpy as np

print("Null Hypothesis:μ=μ0=30,α=0.05")
ages = [25,36,15,40,28,31,32,30,29,28,27,33,35]
t = (np.mean(ages)-30)/(np.std(ages,ddof=1)/np.sqrt(len(ages)))

ttest,pval = ttest_1samp(ages,30)
print(t,ttest)
if pval < 0.05:
print("Reject the Null Hypothesis.")
else:
print("Accept the Null Hypothesis.")
配对样本t检验

配对样本主要是同一实验前后效果的比较,或者同一样品用两种方法检验结果的比较。可以把配对样本的差作为变量,差值的总体均数为0,服从正态分布。

from scipy.stats import ttest_rel
s1 = [620.16,866.50,641.22,812.91,738.96,899.38,760.78,694.95,749.92,793.94]
s2 = [958.47,838.42,788.90,815.20,783.17,910.92,758.49,870.80,826.26,805.48]
print("Null Hypothesis:mean(s1)=mean(s2),α=0.05")
ttest,pval = ttest_rel(s1,s2)
if pval < 0.05:
print("Reject the Null Hypothesis.")
else:
print("Accept the Null Hypothesis.")
独立样本t检验

对于第三个问题独立样本t检验,比较两个样本所代表的两个总体均值是否存在显著差异。除了要求样本来自正态分布,还要求两个样本的总体方差相等“方差齐性”。

from scipy.stats import ttest_ind,norm,f
import numpy as np
def ftest(s1,s2):
'''F检验样本总体方差是否相等'''
print("Null Hypothesis:var(s1)=var(s2),α=0.05")
F = np.var(s1)/np.var(s2)
v1 = len(s1) - 1
v2 = len(s2) - 1
p_val = 1 - 2*abs(0.5-f.cdf(F,v1,v2))
print(p_val)
if p_val < 0.05:
print("Reject the Null Hypothesis.")
equal_var=False
else:
print("Accept the Null Hypothesis.")
equal_var=True
return equal_var

def ttest_ind_fun(s1,s2):
'''t检验独立样本所代表的两个总体均值是否存在差异'''
equal_var = ftest(s1,s2)
print("Null Hypothesis:mean(s1)=mean(s2),α=0.05")
ttest,pval = ttest_ind(s1,s2,equal_var=equal_var)
if pval < 0.05:
print("Reject the Null Hypothesis.")
else:
print("Accept the Null Hypothesis.")
return pval

np.random.seed(42)
s1 = norm.rvs(loc=1,scale=1.0,size=20)
s2 = norm.rvs(loc=1.5,scale=0.5,size=20)
s3 = norm.rvs(loc=1.5,scale=0.5,size=25)

ttest_ind_fun(s1,s2)
ttest_ind_fun(s2,s3)
KS检验(Numerical)

KS检验是一种统计检验方法,其通过比较两样本的频率分布、或者一个样本的频率分布与特定理论分布(如正态分布)之间的差异大小来推论两个分布是否来自同一分布。

KS检验与t-检验之类的其他方法不同是KS检验不需要知道数据的分布情况,可以算是一种非参数检验方法。当然这样方便的代价就是当检验的数据分布符合特定的分布事,KS检验的灵敏度没有相应的检验来的高。在样本量比较小的时候,KS检验最为非参数检验在分析两组数据之间是否不同时相当常用。

PS:t-检验的假设是检验的数据满足正态分布,否则对于小样本不满足正态分布的数据用t-检验就会造成较大的偏差,虽然对于大样本不满足正态分布的数据而言t-检验还是相当精确有效的手段。

判断是否符合正态分布

KS函数说明文档:https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.kstest.html

import numpy as np
import pandas as pd
from scipy import stats

data = [87,77,92,68,80,78,84,77,81,80,80,77,92,86,
76,80,81,75,77,72,81,72,84,86,80,68,77,87,
76,77,78,92,75,80,78]
# 样本数据,35位健康男性在未进食之前的血糖浓度

df = pd.DataFrame(data, columns =['value'])
e = df['value'].mean() # 计算均值
std = df['value'].std() # 计算标准差
stats.kstest(df['value'], 'norm', (e, std))
# .kstest方法:KS检验,参数分别是:待检验的数据,检验方法(这里设置成norm正态分布),均值与标准差
# 结果返回两个值:statistic → D值,pvalue → P值
# p值大于0.05,为正态分布

#KstestResult(statistic=0.1590180704824098, pvalue=0.3066297258358026)
# p值大于0.05,不拒绝原假设,因此上面的数据服从正态分布。
#且一般情况下, stats.kstest(df[‘value’], ‘norm’, (u, std))一条语句就得到p值的结果。

#from scipy import stats
#stats.kstest(rvs, cdf, args=(),…)
#其中rvs可以是数组、生成数组的函数或者scipy.stats里面理论分布的名字
#cdf可以与rvs一致。若rvs和cdf同是数组,则是比较两数组的分布是否一致;一个是数组,另一个是理论分布的名字,则是看样本是否否和理论分布
#args是一个元组,当rvs或者cds是理论分布时,这个参数用来存储理论分布的参数,如正态分布的mean和std。
KL Divergence

KL 散度是一种衡量两个概率分布的匹配程度的指标,两个分布差异越大,KL散度越大。注意如果要查看测试集特征是否与训练集相同,P代表训练集,Q代表测试集,这个公式对于P和Q并不是对称的。

计算公式为:

对于离散分布

对于连续分布

import numpy as np
import scipy.stats

# 随机生成两个离散型分布
x = [np.random.randint(1, 11) for i in range(10)]
print(x)
print(np.sum(x))
px = x / np.sum(x)
print(px)
y = [np.random.randint(1, 11) for i in range(10)]
print(y)
print(np.sum(y))
py = y / np.sum(y)
print(py)

# 利用scipy API进行计算
# scipy计算函数可以处理非归一化情况,因此这里使用
# scipy.stats.entropy(x, y)或scipy.stats.entropy(px, py)均可
KL = scipy.stats.entropy(x, y)
print(KL)

# 实现
KL = 0.0
for i in range(10):
KL += px[i] * np.log(px[i] / py[i])
# print(str(px[i]) + ' ' + str(py[i]) + ' ' + str(px[i] * np.log(px[i] / py[i])))

print(KL)
机器学习模型检测

用特征训练模型来分辨测试集与测试集,若模型效果好的话代表训练集和测试集存在较大差异,否则代表训练集和测试集分布比较相似。

具体做法是构建一个二分类模型,对训练集打上0,测试集打上1,然后shuffle一下进行训练,若分类效果好,代表训练集和测试集区分度很高,那么分布差异就较大。

整理不易,三连

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
美的集团员工自爆工资+年终奖收入明细

美的集团员工自爆工资+年终奖收入明细

叮当当科技
2024-06-15 05:21:36
太阳报:马奎尔在土耳其享受假期,豪华酒店每晚高达6400英镑

太阳报:马奎尔在土耳其享受假期,豪华酒店每晚高达6400英镑

懂球帝
2024-06-15 02:09:10
实在想不明白!一个球队替补,拿着300万底薪,为什么都叫他巨头

实在想不明白!一个球队替补,拿着300万底薪,为什么都叫他巨头

球毛鬼胎
2024-06-15 15:10:53
河南省教育厅副厅长调任河南大学校长是提拔重用吗?

河南省教育厅副厅长调任河南大学校长是提拔重用吗?

呼呼历史论
2024-06-16 07:30:29
勇记谈克莱:现在经纪人会要求球员去取关 奇怪小气但普遍的行为

勇记谈克莱:现在经纪人会要求球员去取关 奇怪小气但普遍的行为

直播吧
2024-06-16 00:44:33
凯特王妃穿白衣现身,棱角分明表情严肃,9岁夏公主坐在爸爸对面

凯特王妃穿白衣现身,棱角分明表情严肃,9岁夏公主坐在爸爸对面

译言
2024-06-15 17:58:34
突发!云南省纪委再发力,两人同日被查落马,坐标文山州

突发!云南省纪委再发力,两人同日被查落马,坐标文山州

小尚爱科普
2024-06-16 00:11:12
赫尔利:听说我考虑湖人老婆马上就哭了 她没打我但非常愤怒激动

赫尔利:听说我考虑湖人老婆马上就哭了 她没打我但非常愤怒激动

直播吧
2024-06-14 11:34:11
中国男足历史地位最高的10大球星,武磊李金羽都挤不进榜单

中国男足历史地位最高的10大球星,武磊李金羽都挤不进榜单

篮球侍郎
2024-06-13 01:45:02
儿子在马航遇难,多年后父亲收到儿子信息,坚信儿子活在平行时空

儿子在马航遇难,多年后父亲收到儿子信息,坚信儿子活在平行时空

阿莱美食汇
2024-06-15 19:23:19
上海第一“鬼站”漕宝路地铁站:殡仪馆停尸房围在四周,诡事频出

上海第一“鬼站”漕宝路地铁站:殡仪馆停尸房围在四周,诡事频出

神秘历史故事
2023-06-29 15:56:50
“以前是学生”“什么原因不做了”,还是boss直聘上的段子有意思

“以前是学生”“什么原因不做了”,还是boss直聘上的段子有意思

新动察
2024-06-16 11:51:23
人过七十,出门一定要做到“六不带”,好福气不请自来

人过七十,出门一定要做到“六不带”,好福气不请自来

布衣粗食68
2024-05-03 15:40:58
证实了!“没邀请美国”

证实了!“没邀请美国”

占豪
2024-06-16 03:12:17
我靠,华为这次的瓜,真的有点大啊

我靠,华为这次的瓜,真的有点大啊

最潮家居评
2024-06-16 01:19:36
北约解释俄罗斯如何补充巨大损失:他们的希望在非洲国家

北约解释俄罗斯如何补充巨大损失:他们的希望在非洲国家

夜相思
2024-06-16 11:25:14
越战老照片 死于战场上的士兵 多少有点恐怖

越战老照片 死于战场上的士兵 多少有点恐怖

那些看得见的老照片
2024-06-07 07:00:02
内蒙古赤峰废弃楼栋发现一具尸体 警方:初步排除他杀

内蒙古赤峰废弃楼栋发现一具尸体 警方:初步排除他杀

新京报
2024-06-16 07:28:10
欧洲杯B组积分榜:西班牙3分暂居死亡之组第1,克罗地亚垫底

欧洲杯B组积分榜:西班牙3分暂居死亡之组第1,克罗地亚垫底

直播吧
2024-06-16 02:09:13
江西一孤儿乞讨长到23岁,突然有人告诉他:你亲妈是广州市委书记

江西一孤儿乞讨长到23岁,突然有人告诉他:你亲妈是广州市委书记

华人星光
2024-06-16 09:32:06
2024-06-16 12:52:49
机器学习与Python社区
机器学习与Python社区
机器学习算法与Python
2464文章数 10252关注度
往期回顾 全部

科技要闻

iPhone 16会杀死大模型APP吗?

头条要闻

媒体:普京开出的停火条件有重大变化 已亮出战略底牌

头条要闻

媒体:普京开出的停火条件有重大变化 已亮出战略底牌

体育要闻

没人永远年轻 但青春如此无敌还是离谱了些

娱乐要闻

上影节红毯:倪妮好松弛,娜扎吸睛

财经要闻

打断妻子多根肋骨 上市公司创始人被公诉

汽车要闻

售17.68万-21.68万元 极狐阿尔法S5正式上市

态度原创

本地
房产
时尚
旅游
公开课

本地新闻

粽情一夏|海河龙舟赛,竟然成了外国人的大party!

房产要闻

万华对面!海口今年首宗超百亩宅地,重磅挂出!

中年女性还是穿连衣裙最有气质!裙摆过膝、腰部收紧,巨显瘦

旅游要闻

@毕业生,江苏这些景区可享免票或优惠

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版