【机器学习】报错之DataConversionWarning

今天在做随机森林和决策树在交叉验证下的效果对比时出现了如下报错:

E:\anaconda\lib\site-packages\sklearn\model_selection\_validation.py:593: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().

代码块如下:

#随机森林和决策树在十组交叉验证下的效果对比
clf = DecisionTreeClassifier(random_state=0
                            ,criterion='gini'
                            ,max_depth=8
                            ,splitter='best')
rfc = RandomForestClassifier(random_state=0)
rfc_l = []
clf_l = []
for i in range(10):
    rfc = RandomForestClassifier(n_estimators=25)
    rfc_s = cross_val_score(rfc,X,y,cv=10).mean()
    rfc_l.append(rfc_s)
    clf = DecisionTreeClassifier()
    clf_s = cross_val_score(clf,X,y,cv=10).mean()
    clf_l.append(clf_s)
    
plt.plot(range(1,11),rfc_l,label = "Random Forest")
plt.plot(range(1,11),clf_l,label = "Decision Tree")
plt.legend()
plt.show()

报错的原因就是在需要一维数组时,传递了列向量y。按照提示就是需要将y进行降维。

解决办法:将y换成  y.values.ravel(),

#随机森林和决策树在十组交叉验证下的效果对比
clf = DecisionTreeClassifier(random_state=0
                            ,criterion='gini'
                            ,max_depth=8
                            ,splitter='best')
rfc = RandomForestClassifier(random_state=0)
rfc_l = []
clf_l = []
for i in range(10):
    rfc = RandomForestClassifier(n_estimators=25)
    rfc_s = cross_val_score(rfc,X,y.values.ravel(),cv=10).mean()
    rfc_l.append(rfc_s)
    clf = DecisionTreeClassifier()
    clf_s = cross_val_score(clf,X,y.values.ravel(),cv=10).mean()
    clf_l.append(clf_s)
    
plt.plot(range(1,11),rfc_l,label = "Random Forest")
plt.plot(range(1,11),clf_l,label = "Decision Tree")
plt.legend()
plt.show()

最终结果:

【机器学习】报错之DataConversionWarning_第1张图片

 

你可能感兴趣的:(Python,机器学习)