特征选择算法java实现_relief算法特征选择

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]);

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

freemarker跳出循环

break语句跳出当前循环&#xff0c;如下: <#list table.columns as c> <#if c.isPK> <#assign pkNamec.columnName?cap_first /> <#break> </#if> </#list>转载于…

多线程程序排错总结

先不考虑其他因素&#xff0c;直接干掉密集IO操作&#xff0c;把并行IO变成串行IO 要沉下心来&#xff0c;先浏览一遍代码&#xff0c;看看是否有有问题的地方&#xff0c;首先找加锁的地方 没有办法的办法是&#xff0c;用二分法&#xff0c;一行一行的来定位转载于:https://w…

java如何将数据保存为xml6_用Java实现可保存状态的数据库生成XML树,源码来了(9)...

用Java实现可保存状态的数据库生成XML树&#xff0c;源码来了(9)时间&#xff1a;2006/7/19 5:38:30作者&#xff1a;佚名人气&#xff1a;306.3.2.Servlet源码1.RefreshServlet.javapackage com.sitechasia;import javax.servlet.*;import javax.servlet.http.*;import java.i…

企业服务总线全双工异步通信机

为了实现系统的高可靠性、高可用性和并行处理能力&#xff0c;我们经常使用一些负载均衡设备&#xff08;例如F5&#xff09;等集群解决方案。但&#xff0c;会有一些特殊的情况下&#xff0c;。例如&#xff0c;长连接、特殊的技术协议。不可用F5和其他设备来解决&#xff0c;…

java druid jdbc例子_JDBC【使用Druid连接数据库,DBUtils工具类的使用】

Druid连接数据库&#xff0c;DBUtils工具类的使用1.在maven中添加Druid依赖com.alibabadruid1.2.02.封装Druid连接方法import com.alibaba.druid.pool.DruidDataSource;import com.alibaba.druid.pool.DruidDataSourceFactory;import java.io.IOException;import java.io.Input…

TimerTask定时任务

web.xml <listener><listener-class>com.sign.listener.NFDFlightDataTaskListener</listener-class></listener> 监听器类 package com.sign.listener;import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener;impor…

java前后端接口文档_前后端交互接口设计规范

在开发web应用的时候&#xff0c;往往会涉及到一个问题&#xff0c;前端后接口定义的问题。接口定义设计的好坏很大程度上能影响一个项目的进度和可扩展性。但是前辈们在这个问题上留下了非常宝贵的一些常规的设计思路&#xff0c;值得我们参考。1、后端设计统一的返回模型在与…

2015 多校第三场

1002 求max&#xff08;f(a),f(b)&#xff09;, f为不重复的素因子个数&#xff0c; 在数据要求以内 &#xff0c; 每个数最多有7个&#xff0c;可以打表。 1 /*Author :usedrose */2 /*Created Time :2015/7/29 11:32:09*/3 /*File Name :2.cpp*/4 #include <cstdio>5 …

java多线程必须掌握吗_多线程模式有什么作用(java多线程必须掌握的知识)

什么叫多进程&#xff1f;在预估中&#xff0c;过程是已经实行的计算机语言的一个案例。或是简易地说&#xff0c;运作程序流程也称之为过程。多进程代表着“在单独计算机软件中具备2个或更好几个CPU。比如&#xff0c;假如计算机软件具备双核四线程&#xff0c;而且另外运作(实…

java配置irport,一个production模式下的Ror环境搭建-airport -JavaEye技术社区

比较了一些ROR的生产环境&#xff0c;经过测试&#xff0c;还是选用了mongrelapache的方式。1.download安装包:httpd-2.2.3.tar.gz ,apache服务器ruby-1.8.5.tar.gzrubygems-0.9.0.tgzmongrel-0.3.13.4.gem2.安装rubytar zxvf ruby-1.8.5.tar.gz./configuremakemake install3.安…

php ?redis,PHP使用Redis存储Session

对于大访问量的网站来说&#xff0c;会有许多的客户端和服务端建立链接&#xff0c;就会生成许多 Session 文件&#xff0c;由于 Session 文件是存储在硬盘上的&#xff0c;因此每次服务器去读取这些 Session 文件都要经过许多的 I/O 操作。PHP 中可使用 session_set_save_hand…

微信支付现金红包接口(转)

微信支付现金红包接口正式开放&#xff0c;只需开通微信支付&#xff0c;即可接入现金红包。通过现金红包接口&#xff0c;公众号开发者可以策划相关运营活动&#xff0c;向用户发放微信支付现金红包&#xff0c;更好的达到品牌推广及回馈用户的效果。具体能力如下&#xff1a;…

php 打印对象到文件,php实现将数组或对象写入到文件的方法小结【三种方法】...

本文实例讲述了php实现将数组或对象写入到文件的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;php将数组或对象原样写入或保存到文件有三种方法可以实现第一种方法是使用serialize&#xff0c;第二种方法是使用print_r&#xff0c;第三种方法是使用var_export&a…

The return types for the following stored procedures could not be detected

1、使用dbml映射数据库&#xff0c;添加存储过程到dbml文件时报错。 2、原因&#xff1a;存储过程中使用了临时表 3、解决方案 3.1 通过自定义表值变量实现 Ex: DECLARE TempTable TABLE ( AttributeID INT, Value NVARCHAR(200) ) INSERT INTO TempTable Select * from Attrib…

webstock php,workerman_connection

workerman_connection 测试WebStock 功能Description整理PHP 实现webstock 功能的相关流程。感谢workerman 开发作者提供开源组件。安装 composer# curl -sS https://getcomposer.org/installer | php如果安装 composer 提示PHP 版本不够按照如下处理&#xff0c;否则跳过。提示…

短信通信的几种情况和CMS错误

1&#xff0e; 如何与GSM MODEM建立通信联系 2&#xff0e; 不能与GSM MODEM进行正常的通信或总是在仿真终端上出现乱码 3&#xff0e; 如何才能知道错误代码 4&#xff0e; 发送短消息后&#xff0c;收到出错信息CMS ERROR 512 5&#xff0e; 发送短消息后&#xff0c;收到出错…

php+管道+pipe管道,angular2+管道pipe

一.什么是Pipe?就是管道&#xff0c;简单来说&#xff0c;管道的作用就是传输。并且不同的管道具有不同的作用。(其实就是处理数据)二.pipe用法{{ 输入数据 | 管道 : 管道参数}} (其中‘|’是管道操作符)三.Angular自带的pipe函数管道功能DatePipe 日期管道&#xff0c;格式…

[字符串]与[数组]的互相转换

1.字符串转换为数组 var a"1,2,3";var ba.split(,); 2.数组转换为字符串 var c[1,2,3];var dc.join(,); 转载于:https://www.cnblogs.com/zqzjs/p/4693849.html

java android 界面设计,Android精美登录界面设计

在网上在到一个登录界面感觉挺不错的&#xff0c;给大家分享一下~先看效果图&#xff1a;这个Demo除了按钮、小猫和Logo是图片素材之外&#xff0c;其余的UI都是通过代码实现的。一、背景背景蓝色渐变&#xff0c;是通过一个xml文件来设置的。代码如下&#xff1a;background_l…

linux查看文件大小

du -s [文件名] du -sh [文件名] ls -lh [文件名]转载于:https://www.cnblogs.com/chenqionghe/p/4694070.html