栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【聚类2】原型聚类

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【聚类2】原型聚类

文章目录
  • 1. 原型聚类
    • 1.1 k均值算法(K-Means)
      • 1.1.1 最小化平方误差
      • 1.1.2 k均值算法伪代码
    • 1.2 学习向量量化
      • 1.2.2 学习向量量化算法伪代码
      • 1.2.4 如何更新原型向量(原型向量更新原则)
    • 1.3 高斯混合聚类
      • 1.3.2 高斯分布
      • 1.3.3 贝叶斯公式
      • 1.3.4 概率密度函数(多元高斯分布的一般形式)
      • 1.3.5 高斯混合分布(全概率公式)
      • 1.3.7 极大释然估计
      • 1.3.8 高斯混合分布公式,模型参数 { ( α i , μ i , Σ i ) ∣ 1 ≤ i ≤ k } {(alpha_i,mu_i,Σ_i)|1leq ileq k} {(αi​,μi​,Σi​)∣1≤i≤k}的求解
      • 1.3.9 高斯混合聚类算法伪代码

1. 原型聚类

概念

- "原型:"
		"原型"是指样本空间中具有代表性的点。

- "别名:"
		1)基于原型的聚类
		2)英文:prototype-based clustering

- "此类算法的原理:"
		算法先对原型进行初始化,然后对原型进行迭代更新求解

- "常见的原型聚类算法:"
		1. k均值算法(k-means)
		2. 学习向量量化(LVQ)
		3. 高斯混合聚类

算法讲解

1.1 k均值算法(K-Means) 1.1.1 最小化平方误差

概 念 : 概念: 概念:
           {}            刻 画 了 簇 内 样 本 围 绕 簇 均 值 向 量 的 紧 密 程 度 , 值 越 小 则 簇 内 样 本 相 似 度 越 高 刻画了簇内样本围绕簇均值向量的紧密程度,值越小则簇内样本相似度越高 刻画了簇内样本围绕簇均值向量的紧密程度,值越小则簇内样本相似度越高

前 提 : 前提: 前提:
           {}            样 本 集 D = { x 1 , x 2 , . . . , x m } 样本集D={x_1,x_2,...,x_m} 样本集D={x1​,x2​,...,xm​}

           {}            簇 划 分 C = { C 1 , C 2 , . . . , C k } 簇划分C={C_1,C_2,...,C_k} 簇划分C={C1​,C2​,...,Ck​}

           {}            簇 C i 的 均 值 向 量 : u i = 1 ∣ C i ∣ ∑ x ∈ C i x 簇C_i的均值向量:u_i=frac{1}{|C_i|}sum_{xin C_i}x 簇Ci​的均值向量:ui​=∣Ci​∣1​∑x∈Ci​​x

公 式 : 公式: 公式:
           {}            E = ∑ i = 1 k ∑ x ∈ C i ∣ ∣ x − u i ∣ ∣ 2 2 E=sum_{i=1}^ksum_{xin C_i}||x-u_i||_2^2 E=∑i=1k​∑x∈Ci​​∣∣x−ui​∣∣22​

最 优 解 : 最优解: 最优解:
           {}            最 小 化 E 不 好 求 : 最 优 解 需 考 察 样 本 集 所 有 可 能 的 簇 划 分 ( N P 问 题 ) 最小化E不好求:最优解需考察样本集 所有可能的簇划分(NP问题) 最小化E不好求:最优解需考察样本集所有可能的簇划分(NP问题)
           {}            N P 问 题 : 找 一 个 解 很 困 难 , 但 验 证 一 个 解 很 容 易 ( 片 面 理 解 哈 ) NP问题:找一个解很困难,但验证一个解很容易(片面理解哈) NP问题:找一个解很困难,但验证一个解很容易(片面理解哈)

迭 代 法 : 迭代法: 迭代法:
           {}            k 均 值 算 法 采 用 了 贪 心 策 略 , 通 过 “ 迭 代 优 化 ” 来 近 似 求 解 k均值算法采用了贪心策 略,通过“迭代优化”来近似求解 k均值算法采用了贪心策略,通过“迭代优化”来近似求解

1.1.2 k均值算法伪代码

输 入 : 输入: 输入:
           {}            样 本 集 D = x 1 , x 2 , . . . , x m 样本集D = {x_1,x_2,...,x_m} 样本集D=x1​,x2​,...,xm​
           {}            聚 类 簇 数 k 聚类簇数k 聚类簇数k

过 程 : 过程: 过程:
           {}            从 D 中 随 机 选 择 k 个 样 本 作 为 初 始 均 值 变 量 u 1 , u 2 , . . . , u k 从D中随机选择k个样本作为初始均值变量{u_1,u_2,...,u_k} 从D中随机选择k个样本作为初始均值变量u1​,u2​,...,uk​

           {}            r e p e a t repeat repeat
           {}                       {}            令 C i = ∅ ( 1 ≤ i ≤ k ) 令Ci = emptyset (1leq ile k) 令Ci=∅(1≤i≤k)

           {}                       {}            f o r   j = 1 , 2 , . . . , m   d o for j = 1,2,...,m do for j=1,2,...,m do
           {}                       {}                       {}            计 算 样 本 x j 与 各 均 值 向 量 u i ( 1 ≤ i ≤ k ) 的 距 离 : d j i = ∣ ∣ x j − u i ∣ ∣ 2 ; 计算样本x_j与各均值向量u_i(1leq ile k)的距离:d_{ji}=||x_j-u_i||_2; 计算样本xj​与各均值向量ui​(1≤i≤k)的距离:dji​=∣∣xj​−ui​∣∣2​;
           {}                       {}                       {}            根 据 距 离 最 近 的 均 值 向 量 确 定 x j 的 簇 标 记 : λ j = m i n i ∈ { 1 , 2 , . . . , k } d j i 根据距离最近的均值向量确定x_j的簇标记:lambda_j=min_{iin{1,2,...,k}}d_{ji} 根据距离最近的均值向量确定xj​的簇标记:λj​=mini∈{1,2,...,k}​dji​
           {}                       {}                       {}            将 样 本 x j 划 入 相 应 的 簇 : C λ j = C λ j ⋃ { x j } 将样本x_j划入相应的簇:C_{lambda_j}=C_{lambda_j}bigcup{x_j} 将样本xj​划入相应的簇:Cλj​​=Cλj​​⋃{xj​}
           {}                       {}            e n d   f o r end for end for

           {}                       {}            f o r   i = 1 , 2 , . . . , k   d o for i=1,2,...,k do for i=1,2,...,k do
           {}                       {}                       {}            计 算 新 均 值 向 量 : u i ′ = 1 ∣ C i ∣ ∑ x i ∈ C i x 计算新均值向量:u'_i=frac{1}{|C_i|}sum_{x_iin C_i}x 计算新均值向量:ui′​=∣Ci​∣1​∑xi​∈Ci​​x
           {}                       {}                       {}            i f   u i ′ ≠ u i   t h e n if u'_ineq u_i then if ui′​​=ui​ then
           {}                       {}                       {}                       {}            将 当 前 均 值 向 量 u i 更 新 为 u i ′ 将当前均值向量u_i更新为u'_i 将当前均值向量ui​更新为ui′​
           {}                       {}                       {}            e l s e else else
           {}                       {}                       {}                       {}            保 持 当 前 均 值 向 量 不 变 保持当前均值向量不变 保持当前均值向量不变
           {}                       {}                       {}            e n d   i f end if end if
           {}                       {}            e n d   f o r end for end for

           {}           until
           {}                       {}           当前均值向量均未更新

输 出 : 输出: 输出:
           {}           簇划分C = {C1,C2,…,Ck}


  • 1.1.3 k均值算法注意
- "最大运行轮数" + "最小调整幅度"
		1)为避免运行时间过长,通常设置一个"最大运行轮数"
		或"最小调整幅度",
		2)若达到最大轮数或调整幅度小于阂值,则停止运行.
  • 1.1.4 k-means聚类的缺点
- "2维k-means模型:"
		1)以每个簇的中心为圆心,簇中点到簇中心点的欧氏距离最大值为半径画一个圆。
		2)k-means要求这些簇的形状必须是圆形的。
		3)k-means模型拟合出来的簇(圆形)与实际数据分布(可能是椭圆)差别很大。
		4)应用中缺少鲁棒性(在异常和危险情况下系统生存的能力)。
  • 1.1.5 k均值算法例子

【D】

【k = 3】

【步骤】

第 一 步 : 随 机 选 择 第一步:随机选择 第一步:随机选择
            算 法 开 始 时 随 机 选 取 三 个 样 本 x 6 , x 12 , x 27 算法开始时随机选取三个样本x_6,x_{12},x_{27}            算法开始时随机选取三个样本x6​,x12​,x27​
            即 , u 1 = ( 0.403 ; 0.237 ) , u 2 = ( 0.343 ; 0.099 ) , u 3 = ( 0.532 ; 0.472 ) 即,u_1=(0.403;0.237),u_2=(0.343;0.099),u_3=(0.532;0.472)            即,u1​=(0.403;0.237),u2​=(0.343;0.099),u3​=(0.532;0.472)

第 二 步 : 考 察 样 本 第二步:考察样本 第二步:考察样本
            例 : x 1 = ( 0.697 ; 0.460 ) 例:x_1=(0.697;0.460)            例:x1​=(0.697;0.460)
            一 般 用 欧 式 距 离 一般用欧式距离            一般用欧式距离
            d 1 = ∑ i = 1 2 ∣ ∣ x 1 i − u 1 i ∣ ∣ 2 d_1=sum_{i=1}^2||x_{1i}-u_{1i}||_2            d1​=∑i=12​∣∣x1i​−u1i​∣∣2​
            d 1 = ( 0.697 − 0.403 ) 2 + ( 0.460 − 0.237 ) 2 = 0.369 d_1=sqrt{(0.697-0.403)^2+(0.460-0.237)^2}=0.369            d1​=(0.697−0.403)2+(0.460−0.237)2 ​=0.369
            d 2 = ( 0.697 − 0.343 ) 2 + ( 0.460 − 0.099 ) 2 = 0.506 d_2=sqrt{(0.697-0.343)^2+(0.460-0.099)^2}=0.506            d2​=(0.697−0.343)2+(0.460−0.099)2 ​=0.506
            d 3 = ( 0.697 − 0.532 ) 2 + ( 0.460 − 0.472 ) 2 = 0.166 d_3=sqrt{(0.697-0.532)^2+(0.460-0.472)^2}=0.166            d3​=(0.697−0.532)2+(0.460−0.472)2 ​=0.166
            因 此 x 1 将 划 入 簇 C 3 中 因此x_1将划入簇C_3中            因此x1​将划入簇C3​中

第 三 步 : 划 分 样 本 第三步:划分样本 第三步:划分样本
            C 1 = { x 5 , x 6 , x 7 , x 8 , x 9 , x 10 , x 13 , x 14 , x 15 , x 17 , x 18 , x 19 , x 20 , x 23 } C_1={x_5,x_6,x_7,x_8,x_9,x_{10},x_{13},x_{14},x_{15},x_{17},x_{18},x_{19},x_{20},x_{23}}            C1​={x5​,x6​,x7​,x8​,x9​,x10​,x13​,x14​,x15​,x17​,x18​,x19​,x20​,x23​}
            C 2 = { x 11 , x 12 , x 16 } C_2={x_{11},x_{12},x_{16}}            C2​={x11​,x12​,x16​}
            C 3 = { x 1 , x 2 , x 3 , x 4 , x 21 , x 22 , x 24 , x 25 , x 26 , x 27 , x 28 , x 29 , x 30 } C_3={x_1,x_2,x_3,x_4,x_{21},x_{22},x_{24},x_{25},x_{26},x_{27},x_{28},x_{29},x_{30}}            C3​={x1​,x2​,x3​,x4​,x21​,x22​,x24​,x25​,x26​,x27​,x28​,x29​,x30​}

第 四 步 : 更 新 均 值 向 量 第四步:更新均值向量 第四步:更新均值向量
            公 式 : u i ′ = 1 ∣ C i ∣ ∑ x ∈ C i x 公式:u'_i=frac{1}{|C_i|}sum_{xin C_i}x            公式:ui′​=∣Ci​∣1​∑x∈Ci​​x
            u 1 ′ = 1 14 ∑ x ∈ C 1 x u'_1=frac{1}{14}sum_{xin C_1}x            u1′​=141​∑x∈C1​​x
            u 1 ′ = 1 14 ∗ [ ( 0.556 ; 0.215 ) + ( 0.403 ; 0.237 ) + ( 0.481 ; 0.149 ) + ( 0.437 ; 0.211 ) + ( 0.666 ; 0.091 ) + ( 0.243 ; 0.267 ) + ( 0.639 ; 0.161 ) + ( 0.657 ; 0.198 ) + ( 0.360 ; 0.370 ) + ( 0.719 ; 0.103 ) + ( 0.359 ; 0.188 ) + ( 0.339 ; 0.241 ) + ( 0.282 ; 0.257 ) + ( 0.483 ; 0.312 ) ] = ( 0.473 ; 0.214 ) u'_1=frac{1}{14}*[(0.556;0.215)+(0.403;0.237)+(0.481;0.149)+(0.437;0.211)+(0.666;0.091)+(0.243;0.267)+(0.639;0.161)+(0.657;0.198)+(0.360;0.370)+(0.719;0.103)+(0.359;0.188)+(0.339;0.241)+(0.282;0.257)+(0.483;0.312)]=(0.473;0.214)            u1′​=141​∗[(0.556;0.215)+(0.403;0.237)+(0.481;0.149)+(0.437;0.211)+(0.666;0.091)+(0.243;0.267)+(0.639;0.161)+(0.657;0.198)+(0.360;0.370)+(0.719;0.103)+(0.359;0.188)+(0.339;0.241)+(0.282;0.257)+(0.483;0.312)]=(0.473;0.214)
            u 2 ′ = 1 3 ∑ x ∈ C 2 x = ( 0.394 , 0.066 ) u'_2=frac{1}{3}sum_{xin C_2}x=(0.394,0.066)            u2′​=31​∑x∈C2​​x=(0.394,0.066)
            u 3 ′ = 1 13 ∑ x ∈ C 3 x = ( 0.623 , 0.388 ) u'_3=frac{1}{13}sum_{xin C_3}x=(0.623,0.388)            u3′​=131​∑x∈C3​​x=(0.623,0.388)
            因 为 u i ′ ≠ u ′ , 所 以 更 新 均 值 向 量 因为u'_i neq u',所以更新均值向量            因为ui′​​=u′,所以更新均值向量

第 五 步 : 重 复 , 当 簇 划 分 C i 相 同 时 , 停 止 第五步:重复,当簇划分C_i相同时,停止 第五步:重复,当簇划分Ci​相同时,停止

1.2 学习向量量化
  • 1.2.1 概念
"英文:"
		Learning Vector Quantization,简称LVQ

"原理:"
		1)与k均值算法类似,也是试图找到一组原型向量来刻画聚类结构
		2)LVQ假设数据样本带有类别标记,学习过程中利用这些监督信息来辅助聚类

"数学描述:"
		给定样本集D={(x1,y1),...,(xm,ym)},
		每个样本(xj),有n个属性描述的特征向量(xj1,xj2,...,xjn),
		样本的标记(yj)。

"LVQ的目标:"
		学得一组n维原型向量{p1,p2,...,pn},每个原型向量代表一个聚类簇,簇标记ti属于y
1.2.2 学习向量量化算法伪代码

输 入 : 输入: 输入:
           {}            样 本 集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } 样本集D={(x_1,y_1),(x_2,y_2),...,(x_m,y_m)} 样本集D={(x1​,y1​),(x2​,y2​),...,(xm​,ym​)}
           {}            原 型 向 量 个 数 q , 各 原 型 向 量 预 设 的 类 别 标 记 t 1 , t 2 , . . . , t q 原型向量个数q,各原型向量预设的类别标记{t_1,t_2,...,t_q} 原型向量个数q,各原型向量预设的类别标记t1​,t2​,...,tq​
           {}            学 习 率   η ∈ ( 0 , 1 ) 学习率 etain (0,1) 学习率 η∈(0,1)

过 程 : 过程: 过程:
           {}            初 始 化 一 组 原 型 向 量 { p 1 , p 2 , . . . , p q } 初始化一组原型向量{p_1,p_2,...,p_q} 初始化一组原型向量{p1​,p2​,...,pq​}
           {}            r e p e a t repeat repeat
           {}                       {}            从 样 本 集 D 中 随 机 选 取 样 本 ( x j , y j ) 从样本集D中随机选取样本(x_j,y_j) 从样本集D中随机选取样本(xj​,yj​)
           {}                       {}            计 算 样 本 x j 与 p i ( 1 ≤ i ≤ q ) 的 距 离 : d j i = ∣ ∣ x j − p i ∣ ∣ 2 计算样本x_j与p_i(1leq ileq q)的距离:dji = ||x_j-p_i||_2 计算样本xj​与pi​(1≤i≤q)的距离:dji=∣∣xj​−pi​∣∣2​
           {}                       {}            找 出 与 x j 距 离 最 近 的 原 型 向 量 p i ∗ , i ∗ = a r g   m i n i ∈ { 1 , 2 , . . . , q } d j i 找出与x_j距离最近的原型向量p_{i^*},i^*=arg min_{iin {1,2,...,q}}dji 找出与xj​距离最近的原型向量pi∗​,i∗=arg mini∈{1,2,...,q}​dji
           {}                       {}            i f   y j = t i ∗   t h e n if y_j=t_{i^*} then if yj​=ti∗​ then
           {}                       {}                       {}            p ′ = p i ∗ + η ( x j − p i ∗ ) p'=p_{i^*}+eta(x_j-p_{i^*}) p′=pi∗​+η(xj​−pi∗​)
           {}                       {}            e l s e else else
           {}                       {}                       {}            p ′ = p i ∗ − η ( x j − p i ∗ ) p'=p_{i^*}-eta(x_j-p_{i^*}) p′=pi∗​−η(xj​−pi∗​)
           {}                       {}            e n d   i f end if end if
           {}                       {}            将 原 型 向 量 p i ∗ 更 新 为 p ′ 将原型向量p_{i^*}更新为p' 将原型向量pi∗​更新为p′
           {}            u n t i l   满 足 停 止 条 件 : 最 大 轮 转 数 或 最 小 调 整 幅 度 until 满足停止条件:最大轮转数或最小调整幅度 until 满足停止条件:最大轮转数或最小调整幅度

输 出 : 输出: 输出:
           {}            原 型 向 量 { p 1 , p 2 , . . . , p q } 原型向量{p_1,p_2,...,p_q} 原型向量{p1​,p2​,...,pq​}


  • 1.2.3 学习向量量化算法注意
"原理:"
		算法对原型向量进行迭代优化。
		   
"过程:"
		1)在每一轮选代中,算法随机选取一个有标记训练样本。
		2)找出与其距离最近的原型向量。
		3)更新原型变量。
		
"更新原理:"
		根据两者的"类别标记是否一致"来对原型向量进行相应的更新。
1.2.4 如何更新原型向量(原型向量更新原则)

一 、 对 样 本 x j , 若 最 近 的 原 型 向 量 p i ∗ 与 x j 的 类 别 标 记 相 同 , 则 让 p i ∗ 向 x j 的 方 向 靠 拢 。 一、对样本x_j,若最近的原型向量p_{i^*}与x_j的类别标记相同,则让p_{i^*}向x_j的方向靠拢。 一、对样本xj​,若最近的原型向量pi∗​与xj​的类别标记相同,则让pi∗​向xj​的方向靠拢。
           {}            新 原 型 向 量 : 新原型向量: 新原型向量:
           {}                       {}                       {}            p ′ = p i ∗ + η ( x j − p i ∗ ) , p'=p_{i^*}+eta(x_j-p_{i^*}), p′=pi∗​+η(xj​−pi∗​),
           {}            p ′ 与 x j 之 间 的 距 离 为 : p'与x_j之间的距离为: p′与xj​之间的距离为:
           {}                       {}                       {}            ∣ ∣ p ′ − x j ∣ ∣ 2 = ∣ ∣ p i ∗ + η ( x j − p i ∗ ) − x j ∣ ∣ 2 ||p'-x_j||_2=||p_{i^*}+eta(x_j-p_{i^*})-x_j||_2 ∣∣p′−xj​∣∣2​=∣∣pi∗​+η(xj​−pi∗​)−xj​∣∣2​
                  {}                              {}                       {}                         {}              = ( 1 − η ) ∣ ∣ p i ∗ − x j ∣ ∣ 2 =(1-eta)||p_{i^*}-x_j||_2 =(1−η)∣∣pi∗​−xj​∣∣2​
           {}            令 学 习 率 η ∈ ( 0 , 1 ) : 令学习率etain (0,1): 令学习率η∈(0,1):
           {}                       {}                       {}            则 原 型 向 量 p i ∗ , 在 更 新 为 p ′ 之 后 , 将 更 接 近 x j 则原型向量p_{i^*},在更新为p'之后,将更接近x_j 则原型向量pi∗​,在更新为p′之后,将更接近xj​
{}
{}
二 、 对 样 本 x j , 若 最 近 的 原 型 向 量 p i ∗ 与 x j 的 类 别 标 记 不 同 , 则 让 p i ∗ 向 x j 的 方 向 远 离 。 二、对样本x_j,若最近的原型向量p_{i^*}与x_j的类别标记不同,则让p_{i^*}向x_j的方向远离。 二、对样本xj​,若最近的原型向量pi∗​与xj​的类别标记不同,则让pi∗​向xj​的方向远离。
           {}            新 原 型 向 量 : 新原型向量: 新原型向量:
           {}                       {}                       {}            p ′ = p i ∗ − η ( x j − p i ∗ ) , p'=p_{i^*}-eta(x_j-p_{i^*}), p′=pi∗​−η(xj​−pi∗​),
           {}            p ′ 与 x j 之 间 的 距 离 为 : p'与x_j之间的距离为: p′与xj​之间的距离为:
           {}                       {}                       {}            ∣ ∣ p ′ − x j ∣ ∣ 2 = ∣ ∣ p i ∗ + η ( x j − p i ∗ ) − x j ∣ ∣ 2 ||p'-x_j||_2=||p_{i^*}+eta(x_j-p_{i^*})-x_j||_2 ∣∣p′−xj​∣∣2​=∣∣pi∗​+η(xj​−pi∗​)−xj​∣∣2​
                  {}                              {}                       {}                         {}              = ( 1 + η ) ∣ ∣ p i ∗ − x j ∣ ∣ 2 =(1+eta)||p_{i^*}-x_j||_2 =(1+η)∣∣pi∗​−xj​∣∣2​
           {}            令 学 习 率 η ∈ ( 0 , 1 ) : 令学习率etain (0,1): 令学习率η∈(0,1):
           {}                       {}                       {}            则 原 型 向 量 p i ∗ , 在 更 新 为 p ′ 之 后 , 将 更 远 离 x j 则原型向量p_{i^*},在更新为p'之后,将更远离x_j 则原型向量pi∗​,在更新为p′之后,将更远离xj​

  • 1.2.5 Voronoi 剖分(Voronoi Tessellation)

已 知 : 已知: 已知:
           {}            在 学 得 一 组 原 型 向 量 { p 1 , p 2 , . . . , p q } 后 , 即 可 实 现 对 样 本 空 间 X 的 簇 划 分 在学得一组原型向量{p_1,p_2,...,p_q}后,即可实现对样本空间X的簇划分 在学得一组原型向量{p1​,p2​,...,pq​}后,即可实现对样本空间X的簇划分

结 论 : 结论: 结论:
           {}            对 任 意 样 本 x , 它 将 被 划 入 与 其 距 离 最 近 的 原 型 向 量 所 代 表 的 簇 中 对任意样本x,它将被划入与其距离最近的原型向量所代表的簇中 对任意样本x,它将被划入与其距离最近的原型向量所代表的簇中

换 言 之 : 换言之: 换言之:
           {}            每 个 原 型 向 量 p i 定 义 了 与 之 相 关 的 一 个 区 域 R i , 每个原型向量p_i定义了与之相关的一个区域R_i, 每个原型向量pi​定义了与之相关的一个区域Ri​,
           {}            该 区 域 中 每 个 样 本 与 p i 的 距 离 不 大 于 它 与 其 他 原 型 向 量 p i ′ ( i ′ ≠ i ) 的 距 离 。 该区域中每个样本与 p_i的距离不大于它与其他原型向量p_{i'}(i'neq i)的距离。 该区域中每个样本与pi​的距离不大于它与其他原型向量pi′​(i′​=i)的距离。

数 学 描 述 : 数学描述: 数学描述:
           {}            R i = { x ∈ X ∣   ∣ ∣ x − p i ∣ ∣ 2 ≤ ∣ ∣ x − p i ′ ∣ ∣ 2 , i ′ ≠ i } R_i={xin X| ||x-p_i||_2leq||x-p_{i'}||_2,i'neq i} Ri​={x∈X∣ ∣∣x−pi​∣∣2​≤∣∣x−pi′​∣∣2​,i′​=i}

V o r o n o i 剖 分 : Voronoi剖分: Voronoi剖分:
           {}            对 样 本 空 间 X 的 簇 划 分 { R 1 , R 2 , . . . , R q } , 该 划 分 通 常 称 为 ′ ′ V o r o n o i 剖 分 ′ ′ 对样本空间X的簇划分{R_1,R_2,...,R_q},该划分通常称为''Voronoi剖分'' 对样本空间X的簇划分{R1​,R2​,...,Rq​},该划分通常称为′′Voronoi剖分′′

  • 1.2.6 学习向量量化算法例子

【D】

【q = 5】
即,学习目标找到5个原型向量 p 1 , p 2 , p 3 , p 4 , p 5 p_1,p_2,p_3,p_4,p_5 p1​,p2​,p3​,p4​,p5​
令,其对应的类别标记分别为 c 1 , c 2 , c 3 , c 4 , c 5 c_1,c_2,c_3,c_4,c_5 c1​,c2​,c3​,c4​,c5​

【 η = 0.1 eta=0.1 η=0.1】

【步骤】

第 一 步 : 原 型 向 量 随 机 初 始 化 第一步:原型向量随机初始化 第一步:原型向量随机初始化
           {}            根 据 样 本 的 类 别 标 记 和 簇 的 预 设 类 别 标 记 对 原 型 向 量 进 行 随 机 初 始 化 根据样本的类别标记和簇的预设类别标记对原型向量进行随 机初始化 根据样本的类别标记和簇的预设类别标记对原型向量进行随机初始化
           {}                       {}            假 定 初 始 化 为 样 本 : { x 5 , x 12 , x 18 , x 23 , x 29 } 假定初始化为样本:{x_5,x_{12},x_{18},x_{23},x_{29}} 假定初始化为样本:{x5​,x12​,x18​,x23​,x29​}
           {}                       {}            对 应 的 原 型 向 量 为 : { p 1 , p 2 , p 3 , p 4 , p 5 } 对应的原型向量为:{p_1,p_2,p_3,p_4,p_5} 对应的原型向量为:{p1​,p2​,p3​,p4​,p5​}

第 二 步 : 随 机 选 取 样 本 第二步:随机选取样本 第二步:随机选取样本
           {}            例 如 : x 1 = ( 0.697 ; 0.460 ) 例如:x_1=(0.697;0.460) 例如:x1​=(0.697;0.460)

第 三 步 : 计 算 该 样 本 与 原 型 向 量 的 距 离 第三步:计算该样本与原型向量的距离 第三步:计算该样本与原型向量的距离
           {}            d 1 , 5 = ∣ ∣ x 1 − x 5 ∣ ∣ 2 = ( 0.697 − 0.556 ) 2 + ( 0.460 − 0.215 ) 2 = 0.283 d_{1,5}=||x_1-x_5||_2=sqrt{(0.697-0.556)^2+(0.460-0.215)^2}=0.283 d1,5​=∣∣x1​−x5​∣∣2​=(0.697−0.556)2+(0.460−0.215)2 ​=0.283
           {}            d 1 , 12 = ∣ ∣ x 1 − x 12 ∣ ∣ 2 = 0.506 d_{1,12}=||x_1-x_{12}||_2=0.506 d1,12​=∣∣x1​−x12​∣∣2​=0.506
           {}            d 1 , 18 = ∣ ∣ x 1 − x 18 ∣ ∣ 2 = 0.434 d_{1,18}=||x_1-x_{18}||_2=0.434 d1,18​=∣∣x1​−x18​∣∣2​=0.434
           {}            d 1 , 23 = ∣ ∣ x 1 − x 23 ∣ ∣ 2 = 0.260 d_{1,23}=||x_1-x_{23}||_2=0.260 d1,23​=∣∣x1​−x23​∣∣2​=0.260
           {}            d 1 , 29 = ∣ ∣ x 1 − x 29 ∣ ∣ 2 = 0.032 d_{1,29}=||x_1-x_{29}||_2=0.032 d1,29​=∣∣x1​−x29​∣∣2​=0.032

第 四 步 : 更 新 原 型 向 量 第四步:更新原型向量 第四步:更新原型向量
           {}            L V Q 更 新 p 5 得 到 新 原 型 向 量 LVQ更新p_5得到新原型向量 LVQ更新p5​得到新原型向量
           {}                       {}            p ′ = p 5 + η ( x 1 − p 5 ) p'=p5+eta(x_1-p_5) p′=p5+η(x1​−p5​)
           {}                       {}            p ′ = x 29 + η ( x 1 − x 29 ) p'=x_{29}+eta(x_1-x_{29}) p′=x29​+η(x1​−x29​)
           {}                       {}            p ′ = ( 0.725 ; 0.445 ) + 0.1 ∗ ( ( 0.697 ; 0.460 ) − ( 0.725 ; 0.445 ) ) p'=(0.725;0.445)+0.1*((0.697;0.460)-(0.725;0.445)) p′=(0.725;0.445)+0.1∗((0.697;0.460)−(0.725;0.445))
           {}                       {}            p ′ = ( 0.722 ; 0.442 ) p'=(0.722;0.442) p′=(0.722;0.442)

第 五 步 : 重 复 操 作 , 可 以 设 置 最 大 轮 转 数 或 最 小 幅 度 第五步:重复操作,可以设置最大轮转数或最小幅度 第五步:重复操作,可以设置最大轮转数或最小幅度

1.3 高斯混合聚类
  • 1.3.1 概念
- "英文:"
		1)Mixture-of-Gaussion cluster
		2)高斯混合模型:GMM

- "原理:"
		1)与k均值,LVQ用原型向量来刻画聚类结构不同,
		2)高斯混合聚类采用概率模型来表达聚类原型。
		3)可以看做是k-means模型的一个优化。

- "涉及知识点:"
		1)高斯分布
		2)贝叶斯公式
		3)极大似然法
		4)聚类

注:
	下面将简单介绍这些知识点。
1.3.2 高斯分布

a)概念:

- "高斯分布即正态分布"
		最熟知的就是:"一元正态分布"

- "一元正态分布"
		1)曲线下的面积为1

b)指数函数:

e x p ( x ) : 表 示 e 的 x 次 方 exp(x):表示e的x次方 exp(x):表示e的x次方

c)一元正态分布标准形式:

P ( x ) = 1 2 π σ e x p ( − ( x − μ ) 2 2 σ 2 ) P(x) = frac{1}{sqrt{2pisigma}}exp(-frac{(x-mu)^2}{2sigma^2}) P(x)=2πσ ​1​exp(−2σ2(x−μ)2​)

d)一元正态分布曲线:

e)记作:

N ( μ , σ 2 ) N(mu,sigma^2) N(μ,σ2)

f)二元高斯分布标准形式:

p ( x ) = ∑ i = 1 n 1 2 π e x p ( − 1 2 x i 2 ) p(x)=sum_{i=1}^nfrac{1}{2pi}exp(-frac{1}{2}x_i^2) p(x)=i=1∑n​2π1​exp(−21​xi2​)

g)多元高斯分布的一般形式:

p ( x ) = 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 e x p ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) p(x)=frac{1}{(2pi)^frac{n}{2}|Σ|^{frac{1}{2}}}exp(-frac{1}{2}(x-mu)^TΣ^{-1}(x-mu)) p(x)=(2π)2n​∣Σ∣21​1​exp(−21​(x−μ)TΣ−1(x−μ))

μ mu μ是n维均值向量
Σ Σ Σ是n × n times n ×n的协方差矩阵

1.3.3 贝叶斯公式

例子

假设,有三个箱子X、Y、Z,箱子里有红、黄、蓝色的球若干。
事 件 A : 把 手 伸 向 一 个 箱 子 准 备 抽 取 球 。
事 件 B : 从 某 个 箱 子 里 抽 出 一 个 球 。

概率乘法公式:

P ( A B ) = P ( A ) P ( B ∣ A ) P(AB)=P(A)P(B|A) P(AB)=P(A)P(B∣A)

P ( B ∣ A ) : 在 事 件 A 发 生 的 前 提 下 , 事 件 B 发 生 的 概 率 P(B|A):在事件A发生的前提下,事件B发生的概率 P(B∣A):在事件A发生的前提下,事件B发生的概率

随 机 抽 一 个 球 , 从 Y 箱 抽 到 黄 球 的 概 率 是 多 少 ? 随机抽一个球,从Y箱抽到黄球的概率是多少? 随机抽一个球,从Y箱抽到黄球的概率是多少?

全概率公式:

P ( B ) = P ( A 1 ) P ( B ∣ A 1 ) + . . . + P ( A n ) P ( B ∣ A n ) P(B)=P(A_1)P(B|A_1)+...+P(A_n)P(B|A_n) P(B)=P(A1​)P(B∣A1​)+...+P(An​)P(B∣An​)

P ( B ) = ∑ i = 1 n P ( A i ) P ( B ∣ A i ) P(B)=sum_{i=1}^nP(A_i)P(B|A_i) P(B)=i=1∑n​P(Ai​)P(B∣Ai​)

随 机 抽 一 个 球 , 抽 到 黄 球 的 概 率 是 多 少 ? 随机抽一个球,抽到黄球的概率是多少? 随机抽一个球,抽到黄球的概率是多少?

贝叶斯公式:

P ( A i ∣ B ) = P ( A i ) P ( B ∣ A i ) ∑ j = 1 n P ( A j ) P ( B ∣ A j ) P(A_i|B)=frac{P(A_i)P(B|A_i)}{sum_{j=1}^nP(A_j)P(B|A_j)} P(Ai​∣B)=∑j=1n​P(Aj​)P(B∣Aj​)P(Ai​)P(B∣Ai​)​

已 知 随 机 抽 到 黄 球 , 求 这 个 黄 球 是 从 Y 箱 的 概 率 是 多 少 ? 已知随机抽到黄球,求这个黄球是从Y箱的概率是多少? 已知随机抽到黄球,求这个黄球是从Y箱的概率是多少?

P ( A ∣ B ) = P ( A ) P ( B ∣ A ) P ( B ) = P ( A B ) P ( B ) P(A|B) =frac{P(A)P(B|A)}{P(B)}= frac{P(AB)}{P(B)} P(A∣B)=P(B)P(A)P(B∣A)​=P(B)P(AB)​

P ( B ) 为 先 验 概 率 , 表 示 每 种 类 别 分 布 的 概 率 P(B)为先验概率,表示每种类别分布的概率 P(B)为先验概率,表示每种类别分布的概率
P ( B ∣ A ) 为 类 条 件 概 率 , 表 示 在 某 种 类 别 前 提 下 , 某 事 发 生 的 概 率 P(B|A)为类条件概率,表示在某种类别前提下,某事发生的概率 P(B∣A)为类条件概率,表示在某种类别前提下,某事发生的概率
P ( A ∣ B ) 为 后 验 概 率 , 表 示 某 事 发 生 了 , 并 且 它 属 于 某 一 类 别 的 概 率 P(A|B)为后验概率,表示某事发生了,并且它属于某一类别的概率 P(A∣B)为后验概率,表示某事发生了,并且它属于某一类别的概率
( 后 验 概 率 越 大 , 说 明 某 事 物 属 于 这 个 类 别 的 可 能 性 越 大 , 我 们 越 有 理 由 把 它 归 到 这 个 类 别 下 。 ) (后验概率越大,说明某事物属于这个类别的可能性越大,我们越有理由把它归到这个类别下。) (后验概率越大,说明某事物属于这个类别的可能性越大,我们越有理由把它归到这个类别下。)

1.3.4 概率密度函数(多元高斯分布的一般形式)

前 提 : 前提: 前提:
           {}            对 n 维 样 本 空 间 X 中 的 随 机 向 量 x , 若 x 服 从 高 斯 分 布 对n维样本空间X中的随机向量x,若x服从高斯分布 对n维样本空间X中的随机向量x,若x服从高斯分布

公 式 : 公式: 公式:
           {}            P ( x ) = 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 e − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) P(x)=frac{1}{(2pi)^{frac{n}{2}}|Σ|^{frac{1}{2}}}e^{-frac{1}{2}(x-mu)^TΣ^{-1}(x-mu)} P(x)=(2π)2n​∣Σ∣21​1​e−21​(x−μ)TΣ−1(x−μ)

解 释 : 解释: 解释:
           {}            u : n 维 均 值 向 量 u:n维均值向量 u:n维均值向量
           {}            Σ : n × n 协 方 差 矩 阵 Σ:ntimes n协方差矩阵 Σ:n×n协方差矩阵

记 作 : 记作: 记作:
           {}            P ( x ∣ μ , Σ ) P(x|mu,Σ) P(x∣μ,Σ)
         {}          ( 上 述 公 式 : 更 能 表 示 与 相 应 参 数 的 依 赖 关 系 ) (上述公式:更能表示与相应参数的依赖关系) (上述公式:更能表示与相应参数的依赖关系)

1.3.5 高斯混合分布(全概率公式)

公 式 : 公式: 公式:
           {}            P M ( x ) = ∑ i = 1 k α i P ( x   ∣ μ i , Σ i ) PM(x)=sum_{i=1}^kalpha_iP(x |mu_i,Σ_{i}) PM(x)=∑i=1k​αi​P(x ∣μi​,Σi​)

解 释 : 解释: 解释:
           {}            该 分 布 共 由 k 个 混 合 成 分 组 成 , 每 个 混 合 成 分 对 应 一 个 高 斯 分 布 。 该分布共由k个混合成分组成,每个混合成分对应一个高斯分布。 该分布共由k个混合成分组成,每个混合成分对应一个高斯分布。
           {}            α i > 0 为 相 应 的 混 合 系 数 , ∑ i = 1 k α i = 1 alpha_i>0为相应的混合系数,sum_{i=1}^kalpha_i=1 αi​>0为相应的混合系数,∑i=1k​αi​=1
           {}            α i 就 是 上 文 中 的 P ( A i ) , α i = P ( μ i , Σ i ) alpha_i就是上文中的P(A_i),alpha_i=P(mu_i,Σ_i) αi​就是上文中的P(Ai​),αi​=P(μi​,Σi​)

  • 1.3.6 高斯混合聚类的步骤

第一步:原型样本的生成

(原型样本生成的过程由高斯混合分布给出:)
  首先,根据 α 1 , . . . , α k alpha_1,...,alpha_k α1​,...,αk​定义的先验分布选择高斯混合成分。
  然后,根据被选择的混合成分的概率密度函数进行采样。
  最终,生成相应的样本。

(举例:以训练集D = { x 1 , x 2 , . . . , x m x_1,x_2,...,x_m x1​,x2​,...,xm​}为例:)

令,随机变量 z j ∈ { 1 , 2 , . . . , k } z_jin {1,2,...,k} zj​∈{1,2,...,k}表示生成样本 x j x_j xj​的高斯回合成分。
得, z j z_j zj​的先验概率P(B):
P ( z j = i ) 对 应 于 α i ( i = 1 , 2 , . . . , k ) P(z_j=i)对应于alpha_i(i=1,2,...,k) P(zj​=i)对应于αi​(i=1,2,...,k)

再得, z j z_j zj​的后验分布P(A|B):
P M ( z j = i ∣ x j ) = P ( z j = i ) P M ( x j ∣ z j = i ) P M ( x j ) PM(z_j=i|x_j)=frac{P(z_j=i)PM(x_j|z_j=i)}{PM(x_j)} PM(zj​=i∣xj​)=PM(xj​)P(zj​=i)PM(xj​∣zj​=i)​
代换 α i : alpha_i: αi​:
P M ( z j = i ∣ x j ) = α i P ( x j ∣ μ i , Σ i ) ∑ l = 1 k α l P ( x j ∣ μ i , Σ i ) PM(z_j=i|x_j)=frac{alpha_iP(x_j|mu_i,Σ_i)}{sum_{l=1}^kalpha_lP(x_j|mu_i,Σ_i)} PM(zj​=i∣xj​)=∑l=1k​αl​P(xj​∣μi​,Σi​)αi​P(xj​∣μi​,Σi​)​
γ j i : gamma_{ji}: γji​:
P M ( z j = i ∣ x j ) 就 是 样 本 x j 由 第 i 个 高 斯 混 合 成 分 生 成 的 后 验 概 率 , 简 记 : γ j i PM(z_j=i|x_j)就是样本x_j由第i个高斯混合成分生成的后验概率,简记:gamma_{ji} PM(zj​=i∣xj​)就是样本xj​由第i个高斯混合成分生成的后验概率,简记:γji​

第二步:簇划分

当高斯混合分布已知时,高斯混合聚类将把样本集D划分为k个簇C={ C 1 , C 2 , . . . , C k C_1,C_2,...,C_k C1​,C2​,...,Ck​}
每个样本 x j x_j xj​的簇标记 λ j : lambda_j: λj​:
λ j = a r g   m a x   γ j i , i ∈ { 1 , 2 , . . . , k } lambda_j=arg max gamma_{ji},iin {1,2,...,k} λj​=arg max γji​,i∈{1,2,...,k}

最后:总结

从原型聚类的角度来看:
		1)高斯混合聚类是采用概率模型(高斯分布)对原型进行刻画簇		
		2)划分则由原型对应的后验概率来确定。
1.3.7 极大释然估计

极大释然估计是什么?

    极大释然估计详解

1.3.8 高斯混合分布公式,模型参数 { ( α i , μ i , Σ i ) ∣ 1 ≤ i ≤ k } {(alpha_i,mu_i,Σ_i)|1leq ileq k} {(αi​,μi​,Σi​)∣1≤i≤k}的求解
  • 1.3.8.1 求解参数的总思想
给定样本集 D:
		1. 先采用极大似然估计,即最大化(对数)似然

		2. 再用EM算法,迭代优化,求解参数
  • 1.3.8.2 最大化(对数)似然函数

L L ( D ) = l n ( ∏ i = 1 m P M ( x j ) ) LL(D)=ln(prod_{i=1}^mPM(x_j)) LL(D)=ln(i=1∏m​PM(xj​))
                              = ∑ j = 1 m l n ( ∑ i = 1 k α i P ( x j ∣ μ i , Σ i ) ) =sum_{j=1}^mln(sum_{i=1}^kalpha_i P(x_j|mu_i,Σ_i))                              =j=1∑m​ln(i=1∑k​αi​P(xj​∣μi​,Σi​))

符 号 “ ∏ ” 是 连 乘 符 号 符号“∏”是连乘符号 符号“∏”是连乘符号
∏ i = 1 k α i = α 1 ∗ α 2 ∗ . . . ∗ α k prod_{i=1}^kα_i=α_1*α_2*...*α_k ∏i=1k​αi​=α1​∗α2​∗...∗αk​

  • 1.3.8.3 EM算法迭代优化

首先:

1 ≤ i ≤ k 1leq ileq k 1≤i≤k
α i = P ( μ i , Σ i ) alpha_i=P(mu_i,Σ_i) αi​=P(μi​,Σi​)
γ j i = α i P ( x j ∣ μ i , Σ i ) ∑ l = 1 k α l P ( x j ∣ μ i , Σ i ) gamma_{ji}=frac{alpha_iP(x_j|mu_i,Σ_i)}{sum_{l=1}^kalpha_lP(x_j|mu_i,Σ_i)} γji​=∑l=1k​αl​P(xj​∣μi​,Σi​)αi​P(xj​∣μi​,Σi​)​

第一步: L L ( D ) μ i ′ = 0 LL(D)'_{mu_i}=0 LL(D)μi​′​=0

L L ( D ) μ i ′ = ∂ L L ( D ) ∂ μ i = ∑ j = 1 m [ l n ( ∑ i = 1 k α i P ( x j ∣ μ i , Σ i ) ) ] μ i ′ = ∑ j = 1 m ∑ i = 1 k [ α i P ( x j ∣ μ i , Σ i ) ] u i ′ ∑ i = 1 k α i P ( x j ∣ μ i , Σ i ) = ∑ j = 1 m ∑ i = 1 k { ( α i ) u i ′ P ( x j ∣ μ i , Σ i ) + α i P ( x j ∣ μ i , Σ i ) μ i ′ } ∑ i = 1 k α i P ( x j ∣ μ i , Σ i ) = ( 最 大 化 似 然 函 数 对 μ i 求 导 , 好 难 , 待 续 。 直 接 看 结 果 ) = ∑ j = 1 m α i P ( x j ∣ μ i , Σ i ) ∑ l = 1 k α l P ( x j ∣ μ l , Σ l ) ( x j − μ i ) = 0 begin{aligned} LL(D)'_{mu_i} &= frac{partial LL(D)}{partial mu_i}\[6pt] &=sum_{j=1}^m[ln(sum_{i=1}^kalpha_i P(x_j|mu_i,Σ_i))]'_{mu_i}\[6pt] &=sum_{j=1}^mfrac{sum_{i=1}^k[alpha_i P(x_j|mu_i,Σ_i)]'_{u_i}}{sum_{i=1}^kalpha_i P(x_j|mu_i,Σ_i)}\[6pt] &=sum_{j=1}^mfrac{sum_{i=1}^k{(alpha_i){'_{u_i}}P(x_j|mu_i,Σ_i)+alpha_i P(x_j|mu_i,Σ_i)'_{mu_i}}}{sum_{i=1}^kalpha_i P(x_j|mu_i,Σ_i)}\[6pt] &=(最大化似然函数对mu_i求导,好难,待续。直接看结果)\[6pt] &=sum_{j=1}^mfrac{alpha_iP(x_j|mu_i,Σ_i)}{sum_{l=1}^kalpha_l P(x_j|mu_l,Σ_l)}(x_j-mu_i) = 0\[6pt] end{aligned} \[6pt] LL(D)μi​′​​=∂μi​∂LL(D)​=j=1∑m​[ln(i=1∑k​αi​P(xj​∣μi​,Σi​))]μi​′​=j=1∑m​∑i=1k​αi​P(xj​∣μi​,Σi​)∑i=1k​[αi​P(xj​∣μi​,Σi​)]ui​′​​=j=1∑m​∑i=1k​αi​P(xj​∣μi​,Σi​)∑i=1k​{(αi​)ui​′​P(xj​∣μi​,Σi​)+αi​P(xj​∣μi​,Σi​)μi​′​}​=(最大化似然函数对μi​求导,好难,待续。直接看结果)=j=1∑m​∑l=1k​αl​P(xj​∣μl​,Σl​)αi​P(xj​∣μi​,Σi​)​(xj​−μi​)=0​

第二步:简化

L L ( D ) μ i ′ = ∑ j = 1 m γ j i ( x j − μ i ) = 0 begin{aligned} LL(D)'_{mu_i} &=sum_{j=1}^mgamma_{ji}(x_j-mu_i)=0\[6pt] end{aligned} \[6pt] LL(D)μi​′​​=j=1∑m​γji​(xj​−μi​)=0​

第三步:得 μ i mu_i μi​

μ i = ∑ j = 1 m γ j i x j ∑ j = 1 m γ j i mu_i=frac{sum_{j=1}^mgamma_{ji}x_j}{sum_{j=1}^mgamma_{ji}} μi​=∑j=1m​γji​∑j=1m​γji​xj​​

第四步: L L ( D ) Σ i ′ = 0 LL(D)'_{Σ_i}=0 LL(D)Σi​′​=0

步 骤 待 续 步骤待续 步骤待续

第五步:得 Σ i Σ_i Σi​

Σ i = ∑ j = 1 m γ j i ( x j − μ i ) ( x j − u i ) T ∑ j = 1 m γ j i Σ_i=frac{sum_{j=1}^mgamma_{ji}(x_j-mu_i)(x_j-u_i)^T}{sum_{j=1}^mgamma_{ji}} Σi​=∑j=1m​γji​∑j=1m​γji​(xj​−μi​)(xj​−ui​)T​

第五步:得 α i alpha_i αi​

1.3.9 高斯混合聚类算法伪代码

  • 1.3.10 高斯混合聚类例子

【样本集D】

【令高斯混合成分的个数 k = 3】

【步骤】

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/828914.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号