创新实训五

进行综合评价
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]

符合预期

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值