K-means算法对地图上点进行聚类(未修订篇)

# -*- 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
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值