Python:原始TOPSIS算法代码(两个属性)

import numpy as np
from sklearn.metrics import recall_score
from sklearn.preprocessing import MinMaxScaler
from collections import OrderedDict
class TOPSIS():
    def __init__(self,X):
        self.X = X
        self.Xbest = self.find_best()
        print(self.Xbest)
        self.Xlast = self.find_last()
        print(self.Xlast)
        self.target = self.topsis()

    def D(self, a, b):
        return np.sqrt(sum((a - b) ** 2))

    def find_best(self):
        best = np.zeros(2)
        best[0] = min(self.X[:,0])
        best[1] = max(self.X[:,1])
        return best
    def find_last(self):
        last = np.zeros(2)
        last[0] = max(self.X[:,0])
        last[1] = min(self.X[:,1])
        return last

    def topsis(self):
        criteria = OrderedDict()
        for idx in range(len(self.X)):
            criteria[idx] = self.D(self.X[idx],self.Xlast) / (self.D(self.X[idx],self.Xlast) + self.D(self.X[idx],self.Xbest))
        return max(criteria,key=criteria.get)


if __name__ == '__main__':
    X = [[3.895722234,	0.034759255],[2.867028395,	0.049106175],[2.775693705,	0.070220432],[2.817633802,	0.091183099],[2.775377082,	0.112311459],[2.225388451,	0.13219197],[2.336773934,	0.152998457],[2.928312541,	0.357229153]]
    X = np.array(X)
    minmax = MinMaxScaler()
    X = minmax.fit_transform(X=X)
    print(X)
    tp = TOPSIS(X=X)
    print(tp.target)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeniuHe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值