【机器学习】KMeans算法聚类分析可视化

机器学习–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()

你可能感兴趣的:(机器学习,Python,python,机器学习,数据分析,k-means)