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; } }
// [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 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(); }
// [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 SpectraFitTest() { var matReader = new MatlabMatrixReader <double>(@"F:\3506\15chemometrics\RIPP_DEMO\src\RIPP\testdata\cx.mat"); var cx = matReader.ReadMatrix(); matReader = new MatlabMatrixReader <double>(@"F:\3506\15chemometrics\RIPP_DEMO\src\RIPP\testdata\vx.mat"); var vx = matReader.ReadMatrix(); var f1 = new Sgdiff(); f1.P = 2; var cx1 = f1.Process((Matrix)cx); var writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\src\RIPP\testdata\fit\cx1.mat"); writer.WriteMatrix <double>(cx1, "cx1"); writer.Close(); var f2 = new SavitzkyGolay(5); var cx2 = f2.Process((Matrix)cx1); writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\src\RIPP\testdata\fit\cx2.mat"); writer.WriteMatrix <double>(cx2, "cx2"); writer.Close(); var f3 = new VarRegionManu(); f3.Xaxis = new DenseVector(cx.RowCount); for (int i = 1; i <= cx.RowCount; i++) { f3.Xaxis[i - 1] = i; } var a = f3.Argus; a["Xaxis"].Value = f3.Xaxis; f3.XaxisRegion = new System.Collections.Generic.List <RegionPoint>(); f3.XaxisRegion.Add(new RegionPoint(131, 314)); f3.XaxisRegion.Add(new RegionPoint(468, 677)); a["XaxisRegion"].Value = f3.XaxisRegion; f3.Argus = a; var lst = new System.Collections.Generic.List <Vector>(); for (int i = 0; i < cx2.ColumnCount; i++) { lst.Add(f3.VarProcess((Vector)cx2.Column(i))); } var cx3 = new DenseMatrix(lst[0].Count, cx2.ColumnCount); for (int i = 0; i < cx2.ColumnCount; i++) { cx3.SetColumn(i, lst[i]); } writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\src\RIPP\testdata\fit\cx3.mat"); writer.WriteMatrix <double>(cx3, "cx3"); writer.Close(); var f4 = new NormPathLength(); var cx4 = f4.Process(cx3); writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\src\RIPP\testdata\fit\cx4.mat"); writer.WriteMatrix <double>(cx4, "cx4"); writer.Close(); matReader = new MatlabMatrixReader <double>(@"F:\3506\15chemometrics\RIPP_DEMO\src\RIPP\testdata\fit\mcx4.mat"); cx4 = (Matrix)matReader.ReadMatrix(); var fitr = new DenseMatrix(cx4.ColumnCount - 1, cx4.ColumnCount); for (int i = 0; i < cx4.ColumnCount; i++) { var subm = new DenseMatrix(cx4.RowCount, cx4.ColumnCount - 1); int tag = 0; for (int k = 0; k < cx4.ColumnCount; k++) { if (k == i) { continue; } subm.SetColumn(tag, cx4.Column(k)); tag++; } var fr = SpectraFit.Fit((Matrix)subm, (Vector)cx4.Column(i)); fitr.SetColumn(i, fr); } writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\src\RIPP\testdata\fit\fitr.mat"); writer.WriteMatrix <double>(fitr, "fitr"); writer.Close(); }