1. 【機(jī)器學(xué)習(xí)基礎(chǔ)】詳細(xì)介紹 7 種交叉驗(yàn)證方法!

        共 6321字,需瀏覽 13分鐘

         ·

        2022-01-10 09:28

        在任何有監(jiān)督機(jī)器學(xué)習(xí)項(xiàng)目的模型構(gòu)建階段,我們訓(xùn)練模型的目的是從標(biāo)記的示例中學(xué)習(xí)所有權(quán)重和偏差的最佳值。

        如果我們使用相同的標(biāo)記示例來測試我們的模型,那么這將是一個(gè)方法論錯(cuò)誤,因?yàn)橐粋€(gè)只會(huì)重復(fù)剛剛看到的樣本標(biāo)簽的模型將獲得完美的分?jǐn)?shù),但無法預(yù)測任何有用的東西 - 未來的數(shù)據(jù),這種情況稱為過擬合。

        為了克服過度擬合的問題,我們使用交叉驗(yàn)證。所以你必須知道什么是交叉驗(yàn)證?以及如何解決過擬合的問題?

        什么是交叉驗(yàn)證?

        交叉驗(yàn)證是一種用于估計(jì)機(jī)器學(xué)習(xí)模型性能的統(tǒng)計(jì)方法,它是一種評估統(tǒng)計(jì)分析結(jié)果如何推廣到獨(dú)立數(shù)據(jù)集的方法。

        它是如何解決過擬合問題的?

        在交叉驗(yàn)證中,我們將訓(xùn)練數(shù)據(jù)生成多個(gè)小的訓(xùn)練測試分割,使用這些拆分來調(diào)整您的模型。例如,在標(biāo)準(zhǔn)的 k 折交叉驗(yàn)證中,我們將數(shù)據(jù)劃分為 k 個(gè)子集。然后,我們在 k-1 個(gè)子集上迭代訓(xùn)練算法,同時(shí)使用剩余的子集作為測試集。通過這種方式,我們可以在未參與訓(xùn)練的數(shù)據(jù)上測試我們的模型。

        在本文中,我將分享 7 種最常用的交叉驗(yàn)證技術(shù)及其優(yōu)缺點(diǎn),我還提供了每種技術(shù)的代碼片段,歡迎收藏學(xué)習(xí),喜歡點(diǎn)贊支持。

        下面列出了這些技術(shù)方法:

        • HoldOut 交叉驗(yàn)證

        • K-Fold 交叉驗(yàn)證

        • 分層 K-Fold交叉驗(yàn)證

        • Leave P Out 交叉驗(yàn)證

        • 留一交叉驗(yàn)證

        • 蒙特卡洛 (Shuffle-Split)

        • 時(shí)間序列(滾動(dòng)交叉驗(yàn)證)

        1、HoldOut 交叉驗(yàn)證

        在這種交叉驗(yàn)證技術(shù)中,整個(gè)數(shù)據(jù)集被隨機(jī)劃分為訓(xùn)練集和驗(yàn)證集。根據(jù)經(jīng)驗(yàn),整個(gè)數(shù)據(jù)集的近 70% 用作訓(xùn)練集,其余 30% 用作驗(yàn)證集。優(yōu)點(diǎn)

        1.快速執(zhí)行:因?yàn)槲覀儽仨殞?shù)據(jù)集拆分為訓(xùn)練集和驗(yàn)證集一次,并且模型將在訓(xùn)練集上僅構(gòu)建一次,因此可以快速執(zhí)行。

        缺點(diǎn)

        1. 不適合不平衡數(shù)據(jù)集:假設(shè)我們有一個(gè)不平衡數(shù)據(jù)集,它具有“0”類和“1”類。假設(shè) 80% 的數(shù)據(jù)屬于“0”類,其余 20% 的數(shù)據(jù)屬于“1”類。在訓(xùn)練集大小為 80%,測試數(shù)據(jù)大小為數(shù)據(jù)集的 20% 的情況下進(jìn)行訓(xùn)練-測試分割??赡軙?huì)發(fā)生“0”類的所有 80% 數(shù)據(jù)都在訓(xùn)練集中,而“1”類的所有數(shù)據(jù)都在測試集中。所以我們的模型不能很好地概括我們的測試數(shù)據(jù),因?yàn)樗皼]有看到過“1”類的數(shù)據(jù)。

        2. 大量數(shù)據(jù)無法訓(xùn)練模型。

        在小數(shù)據(jù)集的情況下,將保留一部分用于測試模型,其中可能具有我們的模型可能會(huì)錯(cuò)過的重要特征,因?yàn)樗鼪]有對該數(shù)據(jù)進(jìn)行訓(xùn)練。

        代碼片段

        from?sklearn.datasets?import?load_iris
        from?sklearn.model_selection?import?train_test_split
        from?sklearn.linear_model?import?LogisticRegression
        from?sklearn.metrics?import?accuracy_score
        iris=load_iris()
        X=iris.data
        Y=iris.target
        print("Size?of?Dataset?{}".format(len(X)))
        logreg=LogisticRegression()
        x_train,x_test,y_train,y_test=train_test_split(X,Y,test_size=0.3,random_state=42)
        logreg.fit(x_train,y_train)
        predict=logreg.predict(x_test)
        print("Accuracy?score?on?training?set?is?{}".format(accuracy_score(logreg.predict(x_train),y_train)))
        print("Accuracy?score?on?test?set?is?{}".format(accuracy_score(predict,y_test)))

        2、K 折交叉驗(yàn)證

        在這種 K 折交叉驗(yàn)證技術(shù)中,整個(gè)數(shù)據(jù)集被劃分為 K 個(gè)相等大小的部分。每個(gè)分區(qū)稱為一個(gè)“折疊”。因此,因?yàn)槲覀冇?K 個(gè)部分,所以我們稱之為 K 折疊。一折用作驗(yàn)證集,其余 K-1 折用作訓(xùn)練集。

        該技術(shù)重復(fù) K 次,直到每個(gè)折疊用作驗(yàn)證集,其余折疊用作訓(xùn)練集。

        模型的最終精度是通過取 k-models 驗(yàn)證數(shù)據(jù)的平均精度來計(jì)算的。優(yōu)點(diǎn)

        1. 整個(gè)數(shù)據(jù)集既用作訓(xùn)練集又用作驗(yàn)證集:

        缺點(diǎn)

        1. 不用于不平衡的數(shù)據(jù)集:正如在 HoldOut 交叉驗(yàn)證的情況下所討論的,在 K-Fold 驗(yàn)證的情況下也可能發(fā)生訓(xùn)練集的所有樣本都沒有樣本形式類“1”,并且只有 類“0”。驗(yàn)證集將有一個(gè)類“1”的樣本。

        2. 不適合時(shí)間序列數(shù)據(jù):對于時(shí)間序列數(shù)據(jù),樣本的順序很重要。但是在 K 折交叉驗(yàn)證中,樣本是按隨機(jī)順序選擇的。

        代碼片段

        from?sklearn.datasets?import?load_iris
        from?sklearn.model_selection?import?cross_val_score,KFold
        from?sklearn.linear_model?import?LogisticRegression
        iris=load_iris()
        X=iris.data
        Y=iris.target
        logreg=LogisticRegression()
        kf=KFold(n_splits=5)
        score=cross_val_score(logreg,X,Y,cv=kf)
        print("Cross?Validation?Scores?are?{}".format(score))
        print("Average?Cross?Validation?score?:{}".format(score.mean()))

        3、分層 K 折交叉驗(yàn)證

        分層 K-Fold 是 K-Fold 交叉驗(yàn)證的增強(qiáng)版本,主要用于不平衡的數(shù)據(jù)集。就像 K-fold 一樣,整個(gè)數(shù)據(jù)集被分成大小相等的 K-fold。

        但是在這種技術(shù)中,每個(gè)折疊將具有與整個(gè)數(shù)據(jù)集中相同的目標(biāo)變量實(shí)例比率。

        優(yōu)點(diǎn)

        1. 對于不平衡數(shù)據(jù)非常有效:分層交叉驗(yàn)證中的每個(gè)折疊都會(huì)以與整個(gè)數(shù)據(jù)集中相同的比率表示所有類別的數(shù)據(jù)。

        缺點(diǎn)

        1. 不適合時(shí)間序列數(shù)據(jù):對于時(shí)間序列數(shù)據(jù),樣本的順序很重要。但在分層交叉驗(yàn)證中,樣本是按隨機(jī)順序選擇的。

        代碼片段

        from?sklearn.datasets?import?load_iris
        from?sklearn.model_selection?import?cross_val_score,StratifiedKFold
        from?sklearn.linear_model?import?LogisticRegression
        iris=load_iris()
        X=iris.data
        Y=iris.target
        logreg=LogisticRegression()
        stratifiedkf=StratifiedKFold(n_splits=5)
        score=cross_val_score(logreg,X,Y,cv=stratifiedkf)
        print("Cross?Validation?Scores?are?{}".format(score))
        print("Average?Cross?Validation?score?:{}".format(score.mean()))

        4、Leave P Out ?交叉驗(yàn)證

        Leave P Out 交叉驗(yàn)證是一種詳盡的交叉驗(yàn)證技術(shù),其中 p 樣本用作驗(yàn)證集,剩余的 np 樣本用作訓(xùn)練集。

        假設(shè)我們在數(shù)據(jù)集中有 100 個(gè)樣本。如果我們使用 p=10,那么在每次迭代中,10 個(gè)值將用作驗(yàn)證集,其余 90 個(gè)樣本將用作訓(xùn)練集。

        重復(fù)這個(gè)過程,直到整個(gè)數(shù)據(jù)集在 p-樣本和 n-p 訓(xùn)練樣本的驗(yàn)證集上被劃分。

        優(yōu)點(diǎn)

        所有數(shù)據(jù)樣本都用作訓(xùn)練和驗(yàn)證樣本。

        缺點(diǎn)

        1. 計(jì)算時(shí)間長:由于上述技術(shù)會(huì)不斷重復(fù),直到所有樣本都用作驗(yàn)證集,因此計(jì)算時(shí)間會(huì)更長。

        2. 不適合不平衡數(shù)據(jù)集:與 K 折交叉驗(yàn)證相同,如果在訓(xùn)練集中我們只有 1 個(gè)類的樣本,那么我們的模型將無法推廣到驗(yàn)證集。

        代碼片段

        from?sklearn.model_selection?import?LeavePOut,cross_val_score
        from?sklearn.datasets?import?load_iris
        from?sklearn.ensemble?import?RandomForestClassifier
        iris=load_iris()
        X=iris.data
        Y=iris.target
        lpo=LeavePOut(p=2)
        lpo.get_n_splits(X)
        tree=RandomForestClassifier(n_estimators=10,max_depth=5,n_jobs=-1)
        score=cross_val_score(tree,X,Y,cv=lpo)
        print("Cross?Validation?Scores?are?{}".format(score))
        print("Average?Cross?Validation?score?:{}".format(score.mean()))

        5、留一交叉驗(yàn)證

        留一交叉驗(yàn)證是一種詳盡的交叉驗(yàn)證技術(shù),其中 1 個(gè)樣本點(diǎn)用作驗(yàn)證集,其余 n-1 個(gè)樣本用作訓(xùn)練集。

        假設(shè)我們在數(shù)據(jù)集中有 100 個(gè)樣本。然后在每次迭代中,1 個(gè)值將用作驗(yàn)證集,其余 99 個(gè)樣本作為訓(xùn)練集。因此,重復(fù)該過程,直到數(shù)據(jù)集的每個(gè)樣本都用作驗(yàn)證點(diǎn)。

        它與使用 p=1 的 LeavePOut 交叉驗(yàn)證相同。「代碼片段」

        from?sklearn.datasets?import?load_iris
        from?sklearn.ensemble?import?RandomForestClassifier
        from?sklearn.model_selection?import?LeaveOneOut,cross_val_score
        iris=load_iris()
        X=iris.data
        Y=iris.target
        loo=LeaveOneOut()
        tree=RandomForestClassifier(n_estimators=10,max_depth=5,n_jobs=-1)
        score=cross_val_score(tree,X,Y,cv=loo)
        print("Cross?Validation?Scores?are?{}".format(score))
        print("Average?Cross?Validation?score?:{}".format(score.mean()))

        6、蒙特卡羅交叉驗(yàn)證(Shuffle Split)

        蒙特卡羅交叉驗(yàn)證,也稱為Shuffle Split交叉驗(yàn)證,是一種非常靈活的交叉驗(yàn)證策略。在這種技術(shù)中,數(shù)據(jù)集被隨機(jī)劃分為訓(xùn)練集和驗(yàn)證集。

        我們已經(jīng)決定了要用作訓(xùn)練集的數(shù)據(jù)集的百分比和用作驗(yàn)證集的百分比。如果訓(xùn)練集和驗(yàn)證集大小的增加百分比總和不是 100,則剩余的數(shù)據(jù)集不會(huì)用于訓(xùn)練集或驗(yàn)證集。

        假設(shè)我們有 100 個(gè)樣本,其中 60% 的樣本用作訓(xùn)練集,20% 的樣本用作驗(yàn)證集,那么剩下的 20%( 100-(60+20)) 將不被使用。

        這種拆分將重復(fù)我們必須指定的“n”次。

        優(yōu)點(diǎn)

        1.我們可以自由使用訓(xùn)練和驗(yàn)證集的大小。

        2.我們可以選擇重復(fù)的次數(shù),而不依賴于重復(fù)的折疊次數(shù)。

        缺點(diǎn)

        1. 可能不會(huì)為訓(xùn)練集或驗(yàn)證集選擇很少的樣本。

        2. 不適合不平衡的數(shù)據(jù)集:在我們定義了訓(xùn)練集和驗(yàn)證集的大小后,所有的樣本都是隨機(jī)選擇的,所以訓(xùn)練集可能沒有測試中的數(shù)據(jù)類別 設(shè)置,并且該模型將無法概括為看不見的數(shù)據(jù)。

        代碼片段

        from?sklearn.model_selection?import?ShuffleSplit,cross_val_score
        from?sklearn.datasets?import?load_iris
        from?sklearn.linear_model?import?LogisticRegression
        logreg=LogisticRegression()
        shuffle_split=ShuffleSplit(test_size=0.3,train_size=0.5,n_splits=10)
        scores=cross_val_score(logreg,iris.data,iris.target,cv=shuffle_split)
        print("cross?Validation?scores:n?{}".format(scores))
        print("Average?Cross?Validation?score?:{}".format(scores.mean()))

        7、時(shí)間序列交叉驗(yàn)證

        什么是時(shí)間序列數(shù)據(jù)?

        時(shí)間序列數(shù)據(jù)是在不同時(shí)間點(diǎn)收集的數(shù)據(jù)。由于數(shù)據(jù)點(diǎn)是在相鄰時(shí)間段收集的,因此觀測值之間可能存在相關(guān)性。這是區(qū)分時(shí)間序列數(shù)據(jù)與橫截面數(shù)據(jù)的特征之一。

        在時(shí)間序列數(shù)據(jù)的情況下如何進(jìn)行交叉驗(yàn)證?

        在時(shí)間序列數(shù)據(jù)的情況下,我們不能選擇隨機(jī)樣本并將它們分配給訓(xùn)練集或驗(yàn)證集,因?yàn)槭褂梦磥頂?shù)據(jù)中的值來預(yù)測過去數(shù)據(jù)的值是沒有意義的。

        由于數(shù)據(jù)的順序?qū)τ跁r(shí)間序列相關(guān)問題非常重要,所以我們根據(jù)時(shí)間將數(shù)據(jù)拆分為訓(xùn)練集和驗(yàn)證集,也稱為“前向鏈”方法或滾動(dòng)交叉驗(yàn)證。

        我們從一小部分?jǐn)?shù)據(jù)作為訓(xùn)練集開始?;谠摷?,我們預(yù)測稍后的數(shù)據(jù)點(diǎn),然后檢查準(zhǔn)確性。

        然后將預(yù)測樣本作為下一個(gè)訓(xùn)練數(shù)據(jù)集的一部分包括在內(nèi),并對后續(xù)樣本進(jìn)行預(yù)測。

        優(yōu)點(diǎn)

        最好的技術(shù)之一。

        缺點(diǎn)

        不適用于其他數(shù)據(jù)類型的驗(yàn)證:與其他技術(shù)一樣,我們選擇隨機(jī)樣本作為訓(xùn)練或驗(yàn)證集,但在該技術(shù)中數(shù)據(jù)的順序非常重要。

        代碼片段

        import?numpy?as?np
        from?sklearn.model_selection?import?TimeSeriesSplit
        X?=?np.array([[1,?2],?[3,?4],?[1,?2],?[3,?4],?[1,?2],?[3,?4]])
        y?=?np.array([1,?2,?3,?4,?5,?6])
        time_series?=?TimeSeriesSplit()
        print(time_series)
        for?train_index,?test_index?in?time_series.split(X):
        ????print("TRAIN:",?train_index,?"TEST:",?test_index)
        ????X_train,?X_test?=?X[train_index],?X[test_index]
        ????y_train,?y_test?=?y[train_index],?y[test_index]

        結(jié)論

        在本文中,我試圖概述各種交叉驗(yàn)證技術(shù)的工作原理以及我們在實(shí)施這些技術(shù)時(shí)應(yīng)牢記的事項(xiàng),我真誠地希望在這個(gè)數(shù)據(jù)科學(xué)之旅中對你有所幫助。

        推薦閱讀

        1. 決策樹可視化,被驚艷到了!
        2. 開發(fā)機(jī)器學(xué)習(xí)APP,太簡單了
        3. 200 道經(jīng)典機(jī)器學(xué)習(xí)面試題總結(jié)
        4. 卷積神經(jīng)網(wǎng)絡(luò)(CNN)數(shù)學(xué)原理解析
        5. 收手吧,華強(qiáng)!我用機(jī)器學(xué)習(xí)幫你挑西瓜
        6. 為了這個(gè)GIF,我專門建了一個(gè)網(wǎng)站
        7. 【保姆級教程】白嫖老外的云服務(wù)器


        三連在看,月入百萬??

        瀏覽 54
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 国产精品久久久久久最猛 | 办公室高h荡肉呻吟在线观看 | 国产精品不雅视频 | 91国产偷拍 | 女人被狂躁到高潮30分钟 |