文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何在R语言中使用Fisher进行判断

2023-06-14 06:25

关注

如何在R语言中使用Fisher进行判断?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

1. 判别分析与Fisher判别

不严谨但是通俗的说法,判别分析(Discriminant Analysis)是一种多元(多个变量)统计分析方法,它根据样本的多个已知变量的值对样本进行分类的方法。一般来说,判别分析由两个阶段构成——学习(训练)和判别。在学习阶段,给定一批已经被分类好的样本,根据它们的分类情况和样本的多个变量的值来学习(训练)得到一种判别方法;在判别阶段用前一阶段得到的判别方法对其他样本进行判别。

Fisher判别(Fisher Discrimination Method)又被称为线性判别(LDA,Linear Discriminative Analysis),是判别分析的一种,历史可以追溯到1936年。它的核心思想是将多维数据(多个变量)投影(使用线性运算)到一维(单一变量)上,然后通过给定阈值将样本根据投影后的单一变量进行分类。

Fisher判别的学习(训练)阶段,就是找到合适的投影方式,使得对于已经被分类好的样本,同一类的样本被投影后尽量扎堆。学习阶段的结果是找到一系列的系数(Coeffcient),构成形如

y=a1 * x1 + a2 * x2 + a3 * x3 + ... + an * xn其中:a1,a2,... an是系数,x1,x2,... ,xn是变量值。

的判别式和阈值。而判别阶段可以根据这个判别式计算出y,并根据阈值将样本进行分类。

2. 在R中使用Fisher判别

R中使用Fisher判别说起来很简单,但是我当初也放狗搜索了不短的时间才搞明白如何使用。

首先,它在R里不叫Fisher,用Fisher搜索多半误入歧途。在R中,它叫LDA(Linear Discriminative Analysis)。

其次,它存在于一个叫MASS的包里。在Ubuntu 13.10中使用:

sudo apt-get install r-base

这样安装以后默认就有,然后使用下面语句引用这个包:

> library(MASS)

再次,引用了MASS包以后就可以使用lda命令了:

> params <- lda(y~x1+x2+x3, data=d)

其中,第一个参数是判别式的形式,第二个参数是用来训练的样本数据。lda命令执行后,会输出构成判别式的各个系数。

最后,使用predict命令对未分类的样本进行判别。

> predict(params, newdata)

其中,第一个参数是上一阶段lda命令的结果,第二个参数是用来分类的样本数据。自此,整个fisher判别过程完成。

3. 实例

3.1 数据

准备好两个csv文件,用来训练的已分类数据叫learn.csv,用来判别的未分类数据叫infer.csv。learn.csv共有六列构成,其第一行分别为Band1,Band2,Band3,Band4, Band5, Class,分别代表变量1、变量2、变量3和类别。infer.csv由六列构成:Band1, Band2, Band3, Band4, Band5。同样第一列包含列名。csv文件的字段间都用逗号分隔。

3.2 操作步骤

读取learn.csv

> d <- read.csv("~/data/learn.csv")> d2 <- read.csv("~/data/infer.csv")

训练

> lda(Class ~ Band1+Band2+Band3+Band4+Band5, data=d)

训练结果:

> paramsCall:lda(Class ~ Band1 + Band2 + Band3 + Band4 + Band5, data = data)Prior probabilities of groups:    0     1 0.4220068 0.5779932 Group means:   Band1   Band2   Band3  Band4  Band50 318.3189 0.0000000 0.0000000 0.00000 0.000001 322.1881 -0.7703634 -0.2642972 33.92608 36.39715Coefficients of linear discriminants:       LD1Band1 0.02173212Band2 -0.08647688Band3 -0.01199366Band4 0.10619769Band5 0.10560976

判别

> ret <- predict(params, d2)

输出结果:

> write.csv(d2, file="~/data/output.csv"

关于如何在R语言中使用Fisher进行判断问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网行业资讯频道了解更多相关知识。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯