使用Sklearn进行机器学习(鸢尾花)时Python代码中的错误

我刚开始学习机器学习的基础知识,就遇到了这个错误。

在机器学习的鸢尾花问题中,我遇到了一个错误,我无法弄清楚为什么会出现这个错误。你能解释一下为什么我会遇到这样的错误吗?

代码

from sklearn.datasets import load_irisfrom sklearn import treeimport numpy as np#加载数据iris= load_iris()#花朵名称或索引的起始位置test_index=[0,50,100]#训练数据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)

错误

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.>>> 

你能解释一下为什么会发生这个数组重塑错误吗?

提前感谢。


回答:

将以下行改为:

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

改为:

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

这样就可以了。根据numpy.delete的文档说明:

axis : int, 可选

指定要删除的子数组所在的轴。如果axis为None,则obj应用于扁平化的数组。

由于你没有指定是要从行还是列中删除索引,numpy会将数组扁平化,这显然是错误的。

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注