摘要: 在使用LR时,经常用Sigmod函数来表示一个概率,为什么LR可以使用Sigmod函数呢? 首先,LR的假设只有一个,就是两个类别的特征服从均值不等、方差相等的高斯分布。为什么假设它服从高斯分布?一方面,高斯分布容易理解;另一方面,从信息论的角度看,当均值和方差已知时,高斯分布是熵最大的分布。当熵分 阅读全文
posted @ 2019-09-28 08:23 KamShing 阅读(368) 评论(0) 推荐(0) 编辑
摘要: 很多时候,相似度可以理解为两样物体的距离,相似度计算在数据挖掘和推荐系统中有着广泛的应用场景。例如: CF协同过滤算法中,可以利用相似度计算用户之间(User-Based)或者物品之间(Item-Based)的相似度; 在利用k-means进行聚类时,判断个体所属类别,可以使用相似度计算公式计算个体 阅读全文
posted @ 2019-09-28 07:41 KamShing 阅读(1096) 评论(0) 推荐(0) 编辑
摘要: 一、原理 K最近邻算法(K-Nearest Neighbor, KNN)是最基本的分类算法,其基本原理是:从最近的K个邻居(样本)中,选择出现次数最多的类别作为判定类别。K最近邻算法可以理解为是一个分类算法,常用于标签的预测,如性别。 实现KNN算法核心的一般思路: K值的选择是选择统计的样本数量, 阅读全文
posted @ 2019-09-27 09:19 KamShing 阅读(1894) 评论(0) 推荐(0) 编辑
摘要: 一、原理 数据离散化(也称,数据分组),指将连续的数据进行分组,使其变为一段离散化的区间。 根据离散化过程中是否考虑类别属性,可以将离散化算法分为:有监督算法和无监督算法。事实证明,由于有监督算法充分利用了类别属性的信息,所以再分类中能获得较高的正确率。 常用的数据离散化方法: 等宽分组 等频分组 阅读全文
posted @ 2019-09-27 08:31 KamShing 阅读(4738) 评论(2) 推荐(0) 编辑
摘要: 一、原理 数据标准化(Normalization):将数据按照一定比例进行缩放,使其落入到一个特定的小区间。 数据标准化的类别: Min-Max标准化 Z-Score标准化(Standard Score,标准分数) 小数定标(Decimal scaling)标准化 均值归一化 向量归一化 指数转换 阅读全文
posted @ 2019-09-27 07:58 KamShing 阅读(4886) 评论(0) 推荐(0) 编辑
摘要: 在众多召回策略里面,基于Item与基于User(可参考:https://www.cnblogs.com/SysoCjs/p/11466424.html)在实现上非常相似。所以这里使用了跟基于User协同过滤的数据u.data。 实现原理: 区别于User,先根据User已经购买过,或者评价过的Ite 阅读全文
posted @ 2019-09-05 16:16 KamShing 阅读(2154) 评论(0) 推荐(0) 编辑
摘要: 在Spark1.2之后,Spark自带实现TF-IDF接口,只要直接调用就可以,但实际上,Spark自带的词典大小设置较于古板,如果设置小了,则导致无法计算,如果设置大了,Driver端回收数据的时候,容易发生OOM,所以更多时候都是自己根据实际情况手动实现TF-IDF。不过,在本篇文章中,两种方式 阅读全文
posted @ 2019-09-05 16:10 KamShing 阅读(2508) 评论(0) 推荐(0) 编辑
摘要: 项目地址:https://github.com/ChanKamShing/UserCF_Spark.git 推荐系统的作业流程: 召回/match(推荐引擎)-> 物品候选集 -> 过滤 -> 排序 -> 策略(保证结果多样性) -> 推荐list 协同过滤CF属于第一阶段,我们常常称之为“推荐引擎 阅读全文
posted @ 2019-09-05 15:45 KamShing 阅读(686) 评论(6) 推荐(0) 编辑
摘要: 项目地址:https://github.com/ChanKamShing/UserCF_python.git 推荐系统的作业流程: 召回/match(推荐引擎)-> 物品候选集 -> 过滤 -> 排序 -> 策略(保证结果多样性) -> 推荐list 协同过滤CF属于第一阶段,我们常常称之为“推荐引 阅读全文
posted @ 2019-09-05 15:35 KamShing 阅读(906) 评论(0) 推荐(0) 编辑
摘要: Spark数据的写入过程的入口点位doPutIterator方法。下面是一些方法的调用关系图: 在该方法中,根据数据是否缓存到内存中处理。如果不缓存到内存中,则调用BlockManager的putIterator方法直接存储到磁盘中;如果缓存到内存中,则先判断数据存储级别是否对数据进行了反序列化操作 阅读全文
posted @ 2019-09-05 15:25 KamShing 阅读(1483) 评论(0) 推荐(0) 编辑