修改svm识别手写数字

需要将提供的数据集和测试集用来调试,主要想采用(https://blog.csdn.net/weixin_41738030/article/details/100130638)这位楼主的实现方法,但如果要使用自己的测试集和数据集(都分为了标签和图片,格式是idx1-ubyte和idx3-ubyte),该如何修改?

你试试这个呢


import os
import cv2
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets


def getdata(_dir):
    images= []
    labels = []
    for cls in os.listdir(_dir):
        cls_dir = os.path.join(_dir,cls)  
        for file in os.listdir(cls_dir ):
            img = cv2.imread(os.path.join(cls_dir,file ),-1)
            images.append(img)
            labels.append(int(cls))
    return images,labels


_dir_train=r""
_dir_test=r""
Xtrain,Ytrain = getdata(_dir_train)
Xtest,Ytest= getdata(_dir_test)

images_and_labels=list(zip(Xtrain,Ytrain))
plt.figure(figsize=(8, 6))
for index, (image, label) in enumerate(images_and_labels[:8]):
    plt.subplot(2, 4, index + 1)
    plt.axis('off')
    plt.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')
    plt.title('Digit: %i' % label, fontsize=20);

from sklearn import svm
clf = svm.SVC(gamma=0.001, C=100., probability=True)
clf.fit(Xtrain, Ytrain);

from sklearn.metrics import accuracy_score
Ypred = clf.predict(Xtest);
accuracy_score(Ytest, Ypred)

如果你不会直接读取这两个格式的数据,那么你可以将之转成png和txt文件

你是想用自己的数据集进行训练?

把数据按照类别放入文件夹,比如1的图片放入名字是1的文件夹,2的图片放到名字是2的文件夹....
路径不要有中文,然后把images_and_labels替换成你参考的博客里面的images_and_labels

import cv2
import os

images_and_labels= []
_dir = r""  # 输入图像路径,这个路径里面是1/2/3/4.。。的文件夹
for cls in os.listdir(_dir):
    cls_dir = os.path.join(_dir,cls)  
    for file in os.listdir(cls_dir ):
        img = cv2.imread(os.path.join(cls_dir,file ),-1)
        images_and_labels.append((img,int(cls)))