特征向量

推荐系统实践(七)

旧街凉风 提交于 2019-11-28 05:13:44
第七章 推荐系统实例 7.1 外围架构      数据收集和存储    需要实时存取的数据存储在数据库和缓存中,而大规模的非实时地存取数据存储在分布式文件系统中(HDFS)中。 7.2 推荐系统架构     用户和物品的联系如下所示:   如果认为用户喜欢的物品也是一种用 户特征,或者和用户兴趣相似的其他用户也是一种用户特征,那么用户就和物品通过特征相联系。基于上述的理解我们可以把推荐系统的核心任务拆分位两个部分1   > 如何给用户生成特征   > 如何根据特征找到物品   推荐系统的需求有很多,可以根据不同的需求设计不同的推荐引擎,通过不同的推荐引擎来满足客户的需求。 7.3 推荐引擎的架构       推荐引擎使用一种或几种用户特征,按照一种推荐策略生成一种类型物品的推荐列表。一个规则引擎的概念图如下所示:      > A部分从缓存中拿到用户的行为数据,通过分析用户的行为获取特征向量   > B部分将特征向量结合特征-物品矩阵生成初始的推荐列表   > C部分对初始的列表进行处理,从而生成最终的推荐结果。    生成用户特征向量    用户的特征一般有两种:一种是注册的时候获取的,另一种是通过用户的行为计算出来的。   计算用户特征向量主要考虑:   > 用户行为的种类 一般的标准是用户付出代价越大的行为权重越大   > 用户行为产生的时间 近期行为权重大   >

PCA算法学习_2(PCA理论的matlab实现)

こ雲淡風輕ζ 提交于 2019-11-28 04:05:40
   前言   在前面的博文 PCA算法学习_1(OpenCV中PCA实现人脸降维) 中已经初步介绍了PCA算法的大概流程及在人脸降维上面的应用。本文就进一步介绍下其理论基础和matlab的实现(也是网上学者的代码)。   开发环境:Matlab2012a    基础   假设X是一个m*n的矩阵,是由样本数据构成的矩阵。其中m表示样本的属性维数,n表示样本的个数。现在要对X进行线性变换变成另一个矩阵Y,使得Y的协方差矩阵为对角矩阵,这样的Y就认为是对原始矩阵X提取主成分后的矩阵,实际过程中只需取Y的前面主要的行即可。   X变换到Y的线性变换公式为:      X和Y的协方差计算方法为:         从下面的公式可以看出Cy和Cx的关系为:      因为Cx是对称矩阵,对Cx进行特征值分解就可以将其变换成对角矩阵,见下面的公式推导:      公式中的P和E满足:      其中D是由Cx的特征向量构成的对角矩阵。P是线性变换矩阵,P的每一行都是Cx矩阵的特征向量,且P是正交矩阵,一般情况下把特征值大的特征向量排在矩阵前面几行。   由此可知,求出P后就可以求出X主成分矩阵了。   另外,还可以求出PCA的白化矩阵,PCA的白化矩阵就是特征向量去相关的矩阵,白化矩阵的协方差阵一般为单位矩阵,在PCA中可以这么求:inv(sqrt(D))*E'

PCA的数学原理

↘锁芯ラ 提交于 2019-11-28 04:05:06
原帖地址: http://blog.codinglabs.org/articles/pca-tutorial.html PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。网上关于PCA的文章有很多,但是大多数只描述了PCA的分析过程,而没有讲述其中的原理。这篇文章的目的是介绍PCA的基本数学原理,帮助读者了解PCA的工作机制是什么。 当然我并不打算把文章写成纯数学文章,而是希望用直观和易懂的方式叙述PCA的数学原理,所以整个文章不会引入严格的数学推导。希望读者在看完这篇文章后能更好的明白PCA的工作原理。 数据的向量表示及降维问题 一般情况下,在数据挖掘和机器学习中,数据被表示为向量。例如某个淘宝店2012年全年的流量及交易情况可以看成一组记录的集合,其中每一天的数据是一条记录,格式如下: (日期, 浏览量, 访客数, 下单数, 成交数, 成交金额) 其中“日期”是一个记录标志而非度量值,而数据挖掘关心的大多是度量值,因此如果我们忽略日期这个字段后,我们得到一组记录,每条记录可以被表示为一个五维向量,其中一条看起来大约是这个样子: 注意这里我用了转置,因为习惯上使用列向量表示一条记录(后面会看到原因),本文后面也会遵循这个准则

特征值和特征向量

自古美人都是妖i 提交于 2019-11-28 00:24:57
设A是n阶方阵,若存在n维非零向量x,使得: 那么就称λ是A的特征值,x为A属于λ的特征向量,一个矩阵的一组特征向量是一组正交向量。 特征值分解 是将一个矩阵分解成下面的形式: 其中Q是这个矩阵A的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值。 首先要明确的是一个矩阵其实就是一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。比如说下面这个矩阵: 这个矩阵对应的线性变换为: 由于上面这个矩阵式对称的,所以变换是一个对x,y轴的方向一个拉伸变换(每一个对角线上的元素将会对一个维度进行拉伸变换,当值>1时,是拉长,当值<1时时缩短),当矩阵不是对称的时候,假如说矩阵是下面的样子: 那么变换是: 其实就是在平面上对一个轴进行拉伸变换,蓝色的箭头是最主要的一个方向(变化的方向可能不止一个),如果想要描述好一个变换,那就描述这个主要的变化方向就好了。 特征值分解的式子里分解得到的对角阵,里面的特征值是从大到小排列的,这些特征值所对应的特征向量就是描述这个矩阵变化方向(从主要的变化到次要的变化排列)。 当矩阵式高维时候,这个矩阵就是高维空间下的一个线性变换,这个变换同样有很多的变换方向,我们通过特征值分解得到的前N个特征向量,那么就对应了这个矩阵最主要的N个变换方向。我们利用这N个变换方向,就可以近似这个矩阵变换。也就是说的

对角化

岁酱吖の 提交于 2019-11-28 00:24:43
对角化是指存在一个正交矩阵Q,使得 Q T MQ 能成为一个对角阵(只有对角元素非0)。 其中Q T 是Q的转置(同时也是Q的逆,因为正交矩阵的转置就是其逆)。 一个矩阵对角化后得到新矩阵的行列式和矩阵的迹(对角元素之和)均与原矩阵相同。如果M是n阶实对称矩阵,则Q中的第 j 列就是第 j 个特征值对应的一个特征向量(不同列的特征向量两两正交)。 来源: https://www.cnblogs.com/pacino12134/p/11382527.html

无监督学习——降维

亡梦爱人 提交于 2019-11-27 11:12:37
降维算法应用:数据压缩、数据可视化。 主成分分析 ( PCA ) 是最常见的降维算法。 在 PCA 中,我们要做的是找到一个方向向量( Vector direction ), 当我们把所有的数据 都投射到该向量上时,我们希望投射平均均方误差能尽可能地小。方向向量是一个经过原点 的向量,而投射误差是从特征向量向该方向向量作垂线的长度。 PCA算法推导 关于PCA算法推导我觉得还是挺复杂的。之前在做数模比赛时,经常用到PCA算法, 但是都是拿来直接套用解决实际问题,根本没有仔细思考原理推导。 这里总结一下PCA算法原理推导中用到的两个重要原理: 特征值分解矩阵和SVD分解矩阵。 1. 特征值分解矩阵原理 (1) 特征值与特征向量 如果一个向量v是矩阵A的特征向量,将一定可以表示成下面的形式: 其中,λ是特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。 (2) 特征值分解矩阵 对于矩阵A,有一组特征向量v,将这组向量进行正交化单位化,就能得到一组正交单位向量。 特征值分解 ,就是将矩阵A分解为如下式: 其中,Q是矩阵A的特征向量组成的矩阵, 则是一个对角阵,对角线上的元素就是特征值。 2. SVD分解矩阵原理 奇异值分解是一个能适用于任意矩阵的一种分解的方法,对于任意矩阵A总是存在一个奇异值分解: 假设A是一个m*n的矩阵,那么得到的U是一个m*m的方阵

特征值与特征向量

帅比萌擦擦* 提交于 2019-11-27 08:17:45
定义 设 \(A\) 为 \(n\) 阶矩阵, \(x\) 为非零向量, 若存在数 \(\lambda\) 使得: \[ Ax = \lambda x \] 成立, 则称 \(\lambda\) 为 \(A\) 的 特征值 。 \(x\) 为A的属于 \(\lambda\) 的一个 特征向量 。 例题 求解矩阵 \(A\) 的特征值和特征向量 \[ A = \begin{bmatrix} 1 & 0 \\ 0 & 2 \\ \end{bmatrix} \] 特征值求解 由公式 \((\lambda E-A)x=0\) 有: \[ \begin{vmatrix} \lambda & 0 \\ 0 & \lambda \\ \end{vmatrix} - \begin{vmatrix} 1 & 0 \\ 0 & 2 \\ \end{vmatrix} = \begin{vmatrix} \lambda-1 & 0 \\ 0 & \lambda-2 \\ \end{vmatrix} = 0 \] 得到: \[ \begin{cases} \lambda_1 = 1 \\ \lambda_2 = 2 \end{cases} \] 来源: https://www.cnblogs.com/selfcs/p/11354093.html

ORB 特征提取算法(理论篇)

风流意气都作罢 提交于 2019-11-27 05:08:53
Abstract ORB 是 Oriented Fast and Rotated Brief 的简称,可以用来对图像中的关键点快速创建特征向量,这些特征向量可以用来识别图像中的对象。 其中,Fast 和 Brief 分别是特征检测算法和向量创建算法。ORB 首先会从图像中查找特殊区域,称为关键点。关键点即图像中突出的小区域,比如角点,比如它们具有像素值急剧的从浅色变为深色的特征。然后 ORB 会为每个关键点计算相应的特征向量。ORB 算法创建的特征向量只包含 1 和 0,称为二元特征向量。1 和 0 的顺序会根据特定关键点和其周围的像素区域而变化。该向量表示关键点周围的强度模式,因此多个特征向量可以用来识别更大的区域,甚至图像中的特定对象。 ORB 的特点是速度超快,而且在一定程度上不受噪点和图像变换的影响,例如旋转和缩放变换等。 FAST 算法 ORB 特征检测的第一步是查找图像中的关键点,而关键点检测算法即使用 FAST 算法。 FAST 是 Features from Accelerated Segments Test 的简称,可以快速选择关键点,算法步骤如下: 给与一个像素点 p,FAST 比较目标 p 圆圈范围中的 16 个像素,每个像素按高于 p,小于 p,或者与 p 相似,分为三类。 注意这里的比较是带有阈值 h 的。对于给定的阈值 h,更亮的像素将是亮度超过 Ip

python自己实现PCA降维

久未见 提交于 2019-11-26 10:01:01
# -*- coding:utf-8 -*- # /usr/bin/python import numpy as np x = np.array([[1,2,3],[2,3,4],[1,2,5],[1,5,6],[2,5,7],[1,7,2],[4,1,1]]) x_mean = np.mean(x,axis=0) #取均值 x_nor = x-x_mean #计算协方差 x_cov = np.cov(x-x_mean,rowvar=0) #计算特征值和特征向量 x_cov_value,x_cov_vec = np.linalg.eig(x_cov) #指定降维数量 k=2 #按特征值由小到大排列的对应索引 x_index = np.argsort(x_cov_value) #获取由大到小的前2个 x_index_k = x_index[:-(k+1):-1] #前两个特征值对应的特征向量 x_cov_vec_k = x_cov_vec[:,x_index_k] print(x_nor.dot(x_cov_vec_k)) #特征值 #print(x_cov_value) 来源: https://blog.csdn.net/weixin_41044499/article/details/98778862