数学建模社区-数学中国
标题: 无监督学习练习 对客户进行分组 [打印本页]
作者: 2744557306 时间: 2024-3-31 16:38
标题: 无监督学习练习 对客户进行分组
- 客户细分(K-均值聚类)
- 数据集:使用任何公开的客户数据集,如零售数据。
- 任务:根据购买行为对客户进行分组。
- 挑战:尝试不同的聚类算法(如DBSCAN、层次聚类)和调整参数来找到最佳的客户分组。
: e5 B1 Z/ E# G5 \! e% Z8 R
# q z2 a4 ^' c3 z4 ]- y
使用KMeans进行客户细分- from sklearn.cluster import KMeans
' P: I2 M- X3 c1 v/ H - from sklearn.preprocessing import StandardScaler
8 f, G$ s: {( g1 o3 l - import pandas as pd$ x' f z m. s' N/ [6 G
-
* o; o* f" A% R3 G: y6 { - # 加载客户数据集
7 m, |" a% c+ ]/ ^ - # 假设df是一个Pandas DataFrame,包含了你感兴趣的特征
5 O& k/ ^/ {6 @% N" J9 l1 } - # df = pd.read_csv('your_customer_data.csv')& Z7 S# r! X# S' L$ @* W
- : n8 s# ?, g( v( y% E( S9 w
- # 对数据进行标准化处理/ |6 B0 R* ?% K: s1 p6 T8 P
- scaler = StandardScaler()9 `* m; R3 Y0 i
- scaled_features = scaler.fit_transform(df)
0 ~- n0 l- h% {0 J8 n2 Q; Y2 C -
% E, \0 n4 W& ^. E6 m, J# ?" V: k2 ]$ ] - # 使用KMeans进行聚类, k/ c+ V9 K2 O [. D
- kmeans = KMeans(n_clusters=5, random_state=42)
/ S, u+ b' q. g1 n8 X: H8 ] - kmeans.fit(scaled_features)* G. i! \4 ^3 Y3 k6 c. o
-
: t( G- n5 S, z% o6 {2 D - # 将聚类结果添加到原始DataFrame中/ D4 I# b6 H# }* k
- df['Cluster'] = kmeans.labels_
' d5 v, s8 a9 G( D/ ^ -
% ~( b: t* o, q1 h% H3 n- V - # 查看聚类结果# t o' L0 I6 X
- print(df.head())
复制代码在这个示例中,我们首先对特征进行了标准化处理,这是聚类分析中的一个常见步骤,以确保所有特征在相同的尺度上。然后,我们使用KMeans算法对客户进行了分组,这里假设我们想要将客户分成5个群体。
尝试其他聚类算法DBSCAN- from sklearn.cluster import DBSCAN# R* `* a3 ^. V: U6 x' z
-
- f: G) z3 `, N3 A- r: E - # 使用DBSCAN进行聚类
- {. R" `/ j# ~3 i - dbscan = DBSCAN(eps=0.5, min_samples=5)
+ g& ~. p* Q6 X2 e1 B" k! z k - df['Cluster'] = dbscan.fit_predict(scaled_features)* w, S, e5 I0 c
-
" z1 n4 @# K! s, F# M: r$ ~ - # 查看聚类结果$ g% i7 J/ ~5 q+ A
- print(df.head())
复制代码 层次聚类- from sklearn.cluster import AgglomerativeClustering- ~5 A# g0 ^* G
- # U% a: P* R, { Q
- # 使用层次聚类进行聚类
# j2 T: l9 _1 E/ w - agg_clustering = AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward')
: B8 ^% v: Y3 h - df['Cluster'] = agg_clustering.fit_predict(scaled_features): t1 J5 Y$ U. q0 i
-
8 _ |! ]0 c$ [' p& u - # 查看聚类结果
% i7 S: e; w; d. _* \+ Z - 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 |