为什么当我使用归一化数据时,我在kmeans中得到嵌套集群,而当我使用非归一化数据时,我却得到非重叠集群?

问题描述 投票:1回答:1

我目前正在学习IBM提供的有关机器学习基础的课程。老师完成模型的构建后,我注意到他没有使用归一化的数据来拟合模型,而是使用常规数据,最后他得到了一个良好的聚类和非重叠聚类。但是,当我尝试使用归一化的数据来训练模型时,如代码和图像所示,我发生了灾难,并得到了嵌套的簇。为什么归一化过程会导致这种情况?尽管按照我所知总是在数学基础算法中使用归一化总是很好的。

代码未使用规范化数据

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

python machine-learning scikit-learn normalization k-means
1个回答
0
投票

收入和年龄在这里是完全不同的尺度。在您的第一个情节中,收入差异约为100,年龄差异约为10。但是,在k均值中,收入差异被认为是10倍。垂直轴很容易控制聚类。

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

您的第二个情节不太合理; k均值不能产生“重叠”的簇。问题在于,您仅绘制了集群所基于的4个(?)尺寸中的2个。您无法绘制4D数据,但我怀疑如果将PCA应用于结果以首先缩小为2维并绘制它,则会看到分离的群集。

© www.soinside.com 2019 - 2024. All rights reserved.