<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Python中常態測試的溫和介紹 > 原文: [https://machinelearningmastery.com/a-gentle-introduction-to-normality-tests-in-python/](https://machinelearningmastery.com/a-gentle-introduction-to-normality-tests-in-python/) 處理數據樣本時的一個重要決策點是使用參數統計方法還是非參數統計方法。 參數統計方法假設數據具有已知且特定的分布,通常是高斯分布。如果數據樣本不是高斯樣本,則違反參數統計檢驗的假設,并且必須使用非參數統計方法。 您可以使用一系列技術來檢查數據樣本是否偏離高斯分布,稱為正態性檢驗。 在本教程中,您將發現檢查數據樣本是否偏離正態分布的重要性以及可用于評估數據樣本的一系列技術。 完成本教程后,您將了解: * 樣本是否正常如何決定了與數據樣本一起使用的統計方法的類型。 * 用于限定偏離法線的圖形方法,例如直方圖和Q-Q圖。 * 用于量化偏離正常的統計正態性檢驗。 讓我們開始吧。 * **更新于2018年5月**:更新了Anderson-Darling測試結果的解釋,感謝Elie。 * **更新May / 2018** :更新了關于“拒絕”與“拒絕拒絕”H0的語言。 ![A Gentle Introduction to Normality Tests in Python](img/333a7e43476d9a74a0484c61c6d9f450.jpg) Python中的正常性測試的溫和介紹 [Ramoun Cabuhay](https://www.flickr.com/photos/kahboohigh/34984478670/) 的照片,保留一些權利。 ## 教程概述 本教程分為5個部分;他們是: 1. 正常性假設 2. 測試數據集 3. 視覺正常性檢查 4. 統計正態性檢驗 5. 你應該用什么測試? ## 正常性假設 統計領域的很大一部分涉及假定它是從高斯分布中提取的數據。 如果使用假定高斯分布的方法,并且您的數據來自不同的分布,則結果可能會產生誤導或明顯錯誤。 有許多技術可以檢查您的數據樣本是高斯分布還是高斯分布式,以便使用標準技術,或者使用足夠非高斯分布來代替使用非參數統計方法。 在為數據樣本選擇統計方法時,這是一個關鍵的決策點。我們可以總結這個決定如下: ```py If Data Is Gaussian: Use Parametric Statistical Methods Else: Use Nonparametric Statistical Methods ``` 還有一些中間地帶我們可以假設數據是高斯的 - 足以使用參數方法,或者我們可以使用數據準備技術將數據轉換為足夠高斯以使用參數方法。 您可能需要在三個主要方面對機器學習項目中的數據樣本進行評估;他們是: * 在擬合模型的情況下向模型輸入數據。 * 在模型選擇的情況下進行模型評估。 * 回歸情況下模型預測的殘差。 在本教程中,我們將研究兩類檢查數據樣本是否為高斯的技術: * **圖形方法**。這些是用于繪制數據并定性評估數據是否看起來是高斯的方法。 * **統計檢驗**。這些是計算數據統計數據并量化數據從高斯分布中抽取的可能性的方法。 這種方法通常稱為正態性檢驗。 ## 測試數據集 在我們開始研究正態性測試之前,讓我們首先開發一個我們可以在本教程中使用的測試數據集。 我們將生成一個從高斯分布中抽取的隨機數的小樣本。 為測試數據集選擇高斯隨機數意味著我們確實希望每個測試都能正確識別分布,然而,小樣本大小可能會在結果中引入一些噪聲。 我們將使用 [randn()](https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.randn.html) NumPy函數生成平均值為0且標準差為1的隨機高斯數,即所謂的標準正態變量。然后我們將它們轉換為平均值50和標準差5。 下面列出了完整的示例。 ```py # generate gaussian data from numpy.random import seed from numpy.random import randn from numpy import mean from numpy import std # seed the random number generator seed(1) # generate univariate observations data = 5 * randn(100) + 50 # summarize print('mean=%.3f stdv=%.3f' % (mean(data), std(data))) ``` 運行該示例將生成樣本并打印樣本的平均值和標準差。 我們可以看出,平均值和標準偏差是合理的,但是對于真實的基礎人口平均值和標準偏差的粗略估計,給定小樣本量。 ```py mean=50.303 stdv=4.426 ``` ## 視覺正常性檢查 我們可以創建數據圖來檢查它是否是高斯數據。 這些檢查是定性的,因此不如我們將在下一節中計算的統計方法準確。然而,它們很快并且像統計測試一樣,在您可以打電話詢問數據樣本之前,仍然必須進行解釋。 在本節中,我們將介紹兩種常見的方法,用于目視檢查數據集以檢查它是否是從高斯分布中提取的。 ### 直方圖 快速檢查數據樣本分布的簡單且常用的繪圖是直方圖。 在直方圖中,數據被分成預先指定數量的組,稱為區間。然后將數據分類到每個箱中,并保留每個箱中觀察數的計數。 該圖顯示了橫跨x軸的箱保持其序數關系,以及y軸上每個箱中的計數。 數據樣本具有直方圖的高斯分布圖,顯示熟悉的鐘形。 可以使用 [hist()matplotlib函數](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.hist.html)創建直方圖。默認情況下,從數據樣本中自動估計容器的數量。 下面列出了一個完整的例子,展示了測試問題的直方圖。 ```py # histogram plot from numpy.random import seed from numpy.random import randn from matplotlib import pyplot # seed the random number generator seed(1) # generate univariate observations data = 5 * randn(100) + 50 # histogram plot pyplot.hist(data) pyplot.show() ``` 運行該示例會創建一個直方圖,顯示每個bin中的觀察數。 我們可以看到數據的類似高斯的形狀,雖然不是熟悉的鐘形,但是粗略的近似。 ![Histogram Plot Normality Check](img/5be9881ba985fb86ef6742653b911220.jpg) 直方圖繪制正態性檢查 ### 分位數 - 分位數圖 用于檢查數據樣本分布的另一個流行圖是分位數 - 分位數圖,Q-Q圖或簡稱QQ圖。 該圖生成了我們正在比較的理想分布的自己的樣本,在這種情況下是高斯分布。理想化的樣本被分成組(例如5),稱為分位數。樣本中的每個數據點與來自相同累積分布的理想分布的類似成員配對。 將得到的點繪制為散點圖,其中x軸為理想值,y軸為數據樣本。 分布的完美匹配將通過從繪圖的左下角到右上角的45度角的點線來顯示。通常在圖上繪制一條線以幫助明確這種期望。線上的點偏差表示與預期分布的偏差。 我們可以使用 [qqplot()statsmodels函數](http://www.statsmodels.org/dev/generated/statsmodels.graphics.gofplots.qqplot.html)在Python中開發QQ圖。該函數采用數據樣本,默認情況下假設我們將其與高斯分布進行比較。我們可以通過將'_行_'參數設置為' _s_ '來繪制標準化行。 下面提供了將測試數據集繪制為QQ圖的完整示例。 ```py # QQ Plot from numpy.random import seed from numpy.random import randn from statsmodels.graphics.gofplots import qqplot from matplotlib import pyplot # seed the random number generator seed(1) # generate univariate observations data = 5 * randn(100) + 50 # q-q plot qqplot(data, line='s') pyplot.show() ``` 運行該示例創建QQ圖,其顯示對角線中的點的散點圖,緊密擬合來自高斯分布的樣本的預期對角線圖案。 有一些小的偏差,特別是在圖的底部,這是小數據樣本所預期的。 ![Q-Q Plot Normality Check](img/1d72761d3b300cca79d94e6735ac66ec.jpg) QQ圖正常檢查 ## 統計正態性檢驗 我們可以使用許多統計測試來量化數據樣本是否看起來好像是從高斯分布中提取的。 每個測試都做出不同的假設,并考慮數據的不同方面。 我們將在本節中介紹3種常用測試,您可以將這些測試應用于您自己的數據樣本。 ### 解釋考試 在應用統計測試之前,您必須知道如何解釋結果。 每個測試至少會返回兩件事: * **統計**:通過測試計算的數量,通過將其與測試統計分布的臨界值進行比較,可以在測試環境中進行解釋。 * **p值**:用于解釋測試,在這種情況下,樣本是否是從高斯分布中提取的。 每個測試都會計算特定于測試的統計信息。該統計數據可以幫助解釋結果,但可能需要更深入的統計數據和更深入的特定統計檢驗知識。相反,p值可用于在實際應用中快速準確地解釋統計量。 測試假設樣本是從高斯分布中提取的。從技術上講,這稱為零假設,即H0。選擇稱為α的閾值水平,通常為5%(或0.05),用于解釋p值。 在這些測試的SciPy實現中,您可以按如下方式解釋p值。 * **p &lt;= alpha** :拒絕H0,不正常。 * **p&gt; alpha** :無法拒絕H0,正常。 這意味著,一般來說,我們正在尋找具有更大p值的結果,以確認我們的樣本可能來自高斯分布。 高于5%的結果并不意味著零假設是正確的。這意味著,鑒于現有證據,這很可能是真的。 p值不是數據擬合高斯分布的概率;它可以被認為是一個有助于我們解釋統計測試的價值。 ### Shapiro-Wilk測試 [Shapiro-Wilk測試](https://en.wikipedia.org/wiki/Shapiro%E2%80%93Wilk_test)評估數據樣本并量化數據從高斯分布中抽取的可能性,以Samuel Shapiro和Martin Wilk命名。 在實踐中,Shapiro-Wilk測試被認為是對正常性的可靠測試,盡管有一些建議認為該測試可能適用于較小的數據樣本,例如成千上萬的觀察或更少。 [shapiro()SciPy](https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.shapiro.html) 函數將計算給定數據集上的Shapiro-Wilk。該函數返回由測試計算的W統計量和p值。 下面列出了對數據集執行Shapiro-Wilk測試的完整示例。 ```py # Shapiro-Wilk Test from numpy.random import seed from numpy.random import randn from scipy.stats import shapiro # seed the random number generator seed(1) # generate univariate observations data = 5 * randn(100) + 50 # normality test stat, p = shapiro(data) print('Statistics=%.3f, p=%.3f' % (stat, p)) # interpret alpha = 0.05 if p > alpha: print('Sample looks Gaussian (fail to reject H0)') else: print('Sample does not look Gaussian (reject H0)') ``` 首先運行示例計算數據樣本的測試,然后打印統計和計算的p值。 p值感興趣并且發現數據可能來自高斯分布。 ```py Statistics=0.992, p=0.822 Sample looks Gaussian (fail to reject H0) ``` ### D'Agostino的K ^ 2測試 [D'Agostino的K ^ 2檢驗](https://en.wikipedia.org/wiki/D%27Agostino%27s_K-squared_test)根據數據計算匯總統計量,即峰度和偏度,以確定數據分布是否偏離正態分布,以Ralph D'Agostino命名。 * **偏斜**是左或右推送分布量的量化,是分布中不對稱性的度量。 * **峰度**量化了尾部的分布量。它是一種簡單且常用的常態統計檢驗。 D'Agostino的K ^ 2檢驗可通過 [normaltest()SciPy函數](https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.normaltest.html)獲得,并返回檢驗統計量和p值。 下面列出了數據集上D'Agostino的K ^ 2檢驗的完整示例。 ```py # D'Agostino and Pearson's Test from numpy.random import seed from numpy.random import randn from scipy.stats import normaltest # seed the random number generator seed(1) # generate univariate observations data = 5 * randn(100) + 50 # normality test stat, p = normaltest(data) print('Statistics=%.3f, p=%.3f' % (stat, p)) # interpret alpha = 0.05 if p > alpha: print('Sample looks Gaussian (fail to reject H0)') else: print('Sample does not look Gaussian (reject H0)') ``` 運行該示例計算統計信息并打印統計信息和p值。 p值被解釋為5%的α,并且發現測試數據集沒有顯著偏離正常。 ```py Statistics=0.102, p=0.950 Sample looks Gaussian (fail to reject H0) ``` ### 安德森 - 達林測試 [Anderson-Darling測試](https://en.wikipedia.org/wiki/Anderson%E2%80%93Darling_test)是一項統計測試,可用于評估數據樣本是否來自眾多已知數據樣本之一,以Theodore Anderson和Donald Darling命名。 它可用于檢查數據樣本是否正常。該測試是更復雜的非參數擬合優度統計檢驗的修改版本,稱為 [Kolmogorov-Smirnov檢驗](https://en.wikipedia.org/wiki/Kolmogorov%E2%80%93Smirnov_test)。 Anderson-Darling測試的一個特征是它返回一個臨界值列表而不是單個p值。這可以為更徹底地解釋結果提供基礎。 [anderson()SciPy函數](https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.anderson.html)實現了Anderson-Darling測試。它將數據樣本和分發的名稱作為參數進行測試。默認情況下,測試將檢查高斯分布( _dist ='norm'_)。 下面列出了計算樣本問題的Anderson-Darling檢驗的完整示例。 ```py # Anderson-Darling Test from numpy.random import seed from numpy.random import randn from scipy.stats import anderson # seed the random number generator seed(1) # generate univariate observations data = 5 * randn(100) + 50 # normality test result = anderson(data) print('Statistic: %.3f' % result.statistic) p = 0 for i in range(len(result.critical_values)): sl, cv = result.significance_level[i], result.critical_values[i] if result.statistic < result.critical_values[i]: print('%.3f: %.3f, data looks normal (fail to reject H0)' % (sl, cv)) else: print('%.3f: %.3f, data does not look normal (reject H0)' % (sl, cv)) ``` 運行該示例計算測試數據集上的統計信息并打印關鍵值。 統計檢驗中的臨界值是一系列預定義的顯著性邊界,如果計算的統計量小于臨界值,則H0可能無法被拒絕。測試返回一系列不同的常用顯著性水平的臨界值,而不僅僅是單個p值。 如果計算的檢驗統計量小于選定顯著性水平的臨界值,我們可以通過不拒絕數據正常的零假設來解釋結果。 我們可以看到,在每個顯著性水平,測試發現數據遵循正態分布 ```py Statistic: 0.220 15.000: 0.555, data looks normal (fail to reject H0) 10.000: 0.632, data looks normal (fail to reject H0) 5.000: 0.759, data looks normal (fail to reject H0) 2.500: 0.885, data looks normal (fail to reject H0) 1.000: 1.053, data looks normal (fail to reject H0) ``` ## 你應該用什么測試? 我們已經介紹了一些常態測試,但這不是所有存在的測試。 那么你使用哪種測試? 我建議在適當的時候在您的數據上全部使用它們。 那么問題就是,你如何解釋結果?如果測試不同意,他們經常會這樣做怎么辦? 我有兩個建議可以幫助您思考這個問題。 ### 艱難的失敗 由于各種原因,您的數據可能不正常。每個測試都考察了樣本是否是從略微不同的角度從高斯分布中提取的問題。 一次正態性測試失敗意味著您的數據不正常。就如此容易。 您可以調查數據不正常的原因,也可以使用數據準備技術使數據更正常。 或者您可以開始研究使用非參數統計方法而不是參數方法。 ### 軟失敗 如果某些方法表明樣本是高斯的而有些則不是,那么可能會將此作為您的數據類似高斯的指示。 在許多情況下,您可以將數據視為高斯數據并繼續使用所選的參數統計方法。 ## 擴展 本節列出了一些擴展您可能希望探索的教程的想法。 * 列出另外兩個例子,當您認為正態性測試在機器學習項目中可能有用時。 * 開發自己的人為數據集并應用每個常態測試。 * 加載標準機器學習數據集并對每個實值變量應用常態測試。 如果你探索任何這些擴展,我很想知道。 ## 進一步閱讀 如果您希望深入了解,本節將提供有關該主題的更多資源。 ### API * [numpy.random.seed()API](https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.seed.html) * [numpy.random.randn()API](https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.randn.html) * [scipy.stats.normaltest()API](https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.normaltest.html) * [scipy.stats.shapiro()API](https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.shapiro.html) * [scipy.stats.anderson()API](https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.anderson.html) * [statsmodels.graphics.gofplots.qqplot()API](http://www.statsmodels.org/dev/generated/statsmodels.graphics.gofplots.qqplot.html) * [matplotlib.pyplot.hist()API](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.hist.html) ### 用品 * [維基百科的正常性測試](https://en.wikipedia.org/wiki/Normality_test) * [維基百科上的直方圖](https://en.wikipedia.org/wiki/Histogram) * [維基百科上的Q-Q情節](https://en.wikipedia.org/wiki/Q%E2%80%93Q_plot) * [D'Agostino在維基百科上的K平方測試](https://en.wikipedia.org/wiki/D%27Agostino%27s_K-squared_test) * [維基百科上的Anderson-Darling測試](https://en.wikipedia.org/wiki/Anderson%E2%80%93Darling_test) * 維基百科上的 [Shapiro-Wilk測試](https://en.wikipedia.org/wiki/Shapiro%E2%80%93Wilk_test) ## 摘要 在本教程中,您發現了檢查數據樣本是否偏離正態分布以及可用于評估數據樣本的一系列技術的重要性。 具體來說,你學到了: * 樣本是否正常如何決定了與數據樣本一起使用的統計方法的類型。 * 用于限定偏離正常的圖形方法,例如直方圖和Q-Q圖。 * 用于量化偏離正常的統計正態性檢驗。 你有任何問題嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看