欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

sklearn无监督学习-聚类k-means

程序员文章站 2022-06-13 08:55:45
...

无监督学习

聚类

就是根据数据的”相似性”将数据分为多类的过程。评估两个不同样本之间的“相似性”,通常使用的方法就是计算两个样本之间的“距离”。使用不同的方法计算样本间的距离会关系到聚类结果的好坏。

1样本距离计算方法

欧式距离,曼哈顿距离,马氏距离,夹角余弦

2sklearn.cluster

sklearn.cluster模块提供的各聚类算法函数可以使用不同的数据形式进行输入:标准数据输入格式:[样本个数,特征个数]定义的矩阵

3K-means方法及应用

K-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。其处理过程如下:
1.随机选择k个点作为初始的聚类中心;
2.对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇
3.对于每个簇。计算所有点的均值作为新的聚类中心
4.重复2、3直到聚类中心不再发生改变
下面我们来看一个示例代码:(代码和数据在我的github给出,详见https://github.com/coder23263/k-means)

import numpy as np
from sklearn.cluster import KMeans
def loadData(filePath):
    fr = open(filePath,'r+')
    lines = fr.readlines()
    retData = []
    retCityName = []
    for line in lines:
        items = line.strip().split(",")
        retCityName.append(items[0])
        retData.append([float(items[i]) for i in range(1,len(items))])
    return retData,retCityName
if __name__ == '__main__':
    data,cityName = loadData('city.txt')
    km = KMeans(n_clusters=4)
    label = km.fit_predict(data)
    expenses = np.sum(km.cluster_centers_,axis=1)
    #print(expenses)
    CityCluster = [[],[],[],[]]
    for i in range(len(cityName)):
        CityCluster[label[i]].append(cityName[i])
    for i in range(len(CityCluster)):
        print("Expenses:%.2f" % expenses[i])
        print(CityCluster[i])

首先我给出一下调用kmeans方法所需参数

  • n_cluster 用于指定聚类中心的个数
  • init:初始聚类中心的初始化方法max_iter 最大迭代次数
  • 一般调用时只给出n_clusters即可,init默认是k-means++,max_iter默认是300
  • data 加载的数据
  • lable:聚类后各数据所属的标签
  • axis 按行求和
  • fit_predict计算簇中心以及为簇分配序号

这段代码是对全国各个省份人均消费水平的聚类
首先,我们导入numpy和sklearn库
loadData函数是用来获取文件数据的,我就不多说了
下面的主函数就是k-means方法了
首先我们指定n_cluster即聚类中心数为4个
fit_predict计算簇中心以及为簇分配序号
expenses为对八项指标数据求和所得的人均消费水平
CityCluster = [[],[],[],[]]预备储备分类后的各个城市簇
依次打印分类后的城市数据
最后,感谢北理工老师提供的资源,这个示例是我在mooc上面看到的,北京理工大学的机器学习课程,主讲老师是礼欣和嵩天老师。我也是初学者,欢迎留言提问,一起进步。

相关标签: sklearn