本篇博客是使用機器學習自帶的手寫字體數據集來學習監督式機器學習
import matplotlib.pyplot as plt
import pylab
import numpy as np
from sklearn import datasets,svm,metrics
digits = datasets.load_digits()
#digits: bunch類型
print(type(digits))
#digits 包含的數據結構,字典類型數據key,value
print('digits.keys() = ',digits.keys())
#imgaes 是一個三維矩陣1797 張 8 * 8的圖片
print('digits.images.shape = ',digits.images.shape)
print('digits.images = ',digits.images)
#plt.gray()
#plt.matshow(digits.images[0])
#plt.show()
#data中包含1797個樣本,每個樣本包括8*8像素的圖像,其實就是將8*8 的images按行展開成一行
print('digits.data.shape = ',digits.data.shape)
print('digits.data = ',digits.data)
#target 是一個1797維度的Vector,指明每張圖片的標籤,也就是每張圖片代表的數字
print('digits.target.shape = ',digits.target.shape)
print('digits.target = ',digits.target)
#數據集中所有標籤值,[0,1,2,3,4,5,6,7,8,9]
print('digits.target_names.shape = ',digits.target_names.shape)
print('digits.target_names = ',digits.target_names)
#print('digits.DESCR = ',digits.DESCR)
#zip是組合稱爲一個tuple,然後變成一個列表,即建立training和label的對應關係
images_and_labels = list(zip(digits.images,digits.target))
for index, (image, label) in enumerate(images_and_labels[:4]):
#subplot的含義是將圖分成一個2行4列的區域,然後隨着index變化來顯示圖片
plt.subplot(2, 4, index + 1)
#關掉圖像的座標
plt.axis('off')
#image是要繪製的圖像或者數組,cmp是顏色圖譜,
plt.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')
#標題
plt.title('Training: %i' % label)
plt.show()
n_samples = len(digits.images)
print('number of sample:%s'% n_samples)
data = digits.images.reshape((n_samples,-1))
# Create a classifier: a support vector classifier
classifier = svm.SVC(gamma = 0.001)
classifier.fit(data[:int(n_samples/2)],digits.target[:int(n_samples/2)])
expected = digits.target[int(n_samples/2):]
predicted = classifier.predict(data[int(n_samples/2):])
print("Classification report for classifier %s:\n%s\n"
% (classifier, metrics.classification_report(expected, predicted)))
print("Confusion matrix:\n%s" % metrics.confusion_matrix(expected, predicted))
images_and_predictions = list(zip(digits.images[int(n_samples / 2):], predicted))
for index, (image, prediction) in enumerate(images_and_predictions[:4]):
plt.subplot(2, 4, index + 5)
plt.axis('off')
plt.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')
plt.title('Prediction: %i' % prediction)
plt.show()
有關基本的數據結構在上篇博客已經介紹,這裏直接給出結果。