机器学习实战之基于svm的手写汉字识别代码

机器学习实战之基于svm的手写汉字识别代码

首先介绍一下我们用到的数据,我们有3000张关于10个汉字图片,每个字约300张。图片下载地址在下面。

具体过程

1、读取图像数据,统一尺寸为14*14,转化3通道的RGB图片为一通道的灰度图,并将8位256色的图片转化为4位16色的图片,再将二维14*14数组拉伸为一维196的。读取全部图片和标签放入数组中,打乱数组。
2、划分数据集,5/6为测试集,1/6为测试集。
3、构建模型,kernel参数选’rbf’,c取1,gamma取0.001,传入数据训练,查看模型效果。
4、保存模型。

以上参数都是我经过测试的最佳参数,像为什么尺寸取14*14,为什么要把255色转为16色,模型的参数选择等等。
最终结果为:训练数据上的准确率:0.9975855130784709
测试数据上的准确率:0.9235412474849095

下面是数据下载地址,以及完整代码。
链接:https://pan.baidu.com/s/1tYtqAYpOWM0GZN4iWvuNBw
提取码:59hd

# 导入模块
import numpy as np
import glob
from PIL import Image
import random
from sklearn.externals import joblib
from sklearn.svm import SVC

# 读取数据
path_ = 'E:\\中文字符识别\\'
classes = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
all = []
for index, name in enumerate(classes):
    path = path_ + name + '\\'
    path_all = glob.glob(path + '*.png')
    for img_name in path_all:
        print(img_name, index)
        img = Image.open(img_name)
        img = img.convert('L')
        img = img.resize((14, 14))
        img = img.point(lambda i: (255-i)//16)
        data_i = [np.array(img).flatten().tolist(), index]
        all.append(data_i)
        
# 打乱数据
random.shuffle(all)

# 获取X,Y
all = np.array(all)
img = all[:, 0]
label = all[:, 1]
img = img.tolist()
label = label.tolist()
print(img)
print(label)
X = img
Y = label

# 数据划分
split_index = 5 * len(Y) // 6
x_train, x_test = X[:split_index], X[split_index:]
y_train, y_test = Y[:split_index], Y[split_index:]
print(type(x_train), type(y_train))
print("训练数据格式:{}".format(np.shape(x_train)))
print("测试数据格式:{}".format(np.shape(x_test)))

# 构建模型
algo = SVC(kernel='rbf', C=1.0, gamma=0.001)
algo.fit(x_train, y_train)

# 模型效果查看
print("训练数据上的效果:{}".format(algo.score(x_train, y_train)))
print("测试数据上的效果:{}".format(algo.score(x_test, y_test)))

# 模型持久化
joblib.dump(algo, './svm_digits.pkl')

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值