51CTO|推荐算法集锦(补充)——近邻选择与算法拓展( 二 )


在基于近邻进行推荐的算法中 , 近邻数量的选择以及对于近邻选择的规则都会对推荐系统的最终效果产生重要影响 。 在实际运用场景中 , 一般在基于近邻推荐算法中近邻的选择方式有以下方式:
(1)先过滤出预选近邻 , 过滤的方法有Top-N过滤、阈值过滤和负数过滤 。 这几个过滤通过名字基本就知道了过滤方法了 。 Top-N过滤无非就是选取排名靠前的N个物品或者用户;阈值过滤无非就是设置个参数 , 超过或者低于这个参数就会被过滤掉之类的;而负数过滤也就无非过滤掉负数这类的 。
(2).在从预选的近邻列表中获取所设定的k个近邻;如果所选取的k的数目过小的话 , 就会导致预测精度非常低 。 当随着k的增大 , 预测精度就会有一定的提升 , 但是过犹不及 , 达到一定参数值的时候(一般在实际场景中是50) , 由于存在一些重要的关联被不重要的关联给削弱了 , 就会导致预测精度下降了 , 因此推荐k的选值为25至50之间 。 不过在实际运用场景中 , 最优的k值还得通过训练集和测试集来通过交叉验证来获取 。 k-近邻(KNN)具体的选取步骤即对未知类别属性的数据集的每个点依次执行以下操作:
(1)先计算已知类别数据集中的每个点与当前点之间的距离 ,
(2)按取距离递增次序排序;
(3)选取和当前点距离最近的k(预设定)个点;
(4)确定前k个点所在类别的出现频率 , 按照出现频率最高的k个点的类别来作为当前点的预测类别 。
3. K-means算法
在协同过滤算法的SVD矩阵因子分解中 , 分解后的或者未分解的评分矩阵丰富度过高 , 也就是评分数量过多的话 , 会造成算法时间复杂度过高 , 对实时性造成严重影响 。 这时候就会采取之前所说的K-means算法 , 但是在之前的文稿中也只是随便提及了而已 , 并没有进行过多阐述 。 因此在这里对K-means算法进行介绍下 。
K-mans算法的步骤和思想其实也比较容易理解 , 就是将数据集中的每一个点进行分类归整 。 将相同属性类别的点归为一类 。 算法接收端输入的是一个尚未标记的数据集 , 然后通过聚类算法对数据集的每个点分为不同的组 , 这也是一种无监督的学习算法 。 具体步骤大致分为以下几步:
(1)先随机地选取k个点(k的值先预设出来 , 一般选取小值比较好) , 来作为聚类的中心点;
(2)计算每个点分别到选取好的k个聚类中心点的距离 , 通过每个点如其他中心点的距离来进行排序 , 将该点划分给距离最近的那个聚类里面 , 依次分别划分所有点的类别;
(3)再重新计算每个聚类的中心点;
(4)不断重复以上2、3两步 , 直到聚类的中心点的位置不发生改变或者已经达到了之前预设的迭代次数为止 。
4. SGD随机梯度下降
4.1 SGD含义
在之前的文稿中也提到了SGD随机梯度下降算法 , 这个算法一般用来不断调整参数来减小函数或者结果的损失及误差的 。 也就是给定一个损失函数 , 然后通过梯度下降的算法来使这个损失函数最小化 。 所谓的梯度下降的理解就是 , 首先对于每个函数图像曲面上都有各个方向上的导数 , 也就是函数在各个方向上的斜率 。 而曲面上各个方向导数中 , 最大导数值的方向也就代表了梯度的方向 。 因此梯度下降就是沿着梯度的反方向来进行权重的更新 , 从而有效的找到了全局的最优解 。
4.2 小的理解案例?
这里提一个容易让别人理解SGD随机梯度下降的例子 , 就是将你放到一座山的任何一个地方 , 让你通过某一方法最快到达山顶或者山底 。 其实这个方法就可以利用SGD随机梯度下降方法 。 先找到各个方向的导数 , 也就是斜率 , 然后找到斜率或者导数最大的那个方向也就是梯度 , 沿着梯度方向走一步然后再计算梯度方向 , 依次类推不断行进 。 通过梯度下降方法可以让自己每一步都是处于当前位置趋势最大的方向 , 从而最快的下降到山底或者上升到山顶 。 通过这个原理也就可以以最快的速度来降低损失函数值或者误差 。


推荐阅读