2016-01-31 26 views
1

我有以下陣列(實際上是一個熊貓數據幀,其具有的陣列狀的數據結構),它類似於以下內容:如何在scikit中對分類數據使用一個熱門編碼器?

[ 
    ['M', 4, 15] 
    ['M', 3, 7] 
    ['F', 5, 9] 
    ['I', 4, 15] 
] 

我要預處理該數據,所以我可以在直線用它迴歸。 我相信這樣做的方法是使用一個熱編碼器:http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html#sklearn.preprocessing.OneHotEncoder

但是,只有類別是整數纔有效。

我相信你可以使用DictVectorizer做到這一點:http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.DictVectorizer.html#sklearn.feature_extraction.DictVectorizer

然而,這似乎只爲字典,而不是數組。

回答

0

地圖您的類別爲整數類似下面的代碼:

def tokenize(data, col_of_category): 
    str_to_int, int_to_str = {}, {} 
    for row in data: 
     cat = row[col_of_category] 
     if cat in str_to_int.keys(): token = str_to_int[cat] 
     else: 
      token = len(str_to_int.keys()) 
      str_to_int[cat] = token 
      int_to_str[token] = cat 
     row[col_of_category] = token # assuming your rows are mutable 
    return str_to_int, int_to_str 

然後,您可以使用返回的字典來管理未來的映射和取消映射。您可以使用OneHotEncoder。你的算法不關心涉及的字符串。

0

比方說,你的數據幀df是這樣的:

>>> df 
    col1 col2 col3 
0 M  4 15 
1 M  3  7 
2 F  5  9 
3 I  4 15 

對於轉換col1成獨熱編碼向量,就可以使用熊貓get_dummies方法。

>>> df = pd.get_dummies(df, columns=['col1']) 
>>> df 
    col2 col3 col1_F col1_I col1_M 
0  4 15  0  0  1 
1  3  7  0  0  1 
2  5  9  1  0  0 
3  4 15  0  1  0 
相關問題