<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之旅 廣告
                # 打擊機器學習數據集中不平衡類的8種策略 > 原文: [https://machinelearningmastery.com/tactics-to-combat-imbalanced-classes-in-your-machine-learning-dataset/](https://machinelearningmastery.com/tactics-to-combat-imbalanced-classes-in-your-machine-learning-dataset/) 這件事發生在你身上嗎? 您正在處理數據集。您可以創建分類模型并立即獲得90%的準確度。你覺得“很棒”。你深入一點,發現90%的數據屬于一個類。該死的! 這是一個不平衡數據集的例子,它可能導致令人沮喪的結果。 在這篇文章中,您將發現可用于在具有不平衡數據的機器學習數據集上提供出色結果的策略。 [![Class Imbalance](https://img.kancloud.cn/c5/61/c561633afe00a14570a0fe85dadd8173_640x480.jpg)](https://3qeqpr26caki16dnhd19sv6by6v-wpengine.netdna-ssl.com/wp-content/uploads/2015/08/Class-Imbalance.jpg) 在機器學習中找到一些平衡點。 攝影:MichaEli,保留一些權利。 ## 掌握不平衡的數據 我一直收到有關課程不平衡的電子郵件,例如: > 我有一個二元分類問題,在我的訓練集中有一個類與60:1的比例。我使用了邏輯回歸,結果似乎只是忽略了一個類。 還有這個: > 我正在研究分類模型。在我的數據集中,我有三個不同的標簽要分類,讓它們分別為A,B和C.但是在訓練數據集中,我有一個70%體積的數據集,B為25%,C為5%。大部分時間我的結果都適合A.你能否建議我如何解決這個問題? 我寫了很長的技術列表來嘗試思考解決這個問題的最佳方法。我終于接受了我的一個學生的建議: > 也許您即將發布的一篇博文可以解決訓練模型以解決高度不平衡數據的問題,并概述一些技術和期望。 ## 挫折! 不平衡的數據可能會讓您感到很沮喪。 當你發現你的數據有不平衡的類并且你認為你得到的所有好結果都變成了謊言時,你會感到非常沮喪。 當書籍,文章和博客文章似乎沒有為您提供有關處理數據不平衡的良好建議時,下一波挫折就會出現。 放松,有很多選擇,我們將全面介紹它們。您可以為不平衡數據構建預測模型。 ## 什么是不平衡數據? 不平衡數據通常是指分類問題的問題,其中類沒有被平等地表示。 例如,您可能有一個包含100個實例(行)的2類(二進制)分類問題。總共80個實例標記為Class-1,其余20個實例標記為Class-2。 這是一個不平衡的數據集,Class-1與Class-2實例的比例為80:20或更簡潔,為4:1。 對于兩類分類問題以及多類分類問題,您可能會遇到類不平衡問題。大多數技術都可以使用。 剩下的討論將假設一個兩類分類問題,因為它更容易思考和描述。 ### 不平衡是常見的 大多數分類數據集在每個類中沒有完全相同數量的實例,但是小的差異通常無關緊要。 有些問題是階級不平衡不僅僅是常見的,而是預期的。例如,在那些表征欺詐性交易的數據集中,這些數據集是不平衡的。絕大多數交易將在“非欺詐”類中進行,而極少數交易將在“欺詐”類中。 另一個例子是客戶流失數據集,絕大多數客戶都使用該服務(“No-Churn”類),少數客戶取消訂閱(“Churn”類)。 如果上面的示例中存在類似4:1的適度類不平衡,則可能會導致問題。 ### 準確性悖論 [準確性悖論](https://en.wikipedia.org/wiki/Accuracy_paradox)是本文簡介中確切情況的名稱。 在這種情況下,您的準確度測量可以說明您具有出色的準確性(例如90%),但準確性僅反映了潛在的階級分布。 這是非常常見的,因為分類準確性通常是我們在評估分類問題模型時使用的第一個衡量標準。 ### 把它全部放在紅色! 當我們在不平衡的數據集上訓練時,我們的模型中發生了什么? 正如您可能已經猜到的那樣,我們在不平衡數據上獲得90%準確度的原因(在Class-1中有90%的實例)是因為我們的模型會查看數據并巧妙地決定最好的做法是始終預測“1級”并實現高精度。 使用簡單的基于規則的算法時最好看到這一點。如果在最終模型中打印出規則,您將看到它很可能預測一個類,而不管它被要求預測的數據。 ## 打擊不平衡訓練數據的8種策略 我們現在了解什么是類不平衡,以及它為什么提供誤導性的分類準確性。 那么我們有什么選擇呢? ### 1)你能收集更多數據嗎? 您可能認為這很愚蠢,但收集更多數據幾乎總是被忽視。 你能收集更多數據嗎?花點時間考慮一下您是否能夠收集有關問題的更多數據。 較大的數據集可能會在類上顯示不同且可能更平衡的視角。 稍后當我們查看重新采樣數據集時,更多次要類的示例可能會有用。 ### 2)嘗試更改表現指標 準確性不是使用不平衡數據集時使用的指標。我們已經看到它具有誤導性。 在使用不平衡類時,有一些指標可以告訴您更真實的故事。 在我的帖子“[分類準確性不夠:可以使用的更多表現指標](http://machinelearningmastery.com/classification-accuracy-is-not-enough-more-performance-measures-you-can-use/)”中,我提供了更多關于選擇不同表現指標的建議。 在那篇文章中,我看了一個不平衡的數據集,它描述了患者乳腺癌復發的特征。 從那篇文章中,我建議查看以下表現測量,這些測量可以比傳統的分類準確度更深入地了解模型的準確性: * **混淆矩陣**:將預測分解為表格,顯示正確的預測(對角線)和不正確的預測類型(分配了哪些類別的錯誤預測)。 * **精度**:分類器精確度的度量。 * **召回**:分類器完整性的度量 * **F1分數(或F分數)**:精確度和召回率的加權平均值。 我還建議你看一下以下內容: * **Kappa(或 [Cohen的kappa](https://en.wikipedia.org/wiki/Cohen%27s_kappa) )**:分類準確性由數據中類別的不平衡歸一化。 * **ROC曲線**:與精確度和召回率一樣,精度分為靈敏度和特異性,可以根據這些值的平衡閾值選擇模型。 您可以學習更多關于使用ROC曲線來比較我們的帖子“[評估和比較分類器表現與ROC曲線](http://machinelearningmastery.com/assessing-comparing-classifier-performance-roc-curves-2/)”的分類準確性。 還不確定嗎?從kappa開始,它將讓您更好地了解正在發生的事情,而不是分類準確性。 ### 3)嘗試重新采樣數據集 您可以更改用于構建預測模型的數據集,以獲得更平衡的數據。 此更改稱為對數據集進行采樣,您可以使用兩種主要方法來均衡類: 1. 您可以從代表性不足的類中添加實例的副本,稱為過采樣(或更正式的替換采樣),或 2. 您可以從過度表示的類中刪除實例,稱為欠采樣。 這些方法通常很容易實現并且運行速度快。他們是一個很好的起點。 事實上,我建議你總是在所有不平衡數據集上嘗試這兩種方法,只是為了看看它是否能提高你的首選精確度量。 您可以在Wikipedia文章“[過采樣和數據分析中的欠采樣](https://en.wikipedia.org/wiki/Oversampling_and_undersampling_in_data_analysis)”中學到更多內容。 #### 一些經驗法則 * 當您擁有大量數據(數十或數十萬個實例或更多)時,請考慮對欠采樣進行測試 * 當您沒有大量數據(數萬條記錄或更少)時,請考慮測試過采樣 * 考慮測試隨機和非隨機(例如分層)采樣方案。 * 考慮測試不同的重采樣比率(例如,您不必在二元分類問題中以1:1的比例為目標,嘗試其他比率) ### 4)嘗試生成合成樣品 生成合成樣本的一種簡單方法是從少數類中的實例中隨機采樣屬性。 您可以在數據集中憑經驗對它們進行采樣,或者您可以使用像Naive Bayes這樣的方法,可以在反向運行時獨立地對每個屬性進行采樣。您將擁有更多不同的數據,但可能無法保留屬性之間的非線性關系。 您可以使用系統算法生成合成樣本。最流行的此類算法稱為SMOTE或合成少數過采樣技術。 顧名思義,SMOTE是一種過采樣方法。它的工作原理是從次要類創建合成樣本,而不是創建副本。該算法選擇兩個或更多個類似的實例(使用距離測量)并且通過差異內的相鄰實例的隨機量一次擾動實例一個屬性。 了解有關SMOTE的更多信息,請參閱2002年原創題為“ [SMOTE:合成少數過采樣技術](http://www.jair.org/papers/paper953.html)”的論文。 SMOTE算法有許多實現,例如: * 在Python中,看一下“ [UnbalancedDataset](https://github.com/fmfn/UnbalancedDataset) ”模塊。它提供了許多SMOTE實現以及您可以嘗試的各種其他重采樣技術。 * 在R中, [DMwR包](https://cran.r-project.org/web/packages/DMwR/index.html)提供了SMOTE的實現。 * 在Weka中,您可以使用 [SMOTE監督濾波器](http://weka.sourceforge.net/doc.packages/SMOTE/weka/filters/supervised/instance/SMOTE.html)。 ### 5)嘗試不同的算法 與往常一樣,我強烈建議您不要在每個問題上使用您喜歡的算法。您應該至少在給定問題上對各種不同類型的算法進行抽樣檢查。 有關點檢查算法的更多信息,請參閱我的文章“為什么你應該在機器學習問題上進行現場檢查算法”。 話雖這么說,決策樹通常在不平衡的數據集上表現良好。查看用于創建樹的類變量的拆分規則可以強制解決這兩個類。 如果有疑問,請嘗試一些流行的決策樹算法,如C4.5,C5.0,CART和隨機森林。 對于使用決策樹的一些R代碼示例,請參閱我的帖子“帶有決策樹的R中的[非線性分類”。](http://machinelearningmastery.com/non-linear-classification-in-r-with-decision-trees/) 有關在Python和scikit-learn中使用CART的示例,請參閱我的帖子標題為“[讓你的手弄亂Scikit-Learn Now](http://machinelearningmastery.com/get-your-hands-dirty-with-scikit-learn-now/) ”。 ### 6)嘗試懲罰模型 您可以使用相同的算法,但為他們提供不同的視角。 懲罰分類會對模型造成額外成本,以便在訓練期間對少數群體犯下分類錯誤。這些處罰可能會使模型偏向于更多地關注少數民族。 通常,類懲罰或權重的處理專用于學習算法。存在懲罰版本的算法,例如懲罰的SVM和懲罰的LDA。 也可以為懲罰模型提供通用框架。例如,Weka有一個 [CostSensitiveClassifier](http://weka.sourceforge.net/doc.dev/weka/classifiers/meta/CostSensitiveClassifier.html) ,可以包裝任何分類器并應用自定義懲罰矩陣進行未命中分類。 如果您被鎖定在特定算法中并且無法重新取樣或者您的結果不佳,則需要使用懲罰。它提供了另一種“平衡”類的方法。設置懲罰矩陣可能很復雜。您很可能必須嘗試各種懲罰方案,看看什么最適合您的問題。 ### 7)嘗試不同的觀點 有專門針對不平衡數據集的研究領域。他們有自己的算法,措施和術語。 從這些角度看一看并思考你的問題有時會讓一些想法失去理智。 您可能要考慮的兩個是**異常檢測**和**變化檢測**。 [異常檢測](https://en.wikipedia.org/wiki/Anomaly_detection)是罕見事件的檢測。這可能是由于其振動或由系統調用序列指示的程序的惡意活動而指示的機器故障。與正常操作相比,這些事件很少見。 思維的這種轉變將次要類別視為異常類,這可能有助于您考慮分離和分類樣本的新方法。 [變化檢測](https://en.wikipedia.org/wiki/Change_detection)類似于異常檢測,除了尋找異常之外,它正在尋找變化或差異。這可能是使用模式或銀行交易所觀察到的用戶行為的變化。 這兩種轉變都會對分類問題采取更實時的立場,這可能會為您提供一些思考問題的新方法,也許還有一些嘗試的技巧。 ### 8)嘗試獲得創意 真正爬進你的問題并思考如何將其分解為更容易處理的小問題。 為了獲得靈感,請回顧Quora上非常有創意的答案,回答問題“[在分類中,您如何處理不平衡的訓練集?](http://www.quora.com/In-classification-how-do-you-handle-an-unbalanced-training-set) “ 例如: > 將較大的類分解為較少數量的其他類... > > ...使用一類分類器......(例如對待異常檢測) > > ......將不平衡的訓練集重新取樣到不是一個平衡集,而是幾個。在這些集合上運行分類集合可以產生比單獨一個分類器更好的結果 這些只是您可以嘗試的一些有趣且富有創意的想法。 有關更多想法,請查看reddit帖子“[分類時的這些評論,當我80%的訓練集屬于一個類](https://www.reddit.com/r/MachineLearning/comments/12evgi/classification_when_80_of_my_training_set_is_of/)”時。 ## 選擇一種方法并采取行動 您不需要是算法向導或統計學家來從不平衡數據集構建準確可靠的模型。 我們已經介紹了許多可用于建模不平衡數據集的技術。 希望您可以從架子上立即應用一兩個,例如更改精度指標和重新采樣數據集。兩者都很快,并會立即產生影響。 _**你打算嘗試哪種方法?**_ ## 最后一句話,從小開始 請記住,我們無法知道哪種方法最適合您以及您正在處理的數據集。 您可以使用一些專家啟發式方法來選擇這種方法,但最后,我能給您的最佳建議是“成為科學家”并根據經??驗測試每種方法,并選擇能夠為您提供最佳結果的方法。 從小處著手,以你學到的東西為基礎。 ## 想要更多?進一步閱讀... 如果你知道在哪里看,就會有關于階級不平衡的資源,但它們很少而且很少。 我看起來和以下是我認為是作物的奶油。如果您想更深入地了解一些關于處理課堂不平衡的學術文獻,請查看下面的一些鏈接。 ### 圖書 * [不平衡學習:基礎,算法和應用](http://www.amazon.com/dp/1118074629?tag=inspiredalgor-20) ### 文件 * [不平衡數據集的數據挖掘:概述](http://link.springer.com/chapter/10.1007/978-0-387-09823-4_45) * [從不平衡數據中學習](http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=5128907) * [解決不平衡訓練集的詛咒:單方面選擇](http://sci2s.ugr.es/keel/pdf/algorithm/congreso/kubat97addressing.pdf)(PDF) * [幾種平衡機器學習訓練數據方法的行為研究](http://dl.acm.org/citation.cfm?id=1007735) 你覺得這篇文章有用嗎?還有問題嗎? 發表評論并告訴我您的問題以及您在處理不平衡課程時仍然遇到的任何問題。
                  <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>

                              哎呀哎呀视频在线观看