Python中的K最近邻算法

3

我有一组数据,包含单维度和类别标签。我想在这组数据上运行KNN算法。

我的数据长这个样子:

feature       Label
0.70436073      1
0.91564351      1
0.9931506       1
2.26418779      0

我做了以下操作,但出现了错误。从错误信息中我理解到train的数据类型无法识别,但我不知道如何修复它。请帮忙。
>>> train = [ 0.70436073,  0.91564351,  0.9931506,   2.26418779]
>>> train
[0.70436073, 0.91564351, 0.9931506, 2.26418779]
>>> label = ['1','1','1','0']
>>> from sklearn.neighbors import KNeighborsClassifier
>>> knn = KNeighborsClassifier()
>>> knn.fit(train, label)

Traceback (most recent call last):
  File "<pyshell#26>", line 1, in <module>
    knn.fit(train, label)
  File "C:\Python27\lib\site-packages\sklearn\neighbors\base.py", line 586, in fit
    return self._fit(X)
  File "C:\Python27\lib\site-packages\sklearn\neighbors\base.py", line 126, in _fit
    raise ValueError("data type not understood")
ValueError: data type not understood
2个回答

3

谢谢,现在我明白了... >>> train = [[0.7043607250604991], [0.9156435124135893], [0.9931506043228762], [2.264187785208016]] >>> label = [1,1,1,0] >>> from sklearn.neighbors import KNeighborsClassifier >>> knn = KNeighborsClassifier() >>> knn.fit(train, label) KNeighborsClassifier(algorithm='auto', leaf_size=30, n_neighbors=5, p=2, warn_on_equidistant=True, weights='uniform') 但是我们在哪里指定算法使用的距离度量呢? - user1946217
我不知道你所说的算法是什么,因为我对此完全不熟悉,但你是否阅读了我提供的文档?它详细介绍了距离的相关内容...如果你需要更多信息,我建议阅读源代码:https://github.com/scikit-learn/scikit-learn/tree/master/sklearn/neighbors - boxed
有适用于序列数据的knn版本吗? - Granth

1

首先,您需要使用np.array将列表转换为数组。然后,由于您的数据只有一个特征,需要对数组进行重塑。请按照以下代码操作:

import numpy as np
train = np.array([[ 0.70436073,  0.91564351,  0.9931506,   2.26418779]])
train_1 = train.reshape(-1, 1)
label = np.array([['1','1','1','0']])
label_1 = label.reshape(-1,1)
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier()
knn.fit(train_1, label_1)

根据Python PEP 8规范...将导入语句放在脚本顶部。下次编写或发布代码时请记住这一点。或者,您可以将导入语句包含在def(顶部)中。 - ZF007

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接