随着数据驱动决策的普及,企业越来越依赖历史数据来分析个体行为和识别模式。电子商务、银行和保险公司是这一趋势的典型代表。这些业务中,聚类算法被广泛使用。聚类,顾名思义,就是将相似的数据点分组成群。那么,聚类是如何工作的呢?本文将为解答这个问题。
聚类是一种将相似元素分组的过程。它可以被定义为将数据分解成包含相似数据点的组的过程。
独占聚类 - 两个或多个不重叠的组或聚类。 重叠聚类 - 两个或多个重叠的组或聚类。 层次聚类 - 构建聚类的层次结构。
K-均值算法使用聚类方法将相似的数据点分到同一组中,组内的数据点具有共同特征,与其他组的数据点相比则具有明显差异。同一组中的点尽可能相似,不同组的点尽可能不同。
输入聚类数量,计算数据点与聚类中心的距离,将数据点分配到最近的聚类,重新计算质心,并为所有数据点重复此过程。
让通过一个表格来理解K-均值算法,其中有数据点,并将这些数据点聚类到两个聚类中(K=2)。最初,考虑数据点1和数据点2作为初始质心,即聚类1(X=121和Y=305)和聚类2(X=147和Y=330)。
使用欧几里得距离公式,剩余的数据点3到33被分到两个聚类k1和k2中,这取决于它们与聚类中心的距离。
sqrt((xn - xc)^2 + (yn - yc)^2)
其中xn和yn是3到33的其他数据点,xc和yc是假设的聚类1和聚类2的质心。
新质心k2 = (x, y: (sum(x)/n, sum(y)/n))
# 导入所需的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 创建数据框
df = pd.read_excel("dat1.xlsx")
df.head()
df.shape
df.describe()
# 检查缺失值并删除“Data Points”列
df.isnull().sum()
df.drop(columns=['Data Points'], inplace=True)
df.head()
# 建模
X1 = df.values
# 导入KMeans
from sklearn.cluster import KMeans
# 寻找最佳“K”聚类值
k_inertia = []
for k in range(1, 11):
kmeans = KMeans(n_clusters=k, init='k-means++')
kmeans.fit(X1)
k_inertia.append(kmeans.inertia_)
# 可视化以找到“K值”
plt.figure(figsize=(12,6))
plt.grid()
plt.plot(range(1,11), k_inertia, linewidth=2, color="red", marker="8")
plt.xlabel('K Values')
plt.ylabel("K_Inertia")
plt.show()
# 将K值设为2
kmeans = KMeans(n_clusters=2)
label = kmeans.fit_predict(X1)
print(label)
print(kmeans.cluster_centers_)
# 绘制散点图
plt.scatter(X1[:,0], X1[:,1], c=kmeans.labels_, cmap='rainbow')
plt.scatter(kmeans.cluster_centers_[:,0], kmeans.cluster_centers_[:,1], color='black')
plt.title('K-Means')
plt.xlabel('Distance')
plt.ylabel('Cost')
plt.show()