实验二聚类与判别实验项目名称:利用Matlab进行聚类和判别分析实验项目性质:普通实验所属课程名称:数学建模实验参考资料:实验计划学时:4一、实验目的:1、利用MATLAB进行聚类分析和判别分析;2、通过实际例题学习用聚类和判别分析解决相关简单的实际问题;3、理解判别分析误判率含义,应用判别模型进行预测。
二、实验内容2.1 聚类分析1、工厂产品问题(教材220页例题9.3);2、工人身高体重问题(教材239页习题9.1);2.2 判别分析1、雨天非雨天问题(教材231页例9.5);2、蠓的分类(教材234页);三、实验方法、步骤及结果分析简要提示3.1 基础知识一、聚类在MATLAB中通过pdist、linkage、dendrogram、cluster等函数来完成此种方法。
层次聚类的过程如下:1、相似性度量确定对象(实际上就是数据集中的每个数据点)之间的相似性,实际上就是定义一个表征对象之间差异的距离,例如最简单的平面上点的聚类中,最经常使用的就是欧几里得距离。
使用pdist来实现,具体用法如下:Y = pdist(X,distance)根据距离distance来计算X中各点之间的距离Y。
其中X为数据集,distance可以取为欧氏距离,马氏距离,切比雪夫距离。
对于具有M个点的数据集X,pdist之后的Y将是具有M*(M-1)/2个元素的行向量。
例1-1:Y=pdist(X)举例。
>> X=randn(6,2)X =-0.4326 1.1892-1.6656 -0.03760.1253 0.32730.2877 0.1746-1.1465 -0.18671.1909 0.7258>>plot(X(:,1),X(:,2),'bo') %画出X的散点图(图1)图1>>Y=pdist(X) %计算X的第一个点与与2-6点、第2点与3-6点,......距离Y =Columns 1 through 151.7394 1.0267 1.2442 1.5501 1.6883 1.8277 1.9648 0.54012.9568 0.2228 1.3717 1.1377 1.4790 1.0581 2.5092例子中X数据集可以看作包含6个平面数据点,pdist之后的Y是一个行向量,15个元素分别代表XC个元素的行向量。
的第1点与2-6点、第2点与3-6点,......这样的距离。
则Y为具有26注:(1)Y这样的显示虽然节省了内存空间,但对用户来说不是很易懂,如果需要对这些距离进行特定操作的话,也不太好索引。
MATLAB中可以用squareform把Y转换成方阵形式,方阵中<i,j>位置的数值就是X中第i和第j点之间的距离,显然这个方阵应该是个对角元素为0的对称阵。
>> squareform(Y)ans =0 1.7394 1.0267 1.2442 1.5501 1.68831.7394 0 1.8277 1.9648 0.54012.95681.0267 1.8277 0 0.2228 1.3717 1.13771.2442 1.9648 0.2228 0 1.4790 1.05811.5501 0.5401 1.3717 1.4790 02.50921.68832.9568 1.1377 1.0581 2.5092 0注:(2)pdist可以使用多种参数,指定不同的距离算法。
另外,当数据规模很大时,可以想象pdist产生的Y占用内存将是很吓人的,比如X有10k个数据点,那么X占10k*8*2Bytes=160K,这看起来不算啥,但是pdist后的Y会有10k*10k/2*8Bytes=400M。
因此,使用MATLAB的层次聚类来处理大规模数据,大概是很不合适的。
2、聚类树的产生确定好了对象间的差异度(距离)后,就可以用Z=linkage(Y)产生层次聚类树。
>> Z=linkage(Y) Z =3.00004.0000 0.22288.0000 10.0000 1.3717对于6个元素的X , Y 是1行6*(6-1)/2的行向量,Z 则是(6-1)*3的矩阵。
Z 数组的前两列是索引下标列,最后一列是距离列。
如上例中表示在产生聚类树的计算过程中,第3和第4点先聚成一类,他们之间的距离是0.2228,以此类推。
要注意的是,为了标记每一个节点,需要给新产生的聚类也安排一个标识,MATLAB 中会将新产生的聚类依次用6+1,6+2,....依次来标识。
比如第3和第4点聚成的类以后就用7来标识,第2和第5点聚成的类用8来标识,依次类推。
通过linkage 函数计算之后,实际上二叉树式的聚类已经完成了。
Z 这个数据数组不太好看,可以用dendrogram(Z)来可视化聚类树。
dendrogram(Z)注:(3) dendrogram 默认最多画30个最底层节点,当然可是设置参数改变这个限制,比如dendrogram(Z,0)就会把所有数据点索引下标都标出来,但对于成千上万的数据集合,这样的结果必然是图形下方非常拥挤。
3、聚类树的检验(Verifying the Cluster Tree )*初步的聚类树画完后,还要做很多后期工作的,包括这样的聚类是不是可靠,是不是代表了实际的对象分化模式,对于具体的应用,应该怎样认识这个完全版的聚类树,产生具有较少分叉的可供决策参考的分类结果呢?这都是需要考虑的。
MATLAB 中提供了cluster, clusterdata, cophenet, inconsistent 等相关函数。
cluster 用于剪裁完全版的聚类树,产生具有一定cutoff 的可用于参考的树。
clusterdata 可以认为是pdist,linkage,cluster 的综合,当然更简易一点。
cophenet 和inconsistent 用来计算某些系数,前者用于检验一定算法下产生的二叉聚类树和实际情况的相符程度(就是检测二叉聚类树中各元素间的距离和pdist计算产生的实际的距离之间有多大的相关性),inconsistent则是量化某个层次的聚类上的节点间的差异性(可用于作为cluster的剪裁标准)。
后面这些的理解,大概需要对聚类有一个更深刻更数学的认识。
在一个层次聚类树中,在原数据集中任何两个对象最终是某种程度上联结在一起。
联结的高度代表了包含这两个对象两个组之间的距离。
这个高度就是两个对象间的分类距离。
对于由linkage函数产生的聚类树,一种衡量其优劣的方式就是比较由linkage和pdist产生的距离。
如果聚类有效,在分类树中,对象的联结与距离向量中的对象将会具有强关联性。
Cophenet函数比较了这些值所在的两个集合并且计算它们的相关性,返回值称为分类相关系数,此值越接近1,说明对数据聚类的结果越能精确。
例如:图4 将20工厂的值赋给16和21工厂的聚类结果根据图4可见,聚类结果为:第一次计算两个样品的最小距离是1,所以把距离为1的点合成一类:{17,18,19},{12,13},{5,6,11},{7,8,9},{1,2}第二次计算两个类间的最短距离为2。
把距离不大于2的类归为一类,则得5个扩大的新类:{20,17,18,19},{5,6,11,3},{7,8,9,10}第三次计算两个类间的最小距离为2,则有新类{12,13,15},{1,2,3,4}第四次计算两个类间的最小距离为2.2361,则将所有的点(除16和21),归在四类中:{12,13,15,14},{1,2,3,4,5,6,11},{7,8,9,10},{17,18,19,20}二、判别能将数据模型进行分类的特征曲线称作分类器。
对于一种已知的分类器而言,源于训练数据。
然后基于此分类器对新的样本进行分类。
两个总体的判别法参数化的方法,例如判别分析—根据训练数据拟合出参数模型,然后代入新的数据对其进行分类。
非参数化的方法,如分类树的方法—使用其它的方式去确定分类器。
判别分析使用训练数据去估计关于预测变量的判别函数。
在预测空间中,判别函数确定不同类之间的界限。
1、距离判别法以G 1和G 2分别表示两总体,设它们是取值于R p 中的随机变量,它们的数学期望和协方差矩阵分别为11EG μ=,22EG μ=,11VarG S =,22VarG S =问题:设有一个样本x ∈R p,问x 属于总体G 1还是属于总体G 2?距离判别法是根据x 与G 1、G 2的距离决定x 的归属。
其原则是:若x 与G 1距离小,则x 属于G 1;若x 与G 2的距离小,则x 属于G 2。
即(ⅰ)如果1(,G )d x ≤2(,G )d x ,则判断1G x ∈; (ⅱ)如果2(,G )d x <1(,G )d x ,则判断2G x ∈。
其中,(,G )i d x 为马氏距离,即2(,G )i d x =(T 1)()i i i x S x μμ---,2,1=i[class,err,POSTERIOR] = classify(sample,training,group,type) 说明:sample —样本数据;training —训练数据集。
Classify 将训练集training 中的每行样本sample 数据进行分类, sample与training 必须是具有相同列数的矩阵; group —训练数据所对应的类集合; type —判别函数的类型;可选以下类型:(1)'linear' — 线性分类器,为缺省时默认值。
(2)'diaglinear' — 对角线性分类器,类似于 'linear', 但其具有一对角协方差矩阵估计 (naiveBayes classifiers).(3)'quadratic' — Fits multivariate normal densities with covariance estimates stratified by group.(4)'diagquadratic' — 类似于'quadratic',但具有一个对角协方差矩阵估计。
Similar to 'quadratic', but with a diagonal covariance matrix estimate (naive Bayes classifiers).(5)'mahalanobis' — 使用马氏距离及协方差估计。
返回值class —对sample 的分类结果;err —基于训练数据的误判率估计;POSTERIOR —后验概率矩阵的估计值,即已知第i 个样本观察值条件下,其来源于第j 各类的概率Pr(group j|obs i)。