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 …

一文详解Docker镜像

目录 镜像基本介绍 镜像概述 DockerHub Docker四种制作镜像方式 Docker镜像常见操作命令 docker images : 查看本地储存的 Docke镜像 docker pull : 拉取自己需要的镜像 docker rmi : 删除镜像 docker save &#xff1a;镜像 保存成 tar 包 docker import &#…

Spring Boot 依赖注入实现原理

Spring Boot 是 Spring 框架的扩展&#xff0c;它简化了 Spring 应用程序的创建和部署。在 Spring Boot 中&#xff0c;依赖注入是实现对象间解耦的重要技术&#xff0c;它使得应用程序的各个组件之间可以通过依赖注入来相互协作&#xff0c;提高了代码的可维护性和可重用性。 …

shell_53.理解Linux输入和输出

理解输入和输出 1.两种显示脚本输出的方法。 (1)在显示器屏幕上显示输出。 (2)将输出重定向到文件中。 2.标准文件描述符 Linux 系统会将每个对象当作文件来处理&#xff0c;这包括输入和输出。Linux 用文件描述符来标识每个文件对象。 文件描述符是一个非负整数&#xff0c;唯…

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

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

【shell】read -t -n1

if read -t 5 -p "Please enter your name:" name thenecho "Hello, $name, welcome to my script" else#起到换行的作用echo#输入计数 -n1read -n1 -p "Do you want to continue [Y/N]?" answercase $answer inY | y) echoecho "Fine, co…

封装withRouter并且使用

在react后续的版本中,路由组件中props找不到router相关的方法,这就需要自己去封装一个withRouter插件,给路由组件的props上配置原来的属性,方便路由组件中进行路由操作. 代码如下: 新建一个withRouter.jsx文件 import {useLocation,useNavigate,useParams,} from "reac…

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; 二、进入商品分类页…

FFmpeg 从视频流中抽取图片

抽取单个图片 使用 FFmpeg 进行截图&#xff1a;在终端或命令提示符下&#xff0c;使用以下命令进行截图&#xff1a; ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 output.jpg其中&#xff0c; -i input.mp4&#xff1a;指定输入的 H.264 文件路径和名称。 -ss 00:00:05&a…

常用应用安装教程---在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…

软考高级系统架构设计师系列之:案例分析典型试题四

软考高级系统架构设计师系列之:案例分析典型试题四 一、架构风格1.案例试题2.参考答案二、软件架构1.案例试题2.参考答案三、ESB1.案例试题2.参考答案四、SOA1.案例试题2.参考答案五、企业信息化1.案例试题2.参考答案一、架构风格 公司欲针对Linux操作系统开发一个KWIC(Key …