如何使用python和ML在粒度级别对客户机进行分段? 新手警报

如何使用python和ML在粒度级别对客户机进行分段? 新手警报,python,machine-learning,artificial-intelligence,cluster-analysis,Python,Machine Learning,Artificial Intelligence,Cluster Analysis,在过去的几个月里,我一直在用python学习ML,并取得了一些很好的成果。然而,目前我正忙于一个项目,需要经验丰富的人的指导(谷歌只能带你到目前为止,如果你的数据没有缩放,这可能会发生)。 请参见Iris数据集的通用示例: import pandas as pd import numpy as np import seaborn from sklearn.preprocessing import MinMaxScaler from sklearn.cluster import KMeans

在过去的几个月里,我一直在用python学习ML,并取得了一些很好的成果。然而,目前我正忙于一个项目,需要经验丰富的人的指导(谷歌只能带你到目前为止,如果你的数据没有缩放,这可能会发生)。 请参见Iris数据集的通用示例:

import pandas as pd
import numpy as np
import seaborn
from sklearn.preprocessing import MinMaxScaler
from  sklearn.cluster import KMeans

iris = seaborn.load_dataset('iris')
scaling = MinMaxScaler(feature_range=(-1, 1)).fit(iris.iloc[:,:-1])
iris_scale = pd.DataFrame(scaling.transform(iris.iloc[:,:-1]),columns=iris.iloc[:,:-1].columns)
km = KMeans(n_clusters=3, random_state=1)
km.fit(iris_scale)
y_kmeans = pd.DataFrame({'cluster': km.predict(iris_scale), 'real':iris['species'], 'stam':1})
y_kmeans.pivot_table(index=['real'],columns=['cluster'], aggfunc='count')
这是您应该得到的结果:

cluster        0     1     2
real                        
setosa       NaN  50.0   NaN
versicolor  47.0   NaN   3.0
virginica   14.0   NaN  36.0
这意味着k-means将所有“setosa”物种聚类为聚类1,即使不知道它们是同一物种。
确保数据已缩放(标准化)。

如果使用K=4,K-means将为您提供4个群集。如果您想要更多成本,请增加K


类似地,DBSCAN也有一个需要正确设置以达到预期效果的问题。

我们在您的问题描述中遗漏了最重要的一项:什么定义了“最佳点”“这是对簇距离、簇大小的某种度量,还是从对每一列的经验性质的理解中得出的?除非这是一个特定的编程问题,否则你不仅应该改进你的问题,还应该将帖子转移到一个适当的组,然后……在这里应用。”Prune指出。今后,我将寻找一个更合适的方法适当的论坛。就“最佳点”而言,我只是想让更有经验的人知道答案。当然,在通过k均值聚类算法运行数据之前,我使用了肘部方法。根据在线推荐,将k设置为数据角度变化的点是一个很好的做法重要的是..或者不是..肘部方法对于真实数据来说是垃圾。它只适用于玩具示例。如果你想要更多的聚类,请使用更大的k。虽然如果k-means不能产生令人信服的结果,我不会感到惊讶-它对良好的数据准备非常敏感。鉴于你的属性列表,我怀疑任何方法都不会产生任何有意义的结果从这些乱七八糟的数据中。@Anoy Mouse你能给我的数据集提供一个更好的属性列表吗,告诉我这乱七八糟的属性没有多大帮助。另外,为什么肘部方法对真实数据来说是“垃圾”呢?有没有其他方法来确定最佳聚类数?是的,有24种更好的方法,在文献中很容易找到。但它们都是假设您的数据适用于k-means;它需要连续变量,但您的属性大部分似乎是二进制的。但其他方法a也会有类似的问题:它们依赖于您定义相关的距离度量(针对您的问题!)记录比不同的记录更相似。因此,除非你能从数学上定义这些数据上的“好”集群是什么(我当然看不出什么是好的),否则我怀疑你能否找到一个算法来产生“好”结果。我会尝试一下。谢谢
我的数据经过标准化处理后:
年龄收入支出得分性别女性性别男性家庭电影…0 0.889170 0.454044 0.0000000.018919 0.0000000.018919 0.018919…1 0.209039 0.596147 0.758733 0.0000000.007742 0.0077420.007742…2 0.492814 0.739221 0.197126 0.000000 0.024641 0.000000 0.049281…3 0.438854 0.894586 0.000000 0.016879 0.000000 0.000000…4 0.280203 0.446249 0.809475 0.010378 0.000000 0.010378 0.031134…我仍然有与以前相同的问题。群集太笼统了。