scikit-learn 支持向量机实现手写体识别

news/2024/9/5 19:10:01

随时代码,阅读笔记


%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets


digits = datasets.load_digits() # 加载数据



# 把数据所代表的图片显示出来
images_and_labels = list(zip(digits.images, digits.target))
plt.figure(figsize=(8, 6), dpi=200)
for index, (image, label) in enumerate(images_and_labels[:8]):
    plt.subplot(2, 4, index + 1)
    plt.axis('off')
    plt.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')
    plt.title('Digit: %i' % label, fontsize=20)
    


print("shape of raw image data: {0}".format(digits.images.shape))
print("shape of data: {0}".format(digits.data.shape))


#shape of raw image data: (1797, 8, 8)
#shape of data: (1797, 64)


# 把数据分成训练数据集和测试数据集
from sklearn.cross_validation import train_test_split
Xtrain, Xtest, Ytrain, Ytest = train_test_split(digits.data, digits.target, test_size=0.20, random_state=2);

# 使用支持向量机来训练模型
from sklearn import svm
clf = svm.SVC(gamma=0.001, C=100., probability=True)
clf.fit(Xtrain, Ytrain);



# 评估模型的准确度
from sklearn.metrics import accuracy_score
Ypred = clf.predict(Xtest);
accuracy_score(Ytest, Ypred)
clf.score(Xtest, Ytest)

# 查看预测的情况
fig, axes = plt.subplots(4, 4, figsize=(8, 8))
fig.subplots_adjust(hspace=0.1, wspace=0.1)

for i, ax in enumerate(axes.flat):
    ax.imshow(Xtest[i].reshape(8, 8), cmap=plt.cm.gray_r, interpolation='nearest')
    ax.text(0.05, 0.05, str(Ypred[i]), fontsize=32,
            transform=ax.transAxes,
            color='green' if Ypred[i] == Ytest[i] else 'red')
    ax.text(0.8, 0.05, str(Ytest[i]), fontsize=32,
            transform=ax.transAxes,
            color='black')
    ax.set_xticks([])
    ax.set_yticks([])

# Xtest[4] 的各种可能性
clf.predict_proba(Xtest[4].reshape(1, -1))


# 保存模型参数
from sklearn.externals import joblib
joblib.dump(clf, 'digits_svm.pkl');

# 导入模型参数,直接进行预测
clf = joblib.load('digits_svm.pkl')
Ypred = clf.predict(Xtest);
clf.score(Xtest, Ytest)

8x8的图像大小,还好,如果图像太大,直接使用像素值,分类结果并不好,需要降维处理,结合PCA。


http://www.niftyadmin.cn/n/1414391.html

相关文章

insert()

insert() 用于向列表的指定位置插入元素,如下,表示在索引为1的位置插入元素e In [38]: l [a, b, c]In [39]: l.insert(1, e)In [40]: l Out[40]: [a, e, b, c] 转载于:https://www.cnblogs.com/pzk7788/p/10186564.html

条款19:定义class就相当于定义一个个的内置类型

下面的条框应该是谨记的: 1. 新的type应该如何创建与销毁2. 对象的初始化与赋值应该有什么样的区别3. 新type的对象如果被pass-by-value,有什么影响?4. 什么事新type的合法值5. 新的type需要什么样的转换6. 什么样的操作符和函数对于这个type…

scikit-learn 逻辑回归实现信用卡欺诈检测

读书笔记 import numpy as np import pandas as pd import matplotlib.pyplot as pltdata pd.read_csv(creditcard.csv)#data.head(10)print (data.shape)count_class pd.value_counts(data[Class],sort True).sort_index()print (count_class)from sklearn.preprocessing i…

Delphi程序员如何找到高薪的工作?[转]

转自:http://hi.baidu.com/rarnu/blog/item/3b8d630998015fcb3bc76397.html 本文翻译自《美国优秀经理观念大全修订本》 我想现在没有什么比做一个软件工程师更能赚钱的了,当然了,明星除外。在美国,一个优秀的软件工程师,就算在一…

详谈 Spring 中的 IOC 和 AOP

这篇文章主要讲 Spring 中的几个点,Spring 中的 IOC,AOP,下一篇说说 Spring 中的事务操作,注解和 XML 配置。 Spring 简介 Spring 是一个开源的轻量级的企业级框架,其核心是反转控制 (IoC) 和面向切面 (AOP) 的容器框架…

(转)Spring事务配置的五种方式

前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识。通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的。 总结如下: Spring配置文件中关于事…

云存储期末复习

根据提供给用户的存储结构进行归类,云存储可分为“非可管理型云存储“与”可管理型云存储“ 非可管理性呈现一个可以立即使用的磁盘驱动器,面向普通用户;限定了存储容量和使用方式使用成本低,操作简单可管理型则需要对原生虚拟化磁…

Web APi入门之基本操作(一)

最近学习了下WebApi,WebApi是RESTful风格,根据请求方式决定操作。以博客的形式写出来,加深印象以及方便以后查看和复习。 1、首先我们使用VS创建一个空的WebApi项目 2、新建实体以及控制器类 1 public class Product 2 { 3 p…