11.1 编程实现 Relief 算法,并在西瓜数据集上测试。
Relief 是过滤式特征选择算法,根据设计的 “相关统计量” 来度量特征的重要性。该方法和后续的学习器无关,只根据数据集就可完成特征选择。相关的思想理论介绍见书P249-250
代码实现如下:
import pandas as pd
import numpy as np
class Relief:
def readData(self):
dataset = pd.read_excel('./WaterMelon_3.0.xlsx',encoding = 'gbk') # 读取数据
self.Attributes = dataset.columns[1:-1] #所有属性的名称
#print(self.Attributes)
dataset = np.matrix(dataset)
dataset = dataset[:,1:]
m,n = np.shape(dataset) # 得到数据集大小
#print(dataset)
dataset[:,n-3:n-1] = (dataset[:,n-3:n-1]-np.min(dataset[:,n-3:n-1],0))/\
(np.max(dataset[:,n-3:n-1],0)-np.min(dataset[:,n-3:n-1],0)) # 连续属性规范化
self.goodindex = np.where(dataset[:,n-1]=='是')[0] # 好瓜的索引
self.badindex = np.where(dataset[:,n-1]=='否')[0] # 坏瓜的索引
self.dataset = dataset
# 计算每个样本之间的距离
def getDist(self):
m,n = np.shape(self.dataset)
distance = np.ones([m,m])
for i in range(m):
distance[i,i] = np.inf
for j in range(i+1,m):
dis = 0
for k in range(n-1):
if type(s