首页 > 其他 > 详细

机器学习-kmeans

时间:2020-03-10 00:11:51      阅读:60      评论:0      收藏:0      [点我收藏+]

机器学习-kmeans

KMeansK均值)是典型的基于距离的排他划分方法:给定一个n个对象的数据集,它可以构建数据的k个划分,每个划分就是一个聚类,并且k<=n,同时还满足两个要求:

1.每个组至少包含一个对象

2.每个对象必须属于且仅属于一个组

步骤:

1.首先创建一个初始化分,随机的选择k个对象,每个对象初始的代表一个聚类中心。对于其他对象,根据其与各个聚类中心的距离,将它们赋给最近的聚类。

递归重定位,尝试通过对象在划分间移动来改进划分。重定位即:当有新的对象加入聚类或者已有对象离开聚类的时候,重新计算聚类的平均值,然后对对象进行重新分配。这个过程不断重复,直到聚类中的数据不再变化为止。

代码如下

from numpy import *
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

def file2matrix(filePath, lineSplit):
    dataSet = []
    fr = open(filePath, r)
    content = fr.read()
    for line in content.splitlines():
        dataSet.append([line.split(\t)[0], line.split(\t)[1]])
    fr.close()
    return dataSet


def drawScatter(plt, dataMat, size, color, mrkr):
    X = dataMat[:,0]
    Y = dataMat[:,-1]
    plt.scatter(X.tolist(), Y.tolist(), c=color, marker=mrkr, s=size)
    plt.xlabel("x")
    plt.ylabel("y")
    plt.title("Kmeans")
    plt.legend()


k = 4
dataSet = file2matrix("/Users/FengZhen/Desktop/accumulate/机器学习/推荐系统/kmeans聚类测试集.txt", "\t")
dataMat = mat(dataSet)
print(dataMat)
# 执行kmeans算法
kmeans = KMeans(init=k-means++, n_clusters=k)
kmeans.fit(dataMat)
print(kmeans.cluster_centers_)

#绘制计算结果
drawScatter(plt, dataMat, size=20, color=b, mrkr=.)
drawScatter(plt, kmeans.cluster_centers_, size=20, color=red, mrkr=D)
plt.show()

 技术分享图片

 

机器学习-kmeans

原文:https://www.cnblogs.com/EnzoDin/p/12452487.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!