Relief 过滤式特征选择
给定训练集{(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 过滤式特征选择的更多相关文章
- 特征选择与稀疏学习(Feature Selection and Sparse Learning)
本博客是针对周志华教授所著<机器学习>的"第11章 特征选择与稀疏学习"部分内容的学习笔记. 在实际使用机器学习算法的过程中,往往在特征选择这一块是一个比较让人模棱两可 ...
- Machine Learning-特征工程之特征选择
特征工程之特征选择 目录 简介 1 Filter(过滤式选择) 1.1 移除低方差特征(variance threshold) 1.2 信息增益(information gain) 1.3 单变量特征 ...
- 学习理论之正则化(Regularization)与模型选择
一.引言 对于一个学习问题,可以假设很多不同的模型,我们要做的是根据某一标准选出最好的模型.例如,在多项式回归中,对于我们的假设模型,我们最要紧的是决定 k 到底取多少合适,能不能有一种方法可以自动选 ...
- 【机器学习PAI实践一】搭建心脏病预测案例
一.背景 心脏病是人类健康的头号杀手.全世界1/3的人口死亡是因心脏病引起的,而我国,每年有几十万人死于心脏病. 所以,如果可以通过提取人体相关的体侧指标,通过数据挖掘的方式来分析不同特征对于心脏病的 ...
- TensorFlow系列专题(二):机器学习基础
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/ ,学习更多的机器学习.深度学习的知识! 目录: 数据预处理 归一化 标准化 离散化 二值化 哑编码 特征 ...
- 浅谈关于特征选择算法与Relief的实现
一. 背景 1) 问题 在机器学习的实际应用中,特征数量可能较多,其中可能存在不相关的特征,特征之间也可能存在相关性,容易导致如下的后果: 1. 特征个数越多,分析特征.训练模型所需的时间就越 ...
- 特征选择: 卡方检验、F 检验和互信息
特征选择是特征工程中的重要一环,其主要目的是从所有特征中选出相关特征 (relevant feature),或者说在不引起重要信息丢失的前提下去除掉无关特征 (irrelevant feature) ...
- 挑子学习笔记:特征选择——基于假设检验的Filter方法
转载请标明出处: http://www.cnblogs.com/tiaozistudy/p/hypothesis_testing_based_feature_selection.html Filter ...
- 用信息值进行特征选择(Information Value)
Posted by c cm on January 3, 2014 特征选择(feature selection)或者变量选择(variable selection)是在建模之前的重要一步.数据接口越 ...
随机推荐
- CSS继承控制:inherit、initial和unset
CSS里有三种常用的属性值继承方式:inherit,initial和unset.我们用一个简单的例子来演示一下: <ul style="color: green;"> ...
- ABP .NETCore更新数据库时一直连接的之前数据库
使用Update-Database -Verbose更新数据库时,在appsettings.json配置文件中已修改为新的连接字符串,但是使用命令更新数据库时仍然连接的是之前的数据库. 后来把代码移至 ...
- 海康—SADP激活(设备网络搜索)
海康sadp搜索工具(SADPTool)用于从网络上搜索同一网段内的所有在线设备.可以修改设备的缺省密码,修改网络IP地址及端口号 ,子网掩码及网关地址,IPV6地址网关地址,HTTP端口号和设备序列 ...
- python进阶---列表、字典、集合相关操作
基本概念 列表 序列是python中一个基本的数据结构,每个元素都有一个索引index 操作 # 创建列表 list = [] # 修改列表 list[2] = 2001 # 删除列表 del lis ...
- 【layui】获取layui弹窗的index并关闭
var index = parent.layer.getFrameIndex(window.name); //获取窗口索引 parent.layer.close(index); // 关闭当前laye ...
- CentOS 7 编译安装clang+llvm
天在CentOS上将最新版本的LLVM套件(LLVM,Clang和Libc++)编译安装好了,中间遇到了不少问题.虽然已经有很多博客介绍如何编译安装LLVM了,但是根据我自己亲身体验的情况来看,还是有 ...
- 简单工厂(SimpleFactory)模式
简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 简单工厂就是将多个if,else...代码 ...
- Java开发笔记(一百四十二)JavaFX的对话框
JavaFX的对话框主要分为提示对话框和文件对话框两类,其中提示对话框又分作消息对话框.警告对话框.错误对话框.确认对话框四种.这四种对话框都使用Alert控件表达,并通过对话框类型加以区分,例如Al ...
- Python之logging.basicConfig函数各参数
filename: 指定日志文件名 filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'a' format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所 ...
- SQL Join连接大小表在前在后的重要性(小表在前提高执行效率)
引用地址:https://blog.csdn.net/qq_30349961/article/details/82662550 http://blog.sina.com.cn/s/blog_6ff05 ...