<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/how-to-use-statistics-to-identify-outliers-in-data/](https://machinelearningmastery.com/how-to-use-statistics-to-identify-outliers-in-data/) 建模時,清理數據樣本以確保觀察結果最能代表問題非常重要。 有時,數據集可以包含超出預期范圍的極值,而不像其他數據。這些被稱為異常值,通常可以通過理解甚至去除這些異常值來改進機器學習建模和模型技能。 在本教程中,您將發現有關異常值和兩種統計方法的更多信息,可用于從數據集中識別和過濾異常值。 完成本教程后,您將了解: * 異常值是數據集中不太可能的觀察結果,可能有許多原因之一。 * 該標準偏差可用于識別高斯或類高斯數據中的異常值。 * 無論分布如何,四分位數范圍都可用于識別數據中的異常值。 讓我們開始吧。 * **更新May / 2018** :修正了通過異常值限制過濾樣本時的錯誤。謝謝Yishai E和彼得。 ![How to Use Statistics to Identify Outliers in Data](img/88660edc68a1bce41465108bfae8af1f.jpg) 如何使用統計數據識別數據中的異常值 照片由 [Jeff Richardson](https://www.flickr.com/photos/richo7/7176319689/) 提供,保留一些權利。 ## 教程概述 本教程分為4個部分;他們是: 1. 什么是異常值? 2. 測試數據集 3. 標準偏差法 4. 四分位距離法 ## 什么是異常值? 異常值是一種與其他觀察結果不同的觀察結果。 它很少見,或不同,或者不適合某種方式。 異常值可能有很多原因,例如: * 測量或輸入錯誤。 * 數據損壞。 * 真正的離群觀察(例如籃球中的邁克爾喬丹)。 由于每個數據集的具體情況,通常沒有精確的方法來定義和識別異常值。相反,您或域專家必須解釋原始觀察并決定值是否為異常值。 盡管如此,我們可以使用統計方法來識別在可用數據的情況下看起來很少或不太可能的觀察結果。 這并不意味著所識別的值是異常值,應予以刪除。但是,本教程中描述的工具可以幫助您了解可能需要重新審視的罕見事件。 一個好的建議是考慮繪制已識別的離群值,也許在非離群值的背景下,以查看異常值是否存在任何系統關系或模式。如果存在,也許它們不是異常值并且可以解釋,或者可能更系統地識別異常值本身。 ## 測試數據集 在我們查看異常值識別方法之前,讓我們定義一個可用于測試方法的數據集。 我們將生成從高斯分布中抽取的10,000個隨機數,平均值為50,標準差為5。 從高斯分布繪制的數字將具有異常值。也就是說,憑借分布本身,將會有一些與我們可以識別為異常值的平均罕見值相距很遠的值。 我們將使用 _randn()_函數生成平均值為0且標準差為1的隨機高斯值,然后將結果乘以我們自己的標準差并添加平均值以將值轉換為首選范圍。 偽隨機數生成器被播種以確保每次運行代碼時我們都得到相同的數字樣本。 ```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(10000) + 50 # summarize print('mean=%.3f stdv=%.3f' % (mean(data), std(data))) ``` 運行該示例將生成樣本,然后打印均值和標準差。正如預期的那樣,這些值非常接近預期值。 ```py mean=50.049 stdv=4.994 ``` ## 標準偏差法 如果我們知道樣本中的值分布是高斯分布或類高斯分布,我們可以使用樣本的標準偏差作為識別異常值的截止值。 高斯分布具有以下特性:可以使用與均值的標準偏差來可靠地總結樣本中的值的百分比。 例如,在平均值的一個標準偏差內將覆蓋68%的數據。 因此,如果平均值為50且標準差為5,如上面的測試數據集中那樣,則樣本中45到55之間的所有數據將占數據樣本的約68%。如果我們擴展范圍如下,我們可以覆蓋更多的數據樣本: * 1標準偏差均值:68% * 2與標準差的標準偏差:95% * 3與標準差的標準偏差:99.7% 超出3個標準偏差的值是分布的一部分,但在370個樣本中約有1個是不太可能或罕見的事件。 與平均值的三個標準偏差是在實踐中用于識別高斯或高斯分布的異常值的常見截止。對于較小的數據樣本,可以使用2個標準偏差(95%)的值,對于較大的樣本,可以使用4個標準偏差(99.9%)的值。 讓我們用一個有效的例子來具體化。 有時,首先將數據標準化(例如,以零均值和單位方差的Z分數),以便可以使用標準Z分數截止值來執行異常值檢測。這是一種方便,一般不需要,我們將在此處以數據的原始比例進行計算以使事情清楚。 我們可以計算給定樣本的平均值和標準差,然后計算用于識別異常值的截止值,其與平均值的偏差超過3個標準偏差。 ```py # calculate summary statistics data_mean, data_std = mean(data), std(data) # identify outliers cut_off = data_std * 3 lower, upper = data_mean - cut_off, data_mean + cut_off ``` 然后我們可以將異常值識別為超出定義的下限和上限的那些示例。 ```py # identify outliers outliers = [x for x in data if x < lower or x > upper] ``` 或者,我們可以從樣本中過濾掉那些不在定義范圍內的值。 ```py # remove outliers outliers_removed = [x for x in data if x > lower and x < upper] ``` 我們可以將這一切與我們在上一節中準備的樣本數據集放在一起。 下面列出了完整的示例。 ```py # identify outliers with standard deviation 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(10000) + 50 # calculate summary statistics data_mean, data_std = mean(data), std(data) # identify outliers cut_off = data_std * 3 lower, upper = data_mean - cut_off, data_mean + cut_off # identify outliers outliers = [x for x in data if x < lower or x > upper] print('Identified outliers: %d' % len(outliers)) # remove outliers outliers_removed = [x for x in data if x >= lower and x <= upper] print('Non-outlier observations: %d' % len(outliers_removed)) ``` 運行該示例將首先打印已識別的異常值的數量,然后打印不是異常值的觀察數量,從而演示如何分別識別和過濾異常值。 ```py Identified outliers: 29 Non-outlier observations: 9971 ``` 到目前為止,我們只討論了具有高斯分布的單變量數據,例如:一個變量。如果您有多變量數據,則可以使用相同的方法,例如:具有多個變量的數據,每個變量具有不同的高斯分布。 如果你有兩個變量,你可以想象在兩個維度中定義橢圓的邊界。落在橢圓之外的觀察將被視為異常值。在三個維度中,這將是橢圓體,依此類推到更高的維度。 或者,如果您對域有更多了解,可能會通過超出數據維度的一個或一個子集的限制來識別異常值。 ## 四分位距離法 并非所有數據都是正常的或正常的,足以將其視為從高斯分布中提取。 總結非高斯分布數據樣本的一個很好的統計數據是Interquartile Range,簡稱IQR。 IQR計算為數據的第75百分位數和第25百分位數之間的差異,并在框和晶須圖中定義框。 請記住,可以通過對觀察值進行排序并在特定指數處選擇值來計算百分位數。第50個百分位數是中間值,或偶數個例子的兩個中間值的平均值。如果我們有10,000個樣本,那么第50個百分位將是第5000個和第5001個值的平均值。 我們將百分位數稱為四分位數(“_夸脫_”意思是4)因為數據通過第25,50和75位值分為四組。 IQR定義了中間50%的數據或數據的主體。 IQR可用于通過定義樣本值的限制來識別異常值,這些樣本值是IQR低于第25百分位數或高于第75百分位數的因子 _k_ 。因子 _k_ 的共同值是值1.5。當在盒子和須狀圖的背景下描述時,因子k為3或更大可用于識別極端異常值或“_遠離_”的值。 在盒子和須狀圖上,這些限制被繪制為從盒子中繪制的胡須(或線條)上的柵欄。超出這些值的值將繪制為點。 我們可以使用_百分位數()_ NumPy函數計算數據集的百分位數,該函數采用數據集和所需百分位數的規格。然后可以將IQR計算為第75百分位數和第25百分位數之間的差值。 ```py # calculate interquartile range q25, q75 = percentile(data, 25), percentile(data, 75) iqr = q75 - q25 ``` 然后,我們可以將異常值的截止值計算為IQR的1.5倍,并從第25個百分位數中減去此截止值,并將其加到第75個百分位數,以給出數據的實際限制。 ```py # calculate the outlier cutoff cut_off = iqr * 1.5 lower, upper = q25 - cut_off, q75 + cut_off ``` 然后,我們可以使用這些限制來識別異常值。 ```py # identify outliers outliers = [x for x in data if x < lower or x > upper] ``` 我們還可以使用限制來過濾數據集中的異常值。 ```py outliers_removed = [x for x in data if x > lower and x < upper] ``` 我們可以將所有這些結合在一起并演示測試數據集上的過程。 The complete example is listed below. ```py # identify outliers with interquartile range from numpy.random import seed from numpy.random import randn from numpy import percentile # seed the random number generator seed(1) # generate univariate observations data = 5 * randn(10000) + 50 # calculate interquartile range q25, q75 = percentile(data, 25), percentile(data, 75) iqr = q75 - q25 print('Percentiles: 25th=%.3f, 75th=%.3f, IQR=%.3f' % (q25, q75, iqr)) # calculate the outlier cutoff cut_off = iqr * 1.5 lower, upper = q25 - cut_off, q75 + cut_off # identify outliers outliers = [x for x in data if x < lower or x > upper] print('Identified outliers: %d' % len(outliers)) # remove outliers outliers_removed = [x for x in data if x >= lower and x <= upper] print('Non-outlier observations: %d' % len(outliers_removed)) ``` 首先運行該示例打印已識別的第25和第75百分位數以及計算的IQR。打印所識別的異常值的數量,然后是非異常值觀察的數量。 ```py Percentiles: 25th=46.685, 75th=53.359, IQR=6.674 Identified outliers: 81 Non-outlier observations: 9919 ``` 通過依次計算數據集中每個變量的限制,并將異常值作為落在矩形或超矩形之外的觀察值,可以將該方法用于多變量數據。 ## 擴展 本節列出了一些擴展您可能希望探索的教程的想法。 * 開發自己的高斯測試數據集并在直方圖上繪制異常值和非異常值。 * 在使用非高斯分布生成的單變量數據集上測試基于IQR的方法。 * 選擇一種方法并創建一個函數,該函數將過濾掉具有任意維數的給定數據集的異常值。 如果你探索任何這些擴展,我很想知道。 ## 進一步閱讀 如果您希望深入了解,本節將提供有關該主題的更多資源。 ### 帖子 * [如何識別數據中的異常值](https://machinelearningmastery.com/how-to-identify-outliers-in-your-data/) ### API * [seed()NumPy API](https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.seed.html) * [randn()NumPy API](https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.randn.html) * [mean()NumPy API](https://docs.scipy.org/doc/numpy/reference/generated/numpy.mean.html) * [std()NumPy API](https://docs.scipy.org/doc/numpy/reference/generated/numpy.std.html) * [百分位()NumPy API](https://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.percentile.html) ### 用品 * [維基百科上的異常值](https://en.wikipedia.org/wiki/Outlier) * [維基百科上的異常檢測](https://en.wikipedia.org/wiki/Anomaly_detection) * 維基百科上的 [68-95-99.7規則](https://en.wikipedia.org/wiki/68%E2%80%9395%E2%80%9399.7_rule) * [四分位數范圍](https://en.wikipedia.org/wiki/Interquartile_range) * [維基百科上的箱子圖](https://en.wikipedia.org/wiki/Box_plot) ### 摘要 在本教程中,您發現了異常值和兩種統計方法,可用于從數據集中識別和過濾異常值。 具體來說,你學到了: * 異常值是數據集中不太可能的觀察結果,可能有許多原因之一。 * 該標準偏差可用于識別高斯或類高斯數據中的異常值。 * 無論分布如何,四分位數范圍都可用于識別數據中的異常值。 你有任何問題嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <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>

                              哎呀哎呀视频在线观看