99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
2020-08-25 閱讀量: 1170
數據分析Python聚類

聚類

聚類(Clustering):將數據集劃分為若干相似對象組成的多個組(group) 或簇(cluster)的過程,使得同一組中對象間的相似度最大化,不同組 中對象間的相似度最小化。或者說一個簇(cluster)就是由彼此相似的 一組對象所構成的集合,不同簇中的對象通常不相似或相似度很低

聚類分析指將物理或抽象對象的集合分組為由類似的對象 組成的多個類的分析過程。它是一種重要的人類行為。

聚類源于很多領域,包括數學,計算機科學,統(tǒng)計學,生 物學和經濟學。在不同的應用領域,很多聚類技術都得到 了發(fā)展,這些技術方法被用作描述數據,衡量不同數據源 間的相似性,以及把數據源分類到不同的簇中。

聚類的意義:

首先將大規(guī)模的、紛繁復雜的數據歸檔為不同的類別, 進而針對每一類數據,制定不同的管理、分析方式,因 為每一類的數據都是顯著不同的。

聚類會從數據中發(fā)掘出很多分析和理解的視角,讓我們 更深入的把握數據資源的價值、并據此指導生產生活。

聚類與分類的區(qū)別:

分類:監(jiān)督學習,有限類別中的某一類

聚類:無監(jiān)督學習,不依賴預先定義的類或帶類標記的 訓練實例,需要由聚類學習算法自動確定標記。聚類是 一種探索性的分析,聚類分析所使用方法的不同,常常 會得到不同的結論。不同研究者對于同一組數據進行聚 類分析,所得到的聚類數未必一致。

聚類基本流程:

對數據進行表示和預處理,包括數據清洗、特征選擇或特征抽取

給定數據之間的相似度或相異度及其定義方法

根據相似度,對數據進行劃分,即聚類

對聚類結果進行評估

主要聚類方法類別:

K-means

K-均值(K-Means):K均值法是麥奎因(MacQueen,1967)提出的,這 種算法的基本思想是將每一個樣本分配給最近中心(均值)的類中。

算法步驟:

先從沒有標簽的元素集合A中隨機取k個元素作為k個子集各自的中心

分別計算剩下的元素到k個子集中心的距離,根據將這些元素分別劃歸到最 近的子集

根據聚類結果,重新計算中心(子集中所有元素各個維度的算數平均數)

將集合A中全部元素按照新的中心然后再重新聚類

重復以上步驟,直到聚類的結果不再發(fā)生變化

代碼實現(xiàn):

from sklearn.cluster import KMeans

import numpy as np

import matplotlib.pyplot as plt

# 載入數據

data = np.genfromtxt('data//kmeans.txt',delimiter=' ')

# 設置k值

k = 4

#只動n_clusters參數

model = KMeans(n_clusters=k)

model.fit(data) #聚類結束

model.cluster_centers_ #四個質心

model.labels_ #樣本所對應的標簽

model.n_iter_ #迭代次數

model.inertia_ #SSE,累加平方誤差

#預測,執(zhí)行分類

model.predict([[1,2]])

可視化:

predictions=model.predict(data)

centers=model.cluster_centers_

# 畫樣本點

mark = ['or','ob','og','oy']

for i,d in enumerate(data):

plt.plot(d[0],d[1],mark[predictions[i]])

# 畫分類中心點

mark = ['*r','*b','*g','*y']

for i,center in enumerate(centers):

plt.plot(center[0],center[1],mark[i],markersize=20)

plt.show()

K-Means算法優(yōu)化

根據經驗:使用多次的隨機初始化,計算每一次建模得到代價函數的值,選取代價 函數最小結果作為聚類結果

肘部法則優(yōu)化k

from sklearn import metrics

silhouette_all=[]

for k in range(2,10):

model = KMeans(n_clusters=k)

model.fit(data)

labels = model.labels_

silhouette_score = metrics.silhouette_score(data, labels, metric='euclidean')

silhouette_all.append(silhouette_score)

plt.plot(range(2,10),silhouette_all)

plt.xlabel('k')

plt.ylabel('silhouette_score')

plt.show()

輪廓系數:Mini Batch K-Means算法

Mini Batch K-Means算法是K-Means算法的變種,采用小批量的數據子集減小計 算時間。這里所謂批是指每次訓練算法時所隨機抽取的數據子集,采用這些隨 機產生的子集進行訓練算法,大大減小了計算時間,結果一般只略差于標準算法。

算法的迭代步驟有兩步:

從數據集中隨機抽取一些數據形成小批量,把他們分配給最近的質心

更新質心

與K均值算法相比,數據的更新是在每一個小樣本集上。Mini Batch K-Means比 K-Means有更快的收斂速度,略微降低聚類的效果。


DBSCAN

DBSCAN(Density-Based Spatial Clustering of Applications with Noise):它將簇定義為密度相連的點組成的最大集合,能夠把具有足夠高密度的區(qū)域劃 分為簇,并可在噪聲的空間數據庫中發(fā)現(xiàn)任意形狀的聚類

DBSCAN中的幾個定義:

Ε鄰域:給定對象半徑為Ε內的區(qū)域稱為該對象的Ε鄰域

核心對象:如果給定對象Ε鄰域內的樣本點數大于等于Min-points,則稱 該對象為核心對象

直接密度可達:對于樣本集合D,如果樣本點q在p的Ε鄰域內,并且p為核 心對象,那么p到q直接密度可達

密度可達:對于樣本集合D,給定一串樣本點p1,p2….pn,p=p1,q=pn,假如 pi-1到pi直接密度可達,那么對象p到q密度可達

密度相連:存在樣本集合D中的一點o,如果對象o到對象p和對象q都是密度 可達的,那么p和q密度相聯(lián)

DBSCAN密度聚類思想:由密度可達關系導出的最大密度相連的樣本集合,即為 我們最終聚類的一個類別,或者說一個簇

算法步驟:

指定合適的E和Min-points;

計算所有的樣本點,如果p的E鄰域里有超過Min-points個點,則創(chuàng)建一個 以p為核心點的新簇;

反復尋找這些核心點直接密度可達(之后能是密度可達)的點,將其加入 到相應簇,對于核心點發(fā)生“密度相連”狀況的簇,給予合并;

當沒有新的點可以被添加到任何簇時,算法結束。


DBSCAN的主要優(yōu)點有:

不需要輸入聚類個數,可以對任意形狀的稠密數據集進行聚類,相對的, K-Means之類的聚類算法一般只適用于凸數據集

可以在聚類的同時發(fā)現(xiàn)異常點,對數據集中的異常點不敏感

聚類結果沒有偏倚,相對的,K-Means之類的聚類算法初始值對聚類結果有 很大影響

DBSCAN的主要缺點有:

如果樣本集的密度不均勻、聚類間距差相差很大時,聚類質量較差

如果樣本集較大時,聚類收斂時間較長

調參相對于傳統(tǒng)的K-Means之類的聚類算法稍復雜,需要對距離閾值E,鄰域樣本數閾值Min-points聯(lián)合調參

數據集是稠密的,并且數據集不是凸的,DBSCAN會比K-Means聚類效果好很多

代碼實現(xiàn)

import numpy as np

import matplotlib.pyplot as plt

from sklearn import datasets

%matplotlib inline

x1, y1 = datasets.make_circles(n_samples=2000, factor=.4, noise=.05)#x1為坐標,y1為標簽,這里不需要標簽

x2, y2 = datasets.make_blobs(n_samples=1000, centers=[[1.2,1.2]], cluster_std=[[.1]])

x = np.concatenate((x1, x2))

plt.scatter(x[:, 0], x[:, 1], marker='o')

plt.show()

from sklearn.cluster import DBSCAN

y_pred = DBSCAN(eps = 0.2,min_samples=50).fit_predict(x)

plt.scatter(x[:, 0], x[:, 1], c=y_pred)

plt.show()


42.4673
0
關注作者
收藏
評論(0)

發(fā)表評論

暫無數據
推薦帖子