进行综合评价
1、确定评价因素
目前考虑四个评价因素:距离,评分,评论数,价格
2、确定评价因素的权重向量
进行模糊综合评价时,权重的大小会对最终的评价结果产生很大的影响,不同的权重有时会得到完全不同的结果。现在先根据经验确定权重,后续可以采集用户习惯用机器学习的方法调整权重,使结果进一步接近用户的真实需求。
确定的初始权重为0.45(距离),0.3(评分),0.1(评论数),价格(0.15)
3、对每个评价因素进行量化
(1)对距离和价格采用倒数法和改进规格化方法:
y=(max-min)/(Xi-min)
由于实际情况中,Xi可以取到min值,所以将min值设为0
无量纲化之后,数据范围0-1之间,表明了数据在全距中的相对位置。
(2)对评分和评论数采用规格化方法:
y=(Xi-min)/(max-min)
在实际情况中,不妨将评分的最大值取为5
#综合评价法,初始权重:0.5(距离),0.3(评分),0.05(评论数),价格(0.15)
def sort_comprehensive_assess(testdata,weight_1,weight_2,weight_3,weight_4):
score_matrix= [[0 for i in range(6)] for i in range(len(testdata))] #综合评分矩阵
#计算综合评分
#计算距离
#计算出最大距离
max_distance=sort_distance(testdata)[len(testdata)-1][1]
for i in range(len(testdata)):
score_matrix[i][0]=weight_1*max_distance/testdata[i][1]
#计算酒店评分
#计算最小评分
min_points=sort_points(testdata)[len(testdata)-1][2]
for i in range(len(testdata)):
score_matrix[i][1]=weight_2*((testdata[i][2]-min_points))/(5.0-min_points)
#计算评论数
#计算最多评论和最少评论
max_comment=sort_comment(testdata)[0][3]
min_comment=sort_comment(testdata)[len(testdata)-1][3]
for i in range(len(testdata)):
score_matrix[i][2]=weight_3*(testdata[i][3]-min_comment)/(max_comment-min_comment)
#计算价格
#计算最高价格和最低价格
max_price=sort_price_descend(testdata)[0][4]
min_price=sort_price_ascend(testdata)[0][4]
for i in range(len(testdata)):
score_matrix[i][3]=weight_4*(testdata[i][4]-min_price)/(max_price-min_price)
#计算综合评分
for i in range(len(testdata)):
score_matrix[i][4]=score_matrix[i][0]+score_matrix[i][1]+score_matrix[i][2]+score_matrix[i][3]
#根据评分高低得到排名
#先将排名归零
for i in range(len(testdata)):
score_matrix[i][5]=0
for i in range(len(testdata)-1):
for j in range(i+1):
if(score_matrix[j]<=score_matrix[i+1]):
score_matrix[i+1][5]=score_matrix[i+1][5]+1
else :
score_matrix[j][5]=score_matrix[j][5]+1
for i in range(len(testdata)):
score_matrix[i][5]=12-score_matrix[i][5]
return score_matrix
我先自拟一些数据进行测试
#模拟数据 利用我的当前位置在去哪儿旅行上得到的酒店的数据
data=[["银座精宿酒店",0.257,4.4,51,153,"","济南齐鲁软件园舜泰广场"],
["汉庭酒店",0.553,4.5,349,174,"经济型","济南国际会展中心"],
["亚朵酒店",0.749,4.8,2281,424,"高档型","济南奥体中心"],
["格盟酒店",0.517,4.6,315,139,"经济型","济南高新齐鲁软件园"],
["都市118精选酒店",0.684,4.6,506,132,"","济南齐鲁软件园"],
["嘉里公寓",1.0,4.8,674,168,"酒店公寓","济南汉峪金谷"],
["清逸精品酒店",0.538,4.2,340,150,"舒适型","济南汉峪金谷"],
["如家商旅酒店",0.576,4.6,385,226,"舒适型","济南高新区齐鲁软件园"],
["红璞假日酒店",0.998,4.8,294,189,"民宿","济南汉峪金谷"],
["星致酒店",1.0,4.8,23,245,"酒店公寓","济南汉峪金谷"],
["金铂睿酒店",0.981,4.6,208,141,"酒店公寓","济南汉峪金谷"],
["红璞轻居公寓",1.0,4.7,363,151,"民宿","济南汉峪金谷"]
]
测试代码
testdata_1=sort_distance(data)
testdata_2=sort_points(data)
testdata_3=sort_comment(data)
testdata_4=sort_price_descend(data)
testdata_5=sort_price_ascend(data)
testdata_6=sort_comprehensive_assess(data,0.5,0.3,0.05,0.15)
for i in range(len(data)):
print(testdata_1[i])
print()
for i in range(len(data)):
print(testdata_2[i])
print()
for i in range(len(data)):
print(testdata_3[i])
print()
for i in range(len(data)):
print(testdata_4[i])
print()
for i in range(len(data)):
print(testdata_5[i])
for i in range(len(data)):
print(testdata_6[i])
测试结果如下:
[1.9455252918287937, 0.07500000000000008, 0.0006200177147918513, 0.010787671232876711, 2.031932980776462, 1]
[0.9041591320072332, 0.11249999999999995, 0.007218777679362268, 0.021575342465753423, 1.0454532521523487, 4]
[0.6675567423230975, 0.2249999999999999, 0.05, 0.15, 1.0925567423230973, 7]
[0.9671179883945841, 0.14999999999999983, 0.006465899025686448, 0.003595890410958904, 1.1271797778312294, 2]
[0.7309941520467835, 0.14999999999999983, 0.010695305580159435, 0.0, 0.8916894576269427, 6]
[0.5, 0.2249999999999999, 0.014415411868910542, 0.018493150684931504, 0.7579085625538419, 10]
[0.929368029739777, 0.0, 0.007019486271036316, 0.009246575342465752, 0.945634091353279, 3]
[0.8680555555555556, 0.14999999999999983, 0.008015943312666076, 0.04828767123287671, 1.0743591701010984, 5]
[0.501002004008016, 0.2249999999999999, 0.00600088573959256, 0.029280821917808217, 0.7612837116654166, 9]
[0.5, 0.2249999999999999, 0.0, 0.05804794520547945, 0.7830479452054793, 11]
[0.509683995922528, 0.14999999999999983, 0.0040965456155890164, 0.004623287671232876, 0.6684038292093497, 8]
[0.5, 0.18750000000000003, 0.007528786536758193, 0.00976027397260274, 0.7047890605093609, 12]
符合预期