如何用python實現聚類離散化

2021-09-24 18:21:59 字數 2518 閱讀 3740

起始聚類離散化就是根據利用一定規則對資料進行分類,可以用分桶式或者k-means 等方法

這裡用中醫證型關聯規則挖掘裡面的離散化舉例,k-means 舉例

首先看下圖的原資料,該病存在六種證型係數,為了後續的關聯演算法,需要先將其離散化。

import pandas as pd

from sklearn.cluster import kmeans #匯入k均值聚類演算法

datafile = '../data/data.xls' #待聚類的資料檔案

processedfile = '../tmp/data_processed.xls' #資料處理後檔案

typelabel =

k = 4 #需要進行的聚類類別數

#讀取資料並進行聚類分析

data = pd.read_excel(datafile) #讀取資料

keys = list(typelabel.keys())

result = pd.dataframe()

if __name__ == '__main__': #判斷是否主視窗執行,這句**的作用比較神奇,有興趣了解的讀取請自行搜尋相關材料。

for i in range(len(keys)):

#呼叫k-means演算法,進行聚類離散化

print(u'正在進行「%s」的聚類...' % keys[i])

kmodel = kmeans(n_clusters = k, n_jobs = 4) #n_jobs是並行數,一般等於cpu數較好

kmodel.fit(data[[keys[i]]]) #訓練模型

print(kmodel.cluster_centers_)

r1 = pd.dataframe(kmodel.cluster_centers_, columns = [typelabel[keys[i]]]) #聚類中心

#print('r1',r1,kmodel.labels_)

r2 = pd.series(kmodel.labels_).value_counts() #分類統計

r2 = pd.dataframe(r2, columns = [typelabel[keys[i]]+'n']) #轉為dataframe,記錄各個類別的數目

r = pd.concat([r1, r2], axis = 1).sort_values(typelabel[keys[i]]) #匹配聚類中心和類別數目

r.index = [1, 2, 3, 4]

print('r-1',r)

r[typelabel[keys[i]]] = r[typelabel[keys[i]]].rolling(2).mean() #rolling_mean()用來計算相鄰2列的均值,以此作為邊界點。

print('r-2', r)

r.iloc[0,0] = 0.0 #這兩句**將原來的聚類中心改為邊界點。

print('r-3', r)

result = result.sort_index() #以index排序,即以a,b,c,d,e,f順序排

result.to_excel(processedfile)

例子二,通過cut進行離散化

import pandas as pd 

import numpy as np

index = pd.index(data=["tom", "bob", "mary", "james","kobe","kawayi"], name="name")

data =

user_info = pd.dataframe(data=data, index=index)

pd.cut(user_info.age,3) #分成3段,

#[(10.974, 19.667] < (19.667, 28.333] < (28.333, 37.0]] 按照資料的最大值最小值為區間分成3分

當然還可以自定義進行劃分

比如qujian=[5,15,25,40]

pd.cut(user_info.age,qujian,labels=['child','youth','middle'])

#此時就不會按最大值最小值分成3分,而是按照5-15,15-25,25-40的固定區間分,同時會按labels對區間命名

#若想檢視各區間的人數,可以用groupyby函式

pdd=pd.cut(user_info['age'],qujian)

user_info['age'].groupby(pdd).count()

#可以通過遍歷來檢視某一區間有哪些值,pdd相當於乙個列名,在翻閱其他例子時發現假如某列就是離散的,可以直接用#groupby("age")

for i in user_info['age'].groupby(pdd):

print(i)

參考文獻:

1,python資料分析與挖掘實戰

2,本文借鑑了

kmean聚類python實現

import pandas as pd import numpy as np import xlrd 匯入資料 df2 pd.read excel test2.xlsx data np.array df2 去掉前兩列 data data 2 分為k類 k 3 臨近均值e e 0.00001 獲得行數...

python 實現kmeans聚類

程式設計中在做數值相等判斷的時候,直接使用 判斷並不可靠。實際上經過運算後的兩個值 浮點型 並不可能完全一致,可能會因為小數點後的些許差異導致判斷為false。比如 1 print1e 5 1e 6 這肯定是false,但是實際這兩個值可以看作近似相等。在kmeans中判斷是否結束迴圈,就是判斷重新...

如何用DBSCAN聚類模型做資料分析?

dbscan屬於無監督學習演算法,無監督演算法的內涵是觀察無標籤資料集自動發現隱藏結構和層次,在無標籤資料中尋找隱藏規律。聚類模型在資料分析當中的應用 既可以作為乙個單獨過程,用於尋找資料內在規律,也可以作為分類等其他分析任務的前置探索。上篇我們講了基於原型的k means聚類演算法,這篇我們來講通...