矩阵

二维数组中的查找给定数字

孤街醉人 提交于 2020-01-10 23:47:17
public class FindANumInTwoSortedArray {   public static void main(String[] args) {   int[][] array = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};   FindANumInTwoSortedArray findANumInTwoSortedArray = new FindANumInTwoSortedArray();   int target = 4;   boolean result = findANumInTwoSortedArray.findTarget(array, target);   System.out.println(result);   }   public boolean findTarget(int[][] array, int target){     boolean findResult = false;     for(int i = 0; i < array.length; ++i){       if(array[i][array[i].length-1] >= target && array[i][0] <= target){         int start = 0;         int

二维数组中的查找

流过昼夜 提交于 2020-01-10 23:46:50
题目   在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数? 分析   从二维数组的左下或右上开始查询,本题中将以左下为例。由于每行每列都是递增的,所以从左下角(i = row-1, j = 0)开始,当target<array[i][j]时,i--;当target>array[i][j]时,j++。直到满足临界条件,即target==array[i][j]或i<0或j>col-1时,返回判断值。 代码 1 public boolean Find(int target, int [][] array) { 2 3 int row = array.length, col = array[0].length; 4 if(row==0 || col==0) 5 return false; 6 int i = row-1, j = 0, tag = 0; 7 while(i>=0 && j<=col-1 && target!=array[i][j]){ 8 while(i>=0 && target<array[i][j]) i--; 9 if(i<0){ 10 tag = 1; 11 break; 12 } 13 while(j<=col-1 && target>array

降维技术2-线性判别分析(LDA)

三世轮回 提交于 2020-01-10 23:40:41
线性判别分析(Linear Discriminant Analysis),简称LDA,是一种经典的线性学习方法。在二分类问题上最早由Fisher提出,也称"Fisher判别分析"。 在主成分分析原理总结中,我们对降维算法PCA进行了总结。这里的LDA是另一种经典的的降维算法。使用PCA进行降维,我们没有将类别考虑进去,属于无监督学习。而LDA是一种监督学习的降维技术,即它的每个样本是有类别输出的。 LDA的思想 给定训练样例集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近,异类样例的投影点尽可能远离;在对新样本进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定新样本的类别。 用一句话概括就是:投影后类内方差最小,类间方差最大。 瑞利商与广义瑞利商(Rayleigh quotient) 瑞利商定义:瑞利商是指这样的函数 \(R(A,x)\) : \[R(A,x)=\dfrac{x^HAx}{x^Hx}\] 其中 \(x\) 为非零向量,而A为 \(n\times n\) 的Hermitan矩阵。所谓的Hermitan矩阵就是它的共轭转置等于它本身,属于推广的对称矩阵,即 \(A^H=A\) .如果A是实对称阵, \(A^T=A\) 即为Hermitan矩阵。 瑞利商 \(R(A,x)\) 有 一个非常重要的性质,即它的最大值等于矩阵A的最大特征值

数据降维(PCA、KPCA、PPCA)及C++实现

流过昼夜 提交于 2020-01-10 22:13:31
1、何为数据降维 1.1维数灾难:往往满足采样条件所需的样本数目巨大、样本稀疏、距离计算困难。 1.2降维:利用数学变换将原始高维属性空间转变为低维“子空间”,即在高维采样数据中提取能够表达原始数据的特征。 1.3 降维优点:数据集更易懂、使用和显示;降低算法计算开销;去除噪声。 2、一些降维算法 Principal Component Analysis (PCA) Linear Discriminant Analysis(LDA) Locally linear embedding(LLE) Laplacian Eigenmaps 本文主要针对以下三种算法: 2.1 PCA:PCA算法是一种线性投影技术,利用降维后使数据的方差最大原则保留尽可能多的信息; 2.2 KPCA:PCA仅考虑了数据的二阶统计信息,而没有利用高阶统计信息,忽略了数据的非线性相关性,而KPCA,通过非线性变换将数据映射到了高维,在高维空间中进行特征提取,获得了更好的特征提取性能; 2.3 PPCA:PCA没有将数据的概率分布考虑,PPCA对PCA做了概率上的解释,延伸了PCA算法。 总之:PPCA和KPCA都是针对PCA算法的缺陷,做出了不同方向上的改进。 3 PCA、KPCA、PPCA算法步骤 3.1 PCA: 数据在低维线性空间上的正交投影,这个线性空间被称为主子空间,使得投影数据的方差被最大化。

NMF: non-negative matrix factorization.

让人想犯罪 __ 提交于 2020-01-10 21:58:34
1. 矩阵分解可以用来解决什么方法, 以及how? 利用矩阵分解来解决实际问题的分析方法很多,如 PCA(主成分分析)、ICA(独立成分分析)、SVD(奇异值分解)、VQ(矢量量化) 等。在所有这些方法中,原始的大矩阵V被近似分解为低秩的V=WH形式。这些方法的共同特点是,因子W和H中的元素可为正或负,即使输入的初始矩阵元素是全正的,传统的秩削减算法也不能保证原始数据的非负性。在数学上,从计算的观点看,分解结果中存在负值是正确的,但负值元素在实际问题中往往是没有意义的。例如图像数据中不可能有负值的像素点;在文档统计中,负值也是无法解释的。 2. NMF NMF的基本思想可以简单描述为:对于任意给定的一个非负矩阵A,NMF算法能够寻找到一个非负矩阵U和一个非负矩阵V,使得满足 ,从而将一个非负的矩阵分解为左右两个非负矩阵的乘积。 分解前后可理解为:原始矩阵 的列向量是对左矩阵 中所有列向量的加权和,而权重系数就是右矩阵对应列向量的元素,故称 为基矩阵, 为系数矩阵。一般情况下 的选择要比 小,即满足 ,这时用系数矩阵代替原始矩阵,就可以实现对原始矩阵进行降维,得到数据特征的降维矩阵,从而减少存储空间,减少计算机资源。 other documentations: NMF 非负矩阵分解 -- 原理与应用 Supplementary knowledge 1. matrix rank矩阵的秩

Spark ALS算法理解

六月ゝ 毕业季﹏ 提交于 2020-01-10 11:01:23
ALS算法 ALS的意思是交替最小二乘法(Alternating Least Squares),它只是是一种优化算法的名字,被用在求解spark中所提供的推荐系统模型的最优解。spark中协同过滤的文档中一开始就说了,这是一个基于模型的协同过滤(model-based CF),其实它是一种近几年推荐系统界大火的隐语义模型中的一种。隐语义模型又叫潜在因素模型,它试图通过数量相对少的未被观察到的底层原因,来解释大量用户和产品之间可观察到的交互。操作起来就是通过降维的方法来补全用户-物品矩阵,对矩阵中没有出现的值进行估计。基于这种思想的早期推荐系统常用的一种方法是SVD(奇异值分解)。该方法在矩阵分解之前需要先把评分矩阵R缺失值补全,补全之后稀疏矩阵R表示成稠密矩阵R',然后将R’分解成如下形式: 然后再选取U中的K列和V中的S行作为隐特征的个数,达到降维的目的。K的选取通常用启发式策略。 这种方法有两个缺点,第一是补全成稠密矩阵之后需要耗费巨大的存储空间,在实际中,用户对物品的行为信息何止千万,对这样的稠密矩阵的存储是不现实的;第二,SVD的计算复杂度很高,更不用说这样的大规模稠密矩阵了。所以关于SVD的研究很多都是在小数据集上进行的。 隐语义模型也是基于矩阵分解的,但是和SVD不同,它是把原始矩阵分解成两个矩阵相乘而不是三个。 现在的问题就变成了确定X和Y ,我们把X叫做用户因子矩阵

torch.bmm() 与 torch.matmul()

空扰寡人 提交于 2020-01-10 08:47:33
torch.bmm() torch.matmul() torch.bmm()强制规定维度和大小相同 torch.matmul()没有强制规定维度和大小,可以用利用广播机制进行不同维度的相乘操作 当进行操作的两个tensor都是3D时,两者等同。 torch.bmm() 官网: https://pytorch.org/docs/stable/torch.html#torch.bmm torch. bmm ( input , mat2 , out=None ) → Tensor torch.bmm()是tensor中的一个相乘操作,类似于矩阵中的A*B。 参数: input,mat2:两个要进行相乘的tensor结构,两者必须是3D维度的,每个维度中的大小是相同的。 output:输出结果 并且相乘的两个矩阵,要满足一定的维度要求:input(p,m, n ) * mat2(p, n ,a) ->output(p,m,a)。这个要求,可以类比于矩阵相乘。前一个矩阵的列等于后面矩阵的行才可以相乘。 例子: import torch x = torch.rand(2,3,6) y = torch.rand(2,6,7) print(torch.bmm(x,y).size()) output: torch.Size([2, 3, 7]) ###########################

softmax回归(理论部分解释)

拈花ヽ惹草 提交于 2020-01-10 04:59:30
前面我们已经说了logistic回归,训练样本是 , (且这里的 是d维,下面模型公式的x是d+1维,其中多出来的一维是截距横为1,这里的y=±1也可以写成其他的值,这个无所谓不影响模型,只要是两类问题就可以),训练好这个模型中 参数θ以后(或者是 这个模型,这俩是一个模型),然后给入一个新的 ,我们就可以根据模型来预测 对应label=1或0的概率了。 前面处理的是两类问题,我们想把这个两类问题扩展,即根据训练好的模型,给入一个新的 ,我们就可以根据模型来预测 对应label=1,2,…k等多个值的概率。我们首先也是最重要的部分是确定这个新的模型是什么。对于一个x,新的模型 (j=1,2..k)要加起来等于1. 我们假设新模型为: ……………………………………..……………………………………………………………………(1) (这里模型中的 是经过前面的 处理后的,每一个 都增加了一维 ) 其中 是模型的参数在实现Softmax回归时,将 用一个 的矩阵来表示会很方便,该矩阵是将 按行罗列起来得到的,如下所示: 这里说一个问题 :在logistic回归中,是两类问题,我们只用了一个θ,这里我们是不是也可以只用k-1个θk就可以表示所有的模型呢?具体就是我们只需要把 置为0.所以 =1,这样带入公式(1)中就可以少使用一个 ,我们验证一下,如果k=2即两类问题时

二维数组查找

*爱你&永不变心* 提交于 2020-01-10 04:13:25
题目:在一个二维数组中,每一行都是按照从左向右递增的顺序排列,每一列都按照从上到下的递增的顺序排列。请完成一个函数,输入二维数组和一整数,判断数组中是否含有该整数 public class Test{ public static void main(String[] args) { int[][] arr = {{1,2,8,9}, {2,4,9,12},{4,7,10,13},{6,8,10,15}}; System.out.println(find(arr, 4, 4, 0)); } public static boolean find(int[][] matrix, int rows, int columns, int number) { for (int i=0; i<rows; i++) for (int j=columns-1; j>=0; j--) { if (matrix[i][j] == number) return true; else if (matrix[i][j] > number) { columns -= 1; break; } else { rows -= 1; break; } } return false; } } 来源: https://www.cnblogs.com/xidongyu/p/6972451.html