我想将AUC wrt绘制到决策树的深度,但是min_samples_split值更改

时间:2019-06-17 14:25:19

标签: python matplotlib data-science decision-tree

我想在决策树模型中绘制火车auc和cv auc w.r.t的深度变化,但min_samples_split值却如代码所示变化。 如果我固定min_samples_split = 5或10的值。然后绘制曲线,但是如果我为min_samples_split = [5,10]取2个值,则我得到值错误:x和y必须具有相同的第一维,但形状为(5,)和(10,)。我了解错误,但是如何绘制错误。

train_auc = []
cv_auc = []


depth =  [1, 5, 10, 50, 100]
k = [5, 10]

for i in depth :
    for p in k :
        clf = DecisionTreeClassifier(criterion='gini', max_depth= i , 
        min_samples_split= p , class_weight = 'balanced' )
        clf.fit(X_train, y_train)


        y_train_pred = clf.predict(X_train)    
        y_cv_pred = clf.predict(X_cv)


        train_auc.append(roc_auc_score(y_train,y_train_pred))
        cv_auc.append(roc_auc_score(y_cv, y_cv_pred))



plt.plot(depth , train_auc, label='Train AUC')
plt.plot(depth , cv_auc,  label='CV AUC')

plt.scatter(depth , train_auc,  label='Train AUC points')
plt.scatter(depth , cv_auc ,  label='CV AUC points')


plt.legend()
plt.xlabel("depth")
plt.ylabel("AUC")
plt.title("ERROR PLOTS")
plt.grid()
plt.show()

1 个答案:

答案 0 :(得分:0)

您的代码不可运行,但是从代码的逻辑来看,一种解决方案似乎是将绘图行移到for循环内,并使用索引从您的主列表中绘制相应的预测值。

尝试执行以下操作。

count = 0
for i in depth :
    for p in k :
        clf = DecisionTreeClassifier(criterion='gini', max_depth= i , 
        min_samples_split= p , class_weight = 'balanced' )
        clf.fit(X_train, y_train)

        y_train_pred = clf.predict(X_train)    
        y_cv_pred = clf.predict(X_cv)

        train_auc.append(roc_auc_score(y_train,y_train_pred))
        cv_auc.append(roc_auc_score(y_cv, y_cv_pred))
        plt.plot(depth , train_auc[count], label='Train AUC')
        plt.plot(depth , cv_auc[count],  label='CV AUC')
        plt.scatter(depth , train_auc[count],  label='Train AUC points')
        plt.scatter(depth , cv_auc[count],  label='CV AUC points')

plt.legend()
# rest of the code