コード例 #1
0
        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;
            }
        }
コード例 #2
0
        // [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));
            }
        }
コード例 #3
0
        // [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();
        }
コード例 #4
0
        // [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();
        }
コード例 #5
0
        //  [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();
        }