亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? solver.cs

?? SVM的一個源程序
?? CS
?? 第 1 頁 / 共 5 頁
字號:
        private float[][] buffer;
        private float[] QD;

        public SVR_Q(Problem prob, Parameter param)
            : base(prob.Count, prob.X, param)
        {
            l = prob.Count;
            cache = new Cache(l, (long)(param.CacheSize * (1 << 20)));
            QD = new float[2 * l];
            sign = new short[2 * l];
            index = new int[2 * l];
            for (int k = 0; k < l; k++)
            {
                sign[k] = 1;
                sign[k + l] = -1;
                index[k] = k;
                index[k + l] = k;
                QD[k] = (float)kernel_function(k, k);
                QD[k + l] = QD[k];
            }
            buffer = new float[2][];
            buffer[0] = new float[2 * l];
            buffer[1] = new float[2 * l];
            next_buffer = 0;
        }

        public override void swap_index(int i, int j)
        {
            do { short _ = sign[i]; sign[i] = sign[j]; sign[j] = _; } while (false);
            do { int _ = index[i]; index[i] = index[j]; index[j] = _; } while (false);
            do { float _ = QD[i]; QD[i] = QD[j]; QD[j] = _; } while (false);
        }

        public override float[] get_Q(int i, int len)
        {
            float[][] data = new float[1][];
            int real_i = index[i];
            if (cache.get_data(real_i, data, l) < l)
            {
                for (int j = 0; j < l; j++)
                    data[0][j] = (float)kernel_function(real_i, j);
            }

            // reorder and copy
            float[] buf = buffer[next_buffer];
            next_buffer = 1 - next_buffer;
            short si = sign[i];
            for (int j = 0; j < len; j++)
                buf[j] = si * sign[j] * data[0][index[j]];
            return buf;
        }

        public override float[] get_QD()
        {
            return QD;
        }
    }

    internal static class Procedures
    {
        //
        // construct and solve various formulations
        //
        private static void solve_c_svc(Problem prob, Parameter param,
                        double[] alpha, Solver.SolutionInfo si,
                        double Cp, double Cn)
        {
            int l = prob.Count;
            double[] minus_ones = new double[l];
            short[] y = new short[l];

            int i;

            for (i = 0; i < l; i++)
            {
                alpha[i] = 0;
                minus_ones[i] = -1;
                if (prob.Y[i] > 0) y[i] = +1; else y[i] = -1;
            }

            Solver s = new Solver();
            s.Solve(l, new SVC_Q(prob, param, y), minus_ones, y,
                alpha, Cp, Cn, param.EPS, si, param.Shrinking);

            double sum_alpha = 0;
            for (i = 0; i < l; i++)
                sum_alpha += alpha[i];

            if (Cp == Cn)
                Debug.Write("nu = " + sum_alpha / (Cp * prob.Count) + "\n");

            for (i = 0; i < l; i++)
                alpha[i] *= y[i];
        }

        private static void solve_nu_svc(Problem prob, Parameter param,
                        double[] alpha, Solver.SolutionInfo si)
        {
            int i;
            int l = prob.Count;
            double nu = param.Nu;

            short[] y = new short[l];

            for (i = 0; i < l; i++)
                if (prob.Y[i] > 0)
                    y[i] = +1;
                else
                    y[i] = -1;

            double sum_pos = nu * l / 2;
            double sum_neg = nu * l / 2;

            for (i = 0; i < l; i++)
                if (y[i] == +1)
                {
                    alpha[i] = Math.Min(1.0, sum_pos);
                    sum_pos -= alpha[i];
                }
                else
                {
                    alpha[i] = Math.Min(1.0, sum_neg);
                    sum_neg -= alpha[i];
                }

            double[] zeros = new double[l];

            for (i = 0; i < l; i++)
                zeros[i] = 0;

            Solver_NU s = new Solver_NU();
            s.Solve(l, new SVC_Q(prob, param, y), zeros, y,
                alpha, 1.0, 1.0, param.EPS, si, param.Shrinking);
            double r = si.r;

            Debug.Write("C = " + 1 / r + "\n");

            for (i = 0; i < l; i++)
                alpha[i] *= y[i] / r;

            si.rho /= r;
            si.obj /= (r * r);
            si.upper_bound_p = 1 / r;
            si.upper_bound_n = 1 / r;
        }

        private static void solve_one_class(Problem prob, Parameter param,
                            double[] alpha, Solver.SolutionInfo si)
        {
            int l = prob.Count;
            double[] zeros = new double[l];
            short[] ones = new short[l];
            int i;

            int n = (int)(param.Nu * prob.Count);	// # of alpha's at upper bound

            for (i = 0; i < n; i++)
                alpha[i] = 1;
            if (n < prob.Count)
                alpha[n] = param.Nu * prob.Count - n;
            for (i = n + 1; i < l; i++)
                alpha[i] = 0;

            for (i = 0; i < l; i++)
            {
                zeros[i] = 0;
                ones[i] = 1;
            }

            Solver s = new Solver();
            s.Solve(l, new ONE_CLASS_Q(prob, param), zeros, ones,
                alpha, 1.0, 1.0, param.EPS, si, param.Shrinking);
        }

        private static void solve_epsilon_svr(Problem prob, Parameter param,
                        double[] alpha, Solver.SolutionInfo si)
        {
            int l = prob.Count;
            double[] alpha2 = new double[2 * l];
            double[] linear_term = new double[2 * l];
            short[] y = new short[2 * l];
            int i;

            for (i = 0; i < l; i++)
            {
                alpha2[i] = 0;
                linear_term[i] = param.P - prob.Y[i];
                y[i] = 1;

                alpha2[i + l] = 0;
                linear_term[i + l] = param.P + prob.Y[i];
                y[i + l] = -1;
            }

            Solver s = new Solver();
            s.Solve(2 * l, new SVR_Q(prob, param), linear_term, y,
                alpha2, param.C, param.C, param.EPS, si, param.Shrinking);

            double sum_alpha = 0;
            for (i = 0; i < l; i++)
            {
                alpha[i] = alpha2[i] - alpha2[i + l];
                sum_alpha += Math.Abs(alpha[i]);
            }
            Debug.Write("nu = " + sum_alpha / (param.C * l) + "\n");
        }

        private static void solve_nu_svr(Problem prob, Parameter param,
                        double[] alpha, Solver.SolutionInfo si)
        {
            int l = prob.Count;
            double C = param.C;
            double[] alpha2 = new double[2 * l];
            double[] linear_term = new double[2 * l];
            short[] y = new short[2 * l];
            int i;

            double sum = C * param.Nu * l / 2;
            for (i = 0; i < l; i++)
            {
                alpha2[i] = alpha2[i + l] = Math.Min(sum, C);
                sum -= alpha2[i];

                linear_term[i] = -prob.Y[i];
                y[i] = 1;

                linear_term[i + l] = prob.Y[i];
                y[i + l] = -1;
            }

            Solver_NU s = new Solver_NU();
            s.Solve(2 * l, new SVR_Q(prob, param), linear_term, y, alpha2, C, C, param.EPS, si, param.Shrinking);

            Debug.Write("epsilon = " + (-si.r) + "\n");

            for (i = 0; i < l; i++)
                alpha[i] = alpha2[i] - alpha2[i + l];
        }

        //
        // decision_function
        //
        private class decision_function
        {
            public double[] alpha;
            public double rho;
        };

        static decision_function svm_train_one(
            Problem prob, Parameter param,
            double Cp, double Cn)
        {
            double[] alpha = new double[prob.Count];
            Solver.SolutionInfo si = new Solver.SolutionInfo();
            switch (param.SvmType)
            {
                case SvmType.C_SVC:
                    solve_c_svc(prob, param, alpha, si, Cp, Cn);
                    break;
                case SvmType.NU_SVC:
                    solve_nu_svc(prob, param, alpha, si);
                    break;
                case SvmType.ONE_CLASS:
                    solve_one_class(prob, param, alpha, si);
                    break;
                case SvmType.EPSILON_SVR:
                    solve_epsilon_svr(prob, param, alpha, si);
                    break;
                case SvmType.NU_SVR:
                    solve_nu_svr(prob, param, alpha, si);
                    break;
            }

            Debug.Write("obj = " + si.obj + ", rho = " + si.rho + "\n");

            // output SVs

            int nSV = 0;
            int nBSV = 0;
            for (int i = 0; i < prob.Count; i++)
            {
                if (Math.Abs(alpha[i]) > 0)
                {
                    ++nSV;
                    if (prob.Y[i] > 0)
                    {
                        if (Math.Abs(alpha[i]) >= si.upper_bound_p)
                            ++nBSV;
                    }
                    else
                    {
                        if (Math.Abs(alpha[i]) >= si.upper_bound_n)
                            ++nBSV;
                    }
                }
            }

            Debug.Write("nSV = " + nSV + ", nBSV = " + nBSV + "\n");

            decision_function f = new decision_function();
            f.alpha = alpha;
            f.rho = si.rho;
            return f;
        }

        // Platt's binary SVM Probablistic Output: an improvement from Lin et al.
        private static void sigmoid_train(int l, double[] dec_values, double[] labels,
                      double[] probAB)
        {
            double A, B;
            double prior1 = 0, prior0 = 0;
            int i;

            for (i = 0; i < l; i++)
                if (labels[i] > 0) prior1 += 1;
                else prior0 += 1;

            int max_iter = 100; 	// Maximal number of iterations
            double min_step = 1e-10;	// Minimal step taken in line search
            double sigma = 1e-3;	// For numerically strict PD of Hessian
            double eps = 1e-5;
            double hiTarget = (prior1 + 1.0) / (prior1 + 2.0);
            double loTarget = 1 / (prior0 + 2.0);
            double[] t = new double[l];
            double fApB, p, q, h11, h22, h21, g1, g2, det, dA, dB, gd, stepsize;
            double newA, newB, newf, d1, d2;
            int iter;

            // Initial Point and Initial Fun Value
            A = 0.0; B = Math.Log((prior0 + 1.0) / (prior1 + 1.0));
            double fval = 0.0;

            for (i = 0; i < l; i++)
            {
                if (labels[i] > 0) t[i] = hiTarget;
                else t[i] = loTarget;
                fApB = dec_values[i] * A + B;
                if (fApB >= 0)
                    fval += t[i] * fApB + Math.Log(1 + Math.Exp(-fApB));
                else
                    fval += (t[i] - 1) * fApB + Math.Log(1 + Math.Exp(fApB));
            }
            for (iter = 0; iter < max_iter; iter++)
            {
                // Update Gradient and Hessian (use H' = H + sigma I)
                h11 = sigma; // numerically ensures strict PD
                h22 = sigma;
                h21 = 0.0; g1 = 0.0; g2 = 0.0;
                for (i = 0; i < l; i++)
                {
                    fApB = dec_values[i] * A + B;
                    if (fApB >= 0)
                    {
                        p = Math.Exp(-fApB) / (1.0 + Math.Exp(-fApB));
                        q = 1.0 / (1.0 + Math.Exp(-fApB));
                    }
                    else
                    {
                        p = 1.0 / (1.0 + Math.Exp(fApB));
                        q = Math.Exp(fApB) / (1.0 + Math.Exp(fApB));
                    }
                    d2 = p * q;
                    h11 += dec_values[i] * dec_values[i] * d2;
                    h22 += d2;
                    h21 += dec_values[i] * d2;
                    d1 = t[i] - p;
                    g1 += dec_values[i] * d1;
                    g2 += d1;
                }

                // Stopping Criteria
                if (Math.Abs(g1) < eps && Math.Abs(g2) < eps)
                    break;

                // Finding Newton direction: -inv(H') * g
                det = h11 * h22 - h21 * h21;
                dA = -(h22 * g1 - h21 * g2) / det;
                dB = -(-h21 * g1 + h11 * g2) / det;
                gd = g1 * dA + g2 * dB;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲男人的天堂在线观看| 日本aⅴ免费视频一区二区三区| 韩国在线一区二区| 久久色.com| 国产丶欧美丶日本不卡视频| 国产色婷婷亚洲99精品小说| 国产成人精品免费网站| 最新国产成人在线观看| 在线观看成人免费视频| 三级影片在线观看欧美日韩一区二区| 欧美精品1区2区3区| 免费观看久久久4p| 久久综合国产精品| 91啪在线观看| 婷婷一区二区三区| 久久视频一区二区| 色伊人久久综合中文字幕| 偷偷要91色婷婷| 精品国产一区二区精华| 成人av在线观| 亚洲成av人影院在线观看网| 精品国产乱码久久久久久闺蜜| 国产激情一区二区三区四区 | 午夜精品成人在线视频| 欧美大片在线观看一区| 不卡视频一二三四| 亚洲一区二区三区四区五区中文 | 久久成人免费网站| 久久日韩精品一区二区五区| www.亚洲在线| 石原莉奈在线亚洲二区| 日本一区二区免费在线观看视频| 在线欧美日韩国产| 国产精品一二三四区| 一区二区三区在线不卡| 日韩精品最新网址| 日本韩国精品一区二区在线观看| 乱中年女人伦av一区二区| 亚洲少妇中出一区| 久久综合999| 欧美三级三级三级爽爽爽| 国产剧情在线观看一区二区| 亚洲第一会所有码转帖| 欧美精品一区二区三区在线| 在线观看一区日韩| 成人免费高清视频在线观看| 日韩激情av在线| 国产精品久久久久aaaa| 欧美sm极限捆绑bd| 欧美视频在线一区二区三区 | 日韩欧美在线1卡| 91美女视频网站| 国产成人精品三级麻豆| 免费欧美高清视频| 亚洲6080在线| 自拍偷自拍亚洲精品播放| 久久久综合网站| 欧美一区二区视频网站| 色拍拍在线精品视频8848| 国产福利一区二区| 韩国v欧美v日本v亚洲v| 日韩成人免费电影| 偷偷要91色婷婷| 午夜欧美在线一二页| 亚洲欧美激情在线| 成人免费小视频| 成人免费在线观看入口| 国产精品视频yy9299一区| 久久久久国产精品麻豆ai换脸| 日韩欧美在线1卡| 日韩三级av在线播放| 91精品国产综合久久香蕉麻豆| 欧洲一区二区av| 91高清在线观看| 色偷偷久久一区二区三区| 99视频在线观看一区三区| caoporn国产精品| 成人精品视频一区二区三区尤物| 国产一区二区美女诱惑| 国产一区久久久| 国产精品一二二区| 国精产品一区一区三区mba视频| 久久精品噜噜噜成人av农村| 麻豆精品新av中文字幕| 久久99精品国产.久久久久| 精品亚洲成a人| av不卡免费电影| 91国偷自产一区二区三区成为亚洲经典| 97精品久久久久中文字幕 | 国产精品不卡在线| 亚洲女人****多毛耸耸8| 亚洲人成精品久久久久| 亚洲午夜免费电影| 日韩1区2区日韩1区2区| 久久99热这里只有精品| 狠狠色狠狠色综合| 99久久综合国产精品| 色吊一区二区三区| 欧美军同video69gay| 日韩区在线观看| 欧美国产视频在线| 悠悠色在线精品| 日本欧美一区二区三区乱码| 国产真实乱对白精彩久久| 成人小视频在线| 欧美综合亚洲图片综合区| 欧美日韩国产a| 久久综合久久综合亚洲| 国产精品乱码人人做人人爱| 亚洲欧美一区二区三区久本道91| 性做久久久久久久久| 免费不卡在线观看| 播五月开心婷婷综合| 欧美色图一区二区三区| 欧美精品一区二区三区蜜臀| 中文字幕日韩一区二区| 五月天国产精品| 成人av动漫在线| 正在播放亚洲一区| 国产精品嫩草99a| 亚洲第一成年网| 国产激情精品久久久第一区二区 | 一级精品视频在线观看宜春院 | eeuss国产一区二区三区| 欧美美女一区二区在线观看| 久久精品无码一区二区三区| 一区二区在线观看av| 国产美女娇喘av呻吟久久 | 欧美午夜精品一区二区三区| 精品少妇一区二区三区视频免付费 | 免费人成黄页网站在线一区二区| a亚洲天堂av| 精品嫩草影院久久| 亚洲影院理伦片| 成人动漫一区二区| 精品国产一区二区三区四区四| 依依成人精品视频| 粉嫩在线一区二区三区视频| 欧美一区二区三区视频免费播放| 日韩理论在线观看| 国产精品自拍毛片| 欧美一级高清片| 亚洲国产日韩在线一区模特| 国产成人福利片| 欧美成人综合网站| 亚洲成av人片www| 91在线国内视频| 国产欧美视频一区二区三区| 免费av网站大全久久| 欧美性色黄大片| 亚洲欧美日韩久久| 久久久久一区二区三区四区| 亚洲va国产va欧美va观看| 一本色道久久综合精品竹菊| 国产蜜臀av在线一区二区三区| 经典三级一区二区| 欧美一级二级三级蜜桃| 肉肉av福利一精品导航| 欧美在线观看视频一区二区| 日韩理论电影院| av一区二区三区在线| 国产精品色哟哟| 国产高清精品网站| 国产日本欧洲亚洲| 国产成人精品网址| 国产精品无码永久免费888| 久久99国产乱子伦精品免费| 91麻豆精品国产91久久久久久久久 | 在线免费不卡视频| 一区二区三区四区av| 日本精品视频一区二区| 亚洲黄网站在线观看| 91久久国产综合久久| 一区二区三区不卡视频在线观看 | 精品1区2区3区| 日韩在线a电影| 欧美一级免费观看| 美国毛片一区二区| 久久久亚洲欧洲日产国码αv| 国产一区二区看久久| 日本一区二区三区国色天香| 成人深夜福利app| 又紧又大又爽精品一区二区| 欧美性生活久久| 蜜桃免费网站一区二区三区| 精品国产乱码久久久久久免费| 黑人精品欧美一区二区蜜桃| 国产欧美精品在线观看| 91原创在线视频| 亚洲电影视频在线| 日韩美女一区二区三区四区| 国产精品一卡二卡在线观看| 国产精品传媒在线| 欧美中文一区二区三区| 蜜臀av性久久久久蜜臀aⅴ流畅| 久久久一区二区三区| 91香蕉视频在线| 日韩av高清在线观看| 国产欧美一区二区精品仙草咪 | 精品中文av资源站在线观看|