91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 5KB
    文件類型: .py
    金幣: 1
    下載: 0 次
    發布日期: 2021-05-08
  • 語言: Python
  • 標簽: python??GUI??聚類??

資源簡介

python界面GUI實現k-means聚類算法,基于tkinter的界面簡單代碼開發。k-means算法是自己寫的,不是調用的庫函數。程序最后可以實現,隨機生成樣本點,設置聚類中心數,區分顏色顯示聚類結果,無限次迭代,退出等。

資源截圖

代碼片段和文件信息

import?numpy?as?np
import?matplotlib.pyplot?as?plt
import?tkinter
from??tkinter??import?ttk
from?matplotlib.backends.backend_tkagg?import?FigureCanvasTkAgg?NavigationToolbar2TkAgg



‘‘‘歐式距離‘‘‘
def?ecludDist(x?y):
????return?np.sqrt(sum(np.square(np.array(x)?-?np.array(y))))

‘‘‘曼哈頓距離‘‘‘
def?manhattanDist(x?y):
????return?np.sum(np.abs(x?-?y))

‘‘‘夾角余弦‘‘‘
def?cos(x?y):
????return?np.dot(x?y)/(np.linalg.norm(x)?*?np.linalg.norm(y))

‘‘‘計算簇的均值點‘‘‘
def?clusterMean(dataset):
????return?sum(np.array(dataset))?/?len(dataset)

‘‘‘生成隨機均值點‘‘‘
def?randCenter(dataset?k):
????temp?=?[]
????while?len(temp)?????????index?=?np.random.randint(0?len(dataset)-1)
????????if??index?not?in?temp:
????????????temp.append(index)
????return?np.array([dataset[i]?for?i?in?temp])

‘‘‘以數據集的前k個點為均值點‘‘‘
def?orderCenter(dataset?k):
????return?np.array([dataset[i]?for?i?in?range(k)])


def?quit():???????????????????????
????“““點擊退出按鈕時調用這個函數“““
????root.quit()??#?結束主循環
????root.destroy()??#?銷毀窗口

‘‘‘聚類‘‘‘

def?kMeans(dataset?dist?center?k):
????global?flagfa
????#all_kinds用于存放中間計算結果
????all_kinds?=?[]
????for?_?in?range(k):
????????temp?=?[]
????????all_kinds.append(temp)
????#計算每個點到各均值點的距離??
????for?i?in?dataset:
????????temp?=?[]
????????for?j?in?center:
????????????temp.append(dist(i?j))
????????all_kinds[temp.index(min(temp))].append(i)
????#打印中間結果????
????for?i?in?range(k):
????????print(‘第‘+str(i)+‘組:‘?all_kinds[i]?end=‘\n‘)
????flag?+=?1
????print(‘************************迭代‘+str(flag)+‘次***************************‘)
????#更新均值點
????center_?=?np.array([clusterMean(i)?for?i?in?all_kinds])
????if?(center_?==?center).all():
????????print(‘結束‘)
????????#f?=?plt.figure(figsize=(54)dpi=100)
????????#a?=?f.add_subplot(111)??#?添加子圖:1行1列第1個
????????for?i?in?range(k):
????????????print(‘第‘+str(i)+‘組均值點:‘?center_[i]?end=‘\n‘)
????????????a.scatter([j[0]?for?j?in?all_kinds[i]]?[j[1]?for?j?in?all_kinds[i]]?marker=‘*‘)
????????a.grid()
????????plt.show()
????????canvas.draw

評論

共有 條評論