<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
1、首先是匯入所需要的庫和資料
import pandas as pd import numpy as np import random import math import matplotlib.pyplot as plt # 這兩行程式碼解決 plt 中文顯示的問題 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False df = pd.read_excel('13信科學生成績.xlsx') data = np.array(df) df.head(10)
先給大夥們看看資料集長啥樣:
用matplotlib簡單的視覺化一下初始資料:
# 輸入資料 x = data.T[0] y = data.T[1] plt.scatter(x, y, s=50, c='r') # 畫散點圖 plt.xlabel('平時') # 橫座標軸標題 plt.ylabel('期末') # 縱座標軸標題 plt.show()
2、接下來就是kmeans的核心演演算法了
k=3 i = 1 min1 = data.min(axis = 0) max1 = data.max(axis = 0) #在資料最大最小值中隨機生成k個初始聚類中心,儲存為t centre = np.empty((k,2)) for i in range(k): centre[i][0] = random.randint(min1[0],max1[0])#平時成績 centre[i][1] = random.randint(min1[1],max1[1])#期末成績 while i<500: #計算歐氏距離 def euclidean_distance(List,t): return math.sqrt(((List[0] - t[0])**2 + (List[1] - t[1])**2)) #每個點到每個中心點的距離矩陣 dis = np.empty((len(data),k)) for i in range(len(data)): for j in range(k): dis[i][j] = euclidean_distance(data[i],centre[j]) #初始化分類矩陣 classify = [] for i in range(k): classify.append([]) #比較距離並分類 for i in range(len(data)): List = dis[i].tolist() index = List.index(dis[i].min()) classify[index].append(i) #構造新的中心點 new_centre = np.empty((k,2)) for i in range(len(classify)): new_centre[i][0] = np.sum(data[classify[i]][0])/len(classify[i]) new_centre[i][1] = np.sum(data[classify[i]][1])/len(classify[i]) #比較新的中心點和舊的中心點是否一樣 if (new_centre == centre).all(): break else: centre = new_centre i = i + 1 # print('迭代次數為:',i) print('聚類中心為:',new_centre) print('分類情況為:',classify)
注意!!!這裡的k是指分成k類,讀者可以自行選取不同的k值做實驗
3、視覺化部分(將不用類用不同顏色區分開來~~)
mark = ['or', 'ob', 'og', 'ok','sb', 'db', '<b', 'pb'] #紅、藍、綠、黑四種顏色的圓點 #mark=['sb', 'db', '<b', 'pb'] plt.figure(3)#建立圖表1 for i in range(0,k): x=[] y=[] for j in range(len(classify[i])): x.append(data[classify[i][j]][0]) y.append(data[classify[i][j]][1]) plt.xlim(xmax=105,xmin=45) plt.ylim(ymax=85,ymin=-5) plt.plot(x,y,mark[i]) #plt.show()
一起來康康視覺化結果8!!
import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn import metrics df = pd.read_excel('13信科學生成績.xlsx') data = np.array(df) y_pred=KMeans(n_clusters=3,random_state=9).fit_predict(data) plt.scatter(data[:,0],data[:,1],c=y_pred) plt.show() print(metrics.calinski_harabasz_score(data,y_pred))
視覺化結果和手擼的結果略有差別,有可能是資料集的問題,也有可能是k值選取的問題,各位親們不需要擔心!!!
1.優點
(1)演演算法快速、簡單。
(2)對巨量資料集有較高的效率並且是可伸縮性的。
(3)時間複雜度近於線性,而且適合挖掘大規模資料集。K-Means聚類演演算法的時間複雜度是O(nkt) ,其中n代表資料集中物件的數量,t代表著演演算法迭代的次數,k代表著簇的數目。
2.缺點
(1)聚類是一種無監督的學習方法,在 K-means 演演算法中 K 是事先給定的,K均值演演算法需要使用者指定建立的簇數k,但這個 K 值的選定是非常難以估計的。
(2)在 K-means 演演算法中,首先需要根據初始聚類中心來確定一個初始劃分,然後對初始劃分進行優化。這個初始聚類中心的選擇對聚類結果有較大的影響,一旦初始值選擇的不好,可能無法得到有效的聚類結果,這也成為 K-means演演算法的一個主要問題。
(3)從 K-means 演演算法框架可以看出,該演演算法需要不斷地進行樣本分類調整,不斷地計算調整後的新的聚類中心,因此當資料量非常大時,演演算法的時間開銷是非常大的。所以需要對演演算法的時間複雜度進行分析、改進,提高演演算法應用範圍,而這導致K均值演演算法在巨量資料集上收斂較慢。
到此這篇關於如何利用python實現kmeans聚類的文章就介紹到這了,更多相關python實現kmeans聚類內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45