《机器学习实战》系列博客主要是实现并理解书中的代码,相当于读书笔记了。毕竟实战不能光看书。动手就能遇到许多奇奇怪怪的问题。博文比较粗糙,需结合书本。博主边查边学,水平有限,有问题的地方评论区请多指教。书中的代码和数据,网上有很多请自行下载。
10.1 K- 均值聚类算法
K- 均值聚类支持函数
数据的导入 ,向量距离的计算 , 随机质心计算
#coding: utf-8
from numpy import *
def loadDataSet(fileName):
dataMat = []
fr = open(fileName)
for line in fr.readlines():
curLine = line.strip().split('\t') #tab及换行符处理
fltLine = map(float,curLine)
dataMat.append(fltLine)
return dataMat
def distEclud(vecA, vecB):
return sqrt(sum(power(vecA - vecB, 2))) #计算两个向量的距离
def randCent(dataSet, k):
n = shape(dataSet)[1]
centroids = mat(zeros((k,n)))# 随机生成k个簇中心 k行n列
for j in range(n):
minJ = min(dataSet[:,j])
rangeJ = float(max(dataSet[:,j]) - minJ)
centroids[:,j] = mat(minJ + rangeJ * random.rand(k,1))
return centroids
>>> import kMeans
>>> from numpy import *
>>> datMat = mat(kMeans.loadDataSet('testSet.txt'))
>>> min(datMat[:,0])
matrix([[-5.379713]])
>>> max(datMat[:,0])
matrix([[ 4.838138]])
>>> kMeans.randCent(datMat,2)
matrix([[ 0.8442008 , 4.54209089],
[-2.47119846, -0.26540836]])