标签: multilabel-classification

Sklearn:评估GridSearchCV中OneVsRestClassifier的每个分类器的性能

我处理的多标签分类与OneVsRestClassifierSVC,

from sklearn.datasets import make_multilabel_classification
from sklearn.multiclass import OneVsRestClassifier
from sklearn.svm import SVC
from sklearn.grid_search import GridSearchCV

L=3
X, y = make_multilabel_classification(n_classes=L, n_labels=2,
                                  allow_unlabeled=True,
                                  random_state=1, return_indicator=True)    
model_to_set = OneVsRestClassifier(SVC())

parameters = {
    "estimator__C": [1,2,4,8],
    "estimator__kernel": ["poly","rbf"],
    "estimator__degree":[1, 2, 3, 4],
}

model_tunning = GridSearchCV(model_to_set, param_grid=parameters,
                             scoring='f1')

model_tunning.fit(X, y)

print model_tunning.best_score_
print model_tunning.best_params_

#0.855175822314
#{'estimator__kernel': 'poly', 'estimator__C': 1, 'estimator__degree': 3}
Run Code Online (Sandbox Code Playgroud)

第一个问题

0.85代表的数字是多少?它是L分类器中的最佳分数还是平均分数?同样,这组参数是否代表L分类器中的最佳得分者?

第二个问题

基于以下事实:如果我是对的,从OneVsRestClassifier字面上L为每个标签构建分类器,可以期望访问或观察每个标签的性能.但是,在上面的例子中,如何LGridSearchCV对象中获得分数? …

python scikit-learn multilabel-classification grid-search

5
推荐指数
1
解决办法
2605
查看次数

使用两个不同的LMDB的多标签

我是caffe框架的新手,我想使用caffe实施带有多标签的培训。我使用两个LMDB分别保存数据和标签。数据LMDB的尺寸为Nx1xHxW,而标签LMDB的尺寸为Nx1x1x3。标签是浮点数据。

文本文件如下:

5911 3
train/train_data/4224.bmp        13         0        12
train/train_data/3625.bmp        11         3         7
...                              ...
Run Code Online (Sandbox Code Playgroud)

我使用C ++创建LMDB。我的main.cpp:

#include <algorithm>
#include <fstream>  // NOLINT(readability/streams)
#include <string>
#include <utility>
#include <vector>
#include <QImage>

#include "boost/scoped_ptr.hpp"
#include "gflags/gflags.h"
#include "glog/logging.h"

#include "caffe/proto/caffe.pb.h"
#include "caffe/util/db.hpp"
#include "caffe/util/format.hpp"
#include "caffe/util/rng.hpp"

#include <boost/filesystem.hpp>
#include <iomanip>
#include <iostream>  // NOLINT(readability/streams)
#include <string>

#include "google/protobuf/message.h"

#include "caffe/common.hpp"
#include "caffe/proto/caffe.pb.h"
#include "caffe/util/format.hpp"

#ifndef CAFFE_TMP_DIR_RETRIES
#define CAFFE_TMP_DIR_RETRIES 100
#endif

using namespace caffe;  // NOLINT(build/namespaces)
using std::pair;
using boost::scoped_ptr;

const char *dat_lab="/home/mul/caffe-master/examples/2D_3D/new/info/train.data"; …
Run Code Online (Sandbox Code Playgroud)

c++ computer-vision multilabel-classification lmdb caffe

5
推荐指数
1
解决办法
987
查看次数

汉明损失的多标签分类梯度计算

我正在使用一些递归神经网络结构进行多标签分类。我的问题是关于损失函数的:我的输出将是true / false(1/0)值的向量,以指示每个标签的类。许多资源表示,汉明损失是适当的目标。但是,汉明损耗在梯度计算中存在问题: H =平均值(y_true XOR y_pred),XOR无法得出损耗的梯度。那么,还有其他损失函数可用于训练多标签分类吗?我已经尝试过使用单独的S型输入进行MSE和二进制交叉熵。

machine-learning neural-network hamming-distance gradient-descent multilabel-classification

5
推荐指数
1
解决办法
1796
查看次数

支持非线性内核和多标签的SVM实现

我正在寻找支持非线性内核和一对多方案的SVM实现,以执行多标签分类.最好用Python编写,或者我可以用Python用包装器调用.

我正在研究sklearn,有两种实现使用SVM进行分类:

sklearn.svm.LinearSVC - 支持使用one-rest-rest方案进行多标签分类,但它基于liblinear,因此仅支持线性内核.

sklearn.svm.SVC - 基于libsvm,支持非线性内核,但多标签分类是在一对一减少的情况下完成的,它为K-way训练K(K-1)/ 2二元分类器多类问题.

更多信息,请访问:http: //scikit-learn.org/stable/modules/multiclass.html

有谁知道任何其他直接支持多标签分类和非线性内核的SVM实现?

一种可能的解决方案也可能是根据sklearn.svm.SVC调整代码,以执行One-vs-Rest,这是否已经尝试过?

machine-learning svm nonlinear-functions scikit-learn multilabel-classification

5
推荐指数
1
解决办法
922
查看次数

二进制交叉熵惩罚一个热向量的所有分量

我了解到,在两个类的情况下,二进制交叉熵与分类交叉熵相同。

此外,对我来说,很明显softmax是什么。
因此,我看到分类交叉熵只是惩罚了应该为1的一个分量(概率)。

但是,为什么不能或者不应该在一个热向量上使用二进制交叉熵呢?

Normal Case for 1-Label-Multiclass-Mutual-exclusivity-classification:
################
pred            = [0.1 0.3 0.2 0.4]
label (one hot) = [0   1   0   0]
costfunction: categorical crossentropy 
                            = sum(label * -log(pred)) //just consider the 1-label
                            = 0.523
Why not that?
################
pred            = [0.1 0.3 0.2 0.4]
label (one hot) = [0   1   0   0]
costfunction: binary crossentropy
                            = sum(- label * log(pred) - (1 - label) * log(1 - pred))
                            = 1*-log(0.3)-log(1-0.1)-log(1-0.2)-log(1-0.4)
                            = 0.887
Run Code Online (Sandbox Code Playgroud)

我看到在二进制交叉熵中,是目标类,并且对应于以下一键编码:

target class zero …
Run Code Online (Sandbox Code Playgroud)

classification machine-learning multilabel-classification cross-entropy one-hot-encoding

5
推荐指数
1
解决办法
1081
查看次数

选择哪种分类?

我有大量的yelp数据,我必须将评论分为8个不同的类别.
分类

Cleanliness
Customer Service
Parking
Billing
Food Pricing
Food Quality
Waiting time
Unspecified
Run Code Online (Sandbox Code Playgroud)


评论包含多个类别,因此我使用了多重分类.但我很困惑我如何处理积极/消极.实例审查可能对食品质量有利,但对客户服务有负面影响.前 - food taste was very good but staff behaviour was very bad. so review contains positive food quality but negative Customer service我该如何处理这个案子?我应该在分类前进行情绪分析吗?请帮我

classification machine-learning sentiment-analysis multilabel-classification multiclass-classification

5
推荐指数
1
解决办法
213
查看次数

多标签图像分类:是否需要为每个标签组合提供训练数据?

我想使用keras训练CNN进行多标签图像分类任务.但是我不确定如何准备我的转换数据.更具体地说,我想知道我是否需要训练图像显示两个或更多标签的组合,或者是否足以在单个标签上训练网络,然后它将能够检测图像中的多个标签.

我认为我的问题变得更清楚了一个例子:

假设我正在使用dog vs cat分类数据集,我想建立一个能够将图像分类为狗或猫或在一个图像中看到两个动物的模型.在这种情况下,我是否需要使用显示猫,狗和图像的图像来训练模型,这些图像在一个图像中显示或者仅仅具有仅显示猫和狗的训练图像?

machine-learning neural-network multilabel-classification conv-neural-network keras

5
推荐指数
1
解决办法
1488
查看次数

Python sklearn 多标签分类:用户警告:所有训练示例中都存在标签不是 226

我正在尝试多标签分类问题。我的数据看起来像这样

DocID   Content             Tags           
1       some text here...   [70]
2       some text here...   [59]
3       some text here...  [183]
4       some text here...  [173]
5       some text here...   [71]
6       some text here...   [98]
7       some text here...  [211]
8       some text here...  [188]
.       .............      .....
.       .............      .....
.       .............      .....
Run Code Online (Sandbox Code Playgroud)

这是我的代码

traindf = pd.read_csv("mul.csv")
print "This is what our training data looks like:"
print traindf

t=TfidfVectorizer()

X=traindf["Content"]

y=traindf["Tags"]

print "Original Content"
print X
X=t.fit_transform(X)
print "Content After …
Run Code Online (Sandbox Code Playgroud)

python machine-learning scikit-learn logistic-regression multilabel-classification

4
推荐指数
1
解决办法
1710
查看次数

Pytorch 中类别不平衡的多标签分类

我有一个多标签分类问题,我正试图用 Pytorch 中的 CNN 解决这个问题。我有 80,000 个训练示例和 7900 个类;每个示例可以同时属于多个类,每个示例的平均类数为 130。

问题是我的数据集非常不平衡。对于某些课程,我只有大约 900 个示例,大约为 1%。对于“过度代表”的类,我有大约 12000 个示例(15%)。当我训练模型时,我使用来自pytorch 的 BCEWithLogitsLoss和一个正权重参数。我按照文档中描述的相同方式计算权重:负例数除以正例数。

结果,我的模型几乎高估了每个班级……我得到的预测几乎是真实标签的两倍。而我的 AUPRC 仅为 0.18。尽管它比根本不加权要好得多,因为在这种情况下,模型将所有内容预测为零。

所以我的问题是,我如何提高性能?还有什么我可以做的吗?我尝试了不同的批量采样技术(对少数类进行过采样),但它们似乎不起作用。

multilabel-classification pytorch imbalanced-data

4
推荐指数
1
解决办法
1885
查看次数

keras 和 scikit-learn 计算精度的差异

我目前正在使用 keras 中的 CNN 进行多标签图像分类。\n除了 keras 的准确性之外,我们还使用各种评估方法(召回率、精度、F1 分数和准确性)重新确认了 scikit-learn 的准确性。

\n

我们发现keras计算的准确率约为90%,而scikit-learn仅显示60%左右。

\n

我不知道为什么会发生这种情况,所以请告诉我。

\n

keras计算有问题吗?

\n

我们使用 sigmoid 作为激活函数、binary_crossentropy损失函数,使用 adam 作为优化器。

\n
\n

Keras 训练

\n
input_tensor = Input(shape=(img_width, img_height, 3))\n\nbase_model = MobileNetV2(include_top=False, weights='imagenet')\n\n#model.summary()\n\nx = base_model.output\nx = GlobalAveragePooling2D()(x)\n#x = Dense(2048, activation='relu')(x)\n#x = Dropout(0.5)(x)\nx = Dense(1024, activation = 'relu')(x)\n\nx = Dropout(0.5)(x)\npredictions = Dense(6, activation = 'sigmoid')(x)\n\nfor layer in base_model.layers:\n    layer.trainable = False\n\n\nmodel = Model(inputs = base_model.input, outputs = predictions)\nprint("{}\xe5\xb1\xa4".format(len(model.layers)))\n\n\nmodel.compile(optimizer=sgd, loss="binary_crossentropy", metrics=["acc"])\n\nhistory = model.fit(X_train, y_train, epochs=50, validation_data=(X_val, y_val), batch_size=64, …
Run Code Online (Sandbox Code Playgroud)

machine-learning scikit-learn multilabel-classification conv-neural-network keras

4
推荐指数
1
解决办法
1808
查看次数