zoukankan      html  css  js  c++  java
  • chapter02 PCA主成分分析在手写数字识别分类的应用

    #coding=utf8
    # 导入numpy工具包。
    import numpy as np
    # 导入pandas用于数据分析。
    import pandas as pd
    
    from sklearn.metrics import classification_report
    # 从sklearn.decomposition导入PCA。
    from sklearn.decomposition import PCA
    
    # 从互联网读入手写体图片识别任务的训练数据,存储在变量digits_train中。
    digits_train = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/optdigits/optdigits.tra', header=None)
    
    # 从互联网读入手写体图片识别任务的测试数据,存储在变量digits_test中。
    digits_test = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/optdigits/optdigits.tes', header=None)
    # 对训练数据、测试数据进行特征向量(图片像素)与分类目标的分隔。
    X_train = digits_train[np.arange(64)]
    y_train = digits_train[64]
    X_test = digits_test[np.arange(64)]
    y_test = digits_test[64]
    
    # 导入基于线性核的支持向量机分类器。
    from sklearn.svm import LinearSVC
    
    # 使用默认配置初始化LinearSVC,对原始64维像素特征的训练数据进行建模,并在测试数据上做出预测,存储在y_predict中。
    svc = LinearSVC()
    svc.fit(X_train, y_train)
    y_predict = svc.predict(X_test)
    
    # 使用PCA将原64维的图像数据压缩到20个维度。
    estimator = PCA(n_components=20)
    
    # 利用训练特征决定(fit)20个正交维度的方向,并转化(transform)原训练特征。
    pca_X_train = estimator.fit_transform(X_train)
    # 测试特征也按照上述的20个正交维度方向进行转化(transform)。
    pca_X_test = estimator.transform(X_test)
    
    # 使用默认配置初始化LinearSVC,对压缩过后的20维特征的训练数据进行建模,并在测试数据上做出预测,存储在pca_y_predict中。
    pca_svc = LinearSVC()
    pca_svc.fit(pca_X_train, y_train)
    pca_y_predict = pca_svc.predict(pca_X_test)
    
    
    # 对使用原始图像高维像素特征训练的支持向量机分类器的性能作出评估。
    print svc.score(X_test, y_test)
    print classification_report(y_test, y_predict, target_names=np.arange(10).astype(str))
    
    # 对使用PCA压缩重建的低维图像特征训练的支持向量机分类器的性能作出评估。
    print pca_svc.score(pca_X_test, y_test)
    print classification_report(y_test, pca_y_predict, target_names=np.arange(10).astype(str))

    结果:

    分析:虽然损失了%3的预测准确性,但是相比于原来的64维特征,使用PCA压缩并降低了68.75%的维度,能改节省大量的训练时间,在保持数据多样性的基础上,规避掉了大量特征冗余和噪声。

  • 相关阅读:
    导入导出通用库
    镜像下载地址
    后端请求接口的几种方式
    获取本机的mac地址
    Arduino串口的一些高级用法
    手机与Arduino蓝牙串口通讯实验及完整例程
    ARDUINO+MCP2515实现CAN通讯接收
    Arduino IIC 主从设备连接通信
    上位机与单片机的通信问题
    NRF24L01多对一、多通道通讯关键代码
  • 原文地址:https://www.cnblogs.com/TMatrix52/p/7655613.html
Copyright © 2011-2022 走看看