---
title: 公开数据集
description: "本章的机器学习测试用例使用官网数据集，请从官网下载house、HIGGS、nytimes、Kosarak、DEEP1B、Mnist8m、Epsilon、MESH_DEFORM。下文所有的数据集下载解压上传均在server1节点进行。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengbds/appAccelFeatures/algorithmaccelf_ml/kunpengbdssparkml_08_0035.html
sourcePath: /source/zh/kunpengbds/appAccelFeatures/algorithmaccelf_ml/kunpengbdssparkml_08_0035.html
indexId: fd35158714edf3f2778d1a4e86abfc24024be60b20907e54c5545f24729b579288
---
# 公开数据集

本章的机器学习测试用例使用官网数据集，请从官网下载house、HIGGS、nytimes、Kosarak、DEEP1B、Mnist8m、Epsilon、MESH_DEFORM。下文所有的数据集下载解压上传均在server1节点进行。

#### 下载官网house数据集

1. 新建“/test/dataset/ml”目录，并进入该目录。
  1 2 mkdir -p /test/dataset/ml cd /test/dataset/ml

2. 下载官网house数据集(https://sites.google.com/view/approxdbscan/datasets)（需要机器网络能连接到Google）。
3. 将2中下载的数据集放入“/test/dataset/ml”目录中。
4. 使用HDFS新建文件夹。
  1 2 hadoop fs -mkdir -p /tmp/dataset/ml hadoop fs -mkdir -p /tmp/ml/dataset

5. 上传数据集到“/tmp/dataset/ml”。
  1 hadoop fs -put /test/dataset/ml/house.ds /tmp/dataset/ml

6. 打开spark-shell。
  1 spark-shell

7. 输入以下命令。
  1 :paste

8. 执行下面代码，对数据集进行处理。
  1 2 3 4 5 6 7 val file = sc.textFile("/tmp/dataset/ml/house.ds") file.take(10).foreach(println(_)) file.count val data = file.map(x => x.split(" ")).filter(_.length == 8).map(x => x.slice(1, 8).mkString(" ")) data.count data.take(10).foreach(println(_)) data.repartition(1).saveAsTextFile("/tmp/ml/dataset/house")

9. 回车并执行Ctrl+d。
10. 检查HDFS对应目录下有无训练集和测试集数据，得到结果如下图。
  1 hadoop fs -ls /tmp/ml/dataset/house

11. 移除HDFS上无用的数据集目录。
  1 hadoop fs -rm -r /tmp/dataset/mlhadoop fs -rm -r /tmp/dataset/ml


#### 下载官网HIGGS数据集

1. 新建/“test/dataset/ml/higgs”目录，并进入该目录。
  1 2 mkdir -p /test/dataset/ml/higgs cd /test/dataset/ml/higgs

2. 下载官网higgs数据集。
  1 wget https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary/HIGGS.bz2

3. 解压数据集到当前目录。
  1 bzip2 -d HIGGS.bz2

4. HDFS新建“/tmp/dataset/ml/higgs”文件夹。
  1 hadoop fs -mkdir -p /tmp/ml/dataset/higgs

5. 上传数据集到HDFS上。
  1 hadoop fs -put /test/dataset/ml/higgs/HIGGS /tmp/ml/dataset/higgs

6. 打开Spark-shell。
  1 spark-shell

7. 输入以下命令。
  1 :paste

8. 执行下面代码，将数据集分割为训练集和测试集。
  1 2 3 4 5 6 7 8 9 val reader = spark.read.format("libsvm") reader.option("numFeatures", 28) val dataPath = "/tmp/ml/dataset/higgs" val data = reader.load(dataPath) val Array(trainingData, testData) = data.randomSplit(Array(0.7, 0.3),2020) val trainOutputPath = s"${dataPath}_train" val testOutputPath = s"${dataPath}_test" trainingData.write.format("libsvm").save(trainOutputPath) testData.write.format("libsvm").save(testOutputPath)

9. 按“Enter”并执行“Ctrl”+“d”。
10. 移除HDFS上无用的数据集目录。
  1 hadoop fs -rm -r /tmp/ml/dataset/higgs

11. 检查HDFS对应目录下有无训练集和测试集数据，得到结果如下图。
  1 hadoop fs -ls /tmp/ml/dataset


#### 下载官网nytimes数据集

1. 新建“/test/dataset/ml/nytimes”目录，并进入该目录。
  1 2 mkdir -p /test/dataset/ml/nytimes cd /test/dataset/ml/nytimes

2. 下载官网nytimes数据集。
  1 wget https://archive.ics.uci.edu/ml/machine-learning-databases/bag-of-words/docword.nytimes.txt.gz

3. 解压数据集到当前目录。
  1 gzip -d docword.nytimes.txt.gz

4. 新建dataset_process.py（因为是Python文件，所以请注意格式缩进）。

  a. 创建文件。
    1 vi dataset_process.py

  b. 按“i”进入编辑模式，文件内容如下。
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 import sys if __name__ == "__main__": if len(sys.argv) <= 1: print("Please input dataset") exit() filename = sys.argv[1] print("Reading data") processed_data = {} with open(filename, 'r') as fp: data = fp.readlines() print("Pre-processing data") for line in data[3:]: line_split = line.strip().split() if len(line_split) < 3: continue doc_id = int(line_split[0]) vocab_id = line_split[1] term_num = line_split[2] if doc_id not in processed_data: processed_data[doc_id] = str(doc_id) processed_data[doc_id] += (" %s:%s" % (vocab_id, term_num)) print("Post-processing data") doc_ids = list(processed_data.keys()) doc_ids.sort() data = [] for doc_id in doc_ids: data.append(processed_data[doc_id] + "\n") print("Writing data") with open(filename + ".libsvm", 'w') as fp: fp.writelines(data)

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
5. 使用dataset_process.py将数据集转换成libsvm格式。
  1 python3 dataset_process.py docword.nytimes.txt

6. 修改数据集docword.nytimes.txt.libsvm的名称为docword.nytimes.txt.libsvm.raw。
7. 新建reorder.py（因为是Python文件，所以请注意格式缩进）。

  a. 创建文件。
    1 vi reorder.py

  b. 按“i”进入编辑模式，文件内容如下。
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 filename = "docword.nytimes.txt.libsvm.raw" new_filename = "docword.nytimes.txt.libsvm" with open(filename, 'r') as fp: filedata = fp.readlines() print("Data length: %d" % len(filedata)) count = 0 data = [] for line in filedata: line_split = line.strip().split() doc_index = int(line_split[0]) doc_terms = {} for term in line_split[1:]: term_split = term.strip().split(":") assert int(term_split[0]) not in doc_terms doc_terms[int(term_split[0])] = int(term_split[1]) data.append([doc_index, doc_terms]) count += 1 if count % 100000 == 0: print("Processed %d00K" % int(count / 100000)) count = 0 new_filedata = [] for doc in data: doc_string = str(doc[0]) term_indices = list(doc[1].keys()) term_indices.sort() for term_index in term_indices: doc_string += (" " + str(term_index) + ":" + str(doc[1][term_index])) doc_string += "\n" new_filedata.append(doc_string) count += 1 if count % 100000 == 0: print("Generated %d00K" % int(count / 100000)) with open(new_filename, 'w') as fp: fp.writelines(new_filedata)

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
8. 使用reorder.py将6修改名称之后的数据集进行重新排序。
  1 python3 reorder.py

9. HDFS新建“/tmp/dataset/ml/nytimes”文件夹。
  1 hadoop fs -mkdir -p /tmp/ml/dataset/nytimes/

10. 上传数据集到HDFS上。
  1 hadoop fs -put /test/dataset/ml/nytimes/docword.nytimes.txt.libsvm /tmp/ml/dataset/nytimes/


#### 下载官网Kosarak数据集

1. 新建“/test/dataset/ml/Kosarak”目录，并进入该目录。
  1 2 mkdir -p /test/dataset/ml/Kosarak cd /test/dataset/ml/Kosarak

2. 下载官网Kosarak数据集。
  1 wget http://www.philippe-fournier-viger.com/spmf/datasets/kosarak_sequences.txt

3. HDFS新建“/tmp/ml/dataset/Kosarak”文件夹。
  1 hadoop fs -mkdir -p /tmp/ml/dataset/Kosarak/

4. 上传数据集到HDFS上。
  1 hadoop fs -put /test/dataset/ml/Kosarak/kosarak_sequences.txt /tmp/ml/dataset/Kosarak/


#### 下载官网DEEP1B数据集

1. 新建“/test/dataset/ml/DEEP1B”目录，并进入该目录。
  1 2 mkdir -p /test/dataset/ml/DEEP1B cd /test/dataset/ml/DEEP1B

2. 下载官网DEEP1B数据集。
  1 wget http://ann-benchmarks.com/deep-image-96-angular.hdf5

3. 新建文件processHDF5.py（因为是Python文件，所以请注意格式缩进）。

  a. 创建文件。
    1 vi processHDF5.py

  b. 按“i”进入编辑模式，添加内容如下。
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 import os import h5py # downloaded hdf5 file inputFile = h5py.File('deep-image-96-angular.hdf5', 'r') # directory name to store output files outputDir = "deep1b" # the number of samples in each output file samplesPerFile = 5000 sampleCnt = 0 fileCnt = 0 writer = open(os.path.join(outputDir, 'part-{}'.format(fileCnt)), 'w') data = inputFile['train'] for feature in data: writer.write(','.join([str(d) for d in feature]) + "\n") sampleCnt += 1 if sampleCnt == samplesPerFile: writer.close() fileCnt += 1 sampleCnt = 0 writer = open(os.path.join(outputDir, 'part-{}'.format(fileCnt)), 'w') data = inputFile['test'] for feature in data: writer.write(','.join([str(d) for d in feature]) + "\n") sampleCnt += 1 if sampleCnt == samplesPerFile: writer.close() fileCnt += 1 sampleCnt = 0 writer = open(os.path.join(outputDir, 'part-{}'.format(fileCnt)), 'w') writer.close()

  c. 按“Esc”键，输入:wq!，按“Enter”保存并退出编辑。
4. 数据处理，将hdf5文件转换为文本文件，每个样本一行，特征之间用逗号分隔。
  1 2 mkdir deep1b python3 processHDF5.py

5. 若出现如下报错，则需运行python3 -m pip install h5py。
6. HDFS新建“/tmp/ml/dataset/DEEP1”文件夹。
  1 hadoop fs -mkdir -p /tmp/ml/dataset/DEEP1B

7. 上传数据集到HDFS上。
  1 hadoop fs -put /test/dataset/ml/deep1b/* /tmp/ml/dataset/DEEP1B/


#### 下载官网Mnist8m数据集

1. 新建“/test/dataset/ml/mnist8m”目录，并进入该目录。
  1 2 mkdir -p /test/dataset/ml/mnist8m cd /test/dataset/ml/mnist8m

2. 下载官网mnist8m数据集。
  1 wget https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/mnist8m.bz2

3. 解压训练集和测试集与当前目录。
  1 bzip2 -d mnist8m.bz2

4. HDFS新建“/tmp/dataset/ml/mnist8m”文件夹。
  1 hadoop fs -mkdir -p /tmp/ml/dataset/mnist8m

5. 上传数据集到HDFS上。
  1 hadoop fs -put /test/dataset/ml/mnist8m/mnist8m /tmp/ml/dataset/mnist8m

6. 打开Spark-shell。
  1 spark-shell

7. 输入以下命令。
  1 :paste

8. 执行下面代码，将数据集分割为训练集和测试集。
  1 2 3 4 5 6 7 8 9 val reader = spark.read.format("libsvm") reader.option("numFeatures", 784) val dataPath = "/tmp/ml/dataset/mnist8m" val data = reader.load(dataPath) val Array(trainingData, testData) = data.randomSplit(Array(0.7, 0.3),2020) val trainOutputPath = s"${dataPath}_train" val testOutputPath = s"${dataPath}_test" trainingData.write.format("libsvm").save(trainOutputPath) testData.write.format("libsvm").save(testOutputPath)

9. 按“Enter”并执行“Ctrl”+“d”。
10. 移除HDFS上无用的数据集目录。
  1 hadoop fs -rm -r /tmp/ml/dataset/mnist8m

11. 检查HDFS对应目录下有无训练集和测试集数据，得到结果如下图。
  1 hadoop fs -ls /tmp/ml/dataset


#### 下载官网Epsilon数据集

1. 新建“/test/dataset/ml/epsilon”目录，并进入该目录。
  1 2 mkdir -p /test/dataset/ml/epsilon cd /test/dataset/ml/epsilon

2. 下载官网epsilon训练集和测试集。
  1 2 wget https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary/epsilon_normalized.bz2 wget https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary/epsilon_normalized.t.bz2

3. 解压训练集和测试集到当前目录。
  1 2 bzip2 -d epsilon_normalized.bz2 bzip2 -d epsilon_normalized.t.bz2

4. HDFS新建“/tmp/dataset/ml/epsilon_train ”和“/tmp/dataset/ml/epsilon_test” 文件夹。
  1 2 hadoop fs -mkdir -p /tmp/ml/dataset/epsilon_train hadoop fs -mkdir -p /tmp/ml/dataset/epsilon_test

5. 上传训练集和测试集到HDFS上。
  1 2 hadoop fs -put /test/dataset/ml/epsilon/epsilon_normalized /tmp/ml/dataset/epsilon_train hadoop fs -put /test/dataset/ml/epsilon/epsilon_normalized.t /tmp/ml/dataset/epsilon_test


#### 下载官网MESH_DEFORM数据集

1. 新建“/test/dataset/ml/mesh_deform”目录，并进入该目录。
  1 2 mkdir -p /test/dataset/ml/mesh_deform cd /test/dataset/ml/mesh_deform

2. 下载官网MESH_DEFORM数据集。
  1 wget https://suitesparse-collection-website.herokuapp.com/MM/Yoshiyasu/mesh_deform.tar.gz

3. 解压于当前目录。
  1 tar zxvf mesh_deform.tar.gz

4. 解压得到mesh_deform.mtx文件，打开mtx文件，删除第1-25行，第1至24行是信息行，第25行表示的是矩阵行数、列数、非零个数。真正的数据矩阵信息是从第26行开始的。
  1 vi mesh_deform.mtx

5. HDFS新建“/tmp/ml/dataset/MESH_DEFORM”文件夹。
  1 hadoop fs –mkdir -p /tmp/ml/dataset/MESH_DEFORM

6. 上传数据集到HDFS上。
  1 hadoop fs -put mesh_deform.mtx /tmp/ml/dataset/MESH_DEFORM/

7. 检查HDFS对应目录下有无数据，得到结果如下图。
  1 hadoop fs -ls /tmp/ml/dataset/MESH_DEFORM
