由于我有二进制响应的数据,但事件很少,我想通过拟合bgeva模型而不是gam模型来改进其预测。为了证明和比较它的预测准确性并将其与我尝试过的其他模型进行比较,我需要计算 AUC 并绘制 ROC 曲线。
问题是我的代码,它适用于glmand gam,不适用于bgevaobject. 确切地说,该函数的使用predict()打印了 Error:
no applicable method for 'predict' applied to an object of class "bgeva"
而我的朋友 Google 没有为我找到任何解决方案。
下面是从一个简单的例子bgeva()包和代码,我用于计算AUC并绘制ROC曲线glm和gam对象:
library(bgeva)
set.seed(0)
n <- 1500
x1 <- round(runif(n))
x2 <- runif(n)
x3 <- runif(n)
f1 <- function(x) (cos(pi*2*x)) + sin(pi*x)
f2 <- function(x) (x+exp(-30*(x-0.5)^2))
y <- as.integer(rlogis(n, location = -6 + 2*x1 + f1(x2) + f2(x3), scale = …Run Code Online (Sandbox Code Playgroud) 我有一个包含 6 个类别的数据集,我想绘制多类别分类的 ROC 曲线。Achim Zeileis 给出的第一个答案非常好。
但这仅适用于二项式分类。我得到的错误是Error in prediction, Number of classes is not equal to 2。有人做过多类分类吗?
这是我正在尝试做的一个简单的例子。数据 <- read.csv("colors.csv")
假设data$cType值6(或级别)为(红色、绿色、蓝色、黄色、黑色和白色)
有没有办法为这 6 个类别绘制 ROC 曲线?任何超过 2 类的工作示例将不胜感激。
我正在使用DecisionTree.jl包的 ScikitLearn 风格为RDatasets数据集之一的二元分类问题创建随机森林模型(有关 ScikitLearn 风格的含义,请参阅 DecisionTree.jl 主页的底部)。我还使用MLBase包进行模型评估。
我已经为我的数据构建了一个随机森林模型,并想为这个模型创建一个 ROC 曲线。阅读可用的文档,我确实理解理论上的 ROC 曲线是什么。我只是不知道如何为特定模型创建一个。
从维基百科页面,我在下面用粗斜体标记的第一句话的最后一部分引起了我的困惑:“在统计学中,接受者操作特征 (ROC) 或 ROC 曲线是一个图形图,说明二元分类器系统的性能作为其区分阈值是变化的。” 整篇文章中有更多关于阈值的内容,但这仍然让我对二元分类问题感到困惑。什么是阈值以及如何改变它?
此外,在关于 ROC 曲线的MLBase 文档中,它说“根据给定的分数和阈值计算 ROC 实例或 ROC 曲线(ROC 实例的向量)。” 但实际上并没有在其他任何地方提到这个阈值。
下面给出了我的项目的示例代码。基本上,我想为随机森林创建一个 ROC 曲线,但我不确定如何或者它是否合适。
using DecisionTree
using RDatasets
using MLBase
quakes_data = dataset("datasets", "quakes");
# Add in a binary column as feature column for classification
quakes_data[:MagGT5] = convert(Array{Int32,1}, quakes_data[:Mag] .> 5.0)
# Getting features and labels where label = …Run Code Online (Sandbox Code Playgroud) 我正在尝试计算我构建的硬投票分类器的 roc_auc 。我用可重现的示例来展示代码。现在我想计算 roc_auc 分数并绘制 ROC 曲线,但不幸的是我收到以下错误:当 vote='hard' 时,predict_proba 不可用
# Voting Ensemble for Classification
import pandas
from sklearn import datasets
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.ensemble import VotingClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.naive_bayes import MultinomialNB
from sklearn.cross_validation import StratifiedShuffleSplit
from sklearn.model_selection import cross_val_predict
from sklearn.model_selection import cross_val_score
from sklearn.metrics import make_scorer,confusion_matrix, f1_score, precision_score, recall_score, cohen_kappa_score,accuracy_score,roc_curve
import numpy as np
np.random.seed(42)
iris = datasets.load_iris()
X = iris.data[:, …Run Code Online (Sandbox Code Playgroud) from sklearn.model_selection
import GridSearchCV
params = {
'decisiontreeclassifier__max_depth': [1, 2],
'pipeline-1__clf__C': [0.001, 0.1, 100.0]
}
grid = GridSearchCV(estimator = mv_clf,
param_grid = params,
cv = 10,
scoring = 'roc_auc')
grid.fit(X_train, y_train)
for params, mean_score, scores in grid.grid_scores_:
print("%0.3f+/-%0.2f %r" %
(mean_score, scores.std() / 2, params))
#AttributeError: 'GridSearchCV' object has no attribute 'grid_scores_'
Run Code Online (Sandbox Code Playgroud)
尝试替换grid.grid_scores_为grid.cv_results_
目标是打印不同的超参数值组合和通过 10 倍交叉验证计算的平均 ROC AUC 分数
from sklearn.model_selection
import GridSearchCV
params = {
'decisiontreeclassifier__max_depth': [1, 2],
'pipeline-1__clf__C': [0.001, 0.1, 100.0]
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试按照 sklearn 文档中提供的示例绘制具有交叉验证的接收器操作特征 (ROC) 曲线。但是,以下导入ImportError在python2和中都给出了, python3。
from sklearn.metrics import plot_roc_curve
Run Code Online (Sandbox Code Playgroud)
错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name plot_roc_curve
Run Code Online (Sandbox Code Playgroud)
python-2.7 sklearn版本: 0.20.2.
python-3.6 sklearn版本: 0.21.3.
我发现以下导入工作正常,但与plot_roc_curve.
from sklearn.metrics import roc_curve
Run Code Online (Sandbox Code Playgroud)
被plot_roc_curve弃用?有人可以尝试代码并让我知道 sklearn 版本是否有效吗?
这段代码可以画出一条带有置信区间的roc曲线:
ciobj <- ci.se(obj, specificities=seq(0, 1, l=25))
dat.ci <- data.frame(x = as.numeric(rownames(ciobj)),
lower = ciobj[, 1],
upper = ciobj[, 3])
ggroc(obj) + theme_minimal() + geom_abline(slope=1, intercept = 1, linetype = "dashed", alpha=0.7, color = "grey") + coord_equal() +
geom_ribbon(data = dat.ci, aes(x = x, ymin = lower, ymax = upper), fill = "steelblue", alpha= 0.2) + ggtitle(capture.output(obj$ci))
Run Code Online (Sandbox Code Playgroud)
这段代码可以一起绘制多条roc曲线
roc.list <- roc(outcome ~ s100b + ndka + wfns, data = aSAH)
g.list <- ggroc(roc.list)
g.list
Run Code Online (Sandbox Code Playgroud)
但我无法将它们组合在一起:
ggroc(roc.list) + theme_minimal() + geom_abline(slope=1, …Run Code Online (Sandbox Code Playgroud) 我正在尝试确定roc_auc_score验证集上的拟合模型。
我看到有关函数输入的一些相互矛盾的信息。
文档说:
“y_score 形状为 (n_samples,) 或 (n_samples, n_classes) 的类似数组目标分数。在二元和多标签情况下,这些可以是概率估计或非阈值决策值(由某些分类器上的 Decision_function 返回)。在多类情况下,这些必须是总和为 1 的概率估计。二元情况需要一个形状 (n_samples,),并且分数必须是具有更大标签的类的分数。多类和多标签情况需要一个形状 (n_samples) , n_classes)。在多类情况下,类分数的顺序必须对应于标签的顺序(如果提供),否则对应于 y_true 中标签的数字或字典顺序。
不确定这到底需要什么:1)针对测试集中实际 y 值的预测概率或 2)针对测试集中实际 y 值的类预测
我一直在搜索,在二元分类情况(我的兴趣)中,有些人使用预测概率,而另一些人使用实际预测(0 或 1)。换句话说:
适配型号:
model.fit(X_train, y_train)
Run Code Online (Sandbox Code Playgroud)
使用以下任一方法:
y_preds = model.predict(X_test)
Run Code Online (Sandbox Code Playgroud)
或者:
y_probas = model.predict_proba(X_test)
Run Code Online (Sandbox Code Playgroud)
我发现:
roc_auc_score(y_test, y_preds)
Run Code Online (Sandbox Code Playgroud)
和:
roc_auc_score(y_test, y_probas[:,1]) # probabilites for the 1 class
Run Code Online (Sandbox Code Playgroud)
产生截然不同的结果。
哪一个是正确的?
我还发现,要实际绘制 ROC 曲线,我需要使用概率。
任何指导表示赞赏。
我有一个二进制分类器,如果输入X的预测值低于某个阈值(例如T),则将输入X分类为零,否则将其分类.
我有每个输入的所有预测值和实际值.所以我可以同时预测输入的类和实际类.
现在我想用MATLAB获得这个分类器的ROC曲线.我该怎么办?
我有以下代码:
from sklearn.metrics import roc_curve, auc
actual = [1,1,1,0,0,1]
prediction_scores = [0.9,0.9,0.9,0.1,0.1,0.1]
false_positive_rate, true_positive_rate, thresholds = roc_curve(actual, prediction_scores, pos_label=1)
roc_auc = auc(false_positive_rate, true_positive_rate)
roc_auc
# 0.875
Run Code Online (Sandbox Code Playgroud)
在该示例中,解释prediction_scores是直截了当的,即得分越高,预测越自信.
现在我有另一组预测预测分数.它是非小数的,而解释则相反.意味着 分数越低,预测就越有信心.
prediction_scores_v2 = [10.3,10.3,10.2,10.5,2000.34,2000.34]
# so this is equivalent
Run Code Online (Sandbox Code Playgroud)
我的问题是:我如何扩展它,prediction_scores_v2以便它像第一个那样给出类似的AUC分数?
换一种方式,Scikit的ROC_CURVE要求y_score是积极类的概率估计.如果y_score我有错误等级的概率估计,我 怎么能对待这个值呢?