我有一个数据集users
。每个用户都有性别和颜色属性(喜欢的颜色),依此类推。我将每种颜色和一种性别的用户总和分成一个列表:
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'和'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))