數據挖掘的十大算法
基本概念
1、數據預處理:處理成 用戶ID,R ,F,M四個字段
2、調用KMeans算法 進行聚類 ,設定為8類
3、對數據進行擬合,訓練模型 ,每個ID對應一個類別(0-7)
4、如何將分類好的數字標簽,和RFM 模型中的客戶類別匹配起來?
查看每個類別的中心點,用其構造Dataframe來代表整個數據集
查看每個類別的中心點:clf.cluster_centers_
"""分別計算每個屬性值的中位數,代表整個屬性的中位水平""" rmd = r['R'].median() fmd = r['F'].median() mmd = r['M'].median()
然后對8行3列數據進行判斷,對8類數據進行客戶類別標簽
5、對整個數據集貼上標簽
標簽0-7和客戶類型一一對應
數據集:
導入數據集到mysql數據庫中
總共有940個獨立消費數據
無監督算法:
K-Means 算法
K-Means 算法是一個聚類算法。你可以這么理解,最終我想把物體划分成 K 類。假設每
個類別里面,都有個“中心點”,即意見領袖,它是這個類別的核心。現在我有一個新點
要歸類,這時候就只要計算這個新點與 K 個中心點的距離,距離哪個中心點近,就變成了
哪個類別。
引入模塊
import pandas as pd import numpy as np from sklearn.cluster import KMeans import pymysql
連接數據庫:
conn = pymysql.connect(host='localhost',user='root',password='123',db='db2',port=3306) rfm = pd.read_sql('select * from consumption_data',con=conn) conn.close()
查看詳情:
rfm.info()

rfm.head()

"""選取RFM 三列""" new_rfm = rfm.loc[:,['R','F','M']] """調用KMeans算法 進行聚類 ,設定為8類""" clf = KMeans(n_clusters=8,random_state=0) """對數據進行擬合,訓練模型""" clf.fit(new_rfm)
"""查看一下分類的結果,返回的數組中每個數字對應了rfm中每一行""" print(len(clf.labels_)) se = pd.Series(clf.labels_) se.value_counts()
new_rfm['label']=clf.labels_ new_rfm.head()
"""如何將分類好的數字標簽,和RFM 模型中的客戶類別匹配起來?""" """查看每個類別的中心點,用其構造Dataframe來代表整個數據集"""
查看每個類別的中心點:clf.cluster_centers_
8行3列

r = pd.DataFrame(clf.cluster_centers_,columns=['R','F','M'])
print(r)
每個類別的中心點0-7共8類

"""分別計算每個屬性值的中位數,代表整個屬性的中位水平""" rmd = r['R'].median() fmd = r['F'].median() mmd = r['M'].median()
cluster=[] for i in range(len(r)): if r.iloc[i,0] > rmd and r.iloc[i,1] >fmd and r.iloc[i,2] >mmd: cluster.append('高價值客戶') elif r.iloc[i,0] < rmd and r.iloc[i,1] > fmd and r.iloc[i,2] >mmd: cluster.append('重點保持客戶') elif r.iloc[i,0] > rmd and r.iloc[i,1] < fmd and r.iloc[i,2] >mmd: cluster.append('重點發展客戶') elif r.iloc[i,0] < rmd and r.iloc[i,1] < fmd and r.iloc[i,2] > mmd: cluster.append('重點挽留客戶') elif r.iloc[i,0] > rmd and r.iloc[i,1] > fmd and r.iloc[i,2] < mmd: cluster.append('一般價值客戶') elif r.iloc[i,0] < rmd and r.iloc[i,1] > fmd and r.iloc[i,2] < mmd: cluster.append('一般保持客戶') elif r.iloc[i,0] > rmd and r.iloc[i,1] < fmd and r.iloc[i,2] < mmd: cluster.append('一般發展客戶') else: cluster.append('潛在客戶')
cluster
"""將貼好的標簽,匹配到每一行數據""" r['客戶分類']=cluster

s = r.reset_index() print(s)

new_rfm.head()

標簽0-7和客戶類型一一對應
對整個數據集貼上標簽
# result = pd.merge(new_rfm,r['客戶分類'],how='inner',left_on='label',right_index=True)# 用右表的索引做連接鍵
result = pd.merge(new_rfm,s[['index','客戶分類']],how='inner',left_on='label',right_on='index') result.sort_index()