scikit learn 支援向量機實現手寫體識別

2021-08-28 02:54:42 字數 2224 閱讀 4125

隨時**,閱讀筆記

%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: ".format(digits.images.shape))

print("shape of data: ".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。

scikit learn 筆記之支援向量機

支援向量機是一種經典的分類演算法,其原理是找到一條決策邊界使其距離兩個最近的不同類別的點最遠。對於線性可分的資料集,可以使用線性分類器進行分類,對於線性不可分函式,需要將資料集嘗試通過函式變換對映到高維空間,利用核函式替代內積,求解最優 alpha 隨後求出權重w ww和截距b bb,最終求得決策邊...

分類學習 支援向量機(Scikit learn)

手寫體數字識別 1 手寫體資料讀取 from sklearn.datasets import load digits digits load digits 獲得的手寫體資料儲存在digits變數中 print digits.data.shape 2 資料分割 from sklearn.cross v...

支援向量機專題 線性支援向量機

原文 當資料線性不可分時,使用硬間隔支援向量機很難得到理想的結果。但是如果資料近似線性可分,可以採用軟間隔支援向量機 線性支援向量機 進行分類。這通常適用於有少量異常樣本的分類,如果使用線性支援向量機,它會盡量使得所有訓練樣本都正確,如下圖所示。顯然這並不是最好的結果,軟間隔支援向量機可以權衡 間隔...