# -*- coding: utf-8 -*-
"""
In the general case, we have a "target function" that we want to minimize,
and we also have its "gradient function". Also, we have chosen a starting
value for the parameters "theta_0".
"""
#### K-均值聚类支持函数
from numpy import *
#import kMeans_my
#from numpy import *
#import kMeans_my
#from numpy import *
###导入数据
def loadDataSet(fileName): #general function to parse tab -delimited floats
dataMat = [] #assume last column is target value
fr = open(fileName)
for line in fr.readlines():
curLine = line.strip().split('\t')
fltLine = map(float,curLine) #map all elements to float()
dataMat.append(fltLine)
return dataMat
#dataMat = mat(kMeans_my.loadDataSet('testSet.txt'))
#定义两个向量的欧氏距离。
def distEclud(vecA,vecB):
return sqrt(sum(power(vecA-vecB,2)))
## 构建簇质心 #初始化k个簇的质心函数centroid
#传入的数据是Numpy的矩阵格式。
def randCent(dataSet,k):
n = shape(dataSet)[1]
centroids = mat(zeros((k,n)))
for j in range(n):
minJ = min(dataSet[:,j]) #找出矩阵dataMat第J列最小值。
rangeJ = float(max(dataSet[:,j])-minJ) #计算第J列最大值最小值之差。
#赋予一个随机质心,它的值在整个数据集的边界之内。
centroids[:,j] = minJ + rangeJ * random.rand(k,1)
return centroids #返回一个随机的质心矩阵
# import kMeans_my
# from numpy import *
# dataMat = mat(kMeans_my.loadDataSet('testSet.txt'))
# min(dataMat[:,0])
# min(dataMat[:,1])
# max(dataMat[:,1])
# max(dataMat[:,0])
# kMeans_my.randCent(dataMat,2)
#kMeans_my.distEclud(dataMat[0],dataMat[1])
### k-均值聚类算法
def kMeans(dataSet,k,distMeas=distEclud,createCent = randCent):
m = shape(dataSet)[0] # 获得行数m
clusterAssment = mat(zeros((m,2))) #初始化一个矩阵,用来记录簇索引和存储误差。
centroids = createCent(dataSet,k) #随机的得到一个质心矩阵簇。
clusterChanged = True
while clusterC
K-means算法对地图上点进行聚类(未修订篇)
最新推荐文章于 2022-11-18 21:17:22 发布
本文深入探讨了K-means算法在地理数据分析中的应用,通过实例展示了如何使用K-means对地图上的点进行有效聚类,以揭示地理位置数据的潜在模式和分布特征。
摘要由CSDN通过智能技术生成