欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python實現鳶尾花三種聚類算法(K-means,AGNES,DBScan)

系統 3422 0

一.分散性聚類(kmeans)

算法流程:

1.選擇聚類的個數k.

2.任意產生k個聚類,然后確定聚類中心,或者直接生成k個中心。

3.對每個點確定其聚類中心點。

4.再計算其聚類新中心。

5.重復以上步驟直到滿足收斂要求。(通常就是確定的中心點不再改變。

優點:

1.是解決聚類問題的一種經典算法,簡單、快速

2.對處理大數據集,該算法保持可伸縮性和高效率

3.當結果簇是密集的,它的效果較好

缺點

1.在簇的平均值可被定義的情況下才能使用,可能不適用于某些應用

2.必須事先給出k(要生成的簇的數目),而且對初值敏感,對于不同的初始值,可能會導致不同結果。

3.不適合于發現非凸形狀的簇或者大小差別很大的簇

4.對躁聲和孤立點數據敏感

這里為了看鳶尾花的三種聚類算法的直觀區別,所以不用具體算法實現,只需要調用相應函數即可。

程序如下:?

            
import matplotlib.pyplot as plt 
import numpy as np 
from sklearn.cluster import KMeans
from sklearn import datasets 
 
iris = datasets.load_iris() 
X = iris.data[:, :4] # #表示我們取特征空間中的4個維度
print(X.shape)
 
# 繪制數據分布圖
plt.scatter(X[:, 0], X[:, 1], c="red", marker='o', label='see') 
plt.xlabel('sepal length') 
plt.ylabel('sepal width') 
plt.legend(loc=2) 
plt.show() 
 
estimator = KMeans(n_clusters=3) # 構造聚類器
estimator.fit(X) # 聚類
label_pred = estimator.labels_ # 獲取聚類標簽
# 繪制k-means結果
x0 = X[label_pred == 0]
x1 = X[label_pred == 1]
x2 = X[label_pred == 2]
plt.scatter(x0[:, 0], x0[:, 1], c="red", marker='o', label='label0') 
plt.scatter(x1[:, 0], x1[:, 1], c="green", marker='*', label='label1') 
plt.scatter(x2[:, 0], x2[:, 1], c="blue", marker='+', label='label2') 
plt.xlabel('sepal length') 
plt.ylabel('sepal width') 
plt.legend(loc=2) 
plt.show() 
          

運行結果:

python實現鳶尾花三種聚類算法(K-means,AGNES,DBScan)_第1張圖片

?二.結構性聚類(層次聚類)

1.凝聚層次聚類:AGNES算法(自底向上)

首先將每個對象作為一個簇,然后合并這些原子簇為越來越大的簇,直到某個終結條件被滿足

2.分裂層次聚類:DIANA算法(自頂向下)

首先將所有對象置于一個簇中,然后逐漸細分為越來越小的簇,直到達到了某個終結條件。

這里我選擇的AGNES算法。

程序如下:

            
from sklearn import datasets
from sklearn.cluster import AgglomerativeClustering
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix
import pandas as pd
 
iris = datasets.load_iris()
irisdata = iris.data
 
clustering = AgglomerativeClustering(linkage='ward', n_clusters=3)
 
res = clustering.fit(irisdata)
 
print ("各個簇的樣本數目:")
print (pd.Series(clustering.labels_).value_counts())
print ("聚類結果:")
print (confusion_matrix(iris.target, clustering.labels_))
 
plt.figure()
d0 = irisdata[clustering.labels_ == 0]
plt.plot(d0[:, 0], d0[:, 1], 'r.')
d1 = irisdata[clustering.labels_ == 1]
plt.plot(d1[:, 0], d1[:, 1], 'go')
d2 = irisdata[clustering.labels_ == 2]
plt.plot(d2[:, 0], d2[:, 1], 'b*')
plt.xlabel("Sepal.Length")
plt.ylabel("Sepal.Width")
plt.title("AGNES Clustering")
plt.show()
          

運行結果:

python實現鳶尾花三種聚類算法(K-means,AGNES,DBScan)_第2張圖片

三.密度聚類之DBSCAN算法:

算法:

需要兩個參數:ε (eps) 和形成高密度區域所需要的最少點數 (minPts)

它由一個任意未被訪問的點開始,然后探索這個點的?ε-鄰域,如果?ε-鄰域里有足夠的點,則建立一個新的聚類,否則這個點被標簽為雜音。注意這個點之后可能被發現在其它點的?ε-鄰域里,而該?ε-鄰域可能有足夠的點,屆時這個點會被加入該聚類中。

程序如下:

            
import matplotlib.pyplot as plt 
import numpy as np 
from sklearn.cluster import KMeans
from sklearn import datasets 
from sklearn.cluster import DBSCAN
 
iris = datasets.load_iris() 
X = iris.data[:, :4] # #表示我們只取特征空間中的4個維度
print(X.shape)
# 繪制數據分布圖
plt.scatter(X[:, 0], X[:, 1], c="red", marker='o', label='see') 
plt.xlabel('sepal length') 
plt.ylabel('sepal width') 
plt.legend(loc=2) 
plt.show() 
 
dbscan = DBSCAN(eps=0.4, min_samples=9)
dbscan.fit(X) 
label_pred = dbscan.labels_
 
# 繪制k-means結果
x0 = X[label_pred == 0]
x1 = X[label_pred == 1]
x2 = X[label_pred == 2]
plt.scatter(x0[:, 0], x0[:, 1], c="red", marker='o', label='label0') 
plt.scatter(x1[:, 0], x1[:, 1], c="green", marker='*', label='label1') 
plt.scatter(x2[:, 0], x2[:, 1], c="blue", marker='+', label='label2') 
plt.xlabel('sepal length') 
plt.ylabel('sepal width') 
plt.legend(loc=2) 
plt.show() 
          

運行結果:

python實現鳶尾花三種聚類算法(K-means,AGNES,DBScan)_第3張圖片

改變參數后:

python實現鳶尾花三種聚類算法(K-means,AGNES,DBScan)_第4張圖片

四、結果分析

從上面三種實驗截圖可以看出,k-means聚類和AGNES層次聚類分析結果差不多的三類,與DBSCAN的結果不一樣。為啥不一樣,這就取決于算法本身的優缺點了。

k-means對于大型數據集也是簡單高效、時間復雜度、空間復雜度低。 最重要是數據集大時結果容易局部最優;需要預先設定K值,對最先的K個點選取很敏感;對噪聲和離群值非常敏感;只用于numerical類型數據;不能解決非凸數據。

?DBSCAN對噪聲不敏感;能發現任意形狀的聚類。 但是聚類的結果與參數有很大的關系;DBSCAN用固定參數識別聚類,但當聚類的稀疏程度不同時,相同的判定標準可能會破壞聚類的自然結構,即較稀的聚類會被劃分為多個類或密度較大且離得較近的類會被合并成一個聚類。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产视频99 | 夜夜操天天操 | 日韩av中文在线 | 丁香婷婷六月综合交清 | 99热这里有免费国内精品 | 免费国产黄频在线观看视频 | 欧美激情在线精品一区二区 | 日韩大片免费看 | 国产欧美日韩在线不卡第一页 | 日韩特级 | 国产精品久久久久久久 | 2022国产成人福利精品视频 | 久草在线视频精品 | 99久久精品国产导航 | 欧美日剧在线免费 | 免费看国产片在线观看 | 日韩99| 97青青青国产在线播放 | 亚洲精品99 | 九色在线| www欧美 | 日本一区二区在线视频 | 超碰导航 | 一区二区久久 | 一区二区三区视频免费观看 | 成人一级片 | 伊人影院综合 | 欧美日韩视频在线第一区二区三区 | 日本久久久久中文字幕 | 久久狠狠色狠狠色综合 | 亚洲一区二区三区在线视频 | 亚洲免费一区 | 免费免费视频片在线观看 | 日本中文字幕在线观看 | 在线欧美 | 亚洲在线一区二区 | av网站观看 | 国产在线视频一区二区 | 亚洲欧美日韩三级 | 国内精品伊人久久久影视 | 视频一区二区三区免费观看 |