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