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

无监督学习

聚类

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

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上面看到的,北京理工大学的机器学习课程,主讲老师是礼欣和嵩天老师。我也是初学者,欢迎留言提问,一起进步。

猜你喜欢

转载自blog.csdn.net/qq_41663800/article/details/89879604