python归一化sklearn_sklearn标准化,归一化 python熵权法的实现

本文介绍了Python中使用sklearn进行数据预处理的归一化和标准化方法,通过代码展示了如何应用MinMaxScaler和StandardScaler。此外,还探讨了熵权法的概念和实现,用于计算多个影响因素的权重。讨论了熵权法的直观感受,以及数据归一化后新数据的处理策略和预测问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

补一下上次文章的坑,有关标准化和归一化的问题.

标准化:(X-E(x))/D(x)

归一化: (X-min)/(max-min)

两个的具体差别我的感受不是特别深刻,用的比较多的是归一化.

from sklearn.preprocessing import MinMaxScaler

mm = MinMaxScaler()

mm_data = mm.fit_transform(X)

origin_data = mm.inverse_transform(mm_data)

X=mm_data

from sklearn.preprocessing import StandardScaler

ss = StandardScaler()

std_data = ss.fit_transform(X)

origin_data = ss.inverse_transform(std_data)

X = std_data

用这两个方法就可以分别得到归一化和标准化的数据,网上提到这两个好像很混乱,那就根据api和公式区分叭,minmax和最小最大值相关,standard和标准差有关.

我感受到的是,归一化受到最最大值影响较大,所以或许最小值最大值太奇葩时少用?

接下来是熵权法.参考文章:知乎,熵权法

虽然我用了好几次,不过不是很了解具体原理.只有一些零碎的关键词,信息熵,信息含量.

具体的应用是给了好几个影响因子,然后直接求出权重,加权得到几个影响因子的综合结果.

91a0258fadfd77ad66eef9e295bf3910.png

代码的实现还是挺简单的,就对着公式敲就好,我给出我自己的python代码.(居然没找到相关API)

import openpyxl

import matplotlib.pyplot as plt

import numpy as np

import math

excel = openpyxl.load_workbook('./会员.xlsx')

# sheet = excel['筛选后']

sheet = excel['归一化']

jingdu=[]

weidu=[]

minx = 112.6832583

maxx = 114.4936096

miny = 22.49308313

maxy = 23.87839806

rapx = (114.4936096 - 112.6832583)/50

rapy = (23.87839806 - 22.49308313)/50

xiane=[]

xinyudu=[]

timestart=[]

jingdu = []

weidu = []

capacity = []

for i in range(2,1862):

xiane.append(sheet.cell(row=i,column=4).value)

string = sheet.cell(row=i,column=5).value

string = str(string)

string = string.split(':')

time = int(string[0])*100+int(string[1])

timestart.append(time)

xinyudu.append(sheet.cell(row=i,column=6).value)

jingdu.append(sheet.cell(row=i,column=3).value)

weidu.append(sheet.cell(row=i,column=2).value)

capacity.append(sheet.cell(row=i,column=6).value)

def zhengxiangMinMax(data):

mindata = min(data)

maxdata = max(data)

temp = data[:]

for i in range(len(data)):

data[i] = temp[i]-mindata

data[i]/= maxdata-mindata

def fuxiangMinMax(data):

mindata = min(data)

maxdata = max(data)

temp = data[:]

for i in range(len(data)):

data[i] = maxdata-temp[i]

data[i]/= maxdata-mindata

def bizhong(data):

allsum = sum(data)

for i in range(len(data)):

data[i] /= allsum

def shan(data):

for i in range(len(data)):

if(data[i]==0):

continue

data[i]=data[i]*math.log(data[i])

return 1+sum(data)*(1/math.log(len(data)))

zhengxiangMinMax(xiane)

zhengxiangMinMax(xinyudu)

fuxiangMinMax(timestart)

bizhong(xinyudu)

bizhong(xiane)

bizhong(timestart)

d=[]

d.append(shan(xiane))

d.append(shan(timestart))

d.append(shan(xinyudu))

bizhong(d)

print(d)

672b4bdc57fe20321cf2bf816e31593e.png

结果不太好可视化,就不贴结果了.

自己对于熵权法的感受:

我觉得这个算法有点凭空算权的感觉.可能也是我不懂原理的原因,觉得有点虚.信息熵这个词另外一次见是在深度学习里面见到的

如果要使用这个权就得将数据归一化处理,我还是有些疑惑,如果我归一化处理了这一大坨的数据,如果以后有新的数据来,还能拟合预测么…(不止在熵权法这里)我想到的一个预测方法就是,将这个新的值放入原来的训练数据中进行归一化处理.在进行预测.不过多少觉得怪怪的…

今天学到的一些小技巧

用于改变excel数据的颜色,改变颜色方便直接在excel里面对数据进行修改,筛选等操作

from openpyxl.styles import PatternFill # 导入填充模块

fille = PatternFill('solid', fgColor="FF0000")

sheet.cell(row=i,column =3).fill=fille

如果excel表格里面有些值用公式算出来的,如果直接openpyxl获取值,获取到的公式的表达式而不是公式算出来的值.用data_only这个设置来解决这个问题.

excel = openpyxl.load_workbook('归一化.xlsx',data_only=1)

原文链接:https://blog.youkuaiyun.com/rglkt/article/details/107596383

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值