lda.sol <- lda(train, sp)计算待测样本的预测值和训练样本的回代值:> predict(lda.sol, tst)$class
[1]No
Levels:Have No
table(sp,predict(lda.sol)$class)
sp Have No
Have 5 1
No 0 8预测结果是无春旱,回代计算中,本有6个有春旱的年份,只判对了5个.使用table()函数是为了以表格形式列出.
再看二次判别的计算结果:> qda.sol<-qda(train, sp); predict(qda.sol, tst)$class
[1]Have
Levels:Have No
>table(sp,predict(qda.sol)$class)
sp Have No
Have60
No08这次得到的结果是有春旱.到底是有春旱还是无春旱呢?从回代结果来看,可能有春旱更合理一些,因为二次判别的回代正确率是100%.
例2.16(Fisher Iris数据) Iris数据有4个属性,萼片的长度、萼片的宽度、花瓣长度和花瓣的宽度(单位:cm).数据共150个样本,分为三类,前50个数据为第一类——Setosa,中间的50个数据为第二类——Versicolor,最后50个数据为第三类——Virginica.数据格式如表2.13所示.试用lda()函数(或qda()函数)对Iris数据作判别分析.
表2.13 Fisher Iris数据序号萼片长度萼片宽度花瓣长度花瓣宽度种类15.13.51.40.2setosa24.93.01.40.2setosa(续)
序号萼片长度萼片宽度花瓣长度花瓣宽度种类505.03.31.40.2setosa517.03.24.71.4versicolor526.43.24.51.5versicolor1005.72.84.11.3versicolor1016.33.36.02.5virginica1025.82.75.11.9virginica1505.93.05.11.8virginica
解 R软件中提供了Iris数据(数据框iris),数据的前4列是数据的4个属性,第5列标明数据属于哪一类.
用lda()函数作判别分析,读者可仿照本例完成qda()函数的判别分析.在150个样本中随机选取100个作为训练样本,余下的50个作为待测样本,先验概率各为1/3.程序(程序名:exam0216.R)为train <- sample(1:150, 100)
z <- lda(Species ~ ., iris, prior = c(1,1,1)/3,
subset = train)
(class<-predict(z, iris[-train, ])$class)程序中sample()函数为抽取样本,subset = train表示选择抽取的样本作为训练子集,iris[-train, ]表示在预测函数中使用其余的样本.计算结果略.看一下预测结果的准确性:> sum(class==iris$Species[-train])
[1] 50全部正确.