protected void Page_Load(object sender, EventArgs e) { var data = new List <double[]>() { new double[] { 3, 104 }, new double[] { 2, 100 }, new double[] { 1, 81 }, new double[] { 101, 10 }, new double[] { 99, 5 }, new double[] { 98, 2 }, }; //其中类别0代表爱情片,类别1代表动作片。 var labels = new List <int>() { 0, 0, 0, 1, 1, 1 }; var knn = new ClassKNN(k: 3, labels: labels, features: data); //开始分类,并获取最后的分类结果 int classfyResult1 = knn.Classify(new double[][] { new double[] { 18, 90 } }); int classfyResult2 = knn.Classify(new double[][] { new double[] { 50, 25 } }); Response.Write("电影7分类:" + classfyResult1 + "</br>"); Response.Write("电影8分类:" + classfyResult2 + "</br>"); Response.Write("</br>----------------------------------------</br>"); //输出所有数据 Response.Write(knn.getResult()); }
protected void Page_Load(object sender, EventArgs e) { string sql = string.Format("select FlightDistance,GameTime,Icecream,Label from tblHelenDate where id >=1 and id<=900 order by id"); DataSet ds = new DataSet(); SQLHelper sh = new SQLHelper(); try { //通过数据库读取数据建立数据模型 sh.RunSQL(sql, ref ds); DataTable dt = ds.Tables[0]; int len = dt.Rows.Count; int[] Label = new int[len]; double[] FlightDistance = new double[len]; double[] GameTime = new double[len]; double[] Icecream = new double[len]; int i = 0; foreach (DataRow dr in dt.Rows) { FlightDistance[i] = Convert.ToDouble(dr[0].ToString()); GameTime[i] = Convert.ToDouble(dr[1].ToString()); Icecream[i] = Convert.ToDouble(dr[2].ToString()); Label[i] = Convert.ToInt32(dr[3].ToString()); i++; } //归一化处理 FlightDistance = TvbboyMath.Normlize(FlightDistance); GameTime = TvbboyMath.Normlize(GameTime); Icecream = TvbboyMath.Normlize(Icecream); //建立模型需要的数据类型data var data = new List <double[]>(); for (int j = 0; j < len; j++) { data.Add(new double[] { FlightDistance[j], GameTime[j], Icecream[j] }); } ; var labelslist = new List <int>(Label); //正式建立knn数据模型 var knn = new ClassKNN(k: 30, labels: labelslist, features: data); //从数据库检索待测的10%数据 sql = string.Format("select FlightDistance,GameTime,Icecream,Label from tblHelenDate where id >=901 order by id"); //在执行新的查询前,确认原来datatable数据不再有效的时候,应该将其清空,方可复用,否则数据会累加 ds.Tables.Clear(); sh.RunSQL(sql, ref ds); dt = ds.Tables[0]; len = dt.Rows.Count; int[] aimLabel = new int[len]; double[] aimFlightDistance = new double[len]; double[] aimGameTime = new double[len]; double[] aimIcecream = new double[len]; i = 0; foreach (DataRow dr in dt.Rows) { aimFlightDistance[i] = Convert.ToDouble(dr[0].ToString()); aimGameTime[i] = Convert.ToDouble(dr[1].ToString()); aimIcecream[i] = Convert.ToDouble(dr[2].ToString()); aimLabel[i] = Convert.ToInt32(dr[3].ToString()); i++; } //归一化处理 aimFlightDistance = TvbboyMath.Normlize(aimFlightDistance); aimGameTime = TvbboyMath.Normlize(aimGameTime); aimIcecream = TvbboyMath.Normlize(aimIcecream); int predictionTrueNum = 0; for (int j = 0; j < len; j++) { int classfyResult = knn.Classify(new double[][] { new double[] { aimFlightDistance[j], aimGameTime[j], aimIcecream[j] } }); Response.Write("第" + (j + 1) + "组数据:预测值" + classfyResult + "-----真实值:" + aimLabel[j] + " "); if (j % 4 == 0) { Response.Write("</br>"); } if (classfyResult == aimLabel[j]) { predictionTrueNum++; } } //成功率是小数,所以不允许两个整数相除 Response.Write("预测成功率:" + double.Parse(predictionTrueNum.ToString()) / len + "</br>"); Response.Write("</br>----------------------------------------</br>"); } catch (Exception ex) { Response.Write(ex.Message + ex.Message); } finally { //使用完毕,必须主动关闭数据读取器 sh.Close(); } }