Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OneVsOneClassifier使用数据帧失败_Python_Numpy_Pandas_Scikit Learn - Fatal编程技术网

Python OneVsOneClassifier使用数据帧失败

Python OneVsOneClassifier使用数据帧失败,python,numpy,pandas,scikit-learn,Python,Numpy,Pandas,Scikit Learn,我一直在将pandas DataFrame与scikit学习模型一起使用。在内部,熊猫数据帧被透明地转换为numpy ndarray(例如logistic回归、SVC、多项式nb等)。 然而,sklearn.multiclass.OneVsOneClassifier在给定pandas数据帧时失败,而在给定numpy数据帧时,它的行为正常。 这可以用此代码复制 import pandas as pd from sklearn.linear_model import LogisticRegressi

我一直在将pandas DataFrame与scikit学习模型一起使用。在内部,熊猫数据帧被透明地转换为numpy ndarray(例如logistic回归、SVC、多项式nb等)。
然而,
sklearn.multiclass.OneVsOneClassifier
在给定pandas数据帧时失败,而在给定numpy数据帧时,它的行为正常。
这可以用此代码复制

import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.multiclass import OneVsOneClassifier

df = pd.DataFrame({'a': range(15), 'b': range(20, 35)})
labels = pd.Series(['a', 'b', 'c'] * 5)

clf = OneVsOneClassifier(LogisticRegression())
# clf = LogisticRegression()   # This works file

clf.fit(df, labels)
有人能确认这是否是一个bug吗?
如果没有,请向我指出说明这一点的文档。

其他信息: 在函数的最后一行中,我将此问题的根本原因追溯到sklearn/multiclass.py


这里它假设
X
是numpy ndarray(实际上是pandas DataFrame),并尝试使用整数索引。这导致了例外情况。

scikit没有声明处理熊猫结构,尽管有时它们确实可以工作。@BrenBarn是的,我知道scikit没有声明这样做。但OneVsRestClassifier和OutputCodeClassifier(在同一个包中找到)似乎不会引发异常。为什么会出现这种不一致的行为?根据个人经验,我倾向于调用
.values
来传递np数组,这样就可以了:
clf.fit(df.values,labels)
scikit对使用熊猫结构时会发生什么情况没有任何保证。并不是说它不起作用;这并不是说它会起作用。这是因为行为是未定义的。不管什么时候,这都是巧合。通过跟踪导致错误的代码,您基本上已经回答了自己的问题:OneVsOne碰巧做了一些与数据帧不兼容的事情,但其他分类器恰好没有这样做。
return _fit_binary(estimator, X[ind[cond]], y_binary, classes=[i, j])