区块链技术博客
www.b2bchain.cn

sklearn标准化,归一化 python熵权法的实现的讲解

这篇文章主要介绍了sklearn标准化,归一化 python熵权法的实现的讲解,通过具体代码讲解7903并且分析了sklearn标准化,归一化 python熵权法的实现的讲解的详细步骤与相关技巧,需要的朋友可以参考下

本文实例讲述了sklearn标准化,归一化 python熵权法的实现的讲解。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/7903.html。具体如下:

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

标准化:(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和标准差有关.
我感受到的是,归一化受到最最大值影响较大,所以或许最小值最大值太奇葩时少用?

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

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

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

sklearn标准化,归一化   python熵权法的实现
代码的实现还是挺简单的,就对着公式敲就好,我给出我自己的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) 

sklearn标准化,归一化   python熵权法的实现
结果不太好可视化,就不贴结果了.

自己对于熵权法的感受:

  1. 我觉得这个算法有点凭空算权的感觉.可能也是我不懂原理的原因,觉得有点虚.信息熵这个词另外一次见是在深度学习里面见到的
  2. 如果要使用这个权就得将数据归一化处理,我还是有些疑惑,如果我归一化处理了这一大坨的数据,如果以后有新的数据来,还能拟合预测么…(不止在熵权法这里)我想到的一个预测方法就是,将这个新的值放入原来的训练数据中进行归一化处理.在进行预测.不过多少觉得怪怪的…

今天学到的一些小技巧

用于改变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://www.b2bchain.cn/7903.html

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » sklearn标准化,归一化 python熵权法的实现的讲解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们