日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python分层聚类集群合并_24、python分层聚类案例(scipy方法)

發布時間:2023/12/4 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python分层聚类集群合并_24、python分层聚类案例(scipy方法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

1、分層聚類算法

2、方法

3、分析步驟

4、案例

1、分層聚類算法

層次聚類算法又稱為樹聚類算法,它根據數據之間的距離,透過一種層次架構方式,反復將數據

進行聚合,創建一個層次以分解給定的數據集。

2、方法

01 聚類方法

linkage=scipy.cluster.hierarchy.linkage(data,method='single')

data ?訓練樣本

method 類距離的計算公式:

1、single l兩個類之間最短距離的點的距離

2、complete 兩個類之間最長距離的點的距離

3、centroid 兩個所有點的中點的距離

02 層次聚類繪圖

scipy.cluster.hierarchy.dendrogram(linkage)

linkage ? ?層次聚類的結果

03 層次聚類分類方法

scipy.cluster.hierarchy.fcluster(linkage,n,criterion='maxclust')

linkage ? 層次聚類的結果

n ? ? ? ? 要聚類的個數

criterion 劃分方法,使用maxclust,最大劃分法

3、分析步驟

01 計算每兩個點距離的平方

計算公式:也就是兩個點距離的平方。

02 找出他們之間的最近距離進行合并

兩點的均值作為新值,歸為一類

03 重新計算新生成的這個類與各個舊類之間的相似度

04 重復胡2和3的步驟

4、案例

import pandas as pd

import matplotlib.pyplot as plt

data=pd.read_csv('D:\\DATA\\pycase\\7.1\\data.csv')

# 提取關鍵特征 data.columns

fColumns=[ '工作日上班時電話時長', '工作日下半時電話時長', '周末電話時長', '國際電話時長', '總電話時長',

'平均每次通話時長']

# 導入距離計算公式,并且進行訓練數據

import scipy.cluster.hierarchy as hcluster

linkage=hcluster.linkage(

data[fColumns],

method='centroid')

# 查看層次聚類的結果

hcluster.dendrogram(linkage)

# 僅僅查看其中一部分的數據,這里查看12個數據

hcluster.dendrogram(

linkage,

truncate_mode='lastp',

p=12,

leaf_font_size=12.

)

# 進行層次聚類

pTarget=hcluster.fcluster(

linkage,3,

criterion='maxclust')

# 對樣本量進行統計交叉

pd.crosstab(pTarget,pTarget)

# 通過PCA對數據進行降維

from sklearn.decomposition import PCA

pca_2=PCA(n_components=2)

data_pca=pca_2.fit_transform(data[fColumns])

# 轉化為數據框

data_pca_2=pd.DataFrame(data_pca)

# 繪圖

plt.scatter(

data_pca_2[0],

data_pca_2[1],

c=pTarget)

# 繪制每個數據特征的影響和表現

# 3 定義空的數據框

dMean=pd.DataFrame(columns=fColumns+['分類'])

data_gb=data[fColumns].groupby(pTarget)

i=0;

for g in data_gb.groups:

rMean=data_gb.get_group(g).mean()

rMean['分類']=g

dMean=dMean.append(rMean,ignore_index=True)

subData=data_gb.get_group(g)

for column in fColumns:

i=i+1

p=plt.subplot(3,5,i)

p.set_title(column)

p.set_ylabel(str(g)+"分類")

plt.hist(subData[column],bins=20)

# 繪制折線圖data.columns

pTarget=pTarget-1 # 下面繪圖從0開始繪制

r=data[['工作日上班時電話時長', '工作日下半時電話時長', '周末電話時長', '國際電話時長']]

r.index=data.客戶編號

r['聚類類別']=pTarget

plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標簽

plt.rcParams['axes.unicode_minus']=False #用來正常顯示負號

#有中文出現的情況,需要u'內容'

style=['ro-','go-','bo-']

fColumns2=[ '工作日上班時電話時長', '工作日下半時電話時長', '周末電話時長', '國際電話時長']

xlabels=fColumns2

# # %matplotlib qt 彈窗

k=3

for i in range(k): #注意作圖、做出不同樣式

plt.figure()

tmp=r[r[u'聚類類別']==i].iloc[:,:4] # 提取每一類

for j in range(len(tmp)):

plt.plot(range(1,5),tmp.iloc[j],style[i])

plt.xticks(range(1,5),xlabels,rotation=20) #坐標標簽

plt.subplots_adjust(bottom=0.15) # 調整底部

plt.savefig(u'%s%s,png'%('D:\\DATA\\pycase\\7.1\\scipy',i)) #保存圖片

總結

以上是生活随笔為你收集整理的python分层聚类集群合并_24、python分层聚类案例(scipy方法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。