亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? geneticweaklearner.cpp

?? WeakLearner,弱分類器
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//LAB_LicenseBegin==============================================================
//  Copyright (c) 2005-2006, Hicham GHORAYEB < ghorayeb@gmail.com >
//  All rights reserved.
//
//	This software is a Library for Adaptive Boosting. It provides a generic 
//	framework for the study of the Boosting algorithms. The framework provides 
//	the different tasks for boosting: Learning, Validation, Test, Profiling and 
//	Performance Analysis Tasks.
//
//	This Library was developped during my PhD studies at:
//	Ecole des Mines de Paris - Centre de Robotique( CAOR )
//	http://caor.ensmp.fr
//	under the supervision of Pr. Claude Laurgeau and Bruno Steux
//
//  Redistribution and use in source and binary forms, with or without
//  modification, are permitted provided that the following conditions are met:
//
//      * Redistributions of source code must retain the above copyright
//        notice, this list of conditions and the following disclaimer.
//      * Redistributions in binary form must reproduce the above copyright
//        notice, this list of conditions and the following disclaimer
//        in the documentation and/or other materials provided with the distribution.
//      * Neither the name of the Ecole des Mines de Paris nor the names of
//        its contributors may be used to endorse or promote products
//        derived from this software without specific prior written permission.
//
//  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
//  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
//  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
//  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
//  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
//  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
//  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
//  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
//  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
//  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
//  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//================================================================LAB_LicenseEnd
#include "GeneticWeakLearner.h"
#include "samples/learningsets/ILearningSet.h"
#include "samples/Sample.h"
#include "classifiers/features/ImageFeature.h"
#include "classifiers/features/ControlPointFeature.h"
#include "classifiers/features/IRandomWeakClassifierGenerator.h"

#include "LibAdaBoost/modules/options/GeneticWeakLearnerOptions.h"
using namespace modules::options;

#include "wlinterfaces/GeneticWeakLearnerInterface.h"
using namespace learners::wlinterfaces;

#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
using namespace std;

using namespace samples;
using namespace classifiers;
using namespace classifiers::features;
using namespace learners;

namespace learners{
	bool lessErr(const WeakClassifier *i1,const WeakClassifier *i2)
	{
		return i1->GetError() < i2->GetError();
	}
}

GeneticWeakLearner::GeneticWeakLearner()
:m_LearningSet	  ( NULL                      )
,m_RandomGenerator( NULL                      )
,m_nb_indiv		  ( GA_DEFAULT_NBR_INDIV      )
,m_winner_to_keep ( GA_DEFAULT_WINNER_TO_KEEP )
,m_looser_to_keep ( GA_DEFAULT_LOOSER_TO_KEEP )
,m_max_generation ( GA_DEFAULT_MAX_GENERATION )
,m_nb_mutation	  ( GA_DEFAULT_NBR_MUTATION   )
,m_interface      ( NULL                      )
,m_bestwc         ( t_indiv(NULL, 1.0)        )
{
	m_population.reserve( m_nb_indiv );
	m_StringLog.clear();
}

GeneticWeakLearner::GeneticWeakLearner(ILearningSet *learningSet)
:m_LearningSet    ( learningSet               )
,m_RandomGenerator( NULL                      )
,m_nb_indiv		  ( GA_DEFAULT_NBR_INDIV      )
,m_winner_to_keep ( GA_DEFAULT_WINNER_TO_KEEP )
,m_looser_to_keep ( GA_DEFAULT_LOOSER_TO_KEEP )
,m_max_generation ( GA_DEFAULT_MAX_GENERATION )
,m_nb_mutation	  ( GA_DEFAULT_NBR_MUTATION   )
,m_interface      ( NULL                      )
,m_bestwc         ( t_indiv(NULL, 1.0)        )
{
	m_population.reserve( m_nb_indiv );
	m_StringLog.clear();
}

GeneticWeakLearner::~GeneticWeakLearner()
{
	for(int i=0; i < m_population.size(); i++)
	{
		delete m_population[i];
		m_population[i] = NULL;
	}

	if( m_bestwc.first != NULL){
		delete m_bestwc.first;
	}

	m_population.clear();
}

// IWeakLearner
WeakClassifier *
GeneticWeakLearner::GetNewWeakClassifier(double &error)
{
	WeakClassifier *wc = NULL;

	// Initialize the Learner, random generation of the
	// initial population
	Reset();

	// Run the Genetic Algorithm 
	Learn();

	// Get the result of the genetic algorithm
	wc = (WeakClassifier *)m_bestwc.first->Clone();

	// Get the learning result
	error = m_bestwc.second;
	return wc;
}

// GA Protected Methods
void
GeneticWeakLearner::TestWeakClassifier(WeakClassifier *feature, const ILearningSet *learningSet)
{
	double err = 0.0;
	int nbTruePositive  = 0;
	int nbTrueNegative  = 0;
	int nbFalsePositive = 0;
	int nbFalseNegative = 0;

	//std::cout << "[CHECK POSITIVE SAMPLES]" <<std::endl;
	// CHECK POSITIVE SAMPLES
	for(unsigned i=0; i < learningSet->NbrOfPositiveSamples(); i++)
	{
		const Sample *sample = learningSet->GetPositiveSampleConstAt( i );

		int curClass = feature->Classify( sample );

		if( curClass == POSITIVE_CLASS_ID)
		{
			nbTruePositive++;
		}else{
			nbFalseNegative++;
			// INCREMENT ERROR
			err += sample->GetWeight();
		}
	}

	//std::cout << "[CHECK NEGATIVE SAMPLES]" <<std::endl;
	// CHECK NEGATIVE SAMPLES
	for(unsigned i=0; i < learningSet->NbrOfNegativeSamples(); i++)
	{
		const Sample *sample = learningSet->GetNegativeSampleConstAt( i );

		int curClass = feature->Classify( sample );

		if( curClass == NEGATIVE_CLASS_ID)
		{
			nbTrueNegative++;
		}else{
			nbFalsePositive++;
			// INCREMENT ERROR
			err += sample->GetWeight();
		}
	}

	//std::cout << "[SET THE ERROR]" <<std::endl;
	// SET THE ERROR
	feature->SetError( err );

	// LOG CLASSIFICATION RESULT FOR FURTHER PROCESSING
	feature->SetTruePositive( nbTruePositive );
	feature->SetTrueNegative( nbTrueNegative );
	feature->SetFalsePositive( nbFalsePositive );
	feature->SetFalseNegative( nbFalseNegative );
}

// IWeakLearner
void
GeneticWeakLearner::Learn(void)
{
	assert( m_LearningSet != NULL );

	const GeneticWeakLearnerInterface *myInterface = (const GeneticWeakLearnerInterface *)GetWeakLearnerInterface();

	ostringstream oStrLog;

	unsigned generation = 0;
	unsigned nbr_generation_no_improvement = 0;

	oStrLog.clear();

	/* TODO:: SAVE THE BEST FEATURE IN THE EVOLUTION POPULATION
	* from one iteration to another
	*/
	generation = 0;
	while( true ){
		// ITERATES OVER ALL THE INDIV IN THE POPULATION
		// APPLY EACH WEAK CLASSIFIER ON THE LEARNING SET
		// AND GET THE RESULT ERROR.
		GeneticWeakLearner::t_population::iterator it;
		for(it = m_population.begin(); it != m_population.end(); it++){
			// EVALUATE THE CURENT WEAK CLASSIFIER ON THE LEARNING SET
			WeakClassifier *wc = (*it);
			TestWeakClassifier(wc, m_LearningSet);
		}

		// SORT THE WEAK CLASSIFIERS IN THE POPULATION RESPECT TO ERROR
		std::sort(m_population.begin(), m_population.end(), lessErr );

		for(unsigned t=0; t < (m_population.size() - 1); t++)
		{
			//std::cerr << t << "-->"<< m_population[t]->GetError() << ", " << m_population[t+1]->GetError() << std::endl;
			assert( m_population[t]->GetError() <= m_population[t+1]->GetError());
		}

		// Clone The Best WeakClassifier
		WeakClassifier *cur_bestwc = (WeakClassifier *)m_population.front()->Clone();
		double cur_error = m_population.front()->GetError();
		
		// DO SOME LOG ON THAT STEP: Report results of this generation
		std::cout
			//<< "Current Error = "
			<< setprecision( 5 )
			<< setw( 7 )
			<< left
			<< cur_error << " c, "
			<< setprecision( 5 )
			<< setw( 7 )
			<< left
			<< m_bestwc.second << " l, "
			<< setfill(' ')
			<< setw( 4 )
			<< nbr_generation_no_improvement
			<< "th time"
			<< "("
			<< setw( 4 )
			<< cur_bestwc->GetTruePositive()
			<< "/"
			<< setw( 4 )
			<< m_LearningSet->NbrOfPositiveSamples() 
			<< " pos"
			<< ", "
			<< setw( 4 )
			<< cur_bestwc->GetTrueNegative() 
			<< "/" 
			<< setw( 4 )
			<< m_LearningSet->NbrOfNegativeSamples() 
			<< " neg"
			<< ", "
			<< setw( 4 )
			<< cur_bestwc->GetTrueNegative() + cur_bestwc->GetTruePositive()
			<< "/"
			<< setw( 4 )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久久久久免费看 | 国产清纯白嫩初高生在线观看91| 天天色天天操综合| 日韩一区二区影院| 国产一区二区成人久久免费影院| 国产亚洲一区字幕| 91麻豆免费看| 亚洲电影在线播放| 精品国产一区二区三区久久影院| 国产一区二区美女| 亚洲男同性恋视频| 欧美区一区二区三区| 久久99精品久久久久婷婷| 国产午夜精品久久久久久免费视 | 精品精品国产高清a毛片牛牛| 国产自产v一区二区三区c| 国产欧美一区二区三区鸳鸯浴 | 精品一区二区免费视频| 久久人人爽人人爽| 97久久精品人人爽人人爽蜜臀| 亚洲图片有声小说| 久久久www免费人成精品| 色噜噜偷拍精品综合在线| 蜜臀国产一区二区三区在线播放| 欧美国产欧美综合| 欧美精品在线视频| 国产69精品久久久久毛片| 亚洲小说春色综合另类电影| 精品国产成人在线影院| 色域天天综合网| 黄色日韩网站视频| 亚洲高清视频在线| 国产精品美女www爽爽爽| 欧美一区二区三区小说| 97精品久久久午夜一区二区三区 | 伦理电影国产精品| 亚洲欧美乱综合| 久久久久国产精品麻豆ai换脸 | 九九视频精品免费| 一区二区三区小说| 日本一区二区三区四区| 6080亚洲精品一区二区| 中文字幕一区二区三区不卡在线 | 亚洲男人天堂一区| 久久久亚洲高清| 91精品国产综合久久久蜜臀图片 | 91精品国产综合久久久久久久久久| 国产乱子伦视频一区二区三区| 亚洲午夜激情av| 亚洲日穴在线视频| 国产网站一区二区| 日韩视频一区在线观看| 欧美日韩一区二区三区视频| 成人黄色免费短视频| 国产综合久久久久久久久久久久| 天天做天天摸天天爽国产一区 | 欧美一二三四区在线| 欧美三级中文字| 色综合天天性综合| 风间由美一区二区av101| 国内精品久久久久影院一蜜桃| 日本成人在线电影网| 亚洲一区在线观看免费 | 国产精品久久久久久久久搜平片 | 欧美一区二区三区视频免费播放| 91国偷自产一区二区三区观看 | 99国产精品99久久久久久| 国产·精品毛片| 国产一区视频网站| 美腿丝袜亚洲综合| 看电影不卡的网站| 另类综合日韩欧美亚洲| 美女网站一区二区| 开心九九激情九九欧美日韩精美视频电影 | 欧美一区二区三区婷婷月色| 欧美剧情片在线观看| 欧美一区二区三区在线观看| 91精品国产综合久久久久久久久久| 欧美精品1区2区| 91精品在线一区二区| 日韩一二三区视频| 亚洲精品一区二区三区99| 日韩欧美激情在线| 久久久久久久久久电影| 国产日韩欧美精品在线| 中国色在线观看另类| 成人欧美一区二区三区黑人麻豆 | 中文字幕一区在线| 国产精品免费网站在线观看| 国产精品久久久久久久久搜平片 | 91精品国产入口在线| 日韩欧美国产三级电影视频| 久久在线免费观看| 欧美激情一区二区三区蜜桃视频| 国产精品日韩精品欧美在线| 亚洲欧美一区二区在线观看| 性做久久久久久久免费看| 日本伊人午夜精品| 国产麻豆91精品| 91亚洲国产成人精品一区二区三 | 97久久人人超碰| 欧美影院精品一区| 欧美v国产在线一区二区三区| 久久久久一区二区三区四区| 国产精品嫩草影院av蜜臀| 亚洲午夜免费视频| 国产在线观看一区二区| 99re8在线精品视频免费播放| 欧美日本一道本| 国产精品人人做人人爽人人添| 一区二区三区免费网站| 三级一区在线视频先锋 | 欧美喷水一区二区| 26uuu久久天堂性欧美| 亚洲欧美在线aaa| 蜜桃视频一区二区三区在线观看| 国产成人av福利| 欧美天天综合网| 国产午夜亚洲精品不卡| 夜夜揉揉日日人人青青一国产精品| 理论片日本一区| 色天天综合色天天久久| 欧美精品一区二区三区很污很色的| 亚洲美女偷拍久久| 激情成人午夜视频| 欧美精品777| 亚洲欧美另类久久久精品| 久久国产精品第一页| 色婷婷av一区二区三区之一色屋| 337p粉嫩大胆色噜噜噜噜亚洲 | 色狠狠av一区二区三区| 久久久久久久久一| 午夜精品久久久久久久久久 | 久久久国产精品不卡| 午夜久久久影院| 色综合网色综合| 国产精品麻豆久久久| 伦理电影国产精品| 欧美一区二区三区小说| 亚洲一区二区三区视频在线 | 99在线精品视频| 欧美精品一区二| 男人的j进女人的j一区| 欧洲另类一二三四区| 国产精品日韩精品欧美在线| 国产精品一区二区在线播放 | 色综合中文字幕国产| 国产欧美一区二区三区沐欲| 蜜臀久久99精品久久久久久9| 欧美日韩一区三区四区| 亚洲综合一区二区三区| 99re热这里只有精品视频| 国产精品久久久久久久第一福利 | 亚洲黄色小视频| 国产a级毛片一区| 国产午夜精品一区二区三区嫩草| 韩国欧美国产1区| 久久一区二区视频| 激情成人午夜视频| 国产亚洲欧美中文| 国产高清在线观看免费不卡| 久久久久久毛片| 国产成人精品亚洲777人妖| 日韩亚洲欧美一区| 麻豆精品久久精品色综合| 欧美高清视频一二三区| 日韩av一级电影| 欧美一级高清片在线观看| 免费成人在线视频观看| 欧美成人欧美edvon| 国产在线日韩欧美| 国产欧美日韩在线| 成人a免费在线看| 综合久久久久久| 在线免费观看日本欧美| 亚洲不卡在线观看| 91精品午夜视频| 国内精品视频666| 中文字幕日韩一区二区| 色哟哟一区二区在线观看| 亚洲图片欧美色图| 91精品国产品国语在线不卡| 精品一区二区影视| 国产精品乱人伦中文| 97精品超碰一区二区三区| 亚洲韩国精品一区| 欧美一区二区免费观在线| 国产精一区二区三区| 国产精品久久夜| 欧美日韩在线不卡| 国产精品一区不卡| 亚洲丝袜自拍清纯另类| 在线不卡欧美精品一区二区三区| 精品在线你懂的| 亚洲欧美日韩电影| 欧美群妇大交群中文字幕| 国产福利精品一区二区| 亚洲激情自拍偷拍| 日韩欧美色电影| 日本高清无吗v一区|