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

歡迎訪問 生活随笔!

生活随笔

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

python

python聚类分析如何确定分类个数_Python数据挖掘—聚类—KMeans划分法

發布時間:2025/4/16 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python聚类分析如何确定分类个数_Python数据挖掘—聚类—KMeans划分法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概念

聚類分析:是按照個體的特征將它們分類,讓同一個類別內的個體之間具有較高的相似度,不同類別之間具有較大差異性

無分類目標變量(Y)——無監督學習

K-Means劃分法、DBSCAN密度法、層次聚類法

1、導入數據

1 importpandas2 from sklearn.cluster importKMeans3 from sklearn.decomposition importPCA4

5 importmatplotlib.pyplot as plt6

7 f=open("D:\\學習資料\\Python數據挖掘實戰課程課件\\7.1\\data.csv",encoding='UTF-8')8 data=pandas.read_csv(f)9

10 fColumns=[11 '工作日上班時電話時長', '工作日下半時電話時長',12 '周末電話時長',13 '國際電話時長', '總電話時長', '平均每次通話時長'

14 ]

View Code

2、確定特征變量,特征變量之間的相關系數,確定因變量,重新確定特征變量

1 importmatplotlib2 from pandas.tools.plotting importscatter_matrix3

4 font={5 "family":"SimHei"}6

7 matplotlib.rc("font",**font)8 matplotlib.rcParams["axes.unicode_minus"]=False9

10 #%matplotlib qt

11

12 scatter_matrix(13 data[fColumns],14 figsize=(10,10),diagonal="hist")15

16

17 dCorr=data[fColumns].corr()18

19

20 fColumns=[21 '工作日上班時電話時長', '工作日下半時電話時長',22 '周末電話時長',23 '國際電話時長', '平均每次通話時長'

24 ]

View Code

3、降維、設定質心

1 #降維

2 pca_2=PCA(n_components=2)3 data_pca_2=pandas.DataFrame(4 pca_2.fit_transform(data[fColumns]))5

6 plt.scatter(7 data_pca_2[0],8 data_pca_2[1])9

10

11 kmModel=KMeans(n_clusters=3)12 kmModel=kmModel.fit(data[fColumns])

View Code

4、對圖像分類并畫圖

1 #對圖像進行分類

2 pTarget=kmModel.predict(data[fColumns])3

4 pandas.crosstab(pTarget,pTarget) #看每類別的個數

5

6

7 plt.scatter(8 data_pca_2[0],9 data_pca_2[1],10 c=pTarget11 )

View Code

5、不同特征量之間的相關性

1 dMean=pandas.DataFrame(columns=fColumns+["分類"])2 data_gb=data[fColumns].groupby(pTarget)3

4 i=05 for g indata_gb.groups:6 print(g)7 rMean=data_gb.get_group(g).mean() #rMean是一個series結構

8 print(rMean)9 rMean["分類"]=g #在最后追加一行

10 dMean=dMean.append(rMean,ignore_index=True) #將series添加在dataframe中

11 subData=data_gb.get_group(g)12 for column infColumns:13 print(column)14 i=i+1

15 p=plt.subplot(3,5,i)16 p.set_title(column)17 p.set_ylabel(str(g)+"分類")18 plt.hist(subData[column],bins=20)

View Code

K—mans

k:聚類算法當中的個數

means:均值算法

K-Means:使用均值算法把數據分成K個類的算法

算法目標:

是把n個樣本點劃分到k個類中,使得每個點都屬于離它最近的質心對應的類,以之作為聚類的標準

質心

是指一個類,內部所有樣本點的均值

計算步驟

第一步:取得K個初始質心:從數據中隨機抽取k個點作為初始聚類的中心,由這個中心代表各個類

第二步:把每個點劃分進相應的類:根據歐式距離最小原則,把每個點劃分配進距離最近的類中

第三步:重新計算質心:根據均值等方法,重新計算每個類的質心

第四步:迭代計算質心:重復第二步和第三部,迭代計算質心

第五步:聚類完成:聚類中心不再發生移動

fit_transform是fit和transform的組合。

我們知道fit(x,y)在新手入門的例子中比較多,但是這里的fit_transform(x)的括號中只有一個參數,這是為什么呢?

fit(x,y)傳兩個參數的是有監督學習的算法,fit(x)傳一個參數的是無監督學習的算法,比如降維、特征提取、標準化

然后解釋為什么出來fit_transform()這個東西,下面是重點:

fit和transform沒有任何關系,僅僅是數據處理的兩個不同環節,之所以出來這么個函數名,僅僅是為了寫代碼方便,

所以會發現transform()和fit_transform()的運行結果是一樣的。

注意:運行結果一模一樣不代表這兩個函數可以互相替換,絕對不可以!!!

transform函數是一定可以替換為fit_transform函數的

fit_transform函數不能替換為transform函數!!!理由解釋如下:

sklearn里的封裝好的各種算法都要fit、然后調用各種API方法,transform只是其中一個API方法,所以當你調用除transform之外的方法,必須要先fit,為了通用的寫代碼,還是分開寫比較好

也就是說,這個fit相對于transform而言是沒有任何意義的,但是相對于整個代碼而言,fit是為后續的API函數服務的,所以fit_transform不能改寫為transform。

--------------------- 本文來自 陳士林 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/appleyuchi/article/details/73503282?utm_source=copy

總結

以上是生活随笔為你收集整理的python聚类分析如何确定分类个数_Python数据挖掘—聚类—KMeans划分法的全部內容,希望文章能夠幫你解決所遇到的問題。

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