優點
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 公尺。優點 採用鋼筋砼建造的梁橋能就地取材 工業化施工 耐久性好 適應性強 整體性好且 美觀 這種橋型在設計理論及施工...