特徵工程 One hot編碼

2021-09-23 13:35:23 字數 2341 閱讀 5362

建模時,常常會遇到有些特徵變數代表的是型別或型別。比如城市(city),它的取值有san francisco,new york和seattle三種。代表三個城市。

import pandas as pd

from sklearn import linear_model

df = pd.dataframe()

city	rent

0 sf 3999

1 sf 4000

2 sf 4001

3 nyc 3499

4 nyc 3500

5 nyc 3501

6 seattle 2499

7 seattle 2500

8 seattle 2501

對於這樣的變數肯定要數值化。可能很多人會想到做這樣的對映:。

做如上處理後,資料變為:

city	rent

0 1 3999

1 1 4000

2 1 4001

3 2 3499

4 2 3500

5 2 3501

6 3 2499

7 3 2500

8 3 2501

對其採用線性回歸建模:

model = linear_model.linearregression()

model.fit(df2[['city']],df2[['rent']])

#檢視模型引數,線性模型的斜率和截距

model.coef_

model.intercept_

#輸出模型引數

array([[-750.]])

array([4833.33333333])

將類別特徵進行表示乙個最好的辦法就是使用一組位元位來表達。每一位代表乙個可能的類別。 如果該變數不能一次成為多個類別,那麼該組中只有一位可以是1。 這被稱為獨熱編碼,它在scikit learn中實現sklearn.preprocessing.onehotencoder。 每個位都是乙個特徵。 因此是乙個絕對的具有k個可能類別的變數被編碼為長度為k的特徵向量。

表 對3個城市的類別進行獨熱編碼

city

e1e2

e3san francisco10

0new york01

0seattle00

1獨熱編碼非常易於理解。 但它使用的是比嚴格必要的更多的一點。 如果我們看到k-1位是零,那麼最後一位必須是1,因為變數必須具有k個值中的乙個。 在數學上,可以寫下這個約束條件為「所有位的和必須等於1」。

獨熱編碼e1,e2,e3限制條件。

e1+e2+e3+...+ek=1

因此,我們有乙個線性的依賴性。 線性相關特徵,就像我們一樣在tfidf中發現,有點煩人,因為它意味著訓練線性模型不會是唯一的。 特徵的不同線性組合可以做出同樣的**,所以我們需要跳過額外條件的來理解特徵對**的影響。

我們看下採用one-hot編碼後的資料建模效果如何。

#one-hot編碼,將city的列,重新以city為字首產生新的列

one_hot_df = pd.get_dummies(df, prefix=['city'])

輸出新的資料集:

rent city_nyc city_sf city_seattle

0 3999 0 1 0

1 4000 0 1 0

2 4001 0 1 0

3 3499 1 0 0

4 3500 1 0 0

5 3501 1 0 0

6 2499 0 0 1

7 2500 0 0 1

8 2501 0 0 1

建模:

model = linear_model.linearregression()

model.fit(one_hot_df[['city_nyc', 'city_sf', 'city_seattle']],one_hot_df[['rent']])

檢視模型引數:

model.coef_

model.intercept_

結果:

array([[ 166.66666667,  666.66666667, -833.33333333]])

array([3333.33333333])

可以看到,經過one-hot編碼後,模型的誤差明細減少,同時模型也更具可解釋性。

one hot編碼理解

one hot是比較常用的文字特徵特徵提取的方法。one hot編碼,又稱 獨熱編碼 其實就是用n位狀態暫存器編碼n個狀態,每個狀態都有獨立的暫存器位,且這些暫存器位中只有一位有效,說白了就是只能有乙個狀態。下面舉例說明 有四個樣本,每個樣本有三種特徵 feature1 feature2 featu...

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,...