• 大小: 11KB
    文件类型: .zip
    金币: 2
    下载: 0 次
    发布日期: 2023-12-30
  • 语言: Java
  • 标签: adaboost  

资源简介

根据adaboost的经典流程编写的算法,其中弱分类器用阈值分类器来构建。

资源截图

代码片段和文件信息

package src;
import java.util.ArrayList;
import java.util.List;
import java.lang.Math;
public class adaboost {

public List items=new ArrayList();//数据集
public List Classify=new ArrayList();//每次迭代产生的弱分类器
public int T;//迭代次数
public float []weight_c;//弱分类器权重
public float totalWeights = 0 totalPos = 0 totalNeg = 0;

public adaboost(point[] Aint T)
{
for(point a:A)
{
items.add(a);
}
this.T=T;
for(point b:items)
b.weight=(float)1/A.length;                         //初始化样本权值
weight_c=new float[T];

}

public void count_weight()                //*权重归一化*/
{
totalWeights = 0;
totalPos=0;
totalNeg=0;
for(point s:items)
{
totalWeights+=s.weight;
if (s.pos_neg==1) totalPos +=s.weight;//计算出正负样本的权值和
else
totalNeg += s.weight;
}
for(point s:items)
{
s.weight/=totalWeights;
}
}



public void learning()                        //训练数据集
{
float total=0;
classiffier newclassiffier;
for(int i=0;i {

count_weight();

newclassiffier=findBest();

Classify.add(newclassiffier);

updateWeight(newclassiffieri);

System.out.println(“learningfor“+i+“times   “+“thresh“+newclassiffier.thresh+“   mark“+(newclassiffier.mark+1));

total+=weight_c[i];

//System.out.println(“count“+weight_c[i]);
}


for(int i=0;i {
weight_c[i]/=total;
System.out.println(“count“+weight_c[i]);

}


}

public void updateWeight(classiffier tempint index)//每次迭代完成后,依据该次迭代产生的最优弱分类器,更新数据权值
{
weight_c[index]=(float) Math.log((1-temp.e)/temp.e);
for(point s:items)
{
if(temp.classify(s)==s.pos_neg)
s.weight*=Math.exp(temp.e/(-1+temp.e));
else
s.weight*=Math.exp(temp.e/(1-temp.e));
}
}

public classiffier findBest()//每次迭代,产生最优的弱分类器,并将弱分类器存入Classify中
{
classiffier temp=new classiffier(001false);
for(int i=0;i {
classiffier temp1=findthresh(i);
if(temp1.e temp=temp1;

}

return temp;


}

public float min(float a float b)
{
return(a <= b ? a : b);
}

public classiffier findthresh(int Mark)//对每个维度的样本集,产生一个弱分类器,Mark为数据维度标志
{
float e=0 besterr =(float)1.0;
double thrfinal_thr=0;
float bPos = 0 bNeg = 0;
sort(Mark);
boolean flag=false;
for(int i=0;i {

if(items.get(i).pos_neg==1)  bPos +=items.get(i).weight;
else bNeg += items.get(i).weight;
e = min(totalNeg-bNeg+bPos totalPos-bPos+bNeg);

thr = (items.get(i).att[Mark]+ items.get(i+1).att[Mark]) / 2;


if (e {
besterr = e;
if(e==totalNeg-bNeg+bPos) 
flag=true;
else flag=false;
final_thr = thr;
}
}
classiffier subclassiffier=new classiffier(Markfinal_thrbesterrflag);
return subclassiffier;
}


public void sort(int I)//按照I维数据,将数据集重新排序,以供产生每个维度的threshold    (可以用归并排序来提高速度)
{

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2014-03-06 18:43  AdaBoostNew1\
     文件         301  2014-03-06 09:56  AdaBoostNew1\.classpath
     文件         388  2014-03-06 09:56  AdaBoostNew1\.project
     目录           0  2014-03-06 18:43  AdaBoostNew1\.settings\
     文件         598  2014-03-06 09:56  AdaBoostNew1\.settings\org.eclipse.jdt.core.prefs
     目录           0  2014-03-06 18:43  AdaBoostNew1\bin\
     目录           0  2014-03-06 18:43  AdaBoostNew1\bin\src\
     文件         260  2014-03-06 17:14  AdaBoostNew1\bin\src\MergeSort.class
     文件        4741  2014-03-06 17:01  AdaBoostNew1\bin\src\adaboost.class
     文件         788  2014-03-06 16:57  AdaBoostNew1\bin\src\classiffier.class
     文件         621  2014-03-06 10:01  AdaBoostNew1\bin\src\point.class
     文件        2036  2014-03-06 17:04  AdaBoostNew1\bin\src\test.class
     目录           0  2014-03-06 18:43  AdaBoostNew1\src\
     目录           0  2014-03-06 18:43  AdaBoostNew1\src\src\
     文件          47  2014-03-06 17:14  AdaBoostNew1\src\src\MergeSort.java
     文件        3631  2014-03-06 17:01  AdaBoostNew1\src\src\adaboost.java
     文件         653  2014-03-06 16:57  AdaBoostNew1\src\src\classiffier.java
     文件         352  2014-03-06 10:01  AdaBoostNew1\src\src\point.java
     文件        1251  2014-03-06 17:04  AdaBoostNew1\src\src\test.java

评论

共有 条评论

相关资源