我正在寻找使用 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
有没有一种方法可以使用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
我有一个多标签分类问题,我使用了以下代码,但是在第一个时期,验证准确性跳升到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
例如,如果我想解决 MNIST 分类问题,我们有 10 个输出类。对于 PyTorch,我想使用该torch.nn.CrossEntropyLoss功能。我是否必须格式化目标以便它们是单热编码的,还是我可以简单地使用数据集附带的类标签?
python computer-vision multilabel-classification deep-learning pytorch
我为我的多类多标签输出变量运行了随机森林分类器.我得到了以下输出.
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
我正在做多标签分类,我试图预测问题的正确标签:
(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
我尝试计算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
我正在研究 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
我正在研究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
我对皮肤组织的多类分割感兴趣,我将 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
python ×6
scikit-learn ×5
keras ×2
svm ×2
tensorflow ×2
grid-search ×1
metrics ×1
precision ×1
python-2.7 ×1
pytorch ×1
superpixels ×1