繁体   English   中英

在scikit-learn中实现K Neighbors Classifier,每个对象有3个特征

[英]Implement K Neighbors Classifier in scikit-learn with 3 feature per object

我想用scikit-learn模块实现一个KNeighborsClassifier( http://scikit-learn.org/dev/modules/generated/sklearn.neighbors.KNeighborsClassifier.html

我从我的图像中检索坚固性,伸长率和Humoments功能。 我如何准备这些数据进行培训和验证? 我必须为从我的图像中检索到的每个对象创建一个包含3个特征[Hm,e,s]的列表(从1个图像中有更多对象)?

我读了这个例子( http://scikit-learn.org/dev/modules/generated/sklearn.neighbors.KNeighborsClassifier.html ):

X = [[0], [1], [2], [3]]
y = [0, 0, 1, 1]
from sklearn.neighbors import KNeighborsClassifier
neigh = KNeighborsClassifier(n_neighbors=3)
neigh.fit(X, y) 

print(neigh.predict([[1.1]]))
print(neigh.predict_proba([[0.9]]))

X和y是2个特征?

samples = [[0., 0., 0.], [0., .5, 0.], [1., 1., .5]]
from sklearn.neighbors import NearestNeighbors
neigh = NearestNeighbors(n_neighbors=1)
neigh.fit(samples) 

print(neigh.kneighbors([1., 1., 1.])) 

为什么在第一个例子中使用X和y并现在采样?

您的第一段代码定义了1d数据的分类器。

X表示特征向量。

[0] is the feature vector of the first data example
[1] is the feature vector of the second data example
....
[[0],[1],[2],[3]] is a list of all data examples, 
  each example has only 1 feature.

y代表标签。

下图显示了这个想法:

在此输入图像描述

  • 绿色节点是标签为0的数据
  • 红色节点是标签为1的数据
  • 灰色节点是具有未知标签的数据。
print(neigh.predict([[1.1]]))

这要求分类器预测x=1.1的标签。

    print(neigh.predict_proba([[0.9]]))

这要求分类器为每个标签提供成员概率估计。

由于两个灰色节点都靠近绿色,因此下面的输出是有意义的。

    [0] # green label
    [[ 0.66666667  0.33333333]]  # green label has greater probability

第二部分代码实际上对scikit-learn有很好的指导:

在下面的示例中,我们从表示数据集的数组构造一个NeighborsClassifier类,并询问谁是[1,1,1]的最近点

>>> samples = [[0., 0., 0.], [0., .5, 0.], [1., 1., .5]]
>>> from sklearn.neighbors import NearestNeighbors
>>> neigh = NearestNeighbors(n_neighbors=1)
>>> neigh.fit(samples) 
NearestNeighbors(algorithm='auto', leaf_size=30, ...)
>>> print(neigh.kneighbors([1., 1., 1.])) 
(array([[ 0.5]]), array([[2]]...))

这里没有目标值,因为这只是一个NearestNeighbors类,它不是分类器,因此不需要标签。

对于你自己的问题:

由于您需要分类器, KNeighborsClassifier如果要使用KNN方法,则应使用KNeighborsClassifier 您可能想要构建特征向量X并标记y ,如下所示:

X = [ [h1, e1, s1], 
      [h2, e2, s2],
      ...
    ]
y = [label1, label2, ..., ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM