课程作业练习 K均值聚类(最小误差平方和准则)
这是学习机器学习课程的一个作业,自己的学习记录,利用python实现,依据图中的算法思路完成,初学,还需要很多改进。
首先生成了5类正态分布的点,对这些点进行聚类。
其中的NMI函数的实现来源于网络,侵权即删。
代码可用,循环5次取均值
#by gao
import numpy as np
import random
import collections
import matplotlib.pyplot as plt
import math
np.random.seed(11)
sigma=[[1, 0], [0, 1]]
mu1=(1,-1)
x1=np.random.multivariate_normal(mu1,sigma,200)
mu2=(5,-4)
x2=np.random.multivariate_normal(mu2,sigma,200)
mu3=(1,4)
x3=np.random.multivariate_normal(mu3,sigma,200)
mu4=(6,4)
x4=np.random.multivariate_normal(mu4,sigma,200)
mu5=(7,0.0)
x5=np.random.multivariate_normal(mu5,sigma,200)
lists=(x1,x2,x3,x4,x5)
x_all=[]
X_all=[]
for i in lists:
x_all.extend(i)
X_all.append(i)
def Euc_distance(x1,x2):
l1=((abs(np.linalg.norm(x1)-np.linalg.norm(x2)))**2)**0.5
return l1
def initial_point(k,x):
point_list=[random.choice(x) for choices in range(k)]
return point_list
def sel_point(k,x,point_list):
all_f=[]
for i1 in x:#循环每一个点
f=[]
for i in point_list:#循环簇心中的每一个点
f.append(Euc_distance(i1,i))