?? patternhw4view.cpp
字號:
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 + -