<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之旅 廣告
                # k-fold交叉驗證的溫和介紹 > 原文: [https://machinelearningmastery.com/k-fold-cross-validation/](https://machinelearningmastery.com/k-fold-cross-validation/) 交叉驗證是用于估計機器學習模型技能的統計方法。 它通常用于應用機器學習,以比較和選擇給定預測建模問題的模型,因為它易于理解,易于實現,并且導致技能估計通常具有比其他方法更低的偏差。 在本教程中,您將發現k-fold交叉驗證程序的簡要介紹,用于估計機器學習模型的技能。 完成本教程后,您將了解: * 該k倍交叉驗證是用于估計模型對新數據的技能的過程。 * 您可以使用常用的策略為數據集選擇k的值。 * 在交叉驗證中存在常用的變體,例如scikit-learn中可用的分層和重復。 讓我們開始吧。 ![A Gentle Introduction to k-fold Cross-Validation](img/dcac3b090d0c4f8db464e3220bc71cb3.jpg) k-fold交叉驗證的溫和介紹 [Jon Baldock](https://www.flickr.com/photos/jbaldock/3586229318/) 的照片,保留一些權利。 ## 教程概述 本教程分為5個部分;他們是: 1. k-fold交叉驗證 2. 配置k 3. 工作示例 4. 交叉驗證API 5. 交叉驗證的變化 ## k-fold交叉驗證 交叉驗證是一種重采樣程序,用于評估有限數據樣本的機器學習模型。 該過程有一個名為k的參數,它指的是給定數據樣本要分組的組數。因此,該過程通常稱為k折交叉驗證。當選擇k的特定值時,可以使用它代替模型參考中的k,例如k = 10變為10倍交叉驗證。 交叉驗證主要用于應用機器學習,以估計機器學習模型對未見數據的技能。也就是說,使用有限樣本來估計模型在用于對模型訓練期間未使用的數據進行預測時通常如何執行。 這是一種流行的方法,因為它易于理解,并且因為它通常比其他方法(例如簡單的訓練/測試分割)導致對模型技能的偏差或不太樂觀的估計。 一般程序如下: 1. 隨機隨機播放數據集。 2. 將數據集拆分為k個組 3. 對于每個獨特的組: 1. 將該組作為保留或測試數據集 2. 將剩余的組作為訓練數據集 3. 在訓練集上擬合模型并在測試集上進行評估 4. 保留評估分數并丟棄模型 4. 使用模型評估分數樣本總結模型的技能 重要的是,數據樣本中的每個觀察結果都被分配給一個單獨的組,并在該過程的持續時間內保留在該組中。這意味著每個樣本都有機會在保持集1中使用并用于訓練模型k-1次。 > 該方法涉及將觀察組隨機地劃分為大小相等的k組或折疊。第一個折疊被視為驗證集,并且該方法適合剩余的k-1倍。 - 第181頁,[統計學習導論](http://amzn.to/2FkHqvW),2013。 同樣重要的是,在擬合模型之前的任何數據準備都發生在循環內的CV分配的訓練數據集上而不是更廣泛的數據集上。這也適用于超參數的任何調整。在循環內未能執行這些操作可能導致[數據泄漏](https://machinelearningmastery.com/data-leakage-machine-learning/)和模型技能的樂觀估計。 > 盡管統計方法學家付出了最大努力,但用戶經常無意中偷看測試數據,從而使他們的結果無效。 - 第708頁,[人工智能:現代方法(第3版)](http://amzn.to/2thrWHq),2009。 k次交叉驗證運行的結果通常用模型技能得分的平均值來概括。優良作法是包括技能分數方差的度量,例如標準偏差或標準誤差。 ## 配置k 必須仔細選擇k值作為數據樣本。 選擇不當的k值可能會導致對模型技能的錯誤代表性概念,例如具有高方差的分數(可能會根據用于擬合模型的數據而發生很大變化)或高偏差,(例如高估模型的技巧)。 選擇k值的三種常用策略如下: * **代表性**:選擇k的值使得每個訓練/測試組的數據樣本足夠大以在統計上代表更廣泛的數據集。 * **k = 10** :k的值固定為10,這是通過實驗發現的值,通常導致具有低偏差的模型技能估計,適度方差。 * **k = n** :k的值固定為n,其中n是數據集的大小,以便為每個測試樣本提供在保留數據集中使用的機會。這種方法稱為留一交叉驗證。 > k的選擇通常是5或10,但沒有正式的規則。隨著k變大,訓練集和重采樣子集之間的大小差異變小。隨著這種差異減小,技術的偏差變小 - 第70頁, [Applied Predictive Modeling](http://amzn.to/2Fmrbib) ,2013。 k = 10的值在應用機器學習領域非常普遍,如果您在努力為數據集選擇值,則建議使用k = 10。 > 總而言之,在k倍交叉驗證中存在與k選擇相關的偏差 - 方差權衡。通常,考慮到這些考慮因素,使用k = 5或k = 10執行k倍交叉驗證,因為這些值已經憑經驗顯示以產生既不受過高偏差也不受非常高方差影響的測試誤差率估計。 - 第184頁,[統計學習導論](http://amzn.to/2FkHqvW),2013。 如果選擇的k值不能均勻地分割數據樣本,則一個組將包含其余的示例。優選地將數據樣本分成具有相同數量的樣本的k個組,使得模型技能分數的樣本都是等效的。 ## 工作示例 為了使交叉驗證過程具體,讓我們看一個有效的例子。 想象一下,我們有一個包含6個觀察結果的數據樣本: ```py [0.1, 0.2, 0.3, 0.4, 0.5, 0.6] ``` 第一步是為k選擇一個值,以確定用于拆分數據的折疊數。在這里,我們將使用k = 3的值。這意味著我們將對數據進行洗牌,然后將數據分成3組。因為我們有6個觀測值,每個群體將有相同數量的2個觀測值。 例如: ```py Fold1: [0.5, 0.2] Fold2: [0.1, 0.3] Fold3: [0.4, 0.6] ``` 然后我們可以使用該樣本,例如評估機器學習算法的技能。 每個折疊都訓練和評估三個模型,有機會成為保持測試集。 For example: * **Model1** :在Fold1 + Fold2上訓練,在Fold3上測試 * **Model2** :在Fold2 + Fold3上訓練,在Fold1上??測試 * **Model3** :在Fold1 + Fold3上訓練,在Fold2上測試 然后在評估模型之后將它們丟棄,因為它們已經達到了目的。 收集每個模型的技能分數并匯總使用。 ## 交叉驗證API 我們不必手動實現k折交叉驗證。 scikit-learn庫提供了一個實現,可以將給定的數據樣本分開。 可以使用 _KFold()_ scikit-learn類。它取決于分裂的數量,是否對樣本進行混洗,以及在混洗之前使用的偽隨機數生成器的種子。 例如,我們可以創建一個實例,將數據集拆分為3倍,在拆分之前進行混洗,并為偽隨機數生成器使用值1。 ```py kfold = KFold(3, True, 1) ``` 然后可以在提供數據樣本作為參數的類上調用 _split()_函數。重復調用,拆分將返回每組訓練和測試集。具體而言,返回包含索引的數組到觀察的原始數據樣本中,以用于每次迭代的訓練和測試集。 例如,我們可以使用創建的 _KFold_ 實例枚舉數據樣本的索引拆分,如下所示: ```py # enumerate splits for train, test in kfold.split(data): print('train: %s, test: %s' % (train, test)) ``` 我們可以將所有這些與我們在前一部分的工作示例中使用的小數據集結合在一起。 ```py # scikit-learn k-fold cross-validation from numpy import array from sklearn.model_selection import KFold # data sample data = array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6]) # prepare cross validation kfold = KFold(3, True, 1) # enumerate splits for train, test in kfold.split(data): print('train: %s, test: %s' % (data[train], data[test])) ``` 運行該示例將打印為每個訓練和測試集選擇的特定觀察值。索引直接用于原始數據數組以檢索觀察值。 ```py train: [0.1 0.4 0.5 0.6], test: [0.2 0.3] train: [0.2 0.3 0.4 0.6], test: [0.1 0.5] train: [0.1 0.2 0.3 0.5], test: [0.4 0.6] ``` 有用的是,scikit-learn中的k-fold交叉驗證實現作為更廣泛方法中的組件操作提供,例如網格搜索模型超參數和對數據集上的模型評分。 然而, _KFold_ 類可以直接使用,以便在建模之前分割數據集,使得所有模型將使用相同的數據分割。如果您正在處理非常大的數據樣本,這將特別有用。在算法中使用相同的拆分可以為您稍后可能希望對數據執行的統計測試帶來好處。 ## 交叉驗證的變化 k折交叉驗證程序有許多變化。 三種常用的變體如下: * **訓練/測試分割**:取一個極端,k可以設置為1,這樣就可以創建單個訓練/測試分裂來評估模型。 * **LOOCV** :從另一個極端來看,k可以設置為數據集中觀察的總數,使得每個觀察結果都有機會被保留在數據集之外。這稱為留一交叉驗證,或簡稱LOOCV。 * **分層**:將數據分成折疊可以通過諸如確保每個折疊具有相同比例的具有給定分類值的觀察值(例如類結果值)的標準來控制。這稱為分層交叉驗證。 * **重復**:這是k次交叉驗證程序重復n次的地方,其中重要的是,數據樣本在每次重復之前進行混洗,這導致樣本的不同分裂。 scikit-learn庫提供了一套交叉驗證實現。您可以在[模型選擇API](http://scikit-learn.org/stable/modules/classes.html#module-sklearn.model_selection) 中查看完整列表。 ## 擴展 本節列出了一些擴展您可能希望探索的教程的想法。 * 查找3個機器學習研究論文,使用10的值進行k折交叉驗證。 * 使用k-fold交叉驗證編寫自己的函數來分割數據樣本。 * 開發示例以演示scikit-learn支持的每種主要交叉驗證類型。 如果你探索任何這些擴展,我很想知道。 ## 進一步閱讀 如果您希望深入了解,本節將提供有關該主題的更多資源。 ### 帖子 * [如何在Python中從頭開始實現重采樣方法](https://machinelearningmastery.com/implement-resampling-methods-scratch-python/) * [使用重采樣](https://machinelearningmastery.com/evaluate-performance-machine-learning-algorithms-python-using-resampling/)評估Python中機器學習算法的表現 * [測試和驗證數據集有什么區別?](https://machinelearningmastery.com/difference-test-validation-datasets/) * [機器學習中的數據泄漏](https://machinelearningmastery.com/data-leakage-machine-learning/) ### 圖書 * [Applied Predictive Modeling](http://amzn.to/2Fmrbib) ,2013。 * [統計學習導論](http://amzn.to/2FkHqvW),2013年。 * [人工智能:現代方法(第3版)](http://amzn.to/2thrWHq),2009。 ### API * [sklearn.model_selection.KFold()API](http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.KFold.html) [sklearn.model_selection:模型選擇API](http://scikit-learn.org/stable/modules/classes.html#module-sklearn.model_selection) ### 用品 * [維基百科上的重新取樣(統計)](https://en.wikipedia.org/wiki/Resampling_(statistics)) * [維基百科](https://en.wikipedia.org/wiki/Cross-validation_(statistics))的交叉驗證(統計) ## 摘要 在本教程中,您發現了k-fold交叉驗證程序的簡要介紹,用于估計機器學習模型的技能。 具體來說,你學到了: * 該k倍交叉驗證是用于估計模型對新數據的技能的過程。 * 您可以使用常用的策略為數據集選擇k的值。 * 交叉驗證中常用的變體,例如分層和重復,可用于scikit-learn。 你有任何問題嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <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>

                              哎呀哎呀视频在线观看