数理统计小论文(二)聚类和判别分析

#摘要
近年来,北航学生赴美留学人数逐年增加,不由得激发起本人对于美国这个国家的兴趣,作为无可争议的世界第一大国,美国的国情如何?本文旨在运用R语言以及相关的聚类分析和判别分析的知识,讨论多种聚类、判别分析方法对美国五十个州进行分类的可行性,根据回报率以及我们已知的各个州的实际情况对聚类、判别的结果的可行性进行判断。
#关键词
R语言,动态聚类,层次聚类,线性判别,美国州情
#引言
必须事先声明的是,我是带着一种试验的形式来写这篇论文的,论文相当于记录了我从不同种算法中遴选出较好分类方法的过程。
其实在最初对论文进行构想时,只是想把美国的五十个州根据目前的发展水平和将来的发展潜力不同划分为不同的等级,于是试了集中不同的聚类方法,发现实际结果并不能吻合网上给出的美国各州的实际发展水平,于是又尝试了一些方法,得到了比较好的效果。
事实上,在此过程中我所做工作的目的是很不明确地,起初只是找了五十个州的一些指标,并没有想过这种方法划分的等级具体代表什么,只是得到最终数据之后发现,选择的这几个指标实际上是对繁荣程度和发展潜力的一个大略估计,这也引出了我对聚类方法的一些认识:

1)聚类方法实际上是一种无监督的行为,具体划分出的类别只与提供的信息有关,所以像我这种对结果进行解释的想法也是可行的,因为选择合适聚类方法的本质就是需要根据已知分类的数据进行比较验证的。
2)在聚类过程中的数据由于不同的量纲而对结果造成的影响可以通过归一化的方式消除,同时归一化对于得到比较可信的结果是非常必要的。

在R语言自带的数据包dataset中,有state.x77数据记录了五十个州的多个统计值,我选择了population,income,life_exp,area四个统计结果,原因如下:

  1. population,income,life_exp这三个变量大致可以说明目前各个州的繁荣程度,这里的繁荣的标准就可以理解为:人丁兴旺,人均收入高,生活成本较低;
  2. area表示州区域面积,我认为在一段时间内,一个地区蕴含的资源的丰富程度也可以影响未来的发展趋势,因此选择了这个变量;
  3. 我认为影响地区发展前景的另一个重要因素是该地区的教育水平,主要体现在地区的高校数量上,但是并未如愿找到可信的数字,因此暂且对以上提到的四个量进行聚类分析。

本文中所用到的数据如下:

Name of the state Population Income Life Exp Area
Alabama 3615 3624 69.05 50708
Alaska 365 6315 69.31 566432
Arizona 2212 4530 70.55 113417
Arkansas 2110 3378 70.66 51945
California 21198 5114 71.71 156361
Colorado 2541 4884 72.06 103766
Connecticut 3100 5348 72.48 4862
Delaware 579 4809 70.06 1982
Florida 8277 4815 70.66 54090
Georgia 4931 4091 68.54 58073
Hawaii 868 4963 73.60 6425
Idaho 813 4119 71.87 82677
Illinois 11197 5107 70.14 55748
Indiana 5313 4458 70.88 36097
Iowa 2861 4628 72.56 55941
Kansas 2280 4669 72.58 81787
Kentucky 3387 3712 70.10 39650
Louisiana 3806 3545 68.76 44930
Maine 1058 3694 70.39 30920
Maryland 4122 5299 70.22 9891
Massachusetts 5814 4755 71.83 7826
Michigan 9111 4751 70.63 56817
Minnesota 3921 4675 72.96 79289
Mississippi 2341 3098 68.09 47296
Missouri 4767 4254 70.69 68995
Montana 746 4347 70.56 145587
Nebraska 1544 4508 72.60 76483
Nevada 590 5149 69.03 109889
New Hampshire 812 4281 71.23 9027
New Jersey 7333 5237 70.93 7521
New Mexico 1144 3601 70.32 121412
New York 18076 4903 70.55 47831
North Carolina 5441 3875 69.21 48798
North Dakota 637 5087 72.78 69273
Ohio 10735 4561 70.82 40975
Oklahoma 2715 3983 71.42 68782
Oregon 2284 4660 72.13 96184
Pennsylvania 11860 4449 70.43 44966
Rhode Island 931 4558 71.90 1049
South Carolina 2816 3635 67.96 30225
South Dakota 681 4167 72.08 75955
Tennessee 4173 3821 70.11 41328
Texas 12237 4188 70.90 262134
Utah 1203 4022 72.90 82096
Vermont 472 3907 71.64 9267
Virginia 4981 4701 70.08 39780
Washington 3559 4864 71.72 66570
West Virginia 1799 3617 69.48 24070
Wisconsin 4589 4468 72.48 54464
Wyoming 376 4566 70.29 97203
#方法及计算结果
##方法
###聚类分析
我所了解的聚类分析算法主要有两种:1)系统/层次聚类法(cluster)2)动态聚类法(kmeans)

1)层次聚类法
层次聚类又称为系统聚类,首先要定义样本之间的距离关系,距离较近的归为一类,较远的则属于不同的类。可用于定义“距离”的统计量包括了欧氏距离(euclidean)、马氏距离(manhattan)、两项距离(binary)、明氏距离(minkowski)。还包括相关系数和夹角余弦。
层次聚类首先将每个样本单独作为一类,然后将不同类之间距离最近的进行合并,合并后重新计算类间距离。这个过程一直持续到将所有样本归为一类为止。在计算类间距离时则有六种不同的方法,分别是最短距离法、最长距离法、类平均法、重心法、中间距离法、离差平方和法。
2)动态聚类法
K均值聚类又称为动态聚类,它的计算方法较为简单,也不需要输入距离矩阵。首先要指定聚类的分类个数N,随机取N个样本作为初始类的中心,计算各样本与类中心的距离并进行归类,所有样本划分完成后重新计算类中心,重复这个过程直到类中心不再变化。

model2=kmeans(data,centers=3,nstart=10)

在R中使用 kmeans 函数进行K均值聚类,centers参数用来设置分类个数,nstart参数用来设置取随机初始中心的次数,其默认值为1,但取较多的次数可以改善聚类效果。model2$cluster可以用来提取每个样本所属的类别。
###判别分析
课本上讲到的判别方法主要有三种:距离判别法,Bayes判别法,Fisher判别法。
这几种判别法的区分并不是非常严格的,在某些条件下三种方法相互等价。因而在R语言中给出线性判别法lda和二次判别法qda,分别代表判别函数关于变量的多项式次数,我主要运用了线性判别法以及回报率对聚类结果进行评价
###归一化
在书中我们讲到了马氏距离,现在想想应该跟归一化起到的作用类似。
在R语言中我们用scale()函数来对数据的列进行归一化,在R中对该函数的说明如下:

Usage:
scale(x, center = TRUE, scale = TRUE)
Arguments:
x: a numeric matrix(like object).
center: either a logical value or a numeric vector of length equal to
the number of columns of ‘x’.
scale: either a logical value or a numeric vector of length equal to
the number of columns of ‘x’.
Details:
The value of ‘center’ determines how column centering is
performed. If ‘center’ is a numeric vector with length equal to
the number of columns of ‘x’, then each column of ‘x’ has the
corresponding value from ‘center’ subtracted from it. If
‘center’ is ‘TRUE’ then centering is done by subtracting the
column means (omitting ‘NA’s) of ‘x’ from their corresponding
columns, and if ‘center’ is ‘FALSE’, no centering is done.
The value of ‘scale’ determines how column scaling is performed
(after centering). If ‘scale’ is a numeric vector with length
equal to the number of columns of ‘x’, then each column of ‘x’
is divided by the corresponding value from ‘scale’. If
‘scale’ is ‘TRUE’ then scaling is done by dividing the
(centered) columns of ‘x’ by their standard deviations if
‘center’ is ‘TRUE’, and the root mean square otherwise. If
‘scale’ is ‘FALSE’, no scaling is done.
The root-mean-square for a (possibly centered) column is defined
as sqrt(sum(x^2)/(n-1)), where x is a vector of the non-missing

根据如上描述,scale函数将数据按列进行归一化,即减去列平均并除以列标准差,在实验过程中表明归一化的数据对准确的分类有关键意义。
##过程及结果
为了方便起见我将聚类分析和判别分析的内容整合在了一起。在层次聚类法中我用了lda线性判别法,在动态聚类kmeans中我决定用美国各州的实际经济指标进行聚类准确性的评价。
根据之前介绍的方法,可以得到四种组合方法:未归一化数据层次聚类,归一化数据层次聚类,未归一化数据动态聚类,归一化数据动态聚类。下面将依次列出过程和相应结果,为了方便起见我将聚类分析和判别分析的内容整合在了一起。
###未归一化层次聚类

#聚类分析
state_data=state.x77[,c(1,2,4,8)]
state_data=state.x77
state0<-state_data
d<-dist(state0)
hc<-hclust(d)
plot(hc,hang=-1)
clust<-cutree(hc,k=3)
#判别分析
state0<-as.data.frame(state_data)
state0$level<-clust
library(MASS)
model1=lda(level~.,data=state0,prior=c(48,1,1)/50)
#计算回报错误率
table(state0$level,predict(model1)$class)

未归一化系统聚类结果:

未归一化系统聚类热图heatmap:

回报错误率:

class 1 2 3
1 48 0 0
2 0 1 0
3 0 0 1
###归一化层次聚类
#聚类分析
state_data=state.x77[,c(1,2,4,8)]
state_data=state.x77
state0<-state_data
d<-dist(scale(state0))
hc<-hclust(d)
plot(hc,hang=-1)
clust<-cutree(hc,k=3)
#判别分析
state0<-as.data.frame(state_data)
state0$level<-clust
library(MASS)
model1=lda(level~.,data=state0,prior=c(1,1,1)/3)
#计算回报错误率
table(state0$level,predict(model1)$class)

归一化系统聚类结果:

归一化系统聚类热图heatmap:

回报错误率

class 1 2 3
1 11 0 0
2 0 1 0
3 0 0 38

###未归一化动态聚类

library(fpc)
df<-state.x77[,c(1,2,4,8)]
set.seed(252964) # 设置随机值,为了得到一致结果。
(kmeans <- kmeans(na.omit(df), 3)) # 显示K-均值聚类结果
plotcluster(na.omit(df), kmeans$cluster) # 生成聚类图

未归一化动态聚类结果

具体分析结果

K-means clustering with 3 clusters of sizes 1, 15, 34Cluster means:Population   Income Life Exp      Area
1    365.000 6315.000 69.31000 566432.00
2   3584.667 4479.933 71.50267 112282.67
3   4652.529 4361.059 70.64941  37827.12Clustering vector:Alabama         Alaska        Arizona       Arkansas     California 3              1              2              3              2 Colorado    Connecticut       Delaware        Florida        Georgia 2              3              3              3              3 Hawaii          Idaho       Illinois        Indiana           Iowa 3              2              3              3              3 Kansas       Kentucky      Louisiana          Maine       Maryland 2              3              3              3              3 Massachusetts       Michigan      Minnesota    Mississippi       Missouri 3              3              2              3              3 Montana       Nebraska         Nevada  New Hampshire     New Jersey 2              2              2              3              3 New Mexico       New York North Carolina   North Dakota           Ohio 2              3              3              3              3 Oklahoma         Oregon   Pennsylvania   Rhode Island South Carolina 3              2              3              3              3 South Dakota      Tennessee          Texas           Utah        Vermont 2              3              2              2              3 Virginia     Washington  West Virginia      Wisconsin        Wyoming 3              3              3              3              2 Within cluster sum of squares by cluster:
[1]           0 33017816460 16274778661(between_SS / total_SS =  86.2 %)Available components:[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
[6] "betweenss"    "size"         "iter"         "ifault"

###归一化动态聚类

library(fpc)
df<-state.x77[,c(1,2,4,8)]
set.seed(252964) # 设置随机值,为了得到一致结果。
(kmeans <- kmeans(na.omit(scale(df)), 3)) # 显示K-均值聚类结果
plotcluster(na.omit(df), kmeans$cluster) # 生成聚类图

归一化动态聚类结果:

具体分析结果

K-means clustering with 3 clusters of sizes 13, 25, 12Cluster means:Population     Income   Life Exp       Area
1  1.1178556  0.8667383 -0.3444937  0.4803842
2 -0.4528399  0.1702280  0.7117138 -0.1281620
3 -0.2675937 -1.2936082 -1.1095355 -0.2534120Clustering vector:Alabama         Alaska        Arizona       Arkansas     California 3              1              2              3              1 Colorado    Connecticut       Delaware        Florida        Georgia 2              2              2              1              3 Hawaii          Idaho       Illinois        Indiana           Iowa 2              2              1              2              2 Kansas       Kentucky      Louisiana          Maine       Maryland 2              3              3              3              1 Massachusetts       Michigan      Minnesota    Mississippi       Missouri 2              1              2              3              2 Montana       Nebraska         Nevada  New Hampshire     New Jersey 2              2              1              2              1 New Mexico       New York North Carolina   North Dakota           Ohio 3              1              3              2              1 Oklahoma         Oregon   Pennsylvania   Rhode Island South Carolina 2              2              1              2              3 South Dakota      Tennessee          Texas           Utah        Vermont 2              3              1              2              2 Virginia     Washington  West Virginia      Wisconsin        Wyoming 1              2              3              2              2 Within cluster sum of squares by cluster:
[1] 72.78525 28.14668  9.10554(between_SS / total_SS =  43.9 %)Available components:[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
[6] "betweenss"    "size"         "iter"         "ifault"

#结果分析及讨论
本部分将以如下次序比较各种方法的优劣:

1)层次聚类法:
a.两种层次聚类法本身的回报率;
b.层次聚类法之间:未归一化的层次聚类法与归一化的层次聚类法;
2)动态聚类法:
a.两种动态聚类法本身的可靠程度(通过与实际州情对比);
b.动态聚类法之间:未归一化的动态聚类法与归一化的动态聚类法;
3)动态聚类法和层次聚类法之间(通过分类与实际情况进行比较,择优)

##层次聚类法
未归一化数据层次分类回报错误率

class 1 2 3
1 48 0 0
2 0 1 0
3 0 0 1
归一化数据层次分类回报错误率
class 1 2 3
---- :—: :—:
1 11 0 0
2 0 1 0
3 0 0 38

根据数据可以看出,两种方法的回报错误率都是0,说明单纯从回报错误率的角度来看,两种算法不存在较大偏差。
从分层的合理性来看,未归一化时层次中的个数比1:1:48,归一化后层次中个数比11:1:38,分层的合理性的到了一些改善,但仍未得到较为理想的效果。
未归一化系统聚类热图heatmap

归一化系统聚类热图heatmap

在两种方法的heatmap中,可以看到归一化后颜色的分块较归一化之前更加明显,这说明归一化之后的分类层次更加清晰,或者说层次之间的重叠更少。
##动态聚类法
未归一化动态聚类结果:

归一化动态聚类结果:

对比两种方法形成的效果图可知,未归一化时,2类和3类样本点存在很大的交叉,而且1类中只有一个样本,聚类效果不好;归一化之后的样本点可以被完全分散开,不存在类之间的堆叠问题,能够很好的分类,且三个层次中的元素树分配较平均,这也比较符合实际的情况。
##归一化的层次聚类法与动态聚类法
首先我查阅了2010年美国各州经济(GDP)排行情况


而后我对两种聚类方法生成的结果按照level进行了排序
排序代码:

#层次聚类法按level排序
state0[order(state0[,5],decreasing=F),]
#动态聚类法按level排序
state1<-as.data.frame(state.x77[,c(1,2,4,8)])
state1$level<-kmeans$cluster
state1[order(state1[,5],decreasing=F),]

归一化层次聚类法结果(按level排序)

归一化动态聚类法结果(按level排序)

###分析
从两种方法中类与类之间的界限来看,动态分析法得到的分类更加明显,类间差异更加明显;同时我们对比2010年美国各州GDP可以看到,实际GDP排名与动态聚类法得到的分类十分接近,例如在被划分为1类的九个州中,除去Alaska这个十分特别的州之外的八个州的实际GDP排名都在13名之前,而出去密歇根州之后的七个州排名均在前八名。
这很好的说明了归一化的动态聚类法得到的分类方法是十分科学有效的。
#结论
根据以上,我认为,归一化数据后进行动态聚类可以很好的得到分类,这种分类与美国各州实际GDP水平排序十分接近,可以得到很好的分类效果。
#参考文献
1)《应用数理统计》(试用版):孙海燕,周梦,李卫国,冯伟;北京航空航天大学出版社;
2)《R语言经典实例》Paul Teetor,O’REILLY,机械工业出版社;
3)网页,2010年美国各州GDP排名: http://www.phb123.com/city/GDP/2412.html

聚类和判别分析小论文相关推荐

  1. 大一java实训报告1500字_从800字小作文,到3000字小论文你用了多久? | 校媒FM

    前不久,大四的学长.学姐刚结束被老师们不断"为难"的开题答辩,不少当事人直呼"太难了!". 一个熟悉的学姐是这样在朋友圈吐槽的:"老师提问得也太犀利了 ...

  2. 信号与系统2021春季课程小论文批改

    简 介: 本文记录了对于2021年春季信号与系统分析课程的综合小论文的处理和分析的情况. 关键词: 信号与系统,期末成绩,小论文 §01 小论文基本情况 1.小论文要求   1.目标与分数   信号与 ...

  3. 上海中学生的科技活动小论文集锦

    §00 汇总信息 在2021年5月份收到来自于上海中学学生科技节活动小论文若干篇,对其作品进行评分.由我进行评审的作品包括以下表格中的论文内容: [表1 上海中学科技活动小论文] 序号 课题名称 评分 ...

  4. 数学建模上分利器,小论文中稿神器,赶快学习近15年来较新颖的智能优化算法!

    前言 关于MATLAB系列的精品专栏大家可参见 MATLAB-30天带你从入门到精通 MATLAB深入理解高级教程(附源码) 喜欢的小伙伴可自行订阅,你的支持就是我不断更新的动力哟! 相信各位无论是写 ...

  5. ML之Clustering之普聚类算法:普聚类算法的相关论文、主要思路、关键步骤、代码实现等相关配图之详细攻略

    ML之Clustering之普聚类算法:普聚类算法的相关论文.主要思路.关键步骤.代码实现等相关配图之详细攻略 目录 普聚类算法的相关论文 普聚类算法的主要思路 普聚类算法的关键步骤 普聚类算法的代码 ...

  6. 如何在word写小论文在正文分栏后第一页左下角添加 项目 基金 作者简介 (添加通栏脚注)

    (之前写小论文发期刊遇到的添加项目基金 作者简介的问题在这里记录一下) 1.打开视图里的草稿界面 2.把光标放在(点击)文章作者后面 3.点击 引用 界面 打开脚注扩展到脚注和尾注界面 按图中所示点击 ...

  7. 小孔成像实验探究的软件_【亲子实验】科学小制作:神秘小潜艇科学小论文作品在科学课(小学版)2004年第5期发表,科学小发明潜水艇与沉浮子...

    kxxsy科学小实验 作者:王渔滨 湖南省资兴市 东江镇中心完小 科学兴趣小组 校园小记者 编者寄语 亲爱的同学们,尊敬的家长朋友们:亲子实验是以科学小实验.小制作.小发明和科学探究为主要内容的家庭科 ...

  8. 小论文期刊投稿相关整理资料

    引言 研究生阶段,发小论文需要经历论文编辑,选期刊,投稿等阶段.下面是我投稿期间整理的一些相关的信息,可能比较片面,仅供参考. 人工智能类 CCF(中国计算机学会)推荐的人工智能与模式识别领域国际期刊 ...

  9. 判别分析分为r型和q型吗_SPSS聚类和判别分析参考.ppt

    SPSS聚类和判别分析参考 10.1主成分分析和因子分析简介 3 常用术语 (1)因子载荷 (2)变量共同度 (3)公共因子的方差贡献 10.1主成分分析和因子分析简介 10.1.2主成分和公因子数量 ...

最新文章

  1. Linux sar分析网卡流量
  2. 友元关系可以继承_私生子也有继承权!非婚生子女的继承关系如何认定?
  3. [Android] Context应该怎么写?
  4. Java 监测某个方法的执行时间
  5. opencv ORB角检测
  6. colorpix取色小工具_Python版的取色器
  7. MFC_recvfrom
  8. 数字图像识别笔记(第三章-灰度变换与空间滤波)
  9. Linux find命令详解 【转】
  10. 字体大小自适应屏幕分辨率 CSS解决方案
  11. 什么是 “动态规划” , 用两个经典问题举例。
  12. uuid表示时间的部分_基于时间UUID的妙用
  13. SLAM_视觉SLAM中的一种单目稠密建图方法
  14. Mac电脑使用:终端的管理员用户和普通用户的自由切换方式
  15. python根据经纬度算距离 怎么输出_python根据经纬度计算距离示例
  16. “你需要TrustedInstaller提供的权限才能对此文件进行更改” 解决方案
  17. C++派生类与继承(超详细)
  18. 解决raise ValueError(Sample larger than population)问题
  19. Android P Asan使用总结
  20. 邓俊辉 《数据结构》笔记1 绪论

热门文章

  1. mac brew安装,brew卸载重装
  2. 算法笔记_图算法专题_关键路径 AOV网和AOE网
  3. max6675 c语言,max6675 c语言程序
  4. /system/bin/sh: XXX not found
  5. mysql数据库根据引擎备份_MySQL数据库备份的几种方式
  6. python 用PIL库缩放图片并保存
  7. 文字在线转图片二维码的公用API接口
  8. 递归,递推,迭代的区别
  9. linux系统宝塔打开异常,宝塔面板进不去,且宝塔面板启动失败,重装宝塔遇见错误...
  10. 【视频课程】新能源汽车驱动与三电系统设计高级技术--系列课程