特征缩放对聚类算法有用吗?什么类型的特征,我的意思是数字、分类等,对于聚类最有效?
聚类算法在预处理阶段是否需要特征缩放?
聚类算法肯定会受到特征缩放的影响。
例子:
假设您有两个功能:
- 重量(磅)
- 高度(英尺)
...我们正在使用这些来预测一个人是否需要“S”或“L”尺寸的衬衫。
我们为此使用了体重+身高,在我们训练有素的集合中,假设我们已经有两个人在集群中:
- “L”中的亚当(175 磅+5.9 英尺)
- 'S' 中的露西(115 磅+5.2 英尺)。
我们有一个新人 - Alan (140Lbs+6.1ft.),您的聚类算法会将其放入最近的聚类中。所以,如果我们不在这里缩放特征,高度不会有太大影响,艾伦将被分配到“S”集群中。
因此,我们需要对其进行扩展。Scikit Learn 提供了许多缩放功能。您可以使用的一种是sklearn.preprocessing.MinMaxScaler
.
是的。诸如 K-means 之类的聚类算法在输入算法之前确实需要特征缩放。因为,聚类技术使用欧几里得距离来形成群组,所以在计算距离之前缩放具有以米为单位的高度和以 KG 为单位的重量的变量将是明智的。
事实上,大多数聚类算法甚至对缩放高度敏感。重新调整数据可能会完全破坏结果。
糟糕的扩展似乎也是人们无法找到有意义的集群的一个关键原因。做坏事很容易。
绝不依赖自动缩放。它必须适合您的任务和数据。预处理是一门艺术,将需要大部分工作。
非连续变量是个大问题。虽然您可以将数据“破解”成二进制编码,然后假装它们是合适的,但离散性对算法来说是一个主要问题。例如,许多点具有相同的距离。而且这样一个变量的平均值不再具有很大的语义意义。平方偏差(由 k-means 使用)甚至更糟。如果在聚类时忽略这些变量,结果通常可能会更好。
坏属性也是如此,例如标识符、序列号等。
缩放影响聚类结果的方式取决于所使用的度量(欧几里得距离、平方欧几里得距离、曼哈顿距离……)
通常,当您混合具有不同物理测量单位的特征时,您可以考虑使用线性变换(即偏移 + 比例因子)将它们转换为公共空间
您也可以考虑尝试学习这种转换,使用比线性模型更复杂的模型(如果您认为您的问题需要它)