用SVM對(duì)手寫字母進(jìn)行分類

SVM 可用于離散因變量的分類和連續(xù)因變量的預(yù)測(cè),相對(duì)于單一的分類算法(Logistic、決策樹、KNN。樸素貝葉斯等)有更好的預(yù)測(cè)準(zhǔn)確率,因?yàn)樗梢詫⒌途S線性不可分的空間轉(zhuǎn)換為高維的線性可分空間。

基礎(chǔ)思想:支持向量機(jī)把分類問題轉(zhuǎn)化為尋找分類平面的問題,并通過最大化分類邊界點(diǎn)距離分類平面的距離來實(shí)現(xiàn)分類。

主要思想是利用某些支持向量所構(gòu)成的“超平面”,將不同類別的樣本點(diǎn)劃分,無論樣本點(diǎn)線性可分、近似線性可分或者非線性可分,都可以利用“超平面”將樣本點(diǎn)以較高的準(zhǔn)確度切割開來。

顯著優(yōu)點(diǎn):魯棒性(增加或刪除非支持向量的樣本點(diǎn),不會(huì)改變分類器的效果)
避免”維度災(zāi)難“的發(fā)生(模型不會(huì)隨數(shù)據(jù)維度提升而提高計(jì)算的復(fù)雜度)
避免過擬合,具有很好地泛化能力
解決小樣本下機(jī)器學(xué)習(xí)問題;
解決非線性問題;
無局部極小值問題(相對(duì)于神經(jīng)網(wǎng)絡(luò)等算法);

明顯缺點(diǎn):模型不適合大樣本的分類或預(yù)測(cè),內(nèi)存消耗大,會(huì)消耗大量的計(jì)算資源和
時(shí)間
對(duì)缺失樣本很敏感,建模之前清洗好,logistic Regression(邏輯回歸)
也對(duì)缺失值敏感
對(duì)參數(shù)調(diào)節(jié)和核函數(shù)的選擇敏感,原始分類器不加修改僅適用于處理二類
問題;
是黑盒模型,對(duì)計(jì)算得到的結(jié)果無法解釋
對(duì)于核函數(shù)的高維映射解釋力不強(qiáng),尤其是徑向基函數(shù);

應(yīng)用領(lǐng)域:文本分類、圖像識(shí)別、主要二分類領(lǐng)域。

分隔帶越寬,模型能將樣本點(diǎn)劃分的越清晰,模型泛化能力越強(qiáng),分類可信度越高。
SVM就是在努力尋找這個(gè)最寬的“帶”。

此數(shù)據(jù)集是當(dāng)一個(gè)用戶在設(shè)備中寫入某個(gè)字母時(shí),該設(shè)備需要準(zhǔn)確地識(shí)別并返回寫入字母的實(shí)際值,即根據(jù)字母的信息(寬度,高度,邊際)判斷屬于哪一種字母。

因?yàn)槟P蜕婕暗綉土P系數(shù)C(松弛因子的系數(shù))的影響,因此采用交叉驗(yàn)證的方法。

# 導(dǎo)入第三方模塊
from sklearn import svm
import pandas as pd
from sklearn import model_selection
from sklearn import metrics
# 讀取外部數(shù)據(jù)
letters = pd.read_csv(r'F:\letterdata.csv')
# 數(shù)據(jù)前5行
letters.head()

第一列l(wèi)etter為因變量

# 將數(shù)據(jù)拆分為訓(xùn)練集和測(cè)試集
predictors = letters.columns[1:]
X_train,X_test,y_train,y_test = model_selection.train_test_split(letters[predictors], letters.letter, 
                                                                 test_size = 0.25, random_state = 1234)
# 使用網(wǎng)格搜索法,選擇線性可分SVM“類”中的最佳C值
C=[0.05,0.1,0.5,1,2,5]
parameters = {'C':C}
parameters
grid_linear_svc = model_selection.GridSearchCV(estimator = svm.LinearSVC(),param_grid =parameters,scoring='accuracy',cv=5,verbose =1)
grid_linear_svc
# 模型在訓(xùn)練數(shù)據(jù)集上的擬合
grid_linear_svc.fit(X_train,y_train)
# 返回交叉驗(yàn)證后的最佳參數(shù)值
grid_linear_svc.best_params_, grid_linear_svc.best_score_
# 模型在測(cè)試集上的預(yù)測(cè)
pred_ linear_svc = grid_linear_svc.predict(X_test)
# 模型的預(yù)測(cè)準(zhǔn)確率
metrics.accuracy_score(y_test, pred_linear_svc)

經(jīng)過5重交叉驗(yàn)證,最佳懲罰系數(shù)為0.1,在訓(xùn)練數(shù)據(jù)集上的平均準(zhǔn)確率只有69.2%,在測(cè)試數(shù)據(jù)集上的預(yù)測(cè)準(zhǔn)確率也不足72%,說明線性可分SVM模型不太適合改數(shù)據(jù)集的擬合和預(yù)測(cè),使用非線性SVM重新建模。

# 使用網(wǎng)格搜索法,選擇非線性SVM“類”中的最佳C值
kernel=['rbf','linear','poly','sigmoid']
C=[0.1,0.5,1,2,5]
parameters = {'kernel':kernel,'C':C}
grid_svc = model_selection.GridSearchCV(estimator = svm.SVC(),param_grid =parameters,scoring='accuracy',cv=5,verbose =1)
# 模型在訓(xùn)練數(shù)據(jù)集上的擬合
grid_svc.fit(X_train,y_train)
# 返回交叉驗(yàn)證后的最佳參數(shù)值
grid_svc.best_params_, grid_svc.best_score_
# 模型在測(cè)試集上的預(yù)測(cè)
pred_svc = grid_svc.predict(X_test)
# 模型的預(yù)測(cè)準(zhǔn)確率
metrics.accuracy_score(y_test,pred_svc)

經(jīng)過5重交叉驗(yàn)證,最佳懲罰系數(shù)C為5,最佳核函數(shù)為徑向基核函數(shù),平均準(zhǔn)確率分別為97.34%,97.86%,說明非線性SVM模型更加理想。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 機(jī)器學(xué)習(xí)是做NLP和計(jì)算機(jī)視覺這類應(yīng)用算法的基礎(chǔ),雖然現(xiàn)在深度學(xué)習(xí)模型大行其道,但是懂一些傳統(tǒng)算法的原理和它們之間...
    城市中迷途小書童閱讀 1,186評(píng)論 0 11
  • 霞 雨后出現(xiàn)不知明的云 逃離后是無盡的追悔 當(dāng)下或是最好的掙脫 若干年常清晰的回憶 光 黑暗中總有一絲亮點(diǎn) 桃花后...
    瑕讀書吧閱讀 191評(píng)論 1 0
  • 風(fēng)扇呼哧呼哧放棄了嘶啞 雷雨終于落下 雨后把所有清涼放縱 葉枯黃著放下夏的掙扎 南北的路在翻騰的云下靜默 西風(fēng)無有...
    有只白色的jio閱讀 292評(píng)論 1 5
  • 個(gè)人工作總結(jié) 在忙忙碌碌中學(xué)期接近了尾聲,回顧這學(xué)期來的工作,可以用"緊張忙碌"四個(gè)字來形容,真是有喜有憂。幼兒教...
    八一胡閱讀 225評(píng)論 0 0
  • “本文參加# 印象青農(nóng),萌有感受#活動(dòng),本文承諾,文章內(nèi)容為原創(chuàng),且未在其他平臺(tái)發(fā)表過” “寶劍鋒從磨礪出,梅花...
    尼古拉斯康迪閱讀 395評(píng)論 1 4

友情鏈接更多精彩內(nèi)容