Liz's Blog

就是要學R #16:機器學習之Support Vector Machine(SVM)實作篇

| Comments

分類演算法算是過去我比較沒接觸過的領域,累積到現在也學了K Nearest Neighbor(KNN)決策樹、隨機森林,有越來越熟悉的感覺。

Udemy
課程名稱:Data Science and Machine Learning Bootcamp with R
講師:Jose Portilla

Support Vector Machines (SVM)可應用於迴歸分析及分類、密度預測等,詳細可參考這篇

1.使用iris鳶尾花來做分類練習

library(ISLR)
head(iris)

2.下載並載入e1071套件,其中包含許多演算法函式,SVM是其中之一

install.packages('e1071')
library(e1071)
help(svm)

3.和之前學過的演算法類似,svm(formula=,data=)

model <- svm(Species ~ ., data=iris)
summary(model)

4.預測(先前都是把資料分成訓練及測試組,但由於這是個小樣本數,講師直接用預測以及真實結果做對比)

predicted.values <- predict(model,iris[1:4])
table(predicted.values,iris[,5])

5.微調改善模型(從前幾個步驟中可以看到summary(model)的cost=1及gamma=0.25),這兩個參數的調校會牽涉到模型的好壞,詳細可參考這篇

#使用tune()來找到最適合的參數
tune.results <- tune(svm,train.x=iris[1:4],train.y=iris[,5],kernel='radial',ranges=list(cost=10^(-1:2), gamma=c(.5,1,2)))

#找到cost=1及gamma=0.5為最適合參數
summary(tune.results)

#使用cost=1及gamma=0.5建立模型
tuned.svm <- svm(Species ~ ., data=iris, kernel="radial", cost=1, gamma=0.5)
summary(tuned.svm)

#看結果和沒有調整前是一樣的,有可能是資料太少造成的
tuned.predicted.values <- predict(tuned.svm,iris[1:4])
table(tuned.predicted.values,iris[,5])

1.使用Lending Club上的資料,通常借錢的人都會希望借給會還錢的人,因此透過這個資料集來練習找到有哪些特質的人比較會還錢。共有9578個樣本,14個變數。

loans <- read.csv('loan_data.csv')
str(loans)
summary(loans)

#將下列變數轉成類別型資料
loans$credit.policy <- factor(loans$credit.policy)
loans$inq.last.6mths <- factor(loans$inq.last.6mths)
loans$delinq.2yrs <- factor(loans$delinq.2yrs)
loans$pub.rec <- factor(loans$pub.rec)
loans$not.fully.paid <- factor(loans$not.fully.paid)

2.使用ggplot2來探索資料

library(ggplot2)

#利用直方圖來看fico信用分數及是否還清的分佈
ggplot(loans,aes(x=fico)) + geom_histogram(aes(fill=not.fully.paid),color='black',bins=40,alpha=0.5) + scale_fill_manual(values = c('green','red')) + theme_bw()

#利用柱狀圖來看借錢用途及是否還清的分佈
ggplot(loans,aes(x=factor(purpose))) + geom_bar(aes(fill=not.fully.paid),position = "dodge") + theme_bw() + theme(axis.text.x = element_text(angle = 90, hjust = 1))

#利用散佈圖來看信用分數及利息的分佈
ggplot(loans,aes(int.rate,fico)) +geom_point() + theme_bw()

#利用散佈圖來看信用分數、利息及是否還清的分佈
ggplot(loans,aes(int.rate,fico)) +geom_point(aes(color=not.fully.paid),alpha=0.3) + theme_bw()

3.建立模型

#使用caTools套件來將樣本分成訓練組及測試組資料
library(caTools)
set.seed(101)
spl = sample.split(loans$not.fully.paid, 0.7)
train = subset(loans, spl == TRUE)
test = subset(loans, spl == FALSE)

#使用e1071套件,帶入svm函式建模(先用預設來做)
library(e1071)
model <- svm(not.fully.paid ~ .,data=train)
summary(model)

#看預測及實際的差異
predicted.values <- predict(model,test[1:13])
table(predicted.values,test$not.fully.paid)

4.微調模型(本來預設cost=1及gamma=0.01724138)

tune.results <- tune(svm,train.x=not.fully.paid~., data=train,kernel='radial',ranges=list(cost=c(1,10), gamma=c(0.1,1)))
model <- svm(not.fully.paid ~ .,data=train,cost=10,gamma = 0.1)
predicted.values <- predict(model,test[1:13])
table(predicted.values,test$not.fully.paid)

【延伸閱讀】
1.就是要學R #1:Basic 基礎篇
2.就是要學R #2:Matrix 矩陣篇
3.就是要學R #3:Data Frame 資料框架篇
4.就是要學R #4:List 列表篇
5.就是要學R #5:Import & Export 匯入匯出篇(csv & excel)
6.就是要學R #6:Import & Export 匯入匯出篇(SQL & web scraping)
7.就是要學R #7:R programming 基礎篇
8.就是要學R #8:R Programming 進階篇
9.就是要學R #9:資料前處理篇(dplyr、tidyr)
10.就是要學R #10:ggplot2幫你搞定資料視覺化
11.就是要學R #11:資料視覺化應用篇(ggplot2、Plotly)
12.就是要學R #12:機器學習之線性迴歸實作篇
13.就是要學R #13:機器學習之邏輯迴歸實作篇
14.就是要學R #14:機器學習之K Nearest Neighbor(KNN)實作篇
15.就是要學R #15:機器學習之決策樹、隨機森林實作篇
16.就是要學R #16:機器學習之Support Vector Machine(SVM)實作篇
17.就是要學R #17:機器學習之K Means Clustering實作篇
18.就是要學R #18:機器學習之自然語言處理(NLP)實作篇
19.就是要學R #19:機器學習之類神經網路(Neural Net)實作篇

Comments

comments powered by Disqus