我正在使用"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
我正在尝试使用此处的代码: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) 我正在尝试在多标签情况下将功能选择作为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
我想用TensorFlow开发一个多标签分类器,我试图意味着存在多个包含多个类的标签.为了说明你可以想象这样的情况:
我想用神经网络对这两个标签进行分类.现在,我为每个(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)
但是我认为多标签培训在这种情况下会更好用.
[x1,x2,x3,x4 ...]#个特征的n_samples
[[0,0,0,1],[0,0,1,0]]的n_samples#没有下雨和阴天
如何制作具有张量流的softmax概率分布预测器.有没有像这样的多标签问题的工作示例.我的损失将如何变得如此?
python classification machine-learning multilabel-classification tensorflow
我有一个包含两列的数据框.一列包含文本.该列的每一行包含三种不同类别(技能,资格,经验)的某种类型的数据,其他列是它们各自的类标签.
数据帧的快照:

如何从包e1071应用svm.如何将文本数据列转换为某个分数.我想过将文本列转换为文档术语矩阵.他们是其他任何方式吗?如何制作dt矩阵?
我有一个简单的数据集,包含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
我是阵列编程的新手,发现很难解释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
我想使用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) 我在这个项目中要疯了。这是在 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
我正在使用 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
python ×6
scikit-learn ×3
keras ×2
svm ×2
tensorflow ×2
data-science ×1
lstm ×1
numpy ×1
pandas ×1
python-2.7 ×1
r ×1
rnn ×1