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)是在建模之前的重要一步.数据接口越 ...
随机推荐
- DL/T645-2007 及 Modbus-RTU智能电表调试工具
最近在做微信门禁,智能电表采集,智能水表采集项目时,发现网上很多调试工具用起来不顺手,电脑里面起码下了五六个软件. 好不容易弄清楚了,就自己写一个工具,方便自己使用,也顺便造福一下其他人吧
- vue双循环或者多循环作用于同一元素时,在外套template标签
如图,两个v-for,都是要循环创建tr标签.同理,v-if也是套template
- C#使用cmd运行命令并返回控制台输出信息
public static string RunCmd(string cmd){ cmd = cmd.Trim().TrimEnd('&') + "&exit";/ ...
- WebGL学习笔记二——绘制基本图元
webGL的基本图元点.线.三角形 gl.drawArrays(mode, first,count) first,代表从第几个点开始绘制即顶点的起始位置 count,代表绘制的点的数量. mode,代 ...
- Dockerfile语法梳理
Dockerfile语法 我们先来看一下上篇的 Dockerfile #获取base image FROM adoptopenjdk/openjdk8:latest #类似于执行 linux指令 RU ...
- chrome表单自动填充如何取消
autocomplete="new-password"
- SQL Server 参数嗅探问题
摘要 MSSQL Server参数嗅探既是一个涉及知识面非常广泛,又是一个比较难于解决的课题,即使对于数据库老手也是一个比较头痛的问题.这篇文章从参数嗅探是什么,如何产生,表象是什么,会带来哪些问题, ...
- Java中是使用增强for的null问题
在使用List和Map等集合时,我们经常会使用增强for来进行遍历.但是这里面会存在一些问题.比如当你进行数据库查询是,得到的返回结果是List集合时,如果没有查询到符合要求的数据时List集合时nu ...
- 【华为敏捷/DevOps实践】7. 敏捷,DevOps,傻傻不分清楚【华为云技术分享】
文:姚冬(华为云DevCloud首席技术布道师,资深DevOps与精益/敏捷专家,金融解决方案技术Leader,中国DevOpsDays社区核心组织者) 前言 敏捷是什么?DevOps是什么?两者有什 ...
- ChineseNumber 转换
中文数字转换 /** * <html> * <body> * <P> Copyright 1994 JsonInternational</p> * &l ...