数学建模社区-数学中国

标题: 无监督学习练习 对客户进行分组 [打印本页]

作者: 2744557306    时间: 2024-3-31 16:38
标题: 无监督学习练习 对客户进行分组
使用KMeans进行客户细分
  1. from sklearn.cluster import KMeans
    ' P: I2 M- X3 c1 v/ H
  2. from sklearn.preprocessing import StandardScaler
    8 f, G$ s: {( g1 o3 l
  3. import pandas as pd$ x' f  z  m. s' N/ [6 G

  4. * o; o* f" A% R3 G: y6 {
  5. # 加载客户数据集
    7 m, |" a% c+ ]/ ^
  6. # 假设df是一个Pandas DataFrame,包含了你感兴趣的特征
    5 O& k/ ^/ {6 @% N" J9 l1 }
  7. # df = pd.read_csv('your_customer_data.csv')& Z7 S# r! X# S' L$ @* W
  8. : n8 s# ?, g( v( y% E( S9 w
  9. # 对数据进行标准化处理/ |6 B0 R* ?% K: s1 p6 T8 P
  10. scaler = StandardScaler()9 `* m; R3 Y0 i
  11. scaled_features = scaler.fit_transform(df)
    0 ~- n0 l- h% {0 J8 n2 Q; Y2 C

  12. % E, \0 n4 W& ^. E6 m, J# ?" V: k2 ]$ ]
  13. # 使用KMeans进行聚类, k/ c+ V9 K2 O  [. D
  14. kmeans = KMeans(n_clusters=5, random_state=42)
    / S, u+ b' q. g1 n8 X: H8 ]
  15. kmeans.fit(scaled_features)* G. i! \4 ^3 Y3 k6 c. o

  16. : t( G- n5 S, z% o6 {2 D
  17. # 将聚类结果添加到原始DataFrame中/ D4 I# b6 H# }* k
  18. df['Cluster'] = kmeans.labels_
    ' d5 v, s8 a9 G( D/ ^

  19. % ~( b: t* o, q1 h% H3 n- V
  20. # 查看聚类结果# t  o' L0 I6 X
  21. print(df.head())
复制代码

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

尝试其他聚类算法DBSCAN
  1. from sklearn.cluster import DBSCAN# R* `* a3 ^. V: U6 x' z

  2. - f: G) z3 `, N3 A- r: E
  3. # 使用DBSCAN进行聚类
    - {. R" `/ j# ~3 i
  4. dbscan = DBSCAN(eps=0.5, min_samples=5)
    + g& ~. p* Q6 X2 e1 B" k! z  k
  5. df['Cluster'] = dbscan.fit_predict(scaled_features)* w, S, e5 I0 c

  6. " z1 n4 @# K! s, F# M: r$ ~
  7. # 查看聚类结果$ g% i7 J/ ~5 q+ A
  8. print(df.head())
复制代码
层次聚类
  1. from sklearn.cluster import AgglomerativeClustering- ~5 A# g0 ^* G
  2. # U% a: P* R, {  Q
  3. # 使用层次聚类进行聚类
    # j2 T: l9 _1 E/ w
  4. agg_clustering = AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward')
    : B8 ^% v: Y3 h
  5. df['Cluster'] = agg_clustering.fit_predict(scaled_features): t1 J5 Y$ U. q0 i

  6. 8 _  |! ]0 c$ [' p& u
  7. # 查看聚类结果
    % i7 S: e; w; d. _* \+ Z
  8. print(df.head())
复制代码
调整参数和选择算法% s, K# H; x" X; y
KMeans:n_clusters是一个关键参数,决定了聚类的数量。可以使用轮廓分析或肘方法来帮助确定最佳的聚类数量。
4 v% t$ }7 |5 J$ k- sDBSCAN:eps和min_samples是关键参数,分别决定了样本成为核心点的条件。这些参数对结果的影响较大,通常需要通过尝试不同的值来找到最佳的参数设置。) ], f. K. X& w# H3 q. ^( `6 ]
层次聚类:n_clusters、affinity和linkage是重要的参数,它们分别控制聚类的数量、用于计算距离的方法和聚类合并的准则。
  @* _4 A4 a9 `选择哪种聚类算法以及相应的参数设置,取决于数据集的特性和分析任务的目标。实践中,通常建议尝试多种聚类算法和参数配置,然后根据聚类的质量(例如,通过轮廓系数评估)来选择最佳的方法7 g3 Y. `- c/ x; N1 Q$ C

# j! H1 W0 L1 u. r" j, M: q, ^7 Y3 r5 ?  _! M! r
2 D5 G" K% A6 t% g& [" p





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5