建模時,常常會遇到有些特徵變數代表的是型別或型別。比如城市(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,...