gpt4 book ai didi

python - 为什么当我使用规范化数据时,我会在 kmeans 中得到嵌套簇,而当我使用非规范化数据时,我会得到非重叠簇?

转载 作者:太空宇宙 更新时间:2023-11-03 19:40:28 24 4
gpt4 key购买 nike

我目前正在学习 IBM 提供的机器学习基础知识类(class)。老师建立模型后,我注意到他没有使用归一化数据来拟合模型,而是使用常规数据,最终他得到了一个很好的聚类和不重叠的聚类。但是,当我尝试使用标准化数据来训练模型时,我遇到了灾难,并且得到了嵌套集群,如代码和图像所示。为什么正常化进程会导致这种情况?尽管“据我所知”在数学基础算法中使用归一化总是好的。

代码不使用标准化数据

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.cluster import KMeans
cust_df = pd.read_csv('D:\machine learning\Cust_Segmentation.csv')
cust_df.head()
df = cust_df.drop('Address', axis = 1)
X = df.values[:, 1:]
X = np.nan_to_num(X)
from sklearn.preprocessing import StandardScaler
norm_featur = StandardScaler().fit_transform(X)
clusterNum = 3
kmeans = KMeans(init = 'k-means++', n_clusters = clusterNum, n_init = 12)
kmeans.fit(X)
k_means_labels = kmeans.labels_
df['cluster'] = kmeans.labels_
k_means_cluster_centers = kmeans.cluster_centers_
area = np.pi * ( X[:, 1])**2
plt.scatter(X[:, 0], X[:, 3], s=area, c=kmeans.labels_.astype(np.float), alpha=0.5)
plt.xlabel('Age', fontsize=18)
plt.ylabel('Income', fontsize=16)
plt.show()

CLUSTERS WITH OUT USING NORMALIZATION

使用标准化数据的代码

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.cluster import KMeans
cust_df = pd.read_csv('D:\machine learning\Cust_Segmentation.csv')
cust_df.head()
df = cust_df.drop('Address', axis = 1)
X = df.values[:, 1:]
X = np.nan_to_num(X)
from sklearn.preprocessing import StandardScaler
norm_feature = StandardScaler().fit_transform(X)
clusterNum = 3
kmeans = KMeans(init = 'k-means++', n_clusters = clusterNum, n_init = 12)
kmeans.fit(norm_feature)
k_means_labels = kmeans.labels_
df['cluster'] = kmeans.labels_
k_means_cluster_centers = kmeans.cluster_centers_
area = np.pi * ( norm_feature[:, 1])**2
plt.scatter(norm_feature[:, 0], norm_feature[:, 3], s=area, c=kmeans.labels_.astype(np.float),
alpha=0.5)
plt.xlabel('Age', fontsize=18)
plt.ylabel('Income', fontsize=16)
plt.show()

CLUSTER AFTER NORMALIZATION

最佳答案

这里的收入和年龄有很大不同。在您的第一个图中,收入差异约 100 与年龄差异约 10 大致相同。但在 k 均值中,收入差异被认为大了 10 倍。垂直轴很容易主导聚类。

这可能是“错误的”,除非您碰巧相信收入变化 1 与年龄变化 10 “相同”,以便找出相似之处。这就是为什么要进行标准化,这做出了不同的假设:它们同样重要。

你的第二个情节不太有意义; k-means 无法生成“重叠”簇。问题是您只绘制了聚类的 4 个(?)维度中的 2 个。您无法绘制 4D 数据,但我怀疑如果您对结果应用 PCA 以首先减少到 2 维并绘制它,您会看到分离的簇。

关于python - 为什么当我使用规范化数据时,我会在 kmeans 中得到嵌套簇,而当我使用非规范化数据时,我会得到非重叠簇?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60460923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com