kmeans python变量重要性_机器学习算法之聚类算法Kmeans并找到最佳K值的Python实践...

Kmeans聚类算法的大概流程是:①从样本中随机找出K个样本作为中心点;②求所有样本到这些样本的距离,按照最短的进行归类;③求每个聚类中的样本的元素的平均值,作为新的中心点;④继续②,③,知道所有样本再也无法找到新的聚类,就算完成。### 一、接下来使用Numpy实现python代码,测试有效并且带注释:Kmeans.py:```python# encoding: utf-8"""Created on 2017年12月11日"""import timefrom numpy import *from scipy.cluster.hierarchy import centroidimport matplotlib.pyplot as plt# 计算欧氏距离def euclDistance(vector1,vector2):return sqrt(sum(power(vector2-vector1,2)))# 初始化K个中心点def initCentroids(dataSet,k):# 拿到数据集的格式 例如[[2,3,4][3,4,5]].shape = (2,3) [1,2,3] = (3,)numSamples,dim = dataSet.shape# 按照给定的shape,初始化一个数据类型和排列方式的填满0的数组centroids = zeros((k,dim))for i in range(k):index = int(random.uniform(0,numSamples)) #样本集随机挑一个,作为初始质心centroids[i,:] = dataSet[index,:]return centroids# k-means clusterdef kmeans(dataSet,k):numSamples = dataSet.shape[0]#mat 对数组转换用于线性操作,类型变为:numpy.matrixlib.defmatrix.matrix# 初始化一个二维数据,第一列存储样本属于哪个聚类 第二列存储样本和中心的距离 [[0,0],[0,0]... ...]clusterAssment = mat(zeros((numSamples,2)))clusterChanged = True## 步骤1:初始化中心点centroids = initCentroids(dataSet, k)while clusterChanged:clusterChanged = False# 遍历每个样本for i in range(numSamples):minDist = 1000000000.0 #与样本点最近族群距离minIndex = 0 #所属族#步骤2 找到一个最近的中心点for j in range(k):distance = euclDistance(centroids[j,:], dataSet[i,:]) #计算每个点到样本点的距离,找出最近的那一个样本if distance  len(mark):print("Sorry! Your k is too large!please contact Zouxy")return 1for i in range(numSamples):markIndex = int(clusterAssment[i,0]) #每个样本所属族群plt.plot(dataSet[i,0],dataSet[i,1],mark[markIndex])mark = ["Dr","Db","Dg","Dk","^b","+b","sb","db","

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值