我目前正在学习集群。为了练习聚类,我使用了这个数据集。
在对 k 的多个值运行 K-means 聚类并绘制结果之后,我可以看到缩放正在影响结果(在集群 SSE 内),我想用这篇文章来确认我对为什么会这样的直觉。
我不认为这是集群内 SSE 的有意义的减少,因为数值距离对比例很敏感,而且我认为这对模型的准确性没有任何影响。这种直觉正确吗?
我只是没想到标准化和规范化之间的减少会如此剧烈。
代码和结果:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('customers.csv')
X = df.iloc[:, [3, 4]].to_numpy()
from sklearn.preprocessing import StandardScaler, MinMaxScaler
ssc, mmsc = StandardScaler(), MinMaxScaler()
X_ssc = ssc.fit_transform(X)
X_mmsc = mmsc.fit_transform(X)
from sklearn.cluster import KMeans
# Unscaled
k_vals = list(range(2, 21))
WCSSE = []
for k in k_vals:
kmeans = KMeans(n_clusters=k)
model = kmeans.fit(X)
WCSSE.append(model.inertia_)
plt.plot(WCSSE, marker='o', markersize=10)
# Standard Scaler
k_vals = list(range(2, 21))
WCSSE = []
for k in k_vals:
kmeans = KMeans(n_clusters=k)
model = kmeans.fit(X_ssc)
WCSSE.append(model.inertia_)
plt.plot(WCSSE, marker='o', markersize=10)
# MinMax scaler
k_vals = list(range(2, 21))
WCSSE = []
for k in k_vals:
kmeans = KMeans(n_clusters=k)
model = kmeans.fit(X_mmsc)
WCSSE.append(model.inertia_)
plt.plot(WCSSE, marker='o', markersize=10)