矩阵转置

推荐系统相关算法(1):SVD

十年热恋 提交于 2020-02-01 06:40:52
假如要预测Zero君对一部电影M的评分,而手上只有Zero君对若干部电影的评分和风炎君对若干部电影的评分(包含M的评分)。那么能预测出Zero君对M的评分吗?答案显然是能。最简单的方法就是直接将预测分定为平均分。不过这时的准确度就难说了。本文将介绍一种比这个最简单的方法要准上许多,并且也不算复杂的算法。 SVD(Singular Value Decomposition)的想法是 根据已有的评分情况,分析出评分者对各个因子的喜好程度以及电影包含各个因子的程度,最后再反过来根据分析结果预测评分 。电影中的因子可以理解成这些东西:电影的搞笑程度,电影的爱情爱得死去活来的程度,电影的恐怖程度。。。。。。SVD的想法抽象点来看就是将一个N行M列的评分矩阵R(R[u][i]代表第u个用户对第i个物品的评分),分解成一个N行F列的用户因子矩阵P(P[u][k]表示用户u对因子k的喜好程度)和一个M行F列的物品因子矩阵Q(Q[i][k]表示第i个物品的因子k的程度)。用公式来表示就是 R = P * T(Q) //T(Q)表示Q矩阵的转置 下面是将评分矩阵R分解成用户因子矩阵P与物品因子矩阵Q的一个例子。R的元素数值越大,表示用户越喜欢这部电影。P的元素数值越大,表示用户越喜欢对应的因子。Q的元素数值越大,表示物品对应的因子程度越高。分解完后,就能利用P,Q来预测Zero君对《七夜》的评分了

Stanford CS230学习笔记(二):Lecture 2 Basics, Logistic Regression and Vectorization

ぐ巨炮叔叔 提交于 2020-01-31 05:10:18
事先声明 :本文是写给自己看的,发在这里是因为掘金图床真的好方便orz(是的之前在掘金上,但是后来掘金的文中代码块标红,好难看!),本系列将按照我自己的逻辑整理,知识点并没有全写上,还可能会出现随心所欲中英文混杂的情况,公式也打算截图,如果你碰巧看到我的想要照着看也不是不行,但网上总结得比我好的太多了,甚至可以去找找看Stanford自己整理的笔记,内容很全,不过是全英文的,而且排版有点反人类 深度学习介绍 常用模型 标准神经网络:构成神经网络的主要部分 卷积神经网络:常用于图像应用 循环神经网络:常用于一维可序列化的模型,如语音识别(语音输入为随时间变化的序列),自然语言处理(输入为可序列化分析的单词或句子) 监督学习 从给定的训练数据集中学习出一个函数(模型参数),当新的数据到来时,可以根据这个函数预测结果, 数据都是带标签的 ,与无监督学习(Unsepervised Learning),半监督式/强化学习(Reinforcement Learning)相区分 一般根据预测结果分类分作两类 回归(Regression):预测结果为连续型的值或无限可列个 分类(Classification):预测结果为有限可列个值 ReLU函数(线性整流函数) ReLU函数是深度学习中的常用函数,其全称为线性整流函数(Rectified Linear Unite),取值方式为 y=max(0,x

shader入门精要读书笔记06 数学基础

倖福魔咒の 提交于 2020-01-30 14:50:39
第四章 数学基础 一、坐标系 笛卡尔坐标系,分为二维三维。 二维坐标系 OpenGL是左下角为0,DirectX是左上角。 三维坐标系,3个坐标轴也被称为基矢量,长度为1的基矢量叫做标准正交基,长度不唯1的叫正交基。 三维笛卡尔坐标系又分为左手坐标系与右手坐标系。 Unity使用的是左手坐标系,摄像头的观察空间是右手坐标系(摄像头前方为z轴的负方向)。 二、点和矢量 矢量:有方向有模,没有位置。 点:只是一个位置。 矢量的加减乘除运算,模运算。 单位矢量:被归一化的矢量。通过在矢量上方加个^来表示是矢量的模。 单位矢量的运算:通过矢量除以矢量的模来进行计算。 单位矢量计算通常使用在法线方向、光源方向等。 矢量的点积(内积/点乘): 点积就是可以确定两个矢量的方向关系。投影长度=标量。 点乘结果>0 :两个矢量方向关系为<90°。(=0 : 垂直,<0 : >90°) 求适量的模可以将矢量对其自身进行点乘,运算后开方。 a·b=|a||b|cos夹角 矢量的叉积(外积/叉乘): 叉积结果是矢量,不满足交换律,叉积的结果是得到一个同时垂直于这两个矢量的新矢量。 使用左手定则,右手定则来判断在不同坐标系中,新得到的矢量方向。 |a×b|=|a||b|sin夹角 我们可以通过点乘(cos值)来确定某两个矢量的夹角关系。 还可以通过叉乘判断一个面的正面反面(通过确定面上的三个点的顺时针

python_矩阵转置

百般思念 提交于 2020-01-30 09:46:10
矩阵转置 """ 矩阵转置 算法:将list01中每列,存储到list02中每行 """ list01 = [ [ 1 , 2 , 3 , 4 ] , [ 5 , 6 , 7 , 8 ] , [ 9 , 10 , 11 , 12 ] , ] list02 = [ ] for c in range ( len ( list01 [ 0 ] ) ) : line = [ ] for r in range ( len ( list01 ) ) : line . append ( list01 [ r ] [ c ] ) list02 . append ( line ) print ( list02 ) 来源: CSDN 作者: 李富贵︴ 链接: https://blog.csdn.net/weixin_46198526/article/details/104108245

朝花夕拾之Matlab矩阵运算

不羁岁月 提交于 2020-01-29 15:21:44
矩阵运算 1. 加、减运算 运算符:“+”和“-”分别为加、减运算符。 运算规则:对应元素相加、减,即按线性代数中矩阵的“十”,“一”运算进行。 例1-22 >>A=[1, 1, 1; 1, 2, 3; 1, 3, 6] >>B=[8, 1, 6; 3, 5, 7; 4, 9, 2] >>A+B=A+B >>A-B=A-B 结果显示:A+B= 9 2 7 4 7 10 5 12 8 A-B= -7 0 -5 -2 -3 -4 -3 -6 4 2. 乘法 运算符:* 运算规则:按线性代数中矩阵乘法运算进行,即放在前面的矩阵的各行元素,分别与放在后面的矩阵的各列元素对应相乘并相加。 1.两个矩阵相乘 例1-23 >>X= [2 3 4 5; 1 2 2 1]; >>Y=[0 1 1; 1 1 0; 0 0 1; 1 0 0]; Z=X*Y 结果显示为: Z= 8 5 6 3 3 3 2.矩阵的数乘:数乘矩阵 上例中:a=2*X 则显示:a = 4 6 8 10 2 4 4 2 向量的点乘(内积):维数相同的两个向量的点乘。 数组乘法: A.*B表示A与B对应元素相乘。 3 .向量点积 函数 dot 格式 C = dot(A,B) %若A、B为向量,则返回向量A与B的点积,A与B长度相同;若为矩阵,则A与B有相同的维数。 C = dot(A,B,dim) %在dim维数中给出A与B的点积

转:奇异值分解与特征值分解

偶尔善良 提交于 2020-01-29 04:31:44
文章摘自: http://blog.jobbole.com/88208/ 一、奇异值与特征值基础知识: 特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法。两者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征。先谈谈特征值分解吧: 1) 特征值: 如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式: 这时候λ就被称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。特征值分解是将一个矩阵分解成下面的形式: 其中Q是这个矩阵A的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值。我这里引用了一些参考文献中的内容来说明一下。首先,要明确的是,一个矩阵其实就是一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。比如说下面的一个矩阵: 它其实对应的线性变换是下面的形式: 因为这个矩阵M乘以一个向量(x,y)的结果是: 上面的矩阵是对称的,所以这个变换是一个对x,y轴的方向一个拉伸变换(每一个对角线上的元素将会对一个维度进行拉伸变换,当值>1时,是拉长,当值<1时时缩短),当矩阵不是对称的时候,假如说矩阵是下面的样子: 它所描述的变换是下面的样子: 这其实是在平面上对一个轴进行的拉伸变换(如蓝色的箭头所示),在图中,蓝色的箭头是一个最 主要的

C语言实验——矩阵转置

拜拜、爱过 提交于 2020-01-29 03:48:44
C语言实验——矩阵转置 #include<stdio.h> int main ( ) { int n,i,j,t ; int a [ 120 ] [ 120 ] ; scanf ( "%d" , & n ) ; for ( i = 0 ; i < n ; i++ ) { for ( j = 0 ; j < n ; j++ ) { scanf ( "%d" , & a [ i ] [ j ] ) ; } } for ( i = 0 ; i < n ; i++ ) { for ( j = 0 ; j < i ; j++ ) { t = a [ i ] [ j ] ; a [ i ] [ j ] = a [ j ] [ i ] ; a [ j ] [ i ] = t ; } } for ( i = 0 ; i < n ; i++ ) { for ( j = 0 ; j < n ; j++ ) { if ( j == n-1 ) printf ( "%d\n" ,a [ i ] [ j ] ) ; else printf ( "%d " ,a [ i ] [ j ] ) ; } } return 0 ; } 来源: CSDN 作者: baiqiaoxiang 链接: https://blog.csdn.net/baiqiaoxiang/article/details/103595139

朝花夕拾之Matlab矩阵表示

我的未来我决定 提交于 2020-01-28 23:24:18
1.实数值矩阵输入 MATLAB的强大功能之一体现在能直接处理向量或矩阵。当然首要任务是输入待处理的向量或矩阵。 不管是任何矩阵(向量),我们可以直接按行方式输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔,且空格个数不限;不同的行用分号(;)分隔。所有元素处于一方括号([ ])内;当矩阵是多维(三维以上),且方括号内的元素是维数较低的矩阵时,会有多重的方括号。如: >> Time = [11 12 1 2 3 4 5 6 7 8 9 10] Time = 11 12 1 2 3 4 5 6 7 8 9 10 >> X_Data = [2.32 3.43;4.37 5.98] X_Data = 2.43 3.43 4.37 5.98 >> vect_a = [1 2 3 4 5] vect_a = 1 2 3 4 5 >> Matrix_B = [1 2 3; >> 2 3 4;3 4 5] Matrix_B = 1 2 3 2 3 4 3 4 5 >> Null_M = [ ] %生成一个空矩阵 2.复数矩阵输入 复数矩阵有两种生成方式: 第一种方式 例1-1 >> a=2.7;b=13/25; >> C=[1,2*a+i*b,b*sqrt(a); sin(pi/4),a+5*b,3.5+1] C= 1.0000 5.4000 + 0.5200i 0.8544 0

54. 螺旋矩阵

痞子三分冷 提交于 2020-01-28 13:52:37
本题需要螺旋打印一个二维数组,即每打印一层旋转一次。 所以本题需要用到旋转矩阵这一操作。 转载自 https://blog.csdn.net/ezio23/article/details/81414092 zip可以将输入的两个一维列表,逆时针转置成一个二维数组 zip(a,b) zip(*zipped) 可以将一个二维数组,逆时针转置成二维数组 所以在本题中需要使用到 顺时针转置还需要逆序:    class Solution: def spiralOrder(self, matrix: List[List[int]]) -> List[int]: res = [] while matrix: res += matrix.pop(0) matrix = list(map(list,zip(*matrix)))[::-1]       return res 在加粗的一行中 外层的List用来将Object转化成list,内层的List用来将内层的tuple 转化成List,从而可以pop 来源: https://www.cnblogs.com/ChevisZhang/p/12237873.html

Transformer模型学习笔记

痞子三分冷 提交于 2020-01-28 03:47:29
Transformer模型学习笔记 前言 回顾 参考资料 解读 1. High-level的看一下,transformer大致是个什么样子 2.详细看下, 具体结构,以及输入都长什么样 3.self-attention层 4.多头机制 Multi-head 5.输入语句中词的顺序(Positional Encoding) 6.剩余东西 7.解码器(Decoder) 8.最后输出层 前言 Google研究菌曰: 在transformer模型之前,我们做机器翻译等事情(论文原话: 我们做转录模型(transduction model)) 都是用循环神经网络(RNN)或者卷积神经网络(CNN)作为基本单元,搭建一个包含encoder和decoder的模型. 虽然效果不错,但是显然还有很多进步空间. 既然拿那么多钱,上班又不是996,不如整点新的东西? 于是有了transformer模型. 回顾 回顾下整体流程, 为啥会想到要去创造transformer这个东西. 做机器翻译? –>那咱们搭一个具有encoder-decoder结构的模型. 其中seq2seq是最常用的encoder-decoder模型–>模型里的小单元用基本结构的RNN或者基本结构的CNN. 训练完发现对长句记忆效果不理想,模型记不住之前的信息?发生梯度消失? –>采用RNN的变体结构LSTM 翻译效果不太好