one hot編碼理解

2022-02-14 18:04:23 字數 1660 閱讀 3078

one-hot是比較常用的文字特徵特徵提取的方法。

one-hot編碼,又稱「獨熱編碼」。其實就是用n位狀態暫存器編碼n個狀態,每個狀態都有獨立的暫存器位,且這些暫存器位中只有一位有效,說白了就是只能有乙個狀態。

下面舉例說明:

有四個樣本,每個樣本有三種特徵:

feature1   feature2   feature3

sample1   1      4     3

sample2   2      3     2

sample3   1      2     2

sample4   2      1     1

上圖用十進位制數對每種特徵進行了編碼,feature1有兩種可能的取值,feature2有4種可能的取值,feature3有3種可能的取值。比如說feature3有3種取值,或者說有3種狀態,那麼就用3個狀態位來表示,以保證每個樣本中的每個特徵只有1位處於狀態1,其他都是0。

1->001

2->010

3->100

其他的特徵也都這麼表示:

feature1   feature2   feature3

sample1   01     1000    100

sample2   10     0100    010

sample3   01     0010    010

sample4   10     0001    001

這樣,4個樣本的特徵向量就可以這麼表示:

sample1 -> [0,1,1,0,0,0,1,0,0]

sample2 -> [1,0,0,1,0,0,0,1,0]

sample3 -> [0,1,0,0,1,0,0,1,0]

sample4 -> [1,0,0,0,0,1,0,0,1]

接下來看看怎麼應用one-hot:

one-hot在特徵提取上屬於詞袋模型(bag of words),假設語料庫中有三句話:

我愛中國

爸爸媽媽愛我

爸爸媽媽愛中國

首先,將語料庫中的每句話分成單詞,並編號:

1:我      2:愛      3:爸爸      4:媽媽      5:中國

所以最終得到的每句話的特徵向量就是:

我愛中國 -> 1,1,0,0,1

爸爸媽媽愛我 -> 1,1,1,1,0

爸爸媽媽愛中國 -> 0,1,1,1,1

那麼這樣做的優點和缺點都有什麼?

優點:解決了分類器處理離散資料困難的問題

一定程度上起到了擴充套件特徵的作用(上例中從3擴充套件到了9)

缺點:one-hot是乙個詞袋模型,不考慮詞與詞之間的順序問題,而在文字中,次的順序是乙個很重要的問題

one-hot是基於詞與詞之間相互獨立的情況下的,然而在多數情況中,詞與詞之間應該是相互影響的

one-hot得到的特徵是離散的,稀疏的

onehot編碼解釋

one hot編碼,又稱為一位有效編碼,主要是採用n位狀態暫存器來對n個狀態進行編碼,每個狀態都由他獨立的暫存器位,並且在任意時候只有一位有效。one hot編碼是分類變數作為二進位制向量的表示。這首先要求將分類值對映到整數值。然後,每個整數值被表示為二進位制向量,除了整數的索引之外,它都是零值,它...

one hot 編碼的實現

對 mnist 手寫字元識別 資料集進行手寫數字分類,屬於多分類問題,手寫數字 0 9,共 10 類,從 mnist.pkl.gz 檔案中解析得到的字元影象 28 28 的標籤 label,或者目標值 只有 1 維,進行 one hot 編碼可將其編碼為 10 維,數字 0,編碼為 1,0,0,0,...

特徵工程 One hot編碼

建模時,常常會遇到有些特徵變數代表的是型別或型別。比如城市 city 它的取值有san francisco,new york和seattle三種。代表三個城市。import pandas as pd from sklearn import linear model df pd.dataframe c...