1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        自訓(xùn)練和半監(jiān)督學(xué)習(xí)介紹

        共 9302字,需瀏覽 19分鐘

         ·

        2021-04-19 10:17

        點(diǎn)擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

        重磅干貨,第一時間送達(dá)

        本文轉(zhuǎn)自:磐創(chuàng)AI

        當(dāng)涉及到機(jī)器學(xué)習(xí)分類任務(wù)時,用于訓(xùn)練算法的數(shù)據(jù)越多越好。在監(jiān)督學(xué)習(xí)中,這些數(shù)據(jù)必須根據(jù)目標(biāo)類進(jìn)行標(biāo)記,否則,這些算法將無法學(xué)習(xí)獨(dú)立變量和目標(biāo)變量之間的關(guān)系。但是,在構(gòu)建用于分類的大型標(biāo)記數(shù)據(jù)集時,會出現(xiàn)兩個問題:
        1. 「標(biāo)記數(shù)據(jù)可能很耗時」。假設(shè)我們有1000000張狗圖像,我們想將它們輸入到分類算法中,目的是預(yù)測每個圖像是否包含波士頓狗。如果我們想將所有這些圖像用于監(jiān)督分類任務(wù),我們需要一個人查看每個圖像并確定是否存在波士頓狗。
        2. 「標(biāo)記數(shù)據(jù)可能很昂貴」。原因一:要想讓人費(fèi)盡心思去搜100萬張狗狗照片,我們可能得掏錢。

        那么,這些未標(biāo)記的數(shù)據(jù)可以用在分類算法中嗎?

        這就是半監(jiān)督學(xué)習(xí)的用武之地。在半監(jiān)督方法中,我們可以在少量的標(biāo)記數(shù)據(jù)上訓(xùn)練分類器,然后使用該分類器對未標(biāo)記的數(shù)據(jù)進(jìn)行預(yù)測。

        由于這些預(yù)測可能比隨機(jī)猜測更好,未標(biāo)記的數(shù)據(jù)預(yù)測可以作為“偽標(biāo)簽”在隨后的分類器迭代中采用。雖然半監(jiān)督學(xué)習(xí)有很多種風(fēng)格,但這種特殊的技術(shù)稱為自訓(xùn)練。

        自訓(xùn)練

        在概念層面上,自訓(xùn)練的工作原理如下:

        「步驟1」:將標(biāo)記的數(shù)據(jù)實(shí)例拆分為訓(xùn)練集和測試集。然后,對標(biāo)記的訓(xùn)練數(shù)據(jù)訓(xùn)練一個分類算法。

        「步驟2」:使用經(jīng)過訓(xùn)練的分類器來預(yù)測所有未標(biāo)記數(shù)據(jù)實(shí)例的類標(biāo)簽。在這些預(yù)測的類標(biāo)簽中,正確率最高的被認(rèn)為是“偽標(biāo)簽”。

        (第2步的幾個變化:a)所有預(yù)測的標(biāo)簽可以同時作為“偽標(biāo)簽”使用,而不考慮概率;或者b)“偽標(biāo)簽”數(shù)據(jù)可以通過預(yù)測的置信度進(jìn)行加權(quán)。)

        「步驟3」:將“偽標(biāo)記”數(shù)據(jù)與正確標(biāo)記的訓(xùn)練數(shù)據(jù)連接起來。在組合的“偽標(biāo)記”和正確標(biāo)記訓(xùn)練數(shù)據(jù)上重新訓(xùn)練分類器。

        「步驟4」:使用經(jīng)過訓(xùn)練的分類器來預(yù)測已標(biāo)記的測試數(shù)據(jù)實(shí)例的類標(biāo)簽。使用你選擇的度量來評估分類器性能。

        (可以重復(fù)步驟1到4,直到步驟2中的預(yù)測類標(biāo)簽不再滿足特定的概率閾值,或者直到?jīng)]有更多未標(biāo)記的數(shù)據(jù)保留。)

        好的,明白了嗎?很好!讓我們通過一個例子解釋。

        示例:使用自訓(xùn)練改進(jìn)分類器


        為了演示自訓(xùn)練,我使用Python和「surgical_deepnet」 數(shù)據(jù)集,可以在Kaggle上找到:https://www.kaggle.com/omnamahshivai/surgical-dataset-binary-classification

        此數(shù)據(jù)集用于二分類,包含14.6k+手術(shù)的數(shù)據(jù)。這些屬性是bmi、年齡等各種測量值,而目標(biāo)變量complexing則記錄患者是否因手術(shù)而出現(xiàn)并發(fā)癥。顯然,能夠準(zhǔn)確地預(yù)測患者是否會因手術(shù)而出現(xiàn)并發(fā)癥,這對醫(yī)療保健和保險供應(yīng)商都是最有利的。

        「導(dǎo)入庫」

        對于本教程,我將導(dǎo)入numpy、pandas和matplotlib。我還將使用sklearn中的LogisticRegression分類器,以及用于模型評估的f1_score和plot_confusion_matrix 函數(shù)

        import numpy as np
        import pandas as pd
        import matplotlib.pyplot as plt

        from sklearn.linear_model import LogisticRegression

        from sklearn.metrics import f1_score
        from sklearn.metrics import plot_confusion_matrix

        「加載數(shù)據(jù)」

        # 加載數(shù)據(jù)

        df = pd.read_csv('surgical_deepnet.csv')
        df.info()
        <class 'pandas.core.frame.DataFrame'>
        RangeIndex:
         14635 entries, 0 to 14634
        Data columns (total 25 columns):
        bmi                    14635 non-null float64
        Age                    14635 non-null float64
        asa_status             14635 non-null int64
        baseline_cancer        14635 non-null int64
        baseline_charlson      14635 non-null int64
        baseline_cvd           14635 non-null int64
        baseline_dementia      14635 non-null int64
        baseline_diabetes      14635 non-null int64
        baseline_digestive     14635 non-null int64
        baseline_osteoart      14635 non-null int64
        baseline_psych         14635 non-null int64
        baseline_pulmonary     14635 non-null int64
        ahrq_ccs               14635 non-null int64
        ccsComplicationRate    14635 non-null float64
        ccsMort30Rate          14635 non-null float64
        complication_rsi       14635 non-null float64
        dow                    14635 non-null int64
        gender                 14635 non-null int64
        hour                   14635 non-null float64
        month                  14635 non-null int64
        moonphase              14635 non-null int64
        mort30                 14635 non-null int64
        mortality_rsi          14635 non-null float64
        race                   14635 non-null int64
        complication           14635 non-null int64
        dtypes: float64(7), int64(18)
        memory usage: 2.8 MB

        數(shù)據(jù)集中的屬性都是數(shù)值型的,沒有缺失值。由于我這里的重點(diǎn)不是數(shù)據(jù)清理,所以我將繼續(xù)對數(shù)據(jù)進(jìn)行劃分。

        「數(shù)據(jù)劃分」

        為了測試自訓(xùn)練的效果,我需要將數(shù)據(jù)分成三部分:訓(xùn)練集、測試集和未標(biāo)記集。我將按以下比例拆分?jǐn)?shù)據(jù):

        • 1% 訓(xùn)練
        • 25% 測試
        • 74% 未標(biāo)記

        對于未標(biāo)記集,我將簡單地放棄目標(biāo)變量complexing,并假裝它從未存在過。

        所以,在這個病例中,我們認(rèn)為74%的手術(shù)病例沒有關(guān)于并發(fā)癥的信息。我這樣做是為了模擬這樣一個事實(shí):在實(shí)際的分類問題中,可用的大部分?jǐn)?shù)據(jù)可能沒有類標(biāo)簽。然而,如果我們有一小部分?jǐn)?shù)據(jù)的類標(biāo)簽(在本例中為1%),那么可以使用半監(jiān)督學(xué)習(xí)技術(shù)從未標(biāo)記的數(shù)據(jù)中得出結(jié)論。

        下面,我隨機(jī)化數(shù)據(jù),生成索引來劃分?jǐn)?shù)據(jù),然后創(chuàng)建測試、訓(xùn)練和未標(biāo)記的劃分。然后我檢查各個集的大小,確保一切都按計劃進(jìn)行。

        X_train dimensions: (14624)
        y_train dimensions: (146,)

        X_test dimensions: (365924)
        y_test dimensions: (3659,)

        X_unlabeled dimensions: (1083024)

        「類分布」

        多數(shù)類的樣本數(shù)((并發(fā)癥))是少數(shù)類(并發(fā)癥)的兩倍多。在這樣一個不平衡的類的情況下,我想準(zhǔn)確度可能不是最佳的評估指標(biāo)。

        選擇F1分?jǐn)?shù)作為分類指標(biāo)來判斷分類器的有效性。F1分?jǐn)?shù)對類別不平衡的影響比準(zhǔn)確度更為穩(wěn)健,當(dāng)類別近似平衡時,這一點(diǎn)更為合適。F1得分計算如下:

        其中precision是預(yù)測正例中正確預(yù)測的比例,recall是真實(shí)正例中正確預(yù)測的比例。

        「初始分類器(監(jiān)督)」

        為了使半監(jiān)督學(xué)習(xí)的結(jié)果更真實(shí),我首先使用標(biāo)記的訓(xùn)練數(shù)據(jù)訓(xùn)練一個簡單的Logistic回歸分類器,并對測試數(shù)據(jù)集進(jìn)行預(yù)測。

        Train f1 Score: 0.5846153846153846
        Test f1 Score: 0.5002908667830134

        分類器的F1分?jǐn)?shù)為0.5?;煜仃嚫嬖V我們,分類器可以很好地預(yù)測沒有并發(fā)癥的手術(shù),準(zhǔn)確率為86%。然而,分類器更難正確識別有并發(fā)癥的手術(shù),準(zhǔn)確率只有47%。

        「預(yù)測概率」

        對于自訓(xùn)練算法,我們需要知道Logistic回歸分類器預(yù)測的概率。幸運(yùn)的是,sklearn提供了.predict_proba()方法,它允許我們查看屬于任一類的預(yù)測的概率。如下所示,在二元分類問題中,每個預(yù)測的總概率總和為1.0。

        array([[0.939313670.06068633],
               [0.2327203 , 0.7672797 ],
               [0.939313670.06068633],
               ...,
               [0.619403530.38059647],
               [0.412400680.58759932],
               [0.243060080.75693992]])

        「自訓(xùn)練分類器(半監(jiān)督)」

        既然我們知道了如何使用sklearn獲得預(yù)測概率,我們可以繼續(xù)編碼自訓(xùn)練分類器。以下是簡要概述:

        「第1步」:首先,在標(biāo)記的訓(xùn)練數(shù)據(jù)上訓(xùn)練Logistic回歸分類器。

        「第2步」:接下來,使用分類器預(yù)測所有未標(biāo)記數(shù)據(jù)的標(biāo)簽,以及這些預(yù)測的概率。在這種情況下,我只對概率大于99%的預(yù)測采用“偽標(biāo)簽”。

        「第3步」:將“偽標(biāo)記”數(shù)據(jù)與標(biāo)記的訓(xùn)練數(shù)據(jù)連接起來,并在連接的數(shù)據(jù)上重新訓(xùn)練分類器。

        「第4步」:使用訓(xùn)練好的分類器對標(biāo)記的測試數(shù)據(jù)進(jìn)行預(yù)測,并對分類器進(jìn)行評估。

        重復(fù)步驟1到4,直到?jīng)]有更多的預(yù)測具有大于99%的概率,或者沒有未標(biāo)記的數(shù)據(jù)保留。

        下面的代碼使用while循環(huán)在Python中實(shí)現(xiàn)這些步驟。

        Iteration 0
        Train f1: 0.5846153846153846
        Test f1: 0.5002908667830134
        Now predicting labels for unlabeled data...
        42 high-probability predictions added to training data.
        10788 unlabeled instances remaining.

        Iteration 1
        Train f1: 0.7627118644067796
        Test f1: 0.5037463976945246
        Now predicting labels for unlabeled data...
        30 high-probability predictions added to training data.
        10758 unlabeled instances remaining.

        Iteration 2
        Train f1: 0.8181818181818182
        Test f1: 0.505431675242996
        Now predicting labels for unlabeled data...
        20 high-probability predictions added to training data.
        10738 unlabeled instances remaining.

        Iteration 3
        Train f1: 0.847457627118644
        Test f1: 0.5076835515082526
        Now predicting labels for unlabeled data...
        21 high-probability predictions added to training data.
        10717 unlabeled instances remaining.

        ...
        Iteration 44
        Train f1: 0.9481216457960644
        Test f1: 0.5259179265658748
        Now predicting labels for unlabeled data...
        0 high-probability predictions added to training data.
        10079 unlabeled instances remaining.

        自訓(xùn)練算法經(jīng)過44次迭代,就不能以99%的概率預(yù)測更多的未標(biāo)記實(shí)例了。即使一開始有10,830個未標(biāo)記的實(shí)例,在自訓(xùn)練之后仍然有10,079個實(shí)例未標(biāo)記(并且未被分類器使用)。

        經(jīng)過44次迭代,F(xiàn)1的分?jǐn)?shù)從0.50提高到0.525!雖然這只是一個小的增長,但看起來自訓(xùn)練已經(jīng)改善了分類器在測試數(shù)據(jù)集上的性能。上圖的頂部面板顯示,這種改進(jìn)大部分發(fā)生在算法的早期迭代中。同樣,底部面板顯示,添加到訓(xùn)練數(shù)據(jù)中的大多數(shù)“偽標(biāo)簽”都是在前20-30次迭代中出現(xiàn)的。

        最后的混淆矩陣顯示有并發(fā)癥的手術(shù)分類有所改善,但沒有并發(fā)癥的手術(shù)分類略有下降。有了F1分?jǐn)?shù)的提高,我認(rèn)為這是一個可以接受的進(jìn)步-可能更重要的是確定會導(dǎo)致并發(fā)癥的手術(shù)病例(真正例),并且可能值得增加假正例率來達(dá)到這個結(jié)果。

        警告語

        所以你可能會想:用這么多未標(biāo)記的數(shù)據(jù)進(jìn)行自訓(xùn)練有風(fēng)險嗎?答案當(dāng)然是肯定的。請記住,盡管我們將“偽標(biāo)記”數(shù)據(jù)與標(biāo)記的訓(xùn)練數(shù)據(jù)一起包含在內(nèi),但某些“偽標(biāo)記”數(shù)據(jù)肯定會不正確。當(dāng)足夠多的“偽標(biāo)簽”不正確時,自訓(xùn)練算法會強(qiáng)化糟糕的分類決策,而分類器的性能實(shí)際上會變得更糟。

        可以使用分類器在訓(xùn)練期間沒有看到的測試集,或者使用“偽標(biāo)簽”預(yù)測的概率閾值,可以減輕這種風(fēng)險。

        原文鏈接:https://towardsdatascience.com/a-gentle-introduction-to-self-training-and-semi-supervised-learning-ceee73178b38


        下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
        在「小白學(xué)視覺」公眾號后臺回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

        下載2:Python視覺實(shí)戰(zhàn)項(xiàng)目52講
        小白學(xué)視覺公眾號后臺回復(fù):Python視覺實(shí)戰(zhàn)項(xiàng)目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計算機(jī)視覺。

        下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講
        小白學(xué)視覺公眾號后臺回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講,即可下載含有20個基于OpenCV實(shí)現(xiàn)20個實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

        交流群


        歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細(xì)分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進(jìn)入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~


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

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            影音先锋av在线资源 | www亚洲视频 | 国产在线一卡 | 国产一级特黄录像片 | 国产女人十八水真多 | 看一级黄色录像 | 精品国产aⅴ麻豆 | 激情五月开心 | 色噜噜狠狠狠狠色综合 | 男人桶进女人下面 |