python中无一对多类分类的ROC曲线

2024-04-16 04:19:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个9个不同类的多类分类问题。我正在使用scikit的AdaBoostClassifier类来学习如何在不使用one-vs-all技术的情况下训练我的模型,因为类的数量非常多,而且可能效率低下。在

我已经尝试过使用sci工具包中的技巧,但是我已经从其中学习了很多技巧。在我的方法中,每个事件只得到一个预测,也就是说,如果我有n个类,那么预测的结果就是n个类中的一个值。另一方面,对于one-vs-all方法,预测的结果是一个大小为n的数组,每个类具有某种似然值。在

[1] https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html#sphx-glr-auto-examples-model-selection-plot-roc-py

代码是:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt # Matplotlib plotting library for basic visualisation
%matplotlib inline

from sklearn.model_selection import train_test_split 
from sklearn.ensemble import AdaBoostClassifier
from sklearn.metrics import accuracy_score
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import roc_curve, auc
from sklearn import preprocessing


# Read data
df = pd.read_pickle('data.pkl')

# Create the dependent variable class
# This will substitute each of the n classes from 
# text to number
factor = pd.factorize(df['target_var'])
df.target_var= factor[0]
definitions = factor[1]

X = df.drop('target_var', axis=1)
y = df['target_var]

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 0)

bdt_clf = AdaBoostClassifier(
    DecisionTreeClassifier(max_depth=2),
    n_estimators=250,
    learning_rate=0.3)

bdt_clf.fit(X_train, y_train)

y_pred = bdt_clf.predict(X_test)

#Reverse factorize (converting y_pred from 0s,1s, 2s, etc. to their original values
reversefactor = dict(zip(range(9),definitions))
y_test_rev = np.vectorize(reversefactor.get)(y_test)
y_pred_rev = np.vectorize(reversefactor.get)(y_pred)

我尝试直接使用roc curve函数,并对标签进行二进制处理,但总是收到相同的错误消息。在

^{pr2}$

错误消息是:

ValueError: multilabel-indicator format is not supported

这怎么解决?我错过了一些重要的概念吗?在


Tags: fromtestimporttargetdfmodelvaras
1条回答
网友
1楼 · 发布于 2024-04-16 04:19:27

从二元分类器得到的真阳性和假阳性曲线图形成ROC(接收器工作特性曲线)。在

曲线下的区域表示二元分类器的精度。在

对于多类问题,您可以找到准确性,但如果您的数据倾向于不一致地归入类别,这可能会误导您。适当的抽样可以克服这个问题。在

您使用的AdaBoostClassifier将给您一个score,显示平均精度。在

相关问题 更多 >