IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> KNN-Python实现handwriting recognization system -> 正文阅读

[人工智能]KNN-Python实现handwriting recognization system

KNN(k-nearest neighbors)是一种监督学习的分类器,计算样本与所有数据的欧几里得距离,后枚举出k个距离最小的样本labels,从这k个样本中对labels进行投票,从中选择出最多票数的label作为result输出。

参考machine learning in action, 文中利用的数据可以在这本书的资源中找到,也可以去github上直接下载手写数字的image

程序如下:

# 调用需要的第三方库
import numpy as np
import operator
import os
import cv2
# 定义KNN分类器算法
# 函数输入是训练数据,训练labels,unlabeldata,参数k
# 训练数据的数据类型是matrix
# 训练labels的数据类型是vector
# unlabeldata的数据类型是vector
def classfier0(traindata, labels, data, k):
    datasize = traindata.shape[0]
    # 计算欧几里得距离
    diff = np.tile(data, (datasize, 1)) - traindata
    distance = ((diff ** 2).sum(axis=1)) ** 0.5
    # return index of data increasingly order
    sortedDist = distance.argsort()
    classCount = {}
    # 为label进行投票,选举出result
    for i in range(k):
        votedLabel = labels[sortedDist[i]]
        classCount[votedLabel] = classCount.get(votedLabel, 0) + 1
    sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse = True)
    return sortedClassCount[0][0]    

在machine learning in action这本书中,将图像存储成matrix存储在.txt文件中,在书中作者读取.txt文件并存储成vector。

本文将书中的.txt文件读取出来并存储成.jpg的image,通过opencv从image获取用于train的vector

# 将.txt存储成.jpg
trainingDataPath = "./digits/trainingDigits"
testingDataPath = "./digits/testDigits"
trainingDir = sorted(os.listdir(trainingDataPath))
testingDir = sorted(os.listdir(testingDataPath))
trainingImgDir = "./images/trainingData"
testingImgDir = "./images/testingData"
# 定义函数将.txt存储成.jpg
# 函数输入是.txt路径,.txt文件名,.jpg文件路径
def txt2matrix(path, txtDir, saveDir):
    for txt in txtDir:
        file = open(os.path.join(path, txt))
        lines = file.readlines()
        lineNum = len(lines)
        eleNum = len(lines[0])
        image = np.zeros((lineNum, eleNum-1))
        for i, line in zip(range(lineNum), lines):
            for j in range(eleNum-1):
                image[i][j] = eval(line[j])*255
            imagePath = os.path.join(saveDir, txt[0:-4]+".jpg")
        cv2.imwrite(imagePath, image)
txt2matrix(trainingDataPath, trainingDir, trainingImgDir)
txt2matrix(testingDataPath, testingDir, testingImgDir)
# 定义从img到matrix
def img2mat(imgPath):
    imgFiles = sorted(os.listdir(imgPath))
    # imgMat是一个matrix
    # imgMat.shape = (img文件的个数,每个img文件的像素个数)
    imgMat = np.zeros((len(imgFiles),1024))
    # labelsVector是一个向量
    # len(labelsVector) = img文件的个数
    labelsVector = np.zeros(len(imgFiles))
    for i, imgFile in enumerate(imgFiles):
        try:
            img = cv2.imread(os.path.join(imgPath, imgFile),0)
            img = np.reshape(img,(1,img.shape[0]*img.shape[1])) # type(img) = numpy.ndarray
        except:
            continue
        # 获取labelsVector
        labelsVector[i] = int(imgFile.split("_")[0])
        #获取imgMat
        imgMat[i,:] = img
    return imgMat, labelsVector
# 定义test program
def dataTest1():
	# 获取训练数据和labels
    trainImgMat, trainLabelsVector = img2mat(trainingImgDir)
    # 获取test数据和labels
    testImgMat, testLabelsVector = img2mat(testingImgDir)
    errorRate = 0
    for i in range(len(testImgMat)):
        result = classfier0(trainImgMat, trainLabelsVector, testImgMat[i], 5)
        # print("result is: {}, and the real one is: {}".format(result, testLabelsVector[i]))
        if result != testLabelsVector[i]:
            errorRate += 1
    print("error rate is :{}".format(errorRate/len(testLabelsVector)))
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-07-14 23:04:00  更:2021-07-14 23:04:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/28 0:36:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码