目录
1.数据无量纲化处理(仅介绍本文用到的方法):min-max归一化
1)Seaborn是基于matplotlib的Python可视化库
(6)square:设置热力图矩阵小块形状,默认值是False
一、数据无量纲化处理 (热力图)
1.数据无量纲化处理(仅介绍本文用到的方法):min-max归一化
该方法是对原始数据进行线性变换,将其映射到[0,1]之间,该方法也被称为离差标准化。

上式中,min是样本的最小值,max是样本的最大值。由于最大值与最小值可能是动态变化的,同时也非常容易受噪声(异常点、离群点)影响,因此一般适合小数据的场景。此外,该方法还有两点好处:
1) 如果某属性/特征的方差很小,如身高:np.array([[1.70],[1.71],[1.72],[1.70],[1.73]]),实际5条数据在身高这个特征上是有差异的,但是却很微弱,这样不利于模型的学习,进行min-max归一化后为:array([[ 0. ], [ 0.33333333], [ 0.66666667], [ 0. ], [ 1. ]]),相当于放大了差异;
2) 维持稀疏矩阵中为0的条目。
2.代码展示
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import load_wine
wine = load_wine()
data = wine.data # 数据
lables = wine.target # 标签
feaures = wine.feature_names
df = pd.DataFrame(data, columns=feaures) # 原始数据
# 第一步:无量纲化
def standareData(df):
"""
df : 原始数据
return : data 标准化的数据
"""
data = pd.DataFrame(index=df.index) # 列名,一个新的dataframe
columns = df.columns.tolist() # 将列名提取出来
for col in columns:
d = df[col]
max = d.max()
min = d.min()
mean = d.mean()
data[col] = ((d - mean) / (max - min)).tolist()
return data
# 某一列当做参照序列,其他为对比序列
def graOne(Data, m=0):
"""
return:
"""
columns = Data.columns.tolist() # 将列名提取出来
# 第一步:无量纲化
data = standareData(Data)
referenceSeq = data.iloc[:, m] # 参考序列
data.drop(columns[m], axis=1, inplace=True) # 删除参考列
compareSeq = data.iloc[:, 0:] # 对比序列
row, col = compareSeq.shape
# 第二步:参考序列 - 对比序列
data_sub = np.zeros([row, col])
for i in range(col):
for j in range(row):
data_sub[j, i] = abs(referenceSeq[j] - compareSeq.iloc[j, i])
# 找出最大值和最小值
maxVal = np.max(data_sub)
minVal = np.min(data_sub)
cisi = np.zeros([row, col])
for i in range(row):
for j in range(col):
cisi[i, j] = (minVal + 0.5 * maxVal) / (data_sub[i, j] + 0.5 * maxVal)
# 第三步:计算关联度
result = [np.mean(cisi[:, i]) for i in range(col)]
result.insert(m, 1) # 参照列为1
return pd.DataFrame(result)
def GRA(Data):
df = Data.copy()
columns = [str(s) for s in df.columns if s not in [None]] # [1 2 ,,,12]
# print(columns)
df_local = pd.DataFrame(columns=columns)
df.columns = columns
for i in range(len(df.columns)): # 每一列都做参照序列,求关联系数
df_local.iloc[:, i] = graOn


147

被折叠的 条评论
为什么被折叠?



