值错误:预期 n_neighbors <= 1。得到 5 -Scikit K 最近的分类器



我正在使用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

老实说,我真的很困惑。我已经检查了每个数据集的长度,它们很好。为什么它会告诉我我只有一个数据点可以绘制?任何帮助将不胜感激。

分类器认为数据集只有一个条目。可能它将id的向量解释为行向量而不是列向量。

尝试

model.fit(train_feature.as_matrix(['id']), train_class.as_matrix(['gender']))

看看是否有帮助。

我遇到了同样的错误。我有一个巨大的数据库,我可以在其中获取训练和测试数据,但出于代码测试目的,我使用了一个相当小的数据库(~原始数据的 0.5%)。在训练过程中,我测试了许多不同的邻居,例如

for neighbor in range(5,19): ...

n_neigbors=19 引发了 ValueError 异常。仅当我使用小数据库时才会引发此错误。原因是它没有实际的数据输入来创建 19 种不同的测量。当我使用完整的数据库进行测试时,没有出现此类异常。

设置algorithm='brute'并不能解决问题,尽管它可能有效。你应该做的是检查你的观察长度,包括训练和测试,并相应地设置n_neighbors值的上限。

只需设置n_neighbors值

knn = KNeighborsClassifier(n_neighbors=1)
我想通了

。我需要将模型设置为蛮力和度量到距离:

model = KNeighborsClassifier(metric=machine_learning.custom_distance,algorithm='brute',n_neighbors=50)

相关内容

  • 没有找到相关文章

最新更新