Java代码
package xigua;
import java.util.Arrays;
import scala.Tuple2;
/**
*
*/
public class AdaBoostSquaredExample
{
private static int dataLength = 10;
private static int numIterations = 6;
private static double[] SAMPLE = new double[]{
5.56, 5.70, 5.91, 6.40, 6.80, 7.05, 8.90, 8.70, 9.00, 9.05
};
public static void main( String[] args )
{
Data[] datas = genData( );
Arrays.sort( datas, ( s1, s2 ) -> s1.x - s2.x );
for ( int i = 0; i < datas.length; i++ )
{
// System.out.println( data[i] );
}
double[] bins = genBins( datas );
double[] ws = new double[datas.length];
Arrays.fill( ws, 1.0 / datas.length );
double[] alphas = new double[numIterations];
Arrays.fill( alphas, 0.0 );
BaseFunction[] fs = new BaseFunction[numIterations];
for ( int i = 0; i < numIterations; i++ )
{
Tuple2<BaseFunction, Double> t = findBestFunction( datas, bins );
fs[i] = t._1;
updateData( datas, t._1( ) );
}
// Test
double totalError = 0.0;
for ( int i = 0; i < datas.length; i++ )
{
double value = testData( datas[i], fs );
System.out.println( SAMPLE[i] + "===" + value );
double temp = SAMPLE[i] - value;
totalError = totalError + temp * temp;
}
System.out.println( "TotalError == " + totalError );
System.out.println( "Done" );
}
private static double testData( Data data, BaseFunction[] fs )
{
double value = 0.0;
for ( int i = 0; i < fs.length; i++ )
{
if ( data.x <= fs[i].bin )
{
value = value + fs[i].leftMean;
}
else
{
value = value + fs[i].rightMean;
}
}
return value;
}
private static void updateData( Data[] data, BaseFunction f )
{
double total = 0.0;
for ( int i = 0; i < data.length; i++ )
{
if ( data[i].x <= f.bin )
{
data[i].y = data[i].y - f.leftMean;
}
else
{
data[i].y = data[i].y - f.rightMean;
}
}
}
private static Tuple2<BaseFunction, Double> findBestFunction( Data[] data,
double[] bins )
{
double minSq = Double.MAX_VALUE;
BaseFunction best = null;
for ( int i = 0; i < bins.length; i++ )
{
BaseFunction f = new BaseFunction( bins[i] );
double leftTotal = 0.0;
int leftCount = 0;
double rightTotal = 0.0;
int rightCount = 0;
for ( int j = 0; j < data.length; j++ )
{
if ( data[j].x < bins[i] )
{
leftTotal = leftTotal + data[j].y;
leftCount++;
}
else
{
rightTotal = rightTotal + data[j].y;
rightCount++;
}
}
double leftMean = leftTotal / leftCount;
double rightMean = rightTotal / rightCount;
double totalSq = 0.0;
for ( int j = 0; j < data.length; j++ )
{
if ( data[j].x < bins[i] )
{
double value = data[j].y - leftMean;
totalSq = totalSq + value * value;
}
else
{
double value = data[j].y - rightMean;
totalSq = totalSq + value * value;
}
}
if ( totalSq < minSq )
{
best = f;
minSq = totalSq;
best.leftMean = leftMean;
best.rightMean = rightMean;
}
}
return new Tuple2<BaseFunction, Double>( best, minSq );
}
private static double[] genBins( Data[] data )
{
if ( data.length == 0 )
{
return new double[0];
}
double[] bins = new double[data.length - 1];
for ( int i = 1; i < data.length; i++ )
{
bins[i - 1] = ( data[i - 1].x + data[i].x ) / 2.0;
}
return bins;
}
private static Data[] genData( )
{
Data[] retValue = new Data[dataLength];
for ( int i = 0; i < dataLength; i++ )
{
retValue[i] = new Data( );
retValue[i].x = i + 1;
retValue[i].y = SAMPLE[i];
}
return retValue;
}
private static class Data
{
private int x;
private double y;
@Override
public String toString( )
{
return "X == " + x + "And Y == " + y;
}
}
private static class BaseFunction
{
private double bin;
private double leftMean, rightMean;
BaseFunction( )
{
this( -1 );
}
BaseFunction( double b )
{
this.bin = b;
}
}
}
相关知识
java版本电子宠物游戏代码
java计算机毕业设计唯爱宠物健康管理系统(开题+程序+论文)
计算机毕业设计 SSM+Vue宠物管理系统 宠物商城 宠物用品购物平台 宠物领养救助系统 Java Vue MySQL数据库 远程调试 代码讲解
Java入门
毕业设计:基于java的宠物管理系统设计与实现
编写Java程序模拟主人养宠物 java写一个宠物系统
java毕设安卓宠物店管理网站(开题+源码)
基于ssm+vue宠物医院预约管理系统(开题报告+程序+论文+java)
Java计算机毕业设计云养宠物系统(开题+源码+论文)
java毕设安卓宠物app(开题+源码)
网址: 李航统计分析AdaBoost 提升书例子java代码 https://m.mcbbbk.com/newsview145507.html
上一篇: 挑战德国小学四年级奥数题,移动两 |
下一篇: python 测试题1 |