python机器学习使用PCA降维识别手写数字
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降维识别手写数字的更多相关文章
- 使用神经网络来识别手写数字【译】(三)- 用Python代码实现
实现我们分类数字的网络 好,让我们使用随机梯度下降和 MNIST训练数据来写一个程序来学习怎样识别手写数字. 我们用Python (2.7) 来实现.只有 74 行代码!我们需要的第一个东西是 MNI ...
- python手写神经网络实现识别手写数字
写在开头:这个实验和matlab手写神经网络实现识别手写数字一样. 实验说明 一直想自己写一个神经网络来实现手写数字的识别,而不是套用别人的框架.恰巧前几天,有幸从同学那拿到5000张已经贴好标签的手 ...
- 学习笔记TF024:TensorFlow实现Softmax Regression(回归)识别手写数字
TensorFlow实现Softmax Regression(回归)识别手写数字.MNIST(Mixed National Institute of Standards and Technology ...
- TensorFlow实战之Softmax Regression识别手写数字
关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2018年02月21日 23:10:04所撰写内容(http://blog.c ...
- 一文全解:利用谷歌深度学习框架Tensorflow识别手写数字图片(初学者篇)
笔记整理者:王小草 笔记整理时间2017年2月24日 原文地址 http://blog.csdn.net/sinat_33761963/article/details/56837466?fps=1&a ...
- 3 TensorFlow入门之识别手写数字
------------------------------------ 写在开头:此文参照莫烦python教程(墙裂推荐!!!) ---------------------------------- ...
- 用BP人工神经网络识别手写数字
http://wenku.baidu.com/link?url=HQ-5tZCXBQ3uwPZQECHkMCtursKIpglboBHq416N-q2WZupkNNH3Gv4vtEHyPULezDb5 ...
- KNN 算法-实战篇-如何识别手写数字
公号:码农充电站pro 主页:https://codeshellme.github.io 上篇文章介绍了KNN 算法的原理,今天来介绍如何使用KNN 算法识别手写数字? 1,手写数字数据集 手写数字数 ...
- python机器学习识别手写数字
手写数字识别 关注公众号"轻松学编程"了解更多. 导包 import numpy as np import matplotlib.pyplot as plt %matplotlib ...
随机推荐
- zeroc ICE 使用案例
此处案例将ICE接口当做单servant使用(ICE自带端口复用的多servant,过于复杂,此处不讨论) 使用ICE较为方便的地方时 可以编写 ice中间代码,然后由官方工具转换为目标平台代码(通过 ...
- 【音乐爬虫】Python爬虫-selenium+browsermob-proxy 解决动态网页 js渲染问题
1.一般的python爬虫很简单,直接请求对应网址,解析返回的数据即可,但是有很多网站的数据的js动态渲染的,你直接请求是得不到对应的数据的 这时就需要其它手段来处理了. 2.以一个例子来说明,整个过 ...
- RHSA-2018:3665-重要: NetworkManager 安全更新
[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...
- 极简 Node.js 入门 - 4.5 双工流
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- 多测师讲解python函数 _zip_高级讲师肖sir
# zip函数 #zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存.1.使用zip讲两个列表打印出来的结果是 ...
- day31 Pyhton 面向对象的基础 三大特性
一.内容回顾 封装 1.概念 笔记 2.__名字 在类的外部就不能用了 3.私有化的 不能被子类继承,也不能在其他任何类中调用 三个装饰器方法(装饰类中的方法) 1.不被修饰的 普通方法,会使用对象 ...
- CVE-2010-2883-CoolType.dll缓冲区溢出漏洞分析
前言 此漏洞是根据泉哥的<漏洞战争>来学习分析的,网上已有大量分析文章在此只是做一个独立的分析记录. 复现环境 操作系统 -> Windows XP Sp3 软件版本 -> A ...
- kafka-伪集群搭建
一.简介 Apache Kafka是一个快速.可扩展的.高吞吐的.可容错的分布式"发布-订阅"消息系统,使用Scala与Java语言编写,能够将消息从一个端点传递到另一个端点, ...
- centos8安装fastdfs6.06集群方式三之:storage的安装/配置/运行
一,查看本地centos的版本 [root@localhost lib]# cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core) 说 ...
- SQL 查询当天,本月,本周的记录 sql 查询日期
SELECT * FROM 表 WHERE CONVERT(Nvarchar, dateandtime, 111) = CONVERT(Nvarchar, GETDATE(), 111) ORDE ...