矩阵分解

算法导论笔记(一):复杂度,分治,随机

落爺英雄遲暮 提交于 2020-01-04 00:10:49
示例与概念 插入排序 归并排序 最坏情况分析与平均情况分析 函数增长的渐进记号 (O(n)) 表示函数增长的上界。即,花费时间不会高于线性增长。 (Theta(n)) 同时表示上界和下界。即,花费时间一定是这个线性增长的。 (Omega(n)) 表示增长的下界。 (o(n)) 表示不渐进紧确的上界。如, (2n =O(n^2)) , (n^2=O(n^2)) , (2n=O(n^2)) ,但 (n^2neq o(n^2)) (omega(n)) 与 (o(n)) 类似,表示不紧确的下界。 此外,常用 (T(n)) 表示所需的实际时间的函数。 分析分治算法,以归并排序为例 归并排序最坏运行时间的递归式: [ T(n)=begin{cases}Theta(1)&text{若} n=1,\ 2T(n/2)+Theta(n)&text{若} n>1. end{cases} ] 除使用主定理外,还可以这样理解递归式的值:将递归过程看做一个二叉树。递归调用中的每一层的总代价均为 (cn) ,其中 (c) 为常数。而二叉树的层数应为 (log_2n+1) 。故,整个算法的代价期望为 (Theta(nlog_2n)) 。 分治法 分治法求最大和的子数组 分解。将数组划分为两个子数组。此时,只存在三种子数组: 全部位于中点左侧的子数组 全部位于中点右侧的子数组 跨越中点的子数组 解决

投影矩阵推导(翻译)

我们两清 提交于 2020-01-01 21:57:24
投影矩阵推导(翻译) 原网址: http://www.codeguru.com/cpp/misc/misc/graphics/article.php/c10123/Deriving-Projection-Matrices.htm 3D矩阵变换中,投影矩阵是最复杂的。位移和缩放变换一目了然,旋转变换只要基本的三角函数就能想象出来,投影矩阵则很难凭借直觉想象出来。 总述:什么是投影 计算机显示屏是二维平面,所以如果你想显示三维物体,需要找到把三维物体渲染成二维图像的方法。这正是投影要做的。最简单的做法:直接丢掉三维物体各顶点的Z坐标。对于一个立方体,看起来像图1: 图1 通过丢掉Z坐标方法投影到XY平面 这种投影简单且不实用。所以,一开始就不应该投影到“面”(plane)上,而应该投影到一个“体”(volume)内,即所谓的“规范视域体”(canonical view volume)。规范视域体的顶点坐标在不同的API(DirectX/OpenGL)中有所不同。这里就用D3D的标准,从 (-1,-1,0)到(1,1,1)。当所有的顶点映射到规范视域体中后,XY坐标用来再映射到屏幕上。Z坐标看起来无用,不过通常用来表示深度信息。这也是为什么会投影到一个“体”,而不是“面”的原因。 下面将讲述两种常见变换:正交变换、透视变换。 正交变换 “正交”的由来是投影线与显示平面垂直

4.A=LU的矩阵分解(消元法的另一种求解方式)

烈酒焚心 提交于 2020-01-01 01:10:48
一.了解A=LU 其实简单的说A=LU是高斯消元法的另一种求解形式。 从上一节中,我们知道高斯消元法的形式主要是 EA=U。 其中 E 我们称其为消元矩阵。通过 进行变换,其中 。通过上边的变换,我们可以得到 A=LU。 在这里 L 就是英文单词lower,代表着下三角; U 的英文单词就是upper代表着上三角。 举个例子:2X2的例子 E x A = U 通过变换得到: A = L x U 我们还可以通过进一步的分解U,来进行LDU分解,把主元提出来: A = L x D x U 其中 D 是英文单词(diagonal)。表示对角矩阵的意思。通过LDU的分解产生的作用是很多的,接下来的博客会介绍。 二. 为什么要进行LU分解消元法 1.方便计算 举个3x3矩阵的例子。 对于一个矩阵A,假如需要通过三次消元才能得到U,这三次消元分别是 。所以 。 例如: 则 转换成 A=LU 的形式: . 通过上边我们发现通过普通消元法得到的初等矩阵在第三行有个数10,这是因为把第一行的-2倍加到了第二行,新的第二行的-5倍加到了第三行,所以第三行的10倍第一行加到第三行。这个10的出现大大降低了我们消元矩阵的可读性,特别是对于大型矩阵来说,也加大了他的存储和处理。而我们观察 L, 他首先是个下三角形的对角矩阵,对角全是1,同时他的其他元素刚好是我们要对各行处理的倍数

逻辑回归模型

不打扰是莪最后的温柔 提交于 2019-12-30 12:02:19
逻辑回归模型 - zgw21cn - 博客园 逻辑回归模型 1. 逻辑 回 归 模型 1.1逻辑回归模型 考虑具有p个独立变量的向量 ,设条件概率 为根据观测量相对于某事件发生的概率。逻辑回归模型可表示为 (1.1) 上式右侧形式的函数称为称为逻辑函数。下图给出其函数图象形式。 其中 。如果含有名义变量,则将其变为dummy变量。一个具有k个取值的名义变量,将变为k-1个dummy变量。这样,有 (1.2) 定义不发生事件的条件概率为 (1.3) 那么,事件发生与事件不发生的概率之比为 (1.4) 这个比值称为事件的发生比(the odds of experiencing an event),简称为odds。因为0<p<1,故odds>0。对odds取对数,即得到线性函数, (1.5) 1.2极大似然函数 假设有n个观测样本,观测值分别为 设 为给定条件下得到 的概率。在同样条件下得到 的条件概率为 。于是,得到一个观测值的概率为 (1.6) 因为各项观测独立,所以它们的联合分布可以表示为各边际分布的乘积。 (1.7) 上式称为n个观测的似然函数。我们的目标是能够求出使这一似然函数的值最大的参数估计。于是,最大似然估计的关键就是求出参数 ,使上式取得最大值。 对上述函数求对数 (1.8) 上式称为对数似然函数。为了估计能使 取得最大的参数 的值。 对此函数求导,得到p+1个似然方程

R语言矩阵运算

主宰稳场 提交于 2019-12-30 02:45:36
R语言矩阵运算 主要包括以下内容: 创建矩阵向量;矩阵加减,乘积;矩阵的逆;行列式的值;特征值与特征向量;QR分解;奇异值分解;广义逆;backsolve与fowardsolve函数;取矩阵的上下三角元素;向量化算子等. 1 创建一个向量 在R中可以用函数 c() 来创建一个向量,例如: > x=c(1,2,3,4) > x [1] 1 2 3 4 2 创建一个矩阵 在R中可以用函数 matrix() 来创建一个矩阵,应用该函数时需要输入必要的参数值。 > args(matrix) function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL) data 项为必要的矩阵元素, nrow 为行数, ncol 为列数,注意 nrow 与 ncol 的乘积应为矩阵元素个数, byrow 项控制排列元素时是否按行进行, dimnames 给定行和列的名称。例如: > matrix(1:12,nrow=3,ncol=4) [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 > matrix(1:12,nrow=4,ncol=3) [,1] [,2] [,3] [1,] 1 5 9 [2,] 2 6 10 [3,] 3 7 11 [4,] 4

NLP系列(7)_Transformer详解

这一生的挚爱 提交于 2019-12-27 16:31:12
Ref https://jalammar.github.io/illustrated-transformer/ , https://blog.csdn.net/han_xiaoyang/article/details/86560459 编者按:前一段时间谷歌推出的BERT模型在11项NLP任务中夺得SOTA结果,引爆了整个NLP界。而BERT取得成功的一个关键因素是Transformer的强大作用。谷歌的Transformer模型最早是用于机器翻译任务,当时达到了SOTA效果。Transformer改进了RNN最被人诟病的训练慢的缺点,利用self-attention机制实现快速并行。并且Transformer可以增加到非常深的深度,充分发掘DNN模型的特性,提升模型准确率。在本文中,我们将研究Transformer模型,把它掰开揉碎,理解它的工作原理。 正文: Transformer由论文《Attention is All You Need》提出,现在是谷歌云TPU推荐的参考模型。论文相关的Tensorflow的代码可以从GitHub获取,其作为Tensor2Tensor包的一部分。哈佛的NLP团队也实现了一个基于PyTorch的版本,并注释该论文。 在本文中,我们将试图把模型简化一点,并逐一介绍里面的核心概念,希望让普通读者也能轻易理解。 Attention is All

Python-EEG工具库MNE中文教程(10)-信号空间投影SSP数学原理

余生长醉 提交于 2019-12-27 07:18:27
目录 projector(投影)和投影背景 案例解释投影原理 导入工具库 什么是projector(投影)? 计算正交平面 使用SVD计算投影矩阵 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区(微信号:Brain_Computer).QQ交流群:903290195 projector(投影)和投影背景 projector(投影)(简称proj),也称为信号空间投影(SSP),定义了应用于空间上的EEG或MEG数据的线性操作。 可以将该操作看做是一个矩阵乘法,通过将数据投影到较低维度的子空间来降低数据的秩。 这种投影算子可以同时应用于数据和正向运算,用于源定位。注意,可以使用这样的投影算子来完成EEG平均参考。 它存储在info[‘projs’]中的测量信息中。 案例解释投影原理 导入工具库 import os import numpy as np import matplotlib . pyplot as plt from mpl_toolkits . mplot3d import Axes3D # noqa from scipy . linalg import svd import mne # 定义绘制3d图像 def setup_3d_axes ( ) : ax = plt . axes ( projection = '3d' ) ax . view_init (

unity shader之预备知识

北城以北 提交于 2019-12-26 20:09:18
1.渲染流水线 任务:从一个三维场景出发,生成(或者渲染)一张二维图像。即:计算机需要从一系列的定点出数据,纹理等信息出发,把这些信息最终转换程一张人眼可以看到的图像。而这个工作通常是由CPU和GPU共同完成的。 三个阶段: (1)应用阶段(CPU):1.准备场景数据。2.粗粒度剔除工作。3设置模型的渲染状态,输出渲染所需要的几何信息. 应用阶段大致可以分为三个阶段: 1.把数据加载到显存中。 2.设置渲染状态。渲染状态:定义场景中的网格是怎样被渲染的。如:使用那个顶点着色器/片元着色器。 3.调用DrawCall。DrawCall是一个命令,发起方为CPU,接收方为GPU。 (2)几何阶段:把定点坐标变换到屏幕空间中,再交给光栅器进行处理。对输入的渲染图源进行多部处理后,将会输出屏幕空间的二维顶点坐标,每个定点对应的深度值,着色等相关信息。 (3)光栅化阶段:产生屏幕上的像素,并渲染最终的图像。光栅化的任主要是决定每个渲染图源中的那些像素应该被绘制再屏幕上。对上一阶段得到的逐定点数据进行插值,然后再进行逐像素处理。 为了避免我们看到的那些正在进行光栅化的图元,GPU会使用双重缓冲策略(前置缓冲,后置缓冲)。当场景被渲染到后置缓冲中,GPU会交换前后置缓冲中的内容,前置缓冲事之前显示在屏幕上的图像。 (1)顶点着色器:处理单位是顶点,输入进来的每个定点都会调用一次定点着色器

[算法系列之三十三]杨氏矩阵

安稳与你 提交于 2019-12-26 19:09:38
即对于矩阵Table有Table[i][j] ≤Table[i][j + 1], Table[i][j] ≤ Table[i + 1][j],我们也称这样的矩阵为杨氏矩阵。 给出判定某个数是否存在该矩阵中的高效算法。 分析: 为了便于复杂度分析,我们暂时假定该矩阵为大小n*n。如下图所示为一个杨氏矩阵。 二分搜索解法: 许多人都观察到了矩阵在二维上都是有序的,所以使用在每一行(或者每一列)使用二分搜索是很自然的想法。由于每一行二分搜索需要O(lgn)时间,搜索n行需要O(nlogn)的时间。显然这个时间复杂度还是不够高效。当然这只是第一步尝试,不要让自己过早的陷入到二分搜索的泥潭中,好的方法还在后面。 一种错误的想法: 如果不细心也许会掉入一个陷阱中。有人也许认为可以先从行来判定,如果某个数位于某2行间,则只需要检查相应的2列即可,这是错误的。如下左边图所示,假定我们需要查找9是否在矩阵中,由于9位于7到11之间,所以接下来在7和11的这两列中(这2列在图中高亮显示)二分查找9,虽然能够查找到9,虽然查找9成功了,但是这个方法是错误的。因为10也位于7到11之间,但是10并不在这2列中。 即便是如下右边图示查询范围包括2行2列,尽管在查找9和10都成功,但是还是错误的,反例大家可以自己找一个。 Step-wise线性搜索解法: 从右上角开始,每次将搜索值与右上角的值比较

机器学习之降维方法

≯℡__Kan透↙ 提交于 2019-12-26 19:06:05
数据降维的 目的 :数据降维,直观地好处是维度降低了,便于计算和可视化,其更深层次的意义在于有效信息的提取综合及无用信息的摈弃。 数据降维的 好处 :降维可以方便数据可视化+数据分析+数据压缩+数据提取等。 降维方法 __ 属性选择 :过滤法;包装法;嵌入法;       | _ 映射方法 _ 线性映射方法:PCA、LDA、SVD分解等             | _ 非线性映射方法:                       |__核方法:KPCA、KFDA等                       |__二维化:                       |__流形学习:ISOMap、LLE、LPP等。             | __ 其他方法:神经网络和聚类 PCA方法简介   主成分分析的思想,就是线性代数里面的K-L变换,就是在均方误差准则下失真最小的一种变换。是将原空间变换到特征向量空间内,数学表示为Ax=λx。   PCA优缺点:   优点:1)最小误差。2)提取了主要信息   缺点:1)计算协方差矩阵,计算量大 LDA方法简介 (1)LDA核心思想:往线性判别超平面的法向量上投影,使得区分度最大(高内聚,低耦合)。   (2)LDA优缺点:   优点:1)简单易于理解   缺点:2)计算较为复杂 (3)问题 之前我们讨论的PCA、ICA也好,对样本数据来言