【发布时间】:2015-02-06 12:33:30
【问题描述】:
我正在尝试像下面这样进行 onevsrest 分类:
classifier = Pipeline([('vectorizer', CountVectorizer()),('tfidf', TfidfTransformer()),('clf', OneVsRestClassifier(SVC(kernel='rbf')))])
classifier.fit(X_train, Y)
predicted = classifier.predict(X_test)
我得到错误“predict_proba 在概率 = false 时不可用”。我看到报告了一个错误,如下所示: https://github.com/scikit-learn/scikit-learn/issues/1946
它已按固定方式关闭,所以我从我的 Windows PC 中删除了 scikit-learn,并完全重新下载了 scikit-learn 以拥有 0.15.2 版本。但我仍然得到这个错误。有什么建议?还是我理解错了,除非我指定probability=true,否则我仍然无法将SVC 与OneVSRestClassifier 一起使用?
更新:澄清一下,我正在尝试实际实现多标签分类,这里是数据源:
df = pd.read_csv(fileIn, header = 0, encoding='utf-8-sig')
rows = random.sample(df.index, int(len(df) * 0.9))
work = df.ix[rows]
work_test = df.drop(rows)
X_train = []
y_train = []
X_test = []
y_test = []
for i in work[[i for i in list(work.columns.values) if i.startswith('Change')]].values:
X_train.append(','.join(i.T.tolist()))
X_train = np.array(X_train)
for i in work[[i for i in list(work.columns.values) if i.startswith('Corax')]].values:
y_train.append(list(i))
for i in work_test[[i for i in list(work_test.columns.values) if i.startswith('Change')]].values:
X_test.append(','.join(i.T.tolist()))
X_test = np.array(X_test)
for i in work_test[[i for i in list(work_test.columns.values) if i.startswith('Corax')]].values:
y_test.append(list(i))
lb = preprocessing.MultiLabelBinarizer()
Y = lb.fit_transform(y_train)
然后我将它发送到前面提到的管道
【问题讨论】:
-
在我的盒子上运行良好(scikit-learn 当前大师)。你确定你没有导入旧版本?
python -c 'import sklearn; print(sklearn.__version__). -
它说:0.15.2。问题是否可能是由于使用此处的二进制文件(在 sklearn 网站上建议,但它们仍然是非官方的):lfd.uci.edu/~gohlke/pythonlibs/#scikit-learn。可能它们没有正确构建。我应该从 sklearn 的 github 页面中提取所有内容并替换所有本地文件吗?
-
更新 - 我尝试使用 pip 刷新 scikit-learn,但它显示:D:\Apps\Python\Scripts>pip install -U scikit-learn 要求已经是最新的:scikit -learn in d:\apps\python\lib\site-packages 清理...
-
更有趣的是——我已经完全从我的 PC 中杀死了 python 以及所有的包文件。比我安装 python 3.4,重新下载所有先决条件并使用 pip 安装 sklearn。即使在那之后我仍然得到这个错误。有什么想法吗?
-
我试图挖掘代码,因为我看到它首先尝试调用 decision_function(self, X),如果它导致 NotImplementerError,它会尝试 predict_proba。于是我去SVM中寻找base.py寻找decision_function。我看到它有这个: if self._sparse: raise NotImplementedError("Decision_function not supported for" " sparse SVM.")。所以也许这就是问题所在?我不确定,但也许我使用的工作流程会导致稀疏矩阵。
标签: python-2.7 scikit-learn classification document-classification