偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

數(shù)據(jù)挖掘之聚類(lèi)分析總結(jié)(建議收藏)

大數(shù)據(jù)
聚類(lèi)分析是按照個(gè)體的特征將他們分類(lèi),讓同一個(gè)類(lèi)別內(nèi)的個(gè)體之間具有較高的相似度,不同類(lèi)別之間具有較大的差異性。

聚類(lèi)分析

一、概念

聚類(lèi)分析是按照個(gè)體的特征將他們分類(lèi),讓同一個(gè)類(lèi)別內(nèi)的個(gè)體之間具有較高的相似度,不同類(lèi)別之間具有較大的差異性

  • 聚類(lèi)分析屬于無(wú)監(jiān)督學(xué)習(xí)
  • 聚類(lèi)對(duì)象可以分為Q型聚類(lèi)和R型聚類(lèi)

Q型聚類(lèi):樣本/記錄聚類(lèi) 以距離為相似性指標(biāo) (歐氏距離、歐氏平方距離、馬氏距離、明式距離等)

R型聚類(lèi):指標(biāo)/變量聚類(lèi) 以相似系數(shù)為相似性指標(biāo) (皮爾遜相關(guān)系數(shù)、夾角余弦、指數(shù)相關(guān)系數(shù)等)

二、常用的聚類(lèi)算法

  • K-Means劃分法
  • 層次聚類(lèi)法
  • DBSCAN密度法

1、K-Means劃分法

K表示聚類(lèi)算法中類(lèi)的個(gè)數(shù),Means表示均值算法,K-Means即是用均值算法把數(shù)據(jù)分成K個(gè)類(lèi)的算法。

K-Means算法的目標(biāo),是把n個(gè)樣本點(diǎn)劃分到k個(gè)類(lèi)中,使得每個(gè)點(diǎn)都屬于離它最近的質(zhì)心(一個(gè)類(lèi)內(nèi)部所有樣本點(diǎn)的均值)對(duì)應(yīng)的類(lèi),以之作為聚類(lèi)的標(biāo)準(zhǔn)。

K-Means算法的計(jì)算步驟

  • 取得k個(gè)初始質(zhì)心:從數(shù)據(jù)中隨機(jī)抽取k個(gè)點(diǎn)作為初始聚類(lèi)的中心,來(lái)代表各個(gè)類(lèi)
  • 把每個(gè)點(diǎn)劃分進(jìn)相應(yīng)的類(lèi):根據(jù)歐式距離最小原則,把每個(gè)點(diǎn)劃分進(jìn)距離最近的類(lèi)中
  • 重新計(jì)算質(zhì)心:根據(jù)均值等方法,重新計(jì)算每個(gè)類(lèi)的質(zhì)心
  • 迭代計(jì)算質(zhì)心:重復(fù)第二步和第三步,迭代計(jì)算
  • 聚類(lèi)完成:聚類(lèi)中心不再發(fā)生移動(dòng)

基于sklearn包的實(shí)現(xiàn)

導(dǎo)入一份如下數(shù)據(jù),經(jīng)過(guò)各變量間的散點(diǎn)圖和相關(guān)系數(shù),發(fā)現(xiàn)工作日上班電話(huà)時(shí)長(zhǎng)與總電話(huà)時(shí)長(zhǎng)存在強(qiáng)正相關(guān)關(guān)系。

數(shù)據(jù)挖掘——聚類(lèi)分析總結(jié)(建議收藏)

選擇可建模的變量并降維。

  1. cloumns_fix1 = ['工作日上班時(shí)電話(huà)時(shí)長(zhǎng)''工作日下半時(shí)電話(huà)時(shí)長(zhǎng)',  
  2.     '周末電話(huà)時(shí)長(zhǎng)''國(guó)際電話(huà)時(shí)長(zhǎng)''平均每次通話(huà)時(shí)長(zhǎng)'
  3.  
  4. #數(shù)據(jù)降維 
  5. pca_2 = PCA(n_components=2) 
  6. data_pca_2 = pd.DataFrame(pca_2.fit_transform(data[cloumns_fix1])) 

通過(guò)sklearn包中的K-Means方法構(gòu)建模型。

  1. #繪制散點(diǎn)圖查看數(shù)據(jù)點(diǎn)大致情況 
  2. plt.scatter(data_pca_2[0],data_pca_2[1]) 
  3.  
  4. #預(yù)計(jì)將數(shù)據(jù)點(diǎn)分類(lèi)為3類(lèi) 
  5. kmmodel = KMeans(n_clusters=3) #創(chuàng)建模型 
  6. kmmodel = kmmodel.fit(data[cloumns_fix1]) #訓(xùn)練模型 
  7. ptarget = kmmodel.predict(data[cloumns_fix1]) #對(duì)原始數(shù)據(jù)進(jìn)行標(biāo)注 
  8.  
  9. pd.crosstab(ptarget,ptarget) #交叉表查看各個(gè)類(lèi)別數(shù)據(jù)的數(shù)量 

plt.scatter(data_pca_2[0],data_pca_2[1],c=ptarget)#查看聚類(lèi)的分布情況。

數(shù)據(jù)挖掘——聚類(lèi)分析總結(jié)(建議收藏)

最后,可以通過(guò)直方圖查看各聚類(lèi)間的差異。

  1. #查看各類(lèi)之間的差異 
  2. dMean = pd.DataFrame(columns=cloumns_fix1+['分類(lèi)']) #得到每個(gè)類(lèi)別的均值 
  3. data_gb = data[cloumns_fix1].groupby(ptarget) #按標(biāo)注進(jìn)行分組 
  4.  
  5. i = 0 
  6. for g in data_gb.groups: 
  7.     rMean = data_gb.get_group(g).mean()  
  8.     rMean['分類(lèi)'] = g; 
  9.     dMean = dMean.append(rMean, ignore_index=True
  10.     subData = data_gb.get_group(g) 
  11.     for column in cloumns_fix1: 
  12.         i = i+1; 
  13.         p = plt.subplot(3, 5, i) 
  14.         p.set_title(column
  15.         p.set_ylabel(str(g) + "分類(lèi)"
  16.         plt.hist(subData[column], bins=20) 
數(shù)據(jù)挖掘——聚類(lèi)分析總結(jié)(建議收藏)

2、 層次聚類(lèi)法

層次聚類(lèi)算法又稱(chēng)為樹(shù)聚類(lèi)算法,它根據(jù)數(shù)據(jù)之間的距離,透過(guò)一種層次架構(gòu)方式,反復(fù)將數(shù)據(jù)進(jìn)行聚合,創(chuàng)建一個(gè)層次以分解給定的數(shù)據(jù)集。層次聚類(lèi)算法常用于一維數(shù)據(jù)的自動(dòng)分組。

層次聚類(lèi)算法是一種很直觀的聚類(lèi)算法,基本思想是通過(guò)數(shù)據(jù)間的相似性,按相似性由高到低排序后重新連接各個(gè)節(jié)點(diǎn),整個(gè)過(guò)程就是建立一個(gè)樹(shù)結(jié)構(gòu),如下圖:

數(shù)據(jù)挖掘——聚類(lèi)分析總結(jié)(建議收藏)

層次聚類(lèi)算法的步驟:

  • 每個(gè)數(shù)據(jù)點(diǎn)單獨(dú)作為一個(gè)類(lèi)
  • 計(jì)算各點(diǎn)之間的距離(相似度)
  • 按照距離從小到大(相似度從強(qiáng)到弱)連接成對(duì)(連接后按兩點(diǎn)的均值作為新類(lèi)繼續(xù)計(jì)算),得到樹(shù)結(jié)構(gòu)

基于sklearn包的實(shí)現(xiàn)

使用K-Means聚類(lèi)案例中的數(shù)據(jù)。

  1. cloumns_fix1 = ['工作日上班時(shí)電話(huà)時(shí)長(zhǎng)''工作日下半時(shí)電話(huà)時(shí)長(zhǎng)',  
  2.     '周末電話(huà)時(shí)長(zhǎng)',  
  3.     '國(guó)際電話(huà)時(shí)長(zhǎng)''平均每次通話(huà)時(shí)長(zhǎng)'
  4.  
  5. linkage = hcluster.linkage(data[cloumns_fix1], method='centroid') #中心點(diǎn)距離計(jì)算,得到矩陣 
  1. linkage = scipy.cluster.hierarchy.linkage(data, method='single'

method 類(lèi)距離計(jì)算公式有三種參數(shù):

  • single 兩個(gè)類(lèi)之間最短距離的點(diǎn)的距離
  • complete 兩個(gè)類(lèi)之間最長(zhǎng)距離的點(diǎn)的距離
  • centroid 兩個(gè)類(lèi)所有點(diǎn)的中點(diǎn)的距離
  1. #層次聚類(lèi)繪圖 
  2. hcluster.dendrogram(linkage)  #不設(shè)置參數(shù)時(shí)會(huì)將所有點(diǎn)做為一個(gè)基礎(chǔ)的類(lèi)進(jìn)行樹(shù)結(jié)構(gòu)的繪制 
  3.  
  4. #由于數(shù)據(jù)量大,限制類(lèi)的個(gè)數(shù),保留12個(gè)節(jié)點(diǎn),有括號(hào)表示副節(jié)點(diǎn),括號(hào)內(nèi)的數(shù)字為該節(jié)點(diǎn)內(nèi)部包含的子節(jié)點(diǎn) 
  5. hcluster.dendrogram(linkage, truncate_mode='lastp', p=12, leaf_font_size=12.) 
數(shù)據(jù)挖掘——聚類(lèi)分析總結(jié)(建議收藏)

 

  1. #對(duì)聚類(lèi)得到的類(lèi)進(jìn)行標(biāo)注 層次聚類(lèi)的結(jié)果,要聚類(lèi)的個(gè)數(shù),劃分方法 
  2. (maxclust,最大劃分法)ptarget = hcluster.fcluster(linkage, 3,  
  3. criterion='maxclust')#查看各類(lèi)別中樣本含量 
  4. pd.crosstab(ptarget,ptarget) 
數(shù)據(jù)挖掘——聚類(lèi)分析總結(jié)(建議收藏)

繪制圖形

  1. #使用主成分分析進(jìn)行數(shù)據(jù)降維 
  2. pca_2 = PCA(n_components=2) 
  3. data_pca_2 = pd.DataFrame(pca_2.fit_transform(data[cloumns_fix1])) 
  4.  
  5. plt.scatter(data_pca_2[0], data_pca_2[1], c=ptarget) #繪制圖形 

3、 DBSCAN密度法

概念:

  • 中文全稱(chēng):基于密度的帶噪聲的空間聚類(lèi)應(yīng)用算法,它是將簇定義為密度相聯(lián)的點(diǎn)的最大集合,能夠把具有足夠高密度的區(qū)域劃分為簇,并可在噪聲的空間數(shù)據(jù)集中發(fā)現(xiàn)任意形狀的聚類(lèi)。
  • 密度:空間中任意一點(diǎn)的密度是以該點(diǎn)為圓心,以Eps為半徑的園區(qū)域內(nèi)包含的點(diǎn)數(shù)目。
  • 鄰域:空間中任意一點(diǎn)的鄰域是以該店為圓心,以Eps為半徑的園區(qū)域內(nèi)包含的點(diǎn)集合。
  • 核心點(diǎn):空間中某一點(diǎn)的密度,如果大于某一給定閾值MinPts,則稱(chēng)該點(diǎn)為核心點(diǎn)。(小于MinPts則稱(chēng)邊界點(diǎn))
  • 噪聲點(diǎn):既不是核心點(diǎn),也不是邊界點(diǎn)的任意點(diǎn)

DBSCAN算法的步驟:

  • 通過(guò)檢查數(shù)據(jù)集中每點(diǎn)的Eps鄰域來(lái)搜索簇,如果點(diǎn)p的Eps鄰域內(nèi)包含的點(diǎn)多于MinPts個(gè),則創(chuàng)建一個(gè)以p為核心的簇
  • 通過(guò)迭代聚集這些核心點(diǎn)p距離Eps內(nèi)的點(diǎn),然后合并成為新的簇(可能)
  • 當(dāng)沒(méi)有新點(diǎn)添加到新的簇時(shí),聚類(lèi)完成

DBSCAN算法優(yōu)點(diǎn):

  • 聚類(lèi)速度快且能夠有效處理噪聲點(diǎn)發(fā)現(xiàn)任意形狀的空間聚類(lèi)
  • 不需要輸入要?jiǎng)澐值木垲?lèi)個(gè)數(shù)
  • 聚類(lèi)簇的形狀沒(méi)有偏倚
  • 可以在需要是過(guò)濾噪聲

DBSCAN算法缺點(diǎn):

  • 數(shù)據(jù)量大時(shí),需要較大的內(nèi)存和計(jì)算時(shí)間
  • 當(dāng)空間聚類(lèi)的密度不均勻、聚類(lèi)間距差較大時(shí),得到的聚類(lèi)質(zhì)量較差(MinPts與Eps選取困難)
  • 算法效果依賴(lài)距離公式選擇,實(shí)際應(yīng)用中常使用歐式距離,對(duì)于高緯度數(shù)據(jù),存在“維度災(zāi)難” https://baike.baidu.com/item/維數(shù)災(zāi)難/6788619?fr=aladdin

python中的實(shí)現(xiàn)

1)數(shù)學(xué)原理實(shí)現(xiàn)

導(dǎo)入一份如下分布的數(shù)據(jù)點(diǎn)的集合。

數(shù)據(jù)挖掘——聚類(lèi)分析總結(jié)(建議收藏)
  1. #計(jì)算得到各點(diǎn)間距離的矩陣 
  2. from sklearn.metrics.pairwise import euclidean_distances 
  3. dist = euclidean_distances(data) 

將所有點(diǎn)進(jìn)行分類(lèi),得到核心點(diǎn)、邊界點(diǎn)和噪聲點(diǎn)。

  1. #設(shè)置Eps和MinPts 
  2. eps = 0.2 
  3. MinPts = 5 
  4.  
  5. ptses = [] 
  6. for row in dist:   #密度    density = np.sum(row<eps)  
  7.     pts = 0 
  8.     if density>MinPts:    #核心點(diǎn),密度大于5       
  9.         pts = 1 
  10.     elif density>1 :   #邊界點(diǎn),密度大于1小于5 
  11.         pts = 2 
  12.     else:    #噪聲點(diǎn),密度為1 
  13.         pts = 0 
  14.     ptses.append(pts) 
  15. #得到每個(gè)點(diǎn)的分類(lèi) 

以防萬(wàn)一,將噪聲點(diǎn)進(jìn)行過(guò)濾,并計(jì)算新的距離矩陣。

  1. #把噪聲點(diǎn)過(guò)濾掉,因?yàn)樵肼朁c(diǎn)無(wú)法聚類(lèi),它們獨(dú)自一類(lèi) 
  2. corePoints = data[pandas.Series(ptses)!=0] 
  3. coreDist = euclidean_distances(corePoints) 

以每個(gè)點(diǎn)為核心,得到該點(diǎn)的鄰域。

  1. cluster = dict() 
  2. i = 0 
  3. for row in coreDist:  
  4.     cluster[i] = numpy.where(row<eps)[0] 
  5.     i = i + 1 

然后,將有交集的鄰域,都合并為新的領(lǐng)域。

  1. for i in range(len(cluster)): 
  2.     for j in range(len(cluster)): 
  3.         if len(set(cluster[j]) & set(cluster[i]))>0 and i!=j: 
  4.             cluster[i] = list(set(cluster[i]) | set(cluster[j])) 
  5.             cluster[j] = list() 

最后,找出獨(dú)立(也就是沒(méi)有交集)的鄰域,就是我們最后的聚類(lèi)的結(jié)果了。

  1. result = dict() 
  2. j = 0 
  3. for i in range(len(cluster)): 
  4.   if len(cluster[i])>0: 
  5.     result[j] = cluster[i] 
  6.     j = j + 1 
  7.  
  8. #找出每個(gè)點(diǎn)所在領(lǐng)域的序號(hào),作為他們最后聚類(lèi)的結(jié)果標(biāo)記 
  9. for i in range(len(result)): 
  10.     for j in result[i]: 
  11.         data.at[j, 'type'] = i 
  12.   
  13. plt.scatter(data['x'], data['y'], c=data['type']) 
數(shù)據(jù)挖掘——聚類(lèi)分析總結(jié)(建議收藏)

2)基于sklearn包的實(shí)現(xiàn)

  1. eps = 0.2 
  2. MinPts = 5 
  3.  
  4. model = DBSCAN(eps, MinPts) 
  5.  
  6. data['type'] = model.fit_predict(data) 
  7.  
  8. plt.scatter(data['x'],  data['y'], c=data['type']) 

 

責(zé)任編輯:未麗燕 來(lái)源: 今日頭條
相關(guān)推薦

2021-01-26 09:25:02

Nginx開(kāi)源軟件服務(wù)器

2015-10-30 11:52:09

數(shù)據(jù)挖掘術(shù)語(yǔ)

2022-05-18 11:35:17

Python字符串

2022-03-08 23:46:06

數(shù)據(jù)分析大數(shù)據(jù)

2022-07-20 00:15:48

SQL數(shù)據(jù)庫(kù)編程語(yǔ)言

2016-08-28 12:31:22

2024-08-20 08:22:21

2020-06-19 09:55:00

Redis數(shù)據(jù)庫(kù)字符串

2025-07-04 03:00:00

數(shù)據(jù)分析數(shù)字化大數(shù)據(jù)

2020-12-09 16:57:15

數(shù)據(jù)分析大數(shù)據(jù)

2022-03-09 18:09:47

前端CSS代碼

2021-09-23 17:10:48

Python可視化漏斗圖

2022-03-24 07:38:07

注解SpringBoot項(xiàng)目

2022-08-24 11:54:10

Pandas可視化

2021-05-27 05:34:22

Git開(kāi)源控制系統(tǒng)

2012-12-10 13:24:15

回歸分析數(shù)據(jù)挖掘

2020-07-23 09:15:25

Python機(jī)器學(xué)習(xí)聚類(lèi)分析

2014-07-18 09:51:05

挖掘數(shù)據(jù)分析

2020-12-18 08:03:00

插件MyBatis Executor

2022-06-17 10:52:01

數(shù)據(jù)存儲(chǔ)采集
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)