R语言如何进行线性判别分析?

Posted 数据分析艺术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言如何进行线性判别分析?相关的知识,希望对你有一定的参考价值。

    判别分析是一种有监督的训练方法。对于线性判别,先是将样本点投影到一维空间,也就是直线上,若效果不明显,就可以考虑增加一个维度,变成二维空间,如果还是不明显,就继续增加维度。

    在R语言中,MASS软件包中的lda()是实现线性判别的核心函数。下面将通过一个简单实例来进行介绍。



1 读取数据集。

sz_data=read.csv("sz_data.csv",head=T,encoding="utf-8")

head(sz_data);dim(sz_data) #查看数据的前几行和数据维度

2  进行数据预处理。在实际应用中,如果数据有缺失值,需要先按照一定的方法先对缺失值进行处理。这里我们直接划分训练集和测试集,并且随机抽取70%的样本作为训练集。

n=0.7*nrow(sz_data) #作为训练集的样本量

sub_train=sample(nrow(sz_data),n)#随机抽取n个样本

data_train=sz_data[sub_train,-1]#训练集

data_test=sz_data[-sub_train,-1]#测试集

head(data_train);dim(data_train)

head(data_test);dim(data_test)

R语言如何进行线性判别分析?

3  线性判别分析。没有MASS安装包的要先安装MASS包。

fit_lda1=lda(is_rise~.,data_train) #判别分析公式

names(fit_lda1) #查看lda()可给出的输出项名称

fit_lda1$prior #查看本次执行过程中所使用的先验概率

fit_lda1$counts #查看数据集data_train中各类别的样本量

fit_lda1$means #查看各变量在每一类别中的均值

fit_lda1 #输出判别分析的各项结果

plot(fit_lda1) #判别规则可视

从运行结果可以看出,本次线性判别将样本点投射到了一维空间(LD1)。结果中展示了先验概率、各类别样本量,以及各变量在每一类别中的均值。

图形中展示了is_rise取值为0和1时,分布具有一定的差异性。

R语言如何进行线性判别分析?R语言如何进行线性判别分析?

4  对测试集进行预测。

pre_lda1=predict(fit_lda1,data_test)

data_test$pre_rise=pre_lda1$class #输出类别预测结果

head(data_test) #查看含有预测结果的数据

验证模型准确性。

table(data_test$is_rise,pre_lda1$class) #生成is_rise的预测值和实际值的混淆矩阵

error_lda1=sum(pre_lda1$class!=data_test$is_rise)/nrow(data_test);error_lda1#计算错误率

混淆矩阵中,对角线上的数据是被准确判别了的。计算出的错误率在15%以下,具有较高的准确性。

以上是关于R语言如何进行线性判别分析?的主要内容,如果未能解决你的问题,请参考以下文章

R语言线性判别分析(LDA),二次判别分析(QDA)和正则判别分析(RDA)

R语言中多分类问题 multicalss classification 的性能测量

R语言多重共线性判别

再现Fisher线性判别图

R语言应用实战-基于R语言的判别分析:fisher判别法,距离判别法以及Bayers判别法(附源代码)

R语言使用caret包的featurePlot函数可视化变量的重要性通过分组数据分布差异查看变量对于预测目标变量的判别性通过可视化密度图进行判别分析