0

我在一个excel文件中有两列。第 1 行有准确的用户输入,第 2 行有其原因。例如

ROW 1                                     ROW 2
money deducted                            cause 1
delivery is late                          cause 2
something here                            cause 48
payment problem                           cause 1
.                                         .
.                                         .

任务是实现一个分类器,当下次给出特定用户输入时,它可以分类为原因之一,即让分类器了解这些情况并预测未来值。

我对分类有一些了解,但我真的很想知道如何使用 one vs rest 分类器来实现它。

4

1 回答 1

1

这就是您可以使用 scikit-learn 实现此分类器的方式。根据 target_names 的索引将所有训练句子传递给 X_train 和相应的标签。

X_train = np.array(["money deducted",
                    "delivery is late",
                    "something here",
                    "payment problem"])
y_labels = [(1, ), (2, ), (3, ), (1, )]
y_train = MultiLabelBinarizer().fit_transform(y_labels)
target_names = ['cause1', 'cause2', 'cause48']
classifier = Pipeline([
    ('vectorizer', CountVectorizer()),
    ('tfidf', TfidfTransformer()),
    ('clf', OneVsRestClassifier(LinearSVC()))])
classifier.fit(X_train, y_train)

这就是训练分类器的全部内容,然后您可以轻松预测您想要的任何内容。更多参考:http ://scikit-learn.org/stable/modules/generated/sklearn.multiclass.OneVsRestClassifier.html

然后拟合并将 y_lables 转换为 Binarizer:

mlb.fit_transform(y_labels)

然后预测如下:

mlb.inverse_transform(classifier.predict(X_test))

这将为您提供类标签,然后您可以将其作为索引传递给 target_names。

希望能帮助到你!

于 2017-03-10T11:10:27.130 回答