public void Train(SpecBase lib, bool needFilter = true) { //过滤掉性质有NaN的数据 lib.FilterNaN(); int[] idxs = lib.Specs.Select((d, idx) => new { s = d, idx = idx }).Where(d => d.s.Usage != UsageTypeEnum.Ignore).Select(d => d.idx).ToArray(); this._lib = Serialize.DeepClone <SpecBase>(lib.SubLib(idxs)); if (needFilter && this._filters != null) { this._lib.SetX(Preprocesser.Process(this._filters, this._lib), true); } //PCA分解 var handler = Tools.ModelHandler; if (this._maxRank < 1) { this._maxRank = 10; } this._maxRank = Math.Min(this._maxRank, this._lib.X.Dimensions[1]); var r = handler.IdentifyTrain(3, this._lib.X, this._maxRank); this._p = (MWNumericArray)r[0]; this._w = (MWNumericArray)r[1]; this._t = (MWNumericArray)r[2]; this._trained = true; }
//[TestMethod] public void fittiting() { var specbase = new SpecBase(@"F:\3506\15chemometrics\RIPP_DEMO\algorithm\原油测试数据\crude.Lib"); var CX = specbase.GetX(false, UsageTypeEnum.Calibrate); var writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\algorithm\原油测试数据\CX.mat"); writer.WriteMatrix <double>(CX, "CX"); writer.Close(); var cy = specbase.GetY(false, UsageTypeEnum.Calibrate); writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\algorithm\原油测试数据\CY.mat"); writer.WriteMatrix <double>(cy, "CY"); writer.Close(); var vx = specbase.GetX(false, UsageTypeEnum.Validate); writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\algorithm\原油测试数据\VX.mat"); writer.WriteMatrix <double>(vx, "VX"); writer.Close(); var vy = specbase.GetY(false, UsageTypeEnum.Validate); writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\algorithm\原油测试数据\VY.mat"); writer.WriteMatrix <double>(vy, "VY"); writer.Close(); }
private void btnAddtmpl_Click(object sender, EventArgs e) { OpenFileDialog myOpenFileDialog = new OpenFileDialog() { Filter = string.Format("{1} (*.{0})|*.{0}", FileExtensionEnum.LibTmp, FileExtensionEnum.LibTmp.GetDescription()), InitialDirectory = Busi.Common.Configuration.FolderSpecTemp }; if (myOpenFileDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK) { return; } try { var s = new SpecBase(myOpenFileDialog.FileName); this._model = new IntegrateModel(); this._model.Comps = s.Components.Clone(); this.initGrid(); } catch { } this.btnAddModel.Enabled = true; this.btnSave.Enabled = true; }
private void btnMerger_Click(object sender, EventArgs e) { if (this.specGridView1.Specs == null) { MessageBox.Show("请先添加或打开光谱库", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } OpenFileDialog myOpenFileDialog = new OpenFileDialog() { Filter = string.Format("{1} (*.{0})|*.{0}", FileExtensionEnum.Lib, FileExtensionEnum.Lib.GetDescription()), InitialDirectory = Busi.Common.Configuration.FolderSpecLib }; if (myOpenFileDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK) { return; } var specs = new SpecBase(myOpenFileDialog.FileName); //try //{ this.specGridView1.Specs.Merger(specs); this.specGridView1.Render(); //} //catch (Exception ex) //{ // Log.Error(ex); // MessageBox.Show("合并出错,请检测光谱库是中光谱是否一致!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Error); //} }
private void initSpec(SpecBase lib) { this.specGridView1.Specs = lib; this.setTitle(); this.specGraphAll.DrawSpec(lib.ToList()); this.rtxbDesc.Text = lib.Description; }
public void Drawchart(SpecBase lib, NIR.Component c) { this.specGraph1.DrawSpec(lib); var clonelib = lib.Clone(); clonelib.FilterNaN(c); var xaxis = this.Xaxis; double[] yaxis; if (c == null) { yaxis = Tools.Corelatn(clonelib.X, clonelib.GetY(lib.Components.First())); } else { yaxis = Tools.Corelatn(clonelib.X, clonelib.GetY(c)); } var coreSpec = new Spectrum() { Name = "相关系数", Data = new SpectrumData(xaxis, yaxis, clonelib.First().Data.XType, DataTypeEnum.Corelatn) }; this.specGraph2.DrawSpec(coreSpec); }
public static MWNumericArray Process(IList <IFilter> filters, SpecBase libinput) { if (filters == null || libinput == null) { throw new ArgumentNullException(""); } return(Process(filters, libinput.GetX(true))); }
public override void Clear() { this.dataGridView1.Columns.Clear(); this._inited = false; this._lib = null; this._model = null; this.lblLibPath.Text = null; }
private void setOutput(SpecBase lib) { // this.plS1CVResult1.PLSContent.ActiveStep = 2; if (lib != null) { this.ksSetControl1.LoadData(lib, this._lib); } }
public void SetCharacterStats(SpecBase spec) { CreateCharacterStats(spec); _statDictionary = CreateStatDictionary(); _elementEfficacyDictionary = CreateElementEfficacyDictionary(spec); _poolManager = PoolManager.Instance; }
private Dictionary <ElementType, float> CreateElementEfficacyDictionary(SpecBase spec) { return(new Dictionary <ElementType, float>() { { ElementType.Fire, spec.BaseFireEfficacy }, { ElementType.Wind, spec.BaseAirEfficacy }, { ElementType.Earth, spec.BaseEarthEfficacy }, { ElementType.Water, spec.BaseWaterEfficacy } }); }
private void CreateCharacterStats(SpecBase spec) { Health = new CharacterResource(CreateStat(spec.BaseHealth, StatType.MaxHealth), spec.BaseHealth); Spirit = new CharacterResource(CreateStat(spec.BaseSpirit, StatType.MaxSpirit), 0); _strength = CreateStat(spec.BaseStrength, StatType.Strength); _will = CreateStat(spec.BaseWill, StatType.Will); _defence = CreateStat(spec.BaseDefence, StatType.Defence); _magicDefence = CreateStat(spec.BaseMagicDefence, StatType.MagicDefence); }
public void LoadData(SpecBase filterlib, SpecBase baselib) { this._olib = Serialize.DeepClone <SpecBase>(filterlib); this._nlib = Serialize.DeepClone <SpecBase>(baselib); // this.renderGrid(UsageTypeEnum.Node); if (cbxSamSelector.SelectedIndex == 0) { this.renderGrid(UsageTypeEnum.Node); } this.combRender(); }
private void btnSpecReset_Click(object sender, EventArgs e) { this._s1 = null; this._s2 = null; this._s3 = null; this._lib = null; this.btnSpec1.Enabled = this._model != null && this._model.SubModels.Count > 0; this.btnSpec2.Enabled = this._model != null && this._model.SubModels.Count > 1; this.btnSpec3.Enabled = this._model != null && this._model.SubModels.Count > 2; this.reModelEnable(); }
public void Train(SpecBase lib, bool needFilter = true) { //过滤掉性质有NaN的数据 lib.FilterNaN(); int[] idxs = lib.Specs.Select((d, idx) => new { s = d, idx = idx }).Where(d => d.s.Usage != UsageTypeEnum.Ignore).Select(d => d.idx).ToArray(); this._lib = Serialize.DeepClone <SpecBase>(lib.SubLib(idxs)); if (needFilter && this._filters != null) { this._lib.SetX(Preprocesser.Process(this._filters, this._lib), true); } this._trained = true; }
private static SpecBase mix(Spectrum s, double[] v1, double[] v2, double[] v3, string[] names) { var lib = new SpecBase(); lib.Comp_Add(new Component() { Name = names[0], Eps = 2 }); lib.Comp_Add(new Component() { Name = names[1], Eps = 2 }); lib.Comp_Add(new Component() { Name = names[2], Eps = 2 }); var rlst = Tools.ToolHandler.Mix3(4, (MWNumericArray)v1, (MWNumericArray)v2, (MWNumericArray)v3); var x = (MWNumericArray)rlst[0]; var c1 = (double[])((MWNumericArray)rlst[1]).ToVector(MWArrayComponent.Real); var c2 = (double[])((MWNumericArray)rlst[2]).ToVector(MWArrayComponent.Real); var c3 = (double[])((MWNumericArray)rlst[3]).ToVector(MWArrayComponent.Real); for (int i = 0; i < x.Dimensions[1]; i++) { var st = s.Clone(); st.Usage = UsageTypeEnum.Calibrate; st.Components.Clear(); st.Components.Add(new Component() { Name = names[0], ActualValue = c1[i] }); st.Components.Add(new Component() { Name = names[1], ActualValue = c2[i] }); st.Components.Add(new Component() { Name = names[2], ActualValue = c3[i] }); st.Name = (i + 1).ToString(); st.Color = Spectrum.RandomColor(); st.Data.Y = (double[])Tools.SelectColumn(x, i + 1).ToVector(MWArrayComponent.Real); lib.Add(st); } return(lib); }
public DialogResult ShowData(SpecBase lib, int maxLen = 3) { this._lib = lib; if (this._lib == null) { return(System.Windows.Forms.DialogResult.Cancel); } foreach (var s in this._lib.Specs) { this.dataGridView1.Rows.Add(s.Name, s.UUID); } return(this.ShowDialog()); }
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; }
public void DrawSpec(SpecBase lib) { if (lib == null || lib.Count == 0) { return; } this._specs = new List <Spectrum>(); for (int i = 0; i < this._maxCount; i++) { if (lib.Count <= i) { break; } this._specs.Add(lib[i]); } plotAll(); }
private void btnLoadSpec_Click(object sender, EventArgs e) { OpenFileDialog myOpenFileDialog = new OpenFileDialog() { Filter = string.Format("{1} (*.{0})|*.{0}", FileExtensionEnum.Lib, FileExtensionEnum.Lib.GetDescription()), InitialDirectory = Busi.Common.Configuration.FolderSpecLib }; if (myOpenFileDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK) { return; } this._lib = new SpecBase(myOpenFileDialog.FileName); ToolTip tip = new ToolTip(); tip.SetToolTip(this.btnLoadSpec, myOpenFileDialog.FileName); this.clear(); }
private void btnAddFromLib_Click(object sender, EventArgs e) { OpenFileDialog myOpenFileDialog = new OpenFileDialog() { Filter = string.Format("{1} (*.{0})|*.{0}", FileExtensionEnum.Lib, FileExtensionEnum.Lib.GetDescription()), InitialDirectory = Busi.Common.Configuration.FolderSpecLib }; if (myOpenFileDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK) { return; } try { var lib = new SpecBase(myOpenFileDialog.FileName); var sfrm = new RIPP.NIR.Controls.FrmChooseSpecs(); if (sfrm.ShowData(lib) == System.Windows.Forms.DialogResult.OK) { var lst = sfrm.SelectSpecs; if (lst != null && lst.Count > 1) { _s1 = lst[0]; _s2 = lst[1]; if (lst.Count > 2 && this._model.SubModels.Count > 2) { _s3 = lst[2]; } else { _s3 = null; } btnSpec1.Enabled = false; btnSpec2.Enabled = false; btnSpec3.Enabled = false; } } } catch (Exception ex) { Log.Error(ex); } this.reModelEnable(); }
private void btnLoadLib_Click(object sender, EventArgs e) { this.Clear(); OpenFileDialog myOpenFileDialog = new OpenFileDialog() { Filter = string.Format("{1} (*.{0})|*.{0}", FileExtensionEnum.Lib, FileExtensionEnum.Lib.GetDescription()), InitialDirectory = Busi.Common.Configuration.FolderSpecLib }; if (myOpenFileDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK) { return; } try { this._lib = new SpecBase(myOpenFileDialog.FileName); this.lblLibPath.Text = this._lib.FullPath; } catch { } }
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); }
/// <summary> /// 计算 /// </summary> public void Compute(SpecBase data, bool isAll = false, UsageTypeEnum utype = UsageTypeEnum.Calibrate) { this._specsInput = data; this._specsOutput = data.Clone(); if (this._filter == null) { return; } this._statu = WorkStatu.Working; this.fireStatuChange(); this._specsOutput.X = this._filter.Process(this._specsInput.X); if (this._filter.FType == FilterType.VarFilter) { this._specsOutput.Axis.X = this._filter.VarProcess(this._specsInput.Axis.X); } this._statu = WorkStatu.Finished; this.fireStatuChange(); }
private void button5_Click(object sender, EventArgs e) { var specbase = new SpecBase(@"F:\3506\15chemometrics\RIPP_DEMO\algorithm\原油测试数据\密度.Lib"); var model = new SubPLS1Model(); model.Comp = specbase.First().Components.First(); model.MaxFactor = 20; // var model = new IdentifyModel() { Wind = 11, MinSQ = 0.98, TQ = 0.998 }; model.Filters = new List <IFilter>(); model.Filters.Add(new Sgdiff(21, 2, 2)); //model.Filters.Add(new SavitzkyGolay(5)); var xidx = new List <RegionPoint>(); xidx.Add(new RegionPoint(4002, 4702)); xidx.Add(new RegionPoint(5302, 6102)); var varregion = new VarRegionManu(); var argu = varregion.Argus; argu["XaxisRegion"].Value = xidx; argu["Xaxis"].Value = specbase.First().Data.X; varregion.Argus = argu; model.Filters.Add(varregion); for (int i = 0; i < 10; i++) { var cv = new CrossValidation <SubPLS1Result>(model); DateTime dt1 = DateTime.Now; //cv.CV(specbase, false); //var span1 = (DateTime.Now - dt1).TotalMilliseconds; dt1 = DateTime.Now; cv.CV(specbase, true); var span2 = (DateTime.Now - dt1).TotalMilliseconds; } }
public List <IntegrateResultItem>[] CrossValidation(SpecBase lib, bool needFilter = true, int numOfId = 5) { return(null); }
public void Train(SpecBase lib, bool needFilter = true) { }
// [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)); } }
// [TestMethod] public void fiiting() { var specbase = new SpecBase(@"F:\3506\15chemometrics\RIPP_DEMO\algorithm\原油测试数据\crude.Lib"); var model = new FittingModel() { Wind = 11, MinSQ = 0.98, TQ = 0.998 }; // var model = new IdentifyModel() { Wind = 11, MinSQ = 0.98, TQ = 0.998 }; model.Filters = new List <IFilter>(); model.Filters.Add(new Sgdiff(21, 2, 2)); model.Filters.Add(new SavitzkyGolay(5)); var xidx = new List <RegionPoint>(); xidx.Add(new RegionPoint(4002, 4702)); xidx.Add(new RegionPoint(5302, 6102)); var varregion = new VarRegionManu(); var argu = varregion.Argus; argu["XaxisRegion"].Value = xidx; argu["Xaxis"].Value = specbase.First().Data.X; varregion.Argus = argu; model.Filters.Add(varregion); model.Filters.Add(new NormPathLength()); model.FiltersForIdentify = Serialize.DeepClone <IList <IFilter> >(model.Filters); var vspecbase = specbase.Clone(); vspecbase.Clear(); foreach (var s in specbase) { if (s.Usage == UsageTypeEnum.Calibrate) { vspecbase.Add(s.Clone()); } } var dd = RIPP.NIR.Data.Preprocesser.Process(model.Filters, vspecbase); var writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\src\RIPP\testdata\fit\filterd.mat"); writer.WriteMatrix <double>(dd.GetX(), "filterd"); writer.Close(); var cv = new CrossValidation <FittingResult>(model); var lst = cv.CV(specbase); var allTQ = new DenseVector(specbase.Where(d => d.Usage == UsageTypeEnum.Calibrate).Count()); var allSQ = new DenseVector(specbase.Where(d => d.Usage == UsageTypeEnum.Calibrate).Count()); var allRate = new DenseMatrix(5, specbase.Where(d => d.Usage == UsageTypeEnum.Calibrate).Count()); for (int i = 0; i < lst.Count; i++) { allTQ[i] = lst[i].TQ; allSQ[i] = lst[i].SQ.Min(); var ddd = lst[i].Specs.Select(d => d.Rate); for (int k = 0; k < 5; k++) { if (k >= ddd.Count()) { break; } allRate[k, i] = ddd.ElementAt(k); } } writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\src\RIPP\testdata\fit\tq.mat"); writer.WriteMatrix <double>(allTQ.ToColumnMatrix(), "TQ"); writer.Close(); writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\src\RIPP\testdata\fit\sq.mat"); writer.WriteMatrix <double>(allSQ.ToColumnMatrix(), "SQ"); writer.Close(); writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\src\RIPP\testdata\fit\result.mat"); writer.WriteMatrix <double>(allRate, "allRate"); writer.Close(); }
// [TestMethod] public void Identify() { var specbase = new SpecBase(@"F:\3506\15chemometrics\RIPP_DEMO\algorithm\原油测试数据\crude.Lib"); var model = new IdentifyModel() { Wind = 11, MinSQ = 0.98, TQ = 0.998 }; model.Filters = new List <IFilter>(); model.Filters.Add(new Sgdiff(21, 2, 2)); model.Filters.Add(new SavitzkyGolay(5)); var xidx = new List <RegionPoint>(); xidx.Add(new RegionPoint(4002, 4702)); xidx.Add(new RegionPoint(5302, 6102)); var varregion = new VarRegionManu(); var argu = varregion.Argus; argu["XaxisRegion"].Value = xidx; argu["Xaxis"].Value = specbase.First().Data.X; varregion.Argus = argu; model.Filters.Add(varregion); model.Filters.Add(new NormPathLength()); var vspecbase = specbase.Clone(); vspecbase.Clear(); foreach (var s in specbase) { if (s.Usage == UsageTypeEnum.Calibrate) { vspecbase.Add(s.Clone()); } } var dd = RIPP.NIR.Data.Preprocesser.Process(model.Filters, vspecbase); var writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\src\RIPP\testdata\id\filterd.mat"); writer.WriteMatrix <double>(dd.GetX(), "filterd"); writer.Close(); var cv = new CrossValidation <IdentifyResult>(model); var lst = cv.CV(specbase); var allTQ = new DenseMatrix(5, specbase.Where(d => d.Usage == UsageTypeEnum.Calibrate).Count()); var allSQ = new DenseMatrix(5, specbase.Where(d => d.Usage == UsageTypeEnum.Calibrate).Count()); var allResult = allSQ.Clone(); for (int i = 0; i < lst.Count; i++) { var tq = new DenseVector(lst[i].Items.Select(d => d.TQ).ToArray()); var sq = new DenseVector(lst[i].Items.Select(d => d.SQ).ToArray()); var resulttt = new DenseVector(lst[i].Items.Select(d => Convert.ToDouble(d.Result)).ToArray()); allTQ.SetColumn(i, tq.SubVector(0, 5)); allSQ.SetColumn(i, sq.SubVector(0, 5)); allResult.SetColumn(i, resulttt.SubVector(0, 5)); } writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\src\RIPP\testdata\id\tq.mat"); writer.WriteMatrix <double>(allTQ, "TQ"); writer.Close(); writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\src\RIPP\testdata\id\sq.mat"); writer.WriteMatrix <double>(allSQ, "SQ"); writer.Close(); writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\src\RIPP\testdata\id\result.mat"); writer.WriteMatrix <double>(allResult, "result"); writer.Close(); }