日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分析遇到非正态数据该怎么办?

發布時間:2023/12/19 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分析遇到非正态数据该怎么办? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

總第194篇/張俊紅

我們在前面講過數據的正態性檢驗:正態性檢驗,介紹了檢驗數據是否正態的兩種方法。這一節我們來看一下,如果數據不滿足正態時該怎么辦,答案就是將非正態數據通過Box-Cox變換進一步轉換成符合正態分布的數據。這一篇就給大家分享下Box-Cox變換的具體內容。

Box-Cox變換是多種變換的總稱,具體的公式如下:

上面公式中y(λ)表示變換后的值,根據λ的值不同,屬于不同的變換,當λ值取以下特定的幾個值時就變成了特殊的數據變換:

  • 當λ=0時,Box-Cox變換就變成了對數變換,y(λ) = ln(y);

  • 當λ=0.5時,Box-Cox變換就變成了平方根變換,y(λ) = y^1/2

  • 當λ=1時,Box-Cox變換變換就是它本身,y(λ) = y

  • 當λ=2時,Box-Cox變換就變成了平方變化,y(λ) = y^2

  • 當λ=-1時,Box-Cox變換就變成了倒數變化,y(λ) = 1/y。

λ值除了可以選擇上述特定的值以外,還可以選擇其他值,那當我們拿到一份非正態數據時,我們應該取λ值等于多少對齊進行變換呢?這個又該怎么定呢?

λ值取多少,我們可以利用Python中現成的函數,讓函數自動去探索,然后返回給我們最優的值是多少就可以。這個函數就是boxcox_normmax,這個函數用來計算給定的非正態數據對應的最優λ值。

boxcox_normmax(x[,?brack,?method])參數:x:非正態數據brack:?λ值搜索間隔,默認即可method:計算λ值的方法,有pearsonr、mle、all三種可選,默認為pearsonr,即按照相關性的方法去計算,如果選all,則會返回各種方法的計算結果返回值:返回λ值

當我們得到最優的λ值以后,就可以根據λ值進行數據轉換了,這個時候可以用另外的一個函數boxcox,這個函數是根據指定的λ值對原始數據進行轉換。

boxcox(x[,?lmbda,?alpha])參數:x:非正態數據lambda:轉換的λ值alpha:計算置信區間時所用到的alpha值返回值:boxcox:經過轉換以后的數據maxlog:如果在傳入時lambda參數值沒有指定的話,該函數也會計算一個λ值出來(min_ci, max_ci):如果lambda參數為空且alpha參數不為空時,會計算maxlog的一個置信區間出來

我們上面講了計算λ值有不同的方法,那到底哪種方法計算出來的λ值更加可靠一些呢?我們可以通過另外一個函數boxcox_normplot來查看到底哪種方法計算出來的λ值更可靠。

boxcox_normplot(x,?la,?lb,?plot=None,?N=80)參數:x:非正態數據la,lb:λ值的上下界plot:繪圖的畫布N:橫軸的坐標點個數返回值:lmbdas:通過box-cox算出來的多個λ值ppcc:相關系數,可以理解成λ值的可靠程度

以上就是box-cox變換過程中用到的三個不同的函數,接下來我們給大家實際演示一下這三個函數如何使用。

首先,我們導入一份非正態數據,并繪制這份數據的概率密度圖,需要這份數據的在公眾號后臺回復非正態數據,即可獲得。

import?pandas?as?pd import?numpy?as?np import?seaborn?as?sns df?=?pd.read_excel(r"非正態數據集.xlsx") sns.distplot(df["price"],color?=?"#D86457")

通過上面的概率密度圖,我們可以看出這是一份偏態數據,也就是非正態。接下來我們先利用boxcox_normmax函數來尋找最優λ值,代碼如下:

from?scipy?import?stats stats.boxcox_normmax(df["price"]) --- 返回:0.17896037184755484

在獲得最優λ值以后,我們再利用boxcox函數來進行數據轉換,具體代碼如下:

x?=?stats.boxcox(df["price"],stats.boxcox_normmax(df["price"])) sns.distplot(x,color?=?"#D86457")

對轉換后的數據再次進行概率密度圖的繪制,我們可以看到,數據就很正態了。

接下來再來我們再看一下我們計算出來的λ值是不是最優的,具體代碼如下:

fig?=?plt.figure() ax?=?fig.add_subplot(111) stats.boxcox_normplot(df["price"],?-20,?20,plot?=?ax) plt.axvline(x?=?stats.boxcox_normmax(df["price"]),color?=?"#D86457") plt.show()

中間紅色那條線的位置就是我們求出來最優的λ值,結果很吻合。

以上就是關于Box-Cox變換的理論和實戰內容,大家多多練習。

總結

以上是生活随笔為你收集整理的分析遇到非正态数据该怎么办?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。