灰度关联分析
这个算法其实就是检测其他属性对于主要测的属性的相关性分析,其中最后值在[0,1]之间。
- 首先需要进行获取数据,利用pandas就可以读取csv或者excel,甚至用数据库导入就可以获取数据
- 其次进行无量纲化,即标准化,可以用均值法,Z-score,max-min等等方法进行标准化
- 然后选取主测列和其他列,分析主测列与其他列关系
- 依据算法带入公式
- 根据算法的结果形成一个数列Series,然后查看一一对应,选取较大关系的属性,可以以0.8或者0.7为阈值,这个阈值视情况而定,不同项目需求不相同阈值
- 根据结果删除无关属性
# -*- coding: utf-8 -*-
# Time :16:56
# AUTHOR : Rexa (YUKAI)
import os
import pandas as pd
import numpy as np
import pandas as pd
x=pd.read_csv("灰色关联分析_样例数据(1).csv")
x=x.iloc[:,1:].T
# 1、数据均值化处理
x_mean=x.mean(axis=1)
for i in range(x.index.size):
x.iloc[i,:] = x.iloc[i,:]/x_mean[i]
# 2、提取参考队列和比较队列
print(x)
ck=x.iloc[0,:]
print(ck)
cp=x.iloc[1:,:]
print(cp)
# 比较队列与参考队列相减
t=pd.DataFrame()
for j in range(cp.index.size):
temp=pd.Series(cp.iloc[j,:]-ck)
t=t.append(temp,ignore_index=True)
#求最大差和最小差
mmax=t.abs().max().max()
mmin=t.abs().min().min()
rho=0.5
#3、求关联系数
ksi=((mmin+rho*mmax)/(abs(t)+rho*mmax))
#4、求关联度
r=ksi.sum(axis=1)/ksi.columns.size
#5、关联度排序,得到结果r3>r2>r1
result=r.sort_values(ascending=False)
# print(result)