前提・実現したいこと
予測したモデルからROC曲線を作成したいが1点しか生成されず、直線的なROCになってしまう。
データ数:(va_y:89, va_pred:89)
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
エラーメッセージ!
該当のソースコード
python
1import numpy as np 2import pandas as pd 3import seaborn as sns 4import matplotlib.pyplot as plt 5from xgboost import XGBClassifier 6import xgboost as xgb 7from sklearn.preprocessing import LabelEncoder 8from sklearn.preprocessing import MinMaxScaler 9from sklearn.model_selection import KFold 10from sklearn.metrics import mean_squared_error 11from sklearn.metrics import r2_score, log_loss, accuracy_score,f1_score, recall_score, precision_score,confusion_matrix 12import itertools 13 14test = pd.read_csv("test.csv") 15train = pd.read_csv("train.csv") 16 17train_x = train.drop(["disease","id"], axis=1) 18train_x 19 20train_y = train["disease"] 21train_y 22 23test = test.drop(["id"], axis=1) 24 25train_x["Gender"] = train_x["Gender"].replace({"Male":1,"Female":0}) 26test["Gender"] = test["Gender"].replace({"Male":1,"Female":0}) 27 28scores_logloss = [] 29scores_accuracy = [] 30 31params = { 32 "booster": "gbtree", 33 "objective":"binary:logistic'", 34 "eta":0.1, 35 "gamma":0, 36 "alpha":0.1, 37 "lambda":3.0, 38 "min_child_weight":0, 39 "max_depth":7, 40 "subsample":0.8, 41 "colsample_bytree":0.8, 42 "silent":1, 43 "random_state":71} 44 45model = XGBClassifier(n_estimators = 170, ramdom_state=71, 46 max_depth = 7, 47 min_child_weight = 0) 48 49model.fit(tr_x,tr_y) 50 51va_pred = model.predict(va_x) 52 53logloss = log_loss(va_y, va_pred) 54accuracy = accuracy_score(va_y, va_pred > 0.5) 55f1 = f1_score(va_y, va_pred) 56recall = recall_score(va_y,va_pred) 57precision_train = precision_score(va_y, va_pred) 58 59scores_logloss.append(logloss) 60scores_accuracy.append(accuracy) 61 62logloss = np.mean(scores_logloss) 63accuracy = np.mean(scores_accuracy) 64 65from sklearn.metrics import roc_curve, auc 66import matplotlib.pyplot as plt 67 68roc = roc_curve(va_y, va_pred,drop_intermediate=False) 69auc = auc(fpr, tpr) 70fpr, tpr, thresholds = roc_curve(va_y, va_pred,drop_intermediate=False) 71 72plt.plot(fpr, tpr, label='ROC curve (area = %.2f)'%auc) 73plt.plot(np.linspace(1, 0, len(fpr)), np.linspace(1, 0, len(fpr)), label='Random ROC curve (area = %.2f)'%0.5, linestyle = '--', color = 'gray') 74 75plt.legend() 76plt.title('ROC curve') 77plt.xlabel('False Positive Rate') 78plt.ylabel('True Positive Rate') 79plt.grid(True) 80plt.show() 81 82
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー