python聚类分析如何确定分类个数_Python数据挖掘—聚类—KMeans划分法
概念
聚類分析:是按照個(gè)體的特征將它們分類,讓同一個(gè)類別內(nèi)的個(gè)體之間具有較高的相似度,不同類別之間具有較大差異性
無分類目標(biāo)變量(Y)——無監(jiān)督學(xué)習(xí)
K-Means劃分法、DBSCAN密度法、層次聚類法
1、導(dǎo)入數(shù)據(jù)
1 importpandas2 from sklearn.cluster importKMeans3 from sklearn.decomposition importPCA4
5 importmatplotlib.pyplot as plt6
7 f=open("D:\\學(xué)習(xí)資料\\Python數(shù)據(jù)挖掘?qū)崙?zhàn)課程課件\\7.1\\data.csv",encoding='UTF-8')8 data=pandas.read_csv(f)9
10 fColumns=[11 '工作日上班時(shí)電話時(shí)長', '工作日下半時(shí)電話時(shí)長',12 '周末電話時(shí)長',13 '國際電話時(shí)長', '總電話時(shí)長', '平均每次通話時(shí)長'
14 ]
View Code
2、確定特征變量,特征變量之間的相關(guān)系數(shù),確定因變量,重新確定特征變量
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 '工作日上班時(shí)電話時(shí)長', '工作日下半時(shí)電話時(shí)長',22 '周末電話時(shí)長',23 '國際電話時(shí)長', '平均每次通話時(shí)長'
24 ]
View Code
3、降維、設(shè)定質(zhì)心
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 #對圖像進(jìn)行分類
2 pTarget=kmModel.predict(data[fColumns])3
4 pandas.crosstab(pTarget,pTarget) #看每類別的個(gè)數(shù)
5
6
7 plt.scatter(8 data_pca_2[0],9 data_pca_2[1],10 c=pTarget11 )
View Code
5、不同特征量之間的相關(guān)性
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是一個(gè)series結(jié)構(gòu)
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:聚類算法當(dāng)中的個(gè)數(shù)
means:均值算法
K-Means:使用均值算法把數(shù)據(jù)分成K個(gè)類的算法
算法目標(biāo):
是把n個(gè)樣本點(diǎn)劃分到k個(gè)類中,使得每個(gè)點(diǎn)都屬于離它最近的質(zhì)心對應(yīng)的類,以之作為聚類的標(biāo)準(zhǔn)
質(zhì)心
是指一個(gè)類,內(nèi)部所有樣本點(diǎn)的均值
計(jì)算步驟
第一步:取得K個(gè)初始質(zhì)心:從數(shù)據(jù)中隨機(jī)抽取k個(gè)點(diǎn)作為初始聚類的中心,由這個(gè)中心代表各個(gè)類
第二步:把每個(gè)點(diǎn)劃分進(jìn)相應(yīng)的類:根據(jù)歐式距離最小原則,把每個(gè)點(diǎn)劃分配進(jìn)距離最近的類中
第三步:重新計(jì)算質(zhì)心:根據(jù)均值等方法,重新計(jì)算每個(gè)類的質(zhì)心
第四步:迭代計(jì)算質(zhì)心:重復(fù)第二步和第三部,迭代計(jì)算質(zhì)心
第五步:聚類完成:聚類中心不再發(fā)生移動(dòng)
fit_transform是fit和transform的組合。
我們知道fit(x,y)在新手入門的例子中比較多,但是這里的fit_transform(x)的括號(hào)中只有一個(gè)參數(shù),這是為什么呢?
fit(x,y)傳兩個(gè)參數(shù)的是有監(jiān)督學(xué)習(xí)的算法,fit(x)傳一個(gè)參數(shù)的是無監(jiān)督學(xué)習(xí)的算法,比如降維、特征提取、標(biāo)準(zhǔn)化
然后解釋為什么出來fit_transform()這個(gè)東西,下面是重點(diǎn):
fit和transform沒有任何關(guān)系,僅僅是數(shù)據(jù)處理的兩個(gè)不同環(huán)節(jié),之所以出來這么個(gè)函數(shù)名,僅僅是為了寫代碼方便,
所以會(huì)發(fā)現(xiàn)transform()和fit_transform()的運(yùn)行結(jié)果是一樣的。
注意:運(yùn)行結(jié)果一模一樣不代表這兩個(gè)函數(shù)可以互相替換,絕對不可以!!!
transform函數(shù)是一定可以替換為fit_transform函數(shù)的
fit_transform函數(shù)不能替換為transform函數(shù)!!!理由解釋如下:
sklearn里的封裝好的各種算法都要fit、然后調(diào)用各種API方法,transform只是其中一個(gè)API方法,所以當(dāng)你調(diào)用除transform之外的方法,必須要先fit,為了通用的寫代碼,還是分開寫比較好
也就是說,這個(gè)fit相對于transform而言是沒有任何意義的,但是相對于整個(gè)代碼而言,fit是為后續(xù)的API函數(shù)服務(wù)的,所以fit_transform不能改寫為transform。
--------------------- 本文來自 陳士林 的CSDN 博客 ,全文地址請點(diǎn)擊:https://blog.csdn.net/appleyuchi/article/details/73503282?utm_source=copy
總結(jié)
以上是生活随笔為你收集整理的python聚类分析如何确定分类个数_Python数据挖掘—聚类—KMeans划分法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ddl是什么意思网络语_DDL语句是啥
- 下一篇: python zipfile教程_Pyt