楼主在学习数据挖掘期间,老师讲了很多的判别和分类方法,只是没有平时时间整理,这次利用周末的时间特地整理自己以前的知识点,这篇文章会引用大量网上的图片和文字,若有侵权,及时告知,本人会马上修改。这篇文章中的案例统一使用著名的鸢尾花数据。若有错误,也请及时指出,大家相互学习,共同进步
判别分析(discriminant analysis)是一种分类技术。它通过一个已知类别的“训练样本”来建立判别准则,并通过预测变量来为未知类别的数据进行分类。
判别分析根据所采用的数据模型,可分为线性判别分析和非线性判别分析。根据判别准则可分为Fisher判别、Bayes判别和距离判别。其中最基本的Fisher判别方法也被称为线性判别方法。该方法的主要思想是将多维数据投影到某个方向上,投影的原则是将总体与总体尽可能的分开,然后再选择合适的判别规则将新的样本分类判别。Fisher判别会投影降维,使多维问题简化为一维问题来处理。选择一个适当的投影轴,使所有的样品点都投影到这个轴上得到一个投影值。对这个投影轴的方向的要求是:使每一组内的投影值所形成的组内离差尽可能小,而不同组间的投影值所形成的类间离差尽可能大。Bayes判别思想是根据先验概率求出后验概率,并依据后验概率分布作出统计推断。距离判别思想是根据已知分类的数据计算各类别的重心,对未知分类的数据,计算它与各类重心的距离,与某个重心距离最近则归于该类。
1.线性判别
当不同类样本的协方差矩阵相同时,我们可以在R中使用MASS包的lda函数实现线性判别。值得注意的是当分类只有两种且总体服从多元正态分布条件下,Bayes判别与Fisher判别、距离判别是等价的。利用table函数建立混淆矩阵,比对真实类别和预测类别。

> library(MASS)
> data(iris)
> iris.lda=lda(Species~.,data=iris)
> table(Species,predict(iris.lda,iris)$class)
Species      setosa versicolor virginicasetosa         50          0         0versicolor      0         48         2virginica       0          1        49
> table<-table(Species,predict(iris.lda,iris)$class)
> sum(diag(prop.table(table)))###判对率
[1] 0.98

2.二次判别
当不同类样本的协方差矩阵不同时,则应该使用二次判别。在使用lda和qda函数时注意:其假设是总体服从多元正态分布,若不满足的话则谨慎使用二次判别。

> iris.qda=qda(Species~.,data=iris,cv=T)
> table(Species,predict(iris.qda,iris)$class)
Species      setosa versicolor virginicasetosa         50          0         0versicolor      0         48         2virginica       0          1        49
> table<-table(Species,predict(iris.qda,iris)$class)
> sum(diag(prop.table(table)))###判对率
[1] 0.98

3.贝叶斯判别
贝叶斯判别式假定对研究对象已有一定的认识 这种认识常用先验概率来描述,当取得样本后就可以用样本来修正已经有的先验概率分布得出后验概率分布,然后通过后验概率分布进行各种统计推。实际上就是使平均误判损失(误判概率与误判损失的结合)ECM达到极小的过程。

> library(MASS)
> data(iris)
> iris.Beyes=lda(Species~.,data=iris,prior=c(1,1,1)/3)
> table(Species,predict(iris.Beyes,iris)$class)
Species      setosa versicolor virginicasetosa         50          0         0versicolor      0         48         2virginica       0          1        49
> table<-table(Species,predict(iris.Beyes,iris)$class)
> sum(diag(prop.table(table)))###判对率
[1] 0.98

上面是先验概率相等的情形,下面介绍先验概率不等的情形

> iris.Beyes1=lda(Species~.,data=iris,prior=c(7,8,15)/30)
> table(Species,predict(iris.Beyes1,iris)$class)
Species      setosa versicolor virginicasetosa         50          0         0versicolor      0         48         2virginica       0          1        49
> table<-table(Species,predict(iris.Beyes1,iris)$class)
> sum(diag(prop.table(table)))###判对率
[1] 0.98

判别分析是半监督分类,就是判别函数求解的时候按照已知类别样本计算,但是对于未知类别样本应用判别函数时不做任何监督。;而决策树和神经网络等方法属于有监督分类,从分类准则建立,到准则的部署全程控制。训练神经网络和决策树是监督学习的最常见技术。这两种技术(神经网络和决策树)高度依赖于事先确定的分类系统给出的信息。对于神经网络来说,分类系统用于判断网络的错误,然后调整网络适应它;对于决策树,分类系统用来判断哪些属性提供了最多的信息,如此一来可以用它解决分类系统的问题。
下面就介绍几种有监督分类方法
4.利用决策树分类
决策树是以实例为基础的归纳学习算法。它从一组无次序、无规则的元组中推理出决策树表示形式的分类规则。 它采用自顶向下的递归方式,在决策树的内部结点进行属性值的比较,并根据不同的属性值从该结点向下分支,叶结点是要学习划分的类。从根到叶结点的一条路径就对应着一条合取规则,整个决策树就对应着一组析取表达式规则。

> library(tree)
> set.seed(2)
> data(iris)
> train=sample(1:nrow(iris),100)
> iris.test=iris[-train,]
> tree.Species=tree(Species~.,iris,subset=train)
> tree.pred=predict(tree.Species,iris.test,type='class')
> table(tree.pred,iris.test$Species)
tree.pred    setosa versicolor virginicasetosa         15          0         0versicolor      0         16         0virginica       0          1        18
> table<-table(tree.pred,iris.test$Species)
> sum(diag(prop.table(table)))###判对率
[1] 0.98

5.利用神经网络分类
神经网络建立在有自学习能力的数学模型基础上,可以对复杂的数据进行分析,并完成对人脑或其他计算机来说极为复杂的模式抽取及趋势分析。神经网络的典型应用是建立分类模型。神经网络从经验中学习,常用于发现一组输入数据和一个结果之间的未知联系神经网络的训练是根据历史样本数据反复进行的。训练过程中,处理单元对数据进行汇总和转换,它们之间的连接被赋以不同的权值。也就是说,为了对每一个样本的结果变量进行预测,一个网络要尝试各种不同的方案。当输出结果在指定的精度级别上与已知结果吻合,或满足其它的结束准则时,网络的训练就不再进行

> library(nnet)
> set.seed(2)
> data(iris)
> iris.nnet <-nnet(Species ~ ., linout = F,size = 10, decay = 0.01, maxit = 1000,trace = F,data = iris) 

对分类数据预测需要加上type参数

> pre.forest=predict(iris.nnet, iris,type='class')
> table(pre.forest,iris$Species)
pre.forest   setosa versicolor virginicasetosa         50          0         0versicolor      0         49         0virginica       0          1        50
> table<-table(pre.forest,iris$Species)
> sum(diag(prop.table(table)))###判对率
[1] 0.9933333

6.利用支持向量机分类、
SVM学习问题可以表示为凸优化问题,因此可以利用已知的有效算法发现目标函数的全局最小值。而其他分类方法(如基于规则的分类器和人工神经网络)都采用一种基于贪心学习的策略来搜索假设空间,这种方法一般只能获得局部最优解。 SVM通过最大化决策边界的边缘来控制模型的能力。尽管如此,用户必须提供其他参数,如使用核函数类型和引入松弛变量等。通过对数据中每个分类属性引入一个哑变量,SVM可以应用于分类数据。SVM一般只能用在二类问题,对于多类问题效果不好。

> library(e1071)
> set.seed(2)
> data(iris)
> iris.svm <-svm(Species ~ .,data = iris)
> pre.forest=predict(iris.svm, iris,type='class')
> table(pre.forest,iris$Species) 
pre.forest   setosa versicolor virginicasetosa         50          0         0versicolor      0         48         2virginica       0          2        48
> table<-table(pre.forest,iris$Species)
> sum(diag(prop.table(table)))###判对率
[1] 0.9733333

7.基于距离的分类算法
K—最临近方法(k Nearest Neighbors,简称KNN)是实际运用中经常被采用的一种基于距离的分类算法。KNN算法的基本思想:假定每个类包含多个训练数据,且每个训练数据都有一个唯一的类别标记,计算每个训练数据到待分类元组的距离,取和待分类元组距离最近的k个训练数据,k个数据中哪个类别的训练数据占多数,则待分类元组就属于哪个类别。工作原理:我们知道样本集中每一个数据与所属分类的对应关系,输入没有标签的新数据后,将新数据与训练集的数据对应特征进行比较,找出“距离”最近的k(通常k<20)数据,选择这k个数据中出现最多的分类作为新数据的分类。

> library(kknn)
> data(iris)
> m <- dim(iris)[1]
> val <- sample(1:m, size =round(m/3), replace = FALSE, prob= rep(1/m, m))  ##随机选出训练集合
> iris.train <- iris[-val,]
> iris.test <- iris[val,]
> iris.kknn <- kknn(Species~.,iris.train, iris.test, distance = 5, kernel= "triangular")
> fit <- fitted(iris.kknn)
> table(iris.test$Species, fit) 
            fitsetosa versicolor virginicasetosa         15          0         0versicolor      0         15         1virginica       0          2        17
> table<-table(iris.test$Species, fit)
> sum(diag(prop.table(table)))
[1] 0.94

8.利用logistic回归分类
logistic回归与多重线性回归实际上有很多相同之处,最大的区别就在于他们的因变量不同,其他的基本都差不多,正是因为如此,这两种回归可以归于同一个家族,即广义线性模型(generalized linear model)。这一家族中的模型形式基本上都差不多,不同的就是因变量不同,如果是连续的,就是多重线性回归,如果是二项分布,就是logistic回归。logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释。

> library(nnet)
> data(iris)
> set.seed(2)
> train=sample(1:nrow(iris),100)
> iris.train=iris[train,]
> iris.test=iris[-train,]
> iris.logistic<- multinom(Species~., data = iris.train)
# weights:  18 (10 variable)
initial  value 109.861229
iter  10 value 15.748434
iter  20 value 3.075288
iter  30 value 1.783451
iter  40 value 1.757924
iter  50 value 1.745571
iter  60 value 1.726390
iter  70 value 1.601147
iter  80 value 1.578286
iter  90 value 1.553331
iter 100 value 1.540946
final  value 1.540946
stopped after 100 iterations
> summary(iris.logistic)
Call:
multinom(formula = Species ~ ., data = iris.train)Coefficients:(Intercept) Sepal.Length Sepal.Width Petal.Length Petal.Width
versicolor    72.06357     -8.35714   -25.59577     23.57554   -18.06928
virginica    -75.84817    -15.20983   -49.04539     50.74856    53.25676Std. Errors:(Intercept) Sepal.Length Sepal.Width Petal.Length Petal.Width
versicolor    92.54313     54.78403    108.3836     211.6267    133.9626
virginica    106.83040     57.99244    114.7649     217.0620    148.1710Residual Deviance: 3.081893
AIC: 23.08189 
> iris.pre<-predict(iris.logistic,iris.test,type="class")
> table(iris.pre,iris.test$Species)
iris.pre     setosa versicolor virginicasetosa         14          0         0versicolor      1         17         2virginica       0          0        16
> table<-table(iris.pre,iris.test$Species)
> sum(diag(prop.table(table)))
[1] 0.94

利用R语言如何判别和分类相关推荐

  1. 利用R语言对泰坦尼克号沉没事件幸存者的数据分析与预测

    题外话:在文章正式开始之前,我还是想先写一点题外话,一是为了引出写作这篇博客的目的,二则是希望能够记录下现在的所思所想为以后留个纪念.首先介绍一下自己,毕业3年多的小硕一枚,大学期间学的专业是高分子材 ...

  2. 利用R语言对贷款客户作风险评估

    利用R语言对贷款客户作风险评估(上)--数据分析 前言 风险控制能力越来越成为互联网金融行业的隐形门槛,为风控人员提供显著地风险评估依据变得非常重要.本文以银行客户的信用卡信息为案例数据,对数据进行分 ...

  3. 利用R语言对贷款客户作风险评估(下)——零膨胀回归分析

    利用R语言对贷款客户作风险评估(下)--零膨胀回归分析 前言 上一篇的分类预测是决定好坏客户的初步判断, 不足以直接决策, 因此还需要进一步分析. 通过随机森林, 对影响好坏客户的解释变量的重要性进行 ...

  4. R语言使用逻辑回归分类算法

    R语言使用逻辑回归分类算法 逻辑回归属于概率统计的分类算法模型的算法,是根据一个或者多个特征进行类别标号预测.在R语言中可以通过调用logit函数执行逻辑回归分类算法并预测输出概率.通过调用glm函数 ...

  5. 【问题导向】利用R语言进行情感分析

    目录 前言 问题分析 R语言的安装 情感分析 分类的原理 未来学习计划 引文 前言 R语言是统计领域的一个重要工具,其中有很多独特的包能够实现特定功能,在进行GIS分析时有非常大的用处. 笔者最近在帮 ...

  6. R语言使用两个分类变量创建双向表(Two Way Table、两个分类变量的频率表)实战: 矩阵的双向表、dataframe的双向表、条形图和马赛克图来可视化频率表

    R语言使用两个分类变量创建双向表(Two Way Table.两个分类变量的频率表)实战: 矩阵的双向表.dataframe的双向表.条形图和马赛克图来可视化频率表 目录

  7. R语言构建xgboost文本分类模型(bag of words):xgb.cv函数交叉验证确定xgboost模型的最优子树个数、交叉验证获取最优子树之后构建最优xgboost模型并评估模型文本分类效能

    R语言构建xgboost文本分类模型(bag of words):xgb.cv函数交叉验证确定xgboost模型的最优子树个数.交叉验证获取最优子树之后构建最优xgboost模型并评估模型文本分类效能 ...

  8. R语言创建自定义颜色(分类变量与颜色形成稳定映射)实战:设置因子变量(分类变量)到可视化颜色的稳定映射

    R语言创建自定义颜色(分类变量与颜色形成稳定映射)实战:设置因子变量(分类变量)到可视化颜色的稳定映射 目录

  9. R语言基于glmnet构建分类模型并可视化特征系数(coefficient)以及L1正则化系数(lambda)实战

    R语言基于glmnet构建分类模型并可视化特征系数(coefficient)以及L1正则化系数(lambda)实战 # 导入测试数据集 data(BinomialExample) x <- Bi ...

最新文章

  1. 防火墙(二)SNAT和DNAT
  2. Drupal 7.31 SQL注射分析POC
  3. python3.x获取windows自启动程序列表
  4. Linux 中挖矿病毒处理过程
  5. vs2015通过ODBC连接SQLSERVER2012
  6. kaggle api下载自定义数据到colab上面
  7. java对字符串归一化_搜索引擎中的字符串归一化 | 学步园
  8. 阿里云发布ECS企业级产品家族 19款实例族涵盖173个应用场景
  9. IOT设备的7大安全问题
  10. 原创Maya mel系列插件推荐
  11. linux 网卡驱动编译安装包,CDlinux网卡驱动的编译、安装、集成
  12. cpu开启超线程linux,Linux开发人员声称除非禁用超线程否则可以利用英特尔CPU
  13. 刀具半径补偿 c语言,C语言程序实现数控加工刀具半径补偿原理与坐标计算.pdf...
  14. 【补充习题三】待定常数法之微分中值定理
  15. 【学会轮播图这一篇文章就足够啦】JS 网页轮播图详解 自动播放+手动播放
  16. 视频去水印工具有什么 哪个去水印软件好用
  17. iOS9.3.5越狱图文教程
  18. PPT幻灯片放映不显示备注,只让备注显示在自己屏幕上
  19. 炸锅了!Google称2029年人类开始实现永生不死!疾病,衰老,痛苦将彻底消失!?...
  20. 关于Java的位移运算

热门文章

  1. HCIE - Routing Switching v3.0 Outline
  2. 三相异步电动机的定子磁动势
  3. Element-UI中打开本地文件
  4. [mybatis] sql语句无错误,但是执行多条sql语句时,抛出java.sql.SQLSyntaxErrorException...
  5. GCN - Semi-Supervised Classification with Graph Convolutional Networks 用图卷积进行半监督节点分类 ICLR 2017
  6. 扫码枪回车键条码_扫描枪怎么设置自动换行 条码扫描枪不自动回车怎么设置...
  7. Visual FoxPro 6.0常用命令
  8. ajax读取文件的小总结
  9. 2021多益网络春季校园招聘游戏研发笔试题(回忆版)
  10. 【理财入门一】三大资产与财务自由