所以,我的数据中有128个面部编码,标签是人的名字,包含名字的列是我的目标列。我显然使用了标签二值化来对因变量(名字列)进行二值化。当我使用KNN来拟合和预测人的名字时,它什么也没预测出来。
应该像这样:
但相反,我得到了这个:
因此,我首先怀疑是否可以使用字符串值作为我的因变量或目标变量。任何帮助都将不胜感激。谢谢
对于二值化,我使用了以下方法
#Binarising the labelslabelBinarised = LabelBinarizer()Y_train=labelBinarised.fit_transform(Y_train)Y_test = labelBinarised.fit_transform(Y_test)
回答:
你可以使用字符串值作为目标变量,因为文档中说目标变量应该是{array-like, sparse matrix} Target values of shape = [n_samples] or [n_samples, n_outputs]
,他们没有提到必须是数值的。你的特征需要是数值的,因为它用于计算距离,但你的目标可以是字符串。
如下面的例子所示,目标值是字符串,并且运行良好:
X = [[0], [1], [2], [3]]y = ['zero', 'zero', 'one', 'one']from sklearn.neighbors import KNeighborsClassifierneigh = KNeighborsClassifier(n_neighbors=3)neigh.fit(X, y)print(neigh.predict([[3]]))#output#array(['one'], dtype='<U4')