sklearn标准化,归⼀化python熵权法的实现
补⼀下上次⽂章的坑,有关标准化和归⼀化的问题.
标准化:(X-E(x))/D(x)
归⼀化: (X-min)/(max-min)
两个的具体差别我的感受不是特别深刻,⽤的⽐较多的是归⼀化.
someone
from sklearn.preprocessing import MinMaxScaler
sadmm = MinMaxScaler()
mm_data = mm.fit_transform(X)
agree的用法origin_data = mm.inver_transform(mm_data)
buttercupX=mm_data
from sklearn.preprocessing import StandardScaler
mobyss = StandardScaler()
std_data = ss.fit_transform(X)
origin_data = ss.inver_transform(std_data)
X = std_data
⽤这两个⽅法就可以分别得到归⼀化和标准化的数据,⽹上提到这两个好像很混乱,那就根据api和公式区分叭,minmax和最⼩最⼤值相关,standard和标准差有关.
我感受到的是,归⼀化受到最最⼤值影响较⼤,所以或许最⼩值最⼤值太奇葩时少⽤?
接下来是熵权法.参考⽂章:
虽然我⽤了好⼏次,不过不是很了解具体原理.只有⼀些零碎的关键词,信息熵,信息含量.
具体的应⽤是给了好⼏个影响因⼦,然后直接求出权重,加权得到⼏个影响因⼦的综合结果.
代码的实现还是挺简单的,就对着公式敲就好,我给出我⾃⼰的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.49308313shaanxi
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):
for i in range(2,1862):
xiane.ll(row=i,column=4).value) string = ll(row=i,column=5).value
string =str(string)
心好烦
string = string.split(':')
time =int(string[0])*100+int(string[1])
timestart.append(time)
xinyudu.ll(row=i,column=6).value) jingdu.ll(row=i,column=3).value) weidu.ll(row=i,column=2).value) capacity.ll(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)):
television作文
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])
return1+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)
结果不太好可视化,就不贴结果了.
⾃⼰对于熵权法的感受:
英语研究生考试科目1. 我觉得这个算法有点凭空算权的感觉.可能也是我不懂原理的原因,觉得有点虚.信息熵这个词另外⼀次见是在深度学习⾥⾯见到的
2. 如果要使⽤这个权就得将数据归⼀化处理,我还是有些疑惑,如果我归⼀化处理了这⼀⼤坨的数据,如果以后有新的数据来,还能拟合预测
么…(不⽌在熵权法这⾥)我想到的⼀个预测⽅法就是,将这个新的值放⼊原来的训练数据中进⾏归⼀化处理.在进⾏预测.不过多少觉得怪怪的…
今天学到的⼀些⼩技巧
⽤于改变excel数据的颜⾊,改变颜⾊⽅便直接在excel⾥⾯对数据进⾏修改,筛选等操作
from openpyxl.styles import PatternFill # 导⼊填充模块
fille = PatternFill('solid', fgColor="FF0000")
如果excel表格⾥⾯有些值⽤公式算出来的,如果直接openpyxl获取值,获取到的公式的表达式⽽不是公式算出来的值.⽤data_only这个设置来解决这个问题.
excel = openpyxl.load_workbook('归⼀化.xlsx',data_only=1)