作者回复: 这......这.....这简直是太棒了。三维RFM图看起来更直观。漂亮。 感谢Jove同学对于信贷场景的分享!
作者回复: 同学们的问题总是会引导我剧透后面的内容。。。 在sklearn中,同学所说的无量纲化英文被称为特征的缩放(Scaler),把大的数值压缩到小的范围,或者改变数值的分布状态等。具体的方法和工具很多,包括标准化,归一化,居中,规范化等等不同的手段(这些手段的名词也容易混淆): 1)StandardScaler工具,标准化缩放,是对数据特征分布的转换,目标是使其符合正态分布(均值为0,方差为1)。对于某些模型,如果数据特征不符合正态分布的话,就影响机器学习效率。 2)MinMaxScaler工具,是把特征的值压缩到给定的最小值和最大值之间,通常在0和1之间,有负值的话就是-1到1,因此也叫归一化。归一化不会改变数据的分布状态。在sklearn中,通过MinMaxScaler进行标准化缩放。某些模型,比如神经网络,就非常喜欢归一化之后的特征数据。 3)RobustScaler工具,基于百分位数的缩放,能消除这个过程消除了数据中的离群值的影响,但转换后的特征值的结果范围比之前的更大,所以RobustScaler之后,通常还结合归一化缩放器一起使用,再把数据压缩一下。 4)Normalizer工具,规范化缩放,则是将样本缩放为具有单位范数的过程,这可能仅适用于某些各个维度都是One-Hot编码的数据集,应用场景较少。 不同数据集适用不同工具。 这些我们以后要讲。
作者回复: 谢谢精辟的分享,皆是宝贵的经验之谈,对我亦有启发!三人行,必有我师!大家也是我的老师,我这儿也祝愿大家工作生活愉快。 对,文本部分,我这儿需要按照表格中跑出来的值进行调整一下,把二者对应上。谢谢你的细心!!
作者回复: 太棒了,感谢同学的实验和详细的过程分享。
作者回复: 当使用K-Means算法进行聚类分析时,如果发现聚类结果中某些组的数量相差很大,可能是由于以下原因: 特征缩放问题:K-Means算法对特征的尺度敏感。如果R、F、M三个特征的取值范围差异很大,那么尺度大的特征会对距离的计算产生更大的影响。解决方法是对特征进行归一化或标准化。 选择K值:可能选择的K值(在这里是3)不是数据的最佳聚类数。可以尝试使用肘部法则(Elbow method)或轮廓系数来确定最佳的K值。 数据的分布:有时,数据的自然分布确实是有很大的类和较小的类。在这种情况下,K-Means可能捕捉到了这种真实的分布。 K-Means的局限性:K-Means聚类假设群集是凸形和同样大小的,这可能不适用于所有数据集。考虑使用其他聚类方法,如DBSCAN或谱聚类。 为了改进聚类结果,可以尝试以下策略: 特征缩放:确保所有输入特征都被正确地归一化或标准化。 尝试不同的K值:不仅仅是3,还可以尝试其他的K值,并使用上述的评估方法(如肘部法则)来确定最佳K值。 考虑其他聚类算法:尝试使用DBSCAN、谱聚类或层次聚类等其他算法。 特征工程:考虑添加或修改特征。例如,你可以尝试R和F的交互项、R、F和M的平均值等。 单独对特征进行聚类:如果觉得有必要,可以单独对R、F、M进行聚类,然后结合结果制定营销策略。但这并不总是最佳策略,因为用户的行为可能是由多个特征共同影响的。 实际分析中,建议先确保数据的预处理(如特征缩放)是正确的,然后尝试不同的K值和聚类算法。并且要不断地验证你的聚类结果,看它们是否在实际的营销活动中是有意义的。
作者回复: 谢谢同学,尽管这样做之后,inertia_应该仍然在那儿。但是更好的代码正如同学指出的,不需要重写赋值。更新如下: for k in K: kmeans = KMeans(n_clusters=k, max_iter=100) # 创建KMeans模型 kmeans.fit(df) # 拟合模型 distance_list.append(kmeans.inertia_) # 获取每个K值的损失
作者回复: 谢谢同学的细心,我们会修正音频。
作者回复: 正如同学评论那样,冗余代码可删。通过Mean排序更具区别度。
作者回复: 确实,你现在的方法是将timedelta64[ns]对象转换为字符串并进行分割提取。这种方法是可行的,但不是最直接的。 更为直接的方法是使用timedelta64对象的属性。例如,如果你只想要天数,你可以直接取days属性:RFM['recency'] = RFM['recency'].dt.days 这种方法直接利用了pandas的内置时间差对象属性,不仅更直观,而且效率更高。
作者回复: 谢谢