课后作业:数据预处理、降维、特征提取及聚类

作者:欧新宇(Xinyu OU)

本文档所展示的测试结果,均运行于:Intel Core i7-7700K CPU 4.2GHz

【作业提交】

将分类结果保存到文本文档进行提交(写上每一题的题号和题目,然后再贴答案),同时提交源代码。

  1. 测试结果命名为: ex09-结果-你的学号-你的姓名.txt
  2. 输出图片命名为: ex09-性能对比图-你的学号-你的姓名.png (.jpg)
  3. 源代码命名为:
  • ex09-01Ori-你的学号-你的姓名.py
  • ex09-02Preprocessing-你的学号-你的姓名.py
  • ex09-03PCA-你的学号-你的姓名.py

*结果文件,要求每小题标注题号,两题之间要求空一行*


要求在 "MNIST人脸识别" 数据集上完成以下任务,要求如下:

  1. 要求使用原始数据集的10%完成以下习题。(已给出载入数据集和数据预处理 I部分的代码)
  2. 使用MLP模型进行训练和测试,基本参数设置为:
solver='lbfgs', hidden_layer_sizes=[100, 100], activation='relu', alpha=1e-5, random_state=62,
  1. 使用原始数据进行预测(ex09-01Ori)
  2. 测试六种预处理方向对性能的影响(ex09-02Preprocessing)
methods = ['StandardScaler', 'MinMaxScaler', 'MaxAbsScaler',  'RobustScaler', 'Normalizer', 'Binarizer']

在完成了六种预处理方法的性能输出后,对比预处理结果和原始数据的结果,从7种结果中选出性能最好的一种方法完成后续的实验。

  1. 使用PCA进行降维,并测试性能,要求测试PCA的参数范围为n_components = [0.4:0.99],可以使用以下代码设置pca的参数范围(ex09-03PCA,ex09-性能对比图)
num=20
scores = np.zeros([3,num]) 
scores[0,:] = np.linspace(0.40, 0.99, num)
  1. 可视化出PCA的性能曲线(ex09-03PCA,ex09-性能对比图)
  2. 可视化出PCA曲线中最大值的点,以及未进行PCA降维的性能值点(ex09-03PCA,ex09-性能对比图)

1. 载入MNIST数据集

In [1]:
import sys
import os
sys.path.append(os.path.join(os.getcwd(), '..', 'Modules'))
import load_MNIST

import time
start = time.time()

train_images = load_MNIST.load_train_images()
train_labels = load_MNIST.load_train_labels()
test_images = load_MNIST.load_test_images()
test_labels = load_MNIST.load_test_labels()

print("载入数据集共耗时: {:.3f}s".format(time.time() - start))
开始载入MNIST手写数字数据集:
 训练集图片大小: 28*28, 已载入60000/60000.
训练集标签数量: 60000...已完成。
 测试集图片大小: 28*28, 已载入10000/10000.
测试集标签数量: 10000...已完成。
载入数据集共耗时: 2.788s

2. 数据预处理 I

  1. 将图像数据转换成二维矩阵,并归一化到 $0-1$ 之间
In [2]:
# 标准调整形态的方法
# X_train = train_images.reshape(train_images.shape[0], train_images.shape[1]*train_images.shape[2])/255
# 此处,因为我们已经知道的样本的形态,所以可以直接书写值

X_train = train_images.reshape(60000, 28*28)/255
y_train = train_labels
X_test = test_images.reshape(10000, 28*28)/255
y_test = test_labels
  1. 为了加速运算,将样本缩减到10%的比例进行处理
In [3]:
# 为了提高训练速度,我们只提取10%的样本进行演示
X_train_lite = X_train[0:5999,:]
y_train_lite = y_train[0:5999]
X_test_lite = X_test[0:999,:]
y_test_lite = y_test[0:999]

3. 使用原始数据进行预测

4. 测试预处理对性能的影响

5. 使用PCA进行降维,并测试性能

6. 按要求计算范围内的PCA降维后的性能

7.可视化性能