C#,数值计算——KMeans分类的计算方法与源程序

1 文本格式

using System;

namespace Legalsoft.Truffer
{
    /// <summary>
    /// K-Means classification
    /// </summary>
    public class Kmeans
    {
        private int nn { get; set; }
        private int mm { get; set; }
        private int kk { get; set; }
        private int nchg { get; set; }
        private double[,] data { get; set; }
        private double[,] means { get; set; }
        private int[] assign { get; set; }
        private int[] count { get; set; }

        public Kmeans(double[,] ddata, double[,] mmeans)
        {
            this.nn = ddata.GetLength(0);
            this.mm = ddata.GetLength(1);
            this.kk = mmeans.GetLength(0);
            this.data = Globals.CopyFrom(ddata);
            this.means = Globals.CopyFrom(mmeans);
            this.assign = new int[nn];
            this.count = new int[kk];

            estep();
            mstep();
        }

        public int estep()
        {
            int kmin = 0;
            nchg = 0;
            for (int k = 0; k < kk; k++)
            {
                count[k] = 0;
            }
            for (int n = 0; n < nn; n++)
            {
                double dmin = 9.99e99;
                for (int k = 0; k < kk; k++)
                {
                    double d = 0.0;
                    for (int m = 0; m < mm; m++)
                    {
                        d += Globals.SQR(data[n, m] - means[k, m]);
                    }
                    if (d < dmin)
                    {
                        dmin = d;
                        kmin = k;
                    }
                }
                if (kmin != assign[n])
                {
                    nchg++;
                }
                assign[n] = kmin;
                count[kmin]++;
            }
            return nchg;
        }

        public void mstep()
        {
            for (int k = 0; k < kk; k++)
            {
                for (int m = 0; m < mm; m++)
                {
                    means[k, m] = 0.0;
                }
            }
            for (int n = 0; n < nn; n++)
            {
                for (int m = 0; m < mm; m++)
                {
                    means[assign[n], m] += data[n, m];
                }
            }
            for (int k = 0; k < kk; k++)
            {
                if (count[k] > 0)
                {
                    for (int m = 0; m < mm; m++)
                    {
                        means[k, m] /= count[k];
                    }
                }
            }
        }
    }
}
 

2 代码格式

using System;namespace Legalsoft.Truffer
{/// <summary>/// K-Means classification/// </summary>public class Kmeans{private int nn { get; set; }private int mm { get; set; }private int kk { get; set; }private int nchg { get; set; }private double[,] data { get; set; }private double[,] means { get; set; }private int[] assign { get; set; }private int[] count { get; set; }public Kmeans(double[,] ddata, double[,] mmeans){this.nn = ddata.GetLength(0);this.mm = ddata.GetLength(1);this.kk = mmeans.GetLength(0);this.data = Globals.CopyFrom(ddata);this.means = Globals.CopyFrom(mmeans);this.assign = new int[nn];this.count = new int[kk];estep();mstep();}public int estep(){int kmin = 0;nchg = 0;for (int k = 0; k < kk; k++){count[k] = 0;}for (int n = 0; n < nn; n++){double dmin = 9.99e99;for (int k = 0; k < kk; k++){double d = 0.0;for (int m = 0; m < mm; m++){d += Globals.SQR(data[n, m] - means[k, m]);}if (d < dmin){dmin = d;kmin = k;}}if (kmin != assign[n]){nchg++;}assign[n] = kmin;count[kmin]++;}return nchg;}public void mstep(){for (int k = 0; k < kk; k++){for (int m = 0; m < mm; m++){means[k, m] = 0.0;}}for (int n = 0; n < nn; n++){for (int m = 0; m < mm; m++){means[assign[n], m] += data[n, m];}}for (int k = 0; k < kk; k++){if (count[k] > 0){for (int m = 0; m < mm; m++){means[k, m] /= count[k];}}}}}
}

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

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

相关文章

优维低代码实践:片段

优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学习的平台。 优维…

5.12.webrtc接口调用过程

嗨&#xff0c;大家好&#xff0c;我是李超&#xff0c;在上节课中呢&#xff0c;我向你介绍了外接口的设计以及我们红接口展开之后的样子&#xff0c;对吧&#xff1f;那今天呢&#xff1f;我们再来看看整个接口调用过程。那整个这个调用过程啊&#xff0c;非常的复杂&#xf…

QCustomPlot实现曲线拖拽

本文内容目录 需求场景&#xff1a;一、选择控件二、将QCustomPlot库整合到你的Qt项目中1、下载源代码2、创建.pri 三、鼠标框选&#xff0c;实现坐标缩放四、曲线拖动1、定位曲线2、移动时改变曲线 五、问题的产生与解决1、查看源码2、修改本项目代码 需求场景&#xff1a; 曲…

excel 日期与时间戳的相互转换

1、日期转时间戳&#xff1a;B1INT((A1-70*365-19)*86400-8*3600)*1000 2、时间戳转日期&#xff1a;A1TEXT((B1/10008*3600)/8640070*36519,"yyyy-mm-dd hh:mm:ss") 以上为精确到毫秒&#xff0c;只精确到秒不需要乘或除1000。 使用以上方法可以进行excel中日期…

行业追踪,2023-10-18

自动复盘 2023-10-18 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

Redis LFU缓存淘汰算法

前言 Redis 在 4.0 版本之前的缓存淘汰算法&#xff0c;只支持 random 和 lru。random 太简单粗暴了&#xff0c;可能把热点数据给淘汰掉&#xff0c;一般不会使用。lru 比 random 好一点&#xff0c;会优先淘汰最久没被访问的数据&#xff0c;但是它也有一个缺点&#xff0c;…

英语——分享篇——每日200词——1001-1200

1001——responsibility——[rɪˌspɒnsəbɪlətɪ]——n.责任——responsibility——res热死(拼音)ponsi胖子(谐音)bili比利(拼音)ty题(谐音)——热死的胖子比利做题时很有责任心——The responsibility for her family bears down on a young woman.——家庭的责任沉重地落…

攻防世界web篇-PHP2

直接点击进入到http网页中&#xff0c;会得到这样一个界面 这里&#xff0c;我最开始使用了burp什么包也没有抓到&#xff0c;然后接着又用nikto进行探测&#xff0c;得到的只有两个目录&#xff0c;当时两个目录打开后&#xff0c;一个是fond界面&#xff0c;一个是这个网页的…

【QT】常用控件——按钮组

继承Widget PushButton 设置图片&#xff0c;先导入图片资源&#xff0c;见&#xff1a;【QT】资源文件导入_复制其他项目中的文件到qt项目中_StudyWinter的博客-CSDN博客 在布局中添加图片 调整尺寸 toolButton 显示图片、文本 显示图片&#xff08;图片和文字都有时&#…

使用Python+selenium实现第一个自动化测试脚本

这篇文章主要介绍了使用Pythonselenium实现第一个自动化测试脚本&#xff0c;文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值&#xff0c;需要的朋友们下面随着小编来一起学习学习吧 最近在学web自动化&#xff0c;记录一下学习过程。…

快速解决 Resource not accessible by integration

简介 最近好久没有写博客了&#xff0c;今天在写开源项目 python-package-template 的时候&#xff0c;正好遇到一个问题&#xff0c;记录一下吧。本文将介绍 Resource not accessible by integration 的几种解决方案。 也欢迎大家体验一下 python-package-template 这个项目&…

黑白棋(Othello, ACM/ICPC World Finals 1992, UVa220)rust解法

你的任务是模拟黑白棋游戏的进程。黑白棋的规则为&#xff1a;黑白双方轮流放棋子&#xff0c;每次必须让新放的棋子“夹住”至少一枚对方棋子&#xff0c;然后把所有被新放棋子“夹住”的对方棋子替换成己方棋子。一段连续&#xff08;横、竖或者斜向&#xff09;的同色棋子被…

SpringCloud: sentinel热点参数限制

一、定义controller package cn.edu.tju.controller;import com.alibaba.csp.sentinel.annotation.SentinelResource; import com.alibaba.csp.sentinel.slots.block.BlockException; import org.springframework.web.bind.annotation.PathVariable; import org.springframewo…

Unity笔记--渲染顺序

目录 Unity中的渲染顺序一、Camera层二、透明类型&#xff08;先渲染不透明&#xff09;三、物体的SortingLayer&#xff08;越小越先渲染&#xff09;四、sorting order&#xff08;越小越先渲染&#xff09;五、RenderQueue &#xff08;越小越优先&#xff09;六、距离相机z…

【算法设计zxd】第6章 回溯法

目录 6.1 回溯法的设计技术 &#xff1a; 四皇后问题 回溯法&#xff1a; 算法框架&#xff1a; 思考题&#xff1a; 回溯算法的适用条件 【例6-1】求满足下列不等式的所有整数解&#xff1a; 6.2回溯算法的经典例题 【例6-2】装载问题  问题分析 计算模型  算法设计与描…

BookStack 详解及 Docker-Compose 部署

BookStack 是一款用于创建文档和文档管理的开源平台。它提供了一个直观且功能丰富的界面&#xff0c;可用于组织和管理各种文档&#xff0c;包括文档编写、编辑和共享。本文将介绍 BookStack 的核心功能&#xff0c;并展示如何使用 Docker-Compose 快速部署 BookStack。 BookS…

Pika v3.5.1发布!

Pika 社区很高兴宣布&#xff0c;我们今天发布已经过我们生产环境验证 v3.5.1 版本&#xff0c;https://github.com/OpenAtomFoundation/pika/releases/tag/v3.5.1 。 该版本不仅做了很多优化工作&#xff0c;还引入了多项新功能。这些新功能包括 动态关闭 WAL、ReplicationID…

BI零售数据分析,当代零售企业的核心竞争力

在数字化转型中&#xff0c;BI智能零售数据分析成为了极其重要的核心竞争力之一。通过对大数据的采集和分析&#xff0c;零售企业可以更好地了解消费者的需求和行为模式&#xff0c;从而做出更准确的决策。例如&#xff0c;通过分析消费者的购物历史、浏览记录等数据&#xff0…

CLIP模型原理

CLIP模型 CLIP(Contrastive Language-Image Pre-Training) 模型是 OpenAI 在 2021 年初发布的用于匹配图像和文本的预训练神经网络模型&#xff0c;是近年来在多模态研究领域的经典之作。OpenAI 收集了 4 亿对图像文本对&#xff08;一张图像和它对应的文本描述&#xff09;&a…

Messari发布Moonbeam简报,每日交易量稳步增长,首次公布利润数据

区块链数据公司Messari首次发布Moonbeam项目分析简报&#xff0c;从项目市值、链上数据表现、质押以及Moonbeam的技术优势XCM使用量等角度全面分析。这个再熊市初期上线的项目一直在默默开发&#xff0c;并在跨链互操作领域拥有了相当的实操成绩。我们翻译了Messari简报中的部分…