数学建模代码

该博客主要介绍了如何使用Python进行特征权重的计算。通过读取CSV文件,处理数据,定义`cal_weight`函数计算特征权重。利用最大最小归一化方法,计算每个特征的对数概率,然后根据信息熵原理求得权重。最终输出各特征的权重分布。
# _*_ coding : utf-8 _*_
# @Time : 2022/6/4 8:40
# @Author : Lang Jian
# @File : Classification.py
# @Project : 南威杯数模校赛

import pandas as pd
import numpy as np
import math
from numpy import array

df = pd.read_csv("性平.csv")
df.dropna()
def cal_weight(x):

    x = x.apply(lambda x: ((x - np.min(x)) / (np.max(x) - np.min(x))))
    rows = x.index.size
    cols = x.columns.size
    k = 1.0 / math.log(rows)
    lnf = [[None] * cols for i in range(rows)]
    x = array(x)
    lnf = [[None] * cols for i in range(rows)]
    lnf = array(lnf)
    for i in range(0, rows):
        for j in range(0, cols):
            if x[i][j] == 0:
                lnfij = 0.0
            else:
                p = x[i][j] / x.sum(axis=0)[j]
                lnfij = math.log(p) * p * (-k)
            lnf[i][j] = lnfij
    lnf = pd.DataFrame(lnf)
    E = lnf
    d = 1 - E.sum(axis=0)
    w = [[None] * 1 for i in range(cols)]
    for j in range(0, cols):
        wj = d[j] / sum(d)
        w[j] = wj
    w = pd.DataFrame(w)
    return w


if __name__ == '__main__':
    w = cal_weight(df)
    w.index = df.columns
    w.columns = ['weight']
    print(w)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值