2017-06-05 76 views
0

我有一個數據集users。每個用戶都有性別和顏色屬性(最喜歡的顏色),等等。我分一種性別的用戶的每個顏色和總和其中這樣顏色的一個列表:我應該如何重新格式化我的數據sklearn.naive_bayes.GaussianNB

features_train = [['indigo', 2341], ['yellow', 856], ['lavender', 690], ['yellowgreen', 1208], ['indigo', 565], ['yellow', 103], ['lavender', 571], ['yellowgreen', 234] ...] 

在第二列表中的每個元件從所述第一列表我說哪個性別表示該元素:

labels_train = [0, 0, 0, 0, 1, 1, 1, 1, ...] 

現在我有第三個顏色列表:features_test = ['yellow', 'red', ...],我需要預測性別。

我必須使用naive_bayes.GaussianNB函數從sklearn我將有更多的屬性users,但解釋我的問題,我只使用顏色和性別。所以,我找到了一個正式的例子,但我不明白我應該如何重新格式化我的數據集才能使用它們。我是否應該將我的顏色轉換爲以下幾種數字表示形式:[[0, 2341], [1, 856]]或者我應該使用sklearn中的一些其他功能來做到這一點?

import numpy as np 
from sklearn.naive_bayes import GaussianNB 
clf = GaussianNB() 
clf.fit(features_train, labels_train) 
print(clf.predict(features_test)) 
+0

轉換顏色爲整數,並嘗試運行你的代碼。 –

+1

我不明白。你想使用每個列表的第二個元素(關於「一個性別的用戶總數」的功能)嗎?如果是,那麼在預測數據時也需要提供它。無論如何,scikit-learn估計器不支持X中的字符串。您需要按照@Shiva的建議將它們轉換爲數字。 –

+1

[sklearn.preprocessing.LabelEncoder](http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html)可能會幫助您將1D字符串數組轉換爲數值... – MaxU

回答

1

爲了使用scikit-learn在文本文檔上執行'機器學習',首先需要將文本內容轉換爲數字特徵向量。

最直觀的方法就是用文字表示 - 你可以像你剛剛提到的那樣通過重新格式化數據集來解決這個問題。

鑑於您的'X'和'y'都是1-D,我建議通過在scikit-learn中使用LabelEnconder將您的文本類轉換爲一組數字特徵向量。

見下文:

import numpy as np 
from sklearn import preprocessing 
from sklearn.naive_bayes import GaussianNB 

clf = GaussianNB() 
le = preprocessing.LabelEncoder() 


#Fit label encoder and return encoded features 
features_train_num = le.fit_transform(features_train) 
features_test_num = le.transform(features_test) 

#Fit label encoder and return encoded labels 
labels_train_num = le.fit_transform(labels_train) 
labels_test_num = le.transform(labels_test) 

clf.fit(features_train_num, labels_train_num) 
print(clf.predict(features_test_num)) 
相關問題