PCA降维识别手写数字

关注公众号“轻松学编程”了解更多。

PCA 用于数据降维,减少运算时间,避免过拟合。
PCA(n_components=150,whiten=True)

  • n_components参数设置需要保留特征的数量,如果是小数,则表示保留特征的比例;

    设为大于零的整数,会自动的选取n个主成分-

  • whiten: 默认为False,若为True表示做白化处理,白化处理主要是为了使处理后的数据方差都一致

PCA降维识别手写数字

导包

import numpy as np
import pandas as pd
import time
from pandas import Series,DataFrame from sklearn.svm import SVC
#主成分分析
from sklearn.decomposition import PCA
# 交叉验证
from sklearn.model_selection import GridSearchCV
from IPython.display import display import matplotlib.pyplot as plt
%matplotlib inline

读取数据

data = pd.read_csv('./data/digits.csv')
data.head()

data.shape


一共有42000张图片。

plt.figure(figsize=(2,2))
plt.imshow(data.loc[0][1:].values.reshape(28,28))
# 图片之所以显示不同数字,因为像素值pixel 不同

data中label一列中的值代表的是哪个数字。

#特征数据
X = data.iloc[:,1:]
#目标数据
y = data.label

有些属性都是一样的,对分类起不到作用,可以把它们从特征属性中剔除,从而达到降维的效果,缩短模型训练时间,提高准确率。

降维处理

# 784属性降维到150
X.shape

#自动选取150个主成分特征
pca = PCA(n_components=150,whiten=True)
#训练模型
pca.fit(X)
#降维处理
X_pca = pca.transform(X)
X_pca.shape

使用交叉验证获取算法模型最优参数

'''gamma : float, optional (default='auto')
Kernel coefficient for 'rbf', 'poly' and 'sigmoid'.
If gamma is 'auto' then 1/n_features will be used instead.'''
#gamma = 1/150 = 0.00667 g = [0.001,0.003,0.006,0.01,0.05]
c = [0.5,0.8,1,1.5,3] #创建支持向量机算法模型。内核函数默认使用'rbf
svc = SVC() #寻找算法最优参数:5个属性(5个参数)组合条件 5^5 = 3125个组合 gCV = GridSearchCV(svc,
param_grid={
'C': c,
# C是SVC中的错误惩罚系数,值越大,模型就越不能容忍错误,
#训练次数就越多,也越容易过拟合
'gamma':g # gamma是SVC中调整曲线形状的系数
}) start = time.time()
#训练模型
gCV.fit(X_pca[:5000],y[:5000])
end = time.time()
print((end-start)/60,'分钟')

获取最优模型

#获取模型
svc_best_ = gCV.best_estimator_
svc_best_

对最优模型评分

gCV.best_score_

训练模型并评分

#训练模型
svc_best_.fit(X_pca[:5000],y[:5000])
#预测
y_ = svc_best_.predict(X_pca[-40:])
display(y_,y[-40:].values)

svc_best_.score(X_pca[-5000:],y[-5000:])

不进行降维比较

# 不进行降维:准确率降低

start = time.time()
svc_best_.fit(X[:5000],y[:5000])
end = time.time()
acu = svc_best_.score(X[-5000:],y[-5000:]) print('不进行降维,准确率: %0.4f'%(acu))
print((end-start)/60,'分钟')

后记

【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。

也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!

公众号

关注我,我们一起成长~~

python机器学习使用PCA降维识别手写数字的更多相关文章

  1. 使用神经网络来识别手写数字【译】(三)- 用Python代码实现

    实现我们分类数字的网络 好,让我们使用随机梯度下降和 MNIST训练数据来写一个程序来学习怎样识别手写数字. 我们用Python (2.7) 来实现.只有 74 行代码!我们需要的第一个东西是 MNI ...

  2. python手写神经网络实现识别手写数字

    写在开头:这个实验和matlab手写神经网络实现识别手写数字一样. 实验说明 一直想自己写一个神经网络来实现手写数字的识别,而不是套用别人的框架.恰巧前几天,有幸从同学那拿到5000张已经贴好标签的手 ...

  3. 学习笔记TF024:TensorFlow实现Softmax Regression(回归)识别手写数字

    TensorFlow实现Softmax Regression(回归)识别手写数字.MNIST(Mixed National Institute of Standards and Technology ...

  4. TensorFlow实战之Softmax Regression识别手写数字

         关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2018年02月21日 23:10:04所撰写内容(http://blog.c ...

  5. 一文全解:利用谷歌深度学习框架Tensorflow识别手写数字图片(初学者篇)

    笔记整理者:王小草 笔记整理时间2017年2月24日 原文地址 http://blog.csdn.net/sinat_33761963/article/details/56837466?fps=1&a ...

  6. 3 TensorFlow入门之识别手写数字

    ------------------------------------ 写在开头:此文参照莫烦python教程(墙裂推荐!!!) ---------------------------------- ...

  7. 用BP人工神经网络识别手写数字

    http://wenku.baidu.com/link?url=HQ-5tZCXBQ3uwPZQECHkMCtursKIpglboBHq416N-q2WZupkNNH3Gv4vtEHyPULezDb5 ...

  8. KNN 算法-实战篇-如何识别手写数字

    公号:码农充电站pro 主页:https://codeshellme.github.io 上篇文章介绍了KNN 算法的原理,今天来介绍如何使用KNN 算法识别手写数字? 1,手写数字数据集 手写数字数 ...

  9. python机器学习识别手写数字

    手写数字识别 关注公众号"轻松学编程"了解更多. 导包 import numpy as np import matplotlib.pyplot as plt %matplotlib ...

随机推荐

  1. django 3.1 序列化讲述

    序列化Django对象¶ Django的序列化框架提供了一种将Django模型"翻译"为其他格式的机制.通常,这些其他格式将基于文本,并用于通过电线发送Django数据,但是序列化 ...

  2. Centos-系统任务队列信息-uptime

    uptime 显示系统的当前时间.系统从启动到当前运行时间.当前总共在线用户.系统1.5.15分钟负载情况

  3. 如何学习iOS开发?iOS Developer Library足矣!

    记得上高中的时候,寄信请教二哥学习经验,二哥来信介绍学习经验说:资料书要快速阅读,把书上的题做完,然后再买几套资料书(习题集)继续练习. 这是二哥的经验,因为他自学能力强,可以消化多套资料书. 我仿照 ...

  4. 头文件.h的作用

    参考链接http://www.cnblogs.com/webcyz/archive/2012/09/16/2688035.html懒得复制过来

  5. 访问 LNMP 报 502 Bad Gateway 错误的解决办法

    LNMP : Linux + Nginx + MySQL + PHP Nginx 出现502有很多原因,但大部分原因可以归结为资源数量不够用,也就是说后端 PHP-FPM 处理有问题,Nginx 将正 ...

  6. Jenkins从节点上构建自动化测试项目时报错:java.io.IOException: Unexpected termination of the channel

    在mac电脑上配置了Jenkins从节点,在该从节点上构建app UI 自动化测试项目,运行一些用例后报如下错误: java.io.EOFException at java.io.ObjectInpu ...

  7. Oracle误操作 数据恢复

    SELECT * FROM v$sqlarea //查询最近sql记录 SELECT r.FIRST_LOAD_TIME,r.* FROM v$sqlarea r ORDER BY r.FIRST_L ...

  8. Azure Cosmos DB (三) EF Core 操作CURD

    一,引言 接着上一篇使用 EF Core 操作 Azure CosmosDB 生成种子数据,今天我们完成通过 EF Core 实现CRUD一系列功能.EF Core 3.0 提供了CosmosDB 数 ...

  9. MeteoInfoLab脚本示例:inpolygon

    inpollygon函数是用来判断带坐标(x/y)的数据是否在某个或者一组多边形(Polygon)中,返回的结果中如果做多边形内则值为1,否则值为-1.下面一个例子演示了利用一个shape文件和inp ...

  10. 99%的Android开发不得不面对的三道坎,到底该怎么破?

    今年比往年要特殊一些,受疫情的影响,很多公司都出现了裁员现象.以至于最近很多技术同学也在纷纷向我倒苦水. 王鹏便是其中的一员,王鹏之前是在一线城市的一家小型互联网公司做Android应用开发.从毕业实 ...