解决如下出错:DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and willraise ValueError in 0.19.

背景:在Spyder中写几行脚本,目的是应用sklearn自带的svm(支持向量机)算法,来对其自带的digits(手写体数字)数据集进行分类,过程包括训练阶段和预测阶段。将手写体数字数据的特征数据data、标签数据target的倒数第一个样本点作为测试样本点,其余作为训练样本。

问题描述:出现DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and willraise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample. DeprecationWarning)

问题代码如下:

修正方式:

第一种:第17行改为a = clf.predict([digits.data[-1]]),即在待测样本数据上多套一个'[ ]'(方括号);

 第二种:对17行中的待测样本数据作reshape((1,-1)).

 

总结:

我们可以来看一下一开始的错误出在哪里,用下面代码打印出三段代码中的clf.predict(*)中的输入数据:

得到如下,三者的数据内容都一致,都含有64个数字,但是其形式不一样。

 再由下述可以看出第一种测试数据的形式为1维、大小64的numpy.ndarray数据类型,第二种是一个list(列表,容器),里面装了一个2维、大小1x64的numpy.ndarray的数据,第三种是2维、大小1x64的numpy.ndarray数据类型。由此可以总结出,传给clf.predict()的数据应当为2维数组,因为显然每一个样本都有64个特征,应当将其作为一个整体传入clf.predict(),第一种测试数据传入的顶多就一个数字0.(第一个元素),显然不能预测出结果来(最后一句话是个人的理解,可能不对)。

 

 参考网址:

1.https://www.cnblogs.com/okokok/p/6004871.html

2.https://stackoverflow.com/questions/43475439/python-deprecationwarning-passing-1d-arrays-as-data-is-deprecated-in-0-17-and-w

学习是熵减的过程,终身学习应当是每个人去做到的。
原文地址:https://www.cnblogs.com/alesvel/p/9880512.html