python实现KNN,识别手写数字

写了识别手写数字的KNN算法,如下图所示。参考链接http://blog.csdn.net/april_newnew/article/details/44176059。

# -*- coding: utf-8 -*-

import numpy as np
import pandas as pd
import os
def readtxt(filename):
    text=[]
    f = open(filename,‘r‘,encoding=‘utf-8‘)
    for line in f.readlines():
        text.append(line)
    txt = list(text)
    txt=np.array(txt,dtype=‘float‘)
    txt = txt.tolist()
    return txt

def readdata(rootfile):
    data = []
    label = []
    for root,dirs,files in os.walk(rootfile):
        for name in files:
            filename = root +‘\\‘+name
            txt = readtxt(filename)
            data.append(txt)
            label1 = name.split(‘_‘)[0]
            label.append(label1)
    data = pd.DataFrame(data)
    return data,label

def KNN(traindata,trainlabel,testdatai,K):
    length = len(traindata)
    newtest = np.tile(testdatai, (length,1))
    newtest = pd.DataFrame(newtest)
    diff = newtest - traindata
    diff = diff**2
    cha = diff.sum(axis=1)
    cha = cha**0.5
    result = pd.DataFrame({‘label‘:trainlabel,
                       ‘cha‘:cha})
    labels = result.sort_values(by=‘cha‘)[:K]
    frequent =labels.groupby(labels[‘label‘]).size()
    labely = frequent.argmax()
    return labely

def test(trainfile,testfile,K):
    result = []
    traindata, trainlabel= readdata(trainfile)
    testdata, testlabel = readdata(testfile)
    for i in range(len(testdata)):
        labely = KNN(traindata,trainlabel,testdata.loc[i,:],K)
        result.append(labely)
    tongji  = pd.DataFrame({‘result‘:result,‘testlabel‘:testlabel})
    accuary = len(tongji[tongji[‘result‘]==tongji[‘testlabel‘]])/len(result)
    return result,accuary

trainfile=r‘E:\trainingDigits‘
testfile=r‘E:\testDigits‘
K=3
result, accuary= test(trainfile,testfile,K)
            

注:训练数据集有2,210条记录,测试数据有670条。准确率并不高,只有0.45。目前不知道为什么,以后多学习,争取优化代码。

时间: 2024-10-14 15:14:31

python实现KNN,识别手写数字的相关文章

用python实现的的手写数字识别器

概述 带GUI界面的,基于python sklearn knn算法的手写数字识别器,可用于识别手写数字,训练数据集为mnist. 详细 代码下载:http://www.demodashi.com/demo/13039.html 前言 k-近邻(kNN, k-NearestNeighbor)算法是一种基本分类与回归方法,通俗点来说,就是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的 k 个实例,这 k 个实例的多数属于某个类,就把该输入实例分为这个类. python 第三方

用BP人工神经网络识别手写数字

http://wenku.baidu.com/link?url=HQ-5tZCXBQ3uwPZQECHkMCtursKIpglboBHq416N-q2WZupkNNH3Gv4vtEHyPULezDb50ZcKor41PEikwv5TfTqwrsQ4-9wmH06L7bYD04u 用BP人工神经网络识别手写数字 yzw20091201上传于2013-01-31|暂无评价|356人阅读|13次下载|暂无简介|举报文档 在手机打开 赖勇浩( http://laiyonghao.com ) 这是我读工

学习笔记TF024:TensorFlow实现Softmax Regression(回归)识别手写数字

TensorFlow实现Softmax Regression(回归)识别手写数字.MNIST(Mixed National Institute of Standards and Technology database),简单机器视觉数据集,28X28像素手写数字,只有灰度值信息,空白部分为0,笔迹根据颜色深浅取[0, 1], 784维,丢弃二维空间信息,目标分0~9共10类.数据加载,data.read_data_sets, 55000个样本,测试集10000样本,验证集5000样本.样本标注信

一文全解:利用谷歌深度学习框架Tensorflow识别手写数字图片(初学者篇)

笔记整理者:王小草 笔记整理时间2017年2月24日 原文地址 http://blog.csdn.net/sinat_33761963/article/details/56837466?fps=1&locationNum=5 Tensorflow官方英文文档地址:https://www.tensorflow.org/get_started/mnist/beginners 本文整理时官方文档最近更新时间:2017年2月15日 1.案例背景 本文是跟着Tensorflow官方文档的第二篇教程–识别手

12 使用卷积神经网络识别手写数字

看代码: 1 import tensorflow as tf 2 from tensorflow.examples.tutorials.mnist import input_data 3 4 # 下载训练和测试数据 5 mnist = input_data.read_data_sets('MNIST_data/', one_hot = True) 6 7 # 创建session 8 sess = tf.Session() 9 10 # 占位符 11 x = tf.placeholder(tf.f

《神经网络和深度学习》系列文章一:使用神经网络识别手写数字

出处: Michael Nielsen的<Neural Network and Deep Leraning> 本节译者:哈工大SCIR硕士生 徐梓翔 (https://github.com/endyul) 声明:我们将不定期连载该书的中文翻译,如需转载请联系[email protected],未经授权不得转载. “本文转载自[哈工大SCIR]微信公众号,转载已征得同意.” 使用神经网络识别手写数字 感知机 sigmoid神经元 神经网络的结构 用简单的网络结构解决手写数字识别 通过梯度下降法学

BP神经网络识别手写数字项目解析及代码

这两天在学习人工神经网络,用传统神经网络结构做了一个识别手写数字的小项目作为练手.点滴收获与思考,想跟大家分享一下,欢迎指教,共同进步. 平常说的BP神经网络指传统的人工神经网络,相比于卷积神经网络(CNN)来说要简单些. 人工神经网络具有复杂模式和进行联想.推理记忆的功能, 它是解决某些传统方法所无法解决的问题的有力工具.目前, 它日益受到重视, 同时其他学科的发展, 为其提供了更大的机会.1986 年, Romelhart 和Mcclelland提出了误差反向传播算法(Error Back

TensorFlow实战之Softmax Regression识别手写数字

     关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2018年02月21日 23:10:04所撰写内容(http://blog.csdn.net/qq_37608890/article/details/79343860).        本文根据最近学习TensorFlow书籍网络文章的情况,特将一些学习心得做了总结,详情如下.如有不当之处,请各位大拿多多指点,在此谢过. 一.相关概念 1.MNIST MNIST(Mixed

卷积神经网络识别手写数字实例

卷积神经网络识别手写数字实例: import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # 定义一个初始化权重的函数 def weight_variables(shape): w = tf.Variable(tf.random_normal(shape=shape,mean=0.0,stddev=1.0)) return w # 定义一个初始化偏置的函数 def bias_variabl