logo
Loading...

【機器學習實作問題】資料集全部特徵皆為二元類別 (Yes 和 No) 的機器學習資料處理問題 - Cupoy

您好,我是大學生,最近有進行機器學習的實作,遇到了以下問題,希望專家們能解除我的疑惑 : 模...

機器學習,二元特徵資料集

【機器學習實作問題】資料集全部特徵皆為二元類別 (Yes 和 No) 的機器學習資料處理問題

2022/04/02 上午 04:38
機器學習共學討論版
Ian Chen
觀看數:145
回答數:1
收藏數:2
機器學習
二元特徵資料集

您好,我是大學生,最近有進行機器學習的實作,遇到了以下問題,希望專家們能解除我的疑惑 : 1. 模型的準確度是否會跟資料集欄位的型態有關?例如每個欄位都是二元類別型態的資料,準確度普遍來說會比較高 ? 如果是的話,為何皆是二元類別的資料集擁有比較好的訓練結果呢 (test 的結果一樣很高)? 2. (1) 上網查詢後,發現蠻多人說二元特徵 (值為 Yes 和 No) 使用 One-Hot encoding 是不必要的,請問這個說法是正確的嗎?另外,一般針對二元特徵會做什麼 encoding 呢 ? (2) 如果把欄位做 One-Hot encoding,新增欄位的 "1" 和 "0" 是類別型態還是數值型態呢? "1" 和 "0" 的型態 (類別或數值) 會對結果有什麼影響呢? 3. 把較少數量的類別資料 OverSampling 到比原先數量較多的類別資料還多,會有意義嗎 ? 4. 切分訓練集與測試集時,切分的比例有固定做法嗎?建議的切分比例有哪些呢 ? (如 80 : 20 之類的 ? ) 5. 實作過程中,發生過 test 的結果比 train 的結果還要好,請問這是正常的嗎 ? 背後原因可能是什麼呢 ? 會有很大的問題嗎 ? 該如何處理呢 ? 以上問題,勞煩專家們了,學生十分感謝 !

回答列表

  • 2022/04/02 下午 00:31
    王健安
    贊同數:2
    不贊同數:0
    留言數:1

    Ian Chen 您好, 關於「模型準確度是否的資料欄位的型態有關?」, 若只有二元類型的資料當作訓練資料, 與其說是模型訓練得好,倒不如說是「資料品質本身好」, 模型本身的任務是「從資料中找出一種規律性」, 而二元類型的資料相較於多分類類型、數值類型資料, 限制多出非常多, 尋找「產生結果的組合」也會比較少, 因此當訓練、測試結果一樣好時, 除了可能是訓練、測試資料特性或分佈相似, 也可能是「產生結果的組合」不多,在模型訓練時皆已考量, 才會讓測試資料的預測結果跟訓練資料類似。 關於「二元特徵 (值為 Yes 和 No) 使用 One-Hot encoding 是不必要的」, 由於我並不清楚出處來源為何, 因此我從 One-Hot Encoding 本身功能、對特徵而言以及對目標變數而言的角色做討論, One-Hot Encoding 是個將多分類變數轉換成很多個二元類型變數的工具, 例如:居住縣市可能分為「北部」、「中部」、「南部」與「東部」等一個變數, 這時轉成 One-Hot Encoding 時會變成「是否為北部」一個變數、「是否為中部」一個變數、「是否為南部」一個變數與「是否為東部」一個變數, 每個變數皆為二元類型變數; 對特徵來說,多分類變數是否該轉換為 One-Hot Encoding 我覺得可以從以下兩層面是可考慮以其他 Encoding 方式取代, 第一個是該分類變數本身是否可排序,若該變數本身是有大小、優劣順序,也可直接數值方式呈現, 例如:年齡層會以「21-30歲」以「1」表示、「31-40歲」以「2」表示、「41-50」以「3」表示, 而從數值本身可看出1 < 2 < 3,而在年齡大小上 21-30歲 < 31-40 歲 < 41-50歲, 因此年齡層就可以直接以1、2、3呈現, 第二個是當該類別的類別數過多, 使用 One-Hot Encoding 會讓資料產生過多的零,產生稀疏矩陣, 這會讓訓練過程更加困難, 依照我自己的經驗, 當該變數超過十類以上, 我就勢必會先將相似的類別分成同一類, 再進行 One-Hot Encoding; 對目標變數來說, 一定要使用 One-Hot Encoding 將多分類目標變數進行轉換, 至於為何一定要這樣做會連同下個問題一同給予解答。 關於「新增欄位的 "1" 和 "0" 是類別型態還是數值型態呢」, 要謹記在心的一點是「電腦只看得懂數字」, 而變數屬於類別還是數值型態是人賦予它的定義, 因此不論該變數本身是要使用類別型態還是數值型態作定義, 到輸入模型時「一定是數值型態」, 而 One-Hot Encoding 就是「把類別型態轉換成數值型態的過程」, 從「人」的角度看,One-Hot Encoding 後的變數或欄位的確還是符合類別型態, 但在實務處理時必須把它設定為「數值型態」, 這樣才能讓電腦進行運算。 關於「把較少數量的類別資料 OverSampling 到比原先數量較多的類別資料還多,會有意義嗎」, OverSampling 主要用途為「增加少數量類別的資料以增加更多特徵」, 實際使用上我會根據資料品質分成三種情況, 第一種情況「當每個類別的特徵區分明顯」時, 不論有無做 OverSampling模型都能幫我分得很清楚, 效果絕佳, 這時做OverSampling; 第二種情況「當每個類別的特徵有部分重疊」時, 使用OverSampling能夠幫助少類別增加特徵, 讓模型更能偵測到少類別的特徵範圍, 至於是否要OverSampling到比原先最多數量類別多, 目前沒有學術上嚴謹的研究證實, 但也是因為每個研究者有的資料性質差異大, 很難有一個共識, 從經驗上會以「把少數量類別增加到接近多數量類別」即可, 超過數量是否有影響,得測了才知道。 關於「切分訓練集與測試集時,切分的比例有固定做法嗎?建議的切分比例有哪些呢」, 它會受到資料數量、資料品質很深的影響, 因此目前學術上沒有一個公正的證據證明應該切成多少, 我自己也的確是把資料切分成80%為訓練資料、20%為測試資料。 關於「實作過程中,發生過 test 的結果比 train 的結果還要好,請問這是正常的嗎?」, 我回答正常是錯的,回答不正常也是錯的, 因為這樣的現象會跟「訓練資料的資料特性或分佈是否跟測試資料一樣」有關, 當訓練資料與測試資料分佈一致, 那測試資料比訓練資料的結果好是感到高興的, 代表模型真的有學習到訓練資料的特性, 而當訓練資料與測試資料分佈不一致, 測試資料比訓練資料的結果好就需要質疑, 畢竟沒有證據證明模型有訓練到訓練資料的特性, 因此回答這個問題前, 需先檢視訓練與測試資料分佈是否一致