标签: multiclass-classification

scikit中的OneVsRestClassifier和MultiOutputClassifier有什么区别?

有人可以解释(举例说明)scikit-learn中OneVsRestClassifierMultiOutputClassifier之间的区别是什么?

我已阅读文档,我知道我们使用:

  • OneVsRestClassifier - 当我们想要进行多类或多标记分类时,它的策略包括为每个类拟合一个分类器.对于每个分类器,该类适用于所有其他类.(这很清楚,这意味着多类/多标记分类的问题被分解为多个二元分类问题).
  • MultiOutputClassifier - 当我们想要进行多目标分类时(这是什么?),它的策略包括为每个目标拟合一个分类器(目标是什么意思?)

我已经使用OneVsRestClassifier进行多标签分类,我可以理解它是如何工作的,但后来我找到了MultiOutputClassifier,并且无法理解它与OneVsRestClassifier的工作方式有何不同.

python classification scikit-learn multilabel-classification multiclass-classification

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

XGBoost 用于多分类和不平衡数据

我正在处理 3 个类别 [0,1,2] 的分类问题,类别分布不平衡,如下所示。

在此输入图像描述

我想将XGBClassifier(在 Python 中)应用于此分类问题,但该模型不会响应class_weight调整并偏向多数类 0,并且忽略少数类 1,2。除了其他哪些超参数class_weight可以帮助我?

我尝试过1)使用sklearn计算类别权重compute_class_weight;2)根据类别的相对频率设置权重;3) 并手动调整具有极值的类以查看是否发生任何变化,例如{0:0.5,1:100,2:200}. 但无论如何,它对分类器考虑少数类没有帮助。

观察结果:

  • 我可以在二元情况下处理问题:如果我通过识别类 [1,2] 使问题成为二元分类,那么我可以通过调整使分类器正常工作scale_pos_weight(即使在这种情况下class_weight单独没有帮助)。但是scale_pos_weight,据我所知,适用于二元分类。对于多分类问题,是否有该参数的类似物?

  • 使用RandomForestClassifier代替,我可以通过设置和调整XGBClassifier来解决问题。但是,由于某种原因,这种方法不适用于 XGBClassifier。class_weight='balanced_subsample'max_leaf_nodes

备注:我了解平衡技术,例如过采样/欠采样或 SMOTE。但我想尽可能避免它们,并且如果可能的话,更喜欢使用模型超参数调整的解决方案。我上面的观察表明,这适用于二进制情况。

python xgboost multiclass-classification xgbclassifier imbalanced-data

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

如何在 Pytorch 中将 one-hot 向量转换为标签索引并返回?

如何将标签向量转换为单热编码并返回到 Pytorch 中?

在经历整个论坛讨论后,问题的解决方案被复制到这里,而不是仅仅通过谷歌搜索找到一个简单的解决方案。

python one-hot-encoding multiclass-classification pytorch

12
推荐指数
2
解决办法
2万
查看次数

Spark ML - MulticlassClassificationEvaluator - 我们可以通过每个类标签获得精确/召回吗?

我在Spark ML中使用随机森林进行多类预测.

对于spark ML中的MulticlassClassificationEvaluator(),是否可以通过每个类标签获得精确度/召回率?

目前,我只看到所有班级的精确/召回相结合.

machine-learning bigdata apache-spark apache-spark-ml multiclass-classification

10
推荐指数
1
解决办法
1151
查看次数

ValueError:输入 0 与图层模型不兼容:预期形状=(无,14999,7),发现形状=(无,7)

我正在尝试将 Conv1D 图层应用于具有数字数据集的分类模型。我的模型的神经网络如下:

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Conv1D(8,kernel_size = 3, strides = 1,padding = 'valid', activation = 'relu',input_shape = (14999,7)))
model.add(tf.keras.layers.Conv1D(16,kernel_size = 3, strides = 1,padding = 'valid', activation = 'relu'))
model.add(tf.keras.layers.MaxPooling1D(2))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Conv1D(32,kernel_size = 3, strides = 1,padding = 'valid', activation = 'relu'))
model.add(tf.keras.layers.Conv1D(64,kernel_size = 3, strides = 1,padding = 'valid', activation = 'relu'))
model.add(tf.keras.layers.MaxPooling1D(2))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Conv1D(128,kernel_size = 3, strides = 1,padding = 'valid', activation = 'relu'))
model.add(tf.keras.layers.Conv1D(256,kernel_size = 3, strides = 1,padding = 'valid', activation = 'relu'))
model.add(tf.keras.layers.MaxPooling1D(2))
model.add(tf.keras.layers.Dropout(0.2)) …
Run Code Online (Sandbox Code Playgroud)

machine-learning deep-learning keras tensorflow multiclass-classification

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

Sklearn:用于多类分类的ROC

我正在做不同的文本分类实验.现在我需要计算每项任务的AUC-ROC.对于二进制分类,我已经使用此代码:

scaler = StandardScaler(with_mean=False)

enc = LabelEncoder()
y = enc.fit_transform(labels)

feat_sel = SelectKBest(mutual_info_classif, k=200)

clf = linear_model.LogisticRegression()

pipe = Pipeline([('vectorizer', DictVectorizer()),
                 ('scaler', StandardScaler(with_mean=False)),
                 ('mutual_info', feat_sel),
                 ('logistregress', clf)])
y_pred = model_selection.cross_val_predict(pipe, instances, y, cv=10)
# instances is a list of dictionaries

#visualisation ROC-AUC

fpr, tpr, thresholds = roc_curve(y, y_pred)
auc = auc(fpr, tpr)
print('auc =', auc)

plt.figure()
plt.title('Receiver Operating Characteristic')
plt.plot(fpr, tpr, 'b',
label='AUC = %0.2f'% auc)
plt.legend(loc='lower right')
plt.plot([0,1],[0,1],'r--')
plt.xlim([-0.1,1.2])
plt.ylim([-0.1,1.2])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()
Run Code Online (Sandbox Code Playgroud)

但现在我需要为多类分类任务执行此操作.我读到了我需要对标签进行二值化的地方,但我真的不知道如何计算多类分类的ROC.提示?

python roc scikit-learn text-classification multiclass-classification

9
推荐指数
2
解决办法
2万
查看次数

使用 one-hot 代码的 Tensorflow 混淆矩阵

我使用 RNN 进行多类分类,这是我的 RNN 主要代码:

def RNN(x, weights, biases):
    x = tf.unstack(x, input_size, 1)
    lstm_cell = rnn.BasicLSTMCell(num_unit, forget_bias=1.0, state_is_tuple=True) 
    stacked_lstm = rnn.MultiRNNCell([lstm_cell]*lstm_size, state_is_tuple=True) 
    outputs, states = tf.nn.static_rnn(stacked_lstm, x, dtype=tf.float32)

    return tf.matmul(outputs[-1], weights) + biases

logits = RNN(X, weights, biases)
prediction = tf.nn.softmax(logits)

cost =tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=Y))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)
train_op = optimizer.minimize(cost)

correct_pred = tf.equal(tf.argmax(prediction, 1), tf.argmax(Y, 1)) 
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))
Run Code Online (Sandbox Code Playgroud)

我必须将所有输入分类为 6 个类,每个类都由一个热代码标签组成,如下所示:

happy = [1, 0, 0, 0, 0, 0]
angry = [0, 1, 0, 0, 0, 0] …
Run Code Online (Sandbox Code Playgroud)

confusion-matrix tensorflow one-hot-encoding multiclass-classification

8
推荐指数
1
解决办法
4563
查看次数

Python:逻辑回归max_iter参数降低了准确性

我正在做多类/多标签文本分类。我试图摆脱“ConvergenceWarning”。

当我将max_iter从默认值调整为4000 时,警告消失了。然而,我的模型精度从78降低到75

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score


logreg = Pipeline([('vect', CountVectorizer()),
            ('tfidf', TfidfTransformer()),
            ('clf', LogisticRegression(n_jobs=1, C=1e5, solver='lbfgs',multi_class='ovr' ,random_state=0, class_weight='balanced' )),
           ])
logreg.fit(X_train, y_train)


y_pred = logreg.predict(X_test)

print('Logistic Regression Accuracy %s' % accuracy_score(y_pred, y_test))

cv_score = cross_val_score(logreg, train_tfidf, y_train, cv=10, scoring='accuracy')
print("CV Score : Mean : %.7g | Std : %.7g | Min : %.7g | Max : %.7g" % (np.mean(cv_score),np.std(cv_score),np.min(cv_score),np.max(cv_score)))
Run Code Online (Sandbox Code Playgroud)

为什么当 max_iter = 4000 时我的准确率会降低?有没有其他方法可以修复 *“ConvergenceWarning:lbfgs 未能收敛。增加迭代次数。“迭代次数。”,ConvergenceWarning)”*

python cross-validation logistic-regression multiclass-classification

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

如何在深度学习中向现有分类器添加新类?

我训练了一个深度学习模型,将给定的图像分为三类。现在我想在我的模型中再添加一个类。我尝试查看“在线学习”,但它似乎是在现有课程的新数据上进行训练。我是否需要在所有四个类别上再次训练我的整个模型,或者有什么方法可以在新类别上训练我的模型?

python deep-learning keras multiclass-classification online-machine-learning

8
推荐指数
1
解决办法
8689
查看次数

AxisError:计算 AUC 时,轴 1 超出维度 1 数组的范围

我有一个分类问题,我有一个 8x8 图像的像素值和图像代表的数字,我的任务是使用 RandomForestClassifier 根据像素值预测数字('Number' 属性)。数值的值可以是0-9。

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_score

forest_model = RandomForestClassifier(n_estimators=100, random_state=42)
forest_model.fit(train_df[input_var], train_df[target])
test_df['forest_pred'] = forest_model.predict_proba(test_df[input_var])[:,1]
roc_auc_score(test_df['Number'], test_df['forest_pred'], average = 'macro', multi_class="ovr")
Run Code Online (Sandbox Code Playgroud)

这里它抛出一个AxisError。

回溯(最近一次调用最后一次):
  文件“dap_hazi_4.py”,第 44 行,在 
    roc_auc_score(test_df['Number'],test_df['forest_pred'],average = 'macro', multi_class="ovo")
  文件“/home/balint/.local/lib/python3.6/site-packages/sklearn/metrics/_ranking.py”,第 383 行,在 roc_auc_score
    多类、平均值、样本权重)
  文件“/home/balint/.local/lib/python3.6/site-packages/sklearn/metrics/_ranking.py”,第440行,_multiclass_roc_auc_score
    如果不是 np.allclose(1, y_score.sum(axis=1)):
  文件“/home/balint/.local/lib/python3.6/site-packages/numpy/core/_methods.py”,第 38 行,在 _sum 中
    返回 umr_sum(a,axis, dtype, out, keepdims, initial, where)

AxisError:轴 1 超出维度 1 数组的范围

python-3.x scikit-learn multiclass-classification

8
推荐指数
2
解决办法
4941
查看次数