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语言中Fisher判别内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • R语言实现对数据框按某一列分组求组内平均值

    可使用aggregate函数 如: aggregate(.~ID,data=这个数据框名字,mean) 如果是对数据框分组,组内有重复的项,对于重复项保留最后一行数据用: pcm_df$duplicated <- duplicated(paste(pcm_df$OUT_MAT_NO, pcm_df$Posit, sep = "_"), fromLast = TRUE) pcm_df <- subset(pcm_df, !duplicated) pcm_df$duplicat

  • R语言 用均值替换、回归插补及多重插补进行插补的操作

    用均值替换.回归插补及多重插补进行插补 # 设置工作空间 # 把"数据及程序"文件夹拷贝到F盘下,再用setwd设置工作空间 setwd("E:\\R_workspace\\R语言数据分析与挖掘实战\\chp4") # 读取销售数据文件,提取标题行 inputfile <- read.csv('./data/catering_sale.csv', header = TRUE) View(inputfile) # 变换变量名 inputfile <- da

  • R语言绘图布局实例讲解

    在R语言中,par 函数可以设置图形边距,其中oma 参数设置outer margin, mar 参数设置margin, 这些边距有什么不同呢,通过box函数可以直观的看到 box 默认在当前图形绘制边框,第一个参数which = "plot", 所以在当前图形上绘制边框 which 的值除了plot 之外,还可以选择 figure, inner, outer 接下来分别用不同的值测试一下,为了区分,为不同的边框设置不同的颜色和类型,代码如下: attach(mtcars) plot(

  • linux命令行下使用R语言绘图实例讲解

    使用系统:centos 6.4 64bit 在R语言中可以使用png()等函数生成图片,例如: png("aa.png")可以生成图片. 但是如果你是通过shell远程连接到系统上,可能会碰到如下错误: > png("aa.png") 错误于.External2(C_X11, paste("png::", filename, sep = ""), g$width,  :    无法打开PNG设备 此外: 警告信息: In

  • R语言绘制空间热力图实例讲解

    先上图 R语言的REmap包拥有非常强大的空间热力图以及空间迁移图功能,里面内置了国内外诸多城市坐标数据,使用起来方便快捷. 开始首先安装相关包 install_packages("devtools") install_packages("REmap") library(devtools) library(REmap) 我们来试试其强大的城市坐标获取功能 city<- c("beijing","上海") get_geo_

  • R语言中Fisher判别的使用方法

    最近编写了Fisher判别的相关代码时,需要与已有软件比照结果以确定自己代码的正确性,于是找到了安装方便且免费的R.这里把R中进行Fisher判别的方法记录下来. 1. 判别分析与Fisher判别 不严谨但是通俗的说法,判别分析(Discriminant Analysis)是一种多元(多个变量)统计分析方法,它根据样本的多个已知变量的值对样本进行分类的方法.一般来说,判别分析由两个阶段构成--学习(训练)和判别.在学习阶段,给定一批已经被分类好的样本,根据它们的分类情况和样本的多个变量的值来学习

  • 详解R语言中的PCA分析与可视化

    1. 常用术语 (1)标准化(Scale) 如果不对数据进行scale处理,本身数值大的基因对主成分的贡献会大.如果关注的是变量的相对大小对样品分类的贡献,则应SCALE,以防数值高的变量导入的大方差引入的偏见.但是定标(scale)可能会有一些负面效果,因为定标后变量之间的权重就是变得相同.如果我们的变量中有噪音的话,我们就在无形中把噪音和信息的权重变得相同,但PCA本身无法区分信号和噪音.在这样的情形下,我们就不必做定标. (2)特征值 (eigen value) 特征值与特征向量均为矩阵分

  • R语言中的vector(向量),array(数组)使用总结

    对于那些有一点编程经验的人来说,vector,matrix,array,list,data.frame就相当于编程语言中的容器,因为只是将R看做数据处理工具所以它们的底层是靠什么实现的,内存怎么处理的具体也不要深究. R语言很奇怪的是它是面向对象的语言,所以经常会调用系统的方法,而且更奇怪的是总是调用"谓语"的方法,用起来像是写句子一样,记起来真是让人费解.比如is.vector(),read.table(),as.vector().. 直接开始吧:(由于习惯,大部分用"=&

  • R语言中cut()函数的用法说明

    R语言cut()函数使用 cut()切割将x的范围划分为时间间隔,并根据其所处的时间间隔对x中的值进行编码. 参数:breaks:两个或更多个唯一切割点或单个数字(大于或等于2)的数字向量,给出x被切割的间隔的个数. breaks采用fivenum():返回五个数据:最小值.下四分位数.中位数.上四分位数.最大值. labels为区间数,打标签 ordered_result 逻辑结果应该是一个有序的因素吗? 先用fivenum求出5个数,再用labels为每两个数之间,贴标签,采用(]的区间,

  • R语言中corrplot标题居中及eps格式输出

    目录 相关性图 corrplot ggcorr eps格式输出图像 相关性图 R中相关性图有两种比较简单的画法,一个是使用corrplot包,另一个则是使用ggcorr,利用这两个包,即可绘制出非常美观的相关性图了.这里不对两个包进行细讲,仅仅只是针对在使用过程中遇到的问题进行解决. corrplot 在使用corrplot进行绘图时,如果我们想要添加一个标题,直接使用title =这个参数会生成如下的结果,我们以示例代码为例: M <- cor(mtcars) corrplot(M, titl

  • python中的try except与R语言中的tryCatch异常解决

    目录 1. 起因 2. Python中的try/except 1)情形一 2)情形二 3)情形三 3. R中的tryCatch 1)情形一 2)情形二 3)情形三 补充 1. 起因 当我们需要写一个非常非常长的循环时,通常在某个循环如果出现error,那么整个代码后面的循环就不能进行. 这时候试想,如果你在服务器上挂一个要跑很久的循环(并行),亦或是需要在自己电脑上挂一晚上跑东西,可能刚点完运行,美滋滋地上床后,程序突然出现问题.这时第二天满怀期待地点亮屏幕,发现是一个大大的红红的ERROR时,

  • C语言中const与指针使用方法总结

    C语言中const与指针使用方法总结 在这里分享一下自己的心得,希望和大家一起分享技术,如果有什么不足,还请大家指正.写出这篇目的,就是希望大家一起成长,我也相信技术之间没有高低,只有互补,只有分享,才能使彼此更加成长. 总结: * const 值不能改变,指向可改变 const * 值能改变,指向不可改变 const * const 都不能改变 实例代码: #include <stdio.h> int main(int argc, const char * argv[]) { // 1 可改

  • R语言中R-squared与Adjust R-squared参数的解释

    前言 最近做项目时,使用 R语言对一些数据做回归计算,分析数据时,想查看这堆数据的相关性,得知R-squared可以得到我想要的信息,但是在打印线性关系式时,看到了R-squared,Adjust R-squared 这两个参数,有点疑惑,上网也查看了一部分资料,最后,发现有两道题可以很明白解释这两个参数,如下: 题一 如果在线性回归模型中增加一个特征变量,下列可能发生的是(多选)? A. R-squared 增大,Adjust R-squared 增大 B. R-squared 增大,Adju

  • R语言及RStudio下载与安装方法

    现如今,R语言是统计领域广泛使用的工具,是属于GNU系统的一个自由.免费.源代码开放的软件,是用于统计计算和统计绘图的优秀工具.而RStudio是R的集成开发环境,用它进行R编程的学习和实践会更加轻松和方便.下面就教大家如何下载并安装R和RStudio,比较简单.R的维护工作由一个国际化的开发者团队负责.R软件的官方下载页面叫作The Comprehensive R Archive Network,即CRAN. 一.官网下载R安装包 下载地址为:https://cran.r-project.or

  • R语言中cbind、rbind和merge函数的使用与区别

    cbind: 根据列进行合并,即叠加所有列,m列的矩阵与n列的矩阵cbind()最后变成m+n列,合并前提:cbind(a, c)中矩阵a.c的行数必需相符 rbind: 根据行进行合并,就是行的叠加,m行的矩阵与n行的矩阵rbind()最后变成m+n行,合并前提:rbind(a, c)中矩阵a.c的列数必需相符 > a <- matrix(1:12, 3, 4) > print(a) [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,

随机推荐