有人可以解释(举例说明)scikit-learn中OneVsRestClassifier和MultiOutputClassifier之间的区别是什么?
我已阅读文档,我知道我们使用:
我已经使用OneVsRestClassifier进行多标签分类,我可以理解它是如何工作的,但后来我找到了MultiOutputClassifier,并且无法理解它与OneVsRestClassifier的工作方式有何不同.
python classification scikit-learn multilabel-classification multiclass-classification
我正在处理 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
如何将标签向量转换为单热编码并返回到 Pytorch 中?
在经历整个论坛讨论后,问题的解决方案被复制到这里,而不是仅仅通过谷歌搜索找到一个简单的解决方案。
我在Spark ML中使用随机森林进行多类预测.
对于spark ML中的MulticlassClassificationEvaluator(),是否可以通过每个类标签获得精确度/召回率?
目前,我只看到所有班级的精确/召回相结合.
machine-learning bigdata apache-spark apache-spark-ml multiclass-classification
我正在尝试将 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
我正在做不同的文本分类实验.现在我需要计算每项任务的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
我使用 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
我正在做多类/多标签文本分类。我试图摆脱“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
我训练了一个深度学习模型,将给定的图像分为三类。现在我想在我的模型中再添加一个类。我尝试查看“在线学习”,但它似乎是在现有课程的新数据上进行训练。我是否需要在所有四个类别上再次训练我的整个模型,或者有什么方法可以在新类别上训练我的模型?
python deep-learning keras multiclass-classification online-machine-learning
我有一个分类问题,我有一个 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 ×6
scikit-learn ×3
keras ×2
tensorflow ×2
apache-spark ×1
bigdata ×1
python-3.x ×1
pytorch ×1
roc ×1
xgboost ×1