机器学习–KMeans算法聚类分析可视化
Kmeans算法可以直接引用库函数,我们只需要了解一下其参数就可以了:
KMeans(n_clusters=8, init='k-means++', n_init=10, max_iter=300, tol=0.0001,
precompute_distances='auto', verbose=0, random_state=None,
copy_x=True, n_jobs=None, algorithm='auto')
参数 | 说明 |
---|
n-cluster | 分类簇的数量 | max_iter | 最大的迭代次数 | n_init | 算法的运行次数 | init | 接收待定的string。kmeans++表示该初始化策略选择的初始均值向量之间都距离比较远,它的效果较好;random表示从数据中随机选择K个样本最为初始均值向量;或者提供一个数组,数组的形状为(n_cluster,n_features),该数组作为初始均值向量。 | precompute_distance | 接收Boolean或者auto。表示是否提前计算好样本之间的距离,auto表示如果nsamples*n>12 million,则不提前计算。 | tol | 接收float,表示算法收敛的阈值。 | N_jobs | 表示任务使用CPU数量 | random_state | 表示随机数生成器的种子。 | verbose | 0表示不输出日志信息;1表示每隔一段时间打印一次日志信息。如果大于1,打印次数频繁。 |
接下来说一下我被绊住的地方,一个是数据处理,一个是散点图坐标确定。
1)数据处理还是要用Pandas库的read_csv() 函数,然后采用最后两列数据(age和deposit)作为数据特征进行聚类分析依据。
2)散点图绘制坐标主要思想就是通过索引x 的存储值来获得一个点的坐标。
下面是源码:
#!usr/bin/env python3.9
# ! -*- coding = utf-8 -*-
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
Cus_data = pd.read_csv(r'E:\研究生生活\课程\研一下\机器学习\Customer_Info.csv', encoding='gb18030')
print('原始数据形状为:', Cus_data.shape)
Cus_data.info() # 查看是否存在缺失值,与形状有存在差异,则存在缺失值
x = Cus_data.iloc[:, 3:].values # 使用最后两列作为分群依据
kmeans_model = KMeans(n_clusters=3, init='k-means++', random_state=0) # 模型创建
y_kmeans = kmeans_model.fit_predict(x) # 进行聚类处理,这里数据已经是array形式
Cus_data['聚类结果'] = kmeans_model.labels_
# 聚类结果可视化
# 颜色/标签/形状列表
colors_list = ['teal', 'skyblue', 'tomato']
labels_list = ['Not very rich', 'Middle', 'Rich']
markers_list = ['o', '*', 'D'] # 分别为圆、星型、菱形
# 进行x[y_kmeans==i,0]
for i in range(3):
plt.scatter(x[y_kmeans == i, 0], x[y_kmeans == i, 1], s=100, c=colors_list[i], label=labels_list[i],
marker=markers_list[i])
# 设置聚类中心点,颜色设置为黄色
plt.scatter(kmeans_model.cluster_centers_[:, 0], kmeans_model.cluster_centers_[:, 1], s=300, c='yellow',
label='centroids')
plt.legend(loc=1) # 图例位置放在第二象限
plt.title('Clusters of Customer Info')
plt.xlabel('Age')
plt.ylabel('Deposit')
plt.show()
|