岁虚山

行有不得,反求诸己

0%

XGBoost(eXtreme Gradient Boosting)极致梯度提升,是一种基于GBDT的算法或者说工程实现。

XGBoost的基本思想和GBDT相同,但是做了一些优化,比如二阶导数使损失函数更精准;正则项避免树过拟合;Block存储可以并行计算等。

XGBoost具有高效、灵活和轻便的特点,在数据挖掘、推荐系统等领域得到广泛的应用。

阅读全文 »

前言

假设现在平面上有一些数据点,我们需要使用一条直线对这些点进行拟合,也就是寻找最佳拟合直线,这个拟合过程就称作回归。

而利用 Logistic 回归进行分类的主要思想就是:根据现有数据对分类边界线建立回归公式,以此进行分类。

“回归”一词实际上就是源于最佳拟合。而我们训练的过程就是找到最佳拟合参数,从而得到我们的回归公式。

接下来,我们将对 Logistic 回归分类器的推导和实现过程进行展示。

阅读全文 »

概述

支持向量机(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 的例子,来展示的简单的内核模块的代码编写、构建、运行的过程。

阅读全文 »