Я использую аромат ScikitLearn пакета DecisionTree.jl для создания случайной модели леса для задачи двоичной классификации одного из наборов данных RDatasets (см. Нижнюю часть главной страницы DecisionTree.jl для что я имею в виду под ароматом ScikitLearn). Я также использую пакет MLBase для оценки модели.Случайные леса и кривые ROC в Julia
Я построил случайную модель леса моих данных и хотел бы создать кривую ROC для этой модели. Читая документацию, я понимаю, что кривая ROC теоретически. Я просто не могу понять, как создать его для конкретной модели.
В последней части первого предложения, выделенной жирным курсивом ниже, находится тот, который вызывает мое замешательство: «В статистике рабочая характеристика приемника (ROC) или кривая ROC является графическим график, который иллюстрирует работу системы двоичного классификатора , поскольку порог его дискриминации варьируется. " На протяжении всей статьи на пороговом значении больше, но это все еще путает меня по проблемам двоичной классификации. Каково пороговое значение и как его изменить?
Также в сообщении MLBase documentation on ROC Curves говорится: «Вычислить экземпляр 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 = 1 is mag > 1 and label = 2 is mag <= 5
features = convert(Array, quakes_data[:, [1:3;5]]);
labels = convert(Array, quakes_data[:, 6]);
labels[labels.==0] = 2
# Create a random forest model with the tuning parameters I want
r_f_model = RandomForestClassifier(nsubfeatures = 3, ntrees = 50, partialsampling=0.7, maxdepth = 4)
# Train the model in-place on the dataset (there isn't a fit function without the in-place functionality)
DecisionTree.fit!(r_f_model, features, labels)
# Apply the trained model to the test features data set (here I haven't partitioned into training and test)
r_f_prediction = convert(Array{Int64,1}, DecisionTree.predict(r_f_model, features))
# Applying the model to the training set and looking at model stats
TrainingROC = roc(labels, r_f_prediction) #getting the stats around the model applied to the train set
# p::T # positive in ground-truth
# n::T # negative in ground-truth
# tp::T # correct positive prediction
# tn::T # correct negative prediction
# fp::T # (incorrect) positive prediction when ground-truth is negative
# fn::T # (incorrect) negative prediction when ground-truth is positive
Я также прочитал this вопрос и не находил полезным на самом деле.
Спасибо, я прочитал много текстов, и они не дали мне ясного понимания, как вы только что. – lara
Спасибо. Что касается вашего кода, последняя строка 'roc (labels ...)' дает единственную точку кривой ROC для конкретных предсказаний DecisionTree 'r_f_model'. Этот алгоритм DecisionTree является примером классификатора, который не выводит действительное число, а представляет собой фактическое предсказание. Возможно, некоторые параметры в функции подгонки могут генерировать больше точек для определения кривой ROC. –