标签: multilabel-classification

多标签分类上的交叉验证出错

我正在使用"multiclass.OneVsRestClassifier"和"cross_validation.StratifiedKFold".当我对多标签问题进行交叉验证时,它会失败.是否可以对多标签问题进行交叉验证scikit-learn?

我认为问题出在类标签列表的元组Eg([1],[2],[2],[1],[1,2],[3],[1,2,3] ...... )

我相信这个错误的代码如下:

n_samples = X.shape[0]
Y_list = [value for value in Y.T]
print 'Y_list[0].shape:', Y_list[0].shape, 'len(Y_list):', len(Y_list)
cv = cross_validation.StratifiedKFold(Y_list, 3)
Run Code Online (Sandbox Code Playgroud)

python svm scikit-learn cross-validation multilabel-classification

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

PyStruct - 没有匹配的签名查找

我正在尝试使用此处的代码:https://github.com/pystruct/pystruct/blob/master/examples/multi_label.py

我有X_train的形状(2591, 256)和y_train的形状(2591, 175).当我运行这个:

tree = chow_liu_tree(y_train)
tree_model = MultiLabelClf(edges=tree, inference_method="max-product")
tree_ssvm = OneSlackSSVM(tree_model, inference_cache=50, C=.1, tol=0.01)
print("fitting tree model...")
tree_ssvm.fit(X_train, y_train)
Run Code Online (Sandbox Code Playgroud)

我懂了:

Traceback (most recent call last):
  File "classifiers.py", line 173, in <module>
    tree_ssvm.fit(X_train, y_train)
  File "/usr/local/lib/python2.7/dist-packages/pystruct/learners/one_slack_ssvm.py", line 448, in fit
    X, Y, joint_feature_gt, constraints)
  File "/usr/local/lib/python2.7/dist-packages/pystruct/learners/one_slack_ssvm.py", line 348, in _find_new_constraint
    X, Y, self.w, relaxed=True)
  File "/usr/local/lib/python2.7/dist-packages/pystruct/models/base.py", line 95, in batch_loss_augmented_inference
    for x, y in zip(X, Y)]
  File "/usr/local/lib/python2.7/dist-packages/pystruct/models/crf.py", line 106, in …
Run Code Online (Sandbox Code Playgroud)

python python-2.7 multilabel-classification

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

scikit-learn:在管道中使用SelectKBest时获取所选功能

我正在尝试在多标签情况下将功能选择作为scikit学习管道的一部分。我的目的是针对给定的k选择最佳的K特征。

这可能很简单,但我不了解如何在这种情况下获取所选要素索引。

在常规情况下,我可以执行以下操作:

anova_filter = SelectKBest(f_classif, k=10)

anove_filter.fit_transform(data.X, data.Y)

anova_filter.get_support()
Run Code Online (Sandbox Code Playgroud)

但是在多标签方案中,我的标签尺寸为#samples X #unique_labels,因此fit和fit_transform会产生以下异常:ValueError:输入形状错误

这很有意义,因为它需要标注为[#samples]维的标签

在多标签方案中,这样做是有意义的:

clf = Pipeline([('f_classif', SelectKBest(f_classif, k=10)),('svm', LinearSVC())])

multiclf = OneVsRestClassifier(clf, n_jobs=-1)

multiclf.fit(data.X, data.Y)
Run Code Online (Sandbox Code Playgroud)

但是然后我得到的对象是sklearn.multiclass.OneVsRestClassifier类型,它没有get_support函数。在管道中使用经过训练的SelectKBest模型时,如何获得它?

classification machine-learning feature-selection scikit-learn multilabel-classification

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

Tensorflow中的多标签分类器

我想用TensorFlow开发一个多标签分类器,我试图意味着存在多个包含多个类的标签.为了说明你可以想象这样的情况:

  • label-1类:灯光下雨,下雨,局部下雨,没有下雨
  • 标签-2类:晴天,部分多云,多云,非常多云.

我想用神经网络对这两个标签进行分类.现在,我为每个(label-1,label-2)对类使用了不同的类标签.这意味着我有4 x 4 = 16个不同的标签.

通过训练我的模型

目前的损失

cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction), reduction_indices=[1])) 

# prediction is sofmaxed
loss = cross_entropy + regul * schema['regul_ratio'] # regul things is for regularization 
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
Run Code Online (Sandbox Code Playgroud)

但是我认为多标签培训在这种情况下会更好用.

  • 我的功能将是[n_samples,n_features]
  • 我的标签是[n_samples,n_classes,2]

[x1,x2,x3,x4 ...]#个特征的n_samples

[[0,0,0,1],[0,0,1,0]]的n_samples#没有下雨和阴天

如何制作具有张量流的softmax概率分布预测器.有没有像这样的多标签问题的工作示例.我的损失将如何变得如此?

python classification machine-learning multilabel-classification tensorflow

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

使用e1071(SVM)进行文本分类

我有一个包含两列的数据框.一列包含文本.该列的每一行包含三种不同类别(技能,资格,经验)的某种类型的数据,其他列是它们各自的类标签.

数据帧的快照:

数据帧的快照

如何从包e1071应用svm.如何将文本数据列转换为某个分数.我想过将文本列转换为文档术语矩阵.他们是其他任何方式吗?如何制作dt矩阵?

r svm text-classification multilabel-classification

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

当有多个正确的标签时,如何训练机器学习分类模型?

我有一个简单的数据集,包含20个功能和8个可能的标签.但是,对于某些记录,可能有多个正确的标签.我想训练这个模型,使预测的标签是可能的标签之一.什么是实现这一目标的好方法?

示例:请考虑以下记录:

[color: grey; legs:2; wings:2; mass: 120g;....]
Run Code Online (Sandbox Code Playgroud)

一些记录被标记为"麻雀",而其他一些记录被命名为"鸟".在测试期间,我不关心这些标签中的哪一个被分配给记录,只要它是其中之一.

artificial-intelligence classification machine-learning multilabel-classification data-science

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

解释方法:标签排名平均准确度得分

我是阵列编程的新手,发现很难解释sklearn.metrics label_ranking_average_precision_score函数。需要您的帮助以了解其计算方式,并感谢您学习Numpy数组编程的任何技巧。

通常,我知道精度是
((正数)/(正数+误数))

我问这个问题的原因是,我偶然发现了Kaggle音频标记竞赛,并发现这篇帖子说,当响应中有多个正确的标签时,他们正在使用LWRAP函数计算分数。我开始阅读以了解该分数是如何计算的,并发现难以解释。我的两个困难是
1)从文档解释Math函数,我不确定分数计算中如何使用排名
2)从代码解释Numpy数组操作
我正在读取的函数来自Google Collab文档,然后尝试阅读文档在sklearn,但无法正确理解。

一个样本计算的代码是

# Core calculation of label precisions for one test sample.

def _one_sample_positive_class_precisions(scores, truth):
  """Calculate precisions for each true class for a single sample.

  Args:
    scores: np.array of (num_classes,) giving the individual classifier scores.
    truth: np.array of (num_classes,) bools indicating which classes are true.

  Returns:
    pos_class_indices: np.array of indices of the true classes for this sample.
    pos_class_precisions: np.array of precisions corresponding to each of those
      classes.
  """ …
Run Code Online (Sandbox Code Playgroud)

python numpy scikit-learn average-precision multilabel-classification

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

使用BERT进行多标签分类

我想使用BERT模型对Tensorflow进行多标签分类。

要做到这一点,我想适应的例子run_classifier.py来自BERT GitHub的仓库,这是关于如何使用BERT做简单的分类,使用一个例子由谷歌研究给出预训练的权重。(例如使用BERT-Base, Cased

我有X不同的标签,它们的值为0或1,所以我想在原始BERT模型中添加一个新的Dense层,X并使用sigmoid_cross_entropy_with_logits激活函数。

因此,从理论上讲,我认为我很好。

问题是我不知道如何附加一个新的输出层,并使用现有BertModel类仅使用我的数据集重新训练该新层。

这是我想必须从中进行修改的原始create_model()功能run_classifier.py。但是我对如何做却有些迷茫。

def create_model(bert_config, is_training, input_ids, input_mask, segment_ids,
                 labels, num_labels, use_one_hot_embeddings):
  """Creates a classification model."""
  model = modeling.BertModel(
      config=bert_config,
      is_training=is_training,
      input_ids=input_ids,
      input_mask=input_mask,
      token_type_ids=segment_ids,
      use_one_hot_embeddings=use_one_hot_embeddings)

  output_layer = model.get_pooled_output()

  hidden_size = output_layer.shape[-1].value

  output_weights = tf.get_variable(
      "output_weights", [num_labels, hidden_size],
      initializer=tf.truncated_normal_initializer(stddev=0.02))

  output_bias = tf.get_variable(
      "output_bias", [num_labels], initializer=tf.zeros_initializer())

  with tf.variable_scope("loss"):
    if is_training:
      # I.e., 0.1 dropout
      output_layer …
Run Code Online (Sandbox Code Playgroud)

python classification multilabel-classification tensorflow

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

LSTM 文本分类准确率低 Keras

我在这个项目中要疯了。这是在 keras 中使用 lstm 的多标签文本分类。我的模型是这样的:

model = Sequential()

model.add(Embedding(max_features, embeddings_dim, input_length=max_sent_len, mask_zero=True, weights=[embedding_weights] ))
model.add(Dropout(0.25))
model.add(LSTM(output_dim=embeddings_dim , activation='sigmoid', inner_activation='hard_sigmoid', return_sequences=True))
model.add(Dropout(0.25))
model.add(LSTM(activation='sigmoid', units=embeddings_dim, recurrent_activation='hard_sigmoid', return_sequences=False))
model.add(Dropout(0.25))
model.add(Dense(num_classes))
model.add(Activation('sigmoid'))

adam=keras.optimizers.Adam(lr=0.04)
model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)

只是我的准确度太低了 .. 使用二元交叉熵我得到了很好的准确度,但结果是错误的!!!!!!更改为分类交叉熵,我的准确度非常低。你有什么建议吗?

有我的代码:GitHubProject - 多标签文本分类

text-classification multilabel-classification lstm keras rnn

3
推荐指数
1
解决办法
1467
查看次数

keras中多标签图像的一种热编码

我正在使用 PASCAL VOC 2012 数据集进行图像分类。一些图像具有多个标签,其中一些图像具有单个标签,如下所示。

    0  2007_000027.jpg               {'person'}
    1  2007_000032.jpg  {'aeroplane', 'person'}
    2  2007_000033.jpg            {'aeroplane'}
    3  2007_000039.jpg            {'tvmonitor'}
    4  2007_000042.jpg                {'train'}
Run Code Online (Sandbox Code Playgroud)

我想对这些标签进行一次性编码来训练模型。但是,我不能使用 keras.utils.to_categorical,因为这些标签不是整数,而且 pandas.get_dummies 没有给我预期的结果。get_dummies 给出了如下不同的类别,即将每个独特的标签组合作为一个类别。

 {'aeroplane', 'bus', 'car'}  {'aeroplane', 'bus'}  {'tvmonitor', 'sofa'}  {'tvmonitor'} ...
Run Code Online (Sandbox Code Playgroud)

对这些标签进行一次性编码的最佳方法是什么,因为我们没有为每张图像指定特定数量的标签。

python pandas multilabel-classification keras one-hot-encoding

3
推荐指数
1
解决办法
3320
查看次数