摘要:K-Means算法是无监督学习中经典的算法之一,通过组间的相异性规则把不同事物划分为若干类,使各类之间的数据最为相似,不同类数据相异性尽可能最大化。本文通过K-means聚类算法分析某学校大学生期末大学信息技术基础和C语言程序设计的成绩,通过数据分析表明想要提高学生的整体成绩,需要在C语言程序设计上付出更大的努力。
关键词:K-means;数据分析;机器学习
1概述
机器学习中有两类大问题:一个是聚类,另一个是分类。聚类是统计学的概念,属于非监督机器学习(unsupervisedlearning),应用中数据挖掘,数据分析等领域,根据数据不同特征,将其划分为不同的数据类,属于一种无监督学习方法。它的目的是使得属于同一类别个体之间的密度尽可能的高,而不同类别个体间的密度尽可能的低[1]。分类是用已知的结果类别训练数据,对预测数据进行预测分类,属于有监督学习(supervisedlearning),常见的算法如逻辑回归、支持向量机、深度学习等。聚类也是对数据进行归类,不过聚类算法的训练数据只有输入,事先并不清楚数据的类别,通过特征的相似性对文本进行无监督的学习分类。聚类试图将数据集中的样本划分为若干个通常不相交的子集,每个子集称为一个簇(cluster)[2]。K-means属于经典聚类算法,根据样本间的距离或者相异性进行聚类,把特征相似的样本归为一类,相异的样本归为不同的簇。
2理论基础
K-Means算法是从训练集D={x1,x2,…,xn}中选取K个样本作为初始聚类中心c=c1,c2,…,ck,计算数据集中每个样本xi到k个样本初始中心点的距离,并把每个样本划分到离它最近的中心点的类中;每个簇类别βj,重新计算该簇所有样本的质心βj=1|cj|i∈cjΣxj,重复以上两步,迭代更新直到每类质心的变化小于阈值或者达到最大迭代次数。基本步骤为选择数据中心,计算距离,分簇,重新选择数据的质心,重复,直到数据收敛或达到最大迭代次数。该算法不能保证收敛到全局最优。选择训练过程的伪代码如下:训练数据n个m维的数据,随机生成初始化聚类中心k个m维的点。While(t)t为迭代次数Foriinrange(n+1):#n为样本点个数。Forjinrange(k+1):#k为簇的数目。Foriinrange(k+1):#计算样本i到每个簇质点j的距离。找出属于这个簇中的所有数据点,计算这类的质心。重复以上步骤,直到每类质心变化小于设定的阈值或者达到最大的迭代次数。设置最大特征数,设置分类的组K值,训练特征数据进行数据分析。本文将数据过滤清洗,去除停用词转化为向量模型,使用TF-IDF算法对词频进行权重计算,TF是词频,IDF是逆文档频率,TF-IDF反应了一个词在文本中的重要性它的值是TF×IDF。使用Python中的sklearn模块的TfidfTransformer、CountVectorizer方法计算TF-IDF值,转化为空间向量模型,选用K-means聚类算法对数据进行挖掘与分析。
3实验结果与分析
本文选择新疆科技学院某专业期末作为分析对象,选取大学信息技术基础和C语言程序设计成绩作为实验数据。利用Python聚类模块K-means构建聚类模型并实例化,设置分类K=5值。其中K值选取直接影响K-means算法的准确性,选取K值常见的方法有手肘法、Gapstatistic方法。下一步训练特征数据,查看聚类结果labels,对数据进行聚类分析,部分代码如下。importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.clusterimportKMeansplt.scatter(x,y)size=len(x)X=[]foriinrange(size):m=[]m.append(x[i])m.append(y[i])X.append(m)X=np.array(X)plt.scatter(x,y)plt.xlabel("大学信息技术基础")plt.ylabel("C语言程序设计")plt.showkmeans=KMeans(n_clusters=5)#n_clusters:簇的数量。kmeans.fit(X)print("质心:",kmeans.cluster_centers_)#获取聚类后的质心。print("标签:",kmeans.labels_)#获取每个样本所属的簇。print("SSE:",kmeans.inertia_)#获取SSE(簇惯性)。print("迭代次数:",kmeans.n_iter_)#获取迭代次数。print("分值:",kmeans.score(X))#聚类的分值。color=np.array(["r","g","b","purple","orange"])center=model.cluster_centers_#质心label=kmeans.labels_plt.scatter(center[:,0],center[:,1],marker="+",s=200c=color)plt.scatter(x,y,c=color[label])plt.xlabel("大学信息技术基础")plt.ylabel("C语言程序设计")plt.title(f"迭代次数:{kmeans.n_iter_}")
4结论与不足
通过对数据聚类分析表明成绩可以大致分为4类,其中大学信息技术基础学生成绩较好,C语言程序设计对学生有一定难度,想要提高总体成绩,需要重点放到在C语言程序设计这门课上,建议优化教学设计,采取任务驱动式教学,分层次因材施教,培养好学生的计算思维能力,为后面的专业课打好基础。K-means具有实现简单,应用广泛等优点,但由于需要指定K值簇,直接影响分类的准确性,聚类结果可能会收敛到局部最小值。对于不规则形状的数据效果差。在现实生活中,簇并不总是均匀分布的,并且特征的权重很少相等。本文对期末成绩数据进行聚类分析是cluser设置成5,有一定的满目性,通过迭代9次各组数据达到收敛。下一步要提高数据集的数量,选择学生所有的成绩数据,合理选择K值,高维映射等,优化K-means算法,更客观地进行数据分析。
参考文献
[1]孙吉贵,刘杰,赵连宇.聚类算法研究[J].软件学报,2008(1):48-61.
[2]周志华.机器学习[M].北京:清华大学出版社,2017:197-198.
作者:邵小青 贾钰峰 章蓬伟 丁娟 单位:新疆科技学院信息科学与工程学院
返回通信学论文列表