日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

高斯變換簡介及Python示例

 taotao_2016 2019-06-07

高斯變換簡介及Python示例

線性回歸和邏輯回歸等機(jī)器學(xué)習(xí)模型假設(shè)變量是正態(tài)分布的。如果一個變量不是正態(tài)分布,有時可以找到一個數(shù)學(xué)變換來把一個變量按照高斯分布進(jìn)行變換。

遵循高斯分布的變量變換:

這些是一些數(shù)學(xué)方法來轉(zhuǎn)換變量,使它們遵循高斯分布。沒有一個比另一個好。它們主要取決于變量的原始分布。

  1. 對數(shù)變換
  2. 倒數(shù)變換
  3. 平方根變換
  4. 指數(shù)變換

在本文中,我們將使用比較著名的泰坦尼克號機(jī)器學(xué)習(xí)數(shù)據(jù)集(https://www./c/titanic/data)的“Age”變量進(jìn)行這些變換。

讓我們從導(dǎo)入Python包并加載機(jī)器學(xué)習(xí)數(shù)據(jù)集開始

#Importing Packagesimport numpy as np import pandas as pdimport matplotlib.pyplot as pltimport pylabimport scipy.stats as stats#Importing datasetdata = pd.read_csv('train.csv', usecols = ['Age'])

高斯變換簡介及Python示例

然后讓我們檢查是否有任何缺失值并使用dropna方法刪除它們

data.apply(lambda x: sum(x.isnull()),axis=0)

高斯變換簡介及Python示例

'Age'中的Null值數(shù)

data = data.dropna()

原始分布:

讓我們從Titanic機(jī)器學(xué)習(xí)數(shù)據(jù)集中可視化變量的分布開始,我們繪制直方圖來可視化鐘形圖和Q-Q圖(兩者都用于可視化變量是否服從高斯分布)。記住,如果變量是正態(tài)分布的,我們應(yīng)該看到在理論分位數(shù)上有一條45度的直線。也就是說,實際分位數(shù)應(yīng)該與理論值完全一致。

def diagnostic_plots(df, variable):   plt.figure(figsize=(15,6)) plt.subplot(1,2,1) df[variable].hist() #plt.xlim((0, 100))  plt.subplot(1,2,2) stats.probplot(df[variable], dist='norm', plot = pylab)  plt.show() diagnostic_plots(data, 'Age')

高斯變換簡介及Python示例

在這里,我們創(chuàng)建一個函數(shù)diagnostic_plots來可視化變量是否遵循高斯分布。它將data frame和目標(biāo)變量作為輸入?yún)?shù)。函數(shù)的第一部分是直方圖,第二部分是Q-Q圖。我們在變量'Age'上調(diào)用函數(shù)。

高斯變換簡介及Python示例

原始分布

該變量遵循近似高斯分布。它略微偏斜,這解釋了與下端的45度線(紅線)的偏差。

現(xiàn)在讓我們應(yīng)用Age變量的所有上述變換并評估結(jié)果。

對數(shù)變換:

讓我們應(yīng)用Numpy中的log函數(shù)并繪制診斷圖。

data['Age_log'] = np.log(data.Age)diagnostic_plots(data, 'Age_log')

高斯變換簡介及Python示例

對數(shù)變換

我們可以看到這個變換并沒有使Age服從高斯分布。記住log0沒有定義。因此,如果您的數(shù)據(jù)包含0 -給它一個偏移量或使用另一種變換方法。

倒數(shù)變換:

data['Age_reciprocal'] = 1 / data.Agediagnostic_plots(data, 'Age_reciprocal')

高斯變換簡介及Python示例

倒數(shù)變換

我們可以看到這種變換也沒有幫助。

平方根變換:

接下來,我們將嘗試平方根變換。

data['Age_sqrt'] = data.Age**(1/2)diagnostic_plots(data, 'Age_sqrt')

高斯變換簡介及Python示例

平方根變換

結(jié)果比其他好一點,但仍然不是高斯。開始和結(jié)束都有一些偏差。最后,讓我們嘗試指數(shù)變換。

指數(shù)變換:

在這里,我們可以嘗試任何我們想要的指數(shù)。我選擇了1.2作為指數(shù)。但是你可以嘗試不同的指數(shù),看看分布如何變化。

data['Age_exp'] = data.Age**(1/1.2)diagnostic_plots(data, 'Age_exp')

高斯變換簡介及Python示例

指數(shù)變換

正如你在直方圖中看到的那樣,這種變換使得“Age”變量遵循幾乎高斯分布。直方圖中的峰值更加居中,并且Q-Q圖中的下端值附近僅有一些偏差。因此,在這種特殊情況下,我們可以看到指數(shù)變換效果最好。

應(yīng)該對變量進(jìn)行變換嗎?

這取決于你的最終目標(biāo)。在業(yè)務(wù)環(huán)境中,最好使用變量的原始分布來訓(xùn)練機(jī)器學(xué)習(xí)模型,因為在使用機(jī)器學(xué)習(xí)模型進(jìn)行預(yù)測時,模型更容易解釋,將來可能出現(xiàn)的問題也更少。另一方面,在競賽的情況下,最好選擇一個表現(xiàn)最好的變量。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多