【发布时间】:2015-07-12 00:27:03
【问题描述】:
我正在使用 SCIkit KNN 和 levenstein 距离来处理一些字符串,很像本页底部的示例:http://scikit-learn.org/stable/faq.html。不同之处在于我的数据被分成训练集并在数据框中。
此处列出了拆分:
train_feature, test_feature, train_class, test_class = train_test_split(features, classes,
test_size=TEST_SET_SIZE, train_size=TRAINING_SET_SIZE,
random_state=42)
我有以下几点:
>>> model = KNeighborsClassifier(metric='pyfunc',func=machine_learning.custom_distance)
>>> model.fit(train_feature['id'], train_class.as_matrix(['gender']))
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='pyfunc',
metric_params={'func': <function custom_distance at 0x7fd0236267b8>},
n_neighbors=5, p=2, weights='uniform')
其中 train_features 有一列([24000 行 x 1 列]),id 和 train_class(名称:性别,dtype:对象)是“性别”的系列,即“M”或“F”。 id 对应于其他地方的字典中的一个键。
自定义距离函数为:
def custom_distance(x,y):
i, j = int(x[0]), int(y[0])
return damerau_levenshtein_distance(lookup_dict[i],lookup_dict[j])
当我尝试获取模型的准确性时:
accuracy = model.score(test_feature, test_class)
我收到此错误:
ValueError: Expected n_neighbors <= 1. Got 5
老实说,我真的很困惑。我检查了每个数据集的长度,它们都很好。为什么它会告诉我我只有一个数据点可以绘制?任何帮助将不胜感激。
【问题讨论】:
-
对你最后一点的轻微重构:错误告诉你有 5 个邻居,但问题是它期待一个
-
也许可以尝试从一个模仿您当前设置的简单示例来复制问题并找出问题所在。除了 scikit 的内置函数之外,也许还可以尝试其他方法来生成训练/测试集和对模型的准确性进行评分
-
我在使用示例和 NearestNeighbor 时收到了同样的错误。
标签: python numpy pandas machine-learning scikit-learn