我知道在sklearn.cluster.KMeans下定义的KMeans算法需要进行特征缩放
我的问题是,在使用KMeans之前是否需要手动完成,或者KMeans是否会自动执行功能缩放?如果是自动的,请告诉我它在KMeans算法中的什么位置,因为我在这里的文档中找不到它:
https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html
顺便说一句,人们说Kmeans本身就负责功能缩放。
发布于 2019-08-16 00:01:31
如果你的变量是不可比较的单位(例如,以厘米为单位的身高和以公斤为单位的体重),那么你当然应该对变量进行标准化。即使变量具有相同的单位,但显示出完全不同的方差,在K均值之前进行标准化仍然是一个好主意。你看,K均值聚类在空间的所有方向上都是“各向同性的”,因此倾向于产生或多或少的圆形(而不是拉长)的聚类。在这种情况下,让方差不相等相当于将更多的权重放在方差较小的变量上,因此聚类将倾向于沿着方差较大的变量进行分离。

另一件值得提醒的事情是,K-means聚类结果可能对data set1中对象的顺序敏感。一种合理的做法是多次运行分析,将对象顺序随机化;然后对这些运行的聚类中心进行平均,并将这些中心作为初始中心输入一次分析的最终运行。
或其他多变量分析。
1具体地说,(1)一些中心初始化方法对大小写顺序敏感;(2)即使初始化方法不敏感,结果有时也可能取决于初始中心被引入程序的顺序(特别是当数据中有相同的、相等的距离时);(3)所谓的运行均值版本的k-means算法自然对大小写顺序敏感(在这个版本中-可能除了在线聚类之外不经常使用-在每个单独的案例被重新分配到另一个集群之后进行质心的重新计算)。
发布于 2019-08-15 18:56:52
据我所知,K-means不会自动执行特征缩放。无论如何,这是一个简单的过程,只需要两行额外的代码。我建议使用StandardScaler功能缩放。这里有一个关于如何做到这一点的好的example。
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)https://stackoverflow.com/questions/57507584
复制相似问题