标签: multilabel-classification

使用sklearn进行多标签特征选择

我正在寻找使用 sklearn 对多标签数据集执行特征选择。我想获得标签的最终特征集,然后我将在另一个机器学习包中使用这些特征。我打算使用我在这里看到的方法,它分别为每个标签选择相关特征。

from sklearn.svm import LinearSVC
from sklearn.feature_selection import chi2, SelectKBest
from sklearn.multiclass import OneVsRestClassifier
clf = Pipeline([('chi2', SelectKBest(chi2, k=1000)),
                ('svm', LinearSVC())])
multi_clf = OneVsRestClassifier(clf)
Run Code Online (Sandbox Code Playgroud)

然后我计划使用以下方法提取每个标签包含的特征的索引:

selected_features = []
for i in multi_clf.estimators_:
    selected_features += list(i.named_steps["chi2"].get_support(indices=True))
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是,如何选择要包含在最终模型中的选定特征?我可以使用每一个独特的特征(包括只与一个标签相关的特征),或者我可以做一些事情来选择与更多标签相关的特征。

我最初的想法是创建一个给定特征选择的标签数量的直方图,并根据视觉检查确定一个阈值。我担心的是这种方法是主观的。使用 sklearn 为多标签数据集执行特征选择是否有更原则性的方法?

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

7
推荐指数
1
解决办法
8350
查看次数

有没有一种方法可以对一类SVM执行网格搜索超参数优化

有没有一种方法可以使用GridSearchCV或任何其他内置的sklearn函数来为OneClassSVM分类器找到最佳的超参数?

我目前要做的是使用训练/测试拆分自己执行搜索,如下所示:

Gamma和nu值定义为:

gammas = np.logspace(-9, 3, 13)
nus = np.linspace(0.01, 0.99, 99)
Run Code Online (Sandbox Code Playgroud)

探索所有可能的超参数并找到最佳参数的函数:

clf = OneClassSVM()

results = []

train_x = vectorizer.fit_transform(train_contents)
test_x = vectorizer.transform(test_contents)

for gamma in gammas:
    for nu in nus:
        clf.set_params(gamma=gamma, nu=nu)

        clf.fit(train_x)

        y_pred = clf.predict(test_x)

        if 1. in y_pred:  # Check if at least 1 review is predicted to be in the class
            results.append(((gamma, nu), (accuracy_score(y_true, y_pred),
                                              precision_score(y_true, y_pred),
                                              recall_score(y_true, y_pred),
                                              f1_score(y_true, y_pred),
                                              roc_auc_score(y_true, y_pred),
                                              ))
                               )

    # Determine and print the best parameter settings …
Run Code Online (Sandbox Code Playgroud)

svm scikit-learn multilabel-classification hyperparameters grid-search

7
推荐指数
2
解决办法
4180
查看次数

多标签分类角膜的怪异准确性

我有一个多标签分类问题,我使用了以下代码,但是在第一个时期,验证准确性跳升到99%,考虑到数据的复杂性,这是很奇怪的,因为输入特征是从初始模型(pool3:0)层中提取的2048个输入特征,标签为[1000],(这是文件的链接,其中包含功能和标签的示例:https : //drive.google.com/file/d/0BxI_8PO3YBPPYkp6dHlGeExpS1k/view?usp=sharing),我是否有此东西在这里做错了?

注意:标签为稀疏向量,仅包含1〜10项,因为1其余为零

model.compile(optimizer='adadelta', loss='binary_crossentropy', metrics=['accuracy']) 
Run Code Online (Sandbox Code Playgroud)

预测的输出为零!

在训练模型以干扰预测时,我做错了什么?

#input is the features file and labels file

def generate_arrays_from_file(path ,batch_size=100):
x=np.empty([batch_size,2048])
y=np.empty([batch_size,1000])
while True:
    f = open(path)
    i = 1  
    for line in f:
        # create Numpy arrays of input data
        # and labels, from each line in the file
        words=line.split(',')
        words=map(float, words[1:])
        x_= np.array(words[0:2048])
        y_=words[2048:]
        y_= np.array(map(int,y_))
        x_=x_.reshape((1, -1))
        #print np.squeeze(x_)
        y_=y_.reshape((1,-1))
        x[i]= x_
        y[i]=y_
        i += 1
        if i == batch_size:
            i=1
            yield (x, y)

    f.close() …
Run Code Online (Sandbox Code Playgroud)

machine-learning sparse-matrix multilabel-classification keras

7
推荐指数
1
解决办法
1813
查看次数

使用 PyTorch 的交叉熵损失函数是否需要 One-Hot 编码?

例如,如果我想解决 MNIST 分类问题,我们有 10 个输出类。对于 PyTorch,我想使用该torch.nn.CrossEntropyLoss功能。我是否必须格式化目标以便它们是单热编码的,还是我可以简单地使用数据集附带的类标签?

python computer-vision multilabel-classification deep-learning pytorch

7
推荐指数
1
解决办法
6228
查看次数

Python scikit学习多类多标签性能指标?

我为我的多类多标签输出变量运行了随机森林分类器.我得到了以下输出.

My y_test values


     Degree  Nature
762721       1       7                              
548912       0       6
727126       1      12
14880        1      12
189505       1      12
657486       1      12
461004       1       0
31548        0       6
296674       1       7
121330       0      17


predicted output :

[[  1.   7.]
 [  0.   6.]
 [  1.  12.]
 [  1.  12.]
 [  1.  12.]
 [  1.  12.]
 [  1.   0.]
 [  0.   6.]
 [  1.   7.]
 [  0.  17.]]
Run Code Online (Sandbox Code Playgroud)

现在我想检查分类器的性能.我发现对于多类多标签"Hamming loss或jaccard_similarity_score"是很好的指标.我试图计算它,但我得到了价值错误.

Error:
ValueError: multiclass-multioutput is not supported
Run Code Online (Sandbox Code Playgroud)

我尝试下面的线:

print hamming_loss(y_test, …
Run Code Online (Sandbox Code Playgroud)

python precision machine-learning scikit-learn multilabel-classification

6
推荐指数
1
解决办法
7615
查看次数

使用 OneVsRestClassifier 时 sklearn.svm.SVC 的哪个 decision_function_shape?

我正在做多标签分类,我试图预测问题的正确标签:

(X = 问题,y = X 中每个问题的标签列表)。

我想知道,哪个decision_function_shapeforsklearn.svm.SVC应该与OneVsRestClassifier?

从文档中我们可以看到decision_function_shape可以有两个值'ovo''ovr'

decision_function_shape: '卵内', 'OVR'或无,默认=无

是否像所有其他分类器一样返回形状为 (n_samples, n_classes) 的一对一 ('ovr') 决策函数,或具有形状 (n_samples) 的 libsvm 的原始一对一 ('ovo') 决策函数, n_classes * (n_classes - 1) / 2)。None 的默认值当前将表现为向后兼容的“ovo”并引发弃用警告,但将在 0.19 中更改“ovr”。

但我仍然不明白这两者之间的区别是什么:

# First decision_function_shape set to 'ovo'
estim = OneVsRestClassifier(SVC(kernel='linear', decision_function_shape ='ovo'))

# Second decision_function_shape set to 'ovr'
estim = OneVsRestClassifier(SVC(kernel='linear', decision_function_shape ='ovr'))
Run Code Online (Sandbox Code Playgroud)

哪个decision_function_shape应该用于多标签分类问题?

编辑: 问题询问类似的事情而没有答案。

python svm scikit-learn text-classification multilabel-classification

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

如何计算多标签分类的 F1-Score?

我尝试计算f1_score但在使用 sklearnf1_score方法时在某些情况下会收到一些警告。

我有一个预测的多标签 5 类问题。

import numpy as np
from sklearn.metrics import f1_score

y_true = np.zeros((1,5))
y_true[0,0] = 1 # => label = [[1, 0, 0, 0, 0]]

y_pred = np.zeros((1,5))
y_pred[:] = 1 # => prediction = [[1, 1, 1, 1, 1]]

result_1 = f1_score(y_true=y_true, y_pred=y_pred, labels=None, average="weighted")

print(result_1) # prints 1.0

result_2 = f1_score(y_true=y_ture, y_pred=y_pred, labels=None, average="weighted")

print(result_2) # prints: (1.0, 1.0, 1.0, None) for precision/recall/fbeta_score/support
Run Code Online (Sandbox Code Playgroud)

当我使用average="samples"而不是"weighted"我得到 (0.1, 1.0, 0.1818 …

metrics scikit-learn multilabel-classification precision-recall

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

如何使用 scikit-learn 在分类问题中为 F1-score 做 GridSearchCV?

我正在研究 scikit-learn 中的神经网络的多分类问题,我试图弄清楚如何优化我的超参数(层的数量、感知器的数量,最终其他东西)。

我发现这GridSearchCV是这样做的方法,但我使用的代码返回了平均准确度,而我实际上想测试 F1 分数。有没有人知道如何编辑此代码以使其适用于 F1 分数?

一开始,当我不得不评估精确度/准确度时,我认为只取混淆矩阵并从中得出结论就“足够了”,同时通过反复试验来改变我的神经网络中的层和感知器的数量网络一遍又一遍。

今天我发现还有更多:GridSearchCV. 我只需要弄清楚如何评估 F1 分数,因为我需要研究确定神经网络在层、节点以及最终其他替代方案方面的准确性......

mlp = MLPClassifier(max_iter=600)
clf = GridSearchCV(mlp, parameter_space, n_jobs= -1, cv = 3)
clf.fit(X_train, y_train.values.ravel())

parameter_space = {
    'hidden_layer_sizes': [(1), (2), (3)],
}

print('Best parameters found:\n', clf.best_params_)

means = clf.cv_results_['mean_test_score']
stds = clf.cv_results_['std_test_score']
for mean, std, params in zip(means, stds, clf.cv_results_['params']):
    print("%0.3f (+/-%0.03f) for %r" % (mean, std * 2, params))

Run Code Online (Sandbox Code Playgroud)

输出:

Best parameters found:
 {'hidden_layer_sizes': 3}
0.842 (+/-0.089) for {'hidden_layer_sizes': 1}
0.882 (+/-0.031) …
Run Code Online (Sandbox Code Playgroud)

python machine-learning neural-network multilabel-classification hyperparameters

6
推荐指数
1
解决办法
5339
查看次数

使用 F1-score 进行 Keras 多标签图像分类

我正在研究multi-label图像分类问题,并根据F1-score系统预测和真实标签之间的评估进行评估。

鉴于这种情况,我应该使用loss="binary_crossentropy"loss=keras_metrics.f1_score()地方keras_metrics.f1_score()就是从这里取:https://pypi.org/project/keras-metrics/?我有点困惑,因为我在网上找到的所有关于multi-label分类的教程都是基于binary_crossentropy损失函数的,但在这里我必须针对F1-score.

此外,我应该设置metrics=["accuracy"]还是metrics=[keras_metrics.f1_score()]应该将其完全留空?

python classification multilabel-classification keras tensorflow

6
推荐指数
1
解决办法
1395
查看次数

如何进行超像素图像分割和特征提取

我对皮肤组织的多类分割感兴趣,我将 3000 个皮肤组织标签分为 4 个类别,我创建了一个 CNN 分类算法来训练我的分类模型。我想将分类模型用于新皮肤组织图像的分割任务,并对属于每个类的皮肤组织进行特征提取

以下是为训练我的分类模型而编写的代码

from tensorflow.keras.layers import Input, Concatenate, Dropout, Flatten, Dense, GlobalAveragePooling2D, Conv2D
from tensorflow.keras import backend as K
#from tensorflow.keras.utils import np_utils
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras import optimizers
from tensorflow.keras.metrics import top_k_categorical_accuracy
from tensorflow.keras.models import Sequential, Model, load_model
import tensorflow as tf
from tensorflow.keras.initializers import he_uniform
from tensorflow.keras.callbacks import ModelCheckpoint, LearningRateScheduler, TensorBoard, EarlyStopping, CSVLogger, ReduceLROnPlateau
#from tensorflow.compat.keras.backend import KTF
#import keras.backend.tensorflow_backend as KTF
from tensorflow.keras.applications.resnet50 import ResNet50
from …
Run Code Online (Sandbox Code Playgroud)

python image-segmentation multilabel-classification superpixels tensorflow

6
推荐指数
0
解决办法
196
查看次数