给定训练集{(x1,y1),(x2,y2).....(xm,ym)} ,对每个示例xi,Relief在xi的同类样本中寻找其最近邻xi,nh(猜中近邻),再从xi的异类样本中寻找其最近邻xi,nm(猜错近邻)

代码如下:

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Wed Feb 28 20:16:09 2018 @author: jzc
"""
import numpy as np
import csv
from random import randrange
from sklearn import preprocessing
#抽样次数
m=8
def Compute_Distance_Discrete(diff_distance):
# 使用欧几里得距离计算最近邻
counter = np.power(diff_distance,2)
counter = np.sum(counter)
counter = np.sqrt(counter)
return counter
def loadcsv(filename):
"""载入文件"""
lines = csv.reader(open(filename,'r'))
data = list(lines)
for i in range(1,len(data)):
data[i] = [float(x) for x in data[i]]
result = np.array(data[1:])
features = result[:,1:-1]
labels = result[:,-1]
return features,labels
def Relief(features,labels):
#初始化
(n_samples,n_features)=np.shape(features)
distance = np.zeros((n_samples,n_samples))
weights = np.zeros(n_features)
nearHit= list()
nearMiss= list()
distance_sort=list()
"""寻找每个样本的距离"""
for i in range(0,n_samples):
for j in range(0,n_samples):
diff_distance = features[i]-features[j]
if i==j:
distance[i,j]=99999
else:
distance[i,j] = Compute_Distance_Discrete(diff_distance) for i in range(0,m):
one_sample = randrange(0,n_samples,1) #随机选择一个样本
one_feature = features[one_sample]
for index in range(n_samples):
distance_sort.append([distance[one_sample,index],index,labels[index]])
#从小到大排序
distance_sort.sort(key = lambda x:x[0])
"""寻找样本的猜错近邻和猜中近邻"""
for index in range(n_samples):
if nearHit ==[] and distance_sort[index][2]==labels[one_sample]:
nearHit = features[distance_sort[index][1]]
elif nearMiss==[] and distance_sort[index][2]!=labels[one_sample]:
nearMiss = features[distance_sort[index][1]]
elif nearHit!=[] and nearMiss!=[]:
break;
else:
continue;
sum_nh = list()
sum_nm =list()
# 若属性j离散,Xaj==Xbj 则diff的值为0;否则为1
for k in range(len(one_feature[:-2])):
if one_feature[k] != nearHit[k]:
sum_nh.append(1)
else:
sum_nh.append(0)
if one_feature[k] != nearMiss[k]:
sum_nm.append(1)
else:
sum_nm.append(0)
#print sum_nh,sum_nm
#print one_feature[-2:]-nearHit[-2:]
"""若为属性j为连续, diff(Xaj-Xbj)=|Xaj-Xbj| 并且Xaj,Xbj要归一化到[0,1]区间"""
weights[-2:] = weights[-2:]-np.power(one_feature[-2:]-nearHit[-2:],2)
+np.power(one_feature[-2:]-nearMiss[-2:],2)
weights[:-2] = weights[:-2]-np.power(sum_nh,2)+np.power(sum_nm,2)
#print weights/n_samples
return weights/n_samples
filename = '/Users/jzc/DeepLearning(7.8-)/data/watermelon3_0.csv'
features,labels = loadcsv(filename)
#features[-2:] = preprocessing.normalize(features[-2:],norm='l2')
#print features
for x in range(1,10):
result = Relief(features,labels)
print result
#print features[0],labels[0]

Relief 过滤式特征选择的更多相关文章

  1. 特征选择与稀疏学习(Feature Selection and Sparse Learning)

    本博客是针对周志华教授所著<机器学习>的"第11章 特征选择与稀疏学习"部分内容的学习笔记. 在实际使用机器学习算法的过程中,往往在特征选择这一块是一个比较让人模棱两可 ...

  2. Machine Learning-特征工程之特征选择

    特征工程之特征选择 目录 简介 1 Filter(过滤式选择) 1.1 移除低方差特征(variance threshold) 1.2 信息增益(information gain) 1.3 单变量特征 ...

  3. 学习理论之正则化(Regularization)与模型选择

    一.引言 对于一个学习问题,可以假设很多不同的模型,我们要做的是根据某一标准选出最好的模型.例如,在多项式回归中,对于我们的假设模型,我们最要紧的是决定 k 到底取多少合适,能不能有一种方法可以自动选 ...

  4. 【机器学习PAI实践一】搭建心脏病预测案例

    一.背景 心脏病是人类健康的头号杀手.全世界1/3的人口死亡是因心脏病引起的,而我国,每年有几十万人死于心脏病. 所以,如果可以通过提取人体相关的体侧指标,通过数据挖掘的方式来分析不同特征对于心脏病的 ...

  5. TensorFlow系列专题(二):机器学习基础

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/ ,学习更多的机器学习.深度学习的知识! 目录: 数据预处理 归一化 标准化 离散化 二值化 哑编码 特征 ...

  6. 浅谈关于特征选择算法与Relief的实现

    一. 背景 1) 问题 在机器学习的实际应用中,特征数量可能较多,其中可能存在不相关的特征,特征之间也可能存在相关性,容易导致如下的后果: 1.     特征个数越多,分析特征.训练模型所需的时间就越 ...

  7. 特征选择: 卡方检验、F 检验和互信息

    特征选择是特征工程中的重要一环,其主要目的是从所有特征中选出相关特征 (relevant feature),或者说在不引起重要信息丢失的前提下去除掉无关特征 (irrelevant feature) ...

  8. 挑子学习笔记:特征选择——基于假设检验的Filter方法

    转载请标明出处: http://www.cnblogs.com/tiaozistudy/p/hypothesis_testing_based_feature_selection.html Filter ...

  9. 用信息值进行特征选择(Information Value)

    Posted by c cm on January 3, 2014 特征选择(feature selection)或者变量选择(variable selection)是在建模之前的重要一步.数据接口越 ...

随机推荐

  1. PHP pdo单例模式连接数据库

    PHP pdo单例模式连接数据库<pre><?php class Db{ private static $pdo; public static function getPdo () ...

  2. centos7查看防火墙状态、关闭防火墙

    查看防火墙状态: firewall-cmd --state 关闭防火墙: systemctl stop firewalld.service 禁止firewall开机启动: systemctl disa ...

  3. CF723D 【Lakes in Berland】

    题目链接 题解 CF723D [Lakes in Berland] 首先将边界的水用bfs处理掉 再将中间的每一个湖泊处理出来,存入一个结构体内,结构体里记录湖泊大小和开始点 将湖泊排序从小往大填满, ...

  4. GO指南练习:切片

    最近开始GO语言的学习,在GO指南中练习到切片这个题目 练习:切片 实现 Pic.它应当返回一个长度为 dy 的切片,其中每个元素是一个长度为 dx,元素类型为 uint8 的切片.当你运行此程序时, ...

  5. T100 GR 报表常见知识点 (含套版制作)

    轉載至赫非域 > T100 GR 报表常见知识点 前端操作 bron1984 7小时前 5浏览 0评论 8.9.1 注意事项 字体: 如果字型没选对,会造成没设对字型的数据汇出 PDF 格式乱掉 ...

  6. delphi xe10 FMX 启动参数

    关于 Delphi Xe10 FMX 启动参数  需要在启动窗口前来调用 也就是在bar文件修改 如果参数多可以用json来 uses system.SysUtils; var param: stri ...

  7. kibana内存设置

    kibana是一个基于NodeJS的单页web应用.而NodeJS则是基于Chrome V8引擎的.V8引擎对于内存的使用是有限制的,默认情况下,64位系统下约为1.4GB,32位系统下约为0.7GB ...

  8. ZooKeeper学习笔记(一)——概述

    zookeeper学习笔记(一)--概述 1. 概述 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目.zookeeper从设计模式的角度来理解:是一个基于观察者设计 ...

  9. SpringBoot整合freemarker 引用基础

    原 ElasticSearch学习笔记Ⅲ - SpringBoot整合ES 新建一个SpringBoot项目.添加es的maven坐标如下: <dependency> <groupI ...

  10. oracle 数据库触发器,插入更新时间戳

    1.首先建立一个测试表 CREATE TABLE TestTragger( UserId int Primary Key, Name VARCHAR() Not Null, CreateTime Ti ...