【发布时间】:2016-03-24 14:28:42
【问题描述】:
以下代码给出错误信息:
>>> import pandas as pd
>>> from sklearn import preprocessing, svm
>>> df = pd.DataFrame({"a": [0,1,2], "b":[0,1,2], "c": [0,1,2]})
>>> clf = svm.SVC()
>>> df = df.apply(lambda x: preprocessing.scale(x))
>>> clf.fit(df[["a", "b"]], df["c"])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\Alexander\Anaconda\lib\site-packages\sklearn\svm\base.py", lin
151, in fit
y = self._validate_targets(y)
File "C:\Users\Alexander\Anaconda\lib\site-packages\sklearn\svm\base.py", lin
515, in _validate_targets
check_classification_targets(y)
File "C:\Users\Alexander\Anaconda\lib\site-packages\sklearn\utils\multiclass.
y", line 173, in check_classification_targets
raise ValueError("Unknown label type: %r" % y)
ValueError: Unknown label type: 0 -1.224745
1 0.000000
2 1.224745
Name: c, dtype: float64
pandas DataFrame 的 dtype 不是对象,所以应用 sklearn svm 函数应该没问题,但由于某种原因它无法识别分类标签。是什么导致了这个问题?
【问题讨论】:
-
试试
df[["a", "b"]].values和df["c"].valuesSKLearn 通常需要数组,而不是数据帧。 -
同样的问题,错误信息是:
-
raise ValueError("Unknown label type: %r" % y) ValueError: Unknown label type: array([-1.22474487, 0. , 1.22474487])
-
当我尝试运行
df = df.apply(lambda x: preprocessing.scale(x))时出现错误。TypeError: ("Cannot cast ufunc subtract output from dtype('float64') to dtype('int64') ... -
这很奇怪 - 我收到了一些警告,但我省略了,但没有错误消息.. 你使用的是什么版本的 python?我正在使用 Python 2.7.11。
标签: python pandas scikit-learn