// GET: Classifier public ActionResult ClassifyPre(string className, int classID) { var classModel = new ClassificationChoicePre { choiceName = className, choiceID = classID }; return(View(classModel)); }//End of ClassifyPre
public ActionResult ResultsPre(ClassificationChoicePre model) { ML_DBEntities dbML = new ML_DBEntities(); //Calculate Prior Probabilities var priorProbabilityM = Convert.ToDouble( (from c in dbML.pre96 where c.Metric == "Percent Malignant" select new { c.Value }).Single().Value); var priorProbabilityB = Convert.ToDouble( (from c in dbML.pre96 where c.Metric == "Percent Benign" select new { c.Value }).Single().Value); // Pull Benign Values From the Database string[,] allkeys = new string[, ] { { "Avg Clump Thickness", "stdev Clump Thickness" }, { "Avg Uniformity Shape", "stdev Uniformity Shape" }, { "Avg Uniformity Size", "stdev Uniformity Size" }, { "Avg Bland Chromatin", "stdev Bland Chromatin" }, { "Avg Marginal Adhesion", "stdev Marginal Adhesion" }, { "Avg Normal Nucleoli", "stdev Normal Nucleoli" }, { "Avg Single Epithelial Cell Size", "stdev Single Epithelial Cell Size" }, { "Avg Bare Nuclei", "stdev Bare Nuclei" }, { "Avg Mitosis", "stdev Mitosis" } }; double[][] numbers = new double[allkeys.Length][]; for (int i = 0; i < 9; i++) { double[] statsValues = new double[2]; string key1 = allkeys[i, 0].ToString(); string key2 = allkeys[i, 1].ToString(); statsValues[0] = Convert.ToDouble( (from c in dbML.pre96 where c.Metric == key1 select new { c.Value }).Single().Value); statsValues[1] = Convert.ToDouble( (from c in dbML.pre96 where c.Metric == key2 select new { c.Value }).Single().Value); numbers[i] = statsValues; } // Pull Malignant Values From the Database string[,] allkeysM = new string[, ] { { "Avg Clump Thickness M", "stdev Clump Thickness M" }, { "Avg Uniformity Shape M", "stdev Uniformity Shape M" }, { "Avg Uniformity Size M", "stdev Uniformity Size M" }, { "Avg Bland Chromatin M", "stdev Bland Chromatin M" }, { "Avg Marginal Adhesion M", "stdev Marginal Adhesion M" }, { "Avg Normal Nucleoli M", "stdev Normal Nucleoli M" }, { "Avg Single Epithelial Cell Size M", "stdev Single Epithelial Cell Size M" }, { "Avg Bare Nuclei M", "stdev Bare Nuclei M" }, { "Avg Mitosis M", "stdev Mitosis M" } }; double[][] numbersM = new double[allkeysM.Length][]; for (int i = 0; i < 9; i++) { double[] statsValues = new double[2]; string key1 = allkeysM[i, 0].ToString(); string key2 = allkeysM[i, 1].ToString(); statsValues[0] = Convert.ToDouble( (from c in dbML.pre96 where c.Metric == key1 select new { c.Value }).Single().Value); statsValues[1] = Convert.ToDouble( (from c in dbML.pre96 where c.Metric == key2 select new { c.Value }).Single().Value); numbersM[i] = statsValues; } //Calculate Likelihoods var diagnosisLikelihoodB = calculateProbability(model.clumpThickness, numbers[0]) * calculateProbability(model.uniformityShape, numbers[1]) * calculateProbability(model.uniformitySize, numbers[2]) * calculateProbability(model.blandChromatin, numbers[3]) * calculateProbability(model.marginalAdhesion, numbers[4]) * calculateProbability(model.normalNucleoli, numbers[5]) * calculateProbability(model.singleEpithelial, numbers[6]) * calculateProbability(model.bareNuclei, numbers[7]) * calculateProbability(model.mitosis, numbers[8]); var diagnosisLikelihoodM = calculateProbability(model.clumpThickness, numbersM[0]) * calculateProbability(model.uniformityShape, numbersM[1]) * calculateProbability(model.uniformitySize, numbersM[2]) * calculateProbability(model.blandChromatin, numbersM[3]) * calculateProbability(model.marginalAdhesion, numbersM[4]) * calculateProbability(model.normalNucleoli, numbersM[5]) * calculateProbability(model.singleEpithelial, numbersM[6]) * calculateProbability(model.bareNuclei, numbersM[7]) * calculateProbability(model.mitosis, numbersM[8]); //Compare p(X|B)p(B) to p(C|M)p(M) if ((diagnosisLikelihoodB * priorProbabilityB) >= (diagnosisLikelihoodM * priorProbabilityM)) { ViewBag.diagnosis = "Diagnosis: Benign"; ViewBag.probabilityB = "The Likelihood Maximum of a Benign Tumor: " + (diagnosisLikelihoodB * priorProbabilityB).ToString(); ViewBag.probabilityM = "The Likelihood Maximum of a Malignant Tumor: " + (diagnosisLikelihoodM * priorProbabilityM).ToString(); Highcharts chart = new Highcharts("chart") .InitChart(new Chart { DefaultSeriesType = ChartTypes.Bar }) .SetTitle(new Title { Text = "Patient Data Comparison" }) .SetSubtitle(new Subtitle { Text = "Data for Patient " + model.patientID }) .SetXAxis(new XAxis { Categories = new[] { "Clump Thickness", "Uniformity Size", "Uniformity Shape", "Marginal Adhesion", "Single Epithelial Cell Size", "Bare Nuclei", "Bland Chromatin", "Normal Nucleoli", "Mitosis" }, Title = new XAxisTitle { Text = "Cell Attributes" } }) .SetYAxis(new YAxis { Min = 0, Title = new YAxisTitle { Text = "Value 1-10", Align = AxisTitleAligns.High } }) .SetTooltip(new Tooltip { Formatter = "function() { return ''+ this.series.name +': '+ this.y; }" }) .SetPlotOptions(new PlotOptions { Bar = new PlotOptionsBar { DataLabels = new PlotOptionsBarDataLabels { Enabled = false } } }) .SetCredits(new Credits { Enabled = false }) .SetSeries(new[] { new Series { Name = "Average Benign Patient", Data = new Data(new object[] { numbers[0][0], numbers[1][0], numbers[2][0], numbers[3][0], numbers[4][0], numbers[5][0], numbers[6][0], numbers[7][0], numbers[8][0] }) }, new Series { Name = "Average Malignant Patient", Data = new Data(new object[] { numbersM[0][0], numbersM[1][0], numbersM[2][0], numbersM[3][0], numbersM[4][0], numbersM[5][0], numbersM[6][0], numbersM[7][0], numbersM[8][0] }) }, new Series { Name = "Patient " + model.patientID.ToString(), Data = new Data(new object[] { model.clumpThickness, model.uniformitySize, model.uniformityShape, model.marginalAdhesion, model.singleEpithelial, model.bareNuclei, model.blandChromatin, model.normalNucleoli, model.mitosis }) } }); return(View(chart)); } else { ViewBag.diagnosis = "Diagnosis: Malignant"; ViewBag.probabilityB = "The Likelihood Maximum of a Benign Tumor: " + (diagnosisLikelihoodB * priorProbabilityB).ToString(); ViewBag.probabilityM = "The Likelihood Maximum of a Malignant Tumor: " + (diagnosisLikelihoodM * priorProbabilityM).ToString(); Highcharts chart = new Highcharts("chart") .InitChart(new Chart { DefaultSeriesType = ChartTypes.Bar }) .SetTitle(new Title { Text = "Patient Data Comparison" }) .SetSubtitle(new Subtitle { Text = "Data for Patient " + model.patientID }) .SetXAxis(new XAxis { Categories = new[] { "Clump Thickness", "Uniformity Size", "Uniformity Shape", "Marginal Adhesion", "Single Epithelial Cell Size", "Bare Nuclei", "Bland Chromatin", "Normal Nucleoli", "Mitosis" }, Title = new XAxisTitle { Text = "Cell Attributes" } }) .SetYAxis(new YAxis { Min = 0, Title = new YAxisTitle { Text = "Value 1-10", Align = AxisTitleAligns.High } }) .SetTooltip(new Tooltip { Formatter = "function() { return ''+ this.series.name +': '+ this.y; }" }) .SetPlotOptions(new PlotOptions { Bar = new PlotOptionsBar { DataLabels = new PlotOptionsBarDataLabels { Enabled = false } } }) .SetCredits(new Credits { Enabled = false }) .SetSeries(new[] { new Series { Name = "Average Benign Patient", Data = new Data(new object[] { numbers[0][0], numbers[1][0], numbers[2][0], numbers[3][0], numbers[4][0], numbers[5][0], numbers[6][0], numbers[7][0], numbers[8][0] }) }, new Series { Name = "Average Malignant Patient", Data = new Data(new object[] { numbersM[0][0], numbersM[1][0], numbersM[2][0], numbersM[3][0], numbersM[4][0], numbersM[5][0], numbersM[6][0], numbersM[7][0], numbersM[8][0] }) }, new Series { Name = "Patient " + model.patientID.ToString(), Data = new Data(new object[] { model.clumpThickness, model.uniformitySize, model.uniformityShape, model.marginalAdhesion, model.singleEpithelial, model.bareNuclei, model.blandChromatin, model.normalNucleoli, model.mitosis }) } }); return(View(chart)); } }