- 博客(57)
- 收藏
- 关注
原创 机器学习基础 PCA
动机许多类型的数据维度比较大,导致了计算时间复杂度高。许多高维数据常常聚集在一个低维空间中,例如三维平面的点位于同一个平面上。我们希望找到数据的一些主方向,而主方向的数量是远远小于数据的维度的。使用这些主方向就可以近似地表示原始数据,从而能够达到降维的目的。这种分析方法被称为主成分分析方法(Principal components analysis)。最小近似误差假设我们找到一组在高维空间中的向量集{u1,u2,⋯ ,uM}\{u_1,u_2,\cdots,u_M\}{u1,u2,⋯,uM
2021-04-16 22:39:43
540
原创 常用矩阵求导公式
∂a∂x=0\frac{\partial a}{\partial \boldsymbol x}=0\\∂x∂a=0∂x∂x=I\frac{\partial \boldsymbol x}{\partial \boldsymbol x}=I\\∂x∂x=I∂Ax∂x=AT\frac{\partial A\boldsymbol x}{\partial \boldsymbol x}=A^T∂x∂Ax=AT∂xTA∂x=A\frac{\partial \boldsymbol x^TA}{\p
2021-04-15 22:02:02
574
1
原创 机器学习基础 Linear Classifiers
二分类问题Sigmoid/logistic函数:σ(z)=11+e−z\sigma(z)=\frac{1}{1+e^{-z}}σ(z)=1+e−z1通过sigmoid函数,我们可以将线性回归的值域从[−∞,+∞][-\infty,+\infty][−∞,+∞]变换到[0,1][0,1][0,1],使得我们可以用0,10,10,1来表示类别。此时,Logistic回归如下。Logistic regression:f(x)=σ(xw)f({\bf x})=\sigma({\bf xw})f
2021-03-17 15:43:27
302
原创 机器学习基础 Linear Regression
Linear Regression回归回归是基于给定的特征值,预测目标变量值的过程。数学上,回归旨在构建一个函数fff来建立输入数据x=(x1,x2,⋯ ,xm)x={(x_1,x_2,\cdots,x_m)}x=(x1,x2,⋯,xm)和监督值yyy的联系。此后,我们便可以使用fff来预测xxx对应的监督值y^\hat{y}y^,即y^=f(x)\hat{y}=f(x)y^=f(x)线性回归函数fff的形式是线性的,即fff具有如下形式f(x)=f(x1,x2,⋯ ,xm)=w0
2021-03-14 21:44:27
210
原创 统计学习方法 第2章 感知机
第2章 感知机感知机(perceotron)是二分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取+1,-1二值。感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判别模型。模型定义 2.1(感知机):假设输入空间是RnR^nRn,输出空间是{−1,+1}\{-1,+1\}{−1,+1},从输入空间到输出空间的函数f(x)f(x)f(x)f(x)=sign(w⃗⋅x⃗+b)f(x)=\text{sign}(\vec{w}\cdot\vec{x}+b)f(x)=
2021-03-01 12:18:59
145
原创 概率论
一 事件与概率概率空间样本点:在试验中每一个可能出现的结果ω\omegaω称为样本点。样本空间:所有样本点的集合Ω\OmegaΩ称为样本空间。事件:样本点的集合。频率:重复进行nnn次试验,事件A在这nnn次试验中发生了mmm次,则称f(A)=mnf(A)=\frac{m}{n}f(A)=nm为在这nnn次试验中A出现的频率。概率的频率解释:设在相同的条件下重复地进行试验,则随着试验次数地不断增大,事件A的频率在某一确定值附近趋于稳定,这一确定的值称为事件A的概率,记为P(A)P(A)P(A)
2021-02-27 17:59:51
420
原创 玩转Hexo 第1章 Hexo的安装
0 写在前面“玩转Hexo”系列文章主要讲述了如何通过Hexo在自己的服务器上搭建博客,例如我的博客。同时,文章挑选了主题icarus来作为例子,讲述了如何将已有的主题个性化。而且,文章还指出主题中在用到外网资源时会出现的问题以及解决方式。关于云服务器和域名的购买和备案需要读者自行完成。本教程提供的例子是如何在虚拟机上从零开始搭建一个hexo博客,但方法已具有一般性。实际上,读者在虚拟机上部署Hexo博客和在云服务器上部署Hexo博客是两个identical的过程。唯一不同的可能是文章中的虚拟机用的是U
2020-12-02 17:19:03
401
原创 《Java编程逻辑》第5章 类的扩展
第5章 类的扩展第5章主要介绍接口、抽象类、内部类和枚举。接口的本质很多时候,我们关心的并不是对象的类型,而是对象的能力,我们要求某个对象提供某种能力,而不管其类型。接口就是用来描述对象可以提供的能力。接口声明了一组能力,但它自己并没有实现这个能力,它只是一个约定。接口涉及交互两方对象,一方需要实现这个接口,另一方使用这个接口,但双方对象并不直接相互依赖,他们只是通过接口间接交互。接口的定义使用interface关键字。如下所示public interface MyComparable {
2020-11-30 00:07:54
182
原创 《Java编程逻辑》 第4章 类的继承
第4章 类的继承计算机程序经常使用类之间的继承关系来表示对象时间的分类关系。在继承关系中,有父类和子类,父类也叫基类,子类也叫派生类。子类继承了父类的属性和行为,而子类也可以增加子类特有的属性和行为。对于某些父类有的行为,子类的实现方式可能和父类也不完全一样。使用继承一方面可以复用代码,公共的属性和行为可以放到父类中,而子类只需关注子类特有的部分就可以了。另一方面,不同子类的对象可以更为方便地被统一处理。4.1 基本概念在Java中,所有类默认都有一个父类,Object。Object没有定义属性,
2020-11-22 23:22:50
242
原创 《Java编程逻辑》第3章 类的基础
第3章 类的基础3.1 类的基本概念一种类的理解方式是函数的容器。例如在Java API的类Math,我们可以引用的方法是以public static修饰的。static表示类方法,也叫静态方法。与类方法相对的是实例方法,实例方法没有static修饰,必须通过实例或对象调用,而类方法可以直接通过类名进行调用,不需要创建实例。public表示方法是公开的,可以再任何地方被外部调用。private表示方法是私有的,这个方法只能在同一个类内被别的函数调用,而不能被外部类调用。通过private封装和
2020-11-22 01:12:12
167
原创 《Java编程逻辑》第2章 理解数据背后的二进制
第2章 理解数据背后的二进制2.1 二进制整数的表示与位运算2.2 小数的二进制表示2.3 字符编码与乱码字符的编码方式有两种,Unicode编码和非Unicode编码。非Unicode编码非Unicode编码按时间先后顺序如下。ASCII码是基础,使用一个字节表示,最高位设为0,其他7为表示128个字符,被其他编码兼容。西欧主要使用Windows-1252,使用一个字节,增加了额外128个字符。中国大陆的三个主要编码数GB2312,GBK,GB18030。三个编码有时间先后关系,表示的字
2020-11-22 01:11:35
121
原创 信息安全数学基础 第4章 二次同余式与平方剩余
二次同余式与平方剩余4.1 一般二次同余式定义 4.1.1设mmm是正整数。若同余式x2≡amod m, (a,m)=1x^2\equiv a\mod m,\ (a,m)=1x2≡amodm, (a,m)=1有解,则aaa叫做模mmm的平方剩余(二次剩余);否则,aaa叫做模mmm的平方非剩余。4.2 模为奇素数的平方剩余与平方非剩余定理 4.2.1(欧拉判别条件)设ppp是奇素数,(a,p)=1(a,p)=1(a,p)=1,则aaa是模ppp的平方剩余的充分
2020-11-20 17:36:25
3190
原创 《Java编程逻辑》第1章 编程基础
基本数据类型与变量数据类型是用来声明变量的。变量实际上是一个标识符,其指向了内存中的一块区域。声明变量就相当于在内存中分配了一块区域,对变量赋值就相当于给这个变量区域放入相应的值。Java的基本数据类型如下。数据类型大小(字节数)byte1short2int4long8char2float4double8booleanJava中的char占2个字节,而C/C++中的char只占1个字节。对于整型常量,其默认类型为in
2020-11-19 17:08:28
249
原创 http链接的图片在Chrome下无法显示的问题
之前笔者在自己的服务器上使用了tomcat来建立图床。但是,最近笔者翻看自己的CSDN文章时发现,原来上传到服务器上的图片在Chrome中无法打开。注意到之前的图片链接都是http的,可能要换到https后才正常。果不其然,笔者将图片地址转换到https访问后又恢复了正常。...
2020-11-15 01:59:33
1802
转载 Unix哲学
Unix philosophyK.I.S.S rules: Keep It Simple, Stupidcopy from Basics of the Unix PhilosophyBasics of the Unix PhilosophyMore of the Unix philosophy was implied not by what these elders said but by what they did and the example Unix itself set. Lookin
2020-11-05 12:30:26
443
原创 解决vscode中go插件下载失败的问题
由于网络的原因,vscode自动下载go插件时大概率是失败的,但vscode又经常弹出窗口要安装插件。为了解决这个问题,我们需要手动下载go插件环境配置将go换成国内源go env -w GO111MODULE=ongo env -w GOPROXY=https://goproxy.cn,direct手动下载go插件显示go的环境go env找到输出信息中的GOPATH并进入该文件夹。在该文件夹下新建文件夹go/src/golang.org/x并进入,然后执行下面命令。git cl.
2020-11-02 10:32:22
1752
原创 3.6多光源
多光源将“投光物”一章的三个光源的场景整合即可。#include "../env/glm/glm.hpp"#include "../env/glm/gtc/matrix_transform.hpp"#include "../env/glm/gtc/type_ptr.hpp"#include <iostream>#define STB_IMAGE_IMPLEMENTATION#include "../env/std_image.h"#include "../env/glad.h"
2020-11-01 15:10:07
145
原创 3.5 投光物
投光物将光投射(Cast)到物体的光源叫做投光物(Light Caster)。平行光当我们使用一个假设光源处于无限远处的模型时,它就被称为定向光,因为它的所有光线都有着相同的方向,它与光源的位置是没有关系的。因为所有的光线都是平行的,所以物体与光源的相对位置是不重要的,因为对场景中每一个物体光的方向都是一致的。由于光的位置向量保持一致,场景中每个物体的光照计算将会是类似的。点光源点光源是处于世界中某一个位置的光源,它会朝着所有方向发光,但光线会随着距离逐渐衰减。随着光线传播距离的增长逐渐削减光
2020-11-01 15:08:56
131
原创 3.4 光照贴图
光照贴图引入漫反射和镜面光贴图(Map),允许我们对物体的漫反射分量)和镜面光分量有着更精确的控制。漫反射贴图漫反射贴图相当于纹理,实际上这两者都已一张覆盖物体的图像,让我们能够逐片段索引其独立的颜色值。镜面光贴图通过使用镜面光贴图我们可以可以对物体设置大量的细节,比如物体的哪些部分需要有闪闪发光的属性,我们甚至可以设置它们对应的强度。镜面光贴图能够在漫反射贴图之上给予我们更高一层的控制。code漫反射贴图+镜面光贴图#include "../env/glm/glm.hpp"#includ
2020-10-31 23:57:30
248
原创 3.3 材质
材质如果我们想要在OpenGL中模拟多种类型的物体,我们必须为每个物体分别定义一个材质(Material)属性。我们为每个冯氏光照模型的分量都定义一个颜色向量。ambient材质向量定义了在环境光照下这个物体反射得是什么颜色,通常这是和物体颜色相同的颜色。diffuse材质向量定义了在漫反射光照下物体的颜色。(和环境光照一样)漫反射颜色也要设置为我们需要的物体颜色。specular材质向量设置的是镜面光照对物体的颜色影响(或者甚至可能反射一个物体特定的镜面高光颜色)。shininess影响镜面
2020-10-31 23:56:14
211
原创 3.2 基础光照
基础光照现实世界的光照是极其复杂的,而且会受到诸多因素的影响,这是我们有限的计算能力所无法模拟的。因此OpenGL的光照使用的是简化的模型。其中一个模型是Phong光照模型,其主要有三个分量组成,环境(ambient)、漫反射(diffuse)和镜面光照(specular)。环境光照我们使用一个很小的常量(光照)颜色,添加到物体片段的最终颜色中,这样子的话即便场景中没有直接的光源也能看起来存在有一些发散的光。把环境光照添加到场景里非常简单。我们用光的颜色乘以一个很小的常量环境因子,再乘以物体的颜色
2020-10-31 23:55:24
240
原创 3.1 颜色
颜色现实世界中有无数种颜色,每一个物体都有它们自己的颜色。我们需要使用有限的数值来模拟真实世界中无限的颜色,所以并不是所有现实世界中的颜色都可以用数值来表示的。颜色可以数字化的由红色(Red)、绿色(Green)和蓝色(Blue)三个分量组成,它们通常被缩写为RGB。仅仅用这三个值就可以组合出任意一种颜色。我们在现实生活中看到某一物体的颜色并不是这个物体真正拥有的颜色,而是它所反射的颜色。换句话说,那些不能被物体所吸收的颜色就是我们能够感知到的物体的颜色在图形领域中,当我们把光源的颜色与物体的颜色值
2020-10-31 17:36:24
556
原创 c++小技巧
一次读取文件全部内容#include <iostream>#include <sstream>#include <fstream>using namespace std;int main() { ifstream in; in.open("test.txt"); if(!in.is_open()) { cout << "File can not opened" << endl; } /
2020-10-31 10:39:59
93
原创 2.7 摄像机
摄像机摄像机的位置由其在世界空间的位置、观察的方向、一个指向他右侧的向量、指向它上方的向量构成。实际上,我们创建了一个三个单位轴相互垂直的、以摄像机位置为原点的坐标系。摄像机位置摄像机位置使用一个指向摄像机位置的向量来表示。ZZZ轴从屏幕指向我。摄像机方向摄像机指向ZZZ轴的负方向,我们希望摄相机的方向向量指向ZZZ轴的正向,因此方向向量direction=摄像机位置−观察位置方向向量direction=摄像机位置-观察位置方向向量direction=摄像机位置−观察位置上向量上向量u
2020-10-31 09:47:29
174
原创 2.6 坐标系统
坐标系统我们总共会涉及到5个不同的坐标系统。局部空间(Local Space,或者称为物体空间(Object Space))世界空间(World Space)观察空间(View Space,或者称为视觉空间(Eye Space))裁剪空间(Clip Space)屏幕空间(Screen Space)我们的顶点坐标起始于局部空间(Local Space),在这里它称为局部坐标(Local Coordinate),它在之后会变为世界坐标(World Coordinate),观察坐标(View C
2020-10-31 09:46:33
707
原创 2.5 变换
变换有个易于使用,专门为OpenGL量身定做的数学库,那就是GLM。GLM是OpenGL Mathematics的缩写,它是一个只有头文件的库,也就是说我们只需包含对应的头文件就行了,不用链接和编译。OpenGL开发者通常使用一种内部矩阵布局,叫做列主序(Column-major Ordering)布局。GLM的默认布局就是列主序。code旋转、平移变换#include "../env/glm/glm.hpp"#include "../env/glm/gtc/matrix_transform.
2020-10-31 09:45:38
113
原创 2.4纹理
纹理纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来添加物体的细节。为了能够把纹理映射到三角形上,我们需要指定三角形的每个顶点各自对应纹理的哪个部分。这样每个顶点就会关联着一个纹理坐标(Texture Coordinate),用来标明该从纹理图像的哪个部分采样。之后在图形的其它片段上进行片段插值(Fragment Interpolation)。纹理坐标在x和y轴上,范围为0到1之间。纹理坐标起始于(0, 0),也就是纹理图片的左下角,终始于(1, 1),即纹理图片的右上角。纹理环绕方式当
2020-10-31 09:41:53
305
原创 2.3 着色器
着色器着色器是使用一种叫GLSL的类C语言写成的。GLSL是为图形计算量身定制的,它包含一些针对向量和矩阵操作的有用特性。着色器的开头总是要声明版本,接着是输入和输出变量、uniform和main函数。每个着色器的入口点都是main函数,在这个函数中我们处理所有的输入变量,并将结果输出到输出变量中。一个典型的GLSL编写的着色器有下面结构。#version version_numberin type in_variable_name;in type in_variable_name;out
2020-10-31 09:40:27
215
原创 2.2 你好,三角形
你好,三角形图形渲染管线在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应你屏幕的2D像素。3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线管理的。图形渲染管线可以被划分为几个阶段,每个阶段将会把前一个阶段的输出作为输入。所有这些阶段都是高度专门化的,并且很容易并行执行。正是由于它们具有并行执行的特性,当今大多数显卡都有成千上万的小处理核心,它们在GPU上为每一个阶段运行各自的小程序,从而在图形渲染管线中快速处
2020-10-29 18:36:50
212
原创 2.1 你好,窗口
你好,窗口#include "../env/glad.h"#include "../env/glfw3.h"#include <iostream>void framebuffer_size_callback(GLFWwindow *window, int width, int height);void processInput(GLFWwindow *window);int main(){ // 初始化GLFW glfwInit(); // 配置GLFW
2020-10-29 18:32:32
136
原创 1 简介
1 简介资料地址:Learn OpenGL CNOpenGL是一个图形API,并不是一个独立的平台,它需要一个编程语言来工作,在这里我们使用的是C++。一般它被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数。然而,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)。OpenGL自身是一个巨大的状态机(State Machine):一系列的
2020-10-29 18:31:43
116
原创 信息安全数学基础 第3章 同余式
第3章 同余式定义 3.1.1设mmm是一个正整数,f(x)f(x)f(x)为多项式f(x)=anxn+an−1xn−1+⋯+a1x+a0f(x)=a_nx^n+a_{n-1}x^{n-1}+\cdots+a_1x+a_0f(x)=anxn+an−1xn−1+⋯+a1x+a0其中aia_iai是正整数,则f(x)≡0mod mf(x)\equiv0\mod mf(x)≡0modm叫做模mmm同余式。若m∤anm\nmid a_nm∤an,则nnn称为f(x)f(x)f(x)
2020-10-29 00:10:46
1831
1
原创 Go基本语法整理
Go基本语法由于笔者已经对C/C++有所了解,所以下面的笔记将会从比较Go和C/C++的差异入手,相同部分便不再赘述教材源于菜鸟教程,但有所修改环境搭建Windows到官网上下载Windows的安装文件后安装即可。Hello World创建文件hello.go,然后输入如下内容package mainimport "fmt"func main() { /* first exsample*/ fmt.Println("Hello, World!")}运行命令
2020-10-23 12:37:28
823
1
原创 Linux错误解决
Ubuntu 16.04 Could not apply the stored configuration for monitors使用如下命令即可解决rm ~/.config/monitors.xml
2020-10-19 17:14:45
211
原创 指定版本安装Docker
就现在而言,docker版本已经更新到19.06。但是,在笔者使用criu做热迁移时,发现docker的checkpoint始终无法restore。后面笔者才发现,原来是docker版本的问题,将版本切换到17.06即可。此时就需要指定版本安装docker。注意事项以下操作均在root下进行,所以笔者的命令不会出现sudo。若未切换到root,则需要使用如下命令切换到root。su root笔者的下载源已经换成阿里源。1 安装前的准备首先执行下面4条命令。apt update.
2020-10-19 17:05:17
804
1
原创 ubuntu 16.04默认root登录
ubuntu 16.04默认root登录在笔者使用docker过程中,docker的操作命令之前都需要加上sudo。如果不想加上sudo,则需要在shell中先切换到root,即使用命令su root。但是,每启动一个终端都需要重新切换到root。所以,为了偷懒,笔者希望一开始就使用root账户登录~~为root设置密码如果之前没有切换过root,那么root账户是没有设置密码的,需要先为其设置密码。sudo passwd root然后输入密码即可,输出信息如下。nelson@ubuntu
2020-10-19 16:45:57
842
原创 在Docker下构建一个自己的Ubuntu镜像
由于Docker镜像站中的Ubuntu镜像是一个最小版本,连vi也没有:( 每次创建容器时都需要更换国内源和安装gcc等工具。因此,笔者觉得要做一个适合自己的Ubuntu镜像,减少后续的dirty work ????注意事项以下命令均在root用户下完成,若不在root用户,先使用如下命令转到root用户。su root如果下载缓慢,请自行百度如何将Docker镜像换成国内镜像,如阿里云的容器镜像站。获取Ubuntu使用如下命令从镜像站下载一个Ubuntu 16.04的镜像dock
2020-10-18 16:15:29
9703
3
原创 Docker使用小技巧
这里是Docker使用过程中可能用到的小技巧删除直接删除所有镜像docker rmi `docker images -q`直接删除所有容器docker rm `docker ps -aq`
2020-10-18 15:46:04
116
原创 Linux小技巧
记录一些Linux下的使用技巧,以免忘记在shell中输入多行文本到指定文件,当输入EOF时结束cat>filename<<EOF
2020-10-18 11:12:48
149
原创 LaTex小技巧
LaTex小技巧这里整理笔者在使用LaTex过程中收集的各种小技巧插入图片的问题LaTex可以对图片进行自动排版,使得我们可以不关心图片的位置。但是,LaTex并不是对所有的图片都可以实现自动排版,例如常用的截图生成的PNG文件就会在插入过程中出现各种问题,此时,将图片转成eps格式即可。CTEX套装中的bmeps工具就可以实现上述要求,使用命令如下bmeps -c 1.PNG 1.eps-c参数表示生成彩色图片,1.PNG是输入文件,1.eps是输出文件。此时,一个典型的插入图片语句时
2020-10-17 10:34:43
239
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人