目的: 使用学习成绩、课外实践活动等数据对学生群体进行聚类分析。我们建立了学生与必修考试成绩一一对应的二维矩阵,聚类分析不同学生对于不同考试的成绩表现。
流程: 首先,应对原有数据进行标准化。
其次,建立相应的模糊相似矩阵,并由此得到模糊等价矩阵。
最终,对其进行聚类。
图1 流程图
我们建立了以学号为列,各科目为行的矩阵。
考虑到同学选课情况不尽相同,对于同样一节课,有的同学选了,有的却没选。这导致矩阵数据很难对齐,于是我们将同学没选科目的成绩设置为0。
矩阵如下:行选择某学生,列选择某科目
图2 实验矩阵
为建立模糊相似矩阵,我们首先应对原始数据进行标准化。
设论域正在上传…重新上传取消为待聚类对象,且每个对象由m个指标表示其性状,如下所示,正在上传…重新上传取消。则我们应将原始数据矩阵中的元素通过适当的变换进行压缩。在变换时,我们采用平移-标准差变换方法。
平移-标准差变换的公式如下所示,
其中,
图3 平移-标准差变换结果图
MATLAB代码实现
本文使用MATLAB R2019a(9.6.0.1072779) 64-bit(win64)完成所有实验。所使用的操作系统为,Windows 10 Pro for Workstations。在本文中,如未明确指明,则使用的环境皆为上述所示。
本文主要使用如下代码完成原始数据的标准化。
function[X]=F_Normalize(cs,X)
if(cs==0)return;end
[n,m]=size(X);
if(cs==1)
for(k=1:m)xk=0;
for(i=1:n)xk=xk+X(i,k);end
xk=xk/n;sk=0;
for(i=1:n)sk=sk+(X(i,k)-xk)^2;end
sk=sqrt(sk/n);
for(i=1:n)X(i,k)=(X(i,k)-xk)/sk;end
end
elseif(cs==2)
for(k=1:m)xmin=X(1,k);xmax=X(1,k);
for(i=1:n)
if(xmin>X(i,k))xmin=X(i,k);end
if(xmax<X(i,k))xmax=X(i,k);end
end
for(i=1:n)X(i,k)=(X(i,k)-xmin)/(xmax-xmin);end
end
else
A=max(X);
for(i=1:m)
X(:,i)=X(:,i)/A(i);
end
end
既然相类似性是定义一个类的基础,那么不同数据之间在同一个特征空间相似度的衡量对于聚类步骤是很重要的,由于特征类型和特征标度的多样性,距离度量必须谨慎,它经常依赖于应用,例如,通常通过定义在特征空间的距离度量来评估不同对象的相异性,很多距离度都应用在一些不同的领域,一个简单的距离度量,如Euclidean距离,经常被用作反映不同数据间的相异性,一些有关相似性的度量,例如PMC和SMC,能够被用来特征化不同数据的概念相似性,在图像聚类上,子图图像的误差更正能够被用来衡量两个图形的相似性。
传递闭包的定理之一如下,相似矩阵转存失败重新上传取消的传递闭包是等价矩阵,且转存失败重新上传取消。因此,建立模糊等价矩阵的关键在于求传递闭包。由于本文使用的方法繁多,故不在此一一列举所得矩阵。
一共采用了10种方法,部分代码如下:
建立模糊相似矩阵时,可主要使用如下代码。
function[R]=F_Similar(cs,X)
%X,数据矩阵
%cs=1,数量积法
%cs=2,夹角余弦法
%cs=3,相关系数法
%cs=4,指数相似系数法
%cs=5,最大最小法
%cs=6,算术平均最小法
%cs=7,几何平均最小法
%cs=8,一般欧式距离法
%cs=9,一般海明距离法
%cs=10,一般切比雪夫距离法
[n,m]=size(X);
R=[];
if(cs==1)maxM=0;pd=0;
for(i=1:n)for(j=1:n)if(j~=i)x=0;
for(k=1:m)x=x+X(i,k)*X(j,k);end
if(maxM<x)maxM=x;end
end;end;end
if(maxM<0.000001)return;end
for(i=1:n)for(j=1:n)
if(i==j)R(i,j)=1;
else R(i,j)=0;
for(k=1:m)R(i,j)=R(i,j)+X(i,k)*X(j,k);end
R(i,j)=R(i,j)/maxM;
if(R(i,j)<0)pd=1;end
end
end;end
if(pd)for(i=1:n)for(j=1:n)R(i,j)=(R(i,j)+1)/2;end;end;end
。。。
//...此处省略
。。。
else for(i=1:n)for(j=1:n)d=0;
if(cs==14)for(k=1:m)d=d+(X(i,k)-X(j,k))^2;end
d=sqrt(d);
elseif(cs==15)for(k=1:m)d=d+abs(X(i,k)-X(j,k));end
else for(k=1:m)if(d<abs(X(i,k)-X(j,k)))d=abs(X(i,k)-X(j,k));end;end;end
R(i,j)=exp(-d);
end;end;end
End
function [A]=F_equal(R)
js0=0;
while(1)
A=Max_Min(R,R);
js0=js0+1;
if(A==R)
break;
else
R=A;
end
end
end
function[C]=Max_Min(A,B)
C=[];
[m,s1]=size(A);
[s2,n]=size(B);
if(s1~=s2)
disp('The number of columns of A doesn’t equal to the number of rows of B!');
。。。
//...此处省略
。。。
end
我们可以进行动态聚类并获得聚类谱系图,以便更直观地分析聚类结果。
代码如下:
function [M,N]=F_draw(R)
[A]=F_equal(R);
U=unique(A);
L=length(U);
M=1:L;
for i=L-1:-1:1
[m,n]=find(A==U(i));
N{i,1}=n;
N{i,2}=m;
A(m(1),:)=0;
mm=unique(m);
N{i,3}=mm;
len=length(find(m==mm(1)));
depth=length(find(m==mm(2)));
index1=find(M==mm(1));
MM=[M(1:index1-1),M(index1+depth:L)]; %
index2=find(MM==mm(2));
M=M(index1:index1+depth-1);
M=[MM(1:index2-1),M,MM(index2:end)];
。。。
//...此处省略
。。。
axis([0 L+1 min(U) max(U)])
axis off
hold off
End
聚类结果如下:
我们以聚类谱系图的方式,展示聚类结果。其中,行代表不同学生号。
为了使图像更直观,我们只选择10名学生。
利用平移-标准差变换与夹角余弦法,可得如下图所示的结果。
图4 平移-标准差变换与夹角余弦法所得聚类谱系图(10人)
下面这张图是总体的:
图5 平移-标准差变换与夹角余弦法所得聚类谱系图(总)
我们从不变性、效果等同、正确性原则三个方面评估结果
反复多次实验,可发现确定相似系数的方法中,参数的选择不会影响聚类结果。已有研究证明这一点,即,在确定相似系数的方法中,对于涉及到参数M值的选择的方法,都有结论:无论公式中的参数M选择何值,最终所得到的聚类结果都完全一致,即满足不变性[2]。
在建立模糊相似矩阵的方法中,有些方法产生的聚类结果完全一致,为了方便描述这种现象,下面给出方法效果等同的定义。在计算模糊相似矩阵的方法中,如果选择A方法与选择B方法来确定相似系数,最终所产生的聚类效果完全一致,那么就说方法A与方法B是效果等同的。[2]
实验可得(限于篇幅,结果并未全部详细给出),最大最小法与算术平均最小法二者效果等同。事实上,已有相关理论证明[2]。
有研究[3]认为,构建模糊相似矩阵的方法应满足正确性原则。该文章这样定义“正确性原则”,“正确性原则是最一般的原则。这条原则要求所选取的方法能客观地描述各样本之间的相似关系, 保证分类的正确性。”同时,该文章认为,海明距离法、欧氏距离法、切比雪夫距离法和指数相似系数法,均满足正确性原则。但是,夹角余弦法和相关系数法往往难以满足正确性原则。
考察本文在上文中所得的结果,发现与此研究结论相符。
在本实验中,我们首先利用MySQL数据库进行了数据预处理,只保留必修课程。对于以“优秀”、“良好”、“中等”、“及格”、“不及格”形式给出的数据,分别用百分制对应。由于原始数据集只给出了每个学生的每门课成绩,不便于后续处理和观察,故我们首先用MySQL将数据集变换成了纵坐标为学生横坐标为各门必修课的矩阵。由此便完成了题目一和题目二的要求——建立数据库处理数据、数据集的初步处理和数据清洗。并抽取出了我们研究的对象——必修课,而将各种选修课舍弃。还完成了数据格式的转换,变成了方便后续处理的矩阵的形式。
数据分析部分,我们使用必修课程的成绩对学生群体进行聚类分析,采用了模糊聚类的方法。具体来讲,我们采用了数量积、夹角余弦等几种办法,并分别实现。由模糊聚类图可见,各种聚类算法的结果较为相似,能大体把学生分为几个不同的类别,基本实现了实验目的。
不足之处,并没有指定一个阈值,将同学分为“优等生”、“中等生”、“差生”等类别,虽然实现了分类,但造成分类结果不直观。此外,本实验仅仅挖掘并利用了所给数据中的一小部分有效信息,很显然,除了必修、选修成绩和均分以外,原始数据中还有大量有价值的潜藏信息有待挖掘和讨论。比如学生性别与学习成绩的关系、年龄与学习成绩的关系、学习成绩随着学期和学年的变化趋势等等。除此之外,比起用均分反映学生的学习能力,绩点往往会更有代表性,而必修/选修的二分法往往也不适用于所有课程,只能是对实际问题的一种简化。以上这些都是实验中有待改进和完善的部分,也是我们下一步应该努力的方向。