SunRichSan
@SunRichSan

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

ROC曲線、PR曲線を描くためのプロット数

解決したいこと

ROC曲線、PR曲線を描くあたり、プロットの点の数の妥当性について教えてください。
データは同じでも、モデルによって、そのプロットの点の数が大きく異なることに気が付きました。
データは、「breast_cancer」を使っています(コード参照願います)

RandomForestClassifier()
length_probas_pred=285
length_recall(PR) =42
length_fpr(ROC) =45

LogisticRegression(solver='liblinear')
length_probas_pred=285
length_recall(PR) =206
length_fpr(ROC) =18

DecisionTreeClassifier()
length_probas_pred=285
length_recall(PR) =3
length_fpr(ROC) =3

XGBClassifier()
length_probas_pred=285
length_recall(PR) =198
length_fpr(ROC) =28

こんな感じで、DecisionTreeClassifierは、プロットの点はROC,PRであれ、3つの点しかありません。
roc_curve、precision_recall_curveは、そういうものなのか、或いは、モデルに応じて、何かをしなければならないのかその辺をサジェスチョンしていただきたいのです。
普通に考えたら、3つの点でROC曲線、PR曲線を描いても、信頼性はないと思います。

該当するソースコード

from sklearn import datasets
from sklearn.metrics import precision_recall_curve
from sklearn.metrics import roc_curve  #ROC
from sklearn.model_selection import train_test_split

breast_cancer = datasets.load_breast_cancer()
X, y =  breast_cancer.data, breast_cancer.target
X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.5, random_state=0)

from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()

#from sklearn.linear_model import LogisticRegression
#model = LogisticRegression(solver='liblinear')

#from sklearn.tree import DecisionTreeClassifier
#model =DecisionTreeClassifier()

#from xgboost import XGBClassifier
#model =XGBClassifier()

print(model.fit(X_train, y_train))
probas_pred = model.predict_proba(X_valid)[:, 1]

# tpr,fpr (probas_pred) for ROC
fpr, tpr, thresholdsr = roc_curve(y_true=y_valid, y_score=probas_pred)

# presision,recall (predict_proba) for PR
precision, recall, thresholdsf = precision_recall_curve(y_true=y_valid,probas_pred=probas_pred)

print(f'length_probas_pred={len(probas_pred)}')
print(f'length_recall(PR) ={len(precision)}')
print(f'length_fpr(ROC)   ={len(fpr)}')

このコードは、小生のPCでは、うまく動いています。
Windows10,64bit,python3

自分で試したこと

色んなモデルを試してみました。
どれも、傾向は同じです。入力のprobas_predより、出力の大きさは小さいです。

0

No Answers yet.

Your answer might help someone💌