kmeans:最簡單的聚類演算法之一。kmeans演算法是一種基於樣本間相似性度量的間接聚類方法,屬於非監督學習方法。此演算法以k為引數,把n 個物件分為k個簇,以使簇內具有較高的相似度,而且簇間的相似度較低。相似度的計算根據乙個簇中物件的平均值(被看作簇的重心)來進行。此演算法首先隨機選擇k個物件,每個物件代表乙個聚類的質心。對於其餘的每乙個物件,根據該物件與各聚類質心之間的距離,把它分配到與之最相似的聚類中。然後,計算每個聚類的新質心。重複上述過程,直到準則函式收斂。
import random
import matplotlib.pyplot as plt
import numpy
class kmeans():
def __init__(self,k):
self.__k = k #k表示分類數
self.__data = # 存放原始資料
self.__pointcenter = #存放中心點,第一次的中心點隨機在__data中抽取
self.__result = [ ]
for i in range(k):
def fit(self,data,threshold,times = 50000):
''':param data: 原始資料
:param threshold: 退出條件
:param times: 次數
:return:
'''self.__data = data
self.randomcenter()
centerdistance = self.calpointcenterdistance(self.__pointcenter,self.__data)
#對原始資料進行分類,將每乙個點分到離他最近的那個中心點
i= 0
for temp in centerdistance:
index = temp.index(min(temp))
i += 1
oldcenterpoint = self.__pointcenter
newcenterpoint = self.calnewpointcenter(self.__result)
while self.calcentertocenterdistance(oldcenterpoint,newcenterpoint) >threshold:
times -= 1
result =
for i in range(self.__k):
#儲存上次的中心點
oldcenterpoint = newcenterpoint
centerdistance = self.calpointcenterdistance(newcenterpoint,self.__data)
#對原始資料進行分類,將每乙個點分到離他最近的那個中心點
i= 0
for temp in centerdistance:
index = temp.index(min(temp))
i += 1
newcenterpoint = self.calnewpointcenter(result)
self.__result = result
self.__pointcenter = newcenterpoint
return newcenterpoint, self.__result
def randomcenter(self):
while len(self.__pointcenter)index = random.randint(0,len(self.__data)-1) #隨機索引
if self.__data[index] not in self.__pointcenter:#避免重複的點
def distance(self,pointer1,pointer2):#計算兩個點之間的距離,使用任意維度
distance = (sum([(x1 - x2)**2 for x1,x2 in zip(pointer1,pointer2)]))**0.5
return distance
def calpointcenterdistance(self,center,data):#計算每個點和中心點之間的距離
centerdistance = [ ]
for i in data:
return centerdistance #centerdistance中有len(data)組資料,每組資料有k個值
pass
def calcentertocenterdistance(self,old,new):
'''計算兩次中心點之間的距離,求和求平均值
:param old:
:param new:
:return:
'''total = 0
for point1,point2 in zip(old,new):
total += self.distance(point1,point2)
return total / len(old)
def calnewpointcenter(self,result):
'''計算新的中心點
:param result:
:return:
'''newcenterpoint = [ ]
for temp in result:
temps = [[temp[x][i] for x in range(len(temp))] for i in range(len(temp[0]))]
point = [ ]
for t in temps:
#對維度求和,取平均值
return newcenterpoint
if __name__ == "__main__":
data = [[random.randint(1, 100), random.randint(1, 100)] for i in range(1000)]
for i in range(10):
kmeans = kmeans(k=5)
centerpoint, result = kmeans.fit(data, 0.0001)
print(centerpoint)
plt.plot()
plt.title("kmeans classification")
i = 0
tempx =
tempy =
color =
for temp in result:
temps = [[temp[x][i] for x in range(len(temp))] for i in range(len(temp[0]))]
color += [i] * len(temps[0])
tempx += temps[0]
tempy += temps[1]
i += 2
plt.scatter(tempx, tempy, c=color, s=30)
plt.show()
Python 機器學習基礎
pandas matplotlib reference numpy 的資料結構 numpy的基本操作 當進行 和 等邏輯判斷時,numpy會對array中所有元素進行判斷。import numpy vector numpy.array 5,10,6,7 vector 10 output array ...
python基礎(機器學習)
高階函式 import time def deco func starttime time.time func endtime time.time msecs endtime starttime 100 print time is d ms msecs def func print hello ti...
python機器學習基礎
可定義為 機器學習是從資料中自動分析獲得的模型,並利用模型對未知資料進行 可分為 監督學習 主要特點是要在訓練模型時提供給學習系統訓練樣本以及樣本隊員的類別標籤,因此又稱為有導師學習。例 學生從老師那裡獲取知識,資訊,老師提供對錯知識 告知最終答案的學習過程。典型的監督學習方法 決策樹,支援向量機 ...