變數編碼方式

2021-09-29 12:21:52 字數 1403 閱讀 8393

在機器學習問題中,我們通過訓練資料集學習得到的其實就是一組模型的引數,然後通過學習得到的引數確定模型的表示,最後用這個模型再去進行我們後續的**分類等工作。在模型訓練過程中,我們會對訓練資料集進行抽象、抽取大量特徵,這些特徵中有離散型特徵也有連續型特徵。若此時你使用的模型是簡單模型(如lr),那麼通常我們會對連續型特徵進行離散化操作,然後再對離散的特徵,進行one-hot編碼或啞變數編碼。這樣的操作通常會使得我們模型具有較強的非線性能力。那麼這兩種編碼方式是如何進行的呢?它們之間是否有聯絡?又有什麼樣的區別?是如何提公升模型的非線性能力的呢?下面我們一一介紹:

one-hot encoding

dummy encoding

啞變數編碼直觀的解釋就是任意的將乙個狀態位去除。還是拿上面的例子來說,我們用4個狀態位就足夠反應上述5個類別的資訊,也就是我們僅僅使用前四個狀態位 [0,0,0,0] 就可以表達博士了。只是因為對於乙個我們研究的樣本,他已不是小學生、也不是中學生、也不是大學生、又不是研究生,那麼我們就可以預設他是博士,是不是。(額,當然他現實生活也可能上幼兒園,但是我們統計的樣本中他並不是,-)。所以,我們用啞變數編碼可以將上述5類表示成:

:區別與聯絡

one-hot編碼dummy編碼

通過上面的例子,我們可以看出它們的「思想路線」是相同的,只是啞變數編碼覺得one-hot編碼太羅嗦了(一些很明顯的事實還說的這麼清楚),所以它就很那麼很明顯的東西省去了。這種簡化不能說到底好不好,這要看使用的場景。下面我們以乙個例子來說明:

假設我們現在獲得了乙個模型,這裡自變數滿足(因為特徵是one-hot獲得的,所有只有乙個狀態位為1,其他都為了0,所以它們加和總是等於1),故我們可以用表示第三個特徵,將其帶入模型中,得到:

這時,我們就驚奇的發現和這兩個引數是等價的!那麼我們模型的穩定性就成了乙個待解決的問題。這個問題這麼解決呢?有三種方法:

(1)使用正則化手段,將引數的選擇上加乙個限制,就是選擇引數元素值小的那個作為最終引數,這樣我們得到的引數就唯一了,模型也就穩定了。

(2)把偏置項去掉,這時我們發現也可以解決同乙個模型引數等價的問題。

因為有了bias項,所以和我們去掉bias項的模型是完全不同的模型,不存在引數等價的問題。

(3)再加上bias項的前提下,使用啞變數編碼代替one-hot編碼,這時去除了,也就不存在之前一種特徵可以用其他特徵表示的問題了。

總結:我們使用one-hot編碼時,通常我們的模型不加bias項 或者 加上bias項然後使用正則化手段去約束引數;當我們使用啞變數編碼時,通常我們的模型都會加bias項,因為不加bias項會導致固有屬性的丟失。

選擇建議:我感覺最好是選擇正則化 + one-hot編碼;啞變數編碼也可以使用,不過最好選擇前者。雖然啞變數可以去除one-hot編碼的冗餘資訊,但是因為每個離散型特徵各個取值的地位都是對等的,隨意取捨未免來的太隨意。

變數編碼方式

機器學習模型只能處理數字。數值 連續 定量 變數是可以在有限或無限區間內取任何值的變數,它們可以很自然地用數字表示,所以可以在模型中直接使用。原始類別變數通常以字串的形式存在,在傳入模型之前需要變換。類別編碼的兩個基本方法是獨熱編碼 onehot encoding 和標籤編碼 label encod...

離散變數的編碼方式

在機器學習問題中,我們通過訓練資料集學習得到的其實就是一組模型的引數,然後通過學習得到的引數確定模型的表示,最後用這個模型再去進行我們後續的 分類等工作。在模型訓練過程中,我們會對訓練資料集進行抽象 抽取大量特徵,這些特徵中有離散型特徵也有連續型特徵。若此時你使用的模型是簡單模型 如lr 那麼通常我...

編碼方式,編碼之問題

編碼方式對於程式的重要不言而喻,若是不能徹底理解編碼方式,則在許多的地方都會困擾著你。對於編碼方式的困擾,在剛學習jsp時出現的亂碼問題到現在一年有餘,一直在模糊狀態,如今,也不知道是不是真的徹底明白,只是有一點小小的收穫,期待以後的徹底理解,在此先記錄一下點點滴滴。從開始的亂碼起。首先是jsp中的...