放假第7天 K means 演算法 隨機中心點

2021-10-01 05:31:06 字數 2757 閱讀 7110

學而思,每日寫**

時間過得好快啊!

import numpy as np

def loaddataset(filename): #我這裡先想一下 open fr.readlines

datamat=

fr=open(filename)

for line in fr.readlines(

): curline=line.strip(

).split(

'\t'

) fltline=map(float,curline)

return datamat

def disteclud(veca,vecb):

return np.sqrt(np.sum(np.power(veca-vecb,2))

)#找個k個隨機中心點座標

def randcent(dataset,k): #所以說啊,要傳什麼引數也還是想不起來啊

n=np.shape(dataset)

[1]#找個表示行吧 不是是列

#接下來 min min——隨機數*range 然後資料儲存 你存成什麼形式,存在哪

centroids=np.mat(np.zeros((k,n))

)for j in range(n):

#注意表達形式,是每個j列的最小值

minj=min(dataset[:,j]

) rangej=float(max(dataset[:,j]

)-min(dataset[:,j]

))#每一步都要注意資料的儲存格式

array2=minj+rangej*np.random.rand(k,1)

#k行一列的【0,1】之間的數值

centroids[:,j]

=np.mat(array)

#所以是array就直接放進去了

return centroids

def kmeans(dataset,k,distmeas=disteclud,createcent=randcent):

m=np.shape(dataset)

[0] clusterassment=np.mat(np.zeros(m,2))

#你現在連為什麼寫這個mat都不知道,知識抄有用嗎,就是存index和mindist的

centroids=createcent(dataset,k)

clusterchanged=true

#敢問您為什麼 寫個括號 while clusterchanged():

while clusterchanged:

clusterchanged=false

for i in range(m):

mindist=np.inf #無窮

minindex=-1

for j in range(k):

distj=distmeas(centroids[j,:]-dataset[i,:]

)if distjimindist=distj

index=j

if clusterassment[i,0]

!=minindex:

clusterchanged=true

clusterassment[i,:]

=minindex,mindist

#因為紙質筆記,連縮排在**都不知道了..'''

你寫的**是沒有靈魂的 因為你根本不怎麼思考,倒是像在死記硬背或者硬抄

首先是 迴圈 乙個是、 min距離變化了嗎 變化了的話要等於 min index也要變

乙個是 到了最後迴圈結束 如果不再變了 制止迴圈 true false 最小距離不變停止迴圈

資料儲存和預設

首先是mindist 可以是負無窮或者是0 index是 0 開始的 等於j就不需要加號或者+=1

儲存 np.mat(np.zeros((m,2))

然後存進去[i,:]'''

'''下面是重新求三個中心點的距離

.a是轉換成陣列

true,false 代表的是屬於當前遍歷cent類別

'''for cent in range(k):

ptsinclust=dataset[np.nonzero(clusterassment[:,0].a==cent)

[0]]

#np.nonzero 返回陣列中不為false的行號下標組和列號下標組 就是把種都分別歸類起來

#dataset 是組成乙個矩陣

centroids[cent,:]

=np.mean(ptsinclust,axis=0)

return centroids,clusterassment

if_name_==

"_main_"

: datamat=np.mat(load dataset(

'\testset.txt'

)) k=3

centroids,clusterassment=kmeans(datamat,k,distmeas=disteclud,creatcent=randcent)

print centroids

print clusterassment

'''知識點補充

dataset原先是列表,

np.mat()是將序列轉為np的二維陣列,

np.transpose()是將陣列轉置'

''

第7天 CSS入門

在了解 xhtml 規 範後,我們就要 進行css布局。首先先介紹一些 css的入門知 識。如果你已 經很熟悉了,可以跳過這一 節,直接進 入下一節。css是 cascading style sheets 層疊 樣式表 的 縮寫。是一 種對web 文件新增樣式的 簡單機制,屬於表 現層的布局語言。1...

第7天 CSS入門

在了解xhtml 規範後,我們就要進行css布局。首先先介紹一些css的入門知識。如果你已經很熟悉了,可以跳過這一節,直接進入下一節。css是cascading style sheets 層疊樣式表 的縮寫。是一種對web文件新增樣式的簡單機制,屬於表現層的布局語言。分析乙個典型css的語句 p 顏...

python學習第7天

崔鑫陽 2019.225 課堂檢測題 輸入兩個數 求出他們之間所有的素數 把這些素數放在 乙個列表裡 求這個列表裡素數的和 以及 最大值 和最小值 寫到乙個 裡 num 1 int input 輸入第乙個數 num 2 int input 輸入第二個數 if num 1 num 2 turn num...