当前位置: 首页 > news >正文

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;}}
}

相关文章:

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

把 Support Vector Machines 翻译成 支持向量机 是书呆子翻译。基座向量机 不好吗。 1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Support Vector Machines /// </summary> public class Svm { priv…...

面试总结之消息中间件

RabbitMQ的消息如何实现路由 RabbitMQ是一个基于AMQP协议实现的分布式消息中间件&#xff0c;AMQP具体的工作机制是生产者将消息发送到RabbitMQ Broker上的Exchange交换机上&#xff0c;Exchange交换机将收到的消息根据路由规则发给绑定的队列&#xff08;Queue&#xff09;&am…...

Java零基础入门-逻辑运算符

前言 Java是一种广泛应用的编程语言&#xff0c;在在这里插入代码片软件开发中有着重要的地位。本文将介绍Java中的逻辑运算符及其在程序设计中的应用&#xff0c;希望能够帮助零基础的读者更好地入门学习Java。 摘要 本文将介绍Java中的三种逻辑运算符&#xff1a;与运算符…...

图的应用3.0-----拓扑排序

目录 前言 AOE网 1.相关概念 2.AOE网特征 拓扑排序 1.基本概念 2.方法步骤 3.拓扑排序的应用 拓扑排序代码实现 1.邻接矩阵的代码 2.邻接表代码 前言 今天我们学习图的应用----拓扑排序&#xff0c;说到排序&#xff0c;你们是不是会想到冒泡排序&#xff0c;插入排序…...

Unity之ShaderGraph如何实现冰冻效果

前言 今天我们来实现一个冰冻的效果,非常的炫酷哦。 如下图所示: 主要节点 Voronoi:根据输入UV生成 Voronoi 或Worley噪声。Voronoi 噪声是通过计算像素和点阵之间的距离生成的。通过由输入角度偏移控制的伪随机数偏移这些点,可以生成细胞簇。这些单元的规模以及产生的…...

解决 viteprees 中 vp-doc 内置样式影响组件预

解决 viteprees 中 vp-doc 样式影响组件预览 问题 当使用"vitepress": "1.0.0-rc.22"作为组件库文档时&#xff0c;会自动引入vitepress的默认主题&#xff0c; 其中vp-doc中有大量的html标签样式 ... .vp-doc table {display: block;border-collapse: …...

flask 和fastdeploy 快速部署 yolov3

服务端 from flask import Flask,request,render_template from flask import session,redirect,jsonify import cv2 import numpy as np import base64 import os import fastdeploy as fd import datetime,timeapp=Flask(__name__)from logging import config,getLogger lo…...

Go 反射

文章目录 获取类型和值获取属性的类型和值通过反射修改值获取方法的名称和类型调用方法反射的缺点 获取类型和值 之前讲过接口nil不一定等于空接口&#xff0c;因为一个 interface 底层 由 type value 构成&#xff0c;只有 type 和 value 都匹配&#xff0c;才能 reflect.Vl…...

竞赛选题 深度学习卷积神经网络垃圾分类系统 - 深度学习 神经网络 图像识别 垃圾分类 算法 小程序

文章目录 0 简介1 背景意义2 数据集3 数据探索4 数据增广(数据集补充)5 垃圾图像分类5.1 迁移学习5.1.1 什么是迁移学习&#xff1f;5.1.2 为什么要迁移学习&#xff1f; 5.2 模型选择5.3 训练环境5.3.1 硬件配置5.3.2 软件配置 5.4 训练过程5.5 模型分类效果(PC端) 6 构建垃圾…...

ts-node模块

ts-node模块 是一个非官方的npm模块&#xff0c;可以直接运行JS代码。 安装&#xff1a; npm install -g ts-node使用&#xff1a; ts-node script.ts如果不安装ts-node&#xff0c;可以通过npx在线调用ts-node&#xff0c;运行ts脚本。 npx ts-node script.ts...

【VUE】ElementPlus之动态主题色调切换(Vue3 + Element Plus+Scss + Pinia)

前言 关于ElementPlus的基础主题色自定义可以参阅《【VUE】ElementPlus之自定义主题样式和命名空间》 有了上面基础的了解&#xff0c;我们知道ElementPlus的主题色调是基于CSS3变量特性进行全局控制的&#xff0c; 那么接下来我们也基于CSS3变量来实现主题色调的动态切换效果&…...

MySQL数据库基本操作1

文章目录 主要内容一.DDL1.创建表代码如下&#xff08;示例&#xff09;: 2.创建表的类型3.其他操作4.修改表结构格式代码如下&#xff08;示例&#xff09;: 二.DML1.数据插入代码如下&#xff08;示例&#xff09;: 2.数据修改代码如下&#xff08;示例&#xff09;: 3.数据删…...

Webpack简介及打包演示

Webpack 是一个静态模块打包工具&#xff0c;从入口构建依赖图&#xff0c;打包有关的模块&#xff0c;最后用于展示你的内容 静态模块&#xff1a;编写代码过程中的&#xff0c;html&#xff0c;css&#xff0c; js&#xff0c;图片等固定内容的文件 打包过程&#xff0c;注…...

面向对象设计模式——命令模式

命令设计模式(Command Pattern)是一种行为型设计模式,它的主要目的是将请求或操作封装成一个对象,从而允许参数化客户端对象,队列请求,将请求记录到日志,以及支持可撤销的操作。命令模式将请求的发出者(调用者)与请求的接收者(执行者)解耦,这使得系统更加灵活、可扩…...

selenium测试框架快速搭建(ui自动化测试)

一、介绍 selenium目前主流的web自动化测试框架&#xff1b;支持多种编程语言Java、pythan、go、js等&#xff1b;selenium 提供一系列的api 供我们使用&#xff0c;因此在web测试时我们要点页面中的某一个按钮&#xff0c;那么我们只需要获取页面&#xff0c;然后根据id或者n…...

TypeScript中的类型映射

类型映射 1. 简介 映射就是将一种类型按照映射规则&#xff0c;转成另一种类型&#xff0c;通常用于对象类型。 这里类型B通过A采用属性名索引的写法&#xff0c;完成了类型B的定义 type A {foo: number;bar: number; };type B {[prop in keyof A]: string; };这里复制了一…...

系统平台同一网络下不同设备及进程数据通讯--DDS数据分发服务中间件

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言(1)中间件的介绍(2)DDS介绍(3)发布者(4)订阅者(5)idl文件(定义msg结构体)(6)QoS(Quality of Service)策略(7)DDS测试工具介绍(…...

golang小技巧

1/有时需要把json内容返回给前段进行文本编辑json字段&#xff0c;那么最好是能返回格式化后的json&#xff0c;这样对于用户编辑页方便。这时候可以利用json.MarshalIndent(data, "", "\t")来进行格式化&#xff0c;带有缩进的marshal。 2/对holders的填…...

JavaWeb——IDEA操作:Project最终新建module

在project中创建新的module&#xff1a; 创建一个新的module很容易&#xff0c;但是它可能连接不上Tomcat&#xff0c;因此需要修改一些配置&#xff1a; 将以下地址修改为新module的地址...

前端开发技术栈(工具篇):2023深入了解webpack的安装和使用以及核心概念和启动流程(详细) 63.3k stars

目录 Webpack简介 Entry Module Chunk Loader Plugin Output Webpack的启动流程 Webpack的优缺点 Webpack的使用 1. 安装Webpack 2. 创建Webpack配置文件 3. 编写代码 4. 运行Webpack 5. 在HTML中引入打包后的文件 6. 执行编译命令 Webpack其他功能介绍 1. 使…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...