岁虚山

行有不得,反求诸己

0%

概述

支持向量机(Support Vector Machines,SVM)是一种分类算法。本章内容会对 SVM 的基本概念及原理进行阐述,对其数学原理进行推导。最后将通过 Python 实现一个简单的 SVM 分类器,来帮助理解 SVM 的具体实现过程和原理。

由于对 SVM 的数学推导过程十分复杂,涉及到大量的高等数学和线性代数方面的公式,因此本文尽量使用简单的描述来推导计算过程。

阅读全文 »

计算机是如何计算指数函数 $e^{x}$ 的呢?

本文并不是为了探究各种编程语言中数学计算函数库对 $e^x$ 函数的具体实现,而是提供一种计算思路,来帮助理解 $e^x$ 函数的计算原理,并使用 C 语言来实现这个算法。

阅读全文 »

计算机是如何计算对数函数 $\log_a{x}$ 的呢?

本文并不是为了探究各种编程语言中数学计算函数库对 $\log$ 函数的具体实现,而是提供一种计算思路,来帮助理解 $\log$ 函数的计算原理,并使用 C 语言来实现这个算法。

阅读全文 »

上一章中,实现了一个简单的字符设备驱动程序,并对其进行了 openclose 的操作。对于一个字符设备驱动程序而言,打开和关闭仅仅是最基础的操作,设备驱动程序还能够通过其他的操作,来实现更多的功能。

本章内容,将实现一个具备更多功能的设备驱动程序,来了解字符设备驱动程序的功能。

阅读全文 »

上一章内容中,我们简单梳理了字符设备驱动程序的相关知识以及编写一个字符设备驱动程序的大致流程,本章内容中,将根据上一章中讲述的内容,完成一个字符设备驱动程序的编写及用户程序对字符设备的访问。

阅读全文 »

概述

Linux 系统将设备分为三类:字符设备块设备网络设备

三种设备的定义分别如下:

  1. 字符设备:只能一个字节一个字节的读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后顺序进行。字符设备是面向流的设备,常见的字符设备如鼠标、键盘、串口、控制台、LED等。
  2. 块设备:是指可以从设备的任意位置读取一定长度的数据设备。块设备如硬盘、磁盘、U盘和SD卡等存储设备。
  3. 网络设备:网络设备比较特殊,不在是对文件进行操作,而是由专门的网络接口来实现。应用程序不能直接访问网络设备驱动程序。在 /dev 目录下也没有文件来表示网络设备。

对于字符设备和块设备来说,在 /dev 目录下都有对应的设备文件,Linux 用户程序通过设备文件或叫做设备节点来使用驱动程序操作字符设备和块设备。

本章内容主要介绍编写设备文件驱动程序所涉及到的相关知识和数据结构,下一张内容会实现一个字符驱动程序,并对其进行访问。

阅读全文 »

在上一章中,我们通过一个简单的 helloworld 例子,来认识了内核模块程序的编写、编译、装载、卸载的过程,并对代码及编译过程进行了详细的阐述。

但是,很多额外的细节知识并没有在上一章中进行讲述。本章的内容就是在上一章的基础上,展开叙述一些进阶知识。

阅读全文 »

概述

按照不成文的传统,诸多教程都会以 Hello World 程序作为最简单的例子来作为开篇的实例。因此本篇也依循惯例,通过 Hello World 的例子,来展示的简单的内核模块的代码编写、构建、运行的过程。

阅读全文 »

简介

Linux 内核模块的编译与普通的用户程序编译有所不同。内核模块程序的编译依赖于 Linux 内核本身的编译程序,因此,在进行内核模块的编译运行之前,需要保证所用的系统具备正确的编译器、模块工具和其他必要工具。

本系列内容主要在 Ububtu 22.04 (GNU/Linux 5.15.0-52-generic x86_64) 中编译运行,因此后续的内容皆是能够满足在该环境下成功使用。

阅读全文 »

简介

聚类分析,又称群分析,指对样本数据的一种划分与归类的一种方法。聚类算法以相似性为基础,将样本数据中按照相似度不同分成不同的族群(类别)中。同一族群中,样本相似性相差小;不同族群中,样本相似性差异较大。

Meanshift,又称均值漂移算法,是一种基于核密度的估计算法,将每个族群的中心点移动到该族群的密度最大的位置,来对样本进行分类。

相较于其他分类算法,$Meanshift$ 不需要指定分类的族群数量,而是根据样本特性自动生成不同类别的族群。其广泛应用于聚类、图像平滑、分割、跟踪等方面。

本文以聚类为例,探讨 $Meanshift$ 的原理及实现。

阅读全文 »