资源简介
根据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
- 上一篇:超强SWING JAVA固定资产管理系统
- 下一篇:黑客hacker输入法
评论
共有 条评论