我正在尝试在Python中导入sklearn.neighbors
,然后从那里导入KNeighborsClassifier
。当我尝试在Python中执行它时,我得到一个ValueError
:
ValueError(u"Invalid mode, expected 'c' or 'fortran', got fx00ox00rx00t",) in <module 'threading' from '/home/sjain55/anaconda/lib/python2.7/threading.pyc'> ignored' .
代码的一点要点:
from sklearn.neighbors import KNeighborsClassifier
neigh = KNeighborsClassifier(n_neighbors=10)
selected_features = X[:, idx[0:num_fea]]
neigh.fit(selected_features[train], y[train]) //this is the line giving me the above error.
我尝试过搜索,但无法找到收到此类错误的原因。有人知道为什么我会收到此错误吗?
详细打印的数据
S1 : 18863
s : 11062
检查2
我被召唤了 2464 个参数:
(1440, 1(
检查
ck1
{'fisher_score': true, 'y': array([ 1, 1, 1, ..., 20, 20, 20], dtype=uint8(, 'neighbor_mode': 'supervised'}
/home/sjain55/Desktop/FS_Package_DMML-master/FS_package/function/similarity_based/fisher_score.py:47:运行时警告:除以零在除法中遇到 分数 = 1.0/lap_score - 1
异常值错误: 值错误(u"无效模式,预期的'c'或'fortran',得到f\x00o\x00r\x00t",( 被忽略
我想我解决了你的问题,sklearn在某些模型中强加了数据按称为Fortran/C order
的特定顺序排列的问题,只需将order='F'
或order='C'
添加到您的trainX
中,并以这种方式trainY
数据:
selected_features[train] = numpy.array(selected_features[train],order='F')
y[train] = numpy.array(y[train],order='F')
注意:
顺序参数 指定数组的顺序。如果顺序为"C",则数组将按 C 连续顺序排列(最后一个索引变化最快(。如果顺序为"F",则返回的数组将采用Fortran连续顺序(第一个索引变化最快(。如果顺序为"A",则返回的数组可以是任意顺序(C-、Fortran-contiguous,甚至是不连续的(。
你的问题是你的字符串默认用utf8编码,你正在调用一些期待ASCII字符串的东西。字符串fx00ox00rx00t
是字符串文本u"fortran"
的前 7 个字节,如果文件编码设置为 utf8,则为 python 3 或 2 中的默认字符串编码。
将"fortran"
更改为r"fortran"
以传递原始 ASCII 字符串而不是 utf 字符串。如果r"fortran"
仍然为您提供宽字符,则可以使用 str("fortran")
强制使用旧的 (ASCII( 字符串。