KMEANS的優缺點 密度等的指令碼

2021-08-25 02:28:58 字數 4425 閱讀 5957

優點

k-平均演算法是解決聚類問題的一種經典演算法,演算法簡單、快速。

對處理大資料集,該演算法是相對可伸縮的和高效率的,因為它的複雜度大約是o(nkt),其中n是所有物件的數目,k是簇的數目,t是迭代的次數。通常k《演算法嘗試找出使平方誤差函式值最小的k個劃分。當簇是密集的、球狀或團狀的,而簇與簇之間區別明顯時,它的聚類效果很好。

缺點

k 是事先給定的,這個 k 值的選定是非常難以估計的;

對初值敏感,對於不同的初始值,可能會導致不同的聚類結果。一旦初始值選擇的不好,可能無法得到有效的聚類結果;

該演算法需要不斷地進行樣本分類調整,不斷地計算調整後的新的聚類中心,因此當資料量非常大時,演算法的時間開銷是非常大的。

不適合於發現非凸面形狀的簇,或者大小差別很大的簇;

對於」雜訊」和孤立點資料敏感,少量的該類資料能夠對平均值產生極大影響。

# -*- coding:utf8 -*-

importnumpyasnp

importpylabaspl

importpandasaspd

importpymysql

importscipy

fromsklearn.model_selectionimporttrain_test_split#

以前的cross validation

已停用fromsklearn.ensembleimportrandomforestclassifier

fromsklearnimporttree#

簡單決策樹

fromsklearn.treeimportdecisiontreeclassifier

fromsklearn.clusterimportkmeans

fromsklearn.clusterimportdbscan

fromsklearn.externalsimportjoblib

dbconn = pymysql.connect(

host="127.0.0.1",

database="test",

user="root",

password="111111",

port=3306,

charset='utf8')

sqlcmd ="select * from forkmeans"

data = pd.dataframe(pd.read_sql(sqlcmd, dbconn))

#print data.shape

x = data.iloc[:,1:5]#前27

個字段是特徵字段

clf = kmeans(n_clusters=8,init='k-means++',max_iter=300,tol=0.0001,algorithm='full',random_state=1,verbose=0)

#algorithm

可以選ems

演算法,就是

full

演算法,還可以

auto

,還可以

elkan

三角變化

clf = clf.fit(x)

printclf.labels_#

給出類[0 0 0 ... 0 0 0]

r1 = pd.series(clf.labels_).value_counts()#

各個類的樣本數目

r2 = pd.dataframe(clf.cluster_centers_)#

聚類中心點的向量

r = pd.concat([r2,r1],axis=1)#

橫向連線起來

printr

0             1             2          3     0

0  1.140934     58.339642     18.140445   3.115462  2988

1  0.310000    999.000000  60493.550000   1.620000     1

2  0.645000    999.000000  22994.925000  36.545000     2

3  1.109350    984.150956     43.940707   9.491262   523

4  1.310000  11088.000000     11.620000   3.130000     1

5  1.150000    999.000000  13043.750000  10.160000     1

6  1.156250    783.610000   2241.325000   8.651250     8

7  0.897273   2698.112727     37.353636  16.827273    11

e = pd.concat([data,pd.series(clf.labels_,

index

= data.index)],

axis=1

)#每個樣本對應的類別

e.columns =

list

(data.columns)+[u'聚類類別']

#重新命名表頭

printe.head(3)

et = e.loc[(e[u'聚類類別'] ==

3) , [u'貝塔係數',u'市盈()',u'市銷率',u'市淨率',u'資產負債率']]

printet.head(3)

#概率密度圖

defdensity_plot(data):

#自定義作圖函式

importmatplotlib.pyplotasplt

plt.rcparams['font.sans-serif'] = ['simhei']

#用來正常顯示中文標籤

plt.rcparams['axes.unicode_minus'] =

false

#用來正常顯示負號

p = data.plot(

kind

='kde',

linewidth = 2

, subplots

= true

, sharex

= false

)[p[i].set_ylabel(u'密度')foriinrange

(k)]

plt.legend()

returnplt.show()

density_plot(et)

#按條件提取,來繪製密度圖

K means演算法的原理 優缺點

k means方法是一種非監督學習的演算法,它解決的是聚類問題1 演算法簡介 k means方法是聚類中的經典演算法,資料探勘十大經典演算法之一 演算法接受引數k,然後將事先輸入的n個資料物件劃分為k個聚類以便使得所獲得的聚類滿足聚類中的物件相似度較高,而不同聚類中的物件相似度較小。2 演算法思想 ...

k means聚類,密度聚類,層次聚類優缺點

k means 優點 1,簡單,易於理解和實現 2,時間複雜度低 缺點 1,需要對均值給出定義,2,需要指定要聚類的數目 3,一些過大的異常值會帶來很大影響 4,演算法對初始選值敏感 5,適合球形聚類 層次聚類 優點 1,距離和規則的相似度容易定義,限制少 2,不需要預先制定聚類數 3,可以發現類的...

剛構橋的優缺點 橋梁的優缺點

梁式橋 主梁為主要承重構件,受力特點為主梁受彎。主要材料為鋼筋混凝土 預應力混凝土,多用於中小跨徑橋梁。簡支梁橋合理最大跨徑約 公尺,懸臂梁橋與連續梁橋合宜的最大跨徑約 60 70 公尺。優點 採用鋼筋砼建造的梁橋能就地取材 工業化施工 耐久性好 適應性強 整體性好且 美觀 這種橋型在設計理論及施工...