【发布时间】:2026-01-17 02:35:01
【问题描述】:
我的 KNN 水果分类有问题。我有一个新鲜和烂橙子的数据集,训练数据有 1000 个新鲜和 1000 个烂橙子图像,我的测试数据有 300 个新鲜和烂橙子。现在,当我尝试在我的 python 代码上实现 KNN 时,我得到了错误。
ValueError: X 有 972 个特征,但 KNeighborsClassifier 期望 6804 个特征作为输入。
这是我的代码:
对于训练数据:
training_fresh = []
for entry in glob.glob("path"):
img=np.array(mpimg.imread(entry))
resized_img = cv2.resize(img,(64,128))
fd = hog(resized_img,channel_axis=2)
training_fresh.append(fd)
training_rotten = []
for entry in glob.glob("path"):
img=np.array(mpimg.imread(entry))
resized_img = cv2.resize(img,(64,128))
fd = hog(resized_img,channel_axis=2)
training_rotten.append(fd)
train_data = training_rotten + training_fresh
对于标签:
train_label_list = []
for i in range(len(train_data)):
if i < 1000:
train_label_list.append(0)
else:
train_label_list.append(1)
print(train_label_list)
print(len(train_label_list))
标签测试数据:
test_fresh = []
for entry in glob.glob("PATH"):
img = np.array(mpimg.imread(entry))
resized_img = cv2.resize(img,(64,32))
fd = hog(resized_img, channel_axis=2)
test_dict = {'data':fd, 'label':1}
test_fresh.append(test_dict)
test_rotten = []
for entry in glob.glob("PATH"):
img = np.array(mpimg.imread(entry))
resized_img = cv2.resize(img,(64,32))
fd = hog(resized_img, channel_axis=2)
test_dict = {'data':fd, 'label':0}
test_rotten.append(test_dict)
test_data = test_rotten + test_fresh
为了从标签中分离数据:
test_features = []
test_labels = []
for i in test_data:
test_labels.append(i['label'])
test_features.append(i['data'])
一切都很顺利。但是,在我尝试运行这个 KNN 实现后,我得到了错误:
x_axis_k_points = []
#LIST OF MATRICES
f1 = []
accuracy = []
confusion_matrix = []
for k in range(7):
#KNN CLASSIFIER
knn = KNeighborsClassifier(n_neighbors=k+1)
knn.fit(train_data, train_label_list)
#KNN CLASSIFIER PREDICTION
pred_labels = knn.predict(test_features)
#ACCURACY
acs = knn.score(test_features, test_labels)
accuracy.append(acs)
#CONFUSION MATRIX
confusion_matrix.append(metrics.confusion_matrix(test_labels, pred_labels))
#F1 SCORE
f1.append(metrics.f1_score(test_labels, pred_labels, pos_label=1))
x_axis_k_points.append(k+1)
请帮助我。因为这个项目的截止日期是明天。任何帮助都可以。我只是不明白为什么我有错误。我尝试重新运行我的代码并修复我的数据集,但问题仍然存在。非常感谢。
【问题讨论】:
-
能不能同时加
train_data.shape和train_label_list.shape? -
您应该使用 DataFrames / Matrices ,而不是简单的列表。列表是一维的,因此不适用于 X 矩阵和 y 向量。
-
@sotmot 不幸的是,我什至无法运行 train_data.shape,因为它是一个返回错误的列表:AttributeError: 'list' object has no attribute 'shape'。
-
你建议在我的代码中编辑什么@Malo
-
您可以尝试 np.array(data) 将其转换为数组,然后您可以使用 reshape(..) 使其成为您需要的形状
标签: python jupyter-notebook classification jupyter knn