python - knn图像分类,准确率差
问题描述
我有一个用于图像分类的 knn 算法。在 trainImages 我有训练图像,在 trainLabels 他们的标签,validationImages 和 validationLabels 用于测试
import imageio
import glob
import numpy as np
import os
import csv
trainImages = []
for imagePath in glob.glob('C:/Users/razva/*.png'):
image = imageio.imread(imagePath)
trainImages.append(image)
trainImages = np.array(trainImages)
trainImages = trainImages[:, 0]
f = open('C:/Users/razva/train.txt')
trainLabels = f.readlines()
for i in range(len(trainLabels)):
trainLabels[i] = int(trainLabels[i][11])
trainLabels = np.array(trainLabels)
validationImages = []
for imagePath in glob.glob('C:/Users/razva/*.png'):
image = imageio.imread(imagePath)
validationImages.append(image)
validationImages = np.array(validationImages)
f = open('C:/Users/razva/validation.txt')
validationLabels = f.readlines()
for i in range(len(validationLabels)):
validationLabels[i] = int(validationLabels[i][11])
validationLabels = np.array(validationLabels)
validationImages = validationImages[:, 0]
class ImageIdentifier:
def __init__(self, trainImages, trainLabels):
self.trainImages = trainImages
self.trainLabels = trainLabels
def classify(self, testImage, bins = 5):
distances = np.sum(np.abs(trainImages - testImage), axis = -1)
index = np.argsort(distances)
neighbors = self.trainLabels[index[:bins]]
x = np.bincount(neighbors)
return np.argmax(x)
p = ImageIdentifier(trainImages, trainLabels)
with open('output.csv', 'w') as file:
writer = csv.writer(file)
writer.writerow(['id', 'label'])
nr = 0
for i in range(len(validationLabels)):
writer.writerow([i, p.classify(validationImages[i])])
if validationLabels[i] == p.classify(validationImages[i]):
nr += 1
print(nr / 5000)
我只有17%。我做错了什么?我试图标准化训练数据,但准确性并没有提高。
解决方案
KNN 没有详细说明特定类的属性。它只是发现(比方说)每个像素值的差异,而不是特征。KNN 在将列作为属性的数据(表格数据)上效果更好,其中每个属性都定义了一个特定的特征。但在图像情况下,每个像素值都没有定义特定的特征。就像人的鼻子会位于不同图像中的不同像素位置。您应该使用深度学习来获得更好的结果(特别是 CNN)。
我很抱歉我的英语不好。我希望我已经传达了这个信息。
快乐学习!
推荐阅读
- r - 绘制大型邻接矩阵(不是图)的最有效方法是什么?
- python - 在Python中查找所有满足子字典参数的字典
- java - toString() 方法,String.format() 方法。如何调整字符串线
- python - 如何导航到主页?- 蟒蛇django
- java - 通过 ADB 导入 .VCF 文件
- vue.js - 无法访问已安装的道具
- selenium-webdriver - 如何将 Codeception 集成到本地代码中?
- python - 如何通过 Python 脚本将列添加到 Athena 存在表中的特定位置?
- python - 填充字典时出现 KeyError
- forms - 网站定制 联系我们 表单定制