R语言和分类(1)
1.什么是分类
分类与回归问题一致,都属于有监督(指导)学习,指导回归的因变量是一列数,指导分类的是几个因变量。通过训练数据集训练出一个模型,然后预测其他数据集的类属,这就是分类的目的。
聚类与分类的差别就在于,聚类没有指导,只是看数据本身的聚集情况,来确定类别归属。
在经典统计中,分类被称为判别分析。最近学习需要,梳理一下经典统计的判别分析方法和R语言实现。
2.距离判别分析
首先利用训练数据进行训练,得出模型。计算样品到多个总体的马氏距离,然后根据距离的大小判断类别归属。
R语言实现
加载距离判别函数
library(WMDB)
#用法
wmd(TrnX, TrnG, Tweight = NULL, TstX = NULL, var.equal = F)
- TrnX 指训练样本集,要求数据框或矩阵形式
- TrnG 要分的类,要求数据形式是factor
- TstX 为测试集
示例
以R自带的iris数据为例
library(WMDB) #加载函数
X=iris[,1:4]
G=gl(3,50)
wmd(X,G) #对原数据判别分析
结果:
[1] “num of wrong judgement”
[1] 69 73 78 84 107 130 134 135
[1] “samples divided to”
[1] 3 3 3 3 2 2 2 2
[1] “samples actually belongs to”
[1] 2 2 2 2 3 3 3 3
Levels: 1 2 3
[1] “percent of right judgement”
[1] 0.9466667
3. fisher判别分析
fisher法不对总体分布有要求,即对于多个总体G1,G2…Gn,找到能使各个总体间方差和最大,各个总体内方差和最小的线性组合:
y
=
c
1
x
1
+
c
2
x
2
+
.
.
.
.
.
+
c
p
x
p
y=c1x1+c2x2+.....+cpxp
y=c1x1+c2x2+.....+cpxp
求出一个或多个判别函数之后,将观测值代入判别函数,求出y值,对比到各类中心距离,即可确定归类。
每个观测值代入函数都可以求得两个系数,利用这两个系数即可实现可视化。这两个系数即是多维数据在二维空间的投影。
library(MASS)
m = sample(1:150,10)
w = lda(Species~.,data=iris[-m,])
w
函数会返回各个变量的LD1和LD2值
如果
plot(w)
则会输出以LD1为横坐标LD2为纵坐标的图像
现在我们进行样本回判,看看误判率有多少
H = predict(w)
现在的H是一个list,包含颜色、LD值、posterior三部分,我们需要提取出样本颜色部分进行判断
a = data.frame(H$class,iris$Species)#原始与判断的对比
1-sum(diag(prop.table(table(a))))#错判率
最后判断剩余样本
predict(w,iris[m,])
判别可视化
library(ggplot2)
b = rownames(iris)
data = cbind(iris[-m,1:4],data.frame(H$x)
p = ggplot(data,aes(LD1,LD2))
p+geom_point(aes(color=Species))+geom_text(label=b)