我刚开始学习机器学习的基础知识,就遇到了这个错误。
在机器学习的鸢尾花问题中,我遇到了一个错误,我无法弄清楚为什么会出现这个错误。你能解释一下为什么我会遇到这样的错误吗?
代码
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,我们指定要删除行。