// 分类运算 private void classifyButton_Click(object sender, EventArgs e) { //前提检验 if (SelectedPCXHelper.GetSelPCXFromLB().Count == 0 || SelectedPCXHelper.GetUnselPCXList().Count == 0) { MessageBox.Show(this, "您还未提取样本特征,或者还未设置测试样本集!", "提示信息", MessageBoxButtons.OK); } else { string correctRate = null; //正确率 string myfilepath = filepathText.Text.ToString(); Features feature; #region 这里做一个文件名为unknown.pcx的判断 string filename = FeatureHelper.GetUnknownName(myfilepath); if (filename.ToLower().Equals("unknown")) { feature = new Features(myfilepath); } else { int classID = Convert.ToInt32(FeatureHelper.GetUpperFoldername(myfilepath)); feature = new Features(myfilepath, classID); } #endregion #region Bayes分类法 if (rbBayes.Checked) { #region 数据初始化 CheckInit(); double correctCount = 0.0; #endregion IList sampleList = FeatureHelper.GetFeaturesList(); //获取原始训练样本 //从降维器获取降维后的新样本 IList newSampleList = MDAHelper.GetMDSampleList(); MVHelper.SetSampleList((ArrayList)newSampleList); Bayes bayes = Bayes.GetInstance(); bayes.TrainSampleList = newSampleList; //向贝叶斯分类器注入降维后的训练样本 //int classID = Convert.ToInt32(FeatureHelper.GetUpperFoldername(myfilepath)); //Features feature = new Features(myfilepath, classID); feature = MDAHelper.MDSample(feature); //测试样本降维 int testClassID = bayes.DecisionFunction(feature); //用贝叶斯决策进行测试样本分类 //结果显示 lblunknownclassify.Text = testClassID.ToString("000"); if (feature.classID == testClassID) { lblerrorinfo.Text = "Bayes分类法分类正确"; lblerrorinfo.ForeColor = Color.Green; } //unknown.pcx处理 else if (feature.classID == -1) { } else { lblerrorinfo.Text = "Bayes分类法分类失败"; lblerrorinfo.ForeColor = Color.Green; } } #endregion #region Kn近邻法 if (rbKn.Checked) { #region 相关数据初始化 CheckInit(); int testResult = -1; double correctCount = 0.0; int kvalue = Constant.kvalue; #endregion #region 效的情况下进行计算 if (KCheck(kvalue)) { KnNear my_knearest = new KnNear(); //int classID = Convert.ToInt32(FeatureHelper.GetUpperFoldername(myfilepath)); //Features currfeature = new Features(myfilepath, classID); testResult = my_knearest.DoK_nearest(feature, FeatureHelper.GetFeaturesList(), kvalue); //testResult为K近邻的分类结果 // 其实testResult的结果直接就是result求的值 string result = testResult.ToString("000"); lblunknownclassify.Text = result; result = ResultConvert(result); int testID = Convert.ToInt32(result); if (testID > 0 && testID == feature.classID) { //correctRate = "分类正确率: " + Constant.kn_Rate; lblerrorinfo.Text = "Kn近邻法分类正确"; lblerrorinfo.ForeColor = Color.Green; } //unknown.pcx处理 else if (feature.classID == -1) { } else { lblerrorinfo.Text = "Kn近邻法分类失败!"; lblerrorinfo.ForeColor = Color.Green; } } #endregion } #endregion #region 最近邻法 if (rbnearest.Checked) { #region 初始化 CheckInit(); int testResult = -1; double correctCount = 0.0; #endregion #region 最近邻分类 if (NearestCheck()) { Nearest nearest = new Nearest(); //int classID = Convert.ToInt32(FeatureHelper.GetUpperFoldername(myfilepath)); //Features currfeature = new Features(myfilepath, classID); testResult = nearest.Do_Nearest(feature, FeatureHelper.GetFeaturesList()); string result = testResult.ToString("000"); lblunknownclassify.Text = result; if (testResult > 0 && testResult == feature.classID) { lblerrorinfo.Text = "最近邻法分类正确"; lblerrorinfo.ForeColor = Color.Green; } //unknown.pcx处理 else if (feature.classID == -1) { } else { lblerrorinfo.Text = "最近邻法分类失败!"; lblerrorinfo.ForeColor = Color.Green; } } #endregion } #endregion } }