QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1790|回复: 0
打印 上一主题 下一主题

无监督学习练习 对客户进行分组

[复制链接]
字体大小: 正常 放大

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:38 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
  • 客户细分(K-均值聚类)
    • 数据集:使用任何公开的客户数据集,如零售数据。
    • 任务:根据购买行为对客户进行分组。
    • 挑战:尝试不同的聚类算法(如DBSCAN、层次聚类)和调整参数来找到最佳的客户分组。* h) V( k. D& F
    9 ~7 v2 P8 e  ]7 e! }
使用KMeans进行客户细分
  1. from sklearn.cluster import KMeans
    * R/ P# @% D* s5 c' ^% r
  2. from sklearn.preprocessing import StandardScaler: J& @& w/ m3 I! Y( m+ P
  3. import pandas as pd
    & a2 \: W2 J- }8 X

  4. : ^) F- Z. L# [8 ~# }( T
  5. # 加载客户数据集
    * {& B/ l; E$ B( U+ ], c0 J1 M
  6. # 假设df是一个Pandas DataFrame,包含了你感兴趣的特征
    : i( z/ P7 [\" _$ j
  7. # df = pd.read_csv('your_customer_data.csv')
    % ^. s; p8 ^\" Y+ y2 ?$ a9 c
  8.   J: Z$ P4 _9 V) f1 h
  9. # 对数据进行标准化处理( Y5 x  k; q/ a& g
  10. scaler = StandardScaler()0 D; p, o3 e3 F
  11. scaled_features = scaler.fit_transform(df)1 A: N  Z\" r8 A5 `

  12. ' U# Q0 e5 D, u
  13. # 使用KMeans进行聚类' D+ u2 ]! c' Q' D5 V3 b
  14. kmeans = KMeans(n_clusters=5, random_state=42)  Q) A$ y, c2 d) v
  15. kmeans.fit(scaled_features)- F* _7 z: E3 V6 F* G( D& V

  16. 7 |1 o! q' ?, |- L0 M
  17. # 将聚类结果添加到原始DataFrame中
    # a2 C8 l$ f5 c4 T2 @
  18. df['Cluster'] = kmeans.labels_
    ; R+ `) N$ j* C) G: t+ }2 Z8 n) u: M% u6 e

  19. . K9 I/ T+ M* l$ q1 p! r
  20. # 查看聚类结果
    3 u3 j. P5 ^. @\" e) V
  21. print(df.head())
复制代码

在这个示例中,我们首先对特征进行了标准化处理,这是聚类分析中的一个常见步骤,以确保所有特征在相同的尺度上。然后,我们使用KMeans算法对客户进行了分组,这里假设我们想要将客户分成5个群体。

尝试其他聚类算法DBSCAN
  1. from sklearn.cluster import DBSCAN
    # [$ g% }\" ?: Y% N, k! H4 @
  2. ( `9 L3 D8 q) Y  s' M5 q3 I# e
  3. # 使用DBSCAN进行聚类. S6 }1 m, X7 ?+ p6 o2 O5 \6 T\" x
  4. dbscan = DBSCAN(eps=0.5, min_samples=5)
    7 k6 Q  g* v9 `9 n' C: K. R9 I
  5. df['Cluster'] = dbscan.fit_predict(scaled_features)3 k  I8 N; s7 A
  6. ( H7 L! z0 @# X8 M* g
  7. # 查看聚类结果
    2 A0 R8 n9 T6 z4 D. g  ^' w
  8. print(df.head())
复制代码
层次聚类
  1. from sklearn.cluster import AgglomerativeClustering6 f, O9 G0 V1 d% O
  2. ! Q! m\" @% ]5 M/ v; X
  3. # 使用层次聚类进行聚类
    / u7 o- q# N8 T- _  Y\" _
  4. agg_clustering = AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward')3 a) m7 M- n/ R6 U! [
  5. df['Cluster'] = agg_clustering.fit_predict(scaled_features)
    ) D\" Y( s/ l) {) S$ n

  6. ! N, p; `, l9 z! K: }% @/ c# g
  7. # 查看聚类结果
    3 [7 I9 d+ W. ?, u* {
  8. print(df.head())
复制代码
调整参数和选择算法4 x7 P6 r3 M' D; @. K4 ]. x
KMeans:n_clusters是一个关键参数,决定了聚类的数量。可以使用轮廓分析或肘方法来帮助确定最佳的聚类数量。$ L9 p' i5 S( Q  G+ I
DBSCAN:eps和min_samples是关键参数,分别决定了样本成为核心点的条件。这些参数对结果的影响较大,通常需要通过尝试不同的值来找到最佳的参数设置。
$ ~8 e' c8 N4 }+ t5 [层次聚类:n_clusters、affinity和linkage是重要的参数,它们分别控制聚类的数量、用于计算距离的方法和聚类合并的准则。
) I3 k+ |- ?9 n* g2 e7 S/ E! f+ {选择哪种聚类算法以及相应的参数设置,取决于数据集的特性和分析任务的目标。实践中,通常建议尝试多种聚类算法和参数配置,然后根据聚类的质量(例如,通过轮廓系数评估)来选择最佳的方法7 E& E5 }" C/ t5 z+ t" C+ k
% l+ s, z5 Z/ l. ~3 Q2 j' u) Z

- H& ]# F2 `+ _+ L: t6 \8 V0 m# Y' j+ D0 N: ?! ^+ ~
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-6-15 04:21 , Processed in 0.426612 second(s), 51 queries .

回顶部