我想在决策树模型中绘制火车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()
答案 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