• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 用kNN算法识别手写数字,归一化对准确率的影响?

用kNN算法识别手写数字,归一化对准确率的影响?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了knn算法,knn算法原理,knn算法matlab代码,knn算法实例,python knn算法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:用kNN算法识别手写数字,归一化对准确率的影响?
描述:

最近在入门Kaggle竞赛,练习赛中手写数字识别遇到了问题。
最开始我自己写了算法,运行正确率非常低,于是从网上找了一个相近的算法来测试。
该算法用kNN算法来识别,首先取出训练数据,归一化,然后分类。
这个算法与我自己的算法只有一步不一样,就是使用了归一化把向量化为二值的。
参考算法

# 归一化,把所有不为1的值化为1
def nomalizing(array):
    m,n=shape(array)
    for i in xrange(m):
        for j in xrange(n):
            if array[i,j]!=0:
                array[i,j]=1
    return array

下面贴一下我自己的算法

# -*- coding: utf-8 -*-
import numpy as np
import _csv as csv
import operator


# path 文件路径
# rowNum 可指定取数据集中特定数量向量
# 将图片转换为向量矩阵,返回数据集、类别
def loadTrainingData(path, rowNum = -1):
    rawData = []
    with open(path) as file:
        lines = csv.reader(file)
        for line in lines:
            rawData.append(line)

    # 去除pixel行
    rawData.remove(rawData[0])

    dataSet = rawData[0:rowNum]
    # dataSet = map(int, dataSet)
    dataSet = np.array(dataSet)
    labels = dataSet[:,0]

    dataSet = dataSet[:,1:]
    dataSet = dataSet.astype(int)
    # print np.shape(dataSet)
    resultSet = dataSet
    return resultSet, labels


def loadTestData(path):
    rawData = []
    with open(path) as file:
        lines = csv.reader(file)
        for line in lines:
            rawData.append(line)
    # 去除pixel行
    rawData.remove(rawData[0])

    dataSet = np.array(rawData)
    dataSet = dataSet.astype(int)
    resultSet = dataSet
    return resultSet


# knn算法分类器
# inX 所要测试的向量
# dataSet 训练样本集
# labels 标签向量
# k 所选的最邻近数目
def knnClassifier(inX, dataSet, labels, k):
    # 矩阵化
    inX = np.mat(inX)
    dataSet = np.mat(dataSet)
    labels = np.mat(labels)

    dataSetSize = dataSet.shape[0]

    # 计算与每个样本的差值
    diffMat = np.tile(inX, (dataSetSize, 1)) - dataSet
    # 求欧式距离
    sqDiffMat = np.array(diffMat)**2
    sqDistances = sqDiffMat.sum(axis=1)
    distances = sqDistances**0.5
    # 得到以距离排序的索引列表,距离由近到远
    sortedDistIndicies = distances.argsort()
    #得到类别:个数的字典
    classCount={}
    for i in range(k):
        voteIlabel = labels[0,sortedDistIndicies[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
    sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
    return sortedClassCount[0][0]

运行后,我的算法准确率非常低。
请问归一化为什么能够提高准确率呢?


解决方案1:

array里面存储的是什么?像素值么?

kNN不是一种很有竞争力的算法,它利用的还是裸的像素值来做图像表示。
虽然不需要训练阶段,但是预测阶段需要保留所有的标注数据以方便查找相似的图片。
而logistic regression, SVM之类的模型只需要存储有限的参数就可以了。

对于手写字符识别问题,现在最有效的模型是CNN(Convolutional Neural Network),
准确率达到90%以上是很容易的,仔细选择网络架构可以破95%.

这里有一个示例实现:http://deeplearning.net/tutorial/lenet.html

还有一个关于这个任务的调查表:http://yann.lecun.com/exdb/mnist/


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 新手学习PYTHON中KNN算法的手写识别出现问题
  • 如何最高效的实现这样的python算法
  • 用kNN算法识别手写数字,归一化对准确率的影响?

相关文章

  • 2017-06-07 flask中的template_rendered函数
  • 2017-06-07 golang并发的http服务器
  • 2017-06-07 七牛覆盖速度有些慢
  • 2017-06-07 ld:librarynotfoundfor-lPods-AFNetworking
  • 2017-06-07 flask中使用bootstrap/wtfhtml模板编写表单,要怎样调整表单大小?
  • 2017-06-07 NodeJs中下载私有文件m3u8文件的downloadUrl方法
  • 2017-06-07 Flask后台修改数据生成静态页面,如何访问这些动态生成的静态页面?
  • 2017-06-07 关于akkaactor修改相同变量
  • 2017-06-07 (laravel)phpartisan--queue参数报错!
  • 2017-06-07 mongoDB等非关系型数据库和mysql等关系型数据库的应用场景有何异同?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • pyqt4无法导入的问题,提示ImportError:NomodulenamedPyQt4
    • PHP英文分词有什么好介绍的吗?
    • 貌似staticfileorg现在很不稳定?
    • 数据分析时,如何暂存比较大的数据?
    • 牛牛热线视频免费视频七牛的视频处理问题
    • 一个python问题异常,不知道怎么解决,大神速来
    • 现在七牛无法实名制了?收不到手机验证码,怎么回事?
    • (python)如何修改twisted自带的日志输出格式?
    • [新手求助奇怪问题]codecademy上和本地shell运行同一程序,结果不同
    • php的curl抓取懒加载的图片方法,求大神指点

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有