KNeighborsClassifier 的可接受数据类型

Posted

技术标签:

【中文标题】KNeighborsClassifier 的可接受数据类型【英文标题】:Acceptable Data Types for KNeighborsClassifier [closed] 【发布时间】:2021-10-06 18:12:06 【问题描述】:

我希望下面的代码只接受 数据类型category 用于y,因为根据定义,分类器会预测分类变量的值。但经过测试,我看到这个分类器接受integerobjecty 值。它是在幕后将y 转换为category,还是这里发生了什么?

from sklearn.neighbors import KNeighborsClassifier  
classifier = KNeighborsClassifier() 
classifier.fit(X_train, y_train) 
y_pred = classifier.predict(X_test)  

【问题讨论】:

请使用一些虚拟数据发布minimal reproducible example。 【参考方案1】:

不,在这方面实际上没有发生任何事情。我不知道你从哪里得到这个目标y 只能是category 类型(顺便说一句,这不是numpy dtype,而是熊猫的东西)。但是没有必要有这样的限制。

scikit-learn内部使用一个名为type_of_target的函数来检查目标y是否符合API规范,并确定一个target_type,即它是一个什么样的分类任务。以下是其文档字符串的摘录:

Examples
    --------
    >>> import numpy as np
    >>> type_of_target([0.1, 0.6])
    'continuous'
    >>> type_of_target([1, -1, -1, 1])
    'binary'
    >>> type_of_target(['a', 'b', 'a'])
    'binary'
    >>> type_of_target([1.0, 2.0])
    'binary'
    >>> type_of_target([1, 0, 2])
    'multiclass'
    >>> type_of_target([1.0, 0.0, 3.0])
    'multiclass'
    >>> type_of_target(['a', 'b', 'c'])
    'multiclass'
    >>> type_of_target(np.array([[1, 2], [3, 1]]))
    'multiclass-multioutput'
    >>> type_of_target([[1, 2]])
    'multilabel-indicator'
    >>> type_of_target(np.array([[1.5, 2.0], [3.0, 1.6]]))
    'continuous-multioutput'
    >>> type_of_target(np.array([[0, 1], [1, 1]]))
    'multilabel-indicator'

分类任务是以下任何一种:

['binary', 'multiclass', 'multiclass-multioutput', 
'multilabel-indicator', 'multilabel-sequences']

所以元素的类型可以是intstrobject,但不能是float

【讨论】:

以上是关于KNeighborsClassifier 的可接受数据类型的主要内容,如果未能解决你的问题,请参考以下文章

如何将 metric='correlation' 与 KNeighborsClassifier 一起使用

sklearn - KNeighborsClassifier - ValueError:未知标签类型:'连续'

KNeighborsClassifier .predict() 函数不起作用

使用 KNeighborsClassifier 的 SKlearn 管道

KNeighborsClassifier()

使用 sklearn 使用 KNeighborsClassifier 时出错