⎪
⎪
⎨
1,a≤x≤b,
⎪
⎪
e
−k(x−b)
,x>b.
⎩
M(x)=
正态型
x−a
M(x)=exp[−(
σ
)
2
]
模糊矩阵
设
U={x
1
,x
2
,…,x
m
},V={y
1
,y
2
,…,y
n
}
,
R
为从
U
到
V
的模糊关系,隶属函数为
μ
R
(x,y)
,对任意
(x
i
,y
j
)∈U×V
,有
μ
R
(x
i
,y
j
)=r
ij
∈
[0,1],
记
R=(r
ij
)
m×n
为模糊矩阵。
模糊模型识别最大隶属度原则
设
A
i
∈F(U),i=1,2,…,n
,对
u
0
∈U
,若存在
i
0
,使
A
i0
(u
0
)=max{A
1
(u
0
),A
2
(u
0
),…,A
n
(u
0
)},
则认为
u
0
相对隶属于
A
i
。
例子
考虑人的年龄问题,分年轻、中年、老年三类,对应三个模糊集
A
1
,A
2
,A
3
,设论域
U=(0,100]
,且对
x∈(0,100]
有
A
1
(x)=
1,0⎧
x−20
⎪
⎪
⎪
2
⎪
⎪
⎪
1−2(
20
),20⎨
x−40
2
2(
20
),30⎪
⎪
⎪
⎪
⎪
⎪
0,40⎩
A
3
(x)=
1,0⎧
x−50
⎪
⎪
⎪
2
⎪
⎪
⎪
2(
20
),50x−70
⎨
1−2(
20
)
2
,60⎪
⎪
⎪
⎪
⎪
⎪
1,70⎩
A
2
(x)=1−A
1
(x)−A
3
(x).
若某人 35 岁,代入得
A
1
(35)=0.125,A
2
(35)=0.875,A
3
(35)=0,
可见 35 岁属于中年。
择近原则
设
A
i
,B∈F(U)
,若存在
i
0
使
N(A
i0
,B)=max{N(A
1
,B),N(A
2
,B),…,N(A
n
,B)}
则认为
B
与
A
i0
最贴近,判定为一类。其中
N(A,B)
表示
A,B
的贴进度。
贴近度
贴进度是对两个模糊集接近程度的度量。
海明贴近度若
U={u
1
,u
2
,…,u
n
}
,则
1
∑
N(A,B)
=
1−
n
i=1
∣A(u
i
)−
B(u
i
)∣,
Δ
n
若
U=[a,b]
,则
1
Δ
N(A,B)
=
1−
b−a
∫
a
∣A(u)−
B(u)∣du.
b
欧几里得贴近度
若
U={u
1
,u
2
,…,u
n
}
,则
1
∑
Δ
N(A,B)
=
1−
n
(
i=1
∣A(u
i
)−
B(u
i
)∣)
1/2
,
n
若
U=[a,b]
,则
b
1
b−a
(
∫
a
∣A(u)−
B(u)∣du)
1/2
.
Δ
N(A,B)
=
1−
黎曼贴近度
若
U=(−∞,+∞)
,则
+∞
∫
−∞
(A(u)
Δ
N
1
(A,B)
=
∧B(u))du
,
(A(u)∨B(u))du
N
2
(A,B)
+∞
−∞
2∫(A(u)∧B(u))du
+∞+∞
Δ
∫
−∞
A(u)du+
∫
−∞
B(u)du
=
.
例子
设集合
A
1
=(0.4,0.3,0.5,0.3)
,
A
2
=(0.3,0.3,0.4,0.4)
,
B=(0.2,0.3,0.4),0.3
,确定
B
属于哪一类。
由欧几里得贴近度有
N(B,A
1
)=0.8882,N(B,A
2
)=0.9293,N(B,A
3
)=0.95,
因此
B
属于
A
3
类。
模糊聚类
构造模糊矩阵设全体为论域
U={u
1
,u
2
,…,u
n
}
,对象
u
i
的特性由
m
个指标表示,记
a
i
=[a
i1
,a
i2
,…,a
im
]
,得
A=(a
ij
)n×m,
如果需要,作标准化处理得
B=(b
ij
)n×m.
计算
u
i
,u
j
的模糊相似系数,构造模糊相似矩阵
R=(r
ij
)
n×n
.
计算模糊相似系数的方法有:
夹角余弦法
m
∑
k=1
b
ik
b
jk
m
2
m
2
∑
k=1
b
jk
∑
k=1
b
ik
r
ij
=
.
相关系数法
r
ij
=
∑
k=1
∣b
ik
−
b
i
∣∣b
jk
−
b
j
∣
mm
∑
k=1
(b
ik
−
b
i
)
2
∑
k=1
(b
jk
−
b
j
)
2
m
.
距离法
r
ij
=
1−c(d(u
i
,u
j
))
α
,
选取适当
c,α
使
0≤r
ij
≤
1
,并选取适当距离公式
d(u
i
,u
j
)
。
最大最小法
∑
k=1
min(b
ik
,b
jk
)
m
∑
r
ij
=
k=1
max(b
ik
,b
jk
)
m
算术平均最小法
∑
k=1
min(b
ik
,b
jk
)
m
1
∑
r
ij
=
2
k=1
(b
ik
+b
jk
)
m
几何平均最小法
∑
k=1
min(b
ik
,b
jk
)
m
b
ik
b
jk
∑
k=1
r
ij
=
m构造模糊等价矩阵
构造得到的
R
一般只满足自反性和对称性,采用平方法求出
R
的传递闭包
t(R)
。
对于矩阵
R
n×n
,计算
R
2
=R∘R=(r
ij
)
2
其中
r
ij
=
2
max
k
{min{r
ik
,r
kj
}},
k=1,2,…,n.
迭代计算
R→R
2
→
⋯→R
2
→…
,
直到出现
R
k
∘R
k
=R
k
,即有
t(R)=R
k
。
i
聚类
对于
t(R)
的每个元素
tr
ij
,取不同阈值
λ
时,若 KaTeX parse error: Undefined control sequence: tr at position 1:
tr_{ij}gelambda,认为
u
i
,u
j
属于一类,反之不属于一类,从而画出聚类图。
例子
有五个类
I=(5,5,3,2)
,
II=(2,3,4,5)
,
III=(5,5,2,3)
,
IV=(1,5,3,1)
,
V=(2,4,5,1)
。使用距离法求相似系数
r
ij
=
1−0.1
k=1
∣a
ik
−
a
jk
∣,
∑
4
得相似矩阵
⎛
1
⎜
0.1
⎜
0.8
⎜
⎜
0.5
⎝
R=
0.3
0.1
1
0.1
0.2
0.4
0.8
0.1
1
0.3
0.1
0.5
0.2
0.3
1
0.6
0.3
⎞
0.4
⎟
0.1
⎟
⎟
0.6
⎟
1
⎠
,
平方法求传递闭包得
⎛
1
⎜
0.4
⎜
0.8
⎜
⎜
0.5
⎝
t(R)=
0.5
0.4
1
0.4
0.4
0.4
0.8
0.4
1
0.5
0.5
0.5
0.4
0.5
1
0.6
0.5
⎞
0.4
⎟
0.5
⎟
⎟
0.6
⎟
1
⎠
于是有:
0≤λ≤0.4,{I,II,III,IV,V}
;
0.4<λ≤0.5,{I,III,IV,V},{II}
;
0.5<λ≤0.6,{I,III},{IV,V},{II}
;
0.6<λ≤0.8,{I,III},{II},{IV},{V}
;
0.8<λ,{I},{II},{III},{IV},{V}
。
模糊综合评价
1. 确定指标集
I={x
1
,x
2
,…,x
p
}
和权重向量
W=(w
1
,w
2
,…,w
p
)
;
2. 建立评语集
V={v
1
,v
2
,…,v
s
}
;
3. 建立评价向量,获得评价矩阵
R=(r
ij
)
p×s
;
4. 合成模糊综合评价结果向量,得到结果向量
A
W∘R=(a
1
,a
2
,…,a
s
)=A.
对于
∘
算子,通常有以下 4 种:
Δ
M(∧,∨)
a
k
=
max
j
{min(w
j
,r
jk
)},
M(⋅,∨)
b
k
=
max
j
{w
j
⋅r
jk
},
M(∧,+)
M(⋅,+)
Python 代码
模糊聚类
对模糊聚类中的例子求解并画聚类图,代码如下:
b
∑
k
=
j
min(w
j
,r
jk
),
b
p
k
=sum
j=1
w
j
r
jk
.
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# @ author: Koorye
# @ date: 2021-7-29
# @ function:
模糊聚类
# %%
import numpy as np
import pandas as pd
from chy import dendrogram, linkage
# %%
#
距离公式
def dist(x, y):
return ((x - y))
#
源数据
A = ([[5, 5, 3, 2],
[2, 3, 4, 5],
[5, 5, 2, 3],
[1, 5, 3, 1],
[2, 4, 5, 1]])
#
构造相似模糊矩阵
num = len(A)
R = ((num, num))
for i in range(len(A)):
for j in range(len(A)):
R[i, j] = 1 - .1 * dist(A[i, :], A[j, :])
print(\'R =n\',R)
# %%
#
平方法求传递闭包
def tr(R):
R2 = ()
for row in range(len(R)):
for col in range(len(R)):
r_list = []
for i in range(len(R)):
r_(([R[row, i], R[i, col]]))
R2[row, col] = (r_list)
return R2
R_old = R
R = tr(R)
while ((R-R_old)) > 1e-4:
R_old = R
R = tr(R)
print(\'t(R) =n\', R)
# %%
#
画聚类图
R2 = (1-R, 1)
R2 = R2[R2!=0]
Z = linkage(R2)
dendrogram(Z, labels=[\'I\',\'II\',\'III\',\'IV\',\'V\'])
输出如下:R = [[1. 0.1 0.8 0.5 0.3] [0.1 1. 0.1 0.2 0.4] [0.8 0.1 1. 0.3 0.1] [0.5 0.2 0.3 1. 0.6] [0.3 0.4 0.1 0.6 1. ]]t(R) = [[1. 0.4 0.8 0.5 0.5] [0.4 1. 0.4 0.4 0.4] [0.8 0.4 1. 0.5 0.5] [0.5 0.4 0.5 1. 0.6] [0.5 0.4 0.5 0.6 1. ]]
发布评论