private void btn_RunAll_Click(object sender, EventArgs e) { FolderBrowserDialog fbd = new FolderBrowserDialog(); if (fbd.ShowDialog() == DialogResult.OK) { chk_useControlValues.Enabled = false; Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); Log.LogMessage("Starting Stopwatch"); List<SAMDataPoint.FeelingModel> feelings = new List<SAMDataPoint.FeelingModel>() { SAMDataPoint.FeelingModel.Arousal2High, SAMDataPoint.FeelingModel.Arousal2Low, SAMDataPoint.FeelingModel.Arousal3, SAMDataPoint.FeelingModel.Valence2Low, SAMDataPoint.FeelingModel.Valence2High, SAMDataPoint.FeelingModel.Valence3 }; eh = new ExcelHandler(fbd.SelectedPath); if (!eh.BooksOpen) { Log.LogMessage("Cannot open or write to books"); return; } var dataFolders = Directory.GetDirectories(fbd.SelectedPath); List<SVMParameter> parameters = GenerateSVMParameters(); //Debug param /* List<SVMParameter> parameters = new List<SVMParameter> { new SVMParameter() }; parameters[0].C = 32; parameters[0].Gamma = 0.25; parameters[0].Kernel = SVMKernelType.SIGMOID;*/ int curDat = 1; int maxDat = dataFolders.Length; foreach (var item in dataFolders) { if (item.Split('\\').Last() == "Stats") { Log.LogMessage("Stats folder skipping"); continue; } DataProgressHandler DPH = new DataProgressHandler(item); if (DPH.AllDone) { Log.LogMessage("Already did " + item + ", skipping.."); curDat++; continue; } if (!LoadData(item, _fd)) { Log.LogMessage(item.Split('-').Last() + " is not classifiable"); continue; } string personName = item.Split('\\').Last(); eh.AddPersonToBooks(personName); foreach (var feel in feelings) { statusLabel.Text = "STANDARD: " + curDat + "/" + maxDat + " -> " + feel + " -> " + item.Split('\\').Last(); gsrProg = 0; gsrTot = 1; hrProg = 0; hrTot = 1; eegProg = 0; eegTot = 1; faceProg = 0; faceTot = 1; bool gsrWrite = false; bool hrWrite = false; bool eegWrite = false; bool faceWrite = false; if (feel != SAMDataPoint.FeelingModel.Valence2High && feel != SAMDataPoint.FeelingModel.Valence2Low && feel != SAMDataPoint.FeelingModel.Valence3 && !skipGSR && !DPH.done["GSR" + Enum.GetName(typeof(SAMDataPoint.FeelingModel), feel)] && shouldRun["GSR.dat"]) { gsrThread = CreateMachineThread("GSR", parameters, FeatureCreator.GSRArousalOptimizationFeatures, feel, (cur, max) => { gsrProg = cur; gsrTot = max; }, chk_useControlValues.Checked); gsrThread.Priority = threadPrio; gsrThread.Start(); } else { Log.LogMessage("GSR skipping"); } if (!DPH.done["HR" + Enum.GetName(typeof(SAMDataPoint.FeelingModel), feel)] && !skipHR && shouldRun["HR.dat"]) { hrThread = CreateMachineThread("HR", parameters, (feel == SAMDataPoint.FeelingModel.Valence2High || feel == SAMDataPoint.FeelingModel.Valence2Low || feel == SAMDataPoint.FeelingModel.Valence3) ? FeatureCreator.HRValenceOptimizationFeatures : FeatureCreator.HRArousalOptimizationFeatures, feel, (cur, max) => { hrProg = cur; hrTot = max; }, chk_useControlValues.Checked); hrThread.Priority = threadPrio; hrThread.Start(); } else { Log.LogMessage("HR skipping"); } if (!DPH.done["EEG" + Enum.GetName(typeof(SAMDataPoint.FeelingModel), feel)] && !skipEEG && shouldRun["EEG.dat"]) { eegThread = CreateMachineThread("EEG", parameters, (feel == SAMDataPoint.FeelingModel.Valence2High || feel == SAMDataPoint.FeelingModel.Valence2Low || feel == SAMDataPoint.FeelingModel.Valence3) ? FeatureCreator.EEGValenceOptimizationFeatures : FeatureCreator.EEGArousalOptimizationFeatures, feel, (cur, max) => { eegProg = cur; eegTot = max; }, chk_useControlValues.Checked); eegThread.Priority = threadPrio; eegThread.Start(); } else { Log.LogMessage("EEG skipping"); } if (!DPH.done["Face" + Enum.GetName(typeof(SAMDataPoint.FeelingModel), feel)] && !skipFace && shouldRun["KINECT.dat"]) { faceThread = CreateMachineThread("FACE", parameters, (feel == SAMDataPoint.FeelingModel.Valence2High || feel == SAMDataPoint.FeelingModel.Valence2Low || feel == SAMDataPoint.FeelingModel.Valence3) ? FeatureCreator.FACEValenceOptimizationFeatures : FeatureCreator.FACEArousalOptimizationFeatures, feel, (cur, max) => { faceProg = cur; faceTot = max; }, chk_useControlValues.Checked); faceThread.Priority = threadPrio; faceThread.Start(); } else { Log.LogMessage("Face skipping"); } List<SVMConfiguration> confs = new List<SVMConfiguration>(); SVMConfiguration gsrConf; SVMConfiguration eegConf; SVMConfiguration hrConf; SVMConfiguration faceConf; while ((gsrThread != null && gsrThread.IsAlive) || (hrThread != null && hrThread.IsAlive) || (eegThread != null && eegThread.IsAlive) || (faceThread != null && faceThread.IsAlive)) { Thread.Sleep(1000); eegBar.Value = (int)(((double)eegProg / eegTot) * 100); gsrBar.Value = (int)(((double)gsrProg / gsrTot) * 100); faceBar.Value = (int)(((double)faceProg / faceTot) * 100); hrBar.Value = (int)(((double)hrProg / hrTot) * 100); Application.DoEvents(); if (gsrThread != null && !gsrThread.IsAlive && !gsrWrite) { gsrWrite = true; gsrConf = svmConfs.OfType<SVMConfiguration>().First((x) => x.Name.StartsWith("GSR") && x.Name.Contains(feel.ToString())); confs.Add(gsrConf); var gsrMac = new StdClassifier(gsrConf, samData); var gsrRes = gsrMac.OldCrossValidate(feel, 1); Log.LogMessage("Best result for person " + curDat + " GSR " + feel + " is " + gsrRes[0].GetAccuracy()); eh.AddDataToPerson(personName, ExcelHandler.Book.GSR, gsrRes.First(), feel); DPH.done["GSR" + Enum.GetName(typeof(SAMDataPoint.FeelingModel), feel)] = true; DPH.SaveProgress(); gsrThread = null; } if (hrThread != null && !hrThread.IsAlive && !hrWrite) { hrWrite = true; hrConf = svmConfs.OfType<SVMConfiguration>().First((x) => x.Name.StartsWith("HR") && x.Name.Contains(feel.ToString())); confs.Add(hrConf); var hrMac = new StdClassifier(hrConf, samData); var hrRes = hrMac.OldCrossValidate(feel, 1); Log.LogMessage("Best result for person " + curDat + " HR " + feel + " is " + hrRes[0].GetAccuracy()); eh.AddDataToPerson(personName, ExcelHandler.Book.HR, hrRes.First(), feel); DPH.done["HR" + Enum.GetName(typeof(SAMDataPoint.FeelingModel), feel)] = true; DPH.SaveProgress(); hrThread = null; } if (eegThread != null && !eegThread.IsAlive && !eegWrite) { eegWrite = true; eegConf = svmConfs.OfType<SVMConfiguration>().First((x) => x.Name.StartsWith("EEG") && x.Name.Contains(feel.ToString())); confs.Add(eegConf); var eegMac = new StdClassifier(eegConf, samData); var eegRes = eegMac.OldCrossValidate(feel, 1); Log.LogMessage("Best result for person " + curDat + " EEG " + feel + " is " + eegRes[0].GetAccuracy()); eh.AddDataToPerson(personName, ExcelHandler.Book.EEG, eegRes.First(), feel); DPH.done["EEG" + Enum.GetName(typeof(SAMDataPoint.FeelingModel), feel)] = true; DPH.SaveProgress(); eegThread = null; } if (faceThread != null && !faceThread.IsAlive && !faceWrite) { faceWrite = true; faceConf = svmConfs.OfType<SVMConfiguration>().First((x) => x.Name.StartsWith("FACE") && x.Name.Contains(feel.ToString())); confs.Add(faceConf); var faceMac = new StdClassifier(faceConf, samData); var faceRes = faceMac.OldCrossValidate(feel, 1); Log.LogMessage("Best result for person " + curDat + " Face " + feel + " is " + faceRes[0].GetAccuracy()); eh.AddDataToPerson(personName, ExcelHandler.Book.FACE, faceRes.First(), feel); DPH.done["Face" + Enum.GetName(typeof(SAMDataPoint.FeelingModel), feel)] = true; DPH.SaveProgress(); faceThread = null; } } Log.LogMessage("Done with single machine searching."); foreach (var cnf in confs) { Log.LogMessage("Saving " + cnf.Name + "..."); } //Write normal results eh.Save(); Log.LogMessage("Total time: " + stopwatch.Elapsed + " Current person: " + curDat + " and model " + feel.ToString()); } curDat++; eh.Save(); Log.LogMessage("DonnoDK"); } eh.CloseBooks(); Log.LogMessage("Closing books and saving"); Log.LogMessage("Done in: " + stopwatch.Elapsed); } }
private void btn_metaAll_Click(object sender, EventArgs e) { FolderBrowserDialog fbd = new FolderBrowserDialog(); if (fbd.ShowDialog() == DialogResult.OK) { chk_useControlValues.Enabled = false; Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); Log.LogMessage("Starting Stopwatch"); List<SAMDataPoint.FeelingModel> feelings = new List<SAMDataPoint.FeelingModel>() { SAMDataPoint.FeelingModel.Arousal2High, SAMDataPoint.FeelingModel.Arousal2Low, SAMDataPoint.FeelingModel.Arousal3, SAMDataPoint.FeelingModel.Valence2Low, SAMDataPoint.FeelingModel.Valence2High, SAMDataPoint.FeelingModel.Valence3 }; eh = new ExcelHandler(fbd.SelectedPath); if (!eh.BooksOpen) { Log.LogMessage("Cannot open or write to books"); return; } var dataFolders = Directory.GetDirectories(fbd.SelectedPath); List<SVMParameter> parameters = GenerateSVMParameters(); //List<SVMParameter> parameters = new List<SVMParameter> { new SVMParameter() }; int curDat = 1; int maxDat = dataFolders.Length; foreach (var item in dataFolders) { if (item.Split('\\').Last() == "Stats") { Log.LogMessage("Stats folder skipping"); continue; } DataProgressHandler DPH = new DataProgressHandler(item); if (DPH.MetaDone) { Log.LogMessage("Already did " + item + ", skipping.."); curDat++; continue; } string personName = item.Split('\\').Last(); eh.AddPersonToBooks(personName); LoadData(item, _fd); foreach (var feel in feelings) { statusLabel.Text = "META: " + curDat + "/" + maxDat + " -> " + feel + " -> " + item.Split('\\').Last(); List<SVMConfiguration> confs = new List<SVMConfiguration>(); SVMConfiguration gsrConf; SVMConfiguration eegConf; SVMConfiguration hrConf; SVMConfiguration faceConf; gsrConf = svmConfs.OfType<SVMConfiguration>().FirstOrDefault((x) => x.Name.StartsWith("GSR") && x.Name.Contains(feel.ToString())); hrConf = svmConfs.OfType<SVMConfiguration>().FirstOrDefault((x) => x.Name.StartsWith("HR") && x.Name.Contains(feel.ToString())); eegConf = svmConfs.OfType<SVMConfiguration>().FirstOrDefault((x) => x.Name.StartsWith("EEG") && x.Name.Contains(feel.ToString())); faceConf = svmConfs.OfType<SVMConfiguration>().FirstOrDefault((x) => x.Name.StartsWith("FACE") && x.Name.Contains(feel.ToString())); if (gsrConf != null) { confs.Add(gsrConf); } if (eegConf != null) { confs.Add(eegConf); } if (hrConf != null) { confs.Add(hrConf); } if (faceConf != null) { confs.Add(faceConf); } Log.LogMessage("Creating meta machine.."); MetaClassifier meta = new MetaClassifier("Stacking", parameters, samData, ConfigurationsToStds(confs)); prg_meta.Minimum = 0; meta.UpdateCallback = (cur, max) => { metaProg = cur; metaMax = max; }; if (!DPH.done["Voting" + feel]) { Thread tVote = new Thread(() => { var voteRes = meta.DoVoting(feel, 1, chk_useControlValues.Checked); eh.AddDataToPerson(personName, ExcelHandler.Book.Voting, voteRes, feel); Log.LogMessage("Voting on " + feel + " gave " + voteRes.GetAccuracy()); DPH.done["Voting" + feel] = true; DPH.SaveProgress(); }); tVote.Priority = threadPrio; Log.LogMessage("Doing voting"); tVote.Start(); while (tVote != null && tVote.IsAlive) { Thread.Sleep(500); prg_meta.Maximum = metaMax; prg_meta.Value = metaProg; prg_meta_txt.Text = "Voting: " + metaProg + " / " + metaMax; Application.DoEvents(); } eh.Save(); } if (!DPH.done["Stacking" + feel]) { Thread tStack = new Thread(() => { var res = meta.DoStacking(feel, 1, chk_useControlValues.Checked); var bestRes = meta.FindBestFScorePrediction(res); eh.AddDataToPerson(personName, ExcelHandler.Book.Stacking, bestRes, feel); Log.LogMessage("Stacking on " + feel + " gave " + bestRes.GetAccuracy()); DPH.done["Stacking" + feel] = true; DPH.SaveProgress(); meta.Parameters = new List<SVMParameter>() { bestRes.svmParams }; SaveConfiguration(meta.GetConfiguration()); }); tStack.Priority = threadPrio; Log.LogMessage("Doing Stacking"); tStack.Start(); while (tStack != null && tStack.IsAlive) { Thread.Sleep(500); prg_meta.Maximum = metaMax; prg_meta.Value = metaProg; prg_meta_txt.Text = "Stacking: " + metaProg + " / " + metaMax; Application.DoEvents(); } eh.Save(); } } curDat++; eh.Save(); DPH.SaveProgress(); } eh.CloseBooks(); Log.LogMessage("Closing books and saving"); Log.LogMessage("Done in: " + stopwatch.Elapsed); } }