微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

KNeighborsClassifier 可接受的数据类型

如何解决KNeighborsClassifier 可接受的数据类型

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

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

解决方法

不,在这方面实际上没有发生任何事情。我不知道你从哪里得到的,目标 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])
    'binary'
    >>> type_of_target(['a','b','a'])
    'binary'
    >>> type_of_target([1.0,2.0])
    'binary'
    >>> type_of_target([1,2])
    'multiclass'
    >>> type_of_target([1.0,0.0,3.0])
    'multiclass'
    >>> type_of_target(['a','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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。