使用R语言进行图像分类
使用R语言进行图像分类
本文使用R语言,应用SVM(高斯核)[3]算法对JPEG图片进行二类分。
SVM使用e1071包, 图像处理用imager包[1]。
数据使用的是Caltech 101中的Faces和BACKGROUND_Google两类数据[2]。
文章最后包含了实验的源代码。
这篇blog还有个pdf版本,可在 http://download.csdn.net/detail/leeshuheng/9625830 中下载。
1 步骤
代码执行五个步骤。
• 读取图片
• 向量化
• 合并图片
• 训练模型
• 对测试集分类
2 程序执行时生成的SVM模型的部分信息
采样不同,结果可能不同。
summary(fit):
SVM-Type: C-classification
SVM-Kernel: radial
cost: 1
gamma: 0.0009765625
Number of Support Vectors: 349
3 代码
最后是R语言代码。采样不同,结果可能不同。
### 2016年 09月 07日 星期三 16:13:34 CST #############
## author: 李小丹
setwd("~/repos/project/R-src/")
library(imager)
library(e1071)
read.imags <- function(path = "./") {
fns <- list.files(path)
res <- NULL
for(i in fns) {
fn <- paste(path, i, sep = "")
im <- load.image(fn)
im <- resize(im, size_x = 32L, size_y = 32L,
size_z = 1L, size_c = 1L)
im <- as.array(im)
im <- matrix(im, 1, mult(dim(im)))
ifelse(!is.null(res),
res <- rbind(res, im), res <- im)
}
return(res)
}
a.images <- read.imags("./101_ObjectCategories/Faces/")
b.images <- read.imags("./101_ObjectCategories/BACKGROUND_Google/")
(sam.count <- ceiling(min(nrow(a.images) * 0.8, nrow(b.images) * 0.8)))
# [1] 348
train.a <- sample(1:nrow(a.images), sam.count, replace = F)
train.b <- sample(1:nrow(b.images), sam.count, replace = F)
data.imags <- rbind(a.images[train.a,], b.images[train.b,])
fit <- svm(data.imags, c(rep(1, length(train.a)), rep(0, length(train.b))),
probablity = T, cross = 3,
type = "C-classification", method = "SVM")
a.pred <- predict(fit, a.images[-train.a,])
a.pred <- as.numeric(as.character(a.pred))
prop.table(table(a.pred))
# a.pred
# 0 1
# 0.04597701 0.95402299
b.pred <- predict(fit, b.images[-train.b,])
b.pred <- as.numeric(as.character(b.pred))
prop.table(table(b.pred))
# b.pred
# 0 1
# 0.94166667 0.05833333
References
[1] Simon Barthelme and Antoine Cecchi. “imager: Image Processing Library Based on ’CImg’”.
In: (Sept. 5, 2016). URL: https://cran.r- project.org/web/packages/imager/index.html.
[2] Fei-Fei Li, Marco Andreetto, and Marc ’Aurelio Ranzato. altech 101. 2003.
URL: http://www.vision.caltech.edu/Image_Datasets/Caltech101/ (visited on 09/08/2016).
[3] David Meyer et al. “e1071: Misc Functions of the Department of Statistics, Probability Theory
Group (Formerly: E1071), TU Wien”. In: (Aug. 5, 2015).
URL: https://cran.r-project.org/web/packages/e1071/index.html.
使用R语言进行图像分类相关推荐
- 使用r语言做garch模型_使用GARCH估计货币波动率
使用r语言做garch模型 Asset prices have a high degree of stochastic trends inherent in the time series. In o ...
- 《R语言数据挖掘》读书笔记:五、聚类分析
第五章.聚类分析 0. 聚类算法的系统性介绍 聚类被定义为一个数据集的无监督分类.聚类算法的目的是使用距离或者概率度量对给定数据集(点集或者对象的集合)划分成数据实例或者对象(点)的组.根据距离或相似 ...
- 【2022新书】深度学习R语言实战,第二版
来源:专知 本文为书籍介绍,建议阅读5分钟使用R和强大的Keras库从头开始进行深度学习! R深度学习,第二版 使用R和强大的Keras库从头开始进行深度学习! 在R深度学习第二版中,您将学习: 从基 ...
- python语言入门r_小结:jieba分词的Python与R语言基础用法介绍
当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放 人们说话不是一个词一个词崩出来的,文章也就由句子组成.要想让机器识别美文,体会中华名族汉语的博大精深,不是不可能.但是,首先需要将其转化成其 ...
- r语言 断轴 画图_R语言基础画图/绘图/作图
R语言基础画图 R语言免费且开源,其强大和自由的画图功能,深受广大学生和可视化工作人员喜爱,这篇文章对如何使用R语言作基本的图形,如直方图,点图,饼状图以及箱线图进行简单介绍. 0 结构 每种图形构成 ...
- r语言remarkdown展示图_使用R语言包circlize可视化展示blast双序列比对结果
circlize这个包还挺强大的,R语言里用来画圈图还挺方便的. 今天这篇文章记录用circlize这个包画圈图展示blast双序列比对结果的代码 植物线粒体基因组类的文章通常会分析细胞器基因组间基因 ...
- 用R语言做词频统计_R语言 | 词频统计
Python网络爬虫与文本数据分析 本章内容 导入停用词 读数据,分词 剔除停用词 导入停用词表 library(dplyr) ## [1] "?" "." & ...
- 《数据科学R语言实践:面向计算推理与问题求解的案例研究法》一一2.1 引言...
本节书摘来自华章计算机<数据科学R语言实践:面向计算推理与问题求解的案例研究法>一书中的第2章,第2.1节,作者:[美] 德博拉·诺兰(Deborah Nolan) 邓肯·坦普·朗(Dun ...
- 手把手 | 教你爬下100部电影数据:R语言网页爬取入门指南
前言 网页上的数据和信息正在呈指数级增长.如今我们都使用谷歌作为知识的首要来源--无论是寻找对某地的评论还是了解新的术语.所有这些信息都已经可以从网上轻而易举地获得. 网络中可用数据的增多为数据科学家 ...
最新文章
- TOJ--3456--数学题
- STL list源码解析
- zencart 如何修改在线人数和订单编号
- bucket sort sample sort 并行_Java 中 Arrays.sort 和 Arrays.parallelSort 哪个更快?
- 【Android界面实现】Drawable Animation 使用介绍
- java 参数 python_java可变参数
- Hao Yin Jian 寒假第一周
- python爬虫下载模块_python爬虫模块之HTML下载模块
- ZeroMQ API简介
- 计算机桌面保护程序,屏幕保护程序软件
- mysql yum 安装
- 摄像头驱动CAMERA SENSOR调试流程
- CVT变速器中壳体吊机设计
- arrays.sort()
- matlab 双边沿滤波,一种基于数字PWM发生器的左增长双边沿UPWM信号频谱估计方法与流程...
- java 证书查看工具_程序员必备工具 Java证书工具Keytool的使用
- 计算机控制总线应用,基金会现场总线FF技术在焦炉计算机控制系统的应用
- boost的libboost_system问题 undefined reference to `boost::system::generic_categor
- Linux网络基础4(SSH远程链接)
- CSDN的评论区怎么添加超链接?