使用Sklearn的Python代码机器学习(Iris Flower)出错

时间:2018-01-01 10:10:19

标签: python machine-learning scikit-learn

我刚开始学习机器学习的基础知识,我偶然发现了这个错误。

在机器学习的虹膜花问题中,我遇到了一个错误,我无法弄清楚为什么我会得到它。 能否解释一下我为什么会遇到这样的错误。

  

CODE

from sklearn.datasets import load_iris
from sklearn import tree
import numpy as np
#load data
iris= load_iris()

#position of the start of the flower names or indexes
test_index=[0,50,100]

#Training data
train_target = np.delete(iris.target,test_index)
train_data=np.delete(iris.data,test_index)

test_target=iris.target[test_index]
test_data=iris.data[test_index]

clf = tree.DecisionTreeClassifier()
clf=clf.fit(train_data , train_target)

print(test_target)
  

ERROR

Traceback (most recent call last):
  File "MachineLearning2.py", line 29, in <module>
    clf=clf.fit(train_data , train_target)
  File "C:\Anacondas\lib\site-packages\sklearn\tree\tree.py", line 790, in fit
    X_idx_sorted=X_idx_sorted)
  File "C:\Anacondas\lib\site-packages\sklearn\tree\tree.py", line 116, in fit
    X = check_array(X, dtype=DTYPE, accept_sparse="csc")
  File "C:\Anacondas\lib\site-packages\sklearn\utils\validation.py", line 441, in check_array
    "if it contains a single sample.".format(array))
ValueError: Expected 2D array, got 1D array instead:
array=[ 3.5         1.39999998  0.2         4.9000001   3.          1.39999998
  0.2         4.69999981  3.20000005  1.29999995  0.2         4.5999999
  3.0999999   1.5         0.2         5.          3.5999999   1.39999998
  0.2         5.4000001   3.9000001   1.70000005  0.40000001  4.5999999
  3.4000001   1.39999998  0.30000001  5.          3.4000001   1.5         0.2
  4.4000001   2.9000001   1.39999998  0.2         4.9000001   3.0999999
  1.5         0.1         5.4000001   3.70000005  1.5         0.2
  4.80000019  3.4000001   1.60000002  0.2         4.80000019  3.          0.1
  4.30000019  3.          1.10000002  0.1         5.80000019  4.
  1.20000005  0.2         5.69999981  4.4000001   1.5         0.40000001
  5.4000001   3.9000001   1.29999995  0.40000001  5.0999999   3.5
  1.39999998  0.30000001  5.69999981  3.79999995  1.70000005  0.30000001
  5.0999999   3.79999995  1.5         0.30000001  5.4000001   3.4000001
  1.70000005  0.2         5.0999999   3.70000005  1.5         0.40000001
  4.5999999   3.5999999   1.          0.2         5.0999999   3.29999995
  1.70000005  0.5         4.80000019  3.4000001   1.89999998  0.2         3.
  1.60000002  0.2         5.          3.4000001   1.60000002  0.40000001
  5.19999981  3.5         1.5         0.2         5.19999981  3.4000001
  1.39999998  0.2         4.69999981  3.20000005  1.60000002  0.2
  4.80000019  3.0999999   1.60000002  0.2         5.4000001   3.4000001
  1.5         0.40000001  5.19999981  4.0999999   1.5         0.1         5.5
  4.19999981  1.39999998  0.2         4.9000001   3.0999999   1.5         0.1
  5.          3.20000005  1.20000005  0.2         5.5         3.5
  1.29999995  0.2         4.9000001   3.0999999   1.5         0.1
  4.4000001   3.          1.29999995  0.2         5.0999999   3.4000001
  1.5         0.2         5.          3.5         1.29999995  0.30000001
  4.5         2.29999995  1.29999995  0.30000001  4.4000001   3.20000005
  1.29999995  0.2         5.          3.5         1.60000002  0.60000002
  5.0999999   3.79999995  1.89999998  0.40000001  4.80000019  3.
  1.39999998  0.30000001  5.0999999   3.79999995  1.60000002  0.2
  4.5999999   3.20000005  1.39999998  0.2         5.30000019  3.70000005
  1.5         0.2         5.          3.29999995  1.39999998  0.2         7.
  3.20000005  4.69999981  1.39999998  6.4000001   3.20000005  4.5         1.5
  6.9000001   3.0999999   4.9000001   1.5         5.5         2.29999995
  4.          1.29999995  6.5         2.79999995  4.5999999   1.5
  5.69999981  2.79999995  4.5         1.29999995  6.30000019  3.29999995
  4.69999981  1.60000002  4.9000001   2.4000001   3.29999995  1.          6.5999999
  2.9000001   4.5999999   1.29999995  5.19999981  2.70000005  3.9000001
  1.39999998  5.          2.          3.5         1.          5.9000001   3.
  4.19999981  1.5         6.          2.20000005  4.          1.          6.0999999
  2.9000001   4.69999981  1.39999998  5.5999999   2.9000001   3.5999999
  1.29999995  6.69999981  3.0999999   4.4000001   1.39999998  5.5999999   3.
  4.5         1.5         5.80000019  2.70000005  4.0999999   1.
  6.19999981  2.20000005  4.5         1.5         5.5999999   2.5
  3.9000001   1.10000002  5.9000001   3.20000005  4.80000019  1.79999995
  6.0999999   2.79999995  4.          1.29999995  6.30000019  2.5
  4.9000001   1.5         6.0999999   2.79999995  4.69999981  1.20000005
  6.4000001   2.9000001   4.30000019  1.29999995  6.5999999   3.          4.4000001
  1.39999998  6.80000019  2.79999995  4.80000019  1.39999998  6.69999981
  3.          5.          1.70000005  6.          2.9000001   4.5         1.5
  5.69999981  2.5999999   3.5         1.          5.5         2.4000001
  3.79999995  1.10000002  5.5         2.4000001   3.70000005  1.
  5.80000019  2.70000005  3.9000001   1.20000005  6.          2.70000005
  5.0999999   1.60000002  5.4000001   3.          4.5         1.5         6.
  3.4000001   4.5         1.60000002  6.69999981  3.0999999   4.69999981
  1.5         6.30000019  2.29999995  4.4000001   1.29999995  5.5999999   3.
  4.0999999   1.29999995  5.5         2.5         4.          1.29999995
  5.5         2.5999999   4.4000001   1.20000005  6.0999999   3.          4.5999999
  1.39999998  5.80000019  2.5999999   4.          1.20000005  5.
  2.29999995  3.29999995  1.          5.5999999   2.70000005  4.19999981
  1.29999995  5.69999981  3.          4.19999981  1.20000005  5.69999981
  2.9000001   4.19999981  1.29999995  6.19999981  2.9000001   4.30000019
  1.29999995  5.0999999   2.5         3.          1.10000002  5.69999981
  2.79999995  4.0999999   1.29999995  6.30000019  3.29999995  6.          2.5
  5.80000019  2.70000005  5.0999999   1.89999998  7.0999999   3.          5.9000001
  2.0999999   6.30000019  2.9000001   5.5999999   1.79999995  6.5         3.
  5.80000019  2.20000005  7.5999999   3.          6.5999999   2.0999999
  4.9000001   2.5         4.5         1.70000005  7.30000019  2.9000001
  6.30000019  1.79999995  6.69999981  2.5         5.80000019  1.79999995
  7.19999981  3.5999999   6.0999999   2.5         6.5         3.20000005
  5.0999999   2.          6.4000001   2.70000005  5.30000019  1.89999998
  6.80000019  3.          5.5         2.0999999   5.69999981  2.5         5.
  2.          5.80000019  2.79999995  5.0999999   2.4000001   6.4000001
  3.20000005  5.30000019  2.29999995  6.5         3.          5.5
  1.79999995  7.69999981  3.79999995  6.69999981  2.20000005  7.69999981
  2.5999999   6.9000001   2.29999995  6.          2.20000005  5.          1.5
  6.9000001   3.20000005  5.69999981  2.29999995  5.5999999   2.79999995
  4.9000001   2.          7.69999981  2.79999995  6.69999981  2.
  6.30000019  2.70000005  4.9000001   1.79999995  6.69999981  3.29999995
  5.69999981  2.0999999   7.19999981  3.20000005  6.          1.79999995
  6.19999981  2.79999995  4.80000019  1.79999995  6.0999999   3.          4.9000001
  1.79999995  6.4000001   2.79999995  5.5999999   2.0999999   7.19999981
  3.          5.80000019  1.60000002  7.4000001   2.79999995  6.0999999
  1.89999998  7.9000001   3.79999995  6.4000001   2.          6.4000001
  2.79999995  5.5999999   2.20000005  6.30000019  2.79999995  5.0999999
  1.5         6.0999999   2.5999999   5.5999999   1.39999998  7.69999981
  3.          6.0999999   2.29999995  6.30000019  3.4000001   5.5999999
  2.4000001   6.4000001   3.0999999   5.5         1.79999995  6.          3.
  4.80000019  1.79999995  6.9000001   3.0999999   5.4000001   2.0999999
  6.69999981  3.0999999   5.5999999   2.4000001   6.9000001   3.0999999
  5.0999999   2.29999995  5.80000019  2.70000005  5.0999999   1.89999998
  6.80000019  3.20000005  5.9000001   2.29999995  6.69999981  3.29999995
  5.69999981  2.5         6.69999981  3.          5.19999981  2.29999995
  6.30000019  2.5         5.          1.89999998  6.5         3.
  5.19999981  2.          6.19999981  3.4000001   5.4000001   2.29999995
  5.9000001   3.          5.0999999   1.79999995].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
>>> 

你能解释一下为什么会发生这种阵列错误的重塑吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

更改以下行:

train_data=np.delete(iris.data,test_index)

为:

train_data=np.delete(iris.data,test_index, axis=0)

你会很高兴。根据{{​​3}}的文档:

  

axis:int,optional

The axis along which to delete the subarray defined by obj. 

If axis is None, obj is applied to the flattened array.

由于您没有提供要删除行或列中索引的内容,因此numpy会使数组变平,这是错误的。

通过使用axis = 0,我们指定要删除行。

答案 1 :(得分:0)

错误信息是这个

ValueError: Expected 2D array, got 1D array instead

以下似乎是图书馆产生的建议。试着告诉你。 reshape实际上是一种非常有用的技术,用于规范机器学习的输入大小。记录您为培训和测试输入的形状将是一个很好的做法。

Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.