前言

对于刚入门AI的童鞋来说,mnist 数据集就相当于刚接触编程时的 “ hello world ” 一样,具有别样的意义,后续许多机器学习的算法都可以用该数据集来进行简单测试。

mnist数据来源:戳这里。

从官网上下载下来的数据是以下格式的,我想大多数人都不太熟悉。

\"\"

网站也给出了数据集的格式,但是要手动解析这些数据也是有点复杂的。

\"\"

所以我们会想着如果这些文件能转换成我们常用的csv格式,txt格式该多好啊。如果你有这个需求,下面的程序可以帮助你。

 

转换代码

以下代码的功能是将训练集和训练标签集成到一个csv文件里(测试文件同),运行完之后你会得到一个训练数据文件和一个测试数据文件。

def convert(imgf, labelf, outf, n):
    f = open(imgf, \"rb\")
    o = open(outf, \"w\")
    l = open(labelf, \"rb\")

    f.read(16)
    l.read(8)
    images = []

    for i in range(n):
        image = [ord(l.read(1))]
        for j in range(28*28):
            image.append(ord(f.read(1)))
        images.append(image)

    for image in images:
        o.write(\",\".join(str(pix) for pix in image)+\"\\n\")
    f.close()
    o.close()
    l.close()

convert(\"train-images.idx3-ubyte\", \"train-labels.idx1-ubyte\",
        \"mnist_train.csv\", 60000)
convert(\"t10k-images.idx3-ubyte\", \"t10k-labels.idx1-ubyte\",
        \"mnist_test.csv\", 10000)

转换后的结果如下,得到一个二维矩阵,每一行数据就是一个样本的标签+特征向量。

\"\"

 

使用代码

The training set contains 60000 examples, and the test set 10000 examples.

一共有60000个训练样本,还有10000个测试样本。

以下是我训练过程使用的一个例子。

from AdaboostWithDT import AdaboostWithDT
from adaboostDTClf import AdaboostClassiferWithDT
import numpy as np 
import pandas as pd
from time import time
from sklearn.metrics import accuracy_score

trainData = pd.read_csv(\"mnist_train.csv\").values
train_data = trainData[0:50000, 1:]  
train_label = trainData[0:50000, 0]  # 50000 代表样本数

testData = pd.read_csv(\"mnist_test.csv\").values
test_data = testData[0:10000, 1:]  
test_label = testData[0:10000, 0]     # 10000 代表标签数

clf = AdaboostWithDT()
print(\"Train1...\")
start = time()
clf.fit(train_data, train_label)
end = time()
t = end - start

print (\"DT test accuracy: \" , clf.score(test_data,test_label))
print (\'AdaBoost-DT train:%dmin%.3fsec\' %  ((int)(t/60), t-60*(int)(t/60)))

 

收藏 打印