本文共 1734 字,大约阅读时间需要 5 分钟。
就是根据数据的”相似性”将数据分为多类的过程。评估两个不同样本之间的“相似性”,通常使用的方法就是计算两个样本之间的“距离”。使用不同的方法计算样本间的距离会关系到聚类结果的好坏。
欧式距离,曼哈顿距离,马氏距离,夹角余弦
sklearn.cluster模块提供的各聚类算法函数可以使用不同的数据形式进行输入:标准数据输入格式:[样本个数,特征个数]定义的矩阵
K-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。其处理过程如下:
1.随机选择k个点作为初始的聚类中心; 2.对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇 3.对于每个簇。计算所有点的均值作为新的聚类中心 4.重复2、3直到聚类中心不再发生改变 下面我们来看一个示例代码:(代码和数据在我的github给出,详见https://github.com/coder23263/k-means)import numpy as npfrom sklearn.cluster import KMeansdef 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,retCityNameif __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方法所需参数
这段代码是对全国各个省份人均消费水平的聚类
首先,我们导入numpy和sklearn库 loadData函数是用来获取文件数据的,我就不多说了 下面的主函数就是k-means方法了 首先我们指定n_cluster即聚类中心数为4个 fit_predict计算簇中心以及为簇分配序号 expenses为对八项指标数据求和所得的人均消费水平 CityCluster = [[],[],[],[]]预备储备分类后的各个城市簇 依次打印分类后的城市数据 最后,感谢北理工老师提供的资源,这个示例是我在mooc上面看到的,北京理工大学的机器学习课程,主讲老师是礼欣和嵩天老师。我也是初学者,欢迎留言提问,一起进步。转载地址:http://vykrn.baihongyu.com/