1.[文件]

Relief算法程序.txt ~ 6KB

下载(44)

package com.relief.algorithm;

import java.util.Random;

import java.util.Set;

import java.util.ArrayList;

import java.util.Collections;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

public class Relief {

public Relief(){

}

public double[][] matrix;

public int length;

public int width;

public double[] weight;

//样本抽样次数

public int m;

//样本数量

public int k;

public int n_vars;

/**

* relief算法

*/

public void relief(){

matrix = new double[length][width];

//将样本数据赋值到matrix中

//权重值全部置为0

weight = new double[n_vars];

for(int i = 0; i < n_vars; i++){

weight[i] = 0.0;

}

//属性的最大值和最小值

double[] max = new double[n_vars];

double[] min = new double[n_vars];

for(int i = 0; i < width; i++){

for(int j = 0; j < length; j++){

double d = matrix[j][i];

if(d > max[i]){

max[i] = d;

}

if(d < min[i]){

min[i] = d;

}

}

}

//随机抽样m次

for(int i = 0; i < m; i++){

//随机抽取样本R

Random random = new Random();

int R_index = random.nextInt(width);

double[] R = new double[width];

for(int index = 0; index < width; index++){

R[index] = matrix[R_index][index];

}

//计算出距离样本R最近的样本和最远的样本

double maxvalue = 0.0;

double minvalue = 0.0;

int maxrow = 0;

int minrow = 0;

double distince = 0.0;

for(int len = 0; len < length; len++){

if(len != R_index){

for(int wid = 0; wid < width; wid++){

distince += Math.pow(R[wid]-matrix[len][wid], 2);

}

distince = Math.sqrt(distince);

if(len == 0){

maxvalue = distince;

minvalue = distince;

}

if(distince > maxvalue){

maxvalue = distince;

maxrow = len;

}

if(distince < minvalue){

minvalue = distince;

minrow = len;

}

}

}

int H_index = minrow;

double[] H = new double[width];

for (int index = 0; index < width; index++) {

H[index] = matrix[H_index][index];

}

int M_index = maxrow;

double[] M = new double[width];

for(int index = 0; index < width; index++){

M[index] = matrix[M_index][index];

}

//relief计算权重

for(int j = 0; j < n_vars; j++){

weight[j] = weight[j]-(Math.abs(R[j]-H[j])/(max[j]-min[j]))/m + (Math.abs(R[j]-M[j])/(max[j]-min[j]))/m;

}

}

for(int i = 0; i < width; i++){

System.out.println(weight[i]);

}

}

//有t个不同类

public int t;

/**

* reliefF算法

*/

public void reliefF(){

matrix = new double[length][width];

//将样本数据赋值到matrix中

//权重值全部置为0

weight = new double[n_vars];

for(int i = 0; i < n_vars; i++){

weight[i] = 0.0;

}

//属性的最大值和最小值

double[] max = new double[n_vars];

double[] min = new double[n_vars];

for(int i = 0; i < width; i++){

for(int j = 0; j < length; j++){

double d = matrix[j][i];

if(d > max[i]){

max[i] = d;

}

if(d < min[i]){

min[i] = d;

}

}

}

//随机抽样m次

Map map = new HashMap();

double[][] H = new double[k][width];

double[][] M = new double[k][width];

List lstM = new ArrayList();

double[] R = new double[width];

for(int i = 0; i < m; i++){

//随机抽取样本R

Random random = new Random();

int R_index = random.nextInt(width);

for(int index = 0; index < width; index++){

R[index] = matrix[R_index][index];

}

//计算所有数据到样本的距离

for(int len = 0; len < length; len++){

double distince = 0.0;

int row = 0;

if(len != R_index){

for(int wid = 0; wid < width; wid++){

distince += Math.pow(R[wid]-matrix[len][wid], 2);

}

distince = Math.sqrt(distince);

row = len;

map.put(distince, row);

}

}

//对样本距离排序

Set set = map.keySet();

List lst = new ArrayList(set);

Collections.sort(lst);

//获取距离最近的k个样本作为H

for(int a = 0; a < k; a++){

double d = lst.get(a);

int r = map.get(d);

for(int b = 0; b < width; b++){

H[a][b] = matrix[r][b];

}

}

//假设有t个不同分类,在每个不同类中获取k个样本

//在数据中随机获取k个样本作为M(C)

for(int a = 0; a < t; a++){

double[] RD = new double[width];

//随机抽取样本

Random rd = new Random();

int id = rd.nextInt(width);

while(true){

if(id != R_index){

break;

}

else{

id = rd.nextInt(width);

}

}

for(int index = 0; index < width; index++){

R[index] = matrix[R_index][index];

}

//计算所有数据到样本的距离

Map maprd = new HashMap();

for(int len = 0; len < length; len++){

double distince = 0.0;

int row = 0;

if(len != R_index){

for(int wid = 0; wid < width; wid++){

distince += Math.pow(R[wid]-matrix[len][wid], 2);

}

distince = Math.sqrt(distince);

row = len;

maprd.put(distince, row);

}

}

//对样本距离排序

Set setrd = map.keySet();

List lstrd = new ArrayList(set);

Collections.sort(lst);

//获取不同类距离最近的k个样本作为

for(int q = 0; q < k; q++){

double d = lst.get(q);

int r = map.get(d);

for(int p = 0; p < width; p++){

M[q][p] = matrix[r][p];

}

}

lstM.add(M);

}

}

//计算H的diff

double[] tmpval1 = new double[n_vars];

double[] tmpval2 = new double[n_vars];

for(int i = 0; i < n_vars; i++){

for(int j = 0; j < k; j++){

tmpval1[i] += Math.abs(R[i]-H[j][i])/(max[i]-min[i]);

}

}

//计算不同类的diff

double[] value = new double[n_vars];

for(double[][] d : lstM){

for(int i = 0; i < n_vars; i++){

for(int j = 0; j < k; j++){

value[i] += Math.abs(R[i]-M[j][i])/(max[i]-min[i]);

}

}

}

for(int i = 0; i < n_vars; i++){

tmpval2[i] += value[i]/t;

}

//计算权重

for(int j = 0; j < n_vars; j++){

weight[j] = weight[j]- tmpval1[j]/(m*k) + tmpval2[j]/(m*k);

}

for(int i = 0; i < width; i++){

System.out.println(weight[i]);

}

}

}

特征选择算法java实现_relief算法特征选择相关推荐

  1. svm算法 java实现_SVM算法实现(一)

    关键字(keywords):SVM 支持向量机 SMO算法 实现 机器学习 假设对SVM原理不是非常懂的,能够先看一下入门的视频,对帮助理解非常实用的,然后再深入一点能够看看这几篇入门文章,作者写得挺 ...

  2. JAVA分析html算法(JAVA网页蜘蛛算法)

    近来有些朋友在做蜘蛛算法,或者在网页上面做深度的数据挖掘.但是遇到复杂而繁琐的html页面大家都望而却步.因为很难获取到相应的数据. 最古老的办法的是尝试用正则表达式,估计那么繁琐的东西得不偿失,浪费 ...

  3. 算法 | Java 常见排序算法(纯代码)

    目录 汇总 1. 冒泡排序 1. 冒泡排序 每轮循环确定最值: public void bubbleSort(int[] nums) { int temp; boolean isSort = fals ...

  4. java实现棋盘覆盖算法,java 棋盘覆盖算法

    import java.util.Scanner; /** 棋盘覆盖 */ public class Arithmetic { /** 被覆盖后显示的数字,会根据覆盖的顺序有所递增 */ privat ...

  5. bm25算法Java代码_BM25算法在Lucene中的应用

    Lucene是apache软件基金会jakarta项目组的一个子项目,是一个用Java写的全文检索引擎工具包,可以方便的集成到系统中提以提供高效的检索能力,Lucene核心功能分为建索和检索两部分.而 ...

  6. 算法python实现_Relief算法python实现

    文章目录 一.算法流程图 二.代码步骤 1.第一步:定义类和init方法 2.第二步:数据处理 3.第三步:通过计算距离,找出猜错近邻和猜对近邻 4.第四步:计算特征权重 5.第五步:根据权重过滤式选 ...

  7. 数据结构及算法 | Java数据结构——回溯算法之子集树

    1.介绍一下子集树,什么是子集树? 当所给问题是从n个元素的集合S中找出满足某些条件或者性质的子集时,解空间是子集树: 比如典型的0-1背包问题-----and-----轮船装载问题: 解空间 就是指 ...

  8. l bfgs算法java代码_L-BFGS算法介绍

    本文由作者林洋港授权网易云社区发布. 一. L-BFGS是什么 L-BFGS是解无约束非线性规划问题最常用的方法,具有收敛速度快.内存开销少等优点,在机器学习各类算法中常有它的身影.简单的说,L-BF ...

  9. 通过网页查看服务器算法,java分析html算法(java网页蜘蛛算法示例)

    遇到复杂而繁琐的html页面大家都望而却步.因为很难获取到相应的数据. 最古老的办法的是尝试用正则表达式,估计那么繁琐的东西得不偿失,浪费我们宝贵的时间. 第二个办法用开源组织htmlparser的包 ...

最新文章

  1. 云计算时代,你真的懂 Docker 吗?
  2. 如何用TensorFlow在安卓设备上实现深度学习推断
  3. python编程能力等级测试_56岁的潘石屹参加全国青少年编程能力等级测试,你还在问编程是什么?...
  4. 关于[入行几年后,你的未来应该在哪里]的思考
  5. 「Self-driving: Perception」感知总览
  6. 5G概念被热炒,运营商吃相不要太难看
  7. freemarker 自己常用方法
  8. 团队如何开会,开会准则
  9. xp桌面图标阴影解决方案
  10. U3D手游《苍穹变》性能优化经验谈
  11. 钉钉机器人关键词应答_Gmail 邮件推送到钉钉群机器人(详细)教程|国内接收 Gmail 邮件...
  12. 【3】WEB安全学习----HTTP协议
  13. sql盲注 各种方法拿到 管理员账户和密码
  14. 【VUE项目实战】64、CND优化ElementUI以及首页内容定制
  15. 输入一行字符,统计其中字母、数字和其他符号的个数。例如,输入:As123 g1b,9 输出:字母个数:4 数字字符个数:5 其他字符个数:2
  16. 3种查看网站流量的方式
  17. jsqlparser 简介、中文文档、中英对照文档 下载
  18. PS教程 教你制作古老的石头
  19. IDEA修改字体大小 导航栏字体 编辑器字体
  20. ios10.2重新安装cydia(包含恢复数据库)

热门文章

  1. 最优化作业第6章——无约束多维非线性规划方法
  2. 学习笔记(27):Python网络编程并发编程-GIL与多线程
  3. 学习笔记(19):Python网络编程并发编程-互斥锁
  4. linux一行多个命令行,如何在一行中运行多个Linux命令
  5. java 入门 博客园_javaweb入门
  6. 实验七:Xen环境下cirrOS的安装配置
  7. 解决mac升级后,出现的 xcrun: error: invalid active developer path, missing xcrun 错误
  8. UML入门之类图教程
  9. 简单的反射 把datatable 转换成list对象
  10. 浅析SQL Server 2005中的主动式通知机制