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)是在建模之前的重要一步.数据接口越 ...
随机推荐
- 创建Windows Service
基本参照使用C#创建Windows服务,添加了部分内容 目录 创建Windows Service 可视化管理Windows Service 调试 示例代码 创建Windows Service 选择C# ...
- 【Spring Boot学习之十】整合Dubbo
环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 参考以下两篇文章,总结的很全面: springboot整合最新版dubbo以及dubbo-admin的安装使用Spri ...
- SaltStack 是一个服务器基础架构集中化管理平台
SaltStack详细部署 一.基础介绍============================================================================== ...
- 电视CI卡详解
CAM卡中文名视密卡,它是一种数字视频条件接收模块,是一个连接电视机与外部信号源的设备.它可以将压缩的数字信号转成电视内容,并在电视机上显示出来.CAM卡(亦称大卡)和智能卡(亦称小卡)配合使用,插入 ...
- python入门之与用户交互
目录 一.程序与用户交互 1.1 什么是与用户交互 1.2 为什么要与用户交互 1.3 如何与用户交互 1.4 python2和python3中input的区别 1.4.1 python3中的inpu ...
- Kaldi安装
Kaldi是基于C++开发并遵守Apache License v2.0的一款语音识别工具包,是目前最流行的ASR工具之一,本文基于Ubuntu 18.04 LTS介绍了如何安装Kaldi. 首先按照官 ...
- MVC路由规则
1 可以创建多条路由规则,每条路由规则的那么属性不同 2路由规则是有顺序的.如果被前面的规则匹配了,那么后面的规则就没机会了 3 constraints 约束: 4namespaces 命名空间 5r ...
- 用LabVIEW做声源定位系统
前一阵子,研发部举办了为期三天的第一届Innovation Day,让大家用3天时间去完成工作之外的一些创意.有人做微信小程序,有人继续研究一些工作中用到的Tool,有人把一直想解决而没时间解决的老b ...
- Linux 生成随机mac地址,并固化到本地
前言: 将Mac地址随机化并固化到本地可以有效避免同一个网络内,mac地址冲突导致的网络阻塞问题. 以下是有关的方法: 1.使用$RANDOM和md5sum(嵌入式无需移植其他软件的优秀可选方案) M ...
- nginx+lua+storm的热点缓存的流量分发策略自动降级
1.在storm中,实时的计算出瞬间出现的热点. 某个storm task,上面算出了1万个商品的访问次数,LRUMap 频率高一些,每隔5秒,去遍历一次LRUMap,将其中的访问次数进行排序,统计出 ...