我是Scikit学习的新手,我正在尝试训练分类器以预测哪种类型的汽车很可能给定特定的输入:
我的数据看起来像这样:
18.0 8 307.0 130.0 3504. 12.0 70 1雪佛兰
15.0 8 350.0 165.0 3693. 11.5 70 1别克
18.0 8 318.0 150.0 3436. 11.0 70 1 Plymouth
17.0 8 302.0 140.0 3449. 10.5 70 1福特Torino
15.0 8 429.0 198.0 4341. 10.0 70 1福特Galaxie 500
14.0 8 454.0 220.0 4354. 9.0 70 1雪佛兰Impala
14.0 8 440.0 215.0 4312. 8.5 70 1 Plymouth Fury III
,每列数据都是汽车的特定功能:MPG,气缸,马力,加速等
我以数值形式代表汽车:
cars = [0, 1, 2, 3, 3, 0, 2]
其中0 =雪佛兰,1 =别克,等等
这是我的程序代码:
data = np.loadtxt("my_data")
mpg = data[:,0]
cylinders = data[:,1]
displacement = data[:,2]
horsepower = data[:,3]
weight = data[:,4]
acceleration = data[:,5]
modelyear = data[:,6]
origin = data[:,7]
X = [mpg, cylinders, displacement, horsepower, weight,
acceleration, acceleration, modelyear, origin]
car_type = [1, 2, 3, 2, 6, 1, 0, 2, 5, 4, 2, 0, 3, 3, 2, 1, 0]
clf = tree.DecisionTreeClassifier()
clf.fit(X, car_type)
但是当我尝试运行它时,我会得到这个错误:
Traceback (most recent call last):
File "scikitlearn_practice.py", line 21, in <module>
clf.fit(X, car_type)
File "/Library/Python/2.7/site-packages/sklearn/tree/tree.py",
line 739, in fit
X_idx_sorted=X_idx_sorted)
File "/Library/Python/2.7/site-packages/sklearn/tree/tree.py", line
240, in fit
"number of samples=%d" % (len(y), n_samples))
ValueError: Number of labels=17 does not match number of samples=8
如何修复此错误,以使标签匹配样品数量?
谢谢
您在x声明上有问题。如文档中所述,x必须具有形状[n_samples,n_features],而在您的代码中,您拥有的是一个形状[n_features,n_samples][8,8,...,8],...,[1,1,...,1]]。
您需要的实际上是一个数组,其中每一行描述一个样本,即[[[18.0,8,307.0,130.0,3504。8.5,70,1]]。这已经是您在数据数组中所拥有的。
使用此信息,您可以重写代码:
X = np.loadtxt("my_data")
car_type = [1, 2, 3, 2, 6, 1, 0, 2, 5, 4, 2, 0, 3, 3, 2, 1, 0]
clf = tree.DecisionTreeClassifier()
clf.fit(X, car_type)
但是,执行此代码仍然会导致错误, Number of labels=17 does not match number of samples=7
这是因为您的标签阵列包含17个标签(适用于17个相应的样品),而您的样品数组仅包含7个样品(即7个由其功能描述的汽车)。
car_type 数组应包含与 x 数组中的样本一样多的标签,因此错误在于您的数据。
我不知道应该是什么 car_types 是什么,但是您的 car> car> car array包含7个样本,并且似乎与您在my_data中拥有的数据相对应,所以也许也许您要做的是:
X = np.loadtxt("my_data")
cars = [0, 1, 2, 3, 3, 0, 2]
clf = tree.DecisionTreeClassifier()
clf.fit(X, cars)
这样做,我能够将模型与您的数据拟合。希望它能有所帮助。