機(jī)器學(xué)習(xí)--有監(jiān)督--支持向量機(jī)SVM

支持向量機(jī)Support vector machine,SVM是一種有監(jiān)督的機(jī)器學(xué)習(xí)算法竖般,可用于分類或者回歸硼补。本次筆記以分類任務(wù)為例主要學(xué)習(xí)。

1拇勃、簡(jiǎn)單理解

  • 假設(shè)對(duì)于特征空間的樣本坐標(biāo)分四苇,以樣本標(biāo)簽為目的,存在一個(gè)超平面方咆,將樣本分為兩大類月腋,從而最大化區(qū)分兩類樣本。該超平面即為決策邊界,而間隔就是指訓(xùn)練數(shù)據(jù)中最接近決策邊界的樣本點(diǎn)與決策邊界之間的距離罗售。

  • SVM過程:以間隔最大化為目的辜窑,讓決策邊界盡可能遠(yuǎn)離樣本。然后根據(jù)這個(gè)決策邊界進(jìn)行樣本分類預(yù)測(cè)寨躁。
    根據(jù)樣本數(shù)據(jù)的復(fù)雜程度穆碎,SVM建模的過程也有所不同,具體可分為如下三類

1.1 線性可分--硬間隔

hard margin classifier职恳,HML:此類樣本數(shù)據(jù)是最簡(jiǎn)單的情況所禀,即數(shù)據(jù)集樣本可以明顯地使用線性邊界區(qū)分開》徘眨可參考下圖色徘,分為3個(gè)步驟

  • step1:為每個(gè)類別的分布情況繪制出外輪廓多邊形;
  • step2:找出連接兩個(gè)輪廓最近的兩個(gè)數(shù)據(jù)點(diǎn)操禀,連接褂策;
  • step3:繪制出該連線的垂直平分線,即為最優(yōu)的決策邊界颓屑。而連線長度的一半即為間隔(M)

HML的特點(diǎn)是不允許有樣本點(diǎn)位于間隔區(qū)內(nèi)斤寂,即必須干凈的劃分;即不能有樣本距決策邊界的距離比間隔的長度還短揪惦,甚至在決策邊界的另一端(誤分類)

1.2 線性不可完全分--軟間隔

  • 當(dāng)兩個(gè)類別的邊界不是很明顯遍搞,或者存在離群點(diǎn)時(shí),如嚴(yán)格按照HMC器腋,會(huì)使模型過擬合溪猿,泛化能力降低。


  • soft margin classifier纫塌,SML通過設(shè)置超參數(shù) C表示允許間隔內(nèi)存在樣本的數(shù)目诊县,優(yōu)化決策邊界,提高模型的泛化能力措左。如上所示翎冲,左圖為C=0的硬間隔方法;右圖為C取最大值的分類結(jié)果媳荒;
  • 針對(duì)當(dāng)前數(shù)據(jù)集,可交叉驗(yàn)證不同C取值下的模型性能驹饺,從而確定最佳的指標(biāo)钳枕。

1.3 線性不可分-核技巧

  • 上述例子數(shù)據(jù)集的決策平面都是線性的。當(dāng)決策邊界是一個(gè)曲線等復(fù)雜模式時(shí)赏壹,使用上述的方法無法得到滿意的分類效果鱼炒;

  • 針對(duì)此類情況,支持向量機(jī)可通過核方法(kernel method)尋找到合適的非線性決策邊界蝌借∥羟疲可分為兩個(gè)步驟:



    (1)將線性不可分的數(shù)據(jù)(n個(gè)特征向量指蚁,n維)增加一個(gè)維度(enlarged kernel-induced feature space),從而成為線性可分?jǐn)?shù)據(jù)(n+1)維自晰;
    (2)在n+1 維的空間里確定合適的決策邊界(線性)凝化;然后投射到原來n維空間中,即得到我們真正需要的決策平面(非線性)

  • 常見的核方法有:Radial basis function(徑向基函數(shù))酬荞、d-th degree polynomial搓劫、Hyperbolic tangent等,但通常建議使用徑向基函數(shù)(extremely flexible)試一試混巧。該方法的超參數(shù)枪向,除了C值外,還有一個(gè)sigma咧党,在下面代碼實(shí)操中會(huì)介紹到秘蛔。

2、代碼實(shí)操

(1)示例數(shù)據(jù):預(yù)測(cè)員工是否離職

library(modeldata)
data(attrition)
# initial dimension
dim(attrition)
## [1] 1470   31
library(dplyr)
df <- attrition %>%
  mutate_if(is.ordered, factor, ordered = FALSE)
# Create training (70%) and test (30%) sets
set.seed(123) # for reproducibility
library(rsample)
churn_split <- initial_split(df, prop = 0.7, strata = "Attrition")
churn_train <- training(churn_split)
churn_test <- testing(churn_split)

(2)caret包建模

  • 如上傍衡,我們使用徑向基函數(shù)的核方法尋找非線性決策邊界深员,從而建立支持向量機(jī)模型。
  • 對(duì)于超參數(shù)σ,會(huì)自動(dòng)根據(jù)樣本數(shù)據(jù)尋找最合適的值聪舒;對(duì)超參數(shù)C辨液,可以通過交叉驗(yàn)證選擇,一般備選方案為2的指數(shù)系列值(2e-2, 2e-1,2e0,2e1,2e2...)
library(caret)
set.seed(1111) # for reproducibility
# Control params for SVM
ctrl <- trainControl(
  method = "cv",
  number = 10,
  classProbs = TRUE,  #表示返回分類概率箱残,而不是直接分類標(biāo)簽結(jié)果
  summaryFunction = twoClassSummary # also needed for AUC/ROC
)

churn_svm <- train(
  Attrition ~ .,
  data = churn_train,
  method = "svmRadial",
  preProcess = c("center", "scale"),
  trControl = ctrl,
  metric = "ROC", # area under ROC curve (AUC)
  tuneLength = 10) #遍歷C的10次取值滔迈,即從2的-2次方到2的7次方

#如下 C取4時(shí),模型最優(yōu)
churn_svm$results %>% arrange(desc(ROC)) %>% head(1)
#     sigma C       ROC      Sens      Spec      ROCSD     SensSD     SpecSD
# 1 0.009522278 4 0.8234039 0.9791767 0.2738971 0.07462533 0.02019714 0.08679811

# Plot results
ggplot(churn_svm) 
(3)測(cè)試集驗(yàn)證
pred = predict(churn_svm, churn_test)
table(pred)
# pred
# No Yes 
# 415  27
table(churn_test$Attrition)
# No Yes 
# 370  72
caret::confusionMatrix(pred, churn_test$Attrition, positive="Yes")
# Accuracy : 0.871           
# 95% CI : (0.8362, 0.9008)
# No Information Rate : 0.8371          
# P-Value [Acc > NIR] : 0.02819         
# 
# Kappa : 0.3681          
# 
# Mcnemar's Test P-Value : 5.611e-09       
#                                           
#             Sensitivity : 0.29167         
#             Specificity : 0.98378         
#          Pos Pred Value : 0.77778         
#          Neg Pred Value : 0.87711         
#              Prevalence : 0.16290         
#          Detection Rate : 0.04751         
#    Detection Prevalence : 0.06109         
#       Balanced Accuracy : 0.63773         
#                                           
#        'Positive' Class : Yes

(4)衡量特征重要性

  • SVM算法本身不提供有衡量特征重要性的計(jì)算方法被辑;
  • 可使用vip包提供的permutation test置換檢驗(yàn)的方法燎悍,隨機(jī)調(diào)整某一列(特征)值的順序,觀察預(yù)測(cè)準(zhǔn)確率是否明顯下降盼理,從而判斷特征變量的重要性谈山。
library(vip)
prob_yes <- function(object, newdata) {
  predict(object, newdata = newdata, type = "prob")[, "Yes"]
}
# Variable importance plot
set.seed(2827) # for reproducibility
vip(churn_svm, method = "permute", nsim = 5, train = churn_train,
    target = "Attrition", metric = "auc", reference_class = "Yes",
    pred_wrapper = prob_yes)
  • pdp包觀察具體某一個(gè)特征變量對(duì)于預(yù)測(cè)結(jié)果的影響
library(pdp)
features <- c("OverTime", "JobRole")
pdps <- lapply(features, function(x) {
  partial(churn_svm, pred.var = x, which.class = 2,
          prob = TRUE, plot = TRUE, plot.engine = "ggplot2") +
    coord_flip()
})
grid.arrange(grobs = pdps, nrow = 1)

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市宏怔,隨后出現(xiàn)的幾起案子奏路,更是在濱河造成了極大的恐慌,老刑警劉巖臊诊,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸽粉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡抓艳,警方通過查閱死者的電腦和手機(jī)触机,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人儡首,你說我怎么就攤上這事片任。” “怎么了蔬胯?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵对供,是天一觀的道長。 經(jīng)常有香客問我笔宿,道長犁钟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任泼橘,我火速辦了婚禮涝动,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘炬灭。我一直安慰自己醋粟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布重归。 她就那樣靜靜地躺著米愿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鼻吮。 梳的紋絲不亂的頭發(fā)上育苟,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音椎木,去河邊找鬼违柏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛香椎,可吹牛的內(nèi)容都是我干的漱竖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼畜伐,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼馍惹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起玛界,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤万矾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后慎框,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體勤众,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年鲤脏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡猎醇,死狀恐怖窥突,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情硫嘶,我是刑警寧澤阻问,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站沦疾,受9級(jí)特大地震影響称近,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哮塞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一刨秆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧忆畅,春花似錦衡未、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绊诲,卻和暖如春送粱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背掂之。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工抗俄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人板惑。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓橄镜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親冯乘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子洽胶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • 今天青石的票圈出鏡率最高的,莫過于張藝謀的新片終于定檔了梗搅。 一張滿溢著水墨風(fēng)的海報(bào)一次次的出現(xiàn)在票圈里禾唁,也就是老謀...
    青石電影閱讀 10,308評(píng)論 1 2
  • 一效览、jQuery簡(jiǎn)介 JQ是JS的一個(gè)優(yōu)秀的庫,大型開發(fā)必備荡短。在此丐枉,我想說的是,JQ里面很多函數(shù)使用和JS類似掘托,所...
    Welkin_qing閱讀 12,277評(píng)論 1 6
  • 字符串 1.什么是字符串 使用單引號(hào)或者雙引號(hào)括起來的字符集就是字符串瘦锹。 引號(hào)中單獨(dú)的符號(hào)、數(shù)字闪盔、字母等叫字符弯院。 ...
    mango_2e17閱讀 7,494評(píng)論 1 7
  • 一場(chǎng)說走就走的旅行。 簡(jiǎn)單地整理幾件必備旅行用品泪掀,7.18日早上8.00準(zhǔn)時(shí)出發(fā)了听绳,計(jì)劃一路南下然后繞西南一圈回恩...
    悠游魚閱讀 3,453評(píng)論 3 6
  • 原來看過一段話,第一厲害的人有能力沒脾氣族淮,第二厲害的人有能力有脾氣辫红,最差的是沒能力有脾氣的人。 以我最...
    涼風(fēng)豆豆閱讀 1,543評(píng)論 2 0