private void loadModel() { var ftype = (FileExtensionEnum)this.type; var tempfullName = Path.Combine(HttpContext.Current.Server.MapPath("~/"), this.path); switch (ftype) { case FileExtensionEnum.Allmethods: if (this._mBind == null) { this._mBind = BindModel.ReadModel <BindModel>(tempfullName); this._components = this._mBind.GetComponents(); } break; case FileExtensionEnum.PLSBind: if (this._mPLS == null) { this._mPLS = BindModel.ReadModel <PLSModel>(tempfullName); this._components = this._mPLS.GetComponents(); } break; case FileExtensionEnum.IdLib: if (this._mId == null) { this._mId = BindModel.ReadModel <IdentifyModel>(tempfullName); this._components = this._mId.GetComponents(); } break; case FileExtensionEnum.FitLib: if (this._mFitting == null) { this._mFitting = BindModel.ReadModel <FittingModel>(tempfullName); this._components = this._mFitting.GetComponents(); } break; case FileExtensionEnum.PLS1: case FileExtensionEnum.PLSANN: if (this._mPLS1 == null) { this._mPLS1 = BindModel.ReadModel <PLSSubModel>(tempfullName); this._components = this._mPLS1.GetComponents(); } break; case FileExtensionEnum.ItgBind: if (this._itgSub == null) { this._itgSub = BindModel.ReadModel <IntegrateModel>(tempfullName); this._components = this._itgSub.GetComponents(); } break; default: break; } }
public override void Clear() { this.dataGridView1.Columns.Clear(); this._inited = false; this._lib = null; this._model = null; this.lblLibPath.Text = null; }
public override void Predict(List <string> files, object model, int numofId) { //throw new NotImplementedException(); this._model = model as PLSModel; if (this._model == null || files == null) { throw new ArgumentNullException(""); } if (!this._inited) { if (this.dataGridView1.InvokeRequired) { ThreadStart s = () => { this.init(this._model); }; this.dataGridView1.Invoke(s); } else { this.init(this._model); } } var error_filelst = new List <string>(); int rowNum = 1; foreach (var f in files) { try { var spec = new Spectrum(f); var robj = this._model.Predict(spec); if (this.dataGridView1.InvokeRequired) { ThreadStart s = () => { this.addRow(robj, spec, rowNum, numofId); }; this.dataGridView1.Invoke(s); } else { this.addRow(robj, spec, rowNum, numofId); } } catch (Exception ex) { log.Error(ex); error_filelst.Add(new FileInfo(f).Name); } rowNum++; } if (error_filelst.Count > 0) { MessageBox.Show(string.Format("以下{1}条光谱未正确预测:\n{0}", string.Join(";", error_filelst), error_filelst.Count )); } }
private void btnOpen_Click(object sender, EventArgs e) { if (this.cheakSave()) { return; } OpenFileDialog myOpenFileDialog = new OpenFileDialog(); myOpenFileDialog.Filter = string.Format("{1} (*.{0})|*.{0}", FileExtensionEnum.PLSBind, FileExtensionEnum.PLSBind.GetDescription()); myOpenFileDialog.InitialDirectory = Busi.Common.Configuration.FolderMModel; if (myOpenFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { this._model = BindModel.ReadModel <PLSModel>(myOpenFileDialog.FileName); if (this._model != null) { if (this._model.LibBase == null || this._model.LibBase.Count == 0) { MessageBox.Show("该捆绑模型不含光谱库,不能修改!", "信息提示"); } else { lblLibIntro.Text = this._model.ToString(); } this._nodes.Clear(); foreach (var m in this._model.SubModels) { var step = 1; var tag = true; if (m.LibBase == null || m.LibBase.Count == 0 || m.Trained) { step = 4; tag = false; } this._nodes.Add(new MyTreeNode() { IsFinished = false, ToolTipText = "双击可编辑子模型", PLS = new PLSFormContent() { ActiveStep = step, VResult = null, CVResult = null, Model = m, FlowPanelEnable = tag } }); } this.treeInit(); } } }
private void init(PLSModel m) { this.dataGridView1.Columns.Clear(); this.dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "样本名称", Width = 120 }); this.dataGridView1.Rows.Add(""); int i = 1; foreach (var sm in m.SubModels) { this.dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = sm.Comp.Name, ToolTipText = sm.Comp.Name, Width = 60, Tag = sm.Comp.Name }); this.dataGridView1[i, 0].Value = sm.MethodNameString; i++; } if (this.ismix(this._model, this._lib)) { foreach (var c in this._lib.Components) { this.dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = c.Name, ToolTipText = c.Name, Width = 60, Tag = c.Name }); // this.dataGridView1[i, 0].Value = sm.MethodNameString; i++; } } this.dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill }); this._inited = true; }
private void btnReset_Click(object sender, EventArgs e) { s1 = null; s2 = null; s3 = null; this.lib = null; this.model = null; this.btnSpec1.Enabled = true; this.btnSpec2.Enabled = true; this.btnSpec3.Enabled = true; //this.btnCumpute.Enabled = false; this.btnLoadModel.Enabled = false; lblInfo.Visible = false; this.drawchart(); this.specGraph1.DrawSpec(new List <Spectrum>()); this.specGridView1.Specs = null; }
private void init(PLSModel m) { this.dataGridView1.Columns.Clear(); this.dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "样本名称", Width = 120 }); this.dataGridView1.Rows.Add(""); int i = 1; foreach (var sm in m.SubModels) { this.dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = sm.Comp.Name, ToolTipText = sm.Comp.Name, Width = 60, Tag = sm.Comp.Name }); this.dataGridView1[i, 0].Value = string.Format("比例{0}", i); i++; } if (m.MixSpecs != null && m.MixSpecs.Count > 1) { foreach (var c in m.MixSpecs.First().Components) { this.dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = c.Name, ToolTipText = c.Name, Width = 60, Tag = c.Name }); } } this.dataGridView1.Columns.Add(new DataGridViewTextBoxColumn() { AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill }); this._inited = true; }
private void btnLoadModel_Click(object sender, EventArgs e) { OpenFileDialog myOpenFileDialog = new OpenFileDialog(); myOpenFileDialog.Filter = string.Format("{0} (*.{1})|*.{1}", FileExtensionEnum.PLSBind.GetDescription(), FileExtensionEnum.PLSBind); myOpenFileDialog.InitialDirectory = Busi.Common.Configuration.FolderBlendMod; if (myOpenFileDialog.ShowDialog() == DialogResult.OK) { try { this._model = BindModel.ReadModel <PLSModel>(myOpenFileDialog.FileName); if (this._model.SubModels.Count < 2) { MessageBox.Show("该捆绑模型不是混兑比例光谱的模型"); this._model = null; return; } //验证是不是混兑模型 foreach (var m in this._model.SubModels) { if (m.Method != PLSMethodEnum.PLSMix) { MessageBox.Show("该捆绑模型不是混兑比例光谱的模型"); this._model = null; return; } } //设置按钮 this.btnAddFromLib.Enabled = true; this.btnPredict.Enabled = true; this.btnSpec1.Enabled = this._model.SubModels.Count > 0; this.btnSpec2.Enabled = this._model.SubModels.Count > 1; this.btnSpec3.Enabled = this._model.SubModels.Count > 2; } catch (Exception ex) { MessageBox.Show(ex.Message); log.Error(ex); } } }
private void btnSave_Click(object sender, EventArgs e) { if (this.dataGridView1.Rows.Count == 0) { return; } var model = new PLSModel(); for (int i = 0; i < this.dataGridView1.Rows.Count; i++) { var row = this.dataGridView1.Rows[i] as mydataRow; if (row != null) { model.SubModels.Add(row.Model); } } SaveFileDialog mySaveFileDialog = new SaveFileDialog(); mySaveFileDialog.Filter = string.Format("{1} (*.{0})|*.{0}", FileExtensionEnum.PLSBind, FileExtensionEnum.PLSBind.GetDescription()); mySaveFileDialog.InitialDirectory = Busi.Common.Configuration.FolderMModel; if (mySaveFileDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK) { return; } model.FullPath = mySaveFileDialog.FileName; model.LibBase = null; model.CreateTime = DateTime.Now; model.Edited = false; model.Trained = true; if (model.Save()) { MessageBox.Show("捆绑模型保存成功!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); this.Close(); } else { MessageBox.Show("捆绑模型保存失败!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } }
private bool ismix(PLSModel model, SpecBase lib) { bool tag = true; if (model == null || lib == null) { return(false); } foreach (var m in model.SubModels) { if (m.Method == PLSMethodEnum.PLS1) { tag = false; } if (lib.Specs.Where(d => d.Name == m.Comp.Name).Count() == 0) { tag = false; } } return(tag); }
// [TestMethod] public void PLSTest() { var specbase = new SpecBase(@"F:\3506\15chemometrics\RIPP_DEMO\algorithm\原油测试数据\crude.Lib"); var pls = new PLSModel(); pls.LibBase = specbase; var m = new SubPLS1Model(); m.ParentModel = pls; m.MaxFactor = 6; m.LibBase = specbase; m.Comp = specbase.First().Components.First(); m.Filters = new List <IFilter>(); m.Filters.Add(new Sgdiff(21, 2)); m.Filters.Add(new SavitzkyGolay(5)); var f3 = new VarRegionManu(); f3.Xaxis = specbase.First().Data.X; var a = f3.Argus; a["Xaxis"].Value = f3.Xaxis; f3.XaxisRegion = new System.Collections.Generic.List <RegionPoint>(); f3.XaxisRegion.Add(new RegionPoint(4003, 4702)); a["XaxisRegion"].Value = f3.XaxisRegion; f3.Argus = a; m.Filters.Add(f3); m.Train(specbase); var writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\algorithm\原油测试数据\b.mat"); writer.WriteMatrix <double>(m.SubModel.Bias.ToColumnMatrix(), "b"); writer.Close(); writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\algorithm\原油测试数据\Loads.mat"); writer.WriteMatrix <double>(m.SubModel.Loads, "Loads"); writer.Close(); writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\algorithm\原油测试数据\Score_Length.mat"); writer.WriteMatrix <double>(m.SubModel.Score_Length.ToColumnMatrix(), "Score_Length"); writer.Close(); writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\algorithm\原油测试数据\Scores.mat"); writer.WriteMatrix <double>(m.SubModel.Scores, "Scores"); writer.Close(); writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\algorithm\原油测试数据\Weights.mat"); writer.WriteMatrix <double>(m.SubModel.Weights, "Weights"); writer.Close(); var lst = m.LibBase.Where(d => d.Usage == UsageTypeEnum.Validate); var rlst = new List <SubPLS1Result>(); foreach (var s in lst) { rlst.Add(m.Predict(s)); } }
private void btnLoadModel_Click(object sender, EventArgs e) { OpenFileDialog myOpenFileDialog = new OpenFileDialog(); myOpenFileDialog.Filter = string.Format("{0} (*.{1})|*.{1}", FileExtensionEnum.PLSBind.GetDescription(), FileExtensionEnum.PLSBind); myOpenFileDialog.InitialDirectory = Busi.Common.Configuration.FolderBlendMod; if (myOpenFileDialog.ShowDialog() == DialogResult.OK) { var m = BindModel.ReadModel <PLSModel>(myOpenFileDialog.FileName); if (m == null || lib == null) { return; } if (m.SubModels.Count != this.lib.Components.Count) { MessageBox.Show(string.Format("参与混兑计算的光谱数量为{0},加载的捆绑模型子模型数据为{1},不匹配。", this.lib.Components.Count, m.SubModels.Count)); return; } this.toolStrip2.Enabled = false; this.btnLoadModel.Text = "正在计算"; this.progressBar1.Visible = true; Action a = () => { this.model = Serialize.DeepClone <PLSModel>(m); this.model.MixSpecs = new List <Spectrum>(); if (s1 != null) { this.model.MixSpecs.Add(s1); } if (s2 != null) { this.model.MixSpecs.Add(s2); } if (s3 != null) { this.model.MixSpecs.Add(s3); } int i = 0; foreach (var sm in this.model.SubModels) { sm.Comp = this.lib.Components[i]; sm.Train(this.lib); var cvlst = sm.CrossValidation(this.lib); if (this.specGridView1.InvokeRequired) { ThreadStart s = () => { this.add(cvlst, i); }; this.specGridView1.Invoke(s); } else { this.add(cvlst, i); } i++; } if (this.toolStrip2.InvokeRequired) { ThreadStart s = () => { this.progressBar1.Visible = false; this.btnLoadModel.Text = "应用模型"; this.toolStrip2.Enabled = true; }; this.toolStrip2.Invoke(s); } else { this.progressBar1.Visible = false; this.btnLoadModel.Text = "应用模型"; this.toolStrip2.Enabled = true; } }; a.BeginInvoke(null, null); } }
private void btnModelLoad_Click(object sender, EventArgs e) { OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = string.Format("所有方法文件 (*.{0};*.{2};*.{4};*.{6};*.{8};*.{10};*.{12})|*.{0};*.{2};*.{4};*.{6};*.{8};*.{10};*.{12}|{1} (*.{0})|*.{0}|{3} (*.{2})|*.{2}|{5} (*.{4})|*.{4}|{7} (*.{6})|*.{6}|{9} (*.{8})|*.{8}|{11} (*.{10})|*.{10}|{13} (*.{12})|*.{12}", FileExtensionEnum.Allmethods, FileExtensionEnum.Allmethods.GetDescription(), FileExtensionEnum.IdLib, FileExtensionEnum.IdLib.GetDescription(), FileExtensionEnum.FitLib, FileExtensionEnum.FitLib.GetDescription(), FileExtensionEnum.PLSBind, FileExtensionEnum.PLSBind.GetDescription(), FileExtensionEnum.PLS1, FileExtensionEnum.PLS1.GetDescription(), FileExtensionEnum.PLSANN, FileExtensionEnum.PLSANN.GetDescription(), FileExtensionEnum.ItgBind, FileExtensionEnum.ItgBind.GetDescription() ); dlg.InitialDirectory = Busi.Common.Configuration.DefaultDirectory; dlg.Title = "选择方法"; if (dlg.ShowDialog() != System.Windows.Forms.DialogResult.OK) { return; } var ftype = BindModel.CheckType(dlg.FileName); switch (ftype) { case FileExtensionEnum.Allmethods: this._mBind = BindModel.ReadModel <BindModel>(dlg.FileName); this._mBind.FullPath = dlg.FileName; this.tabControl1.SelectedIndex = 0; break; case FileExtensionEnum.PLSBind: this._mPLS = BindModel.ReadModel <PLSModel>(dlg.FileName); this._mPLS.FullPath = dlg.FileName; this.tabControl1.SelectedIndex = 1; break; case FileExtensionEnum.IdLib: this._mId = BindModel.ReadModel <IdentifyModel>(dlg.FileName); this._mId.FullPath = dlg.FileName; this.tabControl1.SelectedIndex = 2; break; case FileExtensionEnum.FitLib: this._mFitting = BindModel.ReadModel <FittingModel>(dlg.FileName); this._mFitting.FullPath = dlg.FileName; this.tabControl1.SelectedIndex = 3; break; case FileExtensionEnum.PLS1: case FileExtensionEnum.PLSANN: this._mPLS1 = BindModel.ReadModel <PLSSubModel>(dlg.FileName); this._mPLS1.FullPath = dlg.FileName; this.tabControl1.SelectedIndex = 4; break; case FileExtensionEnum.ItgBind: this._itgSub = BindModel.ReadModel <IntegrateModel>(dlg.FileName); this._itgSub.FullPath = dlg.FileName; this.tabControl1.SelectedIndex = 5; break; default: break; } this.tabChange(); var p = this.tabControl1.SelectedTab as Controls.IPanel; if (p != null) { p.Clear(); } }