机器学习算法学习---降维技术(二)

奇异值分解

优点:简化数据,去除噪声,提高算法的结果。

缺点:数据的转换可能难以理解。

适用数据:数值型

1、SVD的应用

(1)最早的SVD应用之一就是信息检索,利用SVD的方法为隐性语义索引(LSI)或隐性语义分析(LSA)

(2)推荐系统

2、矩阵分解

3、python实现

from numpy import *
from numpy import linalg 
U,Sigma,VT
=linalg.svd(dataMat)

4、基于协同过滤的推荐引擎

(1)相似度计算

推荐引擎是机器学习的一个重要应用,比如,Amazon会根据顾客的购买历史向他们推荐物品,Netflix会像其用户推荐电影,新闻网站会对用户 推荐新闻报道等等。当然,有很多方法可以实现推荐功能,比如基于内容的推荐,基于协同过滤的推荐,或者多个推荐相组合的推荐等等。基于内容的推荐,是通过 机器学习的方法,比如决策树,神经网络等从用户对于物品的评价的内容特征描述中得到用户感兴趣的资料,而不需要其他用户的数据。而基于协同过滤的推荐方法 则是通过将用户与其他用户的数据进行比对,依据相似度的大小实现推荐。

  首先,在进行协同过滤之前,我们需要将数据转化为合理的形式,即将数据转化为矩阵的形式,这样,便于我们处理和计算相似度。当我们计算出了用户 或者物品之间的相似度,我们就可以利用已有的数据来预测未知的用户喜好。比如,我们试图对某个用户喜欢的电影进行预测,推荐引擎会发现有一部电影该用户没 有看过。然后,就会计算该电影和用户看过电影之间的相似度,如果相似度很高,推荐算法就会认为用户喜欢这部电影。

  这里,协同过滤的相似度计算,并不是计算两个物品的属性信息的相似程度,而是基于用户对这些物品的评价信息来计算相似度。这也是协同过滤所使用的方法,即不关心物品的描述属性,而只关心用户对于物品的评价观点来进行相似度计算。

  相似度的计算方法有很多,比如欧氏距离,相关系数,余弦距离等。相关系数和余弦距离,是对两个向量之间的比较。这两种方法相对于欧氏距离的一个优势在于,它们对于用户的评级的量级并不敏感。为了将相似度归一化,我们需要对着三种方法计算得到的结果,进行归一化处理,使其最终的结果位于(0,1) 内,即:

  欧式距离相似度=1/(1+欧式距离)

  相关系数相似度=0.5+0.5*corrcoef()

  余弦距离相似度=0.5+0.5*(cosine距离)

具体实现如下:

from numpy import *
from numpy import linalg

#欧式距离相似度计算
def eulidSim(inA,inB):
    return 1.0/(1.0+linalg.norm(inA,inB))

#相关系数相似度计算
def corrSim(inA,inB):
    if len(inA)<3:return 1.0
    return 0.5+0.5*corrcoef(inA,inB,rowvar=0)[0][1]

#余弦距离相似度计算
def cosineSim(inA,inB):
    num=float(inA.T*inB)
    denom=linalg.norm(inA)*linalg.norm(inB)
    return 0.5+0.5*corrcoef(num/denom)

上面有了,相似度的计算方法,那么接下来要考虑的问题就是,是计算用户的相似度还是计算物品的相似度呢?显然,数据的行代表的是基于用户,而列代表的则是 基于物品。具体使用哪一种相似度计算,需要根据用户或者物品的数目。因为,不管是基于物品的相似度还是基于用户的相似度都会随着各自的数目的增加,计算的 时间也相应增加。所以,为了节省计算时间,我们按照数目相对较少的那一个量去计算相似度。显然,对于一家固定的餐馆,其菜品的数目基本是固定的,变化不 大,但其用户数目却可能会发生很大的变化,所以,一般情况下,协同过滤的推荐方法会偏向于计算基于物品的相似度。
(2)评价

那么如何对推荐引擎进行评价呢?此时,我们既没有预测的目标值,也没有用户来调查他们对于预测的满意程度。这么我们采用前面多次使用的交叉测试的方法。即,将某些已知的物品评分删掉,然后对这些物品的评分进行预测,然后比较预测值和真实值的差异。

通常用于推荐系统的评价的指标是最小均方根误差。即,首先计算平方误差的均值,然后再对平均值开根号。

5、样例

https://www.cnblogs.com/zy230530/p/7208966.html 

 

posted @ 2019-06-03 17:23  2048的渣渣  阅读(252)  评论(0编辑  收藏  举报