ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

sklearn机器学习(五)

2021-12-27 20:31:29  阅读:281  来源: 互联网

标签:xj ... xi dist frac 学习 聚类 机器 sklearn


Task05
本次学习参照Datawhale开源学习:https://github.com/datawhalechina/machine-learning-toy-code/tree/main/ml-with-sklearn
内容安排如下,主要是一些代码实现和部分原理介绍。
在这里插入图片描述

5. k均值聚类

无监督学习训练样本的标签信息是未知的,目标是通过对无标签训练样本的学习来揭示数据的内在性质及规律,此类学习应用最广的是聚类。聚类试图将数据集中的样本划分为若干个通常不相交的子集,每个子集称为一个“簇”。

5.1. 性能度量

聚类的目的是把数据集中相似的样本聚成一个簇,将不相似的样本分为不同的簇。因此聚类时需要保证同一簇中的样本相似度要尽可能高,而簇与簇之间的样本相似度要尽可能的低。聚类性能度量大致有两类:

  • 外部指标:将聚类结果和某个“参考模型”进行比较。
  • 内部指标:直接考察聚类结果而不利用任何参考模型。

在这里插入图片描述
内部指标

  • Jaccard系数 J C = a a + b + c JC=\frac{a}{a+b+c} JC=a+b+ca​
  • FM指数 F M I = a a + b ⋅ a a + c FMI=\sqrt{\frac{a}{a+b}\cdot\frac{a}{a+c}} FMI=a+ba​⋅a+ca​
  • Rand指数 R I = 2 ( a + d ) m ( m − 1 ) RI=\frac{2(a+d)}{m(m-1)} RI=m(m−1)2(a+d)​

外部指标

  • DB指数 D B I = 1 k ∑ i = 1 k m a x j ≠ i ( a v g ( C i ) + a v g ( C j ) ) d c e n ( μ i , μ j ) ) DBI=\frac{1}{k}\sum_{i=1}^{k}\underset {j\not=i}{max}(\frac{avg(C_i)+avg(C_j))}{d_{cen}(\mu_i,\mu_j)}) DBI=k1​i=1∑k​j​=imax​(dcen​(μi​,μj​)avg(Ci​)+avg(Cj​))​)
  • Dunn指数 D I = m i n i ⩽ j ⩽ k ( m i n j ≠ i d m i n ( C i , C j ) m a x i ⩽ j ⩽ k d i a m ( C l ) ) DI=\underset {i\leqslant{j}\leqslant{k}}{min}(\underset {j\not=i}{min}\frac{d_{min}(C_i,C_j)}{\underset {i\leqslant{j}\leqslant{k}}{max}diam(C_l)}) DI=i⩽j⩽kmin​(j​=imin​i⩽j⩽kmax​diam(Cl​)dmin​(Ci​,Cj​)​)

5.2. 距离计算

对函数 d i s t ( ⋅ , ⋅ ) dist(\cdot,\cdot) dist(⋅,⋅),若它是一个“距离度量”,则需满足基本性质:
非 负 性 : d i s t ( x i , x j ) ⩾ 0 非负性:dist(x_i,x_j)\geqslant0 非负性:dist(xi​,xj​)⩾0 同 一 性 : d i s t ( x i , x j ) = 0 当 且 仅 当 x i = x j 同一性:dist(x_i,x_j)=0当且仅当x_i=x_j 同一性:dist(xi​,xj​)=0当且仅当xi​=xj​ 对 称 性 : d i s t ( x i , x j ) = d i s t ( x j , x i ) 对称性:dist(x_i,x_j)=dist(x_j,x_i) 对称性:dist(xi​,xj​)=dist(xj​,xi​) 直 递 性 : d i s t ( x i , x j ) ⩽ d i s t ( x i , x k ) + d i s t ( x k , x j ) 直递性:dist(x_i,x_j)\leqslant{dist(x_i,x_k)}+dist(x_k,x_j) 直递性:dist(xi​,xj​)⩽dist(xi​,xk​)+dist(xk​,xj​)给定样本 x i = ( x i 1 ; x i 2 ; . . . ; x i n ) x_i=(x_{i1};x_{i2};...;x_{in}) xi​=(xi1​;xi2​;...;xin​)与 x j = ( x j 1 ; x j 2 ; . . . ; x j n ) x_j=(x_{j1};x_{j2};...;x_{jn}) xj​=(xj1​;xj2​;...;xjn​),最常用的是“闵可夫斯基距离”: d i s t m k ( x i , x j ) = ( ∑ u = 1 n ∣ x i u − x j u ∣ p ) 1 p dist_{mk}(x_i,x_j)=(\sum_{u=1}^{n}|x_{iu}-x_{ju}|^p)^\frac{1}{p} distmk​(xi​,xj​)=(u=1∑n​∣xiu​−xju​∣p)p1​当 p = 1 p=1 p=1时就是曼哈顿距离,当 p = 2 p=2 p=2时就是欧氏距离,当 p p p趋近于无穷大时就是切比雪夫距离。
请添加图片描述

(绿色路径为两点间欧氏距离,红色黄色路径为两点间曼哈顿距离)

在这里插入图片描述

(当p为其它值时)

5.3. k均值聚类

给定样本集 D = { x 1 , x 2 , . . . , x m } D=\left\{\begin{matrix}x_1,x_2,...,x_m \end{matrix}\right\} D={x1​,x2​,...,xm​​},“k均值”算法针对聚类所得簇划分 C = { C 1 , C 2 , . . . , C k } C=\left\{\begin{matrix}C_1,C_2,...,C_k \end{matrix}\right\} C={C1​,C2​,...,Ck​​}最小化平方误差: E = ∑ i = 1 k ∑ x ∈ C i ∣ ∣ x − μ i ∣ ∣ 2 2 E=\sum_{i=1}^{k}\sum_{x\in{C_i}}^{}||x-\mu_i||_2^2 E=i=1∑k​x∈Ci​∑​∣∣x−μi​∣∣22​其中均值向量: μ i = 1 C i ∑ x ∈ C i x \mu_i=\frac{1}{C_i}\sum_{x\in{C_i}}x μi​=Ci​1​x∈Ci​∑​xE值越小则簇内样本相似度越高。如何找到最优解:
在这里插入图片描述
动态图演示过程:
请添加图片描述

5.4. sklearn k均值聚类

'''生成数据'''
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
X, y = make_blobs(n_samples=1000, # 1000个样本
                 n_features=2, # 每个样本2个特征(2维数据)
                 centers=5, # 5个簇中心
                 random_state=42)
fig, ax=plt.subplots(1)
for i in range(5):
    ax.scatter(X[y==i, 0], X[y==i,1],marker='o',s=8,)
plt.show()

在这里插入图片描述

'''聚类'''
from sklearn.cluster import KMeans
cluster = KMeans(n_clusters=5,random_state=0).fit(X)
y_pred = cluster.fit_predict(X)

centroid=cluster.cluster_centers_ # 聚类质心
inertia=cluster.inertia_
'''画出聚类质心'''
fig, ax=plt.subplots(1)
for i in range(n_clusters):
    ax.scatter(X[y_pred==i, 0], X[y_pred==i, 1],
               marker='o',
               s=8)
ax.scatter(centroid[:,0],centroid[:,1],marker='x',s=100,c='black')

在这里插入图片描述

5.5. 参数说明

class sklearn.cluster.KMeans(n_clusters=8, *, init='k-means++', n_init=10, max_iter=300, tol=0.0001, verbose=0, random_state=None, copy_x=True, algorithm='auto')

n_clusters:int,default=8。质心(centroids)数。
init:三个可选值:“k-means++”, “random”,或者一个ndarray向量。默认值为 ‘k-means++’。

  1. “k-means++” 用k-means++方法选定初始质心从而能加速迭代过程的收敛。
  2. "random"随机从训练数据中选取初始质心。
  3. 如果传递的是一个ndarray,则应该形如 (n_clusters, n_features) 并给出初始质心。

n_init:int,default=10。用不同的质心初始化值运行算法的次数,最终解是在inertia意义下选出的最优结果。
max_iter:int,default=300。最大迭代次数。
tol:float,default= 1e-4。容许误差,确定收敛条件。
verbose:int,default=0。结果的信息复杂度
random_state:int,default=None。numpy的随机数生成器。
copy_x:bool,default=True。当我们precomputing distances时,将数据中心化会得到更准确的结果。如果把此参数值设为True,则原始数据不会被改变。如果是False,则会直接在原始数据上做修改并在函数返回值时将其还原。
algorithm:三个值可选:“auto”, “full”, “elkan”, default=”auto”。

标签:xj,...,xi,dist,frac,学习,聚类,机器,sklearn
来源: https://blog.csdn.net/weixin_45397053/article/details/122133711

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有