机器学习小入门—简单运用K-means算法
机器学习小入门—简单运用K-means算法
备注:本人机器学习小白,网上跟着老师学习,自己动手跟着敲了一遍。写这个主要是为了督促自己坚持学完,如有不当还请斧正,感激不尽。
好了废话不多说,直接上代码,代码里我做了很多注释,便于理解,可以自己动手写一下
Python代码
代码如下(示例):
'''
date:2020-09-25
目的:简单复现K-means聚类算法
个人理解:应该是按照簇的个数将相近似的对象分配在一起
'''
# 导入sklearn相关包
import numpy as np
from sklearn.cluster import KMeans
# 定义加载数据的方法
def loadData(filePath):
fr = open(filePath,'r+', encoding='UTF-8')
# r+:读写打开一个文本文件
lines = fr.readlines()
# read() 每次读取整个文件,它通常将用于将文件内容放到一个字符串变量中
# readlines()一次读取整个文件(类似于 .read())
# readline()每次只读取一行
Data = [] # 用来存储城市的各项消费信息
CityName = [] # 用来存储城市的名称
for line in lines:
items = line.strip().split(",")
CityName.append(items[0])
Data.append([float(items[i]) for i in range(1,len(items))])
return Data,CityName
# 加载数据, 创建K-means算法实例,并进行训练,获得标签
if __name__ == '__main__':
data,cityName = loadData('city.txt')
# 利用loadData方法读取数据
km = KMeans(n_clusters = 6) # 创建实例,n_clusters:用于指定聚类中心的个数 ,簇的个数
label = km.fit_predict(data)
# label:聚类后个数据所属的标签,调用Kmeans方法fit_predict()进行计算
# fit_predict()计算簇中心以及为分配序号
expenses = np.sum(km.cluster_centers_,axis=1) # axis:按行求和
#print(expenses)
CityCluster = [[],[],[],[],[],[]] # 这里要根据相应的簇个数设置[]的个数
for i in range(len(cityName)):
CityCluster[label[i]].append(cityName[i])
# 将城市按label标签分成设定的簇
for i in range(len(CityCluster)):
print("Expenses:%.2f" % expenses[i]) # 将每个簇的城市输出
print(CityCluster[i]) # 将每个簇的平均消费输出
测试数据
百度网盘链接
提取码:988m