首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutoEncoder和IsolationForest的ROC评分

AutoEncoder和IsolationForest的ROC评分
EN

Stack Overflow用户
提问于 2019-11-16 18:56:51
回答 1查看 1.4K关注 0票数 1

我是机器学习领域的新成员&我正在(试图)实现异常检测算法,一种算法是借助tensorflow库的keras实现的自动编码器,另一种是借助sklearn库实现的IsolationForest,我想将这些算法与roc_auc_score ( 函数来自Python)进行比较,但我不确定是否正确。

在roc_auc_score函数的文档中,我可以看到,对于输入,应该如下所示:

sklearn.metrics.roc_auc_score(y_true,y_score,average=‘宏’,sample_weight=None,max_fpr=None

y_true :真正的二进制标签或二进制标签指示器。

y_score :目标分数,既可以是正类的概率估计、置信度值,也可以是决策的非阈值度量(由“decision_function”在某些分类器上返回)。对于二进制y_true,y_score应该是具有更大标签的类的得分。

表示AE我正在计算roc_auc_score,如下所示:

代码语言:javascript
复制
model.fit(...) # model from https://www.tensorflow.org/api_docs/python/tf/keras/Sequential
pred = model.predict(x_test) # predict function from https://www.tensorflow.org/api_docs/python/tf/keras/Sequential#predict
metric = np.mean(np.power(x_test - pred, 2), axis=1) #MSE
print(roc_auc_score(y_test, metric) # where y_test is true binary labels 0/1

For IsolationForest我正在计算roc_auc_score,如下所示:

代码语言:javascript
复制
model.fit(...) # model from https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.IsolationForest.html
metric = -(model.score_samples(x_test)) # https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.IsolationForest.html#sklearn.ensemble.IsolationForest.score_samples
print(roc_auc_score(y_test, metric) #where y_test is true binary labels 0/1

我只是好奇AE和IsolationForest的两个实现返回的IsolationForest是否具有可比性(我的意思是,如果我以正确的方式计算它们)?特别是在AE模型中,我要把最小均方输入到roc_auc_score中(如果不是,作为y_score输入到这个函数中应该是什么?)

EN

回答 1

Stack Overflow用户

发布于 2020-01-31 17:02:53

比较了AE和IsolationForest在异常衰减情况下的sklearn.metrics.roc_auc_score值,分别基于AE、MSE损失的分数和decision_function()是否合适。当切换分类器时,y_score的变化范围并不是一个问题,因为在计算AUC时,每个分类器都会考虑到这个范围。

要理解AUC不依赖于范围,请记住,您沿着决策函数值来获得ROC点。重新标度决策函数值只会相应地改变决策函数阈值,定义ROC的相似点,因为新的阈值将导致与重新标度前相同的TPR和FPR。

sklearn.metrics.roc_auc_score实现中找不到令人信服的代码行,但您可以很容易地在与研究论文相关的已发表代码中观察到这种比较。例如,在深层一级分类论文的代码中(我不是作者,我知道论文的代码,因为我正在复制它们的结果)、AE MSE丢失以及如果decision_function()roc_auc_score输入(其输出是比较的):

AE roc_auc_score计算

在github的这个剧本中发现。

代码语言:javascript
复制
from sklearn.metrics import roc_auc_score

(...)

scores = torch.sum((outputs - inputs) ** 2, dim=tuple(range(1, outputs.dim())))

(...)

auc = roc_auc_score(labels, scores)

IsolationForest roc_auc_score计算

在github的这个剧本中发现。

代码语言:javascript
复制
from sklearn.metrics import roc_auc_score

(...)

scores = (-1.0) * self.isoForest.decision_function(X.astype(np.float32))  # compute anomaly score
y_pred = (self.isoForest.predict(X.astype(np.float32)) == -1) * 1  # get prediction

(...)

auc = roc_auc_score(y, scores.flatten())

注释:,这两个脚本来自两个不同的存储库,但实际上是一篇论文的结果的来源。作者只选择为需要神经网络的AD方法的PyTorch实现创建额外的存储库。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58894137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档