使用sci-kit learn进行多值输出分类

假设我从训练集中选择了一个训练文档,并将其转换为我所选择的特征的特征向量X。

我尝试做的是:

self.clf = LogisticRegression()self.clf.fit(X, Y)

我的Y看起来像这样:[0 0 0 1 1 0 1 0 0 1 0]

我想训练一个单一模型,使其同时最佳拟合这11个输出值。然而,这似乎对fit方法不起作用,因为我得到了一个unhashable type 'list'错误,因为它期望的是一个单一值,可以是二元或多类,但不允许超过一个值。

有没有办法用sci-kit learn来实现这个目标?


回答:

多标签分类与普通分类有一点不同的API。你的Y应该是一个序列的序列,例如一个列表的列表,像这样

Y = [["foo", "bar"],          # 第一个样本是foo和bar     ["foo"],                 # 第二个样本只有foo     ["bar", "baz"]]          # 第三个样本是bar和baz

这样的Y可以被输入到一个能够处理多重分类的估计器中。你可以使用OneVsRestClassifier包装器来构建这样的估计器:

from sklearn.multiclass import OneVsRestClassifierclf = OneVsRestClassifier(LogisticRegression())

然后用clf.fit(X, Y)进行训练。clf.predict现在也会产生序列的序列。

更新 自scikit-learn 0.15起,由于其输入模糊不清,该API已被废弃。你应该将我上面给出的Y转换为使用MultiLabelBinarizer的矩阵:

>>> from sklearn.preprocessing import MultiLabelBinarizer>>> mlb = MultiLabelBinarizer()>>> mlb.fit_transform(Y)array([[1, 0, 1],       [0, 0, 1],       [1, 1, 0]])

然后将这个输入到估计器的fit方法中。转换回来可以通过在相同的二值化器上使用inverse_transform来完成:

>>> mlb.inverse_transform(mlb.transform(Y))[('bar', 'foo'), ('foo',), ('bar', 'baz')]

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注