熱線電話:13121318867

登錄
首頁大數據時代數據科學中的高級統計概念
數據科學中的高級統計概念
2022-02-28
收藏


在我以前的文章初學者數據科學統計指南推斷統計數據科學家應該知道中,我們討論了幾乎所有的統計基本知識(描述性和推斷性),它們通常用于理解和處理任何數據科學案例研究。在這篇文章中,讓我們稍微超越一下,討論一些不在討論范圍內的高級概念。

Q-Q(分位數-分位數)圖

在了解QQ劇情之前,先了解什么是分位數?

分位數定義了數據集的特定部分,即分位數決定了一個分布中有多少值高于或低于某個極限。特殊分位數是四分位數(四分之一)、五分位數(第五分)和百分位數(第一百分)。

示例:

如果我們把一個分布分成四個相等的部分,我們就說四個四分位數。第一個四分位數包括小于所有值四分之一的所有值。在圖形表示中,它對應于分布總面積的25%。兩個較低的四分位數占所有分布值的50%。第一個四分位數和第三個四分位數之間的四分位數范圍等于圍繞平均值分布的所有值的50%所在的范圍。

在統計學中,q-q(分位數-分位數)圖是通過將兩組分位數相對于另一組繪制而形成的散點圖。如果兩組分位數來自相同的分布,我們應該看到這些點形成了一條大致直線(y=x)。


例如,中位數是一個分位數,其中50%的數據低于該點,50%位于該點之上。Q Q圖的目的是找出兩組數據是否來自相同的分布。在Q Q圖上繪制45度角;如果兩個數據集來自一個共同的分布,那么點將落在那個參考線上。

對于你來說,了解分布是否正常是非常重要的,以便對數據應用各種統計度量,并以更易于理解的可視化方式解釋數據,它們的Q-Q圖就出現在畫面中。Q-Q圖回答的最基本的問題是曲線是否正態分布。

正態分布,但為什么?

Q-Q圖用于尋找隨機變量的分布類型,無論是高斯分布,均勻分布,指數分布,甚至帕累托分布等。

你可以用Q-Q圖的冪來判斷分布的類型,只需看一下圖就可以了。一般來說,我們談論正態分布只是因為我們有一個非常漂亮的概念,即68-95-99.7規則,它完美地符合正態分布,所以我們知道有多少數據位于均值的第一標準差、第二標準差和第三標準差的范圍內。因此,知道一個分布是否正態為我們打開了新的嘗試之門


斜Q-Q圖


Q-Q圖可以找到分布的偏度(不對稱的度量)。

如果Q-Q圖的底端偏離直線,但上端不偏離直線,則分布左偏斜(負偏斜)。

現在,如果Q-Q圖的上端偏離星光線,而下端不偏離,那么分布右偏(正偏)。

尾Q-Q圖


Q-Q圖可以找到分布的峰度(尾度的度量)。

帶有胖尾的分布將使Q-Q圖的兩端偏離直線,其中心跟隨直線,其中作為細尾分布,將在兩端偏差很小或可忽略不計的Q-Q圖項,從而使其完美地適合于正態分布。

Python中的Q-Q圖(源碼)


假設我們有以下100個值的數據集:

導入numpy作為np

#使用100遵循正態分布的值創建數據集 np。隨機。種子(0) 數據=np。隨機。

#查看第一個10值
數據[:10
array([ 1.76405235,  0.40015721,  0.97873798,  2.2408932 ,  1.86755799,
       -0.97727788,  0.95008842, -0.15135721, -0.10321885,  0.4105985 ])

要為該數據集創建Q-Q圖,我們可以使用statsmodels庫中的qqplot()函數:

import statsmodels.api as sm import matplotlib.pyplot as plt

#create Q-Q plot with 45-degree line added to plot
fig = sm.qqplot(data, line='45') plt.show()

在Q-Q圖中,X軸顯示理論分位數。這意味著它不會顯示您的實際數據,而是表示如果數據是正態分布的數據將在哪里。

y軸顯示您的實際數據。這意味著,如果數據值沿45度角的大致直線下降,那么數據是正態分布的。

我們可以在上面的Q-Q圖中看到,數據值傾向于密切遵循45度,這意味著數據很可能是正態分布的。這并不奇怪,因為我們使用numpy.random.normal()函數生成了100個數據值。

相反,如果我們生成了一個由100個均勻分布的值組成的數據集,并為該數據集創建了一個Q-Q圖:

#create dataset of 100 uniformally distributed values data = np.random.uniform(0,1, 1000) #generate Q-Q plot for the dataset fig = sm.qqplot(data, line='45') plt.show()


切比雪夫不等式

In probability, Chebyshev’s Inequality, also known as “Bienayme-Chebyshev” Inequality guarantees that, for a wide class of probability distributions, only a definite fraction of values will be found within a specific distance from the mean of a distribution.


切比雪夫不等式類似于經驗規則(68-95-99.7);但是,后一規則只適用于正態分布。切比雪夫的不等式范圍更廣;它可以應用于任何分布,只要分布包括一個定義的方差和均值。

因此,切比雪夫不等式說,樣本中的數據至少(1-1/k^2)必須落在均值的k標準差內(或者等價地,分布的值不能超過均值的1/k^2標準差)。

其中k-->正實數

如果數據不是正態分布的,那么不同數量的數據可能在一個標準差中。Chebyshev不等式提供了一種方法,可以知道在任何數據分布的均值的k標準差內有多少數據。


切比雪夫不等式具有重要價值,因為它可以應用于任何有均值和方差概率分布。

讓我們考慮一個例子,假設1000名參賽者參加一個工作面試,但只有70個職位可用。為了從所有參賽者中選出最優秀的70名參賽者,東主進行測試,以判斷他們的潛力。測試的平均分是60,標準差是6。如果申請人得了84分,他們能認為他們得到了這份工作嗎?

結果顯示,大約63人的分數在60分以上,所以有70個職位可供選擇,一個得分84分的參賽者可以肯定他們得到了這份工作。

切比雪夫不等式 in Python(Source)


創建一個有1,000,000個值的總體,我使用形狀=2和規模=2的gamma分布(也適用于其他分布)。

導入numpy為np 導入隨機 導入matplotlib.pyplot為plt #用創建人口 形狀,比例=2.,2。#mean=4,std=2*sqrt(2)
mu=形狀*尺度#均值和標準差
sigma=Scale*np.sqrt(形狀)

s=NP.Random.Gamma(形狀,尺度,1000000)

現在從人口中取樣10,000個值。

#sample 10000 values rs = random.choices(s, k=10000)

計數與期望值的距離大于k個標準差的樣本,并使用計數來計算概率。我想描述當k增加時,概率的趨勢,所以我使用k從0.1到3的范圍。

#set k ks = [0.1,0.5,1.0,1.5,2.0,2.5,3.0] #probability list probs = [] #for each k for k in ks: #start count c = 0
    for i in rs: # count if far from mean in k standard deviation
        if abs(i - mu) > k * sigma :
            c += 1
    probs.append(c/10000)

繪制結果:

plot = plt.figure(figsize=(20,10)) #plot each probability plt.xlabel('K')
plt.ylabel('probability')
plt.plot(ks,probs, marker='o')
plot.show() #print each probability print("Probability of a sample far from mean more than k standard deviation:")
for i, prob in enumerate(probs):
    print("k:" + str(ks[i]) + ", probability: " 
          + str(prob)[0:5] + 
          " | in theory, probability should less than: " 
          + str(1/ks[i]**2)[0:5])


從上面的圖和結果可以看出,隨著k的增大,概率在減小,每個k的概率遵循不等式。而且,只有k大于1的情況才有用。如果k小于1,則不等式的右側大于1,這是沒有用的,因為概率不能大于1。

對數正態分布



In probability theory, a Log-normal distribution also known as Galton's distribution is a continuous probability distribution of a random variable whose logarithm is normally distributed.

因此,如果隨機變量X是對數正態分布的,那么y=ln(X)正態分布的。等價地,如果Y具有正態分布,則Y的指數函數即X=exp(Y),具有對數正態分布。

具有低均值和高方差且所有正值的偏態分布適合于這種類型的分布。對數正態分布隨機變量只取正實值。

對數正態分布的概率密度函數的一般公式是:

位置和尺度參數等價于隨機變量對數的均值和標準差。

對數正態分布的形狀由3個參數定義:

  1. σ是形狀參數,(是分布對數的標準差
  2. θμ是位置參數(是分布的平均值)
  3. M是比例參數(也是分布的中位數)

位置和尺度參數等價于上述隨機變量對數的均值和標準差。

如果x=θ,則f(x)=0。θ=0m=1的情況稱為標準對數正態分布。θ等于零的情況稱為2參數對數正態分布。

下圖說明了位置(μ)形狀(σ)參數對對數正態分布概率密度函數的影響:


對數正態分布 in Python(Source)


讓我們考慮一個示例,使用scipy.stats.lognorm函數從μ=1σ=0.5的對數正態分布生成隨機數。

導入numpy作為np 導入matplotlib.pyplotplt scipy.stats導入lognorm

NP.Random.Seed(42)

data=lognorm.rvs(S=0.5,loc=1,Scale=1000,size=1000)

PLT.FIGH(圖=(10,6))
ax=PLT.次圖(111)
plt.title('從對數正態分布生成wrandom數')
AX.HIST(數據,bins=np.logspace(0,5,200),density=true)
ax.set_xscale(“log”)

shape,loc,scale=lognorm.fit(數據)

x=NP.logspace(0,5,200)
pdf=lognorm.pdf(x,shape,loc,scale)

Ax.plot(x,pdf,'y')
plt.show()

冪律分布



In statistics, a Power Law is a functional relationship between two quantities, where a relative change in one quantity results in a proportional relative change in the other quantity, independent of the initial size of those quantities: one quantity varies as a power of another.

例如,用邊長來計算正方形的面積,如果邊長是一倍,則面積乘以四倍。

冪律分布的形式為y=k×α,

其中:

  • XY是感興趣的變量,
  • α是定律的指數,
  • k是常數。


冪律分布只是眾多概率分布中的一種,但它被認為是評估正態分布在一定概率下無法處理的不確定性問題的有價值的工具。

許多過程已被發現在相當大的數值范圍內遵循冪律。從收入分布、流星體大小、地震震級、深度神經網絡中權重矩陣的譜密度、詞的使用、各種網絡中鄰居的數量等(注:這里的冪律是連續分布。最后兩個例子是離散的,但在大范圍內可以建模為連續的)。

Python中的冪律分布(源碼)


讓我們畫出帕累托分布,它是冪律概率分布的一種形式。帕累托分配有時被稱為帕累托原則或'80-20'規則,因為該規則指出,80%的社會財富由20%的人口持有。帕累托分布不是自然規律,而是一種觀察。它在許多現實世界的問題中是有用的。這是一個偏斜的重尾分布。

導入numpy作為np 導入matplotlib.pyplotplt scipy.stats導入pareto

x_m=1#刻度
alpha=[1,2,3]#形狀參數值列表
PLT.FIGH(圖=(10,6))
samples=np.linspace(start=0,stop=5,num=1000)
對于a in alpha:
輸出=np.array([pareto.pdf(x=samples,b=a,loc=0,scale=x_m)])
plt.plot(samples,output.t,label='alpha{0}'.format(a))

plt.xlabel('samples',fontsize=15)
plt.yLabel('pdf',fontsize=15)
plt.title('概率密度函數',fontsize=15)
PLT.LEGEND(loc='最佳')
plt.show()

盒cox變換



The Box-Cox transformation transforms our data so that it closely resembles a normal distribution.

單參數Box-Cox變換在許多統計技術中都有定義,我們假定誤差是正態分布的。這個假設允許我們構造置信區間并進行假設檢驗。通過轉換您的目標變量,我們可以(希望)規范化我們的錯誤(如果它們還不正常的話)。

此外,變換我們的變量可以提高我們的模型的預測能力,因為變換可以消除白噪聲。


Box-Cox變換的核心是一個指數lambda(λ),從-5到5不等。將考慮λ的所有值,并為您的數據選擇最佳值;“最優值”是正態分布曲線的最佳近似值。

單參數Box-Cox變換定義為:

雙參數Box-Cox變換如下:

此外,單參數Box-Cox變換適用于y>0,即僅適用于正值,而雙參數Box-Cox變換適用于y>-λ,即負值。

參數λ是利用輪廓似然函數和擬合優度檢驗來估計的。

如果我們談到Box-cox變換的一些缺點,那么如果解釋是你想做的,那么Box-cox是不推薦的。因為如果λ是非零數,那么轉換后的目標變量可能比簡單地應用日志轉換更難解釋。

第二個絆腳石是Box-Cox變換通常給出預測分布的中值,當我們將變換后的數據還原到其原始規模時。偶爾,我們想要的是平均數,而不是中位數。

Python中的Box-Cox轉換(源碼)


SCIPY的stats包提供了一個名為boxcox的函數,用于執行box-cox冪變換,該變換接收原始非正態分布數據作為輸入,并返回擬合數據以及用于將非正態分布擬合為正態分布的λ值。

#加載必要的包 導入numpynp scipy.stats導入boxcox 導入海運作為sns

#使此示例可復制
NP.Random.Seed(0)

#生成數據集 數據=NP.random.exponential(size=1000)

圖,ax=plt.子圖(1,2)
#繪制數據值的分布 distplot(data,hist=false,kde=true,
kde_kws={'shade':True,'linewidth':2},
標簽=“非正?!?,color=“紅色”,ax=ax[0])

#執行box-對原始數據進行Cox轉換 transformed_data,best_lambda=boxcox(數據)

distplot(transformed_data,hist=False,kde=True,
kde_kws={'shade':True,'linewidth':2},
label=“正常”,color=“紅色”,ax=ax[1])

#向次要情節添加圖例 PLT.LEGEND(loc=“右上部”)

#重新縮放次要圖 圖set_figheight(5)
fig.set_figwidth(10)
#顯示最佳λ值 打?。╢“用于轉換的lambda值:{best_lambda}”)

泊松分布

In probability theory and statistics, the 泊松分布 is a discrete probability distribution that expresses the probability of a given number of events occurring in a fixed interval of time or space if these events occur with a known constant mean rate and independently of the time since the last event.

用非常簡單的術語來說,泊松分布可以用來估計某事發生“x”次的可能性有多大。

泊松過程的一些例子是客戶打電話給幫助中心,原子的放射性衰變,網站的訪問者,到達太空望遠鏡的光子,以及股票價格的波動。泊松過程通常與時間有關,但不一定與時間有關。

泊松分布的公式是:

其中:

  • E是歐拉數(E=2.71828....)
  • k是出現次數
  • K!K的階乘
  • λ等于k期望值,當期望值也等于其方差

可以將Lambda(λ)視為間隔中預期的事件數。當我們改變速率參數λ時,我們改變了在一個區間內看到不同數量事件的概率。下圖是泊松分布的概率質量函數,顯示了在不同速率參數的區間內發生若干事件的概率。


泊松分布也通常被用于金融統計數據的模型,其中理貨量很小,通常為零。例如,在金融學中,它可以用來模擬一個典型的投資者在給定的一天內所做的交易的數量,可以是0(通常),或者是1,或者是2,等等。

作為另一個例子,這個模型可以用來預測在一個給定的時期內,比如說在十年里,對市場的“沖擊”的數量。

泊松分布 in Python

from numpy import random import matplotlib.pyplot as plt import seaborn as sns

lam_list = [1, 4, 9] #list of Lambda values  plt.figure(figsize=(10,6))
samples = np.linspace(start=0, stop=5, num=1000)

for lam in lam_list:
    sns.distplot(random.poisson(lam=lam, size=10), hist=False, label='lambda {0}'.format(lam))

plt.xlabel('Poisson Distribution', fontsize=15)
plt.ylabel('Frequency', fontsize=15)
plt.legend(loc='best')
plt.show()

λ變大時,圖看起來更像是正態分布。

我希望你喜歡閱讀這篇文章,如果你有任何問題或建議,請留下評論。

請在LinkedIn上與我聯系以獲得任何查詢。

感謝閱讀?。?!


References

  • https://calcworkshop.com/joint-概率-分布/切比雪夫-不等式/
  • https://corporatefinanceinstitute.com/resources/knowledge/data-analysy/chebyshevs-inquirement/
  • https://www.itl.nist.gov/div898/handbook/eda/section3/eda3669.htm
  • https://www.statology.org/q-q-plot-python/
  • https://gist.github.com/chaipi-chaya/9eb72978dbbfd7fa4057b493cf6a32e7
  • https://stackoverflow.com/a/41968334/7175247



數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢