zoukankan      html  css  js  c++  java
  • 神经网络预测mnist时候如果不归一化,则准确率仅仅10%下文作者svm也遇到了。

    转自:http://blog.csdn.net/jeryjeryjery/article/details/72649320

    这两天用Python来实现手写数字识别,刚开始用原始数据进行训练,结果预测结果都是同一个类别,全部是对应数字1。正确率也只有10%左右,下面是代码及运行结果截图:
    这里写图片描述

    预测结果都是数字1。

      数据归一化是指将特征值从一个大范围映射到[0,1]或者[-1,1],如果原始值都是正数,则建议选择映射到[0,1];如果原始值有正数又有负数,则建议映射到[-1,1];具体情况需要具体分析。映射到[0,1]的实现是:
      

    new_value=valuemin_valuemax_valuemin_value


    这样就能实现从原来的范围映射到[0,1]之间。
      libsvm中提供了数据归一化工具,就是svm-scale这个工具。如果你的数据文件已经满足了svm的格式要求,即label1:value12:value2.... 这种格式,那么在window平台下,你可以直接调用libsvmwindowssvm-scale.exe文件来进行归一化操作。具体步骤是在cmd命令行中进入到svm-scale.exe所在文件夹,然后运行svm-scale来实现归一化。svm-scale的语法截图如下:
    scale语法
    其中-l 指定下界,-u指定上界,-s指定保存scale参数文件路径,-r源文件路径

    下面以数据源train.txt为例,将其归一化到[0,1],并存入到train-to-one.txt中,语句截图如下:
    这里写图片描述

      因为手写数字图片是由一系列的像素点组成的,像素值从0到255,所以可以让每一个像素值除以255,从而实现映射。可以调用svm-scale来实现,也可以直接编写java代码来实现,然后再以归一化之后的数据进行训练模型并预测,其代码和截图如下:
    归一化数据

    可以看出,准确率和速率明显提高了,不会出现仅仅只有一类的问题。但是其中的原理,本人现在还不知道,等我理解了再解释吧!

  • 相关阅读:
    spring 整合 shiro框架
    Kafka常见问题及解决方法
    设计模式之解释器模式规则你来定(二十五)
    设计模式之原型模式简单即复杂(二十四)
    设计模式之访问者模式层次操作(二十三)
    设计模式之状态模式IFORNOIF(二十二)
    设计模式之职责链模式永不罢休(二十一)
    设计模式之组合模式透明实用(二十)
    设计模式之享元模式高效复用(十九)
    设计模式之迭代器模式解析学习源码(十八)
  • 原文地址:https://www.cnblogs.com/bonelee/p/7880916.html
Copyright © 2011-2022 走看看