2017-06-05 50 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)) 
相关问题