svm解决兵王问题_机器学习: svm
本周學(xué)習(xí)內(nèi)容為SVM的基本原理和運(yùn)用。
參考資料:耳東陳:零基礎(chǔ)學(xué)SVM—Support Vector Machine(一)
1、什么是SVM
SVM的全稱(chēng)是Support Vector Machine,即支持向量機(jī),主要用于解決模式識(shí)別領(lǐng)域中的數(shù)據(jù)分類(lèi)問(wèn)題,屬于有監(jiān)督學(xué)習(xí)算法的一種。SVM要解決的問(wèn)題可以用一個(gè)經(jīng)典的二分類(lèi)問(wèn)題加以描述。如圖1所示,紅色和藍(lán)色的二維數(shù)據(jù)點(diǎn)顯然是可以被一條直線分開(kāi)的,在模式識(shí)別領(lǐng)域稱(chēng)為線性可分問(wèn)題。然而將兩類(lèi)數(shù)據(jù)點(diǎn)分開(kāi)的直線顯然不止一條,這是線性分類(lèi)器的特征。不同的分類(lèi)方案,分類(lèi)直線到兩類(lèi)向量之間的面積是不一樣的,術(shù)語(yǔ)稱(chēng)為“決策面”,svm試圖找到一個(gè)直線量?jī)蓚€(gè)類(lèi)分類(lèi),并且面積最大的最優(yōu)的解,而這個(gè)直線取決于兩個(gè)類(lèi)型最邊界的三個(gè)向量。
線性分類(lèi)器svm分類(lèi)器svm數(shù)學(xué)模型和約束svm的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):模型訓(xùn)練魯棒性很強(qiáng),對(duì)特征向量、噪音數(shù)據(jù)不敏感,預(yù)測(cè)快,占內(nèi)存少。
缺點(diǎn):訓(xùn)練耗時(shí),時(shí)間復(fù)雜度是O(N的立方),至少是N的平方,對(duì)于太多維度的尋里昂非常耗時(shí)和耗費(fèi)資源。
svm是一種非常優(yōu)秀的分類(lèi)器,老師說(shuō)在深度學(xué)習(xí)出現(xiàn)之前,它統(tǒng)治機(jī)器學(xué)習(xí)領(lǐng)域20年。
2、svm的優(yōu)化
現(xiàn)實(shí)場(chǎng)景中,使用svm訓(xùn)練可能遇到很多的問(wèn)題,比如奇怪的數(shù)據(jù),比如異常數(shù)據(jù)outlier的樣本數(shù)據(jù),一種分類(lèi)中存在另一種分類(lèi)的樣本,我們需要通過(guò)帶松弛變臉的svm進(jìn)行處理,避免無(wú)解。松弛變量是常數(shù)C,常數(shù)C可控制松弛的量度。
帶松弛變量的svm松弛變量數(shù)學(xué)模型。SVM雖然解決的是二分類(lèi)問(wèn)題,但可以擴(kuò)展到多個(gè)分類(lèi)問(wèn)題。
1)、可以對(duì)每個(gè)需要識(shí)別的類(lèi)型分別訓(xùn)練一個(gè)分類(lèi)模型,用于預(yù)測(cè)的時(shí)候,哪個(gè)分類(lèi)器的預(yù)測(cè)值高(wtix),就取哪個(gè)。
2)、對(duì)K個(gè)類(lèi)別,訓(xùn)練k*(k-1)/2個(gè)Svm,預(yù)測(cè)的時(shí)候采用投票方式?jīng)Q定,哪個(gè)次數(shù)多選哪個(gè)。
以上方法適用于每種分類(lèi)模型。
3、作業(yè):
用特征數(shù)據(jù)預(yù)測(cè)蘑菇是否有毒。
import pandas as pd import numpy as np# 導(dǎo)入數(shù)據(jù) mush_df = pd.read_csv('./data/mushrooms.csv')# 將值從字母轉(zhuǎn)換為 mush_df_encoded = pd.get_dummies(mush_df) ##獨(dú)熱(ont-hot)編碼,將離散的值轉(zhuǎn)(ABC)換為數(shù)字mush_df.head()# 將特征和類(lèi)別標(biāo)簽分布賦值給 X 和 y X_mush = mush_df_encoded.iloc[:,2:] y_mush = mush_df_encoded.iloc[:,1] #查看特征數(shù)據(jù) X_mush.head() #查看標(biāo)簽 y_mush.head() #訓(xùn)練svm from sklearn.svm import SVC from sklearn.decomposition import PCA from sklearn.pipeline import make_pipeline# TODO pca = PCA(n_components=100, whiten=True, random_state=42) ##這里采用的核函數(shù)為線性分類(lèi)器linear,經(jīng)過(guò)測(cè)試效果比非線性的好 svc = SVC( kernel='linear',class_weight='balanced') model = make_pipeline(pca, svc) from sklearn.model_selection import train_test_split Xtrain, Xtest, ytrain, ytest = train_test_split(X_mush, y_mush, random_state=41) from sklearn.model_selection import GridSearchCV# TODO param_grid = {'svc__C': [1, 5, 10, 50]} grid = GridSearchCV(model, param_grid)%time grid.fit(Xtrain, ytrain) print(grid.best_params_) # TODO model = grid.best_estimator_ yfit = model.predict(Xtest) from sklearn.metrics import classification_report print(classification_report(ytest, yfit)) ##結(jié)果展示,全是1。。。 precision recall f1-score support0 1.00 1.00 1.00 10471 1.00 1.00 1.00 984avg / total 1.00 1.00 1.00 2031總結(jié)
以上是生活随笔為你收集整理的svm解决兵王问题_机器学习: svm的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 简易有效Api接口防攻击策略
- 下一篇: 锁屏界面问题总结