前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Julia机器学习实战——使用Random Forest随机森林进行字符图像识别

Julia机器学习实战——使用Random Forest随机森林进行字符图像识别

作者头像
莫斯
发布2020-09-10 10:27:47
9300
发布2020-09-10 10:27:47
举报
文章被收录于专栏:备份备份

0 Preface

相关参数说明

代码语言:javascript
复制
 - Julia: 1.0
 - OS: MacOS 

训练测试数据百度云链接:点击下载 密码: u71o 文件说明:

代码语言:javascript
复制
 - rf_julia_charReg
	 - resizeData.py    #批量重设置图片尺寸
	 - test    #测试图片文件
	 - testResized    #resized 测试图片文件
	 - train    #训练图片文件
	 - trainResized    #resized 训练图片文件
	 - sampleTest.csv    #测试数据csv文件
	 - trainLabels.csv     #训练数据label csv文件

1 加载数据

安装需要使用到的包:

代码语言:javascript
复制
using Images
using DataFrames
using Statistics #use mean(), sum()... function
using DataFrames
using CSV
代码语言:javascript
复制
	注:如果没有安装包,使用以下脚本安装
代码语言:javascript
复制
import Pkg
Pkg.add([PKG NAME]) #例如:Pkg.add("Images")

读取图片文件数据,并返回矩阵

代码语言:javascript
复制
function read_data(type_data, labelsInfo, imageSize, path)
    x = zeros(size(labelsInfo, 1), imageSize)
    for (index, idImage) in enumerate(labelsInfo.ID)
        nameFile = "$(path)/$(type_data)Resized/$(idImage).Bmp"
	    img = load(nameFile)
        temp = float32(img)
        temp = Gray.(temp)
        x[index, :] = reshape(temp, 1, imageSize)
    end
    return x
end

解释:

代码语言:javascript
复制
float32(): 将其中的值转化为浮点数
Gray.(): 将RGB图像转化为灰度图像
reshape(): 在这里做的是平铺工作

设置图像大小以及项目路径:

代码语言:javascript
复制
imageSize = 400
path = "..."

读取训练数据Label

代码语言:javascript
复制
labelsInfoTrain = CSV.read("$(path)/trainLabels.csv")
读取训练数据Label
读取训练数据Label

读取训练图像数据:

代码语言:javascript
复制
xTrain = read_data("train", labelsInfoTrain, imageSize, path)
读取训练图像数据
读取训练图像数据

读取测试数据Label:

代码语言:javascript
复制
labelsInfoTest = CSV.read("$(path)/sampleSubmission.csv")
读取测试数据Label
读取测试数据Label

读取测试图像数据:

代码语言:javascript
复制
xTest = read_data("test", labelsInfoTest, imageSize, path)
读取测试图像数据
读取测试图像数据

2 训练随机森林(train RF)

训练:

代码语言:javascript
复制
model = build_forest(yTrain, xTrain, 20, 50, 1.0)

解释:

代码语言:javascript
复制
$3(20):number of features chosen at each random split
$4(50): number of trees
$5(1.0): ratio of subsampling

获得测试结果:

代码语言:javascript
复制
predTest = apply_forest(model, xTest)

转化预测结果:

代码语言:javascript
复制
labelsInfoTest.Class = Char.(predTest)

写入文件:

代码语言:javascript
复制
CSV.write("$(path)/predTest.csv", labelsInfoTest, header=true)

四折交叉验证:

代码语言:javascript
复制
accuracy = nfoldCV_forest(yTrain, xTrain, 20, 50, 4, 1.0);
println("4 fold accuracy: $(mean(accuracy))")

3 完整代码

代码语言:javascript
复制
using Images
using DataFrames
using Statistics 
using DataFrames
using CSV
using DecisionTree

function read_data(type_data, labelsInfo, imageSize, path)
    x = zeros(size(labelsInfo, 1), imageSize)
    for (index, idImage) in enumerate(labelsInfo.ID)
        nameFile = "$(path)/$(type_data)Resized/$(idImage).Bmp"
        img = load(nameFile)
        temp = float32(img)
        temp = Gray.(temp)
        x[index, :] = reshape(temp, 1, imageSize)
    end
    return x
end


imageSize = 400
path = "/Users/congying/cyWang/projects/julia/kaggleFirstStepsWithJulia/all"
labelsInfoTrain = CSV.read("$(path)/trainLabels.csv")
xTrain = read_data("train", labelsInfoTrain, imageSize, path)
labelsInfoTest = CSV.read("$(path)/sampleSubmission.csv")
xTest = read_data("test", labelsInfoTest, imageSize, path)
yTrain = map(x -> x[1], labelsInfoTrain.Class)
yTrain = Int.(yTrain)


model = build_forest(yTrain, xTrain, 20, 50, 1.0)
predTest = apply_forest(model, xTest)
labelsInfoTest.Class = Char.(predTest)
CSV.write("$(path)/juliaSubmission.csv", labelsInfoTest, header=true)
accuracy = nfoldCV_forest(yTrain, xTrain, 20, 50, 4, 1.0);
println("4 fold accuracy: $(mean(accuracy))")
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0 Preface
  • 1 加载数据
  • 2 训练随机森林(train RF)
  • 3 完整代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档