scikit-learn(sklearn)学习笔记七聚类算法

1.聚类
聚类算法是监督学习中的一个典型的代表
典型的聚类算法有:K-Means、DBSCAN、层次聚类、光谱聚类。
聚类算法的目的就是让组内差距小 组间差距大,这个目的是样本点到质心的距离来衡量的。距离的衡量方法如下:
欧式距离:欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式。
d ( x , y ) = Σ k = 1 n ( x k − y k ) 2 d(x,y)=\sqrt{\Sigma_{k=1}^n (x_k-y_k)^2} d(x,y)=Σk=1n(xkyk)2
曼哈顿距离:
曼哈顿距离也称为街区距离,计算公式如下:
d ( x , y ) = Σ k = 1 n ∣ x k − y k ∣ d(x,y)=\Sigma_{k=1}^n \left|x_k-y_k\right| d(x,y)=Σk=1nxkyk
切比雪夫距离: d ( x , y ) = lim ⁡ n → ∞ ( Σ k = 1 n ( ∣ x k − y k ∣ ) r ) 1 r = m a x k ( ∣ x k − y k ∣ ) d(x,y) = \lim_{n\rightarrow \infty} (\Sigma_{k=1}^n (\left|x_k-y_k\right|)^r)^\dfrac{1}{r} = max_k (\left|x_k-y_k\right|) d(x,y)=nlim(Σk=1n(xkyk)r)r1=maxk(xkyk)
闵可夫斯基距离:
d ( x , y ) = ( Σ k = 1 n ( ∣ x k − y k ∣ ) r ) 1 r d(x,y)=(\Sigma_{k=1}^n (\left|x_k-y_k\right|)^r)^\dfrac{1}{r} d(x,y)=(Σk=1n(xkyk)r)r1
式中,r是一个可变参数,根据参数r取值的不同,闵可夫斯基距离可以表示一类距离
  r = 1时,为曼哈顿距离
  r = 2时,为欧式距离
  r →∞时,为切比雪夫距离
闵可夫斯基距离包括欧式距离、曼哈顿距离、切比雪夫距离都假设数据各维属性的量纲和分布(期望、方差)相同,因此适用于度量独立同分布的数据对象。
余弦距离:
  余弦相似度公式定义如下:
cos(x,y)=xy|x|||y||=Σnk=1xkykΣnk=1x2k⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯√Σnk=1y2k⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯√

余弦相似度实际上是向量xx和yy夹角的余弦度量,可用来衡量两个向量方向的差异。如果余弦相似度为11,则xx和yy之间夹角为0°0°,两向量除模外可认为是相同的;如果预先相似度为00,则xx和yy之间夹角为90°90°,则认为两向量完全不同。在计算余弦距离时,将向量均规范化成具有长度11,因此不用考虑两个数据对象的量值。 余弦相似度常用来度量文本之间的相似性。文档可以用向量表示,向量的每个属性代表一个特定的词或术语在文档中出现的频率,尽管文档具有大量的属性,但每个文档向量都是稀疏的,具有相对较少的非零属性值。
马氏距离:
mahalanobis(x,y)=(x−y)Σ−1(x−y)T

式中,Σ−1Σ−1是数据协方差矩阵的逆。 前面的距离度量方法大都假设样本独立同分布、数据属性之间不相关。马氏距离考虑了数据属性之间的相关性,排除了属性间相关性的干扰,而且与量纲无关。若协方差矩阵是对角阵,则马氏距离变成了标准欧式距离;若协方差矩阵是单位矩阵,各个样本向量之间独立同分布,则变成欧式距离。

2.sklearn.cluster.KMaens
重要参数n_clusters,要分为几类,举例说明

from sklearn.datasets import make_blobs
#自己创建数据集 

X,y=make_blobs(n_samples=500,n_features=2,centers=4,random_state=1)

fig,ax1=plt.subplots(1)
ax1.scatter(X[:,0],X[:,1],marker='o',s=8)
plt.show()

在这里插入图片描述

from sklearn.cluster import KMeans
n_clusters=3
cluster=KMeans(n_clusters=n_clusters,random_state=0).fit(X)
y_pred=cluster.labels_
y_pred
[2 2 0 1 0 1 0 0 0 0 2 2 0 1 0 2 0 2 1 0 0 0 0 1 0 0 1 1 0 0 2 1 0 2 0 2 0
 0 2 0 0 0 1 0 0 2 0 0 1 1 1 0 0 0 2 0 0 0 0 0 1 1 0 0 1 0 2 0 0 0 2 0 0 2
 0 0 2 0 0 0 1 1 0 1 1 0 0 1 0 0 1 2 0 0 1 2 2 0 2 1 1 2 1 0 1 0 0 1 1 0 0
 2 1 0 1 0 1 0 1 0 0 2 2 0 0 0 1 2 2 0 1 0 0 0 0 2 1 0 1 1 0 2 0 1 1 1 0 0
 2 2 0 0 1 2 1 0 0 0 0 0 0 0 0 0 1 2 2 2 0 1 2 0 0 2 1 0 0 0 0 2 0 0 1 2 2
 0 0 2 2 0 1 1 2 2 0 1 0 2 2 1 2 0 1 0 0 2 0 0 2 0 0 0 0 2 0 0 0 1 0 1 0 2
 0 0 0 0 0 1 0 1 2 0 2 0 1 1 0 2 1 2 0 0 2 2 2 2 0 0 2 0 0 1 1 0 0 1 0 0 0
 1 0 1 0 0 1 0 2 2 0 0 0 0 1 1 0 1 0 2 1 2 1 2 2 1 2 1 1 0 0 0 0 0 0 0 2 1
 2 2 2 0 0 0 2 0 2 2 0 2 2 0 1 2 0 0 1 1 0 2 1 1 0 2 1 1 0 0 1 0 0 2 2 1 0
 2 0 1 1 0 0 0 2 0 1 1 0 1 1 1 1 2 2 0 1 0 0 2 1 0 1 0 1 0 0 0 1 0 0 2 1 2
 2 2 2 2 2 0 2 1 2 1 1 0 1 0 0 0 2 1 0 1 0 2 0 0 2 0 0 1 1 2 0 0 1 0 0 2 2
 0 2 0 0 2 0 2 0 1 2 1 0 0 1 0 0 1 2 0 1 1 0 0 0 0 2 1 2 0 1 2 2 2 0 1 0 2
 0 0 0 0 2 0 0 0 0 0 0 2 0 0 2 0 1 0 1 0 0 0 1 1 1 0 0 0 2 0 1 0 2 1 2 1 2
 0 1 1 2 0 0 2 0 0 0 2 0 1 0 0 2 2 2 0]

centroid=cluster.cluster_centers_
centroid#质心
[[-8.0807047  -3.50729701]
 [-1.54234022  4.43517599]
 [-7.11207261 -8.09458846]]

如果我们想要画图

color=["red","pink","orange","gray"]
fig,ax1=plt.subplots(1)
for i in range(n_clusters):
	ax1.scatter(X[y_pred==i,0],X[y_pred==i,1],marker='o',s=8,c=color[i])
plt.show()

在这里插入图片描述
3.聚类算法的模型评估问题
我们可以通过衡量簇内外的差异来衡量模型的评估问题,但是点到质心的和不是一个好的指标。
于是引入轮廓系数
在这里插入图片描述
s(i)接近1,则说明样本i聚类合理,s(i)接近-1,则说明样本i更应该分类到另外的簇,若s(i) 近似为0,则说明样本i在两个簇的边界上。

from sklearn.metrics import silhouette_score
from sklearn.metrics import silhouette_samples

silhouette_score(X,y_pred)
0.5882004012129721

silhouette_samples(X,y_pred)
[ 0.62982017  0.5034877   0.56148795  0.84881844  0.56034142  0.78740319
 0.39254042  0.4424015   0.48582704  0.41586457  0.62497924  0.75540751
 0.50080674  0.8452256   0.54730432  0.60232423  0.54574988  0.68789747
 0.86605921  0.25389678  0.49316173  0.47993065  0.2222642   0.8096265
 0.54091189  0.30638567  0.88557311  0.84050532  0.52855895  0.49260117
 0.65291019  0.85602282  0.47734375  0.60418857  0.44210292  0.6835351
 0.44776257  0.423086    0.6350923   0.4060121   0.54540657  0.5628461
 0.78366733  0.37063114  0.35132112  0.74493029  0.53691616  0.36724842
 0.87717083  0.79594363  0.84641859  0.38341344  0.42043012  0.4024608
 0.64639537  0.46244151  0.31853572  0.10047008  0.37909034  0.56424494
 0.86153448  0.82630007  0.53288582  0.35699772  0.86994617  0.52259763
 0.71296285  0.5269434   0.42375504  0.3173951   0.67512993  0.47574584
 0.44493897  0.70152025  0.37911024  0.44338293  0.75528756  0.23339973
 0.48832955  0.36920643  0.84872127  0.87346766  0.53069113  0.85553096
 0.85764386  0.47306874  0.02036611  0.83126042  0.38759022  0.49233068
 0.74566044  0.60466216  0.56741342  0.43416703  0.83602352  0.72477786
 0.65632253  0.53058775  0.60023269  0.77641023  0.84703763  0.70993659
 0.7801523   0.46161604  0.84373446  0.39295281  0.46052385  0.88273449
 0.87440032  0.48304623  0.53380475  0.75891465  0.85876382  0.38558097
 0.85795763  0.39785899  0.85219954  0.53642823  0.86038619  0.43699704
 0.38829633  0.54291415  0.69030671  0.43887074  0.51384962  0.51912781
 0.83667847  0.76248539  0.69612144  0.51530997  0.86167552  0.55346107
 0.56205672  0.49273512  0.38805592  0.57038854  0.68677314  0.20332654
 0.75659329  0.82280178  0.51078711  0.56655943  0.39855324  0.87777997
 0.81846156  0.85011915  0.53745726  0.48476499  0.57083761  0.62520973
 0.48791422  0.57163867  0.80710385  0.75753237  0.80107683  0.50370862
 0.49411065  0.56270422  0.46054445  0.46870708  0.53443711  0.52806612
 0.54696216  0.38036632  0.8439417   0.43517732  0.74914748  0.64728736
 0.41663216  0.8823285   0.65599758  0.56449485  0.51988053  0.62928512
 0.88015404  0.56872777  0.39189978  0.49345531  0.46686063  0.59723997
 0.44721036  0.30721342  0.75113026  0.50932716  0.73578982 -0.11420488
 0.41858652  0.75882296  0.7275962  -0.04073665  0.80153593  0.87004395
 0.68206941  0.43331808  0.46482802  0.84659276  0.50866477  0.68601103
 0.74449975  0.83022338  0.73707965  0.27681202  0.66098479  0.28977719
 0.51863521  0.63445046  0.40559979  0.14818081  0.76068525  0.23252498
 0.53021521  0.47737535  0.20930573  0.73655361  0.40050939  0.38201296
 0.53131423  0.8300432   0.57416668  0.83002234  0.43809863  0.72601129
 0.30355831  0.36933954  0.48245049  0.50126688  0.50360422  0.87011861
 0.56950365  0.83076761  0.71764725  0.53645163  0.7001754   0.50522187
 0.87888555  0.77936165  0.10535855  0.73083257  0.87808798  0.66433392
 0.46478475  0.37703473  0.73374533  0.74890043  0.73918627  0.63932594
 0.09590229  0.56398421  0.65471361  0.32850826  0.50686886  0.82252268
 0.8784639   0.50307722  0.55480534  0.87909816  0.47641098  0.31311959
 0.52686075  0.88545307  0.20448704  0.80778118  0.44642434  0.40574811
 0.88056023  0.4973487   0.69311101  0.72625355  0.48589387  0.4978385
 0.55313636  0.50253656  0.87260952  0.86131163  0.40383223  0.86877735
 0.47545049  0.55504965  0.88434796  0.70495153  0.88081422  0.73413228
 0.74319485  0.86247661  0.68152552  0.87029291  0.81761732  0.55085702
 0.49102505  0.55389601  0.124766    0.4404892   0.53977082  0.57674226
 0.52475521  0.71693971  0.59037229  0.27134864  0.55075649  0.5305809
 0.45997724  0.52098416  0.69242901  0.42370109  0.55411474  0.56138849
 0.53447704  0.69329183  0.54368936  0.32886853  0.86126399  0.71469113
 0.49146367  0.50494774  0.82158862  0.86861319  0.54403438  0.73940315
 0.81462808  0.84352203  0.48207009  0.7354327   0.78085872  0.87875202
 0.04033208  0.50804578  0.80938918  0.51061604  0.38053425  0.64455589
 0.67957545  0.87709406  0.54770971  0.49617626  0.06631062  0.82052164
 0.85247897  0.4986702   0.41583248  0.53794955  0.73049329  0.28601778
 0.87874615  0.86432778  0.53085921  0.81504707  0.80902757  0.73654387
 0.79629133  0.69825831  0.71042076  0.37753505  0.87392688  0.36052199
 0.53293388  0.65652301  0.8590337   0.37778142  0.88171647  0.55744616
 0.72988524  0.47205379  0.25321102  0.36665898  0.87510459  0.54567292
 0.4377203   0.69836179  0.88279947  0.73712769  0.7571288   0.64200399
 0.71414246  0.66105524  0.64924985 -0.03393189  0.67879166  0.87717775
 0.70483203  0.81570721  0.88445546  0.42536337  0.84352976  0.19940384
 0.33446675 -0.05200008  0.63729057  0.86077417  0.29232998  0.85936207
 0.01230106  0.74072871  0.54572786  0.4226642   0.75803727  0.41490286
 0.47701084  0.81796862  0.80656788  0.63246787  0.43149716  0.47554846
 0.67481449  0.29491288  0.47884262  0.73531065  0.74909774  0.53905722
 0.60853703  0.41799506  0.26889856  0.65941878  0.57469934  0.74695893
 0.53566443  0.87031783  0.55546256  0.74959292  0.52013136  0.48602131
 0.84252024  0.5553399   0.32396765  0.83121787  0.6507822   0.40589711
 0.81861161  0.85537229  0.51500612  0.46370284  0.35233694  0.41423309
 0.66647621  0.87838551  0.55564776  0.52172866  0.80216634  0.74626963
 0.70305507  0.727976    0.4315848   0.71546113 -0.14042082  0.70475791
 0.54510442  0.49963818  0.50497552  0.5260391   0.7371355   0.39249758
 0.47181954  0.51361169  0.4902578   0.42402416  0.54710266  0.42517899
 0.54612333  0.40920498  0.73864644  0.5056526   0.87463183  0.41531738
 0.88324604  0.4574416   0.50326717  0.56519891  0.86397315  0.84031419
 0.81795975  0.55956891  0.43032946  0.28423933  0.75002919  0.53694244
 0.86418082  0.50509088  0.75702551  0.85123063  0.47073065  0.85904201
 0.69214588  0.32746785  0.87507056  0.77556871  0.47820639  0.37692453
 0.23345891  0.46482472  0.36325517  0.17966353  0.31925836  0.67652463
 0.35889712  0.87965911  0.3907438   0.5748237   0.74655924  0.57403918
 0.69733646  0.52992071]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值