实现协同过滤算法的第一步是:计算用户或项目之间的相似度。接下来介绍pdist和squareform
用法:
D = pdist(X)
D = pdist(X,distance)
D = pdist(X)计算 X 中各对行向量的相互距离(X是一个m-by-n的矩阵). 这里 D 要特别注意,D 是一个长为m(m–1)/2的行向量.可以这样理解 D 的生成:首先生成一个 X 的距离方阵,由于该方阵是对称的,且对角线上的元素为0,所以取此方阵的下三角元素,按照Matlab中矩阵的按列存储原则,此下三角各元素的索引排列即为(2,1), (3,1), ..., (m,1), (3,2), ..., (m,2), ..., (m,m–1).
D = pdist(X,distance) 使用指定的距离.distance可以取下面圆括号中的值.在该算法中用到以下三种距离:
夹角余弦距离Cosine distance('cosine')
改进夹角余弦距离Adjust Cosine distance('adjustedcosine')
相关距离Correlation distance('correlation')
接下来命令 squareform(D) 将此行向量转换为原距离方阵.(squareform函数是专门干这事的,其逆变换是也是squareform。)
pdist其他距离参数:
欧几里德距离Euclidean distance('euclidean')
标准欧几里德距离Standardized Euclidean distance('seuclidean')
马哈拉诺比斯距离Mahalanobis distance('mahalanobis')
曼哈顿距离(城市区块距离)City block metric('cityblock')
闵可夫斯基距离Minkowski metric('minkowski')
切比雪夫距离Chebychev distance('chebychev')
夹角余弦距离Cosine distance('cosine')
改进夹角余弦距离Adjust Cosine distance('adjustedcosine')
相关距离Correlation distance('correlation')
汉明距离Hamming distance('hamming')
杰卡德距离Jaccard distance('jaccard')