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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

确定最佳聚类数matlab代码_详解DBSCAN聚类

發(fā)布時(shí)間:2023/12/9 循环神经网络 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 确定最佳聚类数matlab代码_详解DBSCAN聚类 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用DBSCAN標(biāo)識(shí)為員工分組

照片由Ishan @seefromthesky 在 Unsplash拍攝

基于密度的噪聲應(yīng)用空間聚類(DBSCAN)是一種無監(jiān)督的ML聚類算法。無監(jiān)督的意思是它不使用預(yù)先標(biāo)記的目標(biāo)來聚類數(shù)據(jù)點(diǎn)。聚類是指試圖將相似的數(shù)據(jù)點(diǎn)分組到人工確定的組或簇中。它可以替代KMeans和層次聚類等流行的聚類算法。

在我們的示例中,我們將檢查一個(gè)包含15,000名員工的人力資源數(shù)據(jù)集。數(shù)據(jù)集包含員工的工作特征,如工作滿意度、績(jī)效評(píng)分、工作量、任職年限、事故、升職次數(shù)。

KMeans vs DBSCAN

KMeans尤其容易受到異常值的影響。當(dāng)算法遍歷質(zhì)心時(shí),在達(dá)到穩(wěn)定性和收斂性之前,離群值對(duì)質(zhì)心的移動(dòng)方式有顯著的影響。此外,KMeans在集群大小和密度不同的情況下還存在數(shù)據(jù)精確聚類的問題。K-Means只能應(yīng)用球形簇,如果數(shù)據(jù)不是球形的,它的準(zhǔn)確性就會(huì)受到影響。最后,KMeans要求我們首先選擇希望找到的集群的數(shù)量。下面是KMeans和DBSCAN如何聚類同一個(gè)數(shù)據(jù)集的示例。

另一方面,DBSCAN不要求我們指定集群的數(shù)量,避免了異常值,并且在任意形狀和大小的集群中工作得非常好。它沒有質(zhì)心,聚類簇是通過將相鄰的點(diǎn)連接在一起的過程形成的。

DBSCAN是如何實(shí)現(xiàn)的呢?

首先,讓我們定義Epsilon和最小點(diǎn)、應(yīng)用DBSCAN算法時(shí)需要的兩個(gè)參數(shù)以及一些額外的參數(shù)。

1. Epsilon (?):社區(qū)的最大半徑。如果數(shù)據(jù)點(diǎn)的相互距離小于或等于指定的epsilon,那么它們將是同一類的。換句話說,它是DBSCAN用來確定兩個(gè)點(diǎn)是否相似和屬于同一類的距離。更大的epsilon將產(chǎn)生更大的簇(包含更多的數(shù)據(jù)點(diǎn)),更小的epsilon將構(gòu)建更小的簇。一般來說,我們喜歡較小的值是因?yàn)槲覀冎恍枰苄∫徊糠值臄?shù)據(jù)點(diǎn)在彼此之間的距離內(nèi)。但是如果太小,您會(huì)將集群分割的越來越小。

1. 最小點(diǎn)(minPts):在一個(gè)鄰域的半徑內(nèi)minPts數(shù)的鄰域被認(rèn)為是一個(gè)簇。請(qǐng)記住,初始點(diǎn)包含在minPts中。一個(gè)較低的minPts幫助算法建立更多的集群與更多的噪聲或離群值。較高的minPts將確保更健壯的集群,但如果集群太大,較小的集群將被合并到較大的集群中。

如果"最小點(diǎn)"= 4,則在彼此距離內(nèi)的任意4個(gè)或4個(gè)以上的點(diǎn)都被認(rèn)為是一個(gè)簇。

其他參數(shù)

核心點(diǎn):核心數(shù)據(jù)點(diǎn)在其近鄰距離內(nèi)至少有的最小的數(shù)據(jù)點(diǎn)個(gè)數(shù)。

我一直認(rèn)為DBSCAN需要一個(gè)名為"core_min"的第三個(gè)參數(shù),它將確定一個(gè)鄰域點(diǎn)簇被認(rèn)為是聚類簇之前的最小核心點(diǎn)數(shù)量。

邊界點(diǎn):邊界數(shù)據(jù)點(diǎn)位于郊區(qū),就像它們屬于近鄰點(diǎn)一樣。(比如w/在epsilon距離內(nèi)的核心點(diǎn)),但需要小于minPts。

離群點(diǎn):這些點(diǎn)不是近鄰點(diǎn),也不是邊界點(diǎn)。這些點(diǎn)位于低密度地區(qū)。

首先,選擇一個(gè)在其半徑內(nèi)至少有minPts的隨機(jī)點(diǎn)。然后對(duì)核心點(diǎn)的鄰域內(nèi)的每個(gè)點(diǎn)進(jìn)行評(píng)估,以確定它是否在epsilon距離內(nèi)有minPts (minPts包括點(diǎn)本身)。如果該點(diǎn)滿足minPts標(biāo)準(zhǔn),它將成為另一個(gè)核心點(diǎn),集群將擴(kuò)展。如果一個(gè)點(diǎn)不滿足minPts標(biāo)準(zhǔn),它成為邊界點(diǎn)。隨著過程的繼續(xù),算法開始發(fā)展成為核心點(diǎn)"a"是"b"的鄰居,而"b"又是"c"的鄰居,以此類推。當(dāng)集群被邊界點(diǎn)包圍時(shí),這個(gè)聚類簇已經(jīng)搜索完全,因?yàn)樵诰嚯x內(nèi)沒有更多的點(diǎn)。選擇一個(gè)新的隨機(jī)點(diǎn),并重復(fù)該過程以識(shí)別下一個(gè)簇。

如何確定最優(yōu)的Epsilon值

估計(jì)最優(yōu)值的一種方法是使用k近鄰算法。如果您還記得的話,這是一種有監(jiān)督的ML聚類算法,它根據(jù)新數(shù)據(jù)點(diǎn)與其他"已知"數(shù)據(jù)點(diǎn)的距離來聚類。我們?cè)趲?biāo)記的訓(xùn)練數(shù)據(jù)上訓(xùn)練一個(gè)KNN模型,以確定哪些數(shù)據(jù)點(diǎn)屬于哪個(gè)聚類。當(dāng)我們將模型應(yīng)用到新數(shù)據(jù)時(shí),算法根據(jù)與訓(xùn)練過的聚類的距離來確定新數(shù)據(jù)點(diǎn)屬于哪一個(gè)聚類。我們必須確定"k"參數(shù),它指定在將新數(shù)據(jù)點(diǎn)分配給一個(gè)集群之前,模型將考慮多少個(gè)最鄰近點(diǎn)。

為了確定最佳的epsilon值,我們計(jì)算每個(gè)點(diǎn)與其最近/最近鄰居之間的平均距離。然后我們繪制一個(gè)k距離,并選擇在圖的"肘部"處的epsilon值。在y軸上,我們繪制平均距離,在x軸上繪制數(shù)據(jù)集中的所有數(shù)據(jù)點(diǎn)。

如果選取的epsilon太小,很大一部分?jǐn)?shù)據(jù)將不會(huì)被聚類,而一個(gè)大的epsilon值將導(dǎo)致聚類簇被合并,大部分?jǐn)?shù)據(jù)點(diǎn)將會(huì)在同一個(gè)簇中。一般來說,較小的值比較合適,并且作為一個(gè)經(jīng)驗(yàn)法則,只有一小部分的點(diǎn)應(yīng)該在這個(gè)距離內(nèi)。

如何確定最佳minPts

通常,我們應(yīng)該將minPts設(shè)置為大于或等于數(shù)據(jù)集的維數(shù)。也就是說,我們經(jīng)常看到人們用特征的維度數(shù)乘以2來確定它們的minPts值。

就像用來確定最佳的epsilon值的"肘部方法"一樣,minPts的這種確定方法并不是100%正確的。

DBSCAN聚類的評(píng)價(jià)方式

影像法:該技術(shù)測(cè)量集群之間的可分離性。首先,找出每個(gè)點(diǎn)與集群中所有其他點(diǎn)之間的平均距離。然后測(cè)量每個(gè)點(diǎn)和其他簇中的每個(gè)點(diǎn)之間的距離。我們將兩個(gè)平均值相減,再除以更大的那個(gè)平均值。

我們最終想要的是一種較高(比如最接近1)的分?jǐn)?shù),表明存在較小的簇內(nèi)平均距離(緊密簇)和較大的簇間平均距離(簇間分離良好)。

集群可視化解釋:獲得集群之后,解釋每個(gè)集群非常重要。這通常是通過合并原始數(shù)據(jù)集和集群并可視化每個(gè)集群來完成的。每個(gè)集群越清晰越獨(dú)特越好。我們將在下面實(shí)現(xiàn)這個(gè)過程。

DBSCAN的優(yōu)點(diǎn)

· 不需要像KMeans那樣預(yù)先確定集群的數(shù)量

· 對(duì)異常值不敏感

· 能將高密度數(shù)據(jù)分離成小集群

· 可以聚類非線性關(guān)系(聚類為任意形狀)

DBSCAN的缺點(diǎn)

· 很難在不同密度的數(shù)據(jù)中識(shí)別集群

· 難以聚類高維數(shù)據(jù)

· 對(duì)極小點(diǎn)的參數(shù)非常敏感

讓我們嘗試一下

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport plotly.offline as pyopyo.init_notebook_mode()import plotly.graph_objs as gofrom plotly import toolsfrom plotly.subplots import make_subplotsimport plotly.offline as pyimport plotly.express as pxfrom sklearn.cluster import DBSCANfrom sklearn.neighbors import NearestNeighborsfrom sklearn.metrics import silhouette_scorefrom sklearn.preprocessing import StandardScalerfrom sklearn.decomposition import PCAplt.style.use('fivethirtyeight')from warnings import filterwarningsfilterwarnings('ignore')with open('HR_data.csv') as f: df = pd.read_csv(f, usecols=['satisfaction_level', 'last_evaluation', 'number_project', 'average_montly_hours', 'time_spend_company', 'Work_accident', 'promotion_last_5years'])f.close()

1. 標(biāo)準(zhǔn)化

由于數(shù)據(jù)集中的特特征不在相同的范圍內(nèi),所以我們需要對(duì)整個(gè)數(shù)據(jù)集進(jìn)行標(biāo)準(zhǔn)化。換句話說,我們數(shù)據(jù)集中的每個(gè)特征對(duì)于它們的數(shù)據(jù)都有獨(dú)特的大小和范圍。滿意度水平增加一分并不等于最后評(píng)價(jià)增加一分,反之亦然。由于DBSCAN利用點(diǎn)之間的距離(歐幾里得)來確定相似性,未縮放的數(shù)據(jù)會(huì)產(chǎn)生問題。如果某一特征在其數(shù)據(jù)中具有較高的可變性,則距離計(jì)算受該特征的影響較大。通過縮放特征,我們將所有特征對(duì)齊到均值為0,標(biāo)準(zhǔn)差為1。

scaler = StandardScaler()scaler.fit(df)X_scale = scaler.transform(df)df_scale = pd.DataFrame(X_scale, columns=df.columns)df_scale.head()

2. 特征降維

在一些算法如KMeans中,如果數(shù)據(jù)集的特征維度太大,就很難精確地構(gòu)建聚類。高維數(shù)并不一定意味著成百上千維度的特征。甚至10個(gè)維度的特征也會(huì)造成準(zhǔn)確性問題。

特征降維背后的理論是將原始特征集轉(zhuǎn)換為更少的人工派生特征,這些特征仍然保留了原始特征中包含的大部分信息。

最流行的特征降維技術(shù)之一是主成分分析(PCA)。PCA將原始數(shù)據(jù)集縮減為指定數(shù)量的特征,并將這些特征稱為主成分。我們必須選擇我們希望看到的主成分的數(shù)量。我們?cè)谖谊P(guān)于KMeans集群的文章中討論了減少特性,我強(qiáng)烈建議您看一看()。

首先,我們需要確定適當(dāng)?shù)闹鞒煞謹(jǐn)?shù)量。3個(gè)主成分似乎占了大約75%的方差。

pca = PCA(n_components=7)pca.fit(df_scale)variance = pca.explained_variance_ratio_ var=np.cumsum(np.round(variance, 3)*100)plt.figure(figsize=(12,6))plt.ylabel('% Variance Explained')plt.xlabel('# of Features')plt.title('PCA Analysis')plt.ylim(0,100.5)plt.plot(var)

現(xiàn)在我們知道了維持一個(gè)特定百分比的方差所需的主成分的數(shù)量,讓我們對(duì)原始數(shù)據(jù)集應(yīng)用一個(gè)3成分的主成分分析。請(qǐng)注意,第一個(gè)主成分占到與原始數(shù)據(jù)集方差的26%。在本文的其余部分中,我們將使用"pca_df"數(shù)據(jù)框架。

pca = PCA(n_components=3)pca.fit(df_scale)pca_scale = pca.transform(df_scale)pca_df = pd.DataFrame(pca_scale, columns=['pc1', 'pc2', 'pc3'])print(pca.explained_variance_ratio_)

在3D空間中繪制數(shù)據(jù),可以看到DBSCAN存在一些潛在的問題。DBSCAN的一個(gè)主要缺點(diǎn)就是它不能準(zhǔn)確地對(duì)不同密度的數(shù)據(jù)進(jìn)行聚類,從下面的圖中,我們可以看到兩個(gè)不同密度的單獨(dú)集群。在應(yīng)用DBSCAN算法時(shí),我們可能能夠在數(shù)據(jù)點(diǎn)較少的聚類結(jié)果中找到不錯(cuò)的聚類方式,但在數(shù)據(jù)點(diǎn)較多的聚類中的許多數(shù)據(jù)點(diǎn)可能被歸類為離群值/噪聲。這當(dāng)然取決于我們對(duì)epsilon和最小點(diǎn)值的選擇。

Scene = dict(xaxis = dict(title = 'PC1'),yaxis = dict(title = 'PC2'),zaxis = dict(title = 'PC3'))trace = go.Scatter3d(x=pca_df.iloc[:,0], y=pca_df.iloc[:,1], z=pca_df.iloc[:,2], mode='markers',marker=dict(colorscale='Greys', opacity=0.3, size = 10, ))layout = go.Layout(margin=dict(l=0,r=0),scene = Scene, height = 1000,width = 1000)data = [trace]fig = go.Figure(data = data, layout = layout)fig.show()

3.DBSCAN聚類

方法1

在應(yīng)用聚類算法之前,我們必須使用前面討論過的"肘形法"來確定合適的epsilon級(jí)別。看起來最佳的值在0.2左右。最后,由于我們的數(shù)據(jù)有3個(gè)主成分,我們將把最小點(diǎn)標(biāo)準(zhǔn)設(shè)置為6。

plt.figure(figsize=(10,5))nn = NearestNeighbors(n_neighbors=5).fit(pca_df)distances, idx = nn.kneighbors(pca_df)distances = np.sort(distances, axis=0)distances = distances[:,1]plt.plot(distances)plt.show()

將epsilon設(shè)置為0.2,將min_samples設(shè)置為6,得到了53個(gè)集群,影像分?jǐn)?shù)為-0.521,以及超過1500個(gè)被認(rèn)為是離群值/噪聲的數(shù)據(jù)點(diǎn)。在某些研究領(lǐng)域,53個(gè)集群可能被認(rèn)為是有用的,但我們有一個(gè)15000名員工的數(shù)據(jù)集。從業(yè)務(wù)的角度來看,我們需要一些可管理的集群(即3-5個(gè)),以便更好地分配工作場(chǎng)所。此外,剪影得分-0.521表明數(shù)據(jù)點(diǎn)是不正確的聚集。

看看下面的3D圖,我們可以看到一個(gè)包含了大多數(shù)數(shù)據(jù)點(diǎn)的集群。出現(xiàn)了一個(gè)較小但很重要的聚類簇,但剩下52個(gè)聚類簇的規(guī)模要小得多。從業(yè)務(wù)角度來看,這些集群提供的信息不是很多,因?yàn)榇蠖鄶?shù)員工只屬于兩個(gè)集群。組織希望看到幾個(gè)大的集群,以確定它們的有效性,但也能夠從事一些針對(duì)集群?jiǎn)T工的組織主動(dòng)性工作(例如。增加培訓(xùn)、薪酬變化等)。

db = DBSCAN(eps=0.2, min_samples=6).fit(pca_df)labels = db.labels_# Number of clusters in labels, ignoring noise if present.n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)n_noise_ = list(labels).count(-1)print('Estimated number of clusters: %d' % n_clusters_)print('Estimated number of noise points: %d' % n_noise_)print("Silhouette Coefficient: %0.3f" % metrics.silhouette_score(pca_df, labels))Scene = dict(xaxis = dict(title = 'PC1'),yaxis = dict(title = 'PC2'),zaxis = dict(title = 'PC3'))labels = db.labels_trace = go.Scatter3d(x=pca_df.iloc[:,0], y=pca_df.iloc[:,1], z=pca_df.iloc[:,2], mode='markers',marker=dict(color = labels, colorscale='Viridis', size = 10, line = dict(color = 'gray',width = 5)))layout = go.Layout(scene = Scene, height = 1000,width = 1000)data = [trace]fig = go.Figure(data = data, layout = layout)fig.update_layout(, font=dict(size=12,))fig.show()Image for post

方法2

我們不使用"肘部方法"和最小值啟發(fā)式方法,而是使用迭代方法來微調(diào)我們的DBSCAN模型。在對(duì)數(shù)據(jù)應(yīng)用DBSCAN算法時(shí),我們將迭代一系列的epsilon和最小點(diǎn)值。

在我們的例子中,我們將迭代0.5到1.5之間的epsilon值和2-7之間的minPts。for循環(huán)將使用這組值運(yùn)行DBSCAN算法,并為每次迭代生成集群數(shù)量和影像分?jǐn)?shù)。請(qǐng)記住,您需要根據(jù)數(shù)據(jù)調(diào)整參數(shù)。您可能會(huì)在一組參數(shù)上運(yùn)行此代碼,并發(fā)現(xiàn)產(chǎn)生的最佳影像分?jǐn)?shù)是0.30。為了將更多的點(diǎn)包含到一個(gè)集群中,您可能需要增加值。

pca_eps_values = np.arange(0.2,1.5,0.1) pca_min_samples = np.arange(2,5) pca_dbscan_params = list(product(pca_eps_values, pca_min_samples))pca_no_of_clusters = []pca_sil_score = []pca_epsvalues = []pca_min_samp = []for p in pca_dbscan_params: pca_dbscan_cluster = DBSCAN(eps=p[0], min_samples=p[1]).fit(pca_df) pca_epsvalues.append(p[0]) pca_min_samp.append(p[1])pca_no_of_clusters.append(len(np.unique(pca_dbscan_cluster.labels_))) pca_sil_score.append(silhouette_score(pca_df, pca_dbscan_cluster.labels_))pca_eps_min = list(zip(pca_no_of_clusters, pca_sil_score, pca_epsvalues, pca_min_samp))pca_eps_min_df = pd.DataFrame(pca_eps_min, columns=['no_of_clusters', 'silhouette_score', 'epsilon_values', 'minimum_points'])pca_ep_min_df

我們可以看到,通過我們的epsilon和minPts的迭代,我們已經(jīng)獲得了很大范圍的簇?cái)?shù)和影像分?jǐn)?shù)。0.9到1.1之間的epsilon分?jǐn)?shù)開始產(chǎn)生可管理的集群數(shù)量。將epsilon增加到1.2或更高會(huì)導(dǎo)致集群數(shù)量太少,無法在商業(yè)上發(fā)揮作用。此外,其中一些集群可能只是噪音。我們稍后會(huì)講到。

增加的epsilon會(huì)減少集群的數(shù)量,但每個(gè)集群也會(huì)開始包含更多的離群點(diǎn)/噪聲數(shù)據(jù)點(diǎn),這一點(diǎn)也可以理解為有一定程度的收益遞減。

為了簡(jiǎn)單起見,讓我們選擇7個(gè)集群并檢查集群分布情況。(epsilon: 1.0和minPts: 4)。

同樣重要的是,運(yùn)行此代碼串時(shí)肯定會(huì)遇到的一個(gè)常見錯(cuò)誤。有時(shí),當(dāng)你設(shè)置的參數(shù)不合適,for循環(huán)最終會(huì)變成epsvalues和minsamples的組合,這只會(huì)產(chǎn)生一個(gè)集群。但是,silhouette ette_score函數(shù)至少需要定義兩個(gè)集群。您需要限制參數(shù)以避免此問題。

在上面的示例中,如果我們將epsilon參數(shù)的范圍設(shè)置為0.2到2.5,那么很可能會(huì)生成一個(gè)集群并最終導(dǎo)致錯(cuò)誤。

你可能會(huì)問自己"我們不是應(yīng)該獲得7個(gè)集群?jiǎn)?"答案是肯定的,如果我們看一下獨(dú)特的標(biāo)簽/集群,我們看到每個(gè)數(shù)據(jù)點(diǎn)有7個(gè)標(biāo)簽。根據(jù)Sklearn文檔,標(biāo)簽"-1"等同于一個(gè)"嘈雜的"數(shù)據(jù)點(diǎn),它還沒有被聚集到6個(gè)高密度的集群中。我們自然不希望將任何"-1"標(biāo)簽考慮為一個(gè)集群,因此,它們將從計(jì)算中刪除。

db = DBSCAN(eps=1.0, min_samples=4).fit(pca_df)labels = db.labels_# Number of clusters in labels, ignoring noise if present.n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)n_noise_ = list(labels).count(-1)print('Estimated number of clusters: %d' % n_clusters_)print('Estimated number of noise points: %d' % n_noise_)print("Silhouette Coefficient: %0.3f" % silhouette_score(pca_df, labels))set(labels)

從6個(gè)DBSCAN派生集群的3D圖中可以看出,盡管密度較小,但位于圖頂端的密度較小的集群對(duì)DBSCAN并沒有造成太大影響。如果您還記得的話,DBSCAN很難正確地集群各種密度的數(shù)據(jù)。頂部的集群和更大的底部集群之間的距離很可能大于1.0的epsilon值。

也就是說,數(shù)據(jù)集包含額外的高密度集群,但是我們的epsilon和minPts太大了。底部的聚類簇包含至少兩個(gè)高密度的聚類簇,然而,由于底部聚類簇的高密度降低了epsilon和minPts,只會(huì)產(chǎn)生許多更小的聚類簇。這也是DBSCAN的主要缺點(diǎn)。我一直認(rèn)為DBSCAN需要第三個(gè)參數(shù)"min_core",它將確定一個(gè)集群可以被視為有效集群之前的最小核心點(diǎn)數(shù)量。

Scene = dict(xaxis = dict(title = 'PC1'),yaxis = dict(title = 'PC2'),zaxis = dict(title = 'PC3'))# model.labels_ is nothing but the predicted clusters i.e y_clusterslabels = db.labels_trace = go.Scatter3d(x=pca_df.iloc[:,0], y=pca_df.iloc[:,1], z=pca_df.iloc[:,2], mode='markers',marker=dict(color = labels, colorscale='Viridis', size = 10, line = dict(color = 'gray',width = 5)))layout = go.Layout(scene = Scene, height = 1000,width = 1000)data = [trace]fig = go.Figure(data = data, layout = layout)fig.update_layout(DBSCAN Clusters (6) Derived from PCA'", font=dict(size=12,))fig.show()

在我們開始之前,讓我們快速了解一下每個(gè)集群中的員工數(shù)量。似乎cluster 0包含了大部分信息不太豐富的數(shù)據(jù)點(diǎn)。事實(shí)上,如果我們使用0.5的epsilon值和5的minPts運(yùn)行算法,就會(huì)產(chǎn)生63個(gè)集群,集群0仍然會(huì)包含99%的員工人口。

np.unique(labels, return_counts=True)

小結(jié)

DBSCAN,一種密度聚類算法,常用于非線性或非球面數(shù)據(jù)集。epsilon和minPts是兩個(gè)必需的參數(shù)。epsilon是附近數(shù)據(jù)點(diǎn)的半徑,這些數(shù)據(jù)點(diǎn)需要被認(rèn)為是足夠"相似"才能開始聚類。最后,minPts是需要在半徑內(nèi)的數(shù)據(jù)點(diǎn)的最小數(shù)目。

在我們的示例中,我們?cè)噲D根據(jù)工作特征對(duì)包含15,000名員工的數(shù)據(jù)集進(jìn)行聚類。我們首先標(biāo)準(zhǔn)化了數(shù)據(jù)集以縮放特征。接下來,我們應(yīng)用主成分分析將維度/特征的數(shù)量減少到3個(gè)主成分。使用"肘部法",我們估計(jì)了0.2的epsilon值和6的minPts。使用這些參數(shù),我們能夠獲得53個(gè)集群,1500個(gè)離群值和-0.52的影響分?jǐn)?shù)。不用說,結(jié)果并不是很理想。

接下來,我們嘗試了一種迭代的方法來微調(diào)epsilon和minPts。我們已經(jīng)確定了epsilon值為1.0和minPts值為4。該算法返回6個(gè)有效的集群(一個(gè)-1集群),只有7個(gè)異常值,以及0.46的可觀影像分?jǐn)?shù)。然而,在繪制派生集群時(shí),發(fā)現(xiàn)第一個(gè)集群包含99%的員工。從業(yè)務(wù)的角度來看,我們希望我們的集群能夠更加均衡地分布,從而為我們提供關(guān)于員工的良好見解。

DBSCAN似乎不是這個(gè)特定數(shù)據(jù)集的最佳聚類算法。

作者:Kamil Mysiak

deephub翻譯組:孟翔杰

總結(jié)

以上是生活随笔為你收集整理的确定最佳聚类数matlab代码_详解DBSCAN聚类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。