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%的维度,能改节省大量的训练时间,在保持数据多样性的基础上,规避掉了大量特征冗余和噪声。

  • 相关阅读:
    FZU 2129 子序列个数(DP)题解
    FZU 2082 过路费(树链剖分 边权)题解
    2019牛客多校第一场E ABBA(DP)题解
    ajax解决csrf的跨站请求伪造
    django实现简单的跨域请求数据
    python 与jQuery之间的接口对应
    GO语言的初次学习
    Django一些常用参数的设置
    auth认证模块
    Django中间件模块的使用
  • 原文地址:https://www.cnblogs.com/TMatrix52/p/7655613.html
Copyright © 2011-2022 走看看