⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 patternhw4view.cpp

📁 Neural Network program for pattern classification
💻 CPP
📖 第 1 页 / 共 2 页
字号:
					maxVal = pDoc->Test_Result[i][j];			// Find maximum classification rate
					maxIdx = j;									// Save the index of MCL data
				}
			}

			if(i>=0 && i<=24){
				if(maxIdx != 0)	numOfErr++;						// For first data set, check the error
			}else if(i>=25 && i<=49){
				if(maxIdx != 1)	numOfErr++;						// For second data set, check the error
			}else{
				if(maxIdx != 2)	numOfErr++;						// For third data set, check the error
			}

			m_Chart2d.SetXYValue(i,pDoc->Test_Result[i][maxIdx],i,series+maxIdx);
		}
		/************************************************************************/
		str.Format("Total number of sample: %d\nThe number of error: %d\nError rate: %.4f",75,numOfErr,(float)numOfErr/75.0f);
		MessageBox(str,"Test Error",MB_OK);
	}
}

/************************************************************************/
/* OnUpdateTesting1(CCmdUI* pCmdUI)										*/
/* Name: OnUpdateTesting1												*/
/* Parameter: CCmdUI* pCmdUI - For checking								*/
/* Return: No															*/
/* Explain: Constraint for testing										*/
/************************************************************************/
void CPatternHW4View::OnUpdateTesting1(CCmdUI* pCmdUI) 
{
	CPatternHW4Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	pCmdUI->Enable(((pDoc->m_Data1 != NULL) || (pDoc->m_Data2 != NULL) || (pDoc->m_Data3 != NULL)) && TrainFinish == TRUE && (pDoc->FileMode >= 4));
	// Only possible after training
}

void CPatternHW4View::OnRegresstrn() 
{
	CPatternHW4Doc* pDoc = GetDocument();
	CPrmDlg pDlg;
	ASSERT_VALID(pDoc);
	
	if(pDlg.DoModal() == IDOK){
		pDoc->EnterRegressData(TRAINMODE);								// Enter data into the train data array

		m_Chart2d.SetChartTitle("PR HW #4 Training Result for regressor");
		m_Chart2d.SetChartLabel("Epoch","Sum of Squared Error");
		m_Chart2d.SetRange(0,MAXEPOCH,-1,1);
		m_Chart2d.SetGridXYNumber(10,10);
		
		m_Chart2d.mpSerie[0].m_plotColor = RGB(255,150,30);
		m_Chart2d.mpSerie[1].m_plotColor = RGB(30,255,30);
		
		m_Chart2d.mpSerie[0].IsLine = TRUE;
		m_Chart2d.mpSerie[1].IsLine = TRUE;
		
		m_Chart2d.Graph_Name[0].Format("MMT");
		m_Chart2d.Graph_Name[1].Format("!MMT");
		
		m_Chart2d.ClearChart();

		pDoc->MLPR(pDlg.m_hid_lay,pDlg.m_learn_rate,pDlg.m_hid_node,pDlg.m_momentum,pDlg.m_threshold);		
		series = 0;
		for(int i=0;i<MAXEPOCH;i++){
			m_Chart2d.SetXYValue(i,pDoc->m_SSE[i],i,series);
		}
		pDoc->MLPR(pDlg.m_hid_lay,pDlg.m_learn_rate,pDlg.m_hid_node,0.0,pDlg.m_threshold);		
		series = 1;
		for(i=0;i<MAXEPOCH;i++){
			m_Chart2d.SetXYValue(i,pDoc->m_SSE[i],i,series);
		}
	}
	TrRgFinish = TRUE;
}

void CPatternHW4View::OnRegresstst() 
{
	CPatternHW4Doc* pDoc = GetDocument();
	CPrmDlg pDlg;
	ASSERT_VALID(pDoc);
	register int i, j;
	if(pDlg.DoModal() == IDOK){
		pDoc->EnterRegressData(TESTMODE);							// Enter the data into test data array
		
		m_Chart2d.SetChartTitle("PR HW #4 Test Result for regressor");
		m_Chart2d.SetChartLabel("Epoch","Output");
		m_Chart2d.SetRange(0,225,-5,5);
		m_Chart2d.SetGridXYNumber(3,10);
		
		m_Chart2d.mpSerie[0].m_plotColor = RGB(255,0,0);
		m_Chart2d.mpSerie[1].m_plotColor = RGB(0,0,255);
		m_Chart2d.mpSerie[2].m_plotColor = RGB(255,0,0);
		m_Chart2d.mpSerie[3].m_plotColor = RGB(0,0,255);
		m_Chart2d.mpSerie[4].m_plotColor = RGB(255,0,0);
		m_Chart2d.mpSerie[5].m_plotColor = RGB(0,0,255);
		m_Chart2d.mpSerie[6].m_plotColor = RGB(255,0,0);
		m_Chart2d.mpSerie[7].m_plotColor = RGB(0,0,255);
		m_Chart2d.mpSerie[8].m_plotColor = RGB(255,0,0);
		m_Chart2d.mpSerie[9].m_plotColor = RGB(0,0,255);
		m_Chart2d.mpSerie[10].m_plotColor = RGB(255,0,0);
		m_Chart2d.mpSerie[11].m_plotColor = RGB(0,0,255);
		m_Chart2d.mpSerie[12].m_plotColor = RGB(255,0,0);
		m_Chart2d.mpSerie[13].m_plotColor = RGB(0,0,255);
		m_Chart2d.mpSerie[14].m_plotColor = RGB(255,0,0);
		m_Chart2d.mpSerie[15].m_plotColor = RGB(0,0,255);
		
		m_Chart2d.mpSerie[0].IsLine = TRUE;
		m_Chart2d.mpSerie[1].IsLine = TRUE;
		m_Chart2d.mpSerie[2].IsLine = TRUE;
		m_Chart2d.mpSerie[3].IsLine = TRUE;
		m_Chart2d.mpSerie[4].IsLine = TRUE;
		m_Chart2d.mpSerie[5].IsLine = TRUE;
		m_Chart2d.mpSerie[6].IsLine = TRUE;
		m_Chart2d.mpSerie[7].IsLine = TRUE;
		m_Chart2d.mpSerie[8].IsLine = TRUE;
		m_Chart2d.mpSerie[9].IsLine = TRUE;
		m_Chart2d.mpSerie[10].IsLine = TRUE;
		m_Chart2d.mpSerie[11].IsLine = TRUE;
		m_Chart2d.mpSerie[12].IsLine = TRUE;
		m_Chart2d.mpSerie[13].IsLine = TRUE;
		m_Chart2d.mpSerie[14].IsLine = TRUE;
		m_Chart2d.mpSerie[15].IsLine = TRUE;
		
		m_Chart2d.Graph_Name[0].Format("TR 3");
		m_Chart2d.Graph_Name[1].Format("DR 3");
		m_Chart2d.Graph_Name[2].Format("TR 4");
		m_Chart2d.Graph_Name[3].Format("DR 4");
		m_Chart2d.Graph_Name[4].Format("TR 5");
		m_Chart2d.Graph_Name[5].Format("DR 5");
		m_Chart2d.Graph_Name[6].Format("TR 6");
		m_Chart2d.Graph_Name[7].Format("DR 6");
		m_Chart2d.Graph_Name[8].Format("TR 7");
		m_Chart2d.Graph_Name[9].Format("DR 7");
		m_Chart2d.Graph_Name[10].Format("TR 8");
		m_Chart2d.Graph_Name[11].Format("DR 8");
		m_Chart2d.Graph_Name[12].Format("TR 9");
		m_Chart2d.Graph_Name[13].Format("DR 9");
		m_Chart2d.Graph_Name[14].Format("TR 10");
		m_Chart2d.Graph_Name[15].Format("DR 10");
		
		m_Chart2d.ClearChart();
		series = 0;
		
		double maxVal1, minVal1, maxVal2, minVal2;
		numOfErr = 0;
		/************************************************************************/
		/* Result Showing														*/
		/************************************************************************/
		pDoc->TestR(pDlg.m_hid_lay,pDlg.m_learn_rate,3,pDlg.m_momentum,pDlg.m_threshold);
		maxVal1 = -100;		minVal1 = 100;
		maxVal2 = -100;		minVal2 = 100;
		for(j=0;j<225;j++){
			if(pDoc->Test_ResultR[j] > maxVal1)	maxVal1 = pDoc->Test_ResultR[j];
			if(pDoc->Test_ResultR[j] < minVal1)	minVal1 = pDoc->Test_ResultR[j];
			if(pDoc->TsData[j].Response > maxVal2)	maxVal2 = pDoc->TsData[j].Response;
			if(pDoc->TsData[j].Response < minVal2)	minVal2 = pDoc->TsData[j].Response;
		}
		for(i=0;i<225;i++){
			m_Chart2d.SetXYValue(i,4+(pDoc->Test_ResultR[i]-minVal1)/(maxVal1-minVal1),i,series);
			m_Chart2d.SetXYValue(i,4+(pDoc->TsData[i].Response-minVal2)/(maxVal2-minVal2),i,series+1);
		}
		pDoc->TestR(pDlg.m_hid_lay,pDlg.m_learn_rate,4,pDlg.m_momentum,pDlg.m_threshold);
		maxVal1 = -100;		minVal1 = 100;
		maxVal2 = -100;		minVal2 = 100;
		for(j=0;j<225;j++){
			if(pDoc->Test_ResultR[j] > maxVal1)	maxVal1 = pDoc->Test_ResultR[j];
			if(pDoc->Test_ResultR[j] < minVal1)	minVal1 = pDoc->Test_ResultR[j];
			if(pDoc->TsData[j].Response > maxVal2)	maxVal2 = pDoc->TsData[j].Response;
			if(pDoc->TsData[j].Response < minVal2)	minVal2 = pDoc->TsData[j].Response;
		}
		for(i=0;i<225;i++){
			m_Chart2d.SetXYValue(i,3+(pDoc->Test_ResultR[i]-minVal1)/(maxVal1-minVal1),i,series+2);
			m_Chart2d.SetXYValue(i,3+(pDoc->TsData[i].Response-minVal2)/(maxVal2-minVal2),i,series+3);
		}
		pDoc->TestR(pDlg.m_hid_lay,pDlg.m_learn_rate,5,pDlg.m_momentum,pDlg.m_threshold);
		maxVal1 = -100;		minVal1 = 100;
		maxVal2 = -100;		minVal2 = 100;
		for(j=0;j<225;j++){
			if(pDoc->Test_ResultR[j] > maxVal1)	maxVal1 = pDoc->Test_ResultR[j];
			if(pDoc->Test_ResultR[j] < minVal1)	minVal1 = pDoc->Test_ResultR[j];
			if(pDoc->TsData[j].Response > maxVal2)	maxVal2 = pDoc->TsData[j].Response;
			if(pDoc->TsData[j].Response < minVal2)	minVal2 = pDoc->TsData[j].Response;
		}
		for(i=0;i<225;i++){
			m_Chart2d.SetXYValue(i,2+(pDoc->Test_ResultR[i]-minVal1)/(maxVal1-minVal1),i,series+4);
			m_Chart2d.SetXYValue(i,2+(pDoc->TsData[i].Response-minVal2)/(maxVal2-minVal2),i,series+5);
		}
		pDoc->TestR(pDlg.m_hid_lay,pDlg.m_learn_rate,6,pDlg.m_momentum,pDlg.m_threshold);
		maxVal1 = -100;		minVal1 = 100;
		maxVal2 = -100;		minVal2 = 100;
		for(j=0;j<225;j++){
			if(pDoc->Test_ResultR[j] > maxVal1)	maxVal1 = pDoc->Test_ResultR[j];
			if(pDoc->Test_ResultR[j] < minVal1)	minVal1 = pDoc->Test_ResultR[j];
			if(pDoc->TsData[j].Response > maxVal2)	maxVal2 = pDoc->TsData[j].Response;
			if(pDoc->TsData[j].Response < minVal2)	minVal2 = pDoc->TsData[j].Response;
		}
		for(i=0;i<225;i++){
			m_Chart2d.SetXYValue(i,1+(pDoc->Test_ResultR[i]-minVal1)/(maxVal1-minVal1),i,series+6);
			m_Chart2d.SetXYValue(i,1+(pDoc->TsData[i].Response-minVal2)/(maxVal2-minVal2),i,series+7);
		}
		pDoc->TestR(pDlg.m_hid_lay,pDlg.m_learn_rate,7,pDlg.m_momentum,pDlg.m_threshold);
		maxVal1 = -100;		minVal1 = 100;
		maxVal2 = -100;		minVal2 = 100;
		for(j=0;j<225;j++){
			if(pDoc->Test_ResultR[j] > maxVal1)	maxVal1 = pDoc->Test_ResultR[j];
			if(pDoc->Test_ResultR[j] < minVal1)	minVal1 = pDoc->Test_ResultR[j];
			if(pDoc->TsData[j].Response > maxVal2)	maxVal2 = pDoc->TsData[j].Response;
			if(pDoc->TsData[j].Response < minVal2)	minVal2 = pDoc->TsData[j].Response;
		}
		for(i=0;i<225;i++){
			m_Chart2d.SetXYValue(i,0+(pDoc->Test_ResultR[i]-minVal1)/(maxVal1-minVal1),i,series+8);
			m_Chart2d.SetXYValue(i,0+(pDoc->TsData[i].Response-minVal2)/(maxVal2-minVal2),i,series+9);
		}
		pDoc->TestR(pDlg.m_hid_lay,pDlg.m_learn_rate,8,pDlg.m_momentum,pDlg.m_threshold);
		maxVal1 = -100;		minVal1 = 100;
		maxVal2 = -100;		minVal2 = 100;
		for(j=0;j<225;j++){
			if(pDoc->Test_ResultR[j] > maxVal1)	maxVal1 = pDoc->Test_ResultR[j];
			if(pDoc->Test_ResultR[j] < minVal1)	minVal1 = pDoc->Test_ResultR[j];
			if(pDoc->TsData[j].Response > maxVal2)	maxVal2 = pDoc->TsData[j].Response;
			if(pDoc->TsData[j].Response < minVal2)	minVal2 = pDoc->TsData[j].Response;
		}
		for(i=0;i<225;i++){
			m_Chart2d.SetXYValue(i,-1+(pDoc->Test_ResultR[i]-minVal1)/(maxVal1-minVal1),i,series+10);
			m_Chart2d.SetXYValue(i,-1+(pDoc->TsData[i].Response-minVal2)/(maxVal2-minVal2),i,series+11);
		}
		pDoc->TestR(pDlg.m_hid_lay,pDlg.m_learn_rate,9,pDlg.m_momentum,pDlg.m_threshold);
		maxVal1 = -100;		minVal1 = 100;
		maxVal2 = -100;		minVal2 = 100;
		for(j=0;j<225;j++){
			if(pDoc->Test_ResultR[j] > maxVal1)	maxVal1 = pDoc->Test_ResultR[j];
			if(pDoc->Test_ResultR[j] < minVal1)	minVal1 = pDoc->Test_ResultR[j];
			if(pDoc->TsData[j].Response > maxVal2)	maxVal2 = pDoc->TsData[j].Response;
			if(pDoc->TsData[j].Response < minVal2)	minVal2 = pDoc->TsData[j].Response;
		}
		for(i=0;i<225;i++){
			m_Chart2d.SetXYValue(i,-2+(pDoc->Test_ResultR[i]-minVal1)/(maxVal1-minVal1),i,series+12);
			m_Chart2d.SetXYValue(i,-2+(pDoc->TsData[i].Response-minVal2)/(maxVal2-minVal2),i,series+13);
		}
		pDoc->TestR(pDlg.m_hid_lay,pDlg.m_learn_rate,10,pDlg.m_momentum,pDlg.m_threshold);
		maxVal1 = -100;		minVal1 = 100;
		maxVal2 = -100;		minVal2 = 100;
		for(j=0;j<225;j++){
			if(pDoc->Test_ResultR[j] > maxVal1)	maxVal1 = pDoc->Test_ResultR[j];
			if(pDoc->Test_ResultR[j] < minVal1)	minVal1 = pDoc->Test_ResultR[j];
			if(pDoc->TsData[j].Response > maxVal2)	maxVal2 = pDoc->TsData[j].Response;
			if(pDoc->TsData[j].Response < minVal2)	minVal2 = pDoc->TsData[j].Response;
		}
		for(i=0;i<225;i++){
			m_Chart2d.SetXYValue(i,-3+(pDoc->Test_ResultR[i]-minVal1)/(maxVal1-minVal1),i,series+14);
			m_Chart2d.SetXYValue(i,-3+(pDoc->TsData[i].Response-minVal2)/(maxVal2-minVal2),i,series+15);
		}		
		/************************************************************************/
		//str.Format("Total number of sample: %d\nThe number of error: %d\nError rate: %.4f",225,numOfErr,(float)numOfErr/225.0f);
		//MessageBox(str,"Test Error",MB_OK);
	}
}

void CPatternHW4View::OnUpdateRegresstrn(CCmdUI* pCmdUI) 
{
	CPatternHW4Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	pCmdUI->Enable(pDoc->m_DataR != NULL);
}

void CPatternHW4View::OnUpdateRegresstst(CCmdUI* pCmdUI) 
{
	CPatternHW4Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	pCmdUI->Enable(pDoc->m_DataR != NULL && TrRgFinish == TRUE);
	// Only possible after training
}

void CPatternHW4View::OnTesttrain() 
{
	CPatternHW4Doc* pDoc = GetDocument();
	CPrmDlg pDlg;
	ASSERT_VALID(pDoc);
	
	if(pDlg.DoModal() == IDOK){
		pDoc->EnterData(TRAINMODE);							// Enter the data into test data array
		pDoc->TestTrain(pDlg.m_hid_lay,pDlg.m_learn_rate,pDlg.m_hid_node,pDlg.m_momentum,pDlg.m_threshold);
		
		m_Chart2d.SetChartTitle("PR HW #4 Test Result");
		m_Chart2d.SetChartLabel("Number of Data","Classification");
		m_Chart2d.SetRange(0,75,0,1);
		m_Chart2d.SetGridXYNumber(3,10);
		
		m_Chart2d.mpSerie[0].m_plotColor = RGB(255,0,0);
		m_Chart2d.mpSerie[1].m_plotColor = RGB(0,255,0);
		m_Chart2d.mpSerie[2].m_plotColor = RGB(0,0,255);
		
		m_Chart2d.mpSerie[0].IsLine = FALSE;
		m_Chart2d.mpSerie[1].IsLine = FALSE;
		m_Chart2d.mpSerie[2].IsLine = FALSE;
		
		m_Chart2d.Graph_Name[0].Format("Setosa");
		m_Chart2d.Graph_Name[1].Format("Versicolour");
		m_Chart2d.Graph_Name[2].Format("Virginica");
		
		m_Chart2d.ClearChart();
		series = 0;
		
		int maxIdx;
		double maxVal;
		numOfErr = 0;
		/************************************************************************/
		/* Result Showing														*/
		/************************************************************************/
		for(int i=0;i<75;i++){
			maxIdx = -100;
			maxVal = -100.0;
			for(int j=0;j<3;j++){
				if(pDoc->Test_Result[i][j] > maxVal){
					maxVal = pDoc->Test_Result[i][j];			// Find maximum classification rate
					maxIdx = j;									// Save the index of MCL data
				}
			}
			
			if(i>=0 && i<=24){
				if(maxIdx != 0)	numOfErr++;						// For first data set, check the error
			}else if(i>=25 && i<=49){
				if(maxIdx != 1)	numOfErr++;						// For second data set, check the error
			}else{
				if(maxIdx != 2)	numOfErr++;						// For third data set, check the error
			}
			
			m_Chart2d.SetXYValue(i,pDoc->Test_Result[i][maxIdx],i,series+maxIdx);
		}
		/************************************************************************/
		str.Format("Total number of sample: %d\nThe number of error: %d\nError rate: %.4f",75,numOfErr,(float)numOfErr/75.0f);
		MessageBox(str,"Test Error",MB_OK);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -