R与非线性分类模型

Neural Networks


我们在训练模型的时候,当我们带有label的对象输入到模型的时候,隐含层经过特征计算,将这些对象分到它们所对应的类别内
那么在做预测的时候,隐含层就会按照训练好的权重表达式,计算预测值的特征,做出判断进行分类

f(x)是预测时的函数,l是第l类别,i是指第i个样本,上式说的是第i个样本应该分为哪一个类别,则把i样本的特征值带入函数里面计算

R:

nnetMod <- nnet(Class ~ NumCI + CI.1960, 
data = training[pre2008,], 
size = 3, decay = .1) 

 predict(nnetMod, newdata = head(testing))

朴素贝叶斯

利用贝叶斯先验信息,对分类做判断



简而言之贝叶斯分类的原理就是,比方说有两个框,A框有7个红球,3个黑球;B框有2个红球,8个黑球
那么我已知抽取到了红球,那么该红球来自于哪个框的?
根据贝叶斯理论,已知红球,分别来自于A框和B框的概率作比较,哪个大就分到哪一个
分类既是根据这个原理,比较样本来自哪个类别的概率大
R:

library(klaR) 
nBayesFit <- NaiveBayes(Class ~ ., 
data = nbTraining[pre2008,], 
## Should the non-parametric estimate 
## be used? 
usekernel = TRUE, 
## Laplace correction value + fL = 2) 

predict(nBayesFit, newdata = head(nbTesting)) 

SVM


正如上图所述,SVM最大的作用是寻找一个超平面,区分不同类别
其实这可以转换成一个最优化问题,也就是说对于二分类问题,我两个类的数据点到这个超平面的距离和要最短



那么判定条件是利用不等式的性质,把要预测的数据点带入超平面方程,大于0为一类;小于0为另一类

R:

set.seed(202) 
sigmaRangeReduced <- sigest(as.matrix(training[,reducedSet])) 
svmRGridReduced <- expand.grid(.sigma = sigmaRangeReduced[1], 
.C = 2^(seq(-4, 4))) 
set.seed(476) 
svmRModel <- train(training[,reducedSet], training$Class, 
method = "svmRadial", 
metric = "ROC", 
preProc = c("center", "scale"), 
tuneGrid = svmRGridReduced, 
fit = FALSE, 
trControl = ctrl)

library(kernlab) 
 predict(svmRModel, newdata = head(training[-pre2008, reducedSet]), 
type = "prob") 

高斯核函数

这一部分参考:https://blog.csdn.net/Invokar/article/details/80277334
在SVM中,如果是非线性可分的,那么我们对于这样的问题可采用核函数的方法


这就是高斯核函数的表达式
对于二维高斯分布:

公式

离中心越近,y值就越接近于1,离中心越远,y值就越接近0
那么我们把二维高斯分布投影到二维平面上,即同心圆:

那么分类问题可以这样讨论,接近于红圈的点归为一类;接近于蓝圈的点归为另一类
因此,在分类中,在红色圈附近选取若干特征点(比方说3个)

那么在测试集中的新点带入高斯核函数分类:

其中,特征点即为上式的li
那么新点越接近这三个特征点的归为一类;远离的归为另一类

归纳一下,高斯核的目的就是把低维不可分的类别映射到高维可分

你可能感兴趣的:(R与非线性分类模型)