我在Excel文件中有两列。第一行是用户的具体输入,第二行是其原因。例如:
ROW 1 ROW 2money deducted cause 1delivery is late cause 2something here cause 48payment problem cause 1. .. .
任务是实现一个分类器,以便下次当给定特定的用户输入时,它可以将输入分类为其中一个原因,即让分类器学习这些案例并预测未来的值。
我对分类有一些了解,但我只是真的想知道如何使用一对多分类器来实现这个分类器。
回答:
这就是您如何使用scikit-learn实现这个分类器的方法。将所有训练句子传递给X_train,并根据target_names的索引传递相应的标签。
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。
希望这对您有帮助!