C#,数值计算——分类与推理Gaumixmod的计算方法与源程序
1 文本格式
using System;
using System.Collections.Generic;
namespace Legalsoft.Truffer
{
public class Gaumixmod
{
private int nn { get; set; }
private int kk { get; set; }
private int mm { get; set; }
private double[,] data { get; set; }
private double[,] means { get; set; }
private double[,] resp { get; set; }
private double[] frac { get; set; }
private double[] lndets { get; set; }
private double[,,] sig { get; set; }
private double loglike { get; set; }
public Gaumixmod(double[,] ddata, double[,] mmeans)
{
int mmstat = ddata.GetLength(1);
this.nn = ddata.GetLength(0);
this.kk = mmeans.GetLength(0);
this.mm = mmstat;
this.data = Globals.CopyFrom(ddata);
this.means = Globals.CopyFrom(mmeans);
this.resp = new double[nn, kk];
this.frac = new double[kk];
this.lndets = new double[kk];
this.sig = new double[kk, mmstat, mmstat];
for (int k = 0; k < kk; k++)
{
frac[k] = 1.0 / kk;
for (int i = 0; i < mm; i++)
{
for (int j = 0; j < mm; j++)
{
sig[k, i, j] = 0.0;
}
sig[k, i, i] = 1.0e-10;
}
}
estep();
mstep();
}
public double estep()
{
double[] u = new double[mm];
double[] v = new double[mm];
double oldloglike = loglike;
for (int k = 0; k < kk; k++)
{
//Cholesky choltmp = new Cholesky(sig[k]);
Cholesky choltmp = new Cholesky(Globals.CopyFrom(k, sig));
lndets[k] = choltmp.logdet();
for (int n = 0; n < nn; n++)
{
for (int m = 0; m < mm; m++)
{
u[m] = data[n, m] - means[k, m];
}
choltmp.elsolve(u, v);
double sum = 0.0;
for (int m = 0; m < mm; m++)
{
sum += Globals.SQR(v[m]);
}
resp[n, k] = -0.5 * (sum + lndets[k]) + Math.Log(frac[k]);
}
}
loglike = 0;
for (int n = 0; n < nn; n++)
{
double max = -99.9e99;
for (int k = 0; k < kk; k++)
{
if (resp[n, k] > max)
{
max = resp[n, k];
}
}
double sum = 0.0;
for (int k = 0; k < kk; k++)
{
sum += Math.Exp(resp[n, k] - max);
}
double tmp = max + Math.Log(sum);
for (int k = 0; k < kk; k++)
{
resp[n, k] = Math.Exp(resp[n, k] - tmp);
}
loglike += tmp;
}
return loglike - oldloglike;
}
public void mstep()
{
for (int k = 0; k < kk; k++)
{
double wgt = 0.0;
for (int n = 0; n < nn; n++)
{
wgt += resp[n, k];
}
frac[k] = wgt / nn;
for (int m = 0; m < mm; m++)
{
double sum = 0.0;
for (int n = 0; n < nn; n++)
{
sum += resp[n, k] * data[n, m];
}
means[k, m] = sum / wgt;
for (int j = 0; j < mm; j++)
{
sum = 0.0;
for (int n = 0; n < nn; n++)
{
sum += resp[n, k] * (data[n, m] - means[k, m]) * (data[n, j] - means[k, j]);
}
sig[k, m, j] = sum / wgt;
}
}
}
}
}
}
2 代码格式
using System;
using System.Collections.Generic;namespace Legalsoft.Truffer
{public class Gaumixmod{private int nn { get; set; }private int kk { get; set; }private int mm { get; set; }private double[,] data { get; set; }private double[,] means { get; set; }private double[,] resp { get; set; }private double[] frac { get; set; }private double[] lndets { get; set; }private double[,,] sig { get; set; }private double loglike { get; set; }public Gaumixmod(double[,] ddata, double[,] mmeans){int mmstat = ddata.GetLength(1);this.nn = ddata.GetLength(0);this.kk = mmeans.GetLength(0);this.mm = mmstat;this.data = Globals.CopyFrom(ddata);this.means = Globals.CopyFrom(mmeans);this.resp = new double[nn, kk];this.frac = new double[kk];this.lndets = new double[kk];this.sig = new double[kk, mmstat, mmstat];for (int k = 0; k < kk; k++){frac[k] = 1.0 / kk;for (int i = 0; i < mm; i++){for (int j = 0; j < mm; j++){sig[k, i, j] = 0.0;}sig[k, i, i] = 1.0e-10;}}estep();mstep();}public double estep(){double[] u = new double[mm];double[] v = new double[mm];double oldloglike = loglike;for (int k = 0; k < kk; k++){//Cholesky choltmp = new Cholesky(sig[k]);Cholesky choltmp = new Cholesky(Globals.CopyFrom(k, sig));lndets[k] = choltmp.logdet();for (int n = 0; n < nn; n++){for (int m = 0; m < mm; m++){u[m] = data[n, m] - means[k, m];}choltmp.elsolve(u, v);double sum = 0.0;for (int m = 0; m < mm; m++){sum += Globals.SQR(v[m]);}resp[n, k] = -0.5 * (sum + lndets[k]) + Math.Log(frac[k]);}}loglike = 0;for (int n = 0; n < nn; n++){double max = -99.9e99;for (int k = 0; k < kk; k++){if (resp[n, k] > max){max = resp[n, k];}}double sum = 0.0;for (int k = 0; k < kk; k++){sum += Math.Exp(resp[n, k] - max);}double tmp = max + Math.Log(sum);for (int k = 0; k < kk; k++){resp[n, k] = Math.Exp(resp[n, k] - tmp);}loglike += tmp;}return loglike - oldloglike;}public void mstep(){for (int k = 0; k < kk; k++){double wgt = 0.0;for (int n = 0; n < nn; n++){wgt += resp[n, k];}frac[k] = wgt / nn;for (int m = 0; m < mm; m++){double sum = 0.0;for (int n = 0; n < nn; n++){sum += resp[n, k] * data[n, m];}means[k, m] = sum / wgt;for (int j = 0; j < mm; j++){sum = 0.0;for (int n = 0; n < nn; n++){sum += resp[n, k] * (data[n, m] - means[k, m]) * (data[n, j] - means[k, j]);}sig[k, m, j] = sum / wgt;}}}}}
}
相关文章:

C#,数值计算——分类与推理Gaumixmod的计算方法与源程序
1 文本格式 using System; using System.Collections.Generic; namespace Legalsoft.Truffer { public class Gaumixmod { private int nn { get; set; } private int kk { get; set; } private int mm { get; set; } private double…...

【Android】Intel HAXM installation failed!
Android Studio虚拟机配置出现Intel HAXM installation failed 如果方案一解决没有作用,就用方案二再试一遍 解决方案一: 1.打开控制面板 2.点击左侧下面最后一个程序 3.点击启用或关闭Windows功能 4.勾选Windows虚拟机监控程序平台 5.接下来重启电脑…...

2023年中国自动驾驶卡车市场发展趋势分析:自动驾驶渗透率快速增长[图]
自动驾驶卡车的技术原理是通过电脑算法控制车辆行驶,辅助驾驶员完成任务。其实现方式主要是基于传感器和计算处理技术。自动驾驶卡车可以随时感知周围环境,灵活避障,自适应调整行驶路径,相比之下传统卡车需要驾驶员进行手动操作&a…...

力扣第17题 电话号码的字母组合 c++ 回溯 经典提升题
题目 17. 电话号码的字母组合 中等 相关标签 哈希表 字符串 回溯 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。…...
华纳云:怎么判断VPS的ip是不是公网ip
要判断一个VPS的IP地址是否为公网IP,您可以执行以下步骤: 查看IP地址: 首先,获取您的VPS的IP地址。您可以使用以下命令来查看VPS的IP地址: curl ifconfig.me 或 curl ipinfo.io/ip 这些命令将显示VPS的公网IP地址。 检…...
QT学习笔记1-Hello, QT
1. QT环境 1.1 QT_CREATOR QT的集成开发工具,可以进行项目的创建运行。有一些实例可以运行之。 1.2 QT_ASSISTANT QT的工具书 2. 核心的概念 2.1 windows 窗口 2.2 widget 组件放置在窗口上的 2.3 bar 栏 2.4 icon 图标 3. Hello, QT 3.1 main.cpp …...

水滴卡片效果实现
效果展示 CSS 知识点 border-radius 属性运用 FANCY-BORDER-RADIUS 工具 此工具主要是实现不规则的图形。 FANCY-BORDER-RADIUS 工具地址 页面整体布局实现 <div class"container"><div class"drop" style"--clr: #ff0f5b">&l…...
【算法题】2899. 上一个遍历的整数
插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 题目: 给你一个下标从 0 开始的字符串数组…...

Python+unittest+requests接口自动化测试框架搭建 完整的框架搭建过程
首先配置好开发环境,下载安装Python并下载安装pycharm,在pycharm中创建项目功能目录。如果不会的可以百度Google一下,该内容网上的讲解还是比较多比较全的! 大家可以先简单了解下该项目的目录结构介绍,后面会针对每个文…...
系统架构设计:19 论数据挖掘技术的应用
目录 一 数据挖掘技术 1 数据挖掘的分类 2 数据挖掘的主要方法 一 数据挖掘技术 从技术角度看,数据挖掘可以定义为从大量的、不完全的、有噪声的、模糊的、随机的实际数据中提取隐含在其中的、人们不知道的、但又潜在有用的信息和知识的过程。</...

如何选择高防CDN和高防IP?
目录 前言 一、对高防CDN的选择 1. 加速性能 2. 抗攻击能力 3. 全球覆盖能力 4. 可靠性和稳定性 二、对高防IP的选择 1. 防御能力 2. 服务质量 3. 安全性 4. 价格 三、高防CDN和高防IP的优缺点对比 1. 高防CDN的优缺点 2. 高防IP的优缺点 总结 前言 随着互联网…...

【html】利用生成器函数和video元素,取出指定时间的视频画面
简言 有的时候想截取视频某一秒的视频画面。 手动截取操作麻烦,还得时刻关注视频播放时间。 于是,我搞出来了一个根据视频自动截取特定时间描述的页面。 效果 实现步骤 获取视频对象根据视频时长生成时间选择表单根据表单选择的时间和视频地址&#x…...
第五十九章 学习常用技能 - 将数据从一个数据库移动到另一个数据库
文章目录 第五十九章 学习常用技能 - 将数据从一个数据库移动到另一个数据库 第五十九章 学习常用技能 - 将数据从一个数据库移动到另一个数据库 如果需要将数据从一个数据库移动到另一个数据库,请执行以下操作: 识别包含数据及其索引的Global。 如果…...

虚拟示波器的设计与实现
摘 要 针对传统示波器功能单一、不方便更新升级的缺陷,本文基于虚拟仪器软件LabVIEW和NI PCI-6221数据采集卡设计并实现了一种多功能虚拟示波器,该虚拟示波器不仅具有采集和显示实际信号时域波形的功能,还具有信号产生、波形存储等功能。 测试…...

ImgPlus:基于CodeFormer的图片增强
背景 最近参与了华为云开发者大会AI赛道,做了一个AI图片增强作品,本片文章来简单介绍一下。 正文 作品名称:ImgPlus 赛题技术领域选择: AI,图片增强 使用技术名称: CodeFormer,ECS࿰…...
2024华为校招面试真题汇总及其解答(二)
6.【算法题】三步问题 题目: 三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。 示例1: 输入:n = 3 输出:4说明: 有四种走法示例2: 输入:n = 5输出:1…...

编译链接(Compile Link)
文章目录 前言一、翻译环境1、概念2、翻译环境的组成3、什么是编译链接? 二、编译1、编译的阶段2、预编译3、编译1、什么是语法分析?2、什么是词法分析?3、什么是语义分析?4、什么是符号汇总? 4、汇编1、符号表展示 三…...
14 幂等生产者和事务生产者
kafka消息交付可靠性保障和精确一次语义处理 消息交付可靠性保障,指的kafka对Producer和Consumer要处理的消息提供什么样的承诺。总共就三种:at most once 、at least once、axactly once kafka默认提供的是 at least once。原因是只有Broker提交消息并…...

zabbix部署与监控
目录 一、什么是zabbix? 二、zabbix 监控原理 三、Zabbix 新特性 三、Zabbix 功能组件 四、部署 zabbix zabbix的服务端部署 zabbix的客户端部署 zabbix的服务端部署 一、什么是zabbix? zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络…...
Python 编程基础 | 第五章-类 | 5.8、运算符重载
一、运算符重载 1、Python类内置方法 Python常用内置方法,如下: __init__: 构造函数,在生成对象时调用__del__: 析构函数,释放对象时使用__repr__: 打印,转换__setitem__࿱…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...