R语言中Fisher判别的使用方法
最近编写了Fisher判别的相关代码时,需要与已有软件比照结果以确定自己代码的正确性,于是找到了安装方便且免费的R。这里把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 操作步骤
1. 读取learn.csv
- > d <- read.csv("~/data/learn.csv")
> d2 <- read.csv("~/data/infer.csv")
2. 训练
- > lda(Class ~ Band1+Band2+Band3+Band4+Band5, data=d)
训练结果:
- > params
- Call:
- 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 Band5
- 0 318.3189 0.0000000 0.0000000 0.00000 0.00000
- 1 322.1881 -0.7703634 -0.2642972 33.92608 36.39715
- Coefficients of linear discriminants:
- LD1
- Band1 0.02173212
- Band2 -0.08647688
- Band3 -0.01199366
- Band4 0.10619769
- Band5 0.10560976
3. 判别
- > ret <- predict(params, d2)
输出结果:
- > write.csv(d2, file="~/data/output.csv"
打完收工!
R语言中Fisher判别的使用方法的更多相关文章
- 掌握R语言中的apply函数族(转)
转自:http://blog.fens.me/r-apply/ 前言 刚开始接触R语言时,会听到各种的R语言使用技巧,其中最重要的一条就是不要用循环,效率特别低,要用向量计算代替循环计算. 那么,这是 ...
- R语言中apply函数
前言 刚开始接触R语言时,会听到各种的R语言使用技巧,其中最重要的一条就是不要用循环,效率特别低,要用向量计算代替循环计算. 那么,这是为什么呢?原因在于R的循环操作for和while,都是基于R语言 ...
- R语言中的factor
对于初学者来说,R语言中的factor有些难以理解.如果直译factor为“因子”,使得其更加难以理解.我倾向于不要翻译,就称其为factor,然后从几个例子中理解: <span style=& ...
- R语言中的MySQL操作
R语言中,针对MySQL数据库的操作执行其实也有很多中方式.本人觉得,熟练掌握一种便可,下面主要就个人的学习使用情况,总结其中一种情况-----使用RMySQL操作数据库. 1.下载DBI和RMySQ ...
- C语言中的const,free使用方法具体解释
注意:C语言中的const和C++中的const是有区别的,并且在使用VS编译測试的时候. 假设是C的话.请一定要建立一个后缀为C的文件.不要是CPP的文件. 由于.两个编译器会有区别的. 一.C语言 ...
- C语言中malloc函数的使用方法
C语言中malloc是动态内存分配函数.函数原型:void *malloc(unsigned int num_bytes);参数:num_bytes 是无符号整型,用于表示分配的字节数.返回值:如果分 ...
- R语言中 fitted()和predict()的区别
fitted是拟合值,predict是预测值.模型是基于给定样本的值建立的,在这些给定样本上做预测就是拟合.在新样本上做预测就是预测. 你可以找一组数据试试,结果如何. fit<-lm(weig ...
- R语言中的Apriori关联规则的使用
1.下载Matrix和arules包 install.packages(c("Matrix","arules")) 2.载入引入Matrix和arules包 # ...
- R语言中abline和lines的区别
函数lines()其作用是在已有图上加线,命令为lines(x,y),其功能相当于plot(x,y,type="1")函数abline()可以在图上加直线,其使用方法有四种格式.( ...
随机推荐
- python的with用法
转自http://blog.kissdata.com/2014/05/23/python-with.html With语句是什么? 有一些任务,可能事先需要设置,事后做清理工作.对于这种场景,Pyth ...
- NP、NPC、NP-hard问题的定义
NP-hard问题 定义:NP-hard问题是这样的问题,只要其中某个问题可以在P时间内解决,那么所有的NP问题就都可以在P时间内解决了.NP-c问题就是NP-hard问题.但注意NP-hard ...
- apache 搭建PHP多站点
修改apache 配置文件:httpd.conf 1.默认 Listen 80端口 2.添加配置如下: <VirtualHost *:80> ServerAdmin admin@yii.c ...
- linux学习(别人指出来的), 回头有针对性的学下!
应该是 会linux 基本操作吧linux 安装 lamp lnmp php拓展这些基本都得会把知道subversion 和 github 这俩吧windows的代码同步到linux上无需ftp 会跟 ...
- sqlplus 方式连接 远程数据库
方式一:简易连接,不用进行网络配置,其实就是tnsname.ora文件,但只支持oracle10G以上.命令:sqlplus 用户名/密码@ip地址[:端口]/service_name [as sys ...
- 关于directshow的SmartTee
可以通过CLSID_SmartTee创建: CComPtr<IBaseFilter> pSmartTee; // Create the Smart Tee (CLSID_SmartTee) ...
- 记一次 .net core publish 之后找不到视图文件的问题
周末将VS从15.3 升级到15.5 ,之后又将VS版本由社区版,升级为企业版. 于是问题来了: 项目publish 之后找不到视图文件了??? 问题很是蛋疼,后来仔细想了一下,也没有动什么东西.查看 ...
- ADT下载地址整理(转)
转自: http://blog.csdn.net/xqf222/article/details/9821971 参考下面文章 http://developer.android.com/tools/sd ...
- JSP中的<jsp:include...>和<%@include %>
jsp中include有两种写法, 都是包含一个页面或者一个文件的意思, 写法略有不同 <jsp:include page = "url" />或者<jsp:in ...
- So you've been rejected, now what? On appeals in peer-reviewed publications(From Wiley Exchanges)
Getting rejected stinks. Wouldn’t it be great if we could appeal people’s decisions in life? Imagine ...