在书中“
Machine Learning - A Probabilistic Perspective" by Kevin P. Murphy
第一个任务为:
练习1.1混合MNIST数据上的KNN分类器
运行mnist1NNdemo
并验证错误分类率(在前1000次测试中
例)1-NN分类器的MNIST为3.8%。(如果您全部运行
所有10000个测试用例,错误率为3.09%。)修改代码以便
首先随机排列特征(训练列
和测试设计矩阵),然后应用
分类器。确认错误率未更改。
我的简单理解是,这个练习是在加载文件后查找1-NN(R中的kNN())。
文件:
train-images-idx3-ubyte。gz:训练集图像(9912422字节)
列车标签-idx1-ubyte。gz:训练集标签(28881字节)
t10k-images-idx3-ubyte。gz:测试集映像(1648877字节)
t10k-标签-idx1-ubyte。gz:测试集标签(4542字节)
从
The MNIST DATABASE
我找到了一个
popular template
加载文件:
# for the kNN() function
library(VIM)
load_mnist <- function() {
load_image_file <- function(filename) {
ret = list()
f = file(filename,'rb')
readBin(f,'integer',n=1,size=4,endian='big')
ret$n = readBin(f,'integer',n=1,size=4,endian='big')
nrow = readBin(f,'integer',n=1,size=4,endian='big')
ncol = readBin(f,'integer',n=1,size=4,endian='big')
x = readBin(f,'integer',n=ret$n*nrow*ncol,size=1,signed=F)
ret$x = matrix(x, ncol=nrow*ncol, byrow=T)
close(f)
ret
}
load_label_file <- function(filename) {
f = file(filename,'rb')
readBin(f,'integer',n=1,size=4,endian='big')
n = readBin(f,'integer',n=1,size=4,endian='big')
y = readBin(f,'integer',n=n,size=1,signed=F)
close(f)
y
}
train <<- load_image_file("train-images.idx3-ubyte")
test <<- load_image_file("t10k-images.idx3-ubyte")
train$y <<- load_label_file("train-labels.idx1-ubyte")
test$y <<- load_label_file("t10k-labels.idx1-ubyte")
}
show_digit <- function(arr784, col=gray(12:1/12)) {
image(matrix(arr784, nrow=28)[,28:1], col=col)
}
根据注释,在命令行中,这应该可以工作:
# Error "Error in matrix(arr784, nrow = 28) : object 'train' not found"
show_digit(train$x[5,])
问题是如何使用show\u digit函数?
编辑
删除额外问题