支持向量机(SVM

应用于高维数据、避免维度灾难,用来处理高纬度特征空间的分类问题

线性支持向量机:

具有较大边缘的决策边界比那些具有较小边缘的决策边界具有更好的泛化误差

结构风险最小化原理:需要设计最大化决策边界的边缘的线性分类器,以确保最坏情况下的泛化误差最小


距离决策边界最近的训练样本点使得式子中的等号成立,因此被称为支持向量


 

支持向量机_Java

支持向量机_Java_02转化成使下面的式子最小化


 支持向量机_Java_03


非线性支持向量机

支持向量机_Java_04

 


也可以使用核技巧,将问题映射到一个更高维的空间中,使得非线性关系看起来完全线性

核函数:将数据在转换到另一个空间的映射

支持向量机_Java_05


代码R

线性向量机(非线性可换radial)

 

library(e1071)

data(cats,package="MASS")

inputData<- data.frame(cats[, c (2,3)], response = as.factor(cats$Sex)) # response asfactor

svmfit<- svm(response ~ ., data = inputData, kernel = "linear", cost = 10, scale = FALSE) # linear svm,scaling turned OFF

print(svmfit)

plot(svmfit,inputData)

compareTable<- table (inputData$response, predict(svmfit))  # 四格表

mean(inputData$response!= predict(svmfit)) # 19.44% 错分误差

寻找最优参数

### Tuning

# Preparetraining and test data

set.seed(100) #for reproducing results

rowIndices <- 1 : nrow(inputData) #prepare row indices

sampleSize <- 0.8 * length(rowIndices) #training sample size

trainingRows <- sample (rowIndices, sampleSize) #random sampling

trainingData <- inputData[trainingRows, ] #training data

testData <- inputData[-trainingRows, ] #test data

tuned <- tune.svm(response ~., data = trainingData, gamma = 10^(-6:-1), cost = 10^(1:2)) #tune

summary (tuned) #寻找最优的γ和cost