矩阵

基于项目的协同过滤推荐算法原理、过程、代码实现 基于项目评分的协同过滤推荐算法程序 余弦、修正余弦、person皮尔森算法、欧几里得距离公式等相似度算法 movielens电影评分数据集

自古美人都是妖i 提交于 2020-02-16 23:33:13
本文主要介绍基于项目的协同过滤推荐算法的推荐原理、推荐过程、代码实现。 一、基于项目的协同过滤推荐算法推荐原理 基于项目的协同过滤推荐算法也是推荐算法中最基础、最简单、很重要的算法,主要是根据用户对项目的某一种操作行为,构成项目-用户操作行为矩阵,根据操作行为矩阵计算项目之间的相似度,最终为目标用户推荐目标用户有操作行为的预测评分高的项目,作为目标用户感兴趣的项目。 二、基于项目的协同过滤推荐算法推荐过程 基于项目的协同过滤推荐算法推荐过程可分为三个步骤:构建项目-用户操作行为矩阵、计算项目之间似度、获取推荐结果。 1、构建项目-用户操作行为矩阵 我们以用户对项目的评分数据为例,M个项目和N个用户最大有M*N条项目的评分数据,记为矩阵MN,在计算机语言中可以通过一个二维数组来表达array[M][N],项目用数组下标0-M表示,用户用数组下标0-N表示,矩阵MN图形如下所示(0表示用户对项目没有评分): 评分 0 1 2 3 4 5 … N 0 1 0 5 2 0 3 … 5 1 5 2 4 0 0 0 … 0 2 2 5 3 4 2 1 … 4 3 0 4 0 0 4 1 … 2 … … … … … … … … … M 3 0 4 2 3 2 … 1 项目-用户评分矩阵可适用于项目-用户浏览记录矩阵、项目-用户浏览时长矩阵、项目-用户播放次数矩阵、项目-用户播放时长矩阵、项目

推荐系统(五)Graph Convolution Network

南楼画角 提交于 2020-02-16 23:22:05
本文尝试通过最简单易懂的语言来讲解GCN(Graph Convolution Network)原理,希望能够帮助大家理解GCN。这里只是讲解GCN的大致原理,公式细节上会省略一些常量,请大家见谅,毕竟这篇博客的目的在于GCN入门,不是深奥的数学知识。如果有讲的不对的地方,麻烦大家一定提出,毕竟错误的知识引导会造成无可估量的知识体系的伤害。 首先阐述一下一些CNN网络模型在图像领域的效果较好原因:网络不同层的卷积核在该层的输入数据上滚动能够提取到相应维度的特征,且通过不断的迭代从而学习到有效的提取特征方法,从而更好地完成任务。上述任务能够有效完成的前提是数据输入结构相对固定,具体而言,一个网络模型的输入是有要求的,比如说网络模型的输入格式为 128 ∗ 128 ∗ 3 128*128*3 1 2 8 ∗ 1 2 8 ∗ 3 ,这个输入数据(通常为图像)的每个位置都必须有值。 但如果输入是结构不固定的数据,比如一个图,再利用CNN模型完成指定任务的难度就相对较大,因为这和CNN模型的本质是冲突的。针对上面的问题,GCN的解决方案直截了当, 将输入结构不固定的数据转换为结构固定的数据,然后再送入CNN模型中 ,个人认为GCN完成的核心任务相当于 CNN的数据预处理过程,只不过这个预处理过程和CNN以往的预处理有所不同,需要在CNN每层处理之前都要做一遍 。 关键字 : 傅里叶变换

C++打印锯齿矩阵

故事扮演 提交于 2020-02-16 20:50:59
# include <iostream> # include <vector> using namespace std ; vector < int > mat [ 10005 ] ; //相当于数组里面装的是一个个vector int main ( ) { int n , m , x , y ; // n>=1 m<=10000 1<=x<=n 0<=y<=10000 // n表示锯齿数组的行数,m表示插入的元素总数。 // x,y是表示在x行的末尾插入一个元素y。 cin >> n >> m ; for ( int i = 0 ; i < m ; i ++ ) { cin >> x >> y ; mat [ x ] . push_back ( y ) ; } for ( int i = 1 ; i <= n ; i ++ ) { for ( int j = 0 ; j < mat [ i ] . size ( ) ; j ++ ) { cout << mat [ i ] [ j ] << " " ; } cout << endl ; } return 0 ; } 来源: CSDN 作者: Boring boy 链接: https://blog.csdn.net/qq_43130569/article/details/104344217

matlab矩阵合并及相关运算

纵然是瞬间 提交于 2020-02-16 16:23:00
1、matlab允许向量(和矩阵)合并,且matlab提供了两种合并方式,[a,b]和[a;b],两者的结果是不一样的。 a=rand(2,3); b=rand(2,3); c=[a;b]; d=[a,b]; c的结果是将b整体合并到a 的下边,而d的结果是整体将b合并到a 的右边。 2、创建等差向量组 a=[1:2:11] 注意涉及到向量内部对应数据之间的运算时一定要用点运算符号,(.)例如,求表达式b=a^2时应该写作 b=a.^2 也可以利用linspace来创建等差向量,linspace(a,b,n)创建从a到b长度为n的等差数列。当n省略时,默认是100. 3、向量的点乘和叉乘:点乘调用dot命令,dot(a,b),含义是两向量对应元素相乘并求和; 叉乘cross(a,b),值得注意的是a,b应该是同维的,且行数或列数中至少有一个是3 4、引用向量元素: a(i)取矩阵a中的第i个元素,a(:)将a的所有元素列出来,a(n:m)列出矩阵a中从第n个到第m个元素。 5、复数的转置 如果矩阵包含有复数元素,那么转置操作会自动计算复数的共轭值,即a’实际上是将a反转并求共轭。 如果希望只是求转置而不用共轭则应当用(a.’)。 6、矩阵中数组相乘,a.*b。作用是ab的对应元素相乘,求得一个与ab同维的矩阵 7、对矩阵的元素进行操作。 a(:,2)取第二列元素 a(2,:)=[

sklearn常用的API参数解析:sklearn.linear_model.LinearRegression

不想你离开。 提交于 2020-02-16 13:10:30
sklearn.linear_model.LinearRegression 调用 sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=None) Parameters fit_intercept 释义:是否计算该模型的截距。 设置:bool型,可选,默认True,如果使用中心化的数据,可以考虑设置为False,不考虑截距。 normalize 释义:是否对数据进行标准化处理 设置:bool型,可选,默认False,建议将标准化的工作放在训练模型之前,通过设置sklearn.preprocessing.StandardScaler来实现,而在此处设置为false当fit_intercept设置为false的时候,这个参数会被自动忽略。如果为True,回归器会标准化输入参数:减去平均值,并且除以相应的二范数 copy_X 释义:是否对X复制 设置:bool型、可选、默认True,如为false,则即经过中心化,标准化后,把新数据覆盖到原数据上 n_jobs 释义:计算时设置的任务个数,这一参数的对于目标个数>1(n_targets>1)且足够大规模的问题有加速作用 设置:int or None, optional, 默认None,如果选择

面试题04. 二维数组中的查找

时间秒杀一切 提交于 2020-02-16 09:27:38
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ] 给定 target = 5,返回 true。 给定 target = 20,返回 false。 解题思路 左下角标志法 标志数引入: 此类矩阵中左下角和右上角元素有特殊性,称为标志数。 左下角元素: 为所在列最大元素,所在行最小元素。 右上角元素: 为所在行最大元素,所在列最小元素。 class Solution ( object ) : def findNumberIn2DArray ( self , matrix , target ) : """ :type matrix: List[List[int]] :type target: int :rtype: bool """ # 左下角标志法,将左下角的值标记为flag,这个值是这一行的最小值,这一列的最大值, # 如果target>flag,表示target在当前列的右边,可以删除当前列 #

极线几何与立体视觉

一个人想着一个人 提交于 2020-02-16 03:13:05
极限几何与立体视觉 1. 试画图说明极线几何关系,并指出极点、极线所在,解释极线约束。 答: 极线几何 我们使用一个相机进行拍摄目标物体的时候,会 发现几个物体都重合了,但是当我们再放台相机的时候,就可以把这些物体的特征获取到。 也就是双目视觉对应关系,同时也可用于相邻两帧间的运动估计。 极线几何的关系 极线约束:匹配点必须在极线上 基线:左右像机光心连线; 极平面:空间点,两像机光心决定的平面; 极点:基线与两摄像机图像平面的交点; 极线:极平面与图像平面交线 2. 结合本质矩阵的定义,说明本质矩阵的意义,同时思考与上一周中平面点对应透视矩阵的区别。 本质矩阵 本质矩阵 E(Essential Matrix):反映【空间一点 P 的像点】在【不同视角摄像机】下【摄像机坐标系】中的表示之间的关系。 前面我们已经知道了各个坐标系之前的转换: 相机坐标系与世界坐标系 相机坐标系与图像坐标系 两相机坐标系某点与对应图像坐标系的关系: 同一点在两相机坐标系之间的关系: 两边同时叉积t: 再与p∼r​点积: 本质矩阵求解 基本方程 线性方程求解 有九个点(非共面)时,可获得线性解: 注意:解与真实解相差一个比例系数 使用SVD分解求解平移和旋转矩阵 可以证明,本质矩阵有2个相同的非零特征值 因此,最终可以得到4个解,但仅有一个合理解 3. 说明三维重构的步骤,并指出输入及输出要求。 三维重构

Natural Image Stitching with the Global Similarity Prior 论文笔记(一)

☆樱花仙子☆ 提交于 2020-02-16 00:01:30
《Natural Image Stitching with the Global Similarity Prior》论文笔记(一) @(sinbad)[360sinbad@gmail.com] 简要记录下基于网格优化的图像对齐方法算法的流程步骤,以便日后记忆。 全局单应性VS网格优化 2D图像拼接常利用相机做纯旋转运动或者拍摄场景为平面场景的前提假设对模型进行单应性近似,从而得到图像之间的映射关系。图像对齐时仅仅利用全局单应性往往不够。2011年后陆续出来基于网格优化的图像对齐方法。其中,APAP方法利用多个局部单应性来实现精确对齐,但是在图像变换的约束上仅有局部单应性容易造成图像畸变,使得图像质量变差。GSP方法提出相似性变换优先的思想,利用相机运动模型估计分解出合理的尺度因子和2D旋转角,从而约束了图像变形,可以得到表现更为自然的拼接图像。再结合局部相似性优化项,从而更为通用地解决了图像精确对齐问题。在实际应用中,使用最广泛的两个方向应该是在手机上的全景图像拼接和最近比较火的视频防抖。我估计全景拼接之前都是以opencv的拼接算法为原型,参考论文为 Automatic Panoramic Image Stitching using Invariant Features基于全局单应性变换,然后对重叠边界进行金字塔融合,手机上可以参考google原生相机的全景拼接

01二维数组中的查找

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-15 09:02:48
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路分析 从右上角的数开始比较,因为他是这行的max,这列的min,若目标数比它小,则往左走;比他大,则往下走。 代码实现 public boolean Find ( int target , int [ ] [ ] array ) { if ( array == null || array . length == 0 || array [ 0 ] . length == 0 || array [ 0 ] == null ) { return false ; } int row = 0 ; int column = array [ 0 ] . length - 1 ; while ( row < array . length && column >= 0 ) { if ( target == array [ row ] [ column ] ) { return true ; } else if ( target > array [ row ] [ column ] ) { row ++ ; } else { column -- ; } } return false ; } 来源:

matlab学习笔记

一世执手 提交于 2020-02-15 07:48:51
matlab学习笔记 本人使用的学习资料为台大郭彦甫的matlab教学视频,可以去油管搜索观看源视频,笔记顺序基本是按照视频顺序来的。 基本操作: 在matlab中, 自定变量的优先级比内置函数高 ,而内置函数的优先级又比自定义函数高,例: cos = 'This keeps a string' ; cos ( 8 ) % 这里结果是string的第八个字符 , 而不是调用内置的数学函数 matlab数字变量默认是double类型,可以使用format xxx命令来修改变量的默认类型,例如format short %/long/longE(科学计数法)/bank(保留两位)/rat(分数表示)。恢复直接用一个format指令 在进行矩阵(数组/向量)索引的时候,有两种索引方法,方法一是 直接a(行,列)来索引 ,这里可用:来表示当前维度所有,如a(1,:)表示取第一行所有列 方法二是用序号来索引(只推荐向量使用此方法),a(3)取第三个元素,如果不止一行序号先竖列再横行排,如图: 快速创建特殊矩阵(向量)的函数:linspace(1,5,6)表示从1-5创建一个等间距向量,一共6个,与1:xx:5根据不同情况结合使用。 zeros(row,col) / / / / / / ones(r,c)创建r行c列的全0/1矩阵 rand()随机数矩阵 eye(n)创建对角阵,主对角线是1