标签: multilabel-classification

Keras如何处理多标签分类?

我不确定如何在以下情况下解释Keras的默认行为:

我的Y(基本事实)是使用scikit-learn's MultilabelBinarizer()建立的.

因此,为了给出一个随机的例子,我的y列的一行是单热编码的: [0,0,0,1,0,1,0,0,0,0,1].

所以我有11个可以预测的课程,不止一个可以成真; 因此问题的多标签性质.这个特定样品有三个标签.

我像我一样训练模型用于非多标签问题(照常营业),我没有错误.

from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.optimizers import SGD

model = Sequential()
model.add(Dense(5000, activation='relu', input_dim=X_train.shape[1]))
model.add(Dropout(0.1))
model.add(Dense(600, activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(y_train.shape[1], activation='softmax'))

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
              optimizer=sgd,
              metrics=['accuracy',])

model.fit(X_train, y_train,epochs=5,batch_size=2000)

score = model.evaluate(X_test, y_test, batch_size=2000)
score
Run Code Online (Sandbox Code Playgroud)

当Keras遇到我y_train并且看到它是"多"单热编码时会做什么,这意味着每一行中存在多个"一" y_train?基本上,Keras会自动执行多标签分类吗?评分指标的解释有何不同?

python neural-network multilabel-classification keras

56
推荐指数
1
解决办法
2万
查看次数

使用TensorFlow进行多标签文本分类

文本数据被组织为具有20,000个元素的向量,如[2,1,0,0,5,....,0].第i个元素表示文本中第i个单词的频率.

地面实况标签数据也表示为具有4,000个元素的向量,如[0,0,1,0,1,......,0].第i个元素指示第i个标签是否是文本的肯定标签.文本的标签数量因文本而异.

我有一个单标签文本分类的代码.

如何编辑以下代码进行多标签文本分类?

特别是,我想知道以下几点.

  • 如何使用TensorFlow计算精度.
  • 如何设置判断标签是正面还是负面的阈值.例如,如果输出为[0.80,0.43,0.21,0.01,0.32]且基本事实为[1,1,0,0,1],则得分超过0.25的标签应判断为正数.

谢谢.

import tensorflow as tf

# hidden Layer
class HiddenLayer(object):
    def __init__(self, input, n_in, n_out):
        self.input = input

        w_h = tf.Variable(tf.random_normal([n_in, n_out],mean = 0.0,stddev = 0.05))
        b_h = tf.Variable(tf.zeros([n_out]))

        self.w = w_h
        self.b = b_h
        self.params = [self.w, self.b]

    def output(self):
        linarg = tf.matmul(self.input, self.w) + self.b
        self.output = tf.nn.relu(linarg)

        return self.output

# output Layer
class OutputLayer(object):
    def __init__(self, input, n_in, n_out):
        self.input = input

        w_o = tf.Variable(tf.random_normal([n_in, n_out], mean = 0.0, stddev …
Run Code Online (Sandbox Code Playgroud)

python text-classification multilabel-classification tensorflow

34
推荐指数
2
解决办法
2万
查看次数

多类多标记分类的精确度/召回率

我想知道如何计算多类多标签分类的精度和召回度量,即分类中有多于两个标签,每个实例可以有多个标签?

classification machine-learning multilabel-classification precision-recall

28
推荐指数
3
解决办法
2万
查看次数

scikit中的OneVsRestClassifier和MultiOutputClassifier有什么区别?

有人可以解释(举例说明)scikit-learn中OneVsRestClassifierMultiOutputClassifier之间的区别是什么?

我已阅读文档,我知道我们使用:

  • OneVsRestClassifier - 当我们想要进行多类或多标记分类时,它的策略包括为每个类拟合一个分类器.对于每个分类器,该类适用于所有其他类.(这很清楚,这意味着多类/多标记分类的问题被分解为多个二元分类问题).
  • MultiOutputClassifier - 当我们想要进行多目标分类时(这是什么?),它的策略包括为每个目标拟合一个分类器(目标是什么意思?)

我已经使用OneVsRestClassifier进行多标签分类,我可以理解它是如何工作的,但后来我找到了MultiOutputClassifier,并且无法理解它与OneVsRestClassifier的工作方式有何不同.

python classification scikit-learn multilabel-classification multiclass-classification

23
推荐指数
2
解决办法
1万
查看次数

带有多标签图像的咖啡

我有一个有多个标签的图像数据集; 数据集中有100个类,每个图像都有1到5个与之关联的标签.

我正在按照以下URL中的说明操作:

https://github.com/BVLC/caffe/issues/550

它说我需要生成一个文本文件,列出图像及其标签,如

/home/my_test_dir/picture-foo.jpg 0
/home/my_test_dir/picture-foo1.jpg 1
Run Code Online (Sandbox Code Playgroud)

在我的情况下,由于我有多标签图像,它是否可以简单地添加标签,如下所示?

/home/my_test_dir/picture-foo.jpg 0 2 5
/home/my_test_dir/picture-foo1.jpg 1 4
Run Code Online (Sandbox Code Playgroud)

我有一种感觉,它可能不会那么简单,如果我是对的,在什么步骤,我应该如何在设置Caffe的过程中整合数据集的多标签?

neural-network multilabel-classification deep-learning caffe

19
推荐指数
2
解决办法
2万
查看次数

如何在keras flow_from_directory中手动指定类标签?

问题:我正在训练多标签图像识别模型.因此,我的图像与多个y标签相关联.这与ImageDataGenerator的方便的keras方法"flow_from_directory"相冲突,其中每个图像应该位于相应标签的文件夹中(https://keras.io/preprocessing/image/).

解决方法:目前,我正在将所有图像读入一个numpy数组并从那里使用"flow"函数.但这会导致大量内存负载和缓慢的读入过程.

问题:有没有办法使用"flow_from_directory"方法并手动提供(多个)类标签?


更新:我最终扩展了多标签案例的DirectoryIterator类.您现在可以将属性"class_mode"设置为值"multilabel",并提供字典"multlabel_classes",它将文件名映射到其标签.代码:https://github.com/tholor/keras/commit/29ceafca3c4792cb480829c5768510e4bdb489c5

python image-processing multilabel-classification deep-learning keras

17
推荐指数
2
解决办法
7583
查看次数

Xg加强多标签分类?

是否可以使用xgboost进行多标签分类?现在我使用OneVsRestClassifier而不是sklearn的GradientBoostingClassifier.它可以工作,但只使用我的CPU中的一个核心.在我的数据中,我有~45个功能,任务是用二进制(布尔)数据预测大约20列.度量标准是平均精度(map @ 7).如果你有一个简短的代码分享示例,那就太好了.

python multilabel-classification xgboost

15
推荐指数
2
解决办法
8796
查看次数

为什么我的 fastapi 或 uvicorn 会关闭?

我正在尝试运行一项使用简单变压器 Roberta 模型进行分类的服务。测试时,推理脚本/函数本身按预期工作。当我将其包含在快速 API 中时,它会关闭服务器。

\n
uvicorn==0.11.8\nfastapi==0.61.1\nsimpletransformers==0.51.6\ncmd : uvicorn --host 0.0.0.0 --port 5000 src.main:app\n
Run Code Online (Sandbox Code Playgroud)\n
\n
@app.get("/article_classify")\ndef classification(text:str):\n    """function to classify article using a deep learning model.\n    Returns:\n        [type]: [description]\n    """\n\n    _,_,result = inference(text)\n    return result\n
Run Code Online (Sandbox Code Playgroud)\n

错误 :

\n
INFO:     Started server process [8262]\nINFO:     Waiting for application startup.\nINFO:     Application startup complete.\nINFO:     Uvicorn running on http://0.0.0.0:5000 (Press CTRL+C to quit)\nINFO:     127.0.0.1:36454 - "GET / HTTP/1.1" 200 OK\nINFO:     127.0.0.1:36454 - "GET /favicon.ico HTTP/1.1" 404 Not Found\nINFO:     127.0.0.1:36454 - "GET /docs HTTP/1.1" …
Run Code Online (Sandbox Code Playgroud)

python multilabel-classification fastapi uvicorn simpletransformers

14
推荐指数
2
解决办法
1万
查看次数

Scikit Learn Multilabel分类:ValueError:您似乎正在使用传统的多标签数据表示

我正在尝试使用scikit学习0.17与anaconda 2.7的多标签分类问题.这是我的代码

import pandas as pd
import pickle
import re
from sklearn.cross_validation import train_test_split
from sklearn.metrics.metrics import classification_report, accuracy_score, confusion_matrix
from nltk.stem import WordNetLemmatizer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB as MNB
from sklearn.pipeline import Pipeline
from sklearn.grid_search import GridSearchCV

traindf = pickle.load(open("train.pkl","rb"))

X, y = traindf['colC'], traindf['colB'].as_matrix()

Xtrain, Xtest, ytrain, ytest = train_test_split(X, y, train_size=0.7)

pip = Pipeline([
('vect', TfidfVectorizer(
                        analyzer='word',
                        binary=False,
                        decode_error='ignore',
                        dtype=<type 'numpy.int64'>,
                        encoding=u'utf-8',
                        input=u'content',
                        lowercase=True,
                        max_df=0.25,
                        max_features=None,
                        min_df=1,
                        ngram_range=(1, 1),
                        norm=u'l2',
                        preprocessor=None,
                        smooth_idf=True,
                        stop_words='english', …
Run Code Online (Sandbox Code Playgroud)

python machine-learning scikit-learn multilabel-classification

13
推荐指数
1
解决办法
8676
查看次数

如何使用sklearn的SGDClassifier获得前3或前N个预测

from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
from sklearn import linear_model
arr=['dogs cats lions','apple pineapple orange','water fire earth air', 'sodium potassium calcium']
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(arr)
feature_names = vectorizer.get_feature_names()
Y = ['animals', 'fruits', 'elements','chemicals']
T=["eating apple roasted in fire and enjoying fresh air"]
test = vectorizer.transform(T)
clf = linear_model.SGDClassifier(loss='log')
clf.fit(X,Y)
x=clf.predict(test)
#prints: elements
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,clf.predict()仅为列表X中的样本打印1个最佳预测.我对列表X中特定样本的前3个预测感兴趣,我知道函数/ 返回列表Y中每个特征的所有概率的列表,但它必须排序然后与列表Y中的特征相关联才能获得的顶部3的结果.有没有直接有效的方法?predict_probapredict_log_proba

python scikit-learn multilabel-classification

11
推荐指数
3
解决办法
8244
查看次数