【问题标题】:Multi Label classification with Sklearn使用 Sklearn 进行多标签分类
【发布时间】:2016-05-09 10:14:42
【问题描述】:

我曾尝试将 OneVsRest 与来自 Sklearn 的逻辑回归一起使用,但它为某些样本提供了空标签(即不预测任何输出),即使我没有任何未标记的训练数据。

知道是什么原因造成的或如何解决这个问题吗?

clf = OneVsRestClassifier(LogisticRegression(multi_class='ovr',max_iter=1000,solver='lbfgs'))
clf.fit(X,Y)
self.classifier=clf


self.classifier.predict(test_data)

【问题讨论】:

    标签: machine-learning scikit-learn classification logistic-regression multilabel-classification


    【解决方案1】:

    每当您执行多标签分类时,根据OneVsRestClassifier,目标需要是“标签序列序列”

    此外,根据您对此标签的编码方式,您可能会收到以下警告:“DeprecationWarning:从版本 0.17 起将不提供对序列序列多标签表示的直接支持。使用 sklearn.preprocessing.MultiLabelBinarizer 转换为标签指示符表示。”

    所以,编码标签的巧妙方法:

    from sklearn import preprocessing
    mlb = preprocessing.MultiLabelBinarizer()
    Y = mlb.fit_transform([(1, 2), (1,2), (1,2),(4,)]) 
    # this means sample one belongs to classes {1,2} and so on. 
    # Take into account the format if only one class is needed, (4,) not (4) 
    

    所以 Y 结果是:

    array([[1, 1, 0],
           [1, 1, 0],
           [1, 1, 0],
           [0, 0, 1]])
    

    【讨论】:

    • 这正是我为单个标签训练格式为 (4,) 的数据所做的。然而,这对一些被标记为无的测试数据没有帮助。
    • 好的,你有什么办法可以给我们一个这样的示例,其中一个样本最终会出现None 预测?也许算法本身或其实现允许在 sklearn 中不确定并返回None。试着给我们举个例子,同时我会检查一些理论。
    • 您也可以检查predict_proba(X) 方法而不是predict,看看它是否也返回None
    • 我不确定如何在这里举个例子,因为有预测标签的和没有预测标签的相似。但是,我尝试了您的想法来检查所有没有标签的预测是否为 predict_proba(X)。它们具有所有标签的概率,因此分类器为样本的每个标签提供概率,但最终没有预测任何内容。
    • 数据集是文本文档的集合,其特征是 BOW,并且有多个类标记。
    猜你喜欢
    • 2020-09-02
    • 2021-08-25
    • 2022-01-20
    • 2021-09-23
    • 2020-09-27
    • 2019-09-24
    • 2017-06-03
    • 2016-01-18
    相关资源
    最近更新 更多