K-Means聚類算法數(shù)據(jù)分析

時間:2022-08-16 03:07:43

導語:K-Means聚類算法數(shù)據(jù)分析一文來源于網(wǎng)友上傳,不代表本站觀點,若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。

K-Means聚類算法數(shù)據(jù)分析

摘要:k-means算法是無監(jiān)督學習中經(jīng)典的算法之一,通過組間的相異性規(guī)則把不同事物劃分為若干類,使各類之間的數(shù)據(jù)最為相似,不同類數(shù)據(jù)相異性盡可能最大化。本文通過K-means聚類算法分析某學校大學生期末大學信息技術基礎和C語言程序設計的成績,通過數(shù)據(jù)分析表明想要提高學生的整體成績,需要在C語言程序設計上付出更大的努力。

關鍵詞:K-means;數(shù)據(jù)分析;機器學習

1概述

機器學習中有兩類大問題:一個是聚類,另一個是分類。聚類是統(tǒng)計學的概念,屬于非監(jiān)督機器學習(unsupervisedlearning),應用中數(shù)據(jù)挖掘,數(shù)據(jù)分析等領域,根據(jù)數(shù)據(jù)不同特征,將其劃分為不同的數(shù)據(jù)類,屬于一種無監(jiān)督學習方法。它的目的是使得屬于同一類別個體之間的密度盡可能的高,而不同類別個體間的密度盡可能的低[1]。分類是用已知的結果類別訓練數(shù)據(jù),對預測數(shù)據(jù)進行預測分類,屬于有監(jiān)督學習(supervisedlearning),常見的算法如邏輯回歸、支持向量機、深度學習等。聚類也是對數(shù)據(jù)進行歸類,不過聚類算法的訓練數(shù)據(jù)只有輸入,事先并不清楚數(shù)據(jù)的類別,通過特征的相似性對文本進行無監(jiān)督的學習分類。聚類試圖將數(shù)據(jù)集中的樣本劃分為若干個通常不相交的子集,每個子集稱為一個簇(cluster)[2]。K-means屬于經(jīng)典聚類算法,根據(jù)樣本間的距離或者相異性進行聚類,把特征相似的樣本歸為一類,相異的樣本歸為不同的簇。

2理論基礎

K-Means算法是從訓練集D={x1,x2,…,xn}中選取K個樣本作為初始聚類中心c=c1,c2,…,ck,計算數(shù)據(jù)集中每個樣本xi到k個樣本初始中心點的距離,并把每個樣本劃分到離它最近的中心點的類中;每個簇類別βj,重新計算該簇所有樣本的質心βj=1|cj|i∈cjΣxj,重復以上兩步,迭代更新直到每類質心的變化小于閾值或者達到最大迭代次數(shù)。基本步驟為選擇數(shù)據(jù)中心,計算距離,分簇,重新選擇數(shù)據(jù)的質心,重復,直到數(shù)據(jù)收斂或達到最大迭代次數(shù)。該算法不能保證收斂到全局最優(yōu)。選擇訓練過程的偽代碼如下:訓練數(shù)據(jù)n個m維的數(shù)據(jù),隨機生成初始化聚類中心k個m維的點。While(t)t為迭代次數(shù)Foriinrange(n+1):#n為樣本點個數(shù)。Forjinrange(k+1):#k為簇的數(shù)目。Foriinrange(k+1):#計算樣本i到每個簇質點j的距離。找出屬于這個簇中的所有數(shù)據(jù)點,計算這類的質心。重復以上步驟,直到每類質心變化小于設定的閾值或者達到最大的迭代次數(shù)。設置最大特征數(shù),設置分類的組K值,訓練特征數(shù)據(jù)進行數(shù)據(jù)分析。本文將數(shù)據(jù)過濾清洗,去除停用詞轉化為向量模型,使用TF-IDF算法對詞頻進行權重計算,TF是詞頻,IDF是逆文檔頻率,TF-IDF反應了一個詞在文本中的重要性它的值是TF×IDF。使用Python中的sklearn模塊的TfidfTransformer、CountVectorizer方法計算TF-IDF值,轉化為空間向量模型,選用K-means聚類算法對數(shù)據(jù)進行挖掘與分析。

3實驗結果與分析

本文選擇新疆科技學院某專業(yè)期末作為分析對象,選取大學信息技術基礎和C語言程序設計成績作為實驗數(shù)據(jù)。利用Python聚類模塊K-means構建聚類模型并實例化,設置分類K=5值。其中K值選取直接影響K-means算法的準確性,選取K值常見的方法有手肘法、Gapstatistic方法。下一步訓練特征數(shù)據(jù),查看聚類結果labels,對數(shù)據(jù)進行聚類分析,部分代碼如下。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.show()kmeans=KMeans(n_clusters=5)#n_clusters:簇的數(shù)量。kmeans.fit(X)print("質心:",kmeans.cluster_centers_)#獲取聚類后的質心。print("標簽:",kmeans.labels_)#獲取每個樣本所屬的簇。print("SSE:",kmeans.inertia_)#獲取SSE(簇慣性)。print("迭代次數(shù):",kmeans.n_iter_)#獲取迭代次數(shù)。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"迭代次數(shù):{kmeans.n_iter_}")

4結論與不足

通過對數(shù)據(jù)聚類分析表明成績可以大致分為4類,其中大學信息技術基礎學生成績較好,C語言程序設計對學生有一定難度,想要提高總體成績,需要重點放到在C語言程序設計這門課上,建議優(yōu)化教學設計,采取任務驅動式教學,分層次因材施教,培養(yǎng)好學生的計算思維能力,為后面的專業(yè)課打好基礎。K-means具有實現(xiàn)簡單,應用廣泛等優(yōu)點,但由于需要指定K值簇,直接影響分類的準確性,聚類結果可能會收斂到局部最小值。對于不規(guī)則形狀的數(shù)據(jù)效果差。在現(xiàn)實生活中,簇并不總是均勻分布的,并且特征的權重很少相等。本文對期末成績數(shù)據(jù)進行聚類分析是cluser設置成5,有一定的滿目性,通過迭代9次各組數(shù)據(jù)達到收斂。下一步要提高數(shù)據(jù)集的數(shù)量,選擇學生所有的成績數(shù)據(jù),合理選擇K值,高維映射等,優(yōu)化K-means算法,更客觀地進行數(shù)據(jù)分析。

參考文獻

[1]孫吉貴,劉杰,趙連宇.聚類算法研究[J].軟件學報,2008(1):48-61.

[2]周志華.機器學習[M].北京:清華大學出版社,2017:197-198.

作者:邵小青 賈鈺峰 章蓬偉 丁娟 單位:新疆科技學院信息科學與工程學院