2017-02-03 61 views
0

我想向量化一些分類數據以構建列車和測試矩陣。如何矢量化分類數據

我有85個城市,我想獲得一個矩陣282520行,每一行是像

[1 0 0 ..., 0 0 0] 

矢量我想有每行的矢量爲1或0取決於城市,所以每因此城市應該是一個列:

print(df['city']) 
0   METROPOLITANA DE SANTIAGO 
1   METROPOLITANA DE SANTIAGO 
2   METROPOLITANA DE SANTIAGO 
3   METROPOLITANA DE SANTIAGO 
4       COQUIMBO 
5       SANTIAGO 
6       SANTIAGO 
7   METROPOLITANA DE SANTIAGO 
8   METROPOLITANA DE SANTIAGO 
9   METROPOLITANA DE SANTIAGO 
10       BIO BIO 
11       COQUIMBO 
...        ... 
282520 METROPOLITANA DE SANTIAGO 
Name: city, dtype: object 

這是我的嘗試:

from sklearn import preprocessing 

list_city = getList(df,'city') 
le = preprocessing.LabelEncoder() 
le.fit(list_city) 

print(le.transform(['AISEN'])) 
print(le.transform(['TARAPACA'])) 
print(le.transform(['AISEN DEL GENERAL CARLOS IBANEZ DEL CAMP'])) 

我得到以下輸出:

[0] 
[63] 
[1] 

的問題是,我剛開了城市的指數,我找了建議,就如何向量化的數據。

+0

你確定你不是在尋找[OneHotEncoder](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html#sklearn.preprocessing .OneHotEncoder)?這聽起來更像你要找的東西。 – patrick

回答

3

一個選項是pd.get_dummies(它完全在sklearn生態系統之外)。

df = pd.DataFrame(['METROPOLITANA DE SANTIAGO', 'COQUIMBO', 'SANTIAGO', 'SANTIAGO'], 
        columns=['city']) 
pd.get_dummies(df) 
city_COQUIMBO city_METROPOLITANA DE SANTIAGO city_SANTIAGO 
0    0        1    0 
1    1        0    0 
2    0        0    1 
3    0        0    1 

如果你需要一個NumPy的陣列,只要抓住了values

pd.get_dummies(df).values 
[[0 1 0] 
[1 0 0] 
[0 0 1] 
[0 0 1]] 

另一種方法是使用LabelEncoderOneHotEncoder的組合。如您注意到的,LabelEncoder將返回任意標籤數組的分類索引。 OneHotEncoder會將這些索引翻轉爲一個一個k編碼方案。

le = LabelEncoder() 
enc = OneHotEncoder(sparse=False) 
enc.fit_transform(le.fit_transform(df.city.values).reshape(-1, 1)) 
[[ 0. 1. 0.] 
[ 1. 0. 0.] 
[ 0. 0. 1.] 
[ 0. 0. 1.]] 

另一個選擇是DictVectorizer

dv = DictVectorizer(sparse=False) 
dv.fit_transform(df.apply(dict, 1)) 
[[ 0. 1. 0.] 
[ 1. 0. 0.] 
[ 0. 0. 1.] 
[ 0. 0. 1.]] 
+0

感謝支持,這是非常有用的,但是,這將給我85列,然後我將需要找到一種方法來轉換這個85列在一個numpy陣列來構建矩陣 – neo33

+0

@neo我編輯我的答案顯示如何從'pd.get_dummies'的結果中提取'ndarray',以及另外兩種方法。 –

+0

@感謝您的幫助,我非常感謝支持,非常感謝 – neo33