2024-03-11 手寫數(shù)字識(shí)別案例

使用sklearn中自帶的手寫數(shù)字?jǐn)?shù)據(jù)集

from sklearn.datasets import load_digits
digits = load_digits()
digits.images.shape
(1797, 8, 8)
import matplotlib.pyplot as plt
fig,axes = plt.subplots(10,10,figsize=(8,8),
                        subplot_kw={'xticks':[], 'yticks':[]},
                        gridspec_kw=dict(hspace=0.1,wspace=0.1))
for i, ax in enumerate(axes.flat):
    ax.imshow(digits.images[i], cmap='binary', interpolation='nearest')
    ax.text(0.05, 0.05, str(digits.target[i]), 
        transform=ax.transAxes, color='green')
X = digits.data
X.shape
(1797, 64)
y = digits.target
y.shape
(1797,)

圖(略)
將原本1797個(gè) 8像素 \times 8像素 的數(shù)據(jù)水醋,平鋪成64的一維數(shù)組潘懊,[n_samples, n_features] = (1797, 64)
即1797個(gè)樣本筋栋,64個(gè)特征
使用流形學(xué)習(xí)算法中的Isomap對(duì)64維的數(shù)據(jù)進(jìn)行降維

from sklearn.manifold import Isomap
iso = Isomap(n_components=2)
iso.fit(digits.data)
data_projected = iso.transform(digits.data)
data_projected.shape
(1797, 2)
plt.scatter(data_projected[:,0], data_projected[:,1], c=digits.target, edgecolor='none', alpha=0.5, cmap=plt.cm.get_cmap('Spectral',10))
plt.colorbar(label='digit label', ticks=range(10))
plt.clim(-0.5, 9.5)
41ad91dae62d46a1ab5ae371427cfa67.png

觀察各個(gè)數(shù)字在參數(shù)空間中的分離程度還可以,用一個(gè)非常簡(jiǎn)單的有監(jiān)督分類算法就可以完成任務(wù)斜棚。
將數(shù)據(jù)分成訓(xùn)練集合測(cè)試集,然后用高斯樸素貝葉斯模型來(lái)擬合义钉,準(zhǔn)確率83%

Xtrain, Xtest, ytrain, ytest = train_test_split(X, y, random_state=0)
from sklearn.naive_bayes import GaussianNB
model = GaussianNB()
model.fit(Xtrain, ytrain)
y_model = model.predict(Xtest)
from sklearn.metrics import accuracy_score
accuracy_score(ytest, y_model)

計(jì)算混淆矩陣(confusion matrix)

from sklearn.metrics import confusion_matrix
mat = confusion_matrix(ytest, y_model)
sns.heatmap(mat, square=True, annot=True, cbar=False)
plt.xlabel('predicted value')
plt.ylabel('true value')
7215af5184474bceaa5baa439168fc01.png

將識(shí)別錯(cuò)誤的標(biāo)記出來(lái):

fig,axes = plt.subplots(10,10,figsize=(8,8),
                        subplot_kw={'xticks':[], 'yticks':[]},
                        gridspec_kw=dict(hspace=0.1,wspace=0.1))
test_images = Xtest.reshape(-1, 8, 8)
for i, ax in enumerate(axes.flat):
    ax.imshow(digits.images[i], cmap='binary', interpolation='nearest')
    ax.text(0.05, 0.05, str(y_model[i]), 
        transform=ax.transAxes, 
        color='green' if (ytest[i] == y_model[i]) else 'red')

使用其他幾種算法試一試:

from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
svm_model = SVC(gamma='auto')
svm_model.fit(Xtrain, ytrain)
y_pred_svm = svm_model.predict(Xtest)
print("SVM Accuracy: ", accuracy_score(ytest, y_pred_svm))

from sklearn.ensemble import RandomForestClassifier
rf_model = RandomForestClassifier(n_estimators=100)
rf_model.fit(Xtrain, ytrain)
y_pred_rf = rf_model.predict(Xtest)
print("Random Forest Accuracy: ", accuracy_score(ytest, y_pred_rf))

from sklearn.neighbors import KNeighborsClassifier
knn_model = KNeighborsClassifier(n_neighbors=3)
knn_model.fit(Xtrain, ytrain)
y_pred_knn = knn_model.predict(Xtest)
print("KNN Accuracy: ", accuracy_score(ytest, y_pred_knn))

import xgboost as xgb
xgb_model = xgb.XGBClassifier()
xgb_model.fit(Xtrain, ytrain)
y_pred_xgb = xgb_model.predict(Xtest)
print("XGBoost Accuracy: ", accuracy_score(ytest, y_pred_xgb))

使用了支持向量機(jī)(SVM)、隨機(jī)森林(Random Forest)边酒、K最近鄰(KNN)氓涣、梯度提升決策樹(shù)(GBDT)XGBoost

SVM Accuracy:  0.4866666666666667
Random Forest Accuracy:  0.9777777777777777
KNN Accuracy:  0.9866666666666667
XGBoost Accuracy:  0.9555555555555556

重點(diǎn)關(guān)注一下缆毁,導(dǎo)入模型到涂、初始化模型脊框、擬合數(shù)據(jù)、預(yù)測(cè)數(shù)據(jù)践啄,這個(gè)步驟:

graph LR
    導(dǎo)入模型 --> 初始化模型 --> 擬合數(shù)據(jù) --> 預(yù)測(cè)數(shù)據(jù)

參考:
[1]美 萬(wàn)托布拉斯 (VanderPlas, Jake).Python數(shù)據(jù)科學(xué)手冊(cè)[M].人民郵電出版社,2018.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末浇雹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子屿讽,更是在濱河造成了極大的恐慌昭灵,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伐谈,死亡現(xiàn)場(chǎng)離奇詭異烂完,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)诵棵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門抠蚣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人履澳,你說(shuō)我怎么就攤上這事嘶窄。” “怎么了距贷?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵柄冲,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我忠蝗,道長(zhǎng)现横,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任什湘,我火速辦了婚禮长赞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘闽撤。我一直安慰自己得哆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布哟旗。 她就那樣靜靜地躺著贩据,像睡著了一般栋操。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上饱亮,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天矾芙,我揣著相機(jī)與錄音,去河邊找鬼近上。 笑死剔宪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的壹无。 我是一名探鬼主播葱绒,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼斗锭!你這毒婦竟也來(lái)了地淀?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤岖是,失蹤者是張志新(化名)和其女友劉穎帮毁,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體豺撑,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡烈疚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了聪轿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胞得。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖屹电,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情跃巡,我是刑警寧澤危号,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站素邪,受9級(jí)特大地震影響外莲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜兔朦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一偷线、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沽甥,春花似錦声邦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)邓了。三九已至,卻和暖如春媳瞪,著一層夾襖步出監(jiān)牢的瞬間骗炉,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工蛇受, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留句葵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓兢仰,卻偏偏與公主長(zhǎng)得像乍丈,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子旨别,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容