给定训练集{(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. Dev系列控件的AJAX使用Demo

    一.Dev Data Edit控件通用属性以及方法: 属性 1.GetEnabled():返回控件是否为可操作状态 2.GetText():返回控件的Text的值 3.SetEnabled():设置控 ...

  2. linq to entity group by 时间

    CreationTime是DateTime类型 group by 年/月/日/小时 group by 年 (from d in YourData.OrderBy(x => x.CreationT ...

  3. WebGL学习笔记二——绘制基本图元

    webGL的基本图元点.线.三角形 gl.drawArrays(mode, first,count) first,代表从第几个点开始绘制即顶点的起始位置 count,代表绘制的点的数量. mode,代 ...

  4. IDEA中MavenWeb项目没有新建servlet文件

    解决方案: https://blog.csdn.net/Delicious_Life/article/details/89515363

  5. python教程:用简单的Python编写Web应用程序

    python现在已经成为很多程序员关注的编程语言之一,很多程序员也都开始弄python编程,并且很多时候都会用自己的操作来选择,而现在不管是程序员还是少儿编程,都会有python这门课,今天就和大家分 ...

  6. java的线程池的使用

    1.线程池的创建 1.首先创建一个类,然后实现Runnable接口 public class ExectorTest implements Runnable {} 2.首先声明一个线程池的全局变量 p ...

  7. Go调用Delphi编写的DLL

    参数整数没有问题,但是如果是字符串,要注意几个细节. 记录如下: 1.Delphi定义函数的时候,字符串参数需要使用PChar类型 2.Go传递参数的时候要将字符串转成UTF16的指针,接收的时候采用 ...

  8. Java-手动搭建SSH(maven版)

    创建maven项目 把maven项目变为动态网站,步骤如下: 项目结构图如下: 开始搭建spring+springmvc+Hibernate项目 环境版本就不多说了,直接贴出pom.xml文件 < ...

  9. matplotlib 中文乱码问题

    matplotlib是Python著名的绘图库,默认并不支持中文显示,因此在不经过修改的情况下,无法正确显示中文. 本文将介绍解决这一问题的方法. 不修改文件,加两行代码即可: matplotlib. ...

  10. 「UR#5」怎样跑得更快

    「UR#5」怎样跑得更快 膜这个您就会了 下面是复读机mangoyang 我们要求 \[ \sum_{j=1}^n \gcd(i,j)^{c-d} j^d x_j=\frac{b_i}{i^d} \] ...