给定分数向量和实际类标签的向量,如何计算R语言或简单英语中二进制分类器的单数AUC度量?
"AUC:一个更好的测量......"的第9页似乎需要知道类标签,这里是MATLAB中我不明白的例子
R(Actual == 1))
Run Code Online (Sandbox Code Playgroud)
因为R(不要与R语言混淆)被定义为向量但是用作函数?
对于2种不同的病例,我有以下F1和AUC分数
模型1:精度:85.11召回:99.04 F1:91.55 AUC:69.94
模型2:精度:85.1召回:98.73 F1:91.41 AUC:71.69
我的问题的主要动机是正确预测阳性病例,即减少假阴性病例(FN).我应该使用F1得分并选择模型1或使用AUC并选择模型2.谢谢
我知道Precision的概念以及Recall的概念.但我发现很难理解"阈值"的概念,它可以使任何PR曲线成为可能.
想象一下,我有一个模型可以预测患者在相关特征上使用一些不错的分类算法来重现(是或否)癌症.我将数据拆分用于培训和测试.假设我使用列车数据训练模型,并使用测试数据获得我的精确度和召回度量.
但我现在如何绘制PR曲线?在什么基础上?我只有两个值,一个精度和一个召回.我读到它的"阈值",它允许你获得几个精确回忆对.但那个门槛是多少?我还是初学者,我无法理解门槛的概念.
我在如此多的分类模型比较中看到,如下所示.但他们如何得到那么多对呢?
classification machine-learning auc precision-recall model-comparison
我rpart在R中使用分类器.问题是 - 我想在测试数据上测试训练好的分类器.这很好 - 我可以使用该predict.rpart功能.
但我也想计算精度,召回率和F1得分.
我的问题是 - 我是否必须为自己编写函数,或者R或任何CRAN库中是否有任何函数?
给定一个平衡的数据集(两个类的大小相同),将其拟合到 SVM 模型中,我会产生高 AUC 值(~0.9)但精度低(~0.5)。
我完全不知道为什么会发生这种情况,谁能为我解释一下这个案例?
我想知道是否有一种方法可以根据caret包装生成的SVM-RFE模型的交叉验证数据绘制平均ROC曲线.
我的结果是:
Recursive feature selection
Outer resampling method: Cross-Validated (10 fold, repeated 5 times)
Resampling performance over subset size:
Variables ROC Sens Spec Accuracy Kappa ROCSD SensSD SpecSD AccuracySD KappaSD Selected
1 0.6911 0.0000 1.0000 0.5900 0.0000 0.2186 0.0000 0.0000 0.0303 0.0000
2 0.7600 0.3700 0.8067 0.6280 0.1807 0.1883 0.3182 0.2139 0.1464 0.3295
3 0.7267 0.4233 0.8667 0.6873 0.3012 0.2020 0.3216 0.1905 0.1516 0.3447
4 0.6989 0.3867 0.8600 0.6680 0.2551 0.2130 0.3184 0.1793 0.1458 0.3336
5 0.7000 0.3367 …Run Code Online (Sandbox Code Playgroud) 我正在尝试在非常不平衡的数据集上使用LightGBM构建分类器.不平衡是比例97:3,即:
Class
0 0.970691
1 0.029309
Run Code Online (Sandbox Code Playgroud)
我使用的参数和培训代码如下所示.
lgb_params = {
'boosting_type': 'gbdt',
'objective': 'binary',
'metric':'auc',
'learning_rate': 0.1,
'is_unbalance': 'true', #because training data is unbalance (replaced with scale_pos_weight)
'num_leaves': 31, # we should let it be smaller than 2^(max_depth)
'max_depth': 6, # -1 means no limit
'subsample' : 0.78
}
# Cross-validate
cv_results = lgb.cv(lgb_params, dtrain, num_boost_round=1500, nfold=10,
verbose_eval=10, early_stopping_rounds=40)
nround = cv_results['auc-mean'].index(np.max(cv_results['auc-mean']))
print(nround)
model = lgb.train(lgb_params, dtrain, num_boost_round=nround)
preds = model.predict(test_feats)
preds = [1 if x >= 0.5 …Run Code Online (Sandbox Code Playgroud) 我使用Tensorflow构建了一个二元分类器,现在我想用AUC和准确度来评估分类器.
就准确性而言,我可以轻松地这样做:
X = tf.placeholder('float', [None, n_input])
y = tf.placeholder('float', [None, n_classes])
pred = mlp(X, weights, biases, dropout_keep_prob)
correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
Run Code Online (Sandbox Code Playgroud)
在计算AUC时,我使用以下内容:
print(tf.argmax(pred, 1).dtype.name)
print(tf.argmax(pred, 1).dtype.name)
a = tf.cast(tf.argmax(pred, 1),tf.float32)
b = tf.cast(tf.argmax(y,1),tf.float32)
auc = tf.contrib.metrics.streaming_auc(a, b)
Run Code Online (Sandbox Code Playgroud)
并在训练循环中:
train_acc = sess.run(accuracy, feed_dict={X: batch_xs, y: batch_ys, dropout_keep_prob:1.})
train_auc = sess.run(auc, feed_dict={X: batch_xs, y: batch_ys, dropout_keep_prob:1.})
Run Code Online (Sandbox Code Playgroud)
这给了我以下输出(和错误)错误:
int64
int64
/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/array_ops.py:1197: VisibleDeprecationWarning: converting an array with ndim > 0 to an index will result in an …Run Code Online (Sandbox Code Playgroud) 我正在建造2个模型.
模型1
modelgb = GradientBoostingClassifier()
modelgb.fit(x_train,y_train)
predsgb = modelgb.predict_proba(x_test)[:,1]
metrics.roc_auc_score(y_test,predsgb, average='macro', sample_weight=None)
Run Code Online (Sandbox Code Playgroud)
模型2
model = LogisticRegression()
model = model.fit(x_train,y_train)
predslog = model.predict_proba(x_test)[:,1]
metrics.roc_auc_score(y_test,predslog, average='macro', sample_weight=None)
Run Code Online (Sandbox Code Playgroud)
如何在一个图中绘制两个ROC曲线,每个模型的AUC分数的图例和文本?
我有一个多类分类问题,我想测量训练和测试数据的 AUC。
tf.keras 已经实现了 AUC 指标(tf.keras.metrics.AUC),但我无法看出该指标是否可以安全地用于多类问题。甚至,官方网页上的示例“Classification on imbalanced data”专门针对二元分类问题。
我已经实现了一个 CNN 模型,可以预测六个类别,并有一个 softmax 层给出所有类别的概率。我使用这个指标如下
self.model.compile(loss='categorical_crossentropy',
optimizer=Adam(hp.get("learning_rate")),
metrics=['accuracy', AUC()]),
Run Code Online (Sandbox Code Playgroud)
并且代码执行没有任何问题。然而,有时我会看到一些对我来说很奇怪的结果。例如,模型报告的准确度为 0.78333336,AUC 等于 0.97327775,这可能吗?模型的准确率可以这么低,AUC 却这么高吗?
我想知道,虽然代码没有给出任何错误,但 AUC 指标计算错误。
有人可能会向我确认这个指标是否支持多类分类问题?
auc ×10
python ×3
r ×3
roc ×3
data-mining ×1
lightgbm ×1
plot ×1
python-3.5 ×1
python-3.x ×1
r-caret ×1
tensorflow ×1
tf.keras ×1