1990 年代,Vladimir Vapnik 和他的同事在AT&T Bell 實驗室發明了 Supported vector machine(SVM)。SVM 最為人所知的就是與Random Forrest decision tree 是目前為止效率最佳的兩個演算法。本文是以 R 程式語言來實作 SVM 。


R 語句寫作

1. 讀取資料
dataset = read.csv('Position_Salaries.csv')
這裡看到 dataset 裡面是 CSV 檔案裡原始資料
點下去會看到內容

 

為了要訓練資料,我們要決定獨立變數(independent variable)和相依變數(dependent variable)。看一下這個資料內容:
獨立變數是職級(Level),相依變數是薪資(Salary)。
職級(Level)是第2行(Column 2),薪資(Salary)是第3行(Column 3)
語句是這樣:
dataset = dataset[2:3]

 

資料量過小,因此不切割成訓練資料和測試資料

2. 使用 Supported Vector Regression 模型

先安裝程式庫:e1071
install.packages('e1071')

 

安裝完畢後,在 R Studio 的右下方 Packages 會出現說明:這個程式庫包含統計學、機率相關的部分

接下來就可以使用 Supported vector regression 模型了!

library(e1071)
regressor = svm(formula = Salary ~ .,
                data = dataset,
                type = 'eps-regression',
                kernel = 'radial')

在 R 語言裡面,使用 Supported vector machine 和 Supported vector regression 都使用一樣的函式:svm()

第一個參數是預測的相依變數,這裡是薪資(Salary),其他的都是獨立變數,因此用 ~.

第二個參數是輸入的資料集合: data = dataset,

第三個參數是函式型態:這裡使用 regression,我們用 'eps-regression'以求得最小誤差

第四個參數是 SVM 使用的 Kernel function,使用 'radial'

執行後,右上方可看到物件名稱

 

點進去可看到模型參數

3. 預測結果
  模型訓練後,我們就可以用模型來預測未知的結果。在原始資料裡職級(Level)有 6、7級,但沒有 6.5 級。這裡我們就用 6.5 作輸入,使模型輸出預測數值。

y_pred = predict(regressor, data.frame(Level = 6.5))

執行後在右上方的資料可看到 職級6.5 的預測結果是 177861

 

4. 資料視覺化
我們沿用以前的 ggplot2,使用 _point() 點狀散佈圖和 _line 折線圖

library(ggplot2)
ggplot() +
  geom_point(aes(x = dataset$Level, y = dataset$Salary),
             colour = 'red') +
  geom_line(aes(x = dataset$Level, y = predict(regressor, newdata = dataset)),
            colour = 'blue') +
  ggtitle('Truth or Bluff (SVR)') +
  xlab('Level') +
  ylab('Salary')

文章標籤
全站熱搜
創作者介紹
創作者 小木屋 的頭像
小木屋

小木屋

小木屋 發表在 痞客邦 留言(0) 人氣(325)