【问题标题】:K-nearest neighbor in pythonpython中的K最近邻
【发布时间】:2013-03-21 16:34:40
【问题描述】:

我有包含单个维度和类标签的数据。我想在上面运行 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

【问题讨论】:

    标签: python-2.7 machine-learning knn


    【解决方案1】:

    嗯,错误信息很垃圾,你应该给那些人发邮件并要求他们修复它,但无论如何...http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html#sklearn.neighbors.KNeighborsClassifier 上的示例非常清楚:fit() 的第一个参数是列表列表,而不是数字列表。此外,第二个参数必须是“整数值数组”,但您已经编写了一个字符串数组。

    【讨论】:

    • 谢谢,现在我明白了... &gt;&gt;&gt; train = [[0.7043607250604991], [0.9156435124135893], [0.9931506043228762], [2.264187785208016]] &gt;&gt;&gt; label = [1,1,1,0] &gt;&gt;&gt; from sklearn.neighbors import KNeighborsClassifier &gt;&gt;&gt; knn = KNeighborsClassifier() &gt;&gt;&gt; knn.fit(train, label) KNeighborsClassifier(algorithm='auto', leaf_size=30, n_neighbors=5, p=2, warn_on_equidistant=True, weights='uniform') 但是我们在哪里指定算法使用哪个距离度量?
    • 我不知道你的意思是什么,因为我对算法完全不熟悉,但是你读过我链接到的文档吗?它谈到了很多关于距离的内容......如果您需要的不仅仅是文档,我建议您阅读源代码:github.com/scikit-learn/scikit-learn/tree/master/sklearn/…
    • 是否有可用于顺序数据的 knn 版本?
    【解决方案2】:

    您首先需要使用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... import 脚本顶部的语句。下次像现在一样编写或发布代码时请记住这一点。或者,您可以在 def(顶部)中包含 import 语句。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 2012-07-19
    • 2011-12-06
    • 2021-11-04
    • 1970-01-01
    • 2018-04-08
    • 2014-05-14
    相关资源
    最近更新 更多