参考文章:
https://zhuanlan.zhihu.com/p/32666445
模糊综合评价主要利用的使模糊数学中的隶属度来进行分析,通过一些主观的因素来将定性条件引入,进而对对象进行定量的评价。
一下记录书中P110的案例实现:
加载数据:
1 0.4 7.86 97
1 0.6 8.42 91
1 0.533 5 96
1 0.8667 8.83 96
1 0.4 6.4 96
1 0.2667 10.67 101
1 0.4667 11 108
1 0.6667 8.2 101
1 0.2667 10.9 85
1 0.5333 7.33 84
1 1.2 12.5 84
1 0.733 13.5 89
1 0.4 10 96
1 0.2 10.89 93
1 0.5333 10.25 94
1 0.8 8.46 87
0.9747 0.6667 9.55 89
0.9747 0.9333 8.5 97
0.9747 0.1333 9.14 92
0.9114 0.4 10.2 86
0.8987 0.1333 8 84
0.8481 0.3333 10.5 78
0.7595 0.6 9.89 62
def load_data():
data = []
with open('./test_fuzzy.txt') as f:
data = f.readlines()
data = [list(map(float, item.strip().split())) for item in data]
return np.array(data)
数据加载后,我们计算每种因素不同评价的隶属度,这里的不同评价就引入了主管因素,简单来说就是计算不同人所占比例。
def get_memMat(data):
memMat = np.zeros((4, 4))
for i in range(data.shape[0]):
bedUseRate = data[i, 0]
bedReturnRate = data[i, 1]
avrWait = data[i, 2]
waitLen = data[i, 3]
if bedUseRate >= 0.9:
memMat[0, 0] += 1
elif bedUseRate > 0.85:
memMat[0, 1] += 1
elif bedUseRate > 0.8:
memMat[0, 2] += 1
else:
memMat[0, 3] += 1
if bedReturnRate >= 0.9:
memMat[1, 0] += 1
elif bedReturnRate >= 0.8:
memMat[1, 1] += 1
elif bedReturnRate >= 0.6:
memMat[1, 2] += 1
else:
memMat[1, 3] += 1
if avrWait <= 7:
memMat[2, 0] += 1
elif avrWait < 12:
memMat[2, 1] += 1
elif avrWait < 14:
memMat[2, 2] += 1
else:
memMat[2, 3] += 1
if waitLen <= 30:
memMat[3, 0] += 1
elif waitLen < 60:
memMat[3, 1] += 1
elif waitLen < 90:
memMat[3, 2] += 1
else:
memMat[3, 3] += 1
memMat = memMat / data.shape[0]
return memMat
之后讲四个因素又总结两个因素,01和23, 跟别分配权重,这里的权重是通过经验赋值的,但是我们可以通过其他的方法对权重进行计算,之后在分别赋予这两个因素相应的权重从而获得最终的结果。
def test():
data = load_data()
memMat = get_memMat(data)
w2Mat = np.array([[0.4, 0.6]])
w1Mat = np.array([[0.6, 0.4]])
fact1 = np.dot(w1Mat, memMat[0:2])
fact2 = np.dot(w1Mat, memMat[2:4])
value = np.dot(w2Mat, np.vstack((fact1, fact2)))
pprint((fact1, fact2, value))
总的来说模糊综合评价就是通过隶属度以及相应权重所组成的线性组合来获得评分,在计算隶属度使要引入评价条件这种主管因素,在赋予权重时要需要进行分析计算。
来源:CSDN
作者:很重的水
链接:https://blog.csdn.net/weight_water/article/details/104116309