Kmeans 算法的特征缩放

问题描述 投票:0回答:3

我知道下定义的 KMeans 算法需要特征缩放 sklearn.cluster.KMeans

我的问题是在使用KMeans之前是否需要手动完成或者KMeans会自动执行特征缩放?如果是自动的,请告诉我它在 KMeans 算法中指定的位置,因为我无法在此处的文档中找到它:

https://scikit-learn.org/stable/modules/ generated/sklearn.cluster.KMeans.html

顺便说一句,人们说 Kmeans 本身负责特征缩放。

python python-3.x machine-learning scikit-learn deep-learning
3个回答
6
投票

如果您的变量具有不可比较的单位(例如,身高以厘米为单位,体重以公斤为单位),那么您当然应该对变量进行标准化。即使变量具有相同的单位但显示出截然不同的方差,在 K 均值之前进行标准化仍然是一个好主意。您会看到,K 均值聚类在空间的所有方向上都是“各向同性”的,因此往往会产生或多或少的圆形(而不是拉长)聚类。在这种情况下,让方差不相等相当于对方差较小的变量赋予更多权重,因此聚类往往会沿着方差较大的变量分开。enter image description here

还值得提醒的是,K 均值聚类结果可能对数据集中对象的顺序敏感1。合理的做法是多次运行分析,随机化对象顺序;然后对这些运行的聚类中心进行平均,并将这些中心输入为最后一次分析运行的初始中心。

或其他多元分析。

1 具体来说,(1)一些中心初始化方法对案例顺序敏感; (2) 即使初始化方法不敏感,结果有时也可能取决于将初始中心引入程序的顺序(特别是当数据内存在相等的绑定距离时); (3) k-means 算法的所谓运行均值版本对案例顺序自然敏感(在这个版本中,除了在线聚类之外,不经常使用)在每个单独的案例重新分配给另一个簇)。


3
投票

据我所知,K-means 不会自动进行特征缩放。无论如何,这是一个简单的过程,只需要额外的两行代码。我建议使用 StandardScaler 功能缩放。这是一个很好的示例,告诉你如何做到这一点。

from sklearn import datasets    
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans

iris = datasets.load_iris()    
X = iris.data    
scaler = StandardScaler()
X_std = scaler.fit_transform(X)
clt = KMeans(n_clusters=3, random_state=0, n_jobs=-1)
model = clt.fit(X_std)

0
投票

不,KMeans Clustering 本身不会执行特征缩放。如果我们想要缩放数据,我们需要手动完成。显然,缩放数据会提高其性能水平

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