首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

第33集 python机器学习:K均值对多维数据集的处理

对于复杂的多维数据,很多时候如果通过PCA或NMF进行降维处理,可能会完全破坏数据集的结构,这个时候我们可以尝试通过K均值使用多个簇中心来进行处理,下面我们以two_moons数据集为例来进行说明。

from sklearn.cluster import KMeans

import matplotlib.pyplot as plt

from sklearn.datasets import make_moons

x, y = make_moons(n_samples=200, noise=0.05, random_state=0)

#使用15个簇中心

kmeans = KMeans(n_clusters=15, random_state=0)

kmeans.fit(x)

y_pred = kmeans.predict(x)

plt.scatter(x[:, 0], x[:, 1], c=y_pred, s=60,cmap='Paired')

plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=60,

marker='^', c=range(kmeans.n_clusters), linewidth=2, cmap='Paired')

plt.xlabel("feature 0 value")

plt.ylabel("feature 1 value")

print("cluster memberships:\n{}".format*(y_pred))

运行后结果如下:

利用K均值的许多簇来表示复杂数据集的变化

这里我们使用了15个簇中心,也就是说,我们给每个点都分配了0-14之间的数字,我们可以将其看作是15个分量表示的数据(15个特征),只有表示该点对应的簇中心的那个特征不为0, 其余特征均为0,利用该15维表示,现在可以用线性模型来划分两个半月形,而利用原始的两个特征不可能做到这一点。将得到的每个簇中心的距离作为特征,还可以得到一种表现力更强的表示,可以利用kmeans的transform方法来实现这一点:

distance_features = kmeans.transform(x)

print("Distance feature shape: {}".format(distance_features.shape))

print("distance features:\n{}".format(distance_features))

打印出来的结果如下:

K均值在two_moons数据集上使用15个簇中心的距离特征

K均值是非常流行的聚类算法,因为它不仅相对容易理解和实现,而且运行速度也相对较快,K均值可以轻松扩展到大型数据集,scikit-learn甚至在MinMAXScaler类中办好了一种根据扩展性的变体,可以处理非常大的数据集。

K均值缺点之一在于,它依赖于随机初始化,也就是说,算法的输出依赖于随机种子。默认情况下,scikit-learn用10中不同的随机初始化将算法运行10次,并返回最佳结果(簇的方差之和最小),K均值还有一个缺点,就是对簇形状的假设的约束性较强,而且还要求指定所需要寻找簇的个数(事先应用中可能不知道这个数字)。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191022A0BITD00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com