C#,数值计算——分类与推理,基座向量机(SVM,Support Vector Machines)的计算方法与源程序

把 Support Vector Machines 翻译成 支持向量机 是书呆子翻译。基座向量机 不好吗。

1 文本格式

using System;

namespace Legalsoft.Truffer
{
    /// <summary>
    /// Support Vector Machines
    /// </summary>
    public class Svm
    {
        private Svmgenkernel gker { get; set; }
        private int m { get; set; }
        private int fnz { get; set; }
        private int fub { get; set; }
        private int niter { get; set; }
        private double[] alph { get; set; }
        private double[] alphold { get; set; }
        private Ran ran { get; set; } = null;
        private bool alphinit { get; set; }
        private double dalph { get; set; }

        public Svm(Svmgenkernel inker)
        {
            this.gker = inker;
            this.m = gker.y.Length;
            this.alph = new double[m];
            this.alphold = new double[m];
            this.ran = new Ran(21);
            this.alphinit = false;
        }

        public double relax(double lambda, double om)
        {
            int iter;
            int j;
            int jj;
            int k;
            int kk;
            double sum;
            double[] pinsum = new double[m];
            if (alphinit == false)
            {
                for (j = 0; j < m; j++)
                {
                    alph[j] = 0.0;
                }
                alphinit = true;
            }

            // alphold = alph;
            alphold = Globals.CopyFrom(alph);
            Indexx x = new Indexx(alph);
            for (fnz = 0; fnz < m; fnz++)
            {
                if (alph[x.indx[fnz]] != 0.0)
                {
                    break;
                }
            }
            for (j = fnz; j < m - 2; j++)
            {
                k = (int)(j + (ran.int32() % (m - j)));
                Globals.SWAP(ref x.indx[j], ref x.indx[k]);
            }
            for (jj = 0; jj < m; jj++)
            {
                j = x.indx[jj];
                sum = 0.0;
                for (kk = fnz; kk < m; kk++)
                {
                    k = x.indx[kk];
                    sum += (gker.ker[j, k] + 1.0) * gker.y[k] * alph[k];
                }
                alph[j] = alph[j] - (om / (gker.ker[j, j] + 1.0)) * (gker.y[j] * sum - 1.0);
                alph[j] = Math.Max(0.0, Math.Min(lambda, alph[j]));
                if (jj < fnz && alph[j] > 0)
                {
                    Globals.SWAP(ref x.indx[--fnz], ref x.indx[jj]);
                }
            }

            Indexx y = new Indexx(alph);
            for (fnz = 0; fnz < m; fnz++)
            {
                if (alph[y.indx[fnz]] != 0.0)
                {
                    break;
                }
            }
            for (fub = fnz; fub < m; fub++)
            {
                if (alph[y.indx[fub]] == lambda)
                {
                    break;
                }
            }
            for (j = fnz; j < fub - 2; j++)
            {
                k = (int)(j + (ran.int32() % (fub - j)));
                Globals.SWAP(ref y.indx[j], ref y.indx[k]);
            }
            for (jj = fnz; jj < fub; jj++)
            {
                j = y.indx[jj];
                sum = 0.0;
                for (kk = fub; kk < m; kk++)
                {
                    k = y.indx[kk];
                    sum += (gker.ker[j, k] + 1.0) * gker.y[k] * alph[k];
                }
                pinsum[jj] = sum;
            }
            niter = Math.Max((int)(0.5 * (m + 1.0) * (m - fnz + 1.0) / (Globals.SQR(fub - fnz + 1.0))), 1);
            for (iter = 0; iter < niter; iter++)
            {
                for (jj = fnz; jj < fub; jj++)
                {
                    j = y.indx[jj];
                    sum = pinsum[jj];
                    for (kk = fnz; kk < fub; kk++)
                    {
                        k = y.indx[kk];
                        sum += (gker.ker[j, k] + 1.0) * gker.y[k] * alph[k];
                    }
                    alph[j] = alph[j] - (om / (gker.ker[j, j] + 1.0)) * (gker.y[j] * sum - 1.0);
                    alph[j] = Math.Max(0.0, Math.Min(lambda, alph[j]));
                }
            }
            dalph = 0.0;
            for (j = 0; j < m; j++)
            {
                dalph += Globals.SQR(alph[j] - alphold[j]);
            }
            return Math.Sqrt(dalph);
        }

        public double predict(int k)
        {
            double sum = 0.0;
            for (int j = 0; j < m; j++)
            {
                sum += alph[j] * gker.y[j] * (gker.ker[j, k] + 1.0);
            }
            return sum;
        }
    }
}
 

2 代码格式

using System;namespace Legalsoft.Truffer
{/// <summary>/// Support Vector Machines/// </summary>public class Svm{private Svmgenkernel gker { get; set; }private int m { get; set; }private int fnz { get; set; }private int fub { get; set; }private int niter { get; set; }private double[] alph { get; set; }private double[] alphold { get; set; }private Ran ran { get; set; } = null;private bool alphinit { get; set; }private double dalph { get; set; }public Svm(Svmgenkernel inker){this.gker = inker;this.m = gker.y.Length;this.alph = new double[m];this.alphold = new double[m];this.ran = new Ran(21);this.alphinit = false;}public double relax(double lambda, double om){int iter;int j;int jj;int k;int kk;double sum;double[] pinsum = new double[m];if (alphinit == false){for (j = 0; j < m; j++){alph[j] = 0.0;}alphinit = true;}// alphold = alph;alphold = Globals.CopyFrom(alph);Indexx x = new Indexx(alph);for (fnz = 0; fnz < m; fnz++){if (alph[x.indx[fnz]] != 0.0){break;}}for (j = fnz; j < m - 2; j++){k = (int)(j + (ran.int32() % (m - j)));Globals.SWAP(ref x.indx[j], ref x.indx[k]);}for (jj = 0; jj < m; jj++){j = x.indx[jj];sum = 0.0;for (kk = fnz; kk < m; kk++){k = x.indx[kk];sum += (gker.ker[j, k] + 1.0) * gker.y[k] * alph[k];}alph[j] = alph[j] - (om / (gker.ker[j, j] + 1.0)) * (gker.y[j] * sum - 1.0);alph[j] = Math.Max(0.0, Math.Min(lambda, alph[j]));if (jj < fnz && alph[j] > 0){Globals.SWAP(ref x.indx[--fnz], ref x.indx[jj]);}}Indexx y = new Indexx(alph);for (fnz = 0; fnz < m; fnz++){if (alph[y.indx[fnz]] != 0.0){break;}}for (fub = fnz; fub < m; fub++){if (alph[y.indx[fub]] == lambda){break;}}for (j = fnz; j < fub - 2; j++){k = (int)(j + (ran.int32() % (fub - j)));Globals.SWAP(ref y.indx[j], ref y.indx[k]);}for (jj = fnz; jj < fub; jj++){j = y.indx[jj];sum = 0.0;for (kk = fub; kk < m; kk++){k = y.indx[kk];sum += (gker.ker[j, k] + 1.0) * gker.y[k] * alph[k];}pinsum[jj] = sum;}niter = Math.Max((int)(0.5 * (m + 1.0) * (m - fnz + 1.0) / (Globals.SQR(fub - fnz + 1.0))), 1);for (iter = 0; iter < niter; iter++){for (jj = fnz; jj < fub; jj++){j = y.indx[jj];sum = pinsum[jj];for (kk = fnz; kk < fub; kk++){k = y.indx[kk];sum += (gker.ker[j, k] + 1.0) * gker.y[k] * alph[k];}alph[j] = alph[j] - (om / (gker.ker[j, j] + 1.0)) * (gker.y[j] * sum - 1.0);alph[j] = Math.Max(0.0, Math.Min(lambda, alph[j]));}}dalph = 0.0;for (j = 0; j < m; j++){dalph += Globals.SQR(alph[j] - alphold[j]);}return Math.Sqrt(dalph);}public double predict(int k){double sum = 0.0;for (int j = 0; j < m; j++){sum += alph[j] * gker.y[j] * (gker.ker[j, k] + 1.0);}return sum;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/120003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SpringCloudNetflix】一图理解Spring Cloud Netflix解决了那些微服务问题?

什么是微服务理解&#xff1a; SpringCloudNetflix解决的问题理解&#xff1a; SpringCloudNetflix核心点&#xff1a; 注册中心&#xff1a;Eureka负载均衡&#xff1a;Ribbon、Feign服务熔断&#xff1a;Hystrix服务降级&#xff1a;Hystrix服务监控&#xff1a;Hystrix Da…

【工具问题】IDEA每次关闭的时候都会弹框显示closing project,然后弹框持续很久就像卡住了

idea关闭的时候出现问题 问题展示为什么会出现这种情况怎么解决 问题展示 我idea已经关闭了&#xff0c;但是这个弹框要持续很久才能关闭 为什么会出现这种情况 我的plugins原本是加载不出来的&#xff0c;所以我按照网上说法去做 怎么解决 file->setting,再如图选择…

menuconfig 图形化配置原理说明三

一. 简介 本文继续简单了解一下&#xff0c;uboot的图形化配置原理。具体了解 Kconfig语法。 之前文章了解了几个 Kconfig语法。地址如下&#xff1a; menuconfig 图形化配置原理说明二-CSDN博客 二. menuconfig 图形化配置之 Kconfig语法 1. config 条目 顶层 Kconfig …

PyTorch卷积神经网络各层实现与介绍

本文将讲解&#xff0c;PyTorch卷积神经网络各层实现与介绍&#xff0c;包括&#xff1a;基本骨架–nn.Module的使用、卷积操作、卷积层、池化层、激活函数、全连接层的介绍。 &#x1f61c; 对于相关原理&#xff0c;可以跳转&#x1f449;卷积神经网络CNN各层基本知识 &…

vue源码分析(二)——vue的入口发生了什么

文章目录 前言&#xff08;1&#xff09;vue 项目构建的时候&#xff0c;通过package.json文件看到构建入口&#xff08;2&#xff09; 构建入口页面&#xff1a;导入同级模块config的getAllbuilds方法&#xff08;3&#xff09; 通过传入参数中的builds对象使用map获取&#x…

简化路径(C++解法)

题目 给你一个字符串 path &#xff0c;表示指向某一文件或目录的 Unix 风格 绝对路径 &#xff08;以 / 开头&#xff09;&#xff0c;请你将其转化为更加简洁的规范路径。 在 Unix 风格的文件系统中&#xff0c;一个点&#xff08;.&#xff09;表示当前目录本身&#xff1…

Git(二)版本控制、发展历史、初始化配置、别名

目录 一、版本控制1.1 为什么要使用版本控制&#xff1f;1.2 集中化的版本控制系统1.3 分布式的版本控制系统1.3 两种版本控制系统对比集中式&#xff08;svn&#xff09;分布式&#xff08;git&#xff09; 二、发展历史三、初始化配置3.1 配置文件3.2 配置内容 四、别名 官网…

论文阅读 - Hidden messages: mapping nations’ media campaigns

论文链接&#xff1a; https://link.springer.com/content/pdf/10.1007/s10588-023-09382-7.pdf 目录 1 Introduction 2 The influence model 2.1 The influence‑model library 3 Data 4 Methodology 4.1 Constructing observations 4.2 Learning the state‑transiti…

自动驾驶之—LaneAF学习相关总结

0.前言&#xff1a; 最近在学习自动驾驶方向的东西&#xff0c;简单整理一些学习笔记&#xff0c;学习过程中发现宝藏up 手写AI 1. 概述 Laneaf思想是把后处理放在模型里面。重点在于理解vaf&#xff0c; haf&#xff0c;就是横向聚类&#xff1a;中心点&#xff0c;纵向聚类&…

内网渗透——macOS上搭建Web服务器

# 公网访问macOS本地web服务器【内网穿透】 文章目录 1. 启动Apache服务器2. 公网访问本地web服务2.1 本地安装配置cpolar2.2 创建隧道2.3 测试访问公网地址3. 配置固定二级子域名3.1 保留一个二级子域名3.2 配置二级子域名4. 测试访问公网固定二级子域名 以macOS自带的Apache…

Android 发布 15 周年了!Google 员工说出了这些年的美好回忆

原文链接&#xff1a;https://blog.google/products/android/android-15th-anniversary-googler-highlights/ 作者&#xff1a;Sameer Samat, GM and VP of Android Ecosystem 翻译者&#xff1a;张拭心 https://shixin.blog.csdn.net/ 自从带有 Android Market&#xff08;现在…

python自动化测试(四):ECShop后台:商品分类添加

前置条件&#xff1a; 本地部署&#xff1a;ECShop的版本是3.0.0、Google版本是 Google Chrome65.0.3325.162 (正式版本) &#xff08;32 位&#xff09; Google驱动的selenium版本是3.11.0 目录 前置代码 一、登录&#xff08;后台登录&#xff09; 二、进入商品分类页…

常用应用安装教程---在centos7系统上安装JDK8

在centos7系统上安装JDK8 1&#xff1a;进入oracle官网下载jdk8的tar.gz包&#xff1a; 2&#xff1a;将下载好的包上传到每个服务器上&#xff1a; 3&#xff1a;查看是否上传成功&#xff1a; [rootkafka01 ~]# ls anaconda-ks.cfg jdk-8u333-linux-x64.tar.gz4&#xf…

asp.net古代服饰系统VS开发sqlserver数据库web结构c#编程包含购物答题功能点

一、源码特点 asp.net 古代服饰系统 是一套完善的web设计管理系统(含购物 答题)&#xff0c;系统采用mvc模式&#xff08;BLLDALENTITY&#xff09;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境 为vs2010&#xff0c;数据库为sqlserver…

Vue2 跨域问题报错AxiosError net::ERR_FAILED、 Network Error、ERR_NETWORK

请求场景&#xff1a; 当前页面URL&#xff1a;http://127.0.0.1:8000/testcase 跳转请求页面URL&#xff1a;http://127.0.0.1:5000/testcase_orm 使用axios请求 时 页面提示跨域报错 跨域报错信息 > Access to XMLHttpRequest at http://127.0.0.1:5000/testcase_orm fr…

[SQL开发笔记]LIKE操作符:在 WHERE 子句中搜索列中的指定模式

一、功能描述&#xff1a; LIKE操作符&#xff1a;用于在 WHERE 子句中搜索列中的指定模式。 二、LIKE操作符语法详解&#xff1a; LIKE 语法 SELECT column1, column2,…FROM table_nameWHERE column LIKE pattern; 参数说明&#xff1a; &#xff08;1&#xff09;colum…

目前和未来的缓存构建

说起来可能有点反直觉&#xff0c;有时候不运行反而可以帮助我们加快速度&#xff0c;这正是网络浏览器运行的指导原则。不必在页面上加载所有内容&#xff0c;缓存的元素已经存在&#xff0c;不需要每次访问网站或网页时都重新加载。页面加载速度越快&#xff0c;浏览器的工作…

大数据Flink(一百零二):SQL 聚合函数(Aggregate Function)

文章目录 SQL 聚合函数(Aggregate Function) SQL 聚合函数(Aggregate Function) Python UDAF,即 Python AggregateFunction。Python UDAF 用来针对一组数据进行聚合运算,比如同一个 window 下的多条数据、或者同一个 key 下的多条数据等。针对同一组输入数据,Python A…

伦敦银现货白银走势如何应对

伦敦银是国际现货白银交易的别称&#xff0c;它每天的价格走势受到全球投资者广泛的关注&#xff0c;也是全球各个白银市场的价格指标。白银投资者要了解伦敦银走势的特点&#xff0c;才能更好地进行分析&#xff0c;实现自己的所预期的收益。 整体来说&#xff0c;伦敦银价格的…

Visual Studio远程连接Linux编译代码时,头文件在/usr/include中找不到,文件存在于/usr/include的子目录中

文章目录 1 问题的提出2 问题分析3 问题的解决 1 问题的提出 VS2022在编译数据安全传输平台时&#xff0c;远程连接到Centos上进行编译&#xff0c;但是提示找不到json头文件。 2 问题分析 在Linux系统下编译代码时&#xff0c;系统会主动到/usr/include目录主动搜索头文件。…