在scikit-learn中实现K邻居分类器,每个对象有3个特征

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

我从图像中提取了固体度、延展性和胡矩特征。我该如何准备这些数据用于训练和验证?我是否需要为从图像中提取的每个对象创建一个包含3个特征[Hm, e, s]的列表(一张图像中有多个对象)?

我阅读了这个例子(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 KNeighborsClassifierneigh = KNeighborsClassifier(n_neighbors=3)neigh.fit(X, y) print(neigh.predict([[1.1]]))print(neigh.predict_proba([[0.9]]))

X和y是两个特征吗?

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

为什么第一个例子使用X和y,而现在使用sample?


回答:

你的第一段代码定义了一个在1d数据上的分类器。

X代表特征向量。

[0] 是第一个数据示例的特征向量[1] 是第二个数据示例的特征向量....[[0],[1],[2],[3]] 是所有数据示例的列表,每个示例只有1个特征。

y代表标签。

下图展示了这个概念:

enter image description here

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

这是在请求分类器为x=1.1预测一个标签。

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

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

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

    [0] # 绿色标签    [[ 0.66666667  0.33333333]]  # 绿色标签的概率更大

第二段代码实际上对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类,它不是一个分类器,因此不需要标签。

对于你自己的问题:

由于你需要一个分类器,如果你想使用KNN方法,你应该使用KNeighborsClassifier。你可能需要像下面这样构建你的特征向量X和标签y

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注