使用K-S检验一个数列是否服从正态分布、两个数列是否服从相同的分布(转载+自己笔记)
K-S檢驗全稱:
Kolmogorov-Smirnov檢驗
下面內容來自[1]
假設檢驗的基本思想:
? ? ? ?若對總體的某個假設是真實的,那么不利于或者不能支持這一假設的事件A在一次試驗中是幾乎不可能發生的。如果事件A真的發生了,則有理由懷疑這一假設的真實性,從而拒絕該假設。
實質分析:
? ? ? ? 假設檢驗實質上是對原假設是否正確進行檢驗,因此檢驗過程中要使原假設得到維護,使之不輕易被拒絕;否定原假設必須有充分的理由。同時,當原假設被接受時,也只能認為否定該假設的根據不充分,而不是認為它絕對正確。
?
1、檢驗指定的數列是否服從正態分布
借助假設檢驗的思想,利用K-S檢驗可以對數列的性質進行檢驗,看代碼:
from scipy.stats import kstest import numpy as npx = np.random.normal(0,1,1000) test_stat = kstest(x, 'norm') #>>> test_stat #(0.021080234718821145, 0.76584491300591395)首先生成1000個服從N(0,1)標準正態分布的隨機數,
在使用k-s檢驗該數據是否服從正態分布,提出假設:
x服從正態分布。
最終返回的結果,p-value=0.76584491300591395,比指定的顯著水平(假設為5%)大,則我們不能拒絕假設:x服從正態分布。
這并不是說x服從正態分布一定是正確的,而是說沒有充分的證據證明x不服從正態分布。因此我們的假設被接受,認為x服從正態分布。
如果p-value小于我們指定的顯著性水平,則我們可以肯定的拒絕提出的假設,認為x肯定不服從正態分布,這個拒絕是絕對正確的。
?
2、檢驗指定的兩個數列是否服從相同分布
from scipy.stats import ks_2samp beta=np.random.beta(7,5,1000) norm=np.random.normal(0,1,1000) ks_2samp(beta,norm)?
運行結果:
(0.60099999999999998, 4.7405805465370525e-159)
?
我們先分別使用beta分布和normal分布產生兩個樣本大小為1000的數列,使用ks_2samp檢驗兩個數列是否來自同一個樣本,提出假設:beta和norm服從相同的分布。
最終返回的結果,p-value=4.7405805465370525e-159,
比指定的顯著水平(假設為5%)小,則我們完全可以認為:
beta和norm不服從同一分布。
#--------------上面是轉載,下面是補充------------------------------
上面返回的結果中還有個值是0.60099999999999998,這個是什么呢?(下面內容來自[2])
?
假定兩個獨立樣本的樣本量分別為n1,n2,
為兩個樣本的累積經驗分布函數,,
構造檢驗統計量Z(近似正態分布):
上面的0.60099999999999998就是這個Z,這個統計量的大意是兩個數列在某個位置最大的差值是不是比較離譜.
?
################################################################################3
補充:
這個方法用來篩選特征在train和test之間的分布一致性十分的苛刻:
from scipy.stats import ks_2samp# pvalue小于0.05我們認為兩列數據分布不一致,予以刪除 #---------------------------------訓練集和驗證集之間--------------------------------------------------------- V=["V"+f"{i+1}"for i in range(339)]#所有我們關心的特征delete_list=[] remain_list=[] for feature in V:beta=train[feature]norm=test[feature]result=ks_2samp(beta,norm)if result.pvalue<0.05: # print("p_value=",result.pvalue)delete_list.append(feature)else:remain_list.append(feature) #---------------------------------isFraud=1,isFraud=0---------------------------------------------------------print("train和test中分布顯著不一致的特征有",delete_list) print("train和test中分布一致的特征有",remain_list)運行結果是:
train和test中分布顯著不一致的特征有 ['V1', 'V2', 'V3', 'V4', 'V5', 'V6', 'V7', 'V8', 'V9', 'V10', 'V11', 'V12', 'V13', 'V14', 'V15', 'V16', 'V17', 'V18', 'V19', 'V20', 'V21', 'V22', 'V23', 'V24', 'V25', 'V26', 'V27', 'V28', 'V29', 'V30', 'V31', 'V32', 'V33', 'V34', 'V35', 'V36', 'V37', 'V38', 'V39', 'V40', 'V41', 'V42', 'V43', 'V44', 'V45', 'V46', 'V47', 'V48', 'V49', 'V50', 'V51', 'V52', 'V53', 'V54', 'V55', 'V56', 'V57', 'V58', 'V59', 'V60', 'V61', 'V62', 'V63', 'V64', 'V65', 'V66', 'V67', 'V68', 'V69', 'V70', 'V71', 'V72', 'V73', 'V74', 'V75', 'V76', 'V77', 'V78', 'V79', 'V80', 'V81', 'V82', 'V83', 'V84', 'V85', 'V86', 'V87', 'V88', 'V89', 'V90', 'V91', 'V92', 'V93', 'V94', 'V95', 'V96', 'V97', 'V98', 'V99', 'V100', 'V101', 'V102', 'V103', 'V104', 'V105', 'V106', 'V109', 'V114', 'V115', 'V116', 'V123', 'V124', 'V125', 'V126', 'V127', 'V128', 'V129', 'V130', 'V131', 'V132', 'V133', 'V134', 'V135', 'V136', 'V137', 'V138', 'V139', 'V140', 'V141', 'V142', 'V143', 'V144', 'V145', 'V146', 'V147', 'V148', 'V149', 'V150', 'V151', 'V152', 'V153', 'V154', 'V155', 'V156', 'V157', 'V158', 'V159', 'V160', 'V161', 'V162', 'V163', 'V164', 'V165', 'V166', 'V167', 'V168', 'V169', 'V170', 'V171', 'V172', 'V173', 'V174', 'V175', 'V176', 'V177', 'V178', 'V179', 'V180', 'V181', 'V182', 'V183', 'V184', 'V185', 'V186', 'V187', 'V188', 'V189', 'V190', 'V191', 'V192', 'V193', 'V194', 'V195', 'V196', 'V197', 'V198', 'V199', 'V200', 'V201', 'V202', 'V203', 'V204', 'V205', 'V206', 'V207', 'V208', 'V209', 'V210', 'V211', 'V212', 'V213', 'V214', 'V215', 'V216', 'V217', 'V218', 'V219', 'V220', 'V221', 'V222', 'V223', 'V224', 'V225', 'V226', 'V227', 'V228', 'V229', 'V230', 'V231', 'V232', 'V233', 'V234', 'V235', 'V236', 'V237', 'V238', 'V239', 'V240', 'V241', 'V242', 'V243', 'V244', 'V245', 'V246', 'V247', 'V248', 'V249', 'V250', 'V251', 'V252', 'V253', 'V254', 'V255', 'V256', 'V257', 'V258', 'V259', 'V260', 'V261', 'V262', 'V263', 'V264', 'V265', 'V266', 'V267', 'V268', 'V269', 'V270', 'V271', 'V272', 'V273', 'V274', 'V275', 'V276', 'V277', 'V278', 'V279', 'V280', 'V281', 'V282', 'V283', 'V285', 'V287', 'V288', 'V289', 'V290', 'V291', 'V292', 'V293', 'V294', 'V295', 'V296', 'V297', 'V298', 'V299', 'V300', 'V301', 'V302', 'V303', 'V304', 'V306', 'V307', 'V308', 'V309', 'V310', 'V311', 'V312', 'V313', 'V314', 'V315', 'V316', 'V317', 'V318', 'V319', 'V320', 'V321', 'V322', 'V323', 'V324', 'V325', 'V326', 'V327', 'V328', 'V329', 'V330', 'V331', 'V332', 'V333', 'V334', 'V335', 'V336', 'V337', 'V338', 'V339'] train和test中分布顯著一致的特征有 ['V107', 'V108', 'V110', 'V111', 'V112', 'V113', 'V117', 'V118', 'V119', 'V120', 'V121', 'V122', 'V284', 'V286', 'V305']可以看到,絕大部分特征都被剔除了。
?
Reference:
[1]https://www.cnblogs.com/chaosimple/p/4090456.html
[2]https://blog.csdn.net/qq_38984677/article/details/82115930
總結
以上是生活随笔為你收集整理的使用K-S检验一个数列是否服从正态分布、两个数列是否服从相同的分布(转载+自己笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LightGBMError: Lengt
- 下一篇: 海量特征按照缺失值null/NAN数量异