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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? reductperformancefilter.cpp

?? 粗慥集成算法集合 ,并有詳細(xì)的文檔資料和測(cè)試數(shù)據(jù)處
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
		stream << "%" << endl;
		stream << "% Note that the indices below are 0-based." << endl << endl;

	}

	// Ugly hack, to make stream accessible from Remove and CalculateStatistics method.
	static_stream = &stream;

	// Do the filtering.
	Handle<Structure> result = Filter::Apply(structure);

	if (use_parent_rg)
		self->SetRGDecisionTable(Handle<DecisionTable>(NULL));
	if (use_parent_bc)
		self->SetBCDecisionTable(Handle<DecisionTable>(NULL));

	// Calculate and print statistics.
	CalculateStatistics();

	// Clean up ugly hack.
	static_stream = NULL;

	// Clean up in general.
	(self->scores_).erase((self->scores_).begin(), (self->scores_).end());
	(self->only_scores_).erase((self->only_scores_).begin(), (self->only_scores_).end());

	return result.Release();

}

//-------------------------------------------------------------------
// Methods inherited from Filter.
//===================================================================

//-------------------------------------------------------------------
// Method........: Remove
// Author........: Aleksander 豩rn
// Date..........:
// Description...: Returns true if the specified reduct should be removed
//                 from the reduct set.
// Comments......:
// Revisions.....:
//===================================================================

bool
ReductPerformanceFilter::Remove(const Structures &structures, int i) const {

	if (!structures.IsA(REDUCTS))
		return false;

	Handle<Reducts> reducts = dynamic_cast(Reducts *, const_cast(Structures *, &structures));

	// Duplicate the specified reduct only.
	Handle<Reducts> reduct = dynamic_cast(Reducts *, reducts->DuplicateStructure(i));

	if (reduct == NULL) {
		Message::Error("Failed to duplicate reduct number " + String::Format(i) + " from reduct set.");
		return false;
	}

	// Generate rules from the reduct, using RG table.
	GetRuleGenerator()->SetDecisionTable(GetRGDecisionTable());

	Handle<Rules> rules = dynamic_cast(Rules *, reduct->Apply(*GetRuleGenerator()));

	GetRuleGenerator()->SetDecisionTable(Handle<DecisionTable>(NULL));

	if (rules == NULL) {
		Message::Error("Failed to generate rules from reduct number " + String::Format(i) + ".");
		return false;
	}

	// How many rules are there?
	int no_rules = rules->GetNoRules();

	// Apply BC to BC table, using generated set of rules.
	if (!GetBatchClassifier()->SetRules(rules.GetPointer())) {
		Message::Error("Failed to pass rules generated from reduct number " + String::Format(i) + " to BatchClassifier.\n"
			             "Are you sure the BatchClassifier has been assigned a rule-based Classifier?");
		return false;
	}

	Handle<BatchClassification> batchclassification = dynamic_cast(BatchClassification *, GetBCDecisionTable()->Apply(*GetBatchClassifier()));

	GetBatchClassifier()->SetRules(NULL);

	if (batchclassification == NULL) {
		Message::Error("Failed to generate confusion matrix from reduct number " + String::Format(i) + ".");
		return false;
	}

	float value;
	bool  index_ok = true;

	// Extract specified value from confusion matrix.
	switch (GetCriterion()) {
		case CRITERION_DIAGONAL: value = batchclassification->GetConfusionMatrix().GetDiagonalRatio();
			                       break;
		case CRITERION_ROW:      if (GetIndex() >= batchclassification->GetConfusionMatrix().GetDimension()) {
		                           Message::Error("Specified index larger than dimension of confusion matrix for reduct number " + String::Format(i) + ".");
			                         index_ok = false;
														 }
														 else {
															 value = batchclassification->GetConfusionMatrix().GetRowRatio(GetIndex());
														 }
			                       break;
		case CRITERION_COLUMN:   if (GetIndex() >= batchclassification->GetConfusionMatrix().GetDimension()) {
		                           Message::Error("Specified index larger than dimension of confusion matrix for reduct number " + String::Format(i) + ".");
			                         index_ok = false;
														 }
			                       else {
			                         value = batchclassification->GetConfusionMatrix().GetColumnRatio(GetIndex());
														 }
			                       break;
		default:                 Message::Error("Specified performance criterion not implemented.");
			                       index_ok = false;
	}

	if (!index_ok)
		return false;

	if (value == Undefined::Float()) {
		Message::Warning("Score for reduct number " + String::Format(i) + " is undefined.", false);
		return false;
	}

	// Get ROC area (if any).
	float roc_area = batchclassification->GetROCArea();

	String formatted_r;

	bool masked = true;

	// Format reduct.
	if (!reducts->GetReduct(i)->Format(formatted_r, dynamic_cast(DecisionTable *, reducts->FindParent(DECISIONTABLE)), masked))
		formatted_r = Undefined::String();

	// We need to update the mutable bookkeeping stuff.
	ReductPerformanceFilter *self = const_cast(ReductPerformanceFilter *, this);

	ReductScore score;

	// Store values for summary rankings/statistics.
	score.score_  = value;
	score.auc_    = batchclassification->GetROCArea();
	score.reduct_ = formatted_r;
	score.index_  = i;

	(self->scores_).push_back(score);
	(self->only_scores_).push_back(score.score_);

	// Make removal decision.
	bool remove = (value <= GetThreshold());

	// Dump information to logfile, if open.
	if (static_stream != NULL) {

		String formatted_m;

		String indent(' ', 5);

		// Format matrix.
		if (!batchclassification->GetConfusionMatrix().Format(formatted_m, indent))
			formatted_m = Undefined::String();

		// Write log file entry.
		*static_stream << "Reduct #" << score.index_ << ":" << endl;
		*static_stream << indent << score.reduct_ << endl;
		*static_stream << "#Rules:" << endl;
		*static_stream << indent << no_rules << endl;
		if (roc_area != Undefined::Float()) {
			*static_stream << "Area under ROC curve:" << endl;
			*static_stream << indent << score.auc_ << endl;
		}
		*static_stream << "Performance:" << endl;
		*static_stream << formatted_m << endl;

	}

	// Return removal decision.
	return remove;

}

//-------------------------------------------------------------------
// Local methods.
//===================================================================

//-------------------------------------------------------------------
// Method........: CalculateStatistics
// Author........: Aleksander 豩rn
// Date..........:
// Description...:
// Comments......:
// Revisions.....:
//===================================================================

void
ReductPerformanceFilter::CalculateStatistics() const {

	if (only_scores_.empty())
		return;

	float mean    = MathKit::Mean(only_scores_);
	float median  = MathKit::Median(only_scores_);
	float stddev  = MathKit::StandardDeviation(only_scores_);
	float minimum = MathKit::Minimum(only_scores_);
	float maximum = MathKit::Maximum(only_scores_);

	String name;

	// Extract name of score quantity.
	switch (GetCriterion()) {
		case CRITERION_DIAGONAL: name = "Diagonal"; break;
		case CRITERION_ROW:      name = "Row[" + String::Format(GetIndex()) + "]"; break;
		case CRITERION_COLUMN:   name = "Column[" + String::Format(GetIndex()) + "]"; break;
		default:                 name = "Score";
	}

	Message message;

	message.Notify(name + ".Mean    = " + (mean    == Undefined::Float() ? Undefined::String() : String::Format(mean)));
	message.Notify(name + ".Median  = " + (median  == Undefined::Float() ? Undefined::String() : String::Format(median)));
	message.Notify(name + ".StdDev  = " + (stddev  == Undefined::Float() ? Undefined::String() : String::Format(stddev)));
	message.Notify(name + ".Minimum = " + (minimum == Undefined::Float() ? Undefined::String() : String::Format(minimum)));
	message.Notify(name + ".Maximum = " + (maximum == Undefined::Float() ? Undefined::String() : String::Format(maximum)));

	String indent(' ', 5);

	// Write to log file.
	if (static_stream != NULL) {

		// Write summary statistics.
		*static_stream << "Statistics:" << endl;
		*static_stream << indent << name + ".Mean    = " + (mean    == Undefined::Float() ? Undefined::String() : String::Format(mean)) << endl;
		*static_stream << indent << name + ".Median  = " + (median  == Undefined::Float() ? Undefined::String() : String::Format(median)) << endl;
		*static_stream << indent << name + ".StdDev  = " + (stddev  == Undefined::Float() ? Undefined::String() : String::Format(stddev)) << endl;
		*static_stream << indent << name + ".Minimum = " + (minimum == Undefined::Float() ? Undefined::String() : String::Format(minimum)) << endl;
		*static_stream << indent << name + ".Maximum = " + (maximum == Undefined::Float() ? Undefined::String() : String::Format(maximum)) << endl << endl;

		// Any scores present? If not, we're done.
		if (scores_.empty())
			return;

		// We need to update (sort) the mutable bookkeeping stuff.
		ReductPerformanceFilter *self = const_cast(ReductPerformanceFilter *, this);

		ReductScoreComparator1 comparator1;

		message.Notify("Sorting scores...");

		// Sort by performance scores.
		std::sort((self->scores_).begin(), (self->scores_).end(), comparator1);

		message.Notify("Saving ranking to log...");

		*static_stream << "Ranking:" << endl;

		int  i;
		bool sort_by_auc = false;

		// Write rankings.
		for (i = 0; i < scores_.size(); i++) {

			String formatted_i;
			String formatted_v;
			String formatted_r;

			// Format output.
			formatted_i = "Reduct #" + String::Format(scores_[i].index_);

			formatted_v = String::Format(scores_[i].score_);
			formatted_v.Pad(' ', 11);

			formatted_r = scores_[i].reduct_;

			// Write to stream.
			*static_stream << indent << formatted_v << formatted_i << " = " << formatted_r << endl;

			if (scores_[i].auc_ != Undefined::Float())
				sort_by_auc = true;

		}

		// Write ranked AUC values, too, or are we done?
		if (!sort_by_auc)
			return;

		ReductScoreComparator2 comparator2;

		message.Notify("Sorting AUC scores...");

		// Sort by AUC.
		std::sort((self->scores_).begin(), (self->scores_).end(), comparator2);

		message.Notify("Saving ranking to log...");

		*static_stream << endl << "ROC areas:" << endl;

		// Write ROC areas.
		for (i = 0; i < scores_.size(); i++) {

			String formatted_i;
			String formatted_v;
			String formatted_r;

			// Format output.
			formatted_i = "Reduct #" + String::Format(scores_[i].index_);

			formatted_v = String::Format(scores_[i].auc_);
			formatted_v.Pad(' ', 11);

			formatted_r = scores_[i].reduct_;

			// Write to stream.
			*static_stream << indent << formatted_v << formatted_i << " = " << formatted_r << endl;

		}

	}

}

//-------------------------------------------------------------------
// Method........: GetString
// Author........: Aleksander 豩rn
// Date..........:
// Description...:
// Comments......:
// Revisions.....:
//===================================================================

String
ReductPerformanceFilter::GetString(ReductPerformanceFilter::Criterion criterion) {

	switch (criterion) {
		case CRITERION_ROW:      return "Row";
		case CRITERION_COLUMN:   return "Column";
		case CRITERION_DIAGONAL: return "Diagonal";
		default:                 return Undefined::String();
	}

}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日本视频在线| 欧美日韩国产天堂| 中文字幕国产一区| 波多野结衣的一区二区三区| 亚洲视频一二区| 欧美伊人久久久久久久久影院 | 天天影视网天天综合色在线播放| 欧美挠脚心视频网站| 欧美a一区二区| 国产亚洲欧洲一区高清在线观看| 成人午夜电影网站| 亚洲激情男女视频| 日韩久久精品一区| 成人免费视频网站在线观看| 亚洲国产中文字幕在线视频综合| 欧美精品丝袜中出| 国产精品白丝jk黑袜喷水| 亚洲三级电影全部在线观看高清| 欧美日韩国产综合一区二区三区| 日韩电影在线免费看| 国产精品情趣视频| 欧美日韩国产中文| 国产精品99久久久久久久女警| 最新热久久免费视频| 欧美乱熟臀69xxxxxx| 国产精一品亚洲二区在线视频| 亚洲免费观看高清完整| 欧美成人一级视频| 色婷婷精品久久二区二区蜜臂av | 欧美国产国产综合| 欧美日韩一区二区在线观看视频| 韩国女主播一区二区三区| 亚洲精品国产第一综合99久久| 欧美成人官网二区| 色天使色偷偷av一区二区| 国产原创一区二区| 亚洲成人久久影院| 国产精品久久久久天堂| 日韩欧美一区在线| 在线亚洲一区二区| 国产伦精品一区二区三区视频青涩| 亚洲永久精品国产| 欧美国产一区视频在线观看| 91精品久久久久久久久99蜜臂| eeuss鲁片一区二区三区在线观看| 青青草国产成人av片免费| 依依成人精品视频| 欧美国产欧美综合| 日韩午夜激情av| 欧美日韩精品一区二区三区四区| 99久久精品国产网站| 国产老妇另类xxxxx| 久久精品99久久久| 图片区小说区国产精品视频| 一区二区三区在线影院| 国产精品嫩草99a| 国产亚洲一区二区在线观看| 精品久久久久久无| 欧美一级黄色录像| 欧美一区中文字幕| 56国语精品自产拍在线观看| 91国产成人在线| 91免费在线看| 99re这里都是精品| 成人app网站| 成人sese在线| 成人黄色av电影| av色综合久久天堂av综合| 国产乱人伦偷精品视频免下载| 久久福利视频一区二区| 美女久久久精品| 激情都市一区二区| 韩国精品主播一区二区在线观看| 久久99久久久欧美国产| 久久成人免费网| 久草中文综合在线| 久88久久88久久久| 麻豆精品视频在线观看视频| 久久国产尿小便嘘嘘| 精品一区二区三区免费| 国产精品一区二区久久精品爱涩| 国内精品写真在线观看| 国产精品69毛片高清亚洲| 国产精品一卡二卡在线观看| 风流少妇一区二区| 99久久国产免费看| 欧美亚洲综合在线| 884aa四虎影成人精品一区| 日韩欧美亚洲国产另类 | av网站一区二区三区| 99精品热视频| 欧美日韩精品专区| 日韩精品在线看片z| 国产欧美中文在线| 亚洲情趣在线观看| 日本午夜一本久久久综合| 久久成人精品无人区| 成人av在线一区二区三区| 色欧美日韩亚洲| 日韩一级黄色大片| 国产精品欧美综合在线| 一区二区三区中文字幕在线观看| 日韩av在线发布| 国产麻豆午夜三级精品| 色综合久久久久综合99| 91精品福利在线一区二区三区 | 亚洲综合一区二区精品导航| 日韩中文欧美在线| 成人福利电影精品一区二区在线观看 | 波多野结衣亚洲| 欧美日韩三级一区二区| 国产色产综合色产在线视频| 亚洲精品一二三区| 麻豆精品精品国产自在97香蕉| 成人av在线播放网址| 欧美精品乱码久久久久久按摩| 久久精品日韩一区二区三区| 一区二区三区在线看| 久久国产福利国产秒拍| 一本到不卡精品视频在线观看| 精品国精品自拍自在线| 一区二区三区四区国产精品| 国内不卡的二区三区中文字幕 | 99精品视频在线观看| 538在线一区二区精品国产| 中文字幕精品在线不卡| 日韩电影在线免费看| 色偷偷成人一区二区三区91| 久久久久久久久久久电影| 亚洲第一福利一区| 成人app在线| 久久久综合精品| 蜜臀久久99精品久久久久久9| 色婷婷av一区二区三区软件 | 成人免费看的视频| 日韩欧美视频在线| 亚洲国产一二三| 99vv1com这只有精品| 国产女主播在线一区二区| 蜜臀av性久久久久蜜臀av麻豆| 色婷婷精品久久二区二区蜜臂av | 国产精品久久久99| 国产尤物一区二区| 日韩一区二区视频| 午夜精品久久久久久| 色哟哟一区二区| 国产精品夫妻自拍| 成人一区二区三区视频在线观看| 久久综合九色欧美综合狠狠| 日本不卡123| 91麻豆精品国产91久久久久| 一区二区三区鲁丝不卡| 91网站最新地址| 国产精品婷婷午夜在线观看| 国产剧情一区在线| 久久网这里都是精品| 久久超碰97中文字幕| 日韩欧美成人午夜| 免费观看91视频大全| 日韩午夜精品电影| 免费看欧美美女黄的网站| 777精品伊人久久久久大香线蕉| 亚洲一区二区三区小说| 欧美日韩在线免费视频| 亚洲午夜精品网| 欧美日韩日日摸| 免费在线观看日韩欧美| 日韩午夜在线观看| 韩国av一区二区三区四区| 欧美精品一区二区三区蜜桃| 国产综合久久久久久鬼色| 久久久久国产精品厨房| 丁香桃色午夜亚洲一区二区三区| 久久精品亚洲麻豆av一区二区| 国产91精品一区二区| 成人免费在线视频观看| 日本久久一区二区三区| 一区二区高清在线| 91精品国产综合久久福利软件| 人禽交欧美网站| 国产亚洲精品超碰| 一本到不卡免费一区二区| 亚洲大片精品永久免费| 日韩精品一区二区三区视频在线观看 | 国产亚洲精品超碰| av亚洲精华国产精华精华| 一区二区在线免费观看| 欧美日本韩国一区| 国产一区亚洲一区| 中文字幕一区二区三区不卡在线 | 夜夜夜精品看看| 666欧美在线视频| 粉嫩久久99精品久久久久久夜| 亚洲日本丝袜连裤袜办公室| 欧美疯狂性受xxxxx喷水图片| 韩国成人福利片在线播放| 亚洲人成精品久久久久久| 欧美一区二区性放荡片| 成人av资源下载| 日韩精品国产精品|