<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 如何使用統計顯著性檢驗來解釋機器學習結果 > 原文: [https://machinelearningmastery.com/use-statistical-significance-tests-interpret-machine-learning-results/](https://machinelearningmastery.com/use-statistical-significance-tests-interpret-machine-learning-results/) 在比較兩種不同的機器學習算法或將相同算法與不同配置進行比較時,最好收集一組結果。 考慮到大多數機器學習算法的隨機性,重復每次實驗運行30次或更多次會給出一組結果,您可以從中計算平均預期表現。 如果兩種算法或配置的平均預期表現不同,您如何知道差異是顯著的,有多重要? 統計顯著性檢驗是幫助解釋機器學習實驗結果的重要工具。此外,這些工具的發現可以幫助您更好,更自信地呈現您的實驗結果,并為您的預測建模問題選擇正確的算法和配置。 在本教程中,您將了解如何使用Python中的統計顯著性測試來研究和解釋機器學習實驗結果。 完成本教程后,您將了解: * 如何應用常態測試來確認您的數據是否(或不是)正態分布。 * 如何對正態分布結果應用參數統計顯著性檢驗。 * 如何對更復雜的結果分布應用非參數統計顯著性檢驗。 讓我們開始吧。 * **更新May / 2018** :更新了與“拒絕”和“拒絕拒絕”H0相關的語言。 ![How to Use Statistical Significance Tests to Interpret Machine Learning Results](img/def30fc8352ac3aa72461269bd36baa2.jpg) 如何使用統計顯著性檢驗來解釋機器學習結果 照片來自 [oatsy40](https://www.flickr.com/photos/oatsy40/14477068362/) ,保留一些權利。 ## 教程概述 本教程分為6個部分。他們是: 1. 生成樣本數據 2. 摘要統計 3. 正常性測試 4. 比較高斯結果的均值 5. 比較具有不同方差的高斯結果的均值 6. 比較非高斯結果的均值 本教程假定Python 2或3以及具有NumPy,Pandas和Matplotlib的SciPy環境。 ## 生成樣本數據 情況是您從兩個算法或同一算法的兩個不同配置獲得實驗結果。 每個算法已在測試數據集上多次試驗并且已收集技能分數。我們留下了兩個技能分數。 我們可以通過生成兩個以略微不同的方式分布的高斯隨機數群來模擬這一點。 下面的代碼生成第一個算法的結果。總共1000個結果存儲在名為 _results1.csv_ 的文件中。結果來自高斯分布,平均值為50,標準差為10。 ```py from numpy.random import seed from numpy.random import normal from numpy import savetxt # define underlying distribution of results mean = 50 stev = 10 # generate samples from ideal distribution seed(1) results = normal(mean, stev, 1000) # save to ASCII file savetxt('results1.csv', results) ``` 下面是 _results1.csv_ 的前5行數據片段。 ```py 6.624345363663240960e+01 4.388243586349924641e+01 4.471828247736544171e+01 3.927031377843829318e+01 5.865407629324678851e+01 ... ``` 我們現在可以生成第二個算法的結果。我們將使用相同的方法,并從稍微不同的高斯分布繪制結果(具有相同標準偏差的平均值為60)。結果寫入 _results2.csv_ 。 ```py from numpy.random import seed from numpy.random import normal from numpy import savetxt # define underlying distribution of results mean = 60 stev = 10 # generate samples from ideal distribution seed(1) results = normal(mean, stev, 1000) # save to ASCII file savetxt('results2.csv', results) ``` 以下是 _results2.csv_ 的前5行樣本。 ```py 7.624345363663240960e+01 5.388243586349924641e+01 5.471828247736544171e+01 4.927031377843829318e+01 6.865407629324678851e+01 ... ``` 展望未來,我們將假裝我們不知道任何一組結果的基本分布。 我每個實驗任意選擇1000個結果的人群。使用30或100個結果的群體來實現適當的良好估計(例如低標準誤差)更為現實。 如果您的結果不是高斯結果,請不要擔心;我們將看看這些方法如何分解非高斯數據以及使用哪種替代方法。 ## 摘要統計 收集結果后的第一步是查看一些摘要統計信息并了解有關數據分布的更多信息。 這包括查看摘要統計數據和數據圖。 下面是一個完整的代碼清單,用于查看兩組結果的一些摘要統計信息。 ```py from pandas import DataFrame from pandas import read_csv from matplotlib import pyplot # load results file results = DataFrame() results['A'] = read_csv('results1.csv', header=None).values[:, 0] results['B'] = read_csv('results2.csv', header=None).values[:, 0] # descriptive stats print(results.describe()) # box and whisker plot results.boxplot() pyplot.show() # histogram results.hist() pyplot.show() ``` 該示例加載兩組結果,并通過打印摘要統計信息開始。 _results1.csv_ 中的數據稱為“A”, _results2.csv_ 中的數據稱為“B”,為簡潔起見。 我們假設數據代表測試數據集上的錯誤分數,并且最小化分數是目標。 我們可以看到平均A(50.388125)優于B(60.388125)。我們也可以在中位數(第50百分位數)看到相同的故事。查看標準差,我們還可以看到兩個分布似乎都有相似(相同)的差異。 ```py A B count 1000.000000 1000.000000 mean 50.388125 60.388125 std 9.814950 9.814950 min 19.462356 29.462356 25% 43.998396 53.998396 50% 50.412926 60.412926 75% 57.039989 67.039989 max 89.586027 99.586027 ``` 接下來,創建比較兩組結果的盒子和須狀圖。該框捕獲中間50%的數據,異常值顯示為點,綠線顯示中位數。我們可以看到數據確實具有來自兩個分布的類似差異,并且看起來圍繞中值對稱。 A的結果看起來比B好。 ![Box and Whisker Plots of Both Sets of Results](img/42650400f46637e86e7d37c6a82153bb.jpg) 兩組結果的盒子和晶須圖 最后,繪制兩組結果的直方圖。 這些圖強烈表明兩組結果均來自高斯分布。 ![Histogram Plots of Both Sets of Results](img/2dcece350f122a12bc182e17e5fedff3.jpg) 兩組結果的直方圖 ## 正常性測試 從高斯分布中提取的數據可以更容易使用,因為有許多專門為此案例設計的工具和技術。 我們可以使用統計檢驗來確認從兩個分布中得出的結果都是高斯分布(也稱為正態分布)。 在SciPy中,這是 [normaltest()](https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.normaltest.html)函數。 從文檔中,測試描述為: > 測試樣本是否與正態分布不同。 測試的零假設(H0)或默認期望是統計描述正態分布。 如果p值大于0.05,我們就不能拒絕這個假設。如果p值&lt;= 0.05,我們拒絕這個假設。在這種情況下,我們相信分布不正常,95%的置信度。 下面的代碼加載 _results1.csv_ 并確定數據是否可能是高斯數據。 ```py from pandas import read_csv from scipy.stats import normaltest from matplotlib import pyplot result1 = read_csv('results1.csv', header=None) value, p = normaltest(result1.values[:,0]) print(value, p) if p >= 0.05: print('It is likely that result1 is normal') else: print('It is unlikely that result1 is normal') ``` 運行該示例首先打印計算的統計量和從高斯分布計算統計量的p值。 我們可以看到 _results1.csv_ 很可能是高斯分布。 ```py 2.99013078116 0.224233941463 It is likely that result1 is normal ``` 我們可以使用來自 _results2.csv_ 的數據重復相同的測試。 完整的代碼清單如下。 ```py from pandas import read_csv from scipy.stats import normaltest from matplotlib import pyplot result2 = read_csv('results2.csv', header=None) value, p = normaltest(result2.values[:,0]) print(value, p) if p >= 0.05: print('It is likely that result2 is normal') else: print('It is unlikely that result2 is normal') ``` 運行該示例提供相同的統計p值和結果。 兩組結果都是高斯分布。 ```py 2.99013078116 0.224233941463 It is likely that result2 is normal ``` ## 比較高斯結果的均值 兩組結果都是高斯分布,具有相同的方差;這意味著我們可以使用Student t檢驗來查看兩個分布均值之間的差異是否具有統計顯著性。 在SciPy中,我們可以使用 [ttest_ind()](https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html)函數。 該測試描述為: > 計算兩個獨立分數樣本均值的T檢驗。 測試的零假設(H0)或默認期望是兩個樣本都來自相同的群體。如果我們不能拒絕這個假設,那就意味著手段之間沒有顯著差異。 如果我們得到&lt; = 0.05的p值,則意味著我們可以拒絕零假設,并且平均值顯著不同,置信度為95%。這意味著對于100個中的95個類似樣本,平均值將顯著不同,并且在100個案例中的5個中并非如此。 除了高斯數據之外,該統計檢驗的一個重要假設是兩個分布具有相同的方差。我們通過回顧上一步中的描述性統計數據來了解這種情況。 The complete code listing is provided below. ```py from pandas import read_csv from scipy.stats import ttest_ind from matplotlib import pyplot # load results1 result1 = read_csv('results1.csv', header=None) values1 = result1.values[:,0] # load results2 result2 = read_csv('results2.csv', header=None) values2 = result2.values[:,0] # calculate the significance value, pvalue = ttest_ind(values1, values2, equal_var=True) print(value, pvalue) if pvalue > 0.05: print('Samples are likely drawn from the same distributions (fail to reject H0)') else: print('Samples are likely drawn from different distributions (reject H0)') ``` 運行該示例將打印統計信息和p值。我們可以看到p值遠低于0.05。 事實上,它是如此之小,我們幾乎可以確定手段之間的差異在統計上是顯著的。 ```py -22.7822655028 2.5159901708e-102 Samples are likely drawn from different distributions (reject H0) ``` ## 比較具有不同方差的高斯結果的均值 如果兩組結果的均值相同,但方差不同,該怎么辦? 我們無法按原樣使用學生t檢驗。實際上,我們必須使用名為Welch t檢驗的測試的修改版本。 在SciPy中,這是相同的 [ttest_ind()](https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html)函數,但我們必須將“ _equal_var_ ”參數設置為“ _False_ ”以指示差異不相等。 我們可以通過一個例子證明這一點,我們生成兩組結果,其中非常相似(50對51)和非常不同的標準差(1對10)。我們將生成100個樣本。 ```py from numpy.random import seed from numpy.random import normal from scipy.stats import ttest_ind # generate results seed(1) n = 100 values1 = normal(50, 1, n) values2 = normal(51, 10, n) # calculate the significance value, pvalue = ttest_ind(values1, values2, equal_var=False) print(value, pvalue) if pvalue > 0.05: print('Samples are likely drawn from the same distributions (fail to reject H0)') else: print('Samples are likely drawn from different distributions (reject H0)') ``` 運行該示例將打印測試統計信息和p值。 我們可以看到,有很好的證據(接近99%)樣本來自不同的分布,這些方法有顯著差異。 ```py -2.62233137406 0.0100871483783 Samples are likely drawn from different distributions (reject H0) ``` 分布越接近,將它們分開所需的樣本越大。 我們可以通過計算每組結果的不同大小子樣本的統計檢驗并繪制p值與樣本大小來證明這一點。 我們希望隨著樣本量的增加,p值會變小。我們還可以繪制95%的水平線(0.05),并顯示樣本量足夠大以表明這兩個群體有顯著差異。 ```py from numpy.random import seed from numpy.random import normal from scipy.stats import ttest_ind from matplotlib import pyplot # generate results seed(1) n = 100 values1 = normal(50, 1, n) values2 = normal(51, 10, n) # calculate p-values for different subsets of results pvalues = list() for i in range(1, n+1): value, p = ttest_ind(values1[0:i], values2[0:i], equal_var=False) pvalues.append(p) # plot p-values vs number of results in sample pyplot.plot(pvalues) # draw line at 95%, below which we reject H0 pyplot.plot([0.05 for x in range(len(pvalues))], color='red') pyplot.show() ``` 運行該示例將創建p值與樣本大小的折線圖。 我們可以看到,對于這兩組結果,樣本大小必須大約為90才有95%的置信度,即平均值明顯不同(藍線與紅線相交)。 ![Line Plot of p-values for Datasets with a Differing Variance](img/f8f4f3610326cda07d1bf1ab5f3acd76.jpg) p值與樣本大小的線圖 ## 比較非高斯結果的均值 如果我們的數據不是高斯數據,我們不能使用學生t檢驗或韋爾奇t檢驗。 我們可以用于非高斯數據的替代統計顯著性檢驗稱為Kolmogorov-Smirnov檢驗。 在SciPy中,這稱為 [ks_2samp()](http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ks_2samp.html)函數。 在文檔中,此測試描述為: > 這是零假設的雙側檢驗,即2個獨立樣本來自相同的連續分布。 該測試可用于高斯數據,但具有較低的統計功效并且可能需要大樣本。 我們可以用非高斯分布證明兩組結果的統計顯著性的計算。我們可以生成兩組具有重疊均勻分布的結果(50到60和55到65)。這些結果集將分別具有約55和60的不同平均值。 下面的代碼生成兩組100個結果,并使用Kolmogorov-Smirnov檢驗來證明總體均值之間的差異具有統計學意義。 ```py from numpy.random import seed from numpy.random import randint from scipy.stats import ks_2samp # generate results seed(1) n = 100 values1 = randint(50, 60, n) values2 = randint(55, 65, n) # calculate the significance value, pvalue = ks_2samp(values1, values2) print(value, pvalue) if pvalue > 0.05: print('Samples are likely drawn from the same distributions (fail to reject H0)') else: print('Samples are likely drawn from different distributions (reject H0)') ``` 運行該示例將打印統計信息和p值。 p值非常小,表明兩種群體之間的差異非常明顯。 ```py 0.47 2.16825856737e-10 Samples are likely drawn from different distributions (reject H0) ``` ## 進一步閱讀 本節列出了一些文章和資源,以深入探討應用機器學習的統計顯著性測試領域。 * [維基百科的正常性測試](https://en.wikipedia.org/wiki/Normality_test) * [維基百科上的學生t檢驗](https://en.wikipedia.org/wiki/Student's_t-test) * [韋爾奇在維基百科上的t檢驗](https://en.wikipedia.org/wiki/Welch%27s_t-test) * 維基百科上的 [Kolmogorov-Smirnov測試](https://en.wikipedia.org/wiki/Kolmogorov%E2%80%93Smirnov_test) ## 摘要 在本教程中,您了解了如何使用統計顯著性檢驗來解釋機器學習結果。 對于同一算法,您可以使用這些測試來幫助您自信地選擇一個機器學習算法而不是另一個或一組配置參數。 你了解到: * 如何使用常態測試來檢查您的實驗結果是否為高斯分析。 * 如何使用統計檢驗來檢查平均結果之間的差異是否對具有相同和不同方差的高斯數據有意義。 * 如何使用統計檢驗來檢查平均結果之間的差異是否對非高斯數據有意義。 您對此帖子或統計顯著性測試有任何疑問嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <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>

                              哎呀哎呀视频在线观看