正文
digits
=
datasets
.
load_digits
()
# 这里我们感兴趣的数据是不同灰度的 8x8 个小格子组成的图像
# 如果我们直接使用图像进行处理,就需要使用 pylab.imread 来加载图像数据,而且这些图像数据必须都是 8x8 的格式
# 对于这个 dataset 中的图像,dataset.target 给出了它们实际对应的数字
images_and_labels
=
list
(
zip
(
digits
.
images
,
digits
.
target
))
for
index
,
(
image
,
label
)
in
enumerate
(
images_and_labels
[:
4
]):
plt
.
subplot
(
2
,
4
,
index
+
1
)
plt
.
axis
(
'off'
)
plt
.
imshow
(
image
,
cmap
=
plt
.
cm
.
gray_r
,
interpolation
=
'nearest'
)
plt
.
title
(
'Training: %i'
%
label
)
# 为了使用分类器,需要将每个表示手写图像的 8x8 数字转换为一个数字数组
# 这样 digits.images 就变为了(采样,采样特性)的一个矩阵
n_samples
=
len
(
digits
.
images
)
data
=
digits
.
images
.
reshape
((
n_samples
,
-
1
))
print
(
digits
.
images
[
0
])
print
(
data
[
0
])
# 创建一个分类器,这里 gamma 的值是给定的,可以通过 grid search 和 cross validation 等技术算出更好的值。
# 下面的链接有个例子是自己算 gamma:
# http://efavdb.com/machine-learning-with-wearable-sensors/
classifier
=
svm
.
SVC
(
gamma
=
0.001
)
# 用前半部分数据训练分类器
classifier
.
fit
(
data
[:
n_samples
/
2
],
digits
.
target
[:
n_samples
/
2
])
# 对后半部分数据使用训练好的分类器进行识别
expected
=
digits
.
target
[