【发布时间】:2020-09-23 06:45:31
【问题描述】:
我正在使用 Scikit-Learn KMeans 模型。
这是我实现的代码,我在其中创建了 3 个集群(0、1、2):
df = pd.read_csv(r'1.csv',index_col=None)
dummies = pd.get_dummies(data = df)
km = KMeans(n_clusters=3).fit(dummies)
dummies['cluster_id'] = km.labels_
def distance_to_centroid(row, centroid):
row = row[['id', 'product', 'store', 'revenue','store_capacity', 'state_AL', 'state_CA', 'state_CH',
'state_WD', 'country_India', 'country_Japan', 'country_USA']]
return euclidean(row, centroid)
dummies['distance_to_center0'] = dummies.apply(lambda r: distance_to_centroid(r,
km.cluster_centers_[0]),1)
dummies['distance_to_center1'] = dummies.apply(lambda r: distance_to_centroid(r,
km.cluster_centers_[1]),1)
dummies['distance_to_center2'] = dummies.apply(lambda r: distance_to_centroid(r,
km.cluster_centers_[2]),1)
dummies.head()
这是我正在使用的数据集的示例:
id,product,store,revenue,store_capacity,state
1,Ball,AB,222,1000,CA
1,Pen,AB,234,1452,WD
2,Books,CD,543,888,MA
2,Ink,EF,123,9865,NY
- 如何为集群创建散点图?
- 如何获取和打印异常值(远离集群的点)?
【问题讨论】:
-
不清楚您在寻找什么。聚类数与图中的轴数(即维度)无关!
-
如何获取和打印异常值(远离集群的点)?
-
一般有很多方法可以得到异常值,你有直方图,箱线图(每个维度),或者你可以使用许多不同的算法来找到多维度的异常值,例如@987654321 @ 或this very popular Pythonic toolkit 中的许多其他示例,然后以 2D 或 3D 绘制结果(在使用适当的流形之后),然后更改它们的颜色。然而,由于您指定了集群的数量,因此无法保证一定会有异常值。
-
此外,聚类和查找异常值是一回事,绘制结果是另一回事。您似乎对这两件事感到困惑。绘图严格采用 2D 或 3D,因此如果您有 D>3 的数据集,那么在应用您想要查找异常值的任何方法之后,您可以选择所需的维度(即特征)并绘制它们(或使用流形方法或 PCA 为您选择它们),最后您根据从应用的方法获得的索引更改点的颜色。
标签: python machine-learning scikit-learn k-means outliers