手写数字识别 随机森林 代码
数据来源:https://github.com/Janly238/Digit_Recognizer/tree/master/data
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat Jul 22 14:31:35 2017
Digit Recognizer
@author: janny
"""import csv
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn import neighbors
from sklearn import metrics
from sklearn.svm import SVC
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn import treedef ReadCSV(name):path='data/'csvfile=open(path+name,'r')csvfileData=csv.reader(csvfile)csvData=[]for line in csvfileData:csvData.append(line)csvData.pop(0)intData=np.array(csvData).astype(np.int32)return intDatadef LoadTrainData():Data=ReadCSV("train.csv") trainLable=Data[0:37000,0]trainData=Data[0:37000,1:]testLable=Data[37000:,0]trainData=Data[37000:,1:]trainData=np.where(trainData>0,1,0)testData=np.where(testData>0,1,0)return trainData,trainLable, testData,testLable def LoadTestData():Data=ReadCSV("test.csv") testLable_sub=Data[:,0]testData_sub=Data[:,1:]testData_sub=np.where(testData_sub>0,1,0)return testData_sub,testLable_sub def saveResult(result,csvName):with open(csvName,'wb') as myFile: myWriter=csv.writer(myFile)for i in result:tmp=[]tmp.append(i)myWriter.writerow(tmp)def RandomForest(trainData,trainLable,testData,testLable):print ('RF is running') md = RandomForestClassifier(n_estimators = 50, n_jobs = 4)md.fit(trainData, trainLable)rfPredict = md.predict(testData)rfScore=metrics.accuracy_score(testLable, rfPredict)return rfPredict,rfScoredef Knn(trainData,trainLable,testData,testLable):knn = neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='kd_tree', weights='distance', p=3) knn.fit(trainData, trainLable) knnPredict = knn.predict(testData)knnscore=metrics.accuracy_score(testLable, knnPredict)saveResult(knnPredict,'knn_Result.csv')return knnPredict,knnscoredef SVM(trainData,trainLable,testData,testLable):clf = SVC(kernel='rbf', C=10)clf.fit(trainData, trainLable)svmPredict=clf.predict(testData) svmScore=metrics.accuracy_score(testLable, svmPredict)return svmPredict,svmScoredef SvmClassify(trainData,trainLable,testData,testLable): #adding PCApca = PCA(n_components=0.8, whiten=True)train_x = pca.fit_transform(trainData)test_x = pca.transform(testData)svc = SVC(kernel='rbf', C=10)svc.fit(train_x, trainLable)svmPredict2 = svc.predict(test_x)svmScore2=metrics.accuracy_score(testLable, svmPredict)return svmScore2def LogClassify():clf = LogisticRegression()clf.fit(trainData, trainLable)logPredict = clf.predict(testData)logScore=metrics.accuracy_score(testLable, logPredict)return logPredict,logScoredef treeClassify(trainData,trainLable,testData,testLable):clf = tree.DecisionTreeClassifier()clf.fit(trainData,trainLable)treePredict=clf.predict(testData)treeScore=metrics.accuracy_score(testLable, treePredict)return treePredict,treeScoredef cnn(X_train, y_train, X_test, y_test):from keras.models import Sequential from keras.layers.core import Dense, Dropout, Activation from keras.optimizers import RMSpropfrom keras.datasets import mnist import numpymodel = Sequential() model.add(Dense(512, input_shape=(784,))) # 输入层,28*28=784 model.add(Activation('relu')) # 激活函数是tanh model.add(Dropout(0.2)) # 采用50%的dropoutmodel.add(Dense(512)) # 隐层节点500个 model.add(Activation('relu')) model.add(Dropout(0.2))model.add(Dense(10)) # 输出结果是10个类别,所以维度是10 model.add(Activation('softmax')) # 最后一层用softmaxmodel.summary()model.compile(loss='categorical_crossentropy', optimizer=RMSprop(), metrics=['accuracy']) # 使用交叉熵作为loss函数#(X_train, y_train), (X_test, y_test) = mnist.load_data() # 使用Keras自带的mnist工具读取数据(第一次需要联网)X_train = X_train.reshape(X_train.shape[0], X_train.shape[1] * X_train.shape[2]) # 由于mist的输入数据维度是(num, 28, 28),这里需要把后面的维度直接拼起来变成784维 X_test = X_test.reshape(X_test.shape[0], X_test.shape[1] * X_test.shape[2]) Y_train = (numpy.arange(10) == y_train[:, None]).astype(int) # 参考上一篇文章,这里需要把index转换成一个one hot的矩阵 Y_test = (numpy.arange(10) == y_test[:, None]).astype(int)model.fit(X_train, Y_train, batch_size=200, nb_epoch=10, verbose=1, validation_data=(X_test,Y_test)) print ('test set' )model.evaluate(X_test, Y_test, batch_size=200, show_accuracy=True, verbose=1) def DigitalRecognizer():trainData,trainLable, testData,testLable =LoadTrainData()pca = PCA(n_components=0.8, whiten=True)train_x = pca.fit_transform(trainData)test_x = pca.transform(testData)svmPredict,svmScore=SVM(train_x,trainLable,test_x,testLable)treePredict,treeScore=treeClassify(train_x,trainLable,test_x,testLable)rfPredict,rfScore=RandomForest(train_x,trainLable,test_x,testLable)ensembleData=np.zeros(len(treePredict),5)for i in range(len(treePredict)):ensembleData[i,:]=knnPredict[i],svmPredict[i],logPredict[i],treePredict[i],rfPredict[i]testData_sub,testLable_sub =LoadTestData()rfPredict,rfScore=RandomForest(ensembleData,testLable,testData_sub,testLable_sub)return rfPredict,rfScorerfPredict,rfScore=DigitalRecognizer()
手写数字识别 随机森林 代码相关推荐
- Python不同方法实现手写数字识别结果和代码
一.背景 手写数字识别是符号识别的一个分支,虽然只是识别简单的10个数字,但却有着非常大的实用价值.在我们的日常生活中,每天都要进行大量的文档处理工作,比如税单,银行支票,汇款单,信用卡账单的处理,以 ...
- 【手写数字识别】基于Lenet网络实现手写数字识别附matlab代码
1 内容介绍 当今社会,人工智能得到快速发展,而模式识 别作为人工智能的一个重要应用领域也得到了飞 速发展,它利用计算机通过计算的方法根据样本的 特征对样本进行分类,其中的光学字符识别技术受 到广大研 ...
- 手写数字识别神经网络完整代码,带详细注释。
神经网络使用的两个数据集:一个是训练集(60000条),一个是测试测试集(10000条),下载后直接放在程序目录下就可以了 mnist手写字体训练集6000条,mnist_train.csv mnis ...
- (一)Lenet5 手写数字识别原理及代码解析
模型简单,本地可跑 论文参考:Gradient-based learning applied to document recognition MNIST手写数据集 50000个训练数据 10000个测 ...
- 基于卷积神经网络的手写数字识别(附数据集+完整代码+操作说明)
基于卷积神经网络的手写数字识别(附数据集+完整代码+操作说明) 配置环境 1.前言 2.问题描述 3.解决方案 4.实现步骤 4.1数据集选择 4.2构建网络 4.3训练网络 4.4测试网络 4.5图 ...
- python cnn代码详解图解_基于TensorFlow的CNN实现Mnist手写数字识别
本文实例为大家分享了基于TensorFlow的CNN实现Mnist手写数字识别的具体代码,供大家参考,具体内容如下 一.CNN模型结构 输入层:Mnist数据集(28*28) 第一层卷积:感受视野5* ...
- 深度学习笔记:01快速构建一个手写数字识别系统以及张量的概念
深度学习笔记:01快速构建一个手写数字识别系统 神经网络代码最好运行在GPU中,但是对于初学者来说运行在GPU上成本太高了,所以先运行在CPU中,就是慢一些. 一.安装keras框架 使用管理员模式打 ...
- 深度学习-Pytorch:项目标准流程【构建、保存、加载神经网络模型;数据集构建器Dataset、数据加载器DataLoader(线性回归案例、手写数字识别案例)】
1.拿到文本,分词,清晰数据(去掉停用词语): 2.建立word2index.index2word表 3.准备好预训练好的word embedding 4.做好DataSet / Dataloader ...
- TensorFlow笔记(3)——利用TensorFlow和MNIST数据集训练一个最简单的手写数字识别模型...
前言 当我们开始学习编程的时候,第一件事往往是学习打印"Hello World".就好比编程入门有Hello World,机器学习入门有MNIST. MNIST是一个入门级的计算机 ...
最新文章
- 数据蒋堂 | 非常规聚合
- php动态生成apk渠道包,Android自动生成渠道包
- Cesium环境搭建成功和初步看一下它的示例
- .net core 生成html,ASP.NET Core 中如何将 .cshtml 视图文件生成为 .cs 文件
- fiber报错 (type *big.Int has no field or method FillBytes)
- 在iview + vue项目中使用自定义icon图标
- 蓝牙通信-搜索附近的蓝牙设备
- 28. git 常用命令
- cartographer探秘第二章之论文解析
- uva 12230 - Crossing Rivers(概率)
- python打包exe与反编译exe文件与防止反编译方式生成exe
- 五子课堂---第一课(连珠基础一)
- 92年程序员发帖晒薪资称自己很迷茫,网友:老弟你可以了
- 创建APPLEID 和申请成为开发者
- Xilinx AXI Crossbar相关调试记录
- 群聊比单聊,为什么复杂这么多?
- error: need 'typename' before '.......'的解决方法
- Linux进程与计划任务
- Scrapy爬取知乎用户信息(代理池,MongoDB,非分布式)
- 盛京剑客系列33:基本面真谛
热门文章
- 20180918-1 词频统计
- Visual Studio的语法着色终于调得赏心悦目
- Struts2 注解模式
- how tomcat works(第15章: Digester)
- python检查字典中是否已存在给定键
- SpringBoot,用200行代码完成一个一二级分布式缓存
- Oracle 空间查询, 数据类型为 sdo_geometry
- ApacheCN 深度学习译文集 20201229 更新
- 安卓应用安全指南 5.2.3 权限和保护级别 高级话题
- django 1.8 官方文档翻译: 2-6-2 遗留的数据库