1. 浜ゆ浛鏈灏忎簩涔樻硶(Alternating Least Squares, ALS)
鎵鏈変互鐗╁搧涓轰腑蹇冪殑妯″瀷鍦ㄥ勭悊闅愬紡鏁版嵁鏃舵湁涓鍏卞悓鐨勫姡鍔 -- 浠栦滑閮戒笉鎻愪緵鍖哄垎鐢ㄦ埛鍋忓ソ涓庡亸濂界殑缃淇″害鐨勮兘鍔涖
娼滃湪鍥犵礌妯″瀷 锛屽張绉 闅愯涔夋ā鍨 锛屾槸鍗忓悓杩囨护绯荤粺涓鐨勫彟涓绉嶅疄鐜版柟妗堬紝鍏舵暣浣撶洰鏍囨槸鍙戞帢宸叉湁璇勫垎鏁版嵁涓鐨勯殣钘忓洜瀛愩傞氳繃瀵 user-item 璇勫垎鐭╅樀杩涜 濂囧紓鍊煎垎瑙(Singular Value Decomposition, SVD) 鎺ㄦ柇鍑烘ā鍨嬨
閫氬父涓涓闅愯涔夋ā鍨嬩负姣忎釜鐢ㄦ埛 瀹氫箟涓涓鐢ㄦ埛鍥犲瓙鍚戦噺 , 涓烘瘡涓涓鐗╁搧 瀹氫箟鐗╁搧鍥犲瓙鍚戦噺 銆傞氳繃璁$畻涓や釜鍚戦噺鐨勫唴绉寰楀埌棰勬祴缁撴灉锛屽 銆
浼樺寲鐩鏍囨槸鏈灏忓寲浠d环鍑芥暟锛屽嵆:
鍏朵腑 鐢ㄤ綔妯″瀷姝e垯鍖栥
甯冨皵鍨嬪彉閲忥紝琛ㄧず鐢ㄦ埛 瀵圭墿鑵旀嫤鍝 鐨勬劅鎯呭亸濂姐傚畾涔夊備笅:
濡傛灉鐢ㄦ埛 娑堣垂杩囨煇鐗╁搧 锛屽嵆 锛岃繖鏆楃ず鐢ㄦ埛 鍠滅埍鐗╁搧 锛涘彟涓鏂归潰锛屽傛灉鐢ㄦ埛 浠庢湭娑堣垂杩囩墿鍝 锛屾垜浠璁や负宸鍦嗚抗鐢ㄦ埛 瀵硅ョ墿鍝 娌℃湁鍋忓ソ銆
缃淇″害鐢ㄤ簬琛¢噺瀵瑰亸濂藉 鐨勪俊蹇冦傚畾涔夊備笅:
鎴戜滑鐨勭洰鏍囨槸鍙戠幇姣忎竴涓鐢ㄦ埛 鐨勫悜閲 鍜屾瘡涓涓鐗╁搧 鐨勫悜閲 銆傚垎鍒绉颁负鐢ㄦ埛鍥犲瓙 user-factor 鍜 鐗╁搧鍥犲瓙 item-factor 銆
闅忔満鍒濆嬪寲 锛屽埄鐢ㄥ叕寮 鏇存柊寰楀埌 锛岀劧鍚庡埄鐢ㄥ叕寮 鏇存柊 锛岀洿鍒拌宸鍊煎彉鍖栧緢灏忔垨鑰呰揪鍒版渶澶ц凯浠f℃暟銆
閫氳繃杩浠g殑鏂瑰紡浜ゆ浛璁$畻涓や釜 鍏寮 锛屾渶缁堝緱鍒颁竴涓瀛樺偍鐢ㄦ埛鍥犲瓙鐨勭煩闃 鍜 瀛樺偍鐗╁搧鍥犲瓙鐨勭煩闃 锛岃繘鑰岀敤浜庣浉浼兼у彂鐜板拰鎺ㄨ崘缁撴灉鐢熸垚銆
閫氳繃璁$畻鐗╁搧鍥犲瓙鐭╅樀涓庣墿鍝佸洜瀛愮煩闃佃浆缃鐨勭偣绉锛屽緱鍒扮墿鍝侀棿鐨勭浉浼兼у緱鍒:
閫氳繃璁$畻鐢ㄦ埛鍥犲瓙鐭╄櫄骞堕樀涓庣墿鍝佸洜瀛愮煩闃佃浆缃鐨勭偣绉锛屽緱鍒颁负鏌愪釜鐢ㄦ埛鎺ㄨ崘鍚勭墿鍝佺殑寰楀垎:
2. 基于用户协同过滤(User-CF)的推荐算法
1. 数学必备知识(向量)
2. 构建矩阵模型
3. User-CF的思想和计算
在一个个性化推荐系统中,当一个用户A需要个性化推荐时,可以先找和他有相似兴趣的其他用户,然后把那些用户喜欢的、而用户A没有听说过的物品推荐给A。这种方法成为基于用户的协同过滤算法(User-CF)
根据问题域中构建出来的用户-行为评分矩阵(图1-1),我们可以构建出用户的向量.首先,把每一个用户用一个向量表示,每个向量里有6个数字,分别代表该用户对6本书喜爱程度的评分.0代表用户没看过这本书.图示:
接下来,计算俩个用户的相似性,这里使用的指标叫作余弦相似度,计算公式如下:
其中,分子部分a·b表示两个向量的点积,计算方法就是两个向量对应元素先相乘再求和,比如:
用户a=[4 3 0 0 5 0]和用户b=[5 0 4 0 4 0]
a·b=4x5+3x0+0x4+0x0+5x4+0x0=40
分母部分的 代表向量a的模长, 就是a,b两个向量模长的乘积.向量模长的计算方法就是把向量
中的每个元素平方后再求和最后再开根号.
于是,第一个用户和第二个用户的相似度就可以进行如下计算:
余弦相似度的值在[0,1]闭区间内,值越大说明越相似,值越小说明越不相似.根据上面的计算公式,分别计算小白和其他5个同事的相似度,然后根据从大到小的顺序排列.可以看到小白和前俩个同事相似度高而和最后一个同事完全不相似.
比如,和小白最相似的两个同事的阅读列表编号有1,3,4,5共4本书.其中1,5这两本书小白已经看过,3,4这两本书哪本可能更适合小白的口味呢?
可以计算这两个同事对这两本书的加权评分并作为小白的可能评分,权重就是他们之间的相似度,具体计算如
下图.通过计算可以看出编号为3的书可能更适合小白的口味.
计算步骤:
1. 先确定第一个同事拥有的阅读列表的图书编号为1,3,5
2. 再确定第二个同事拥有的阅读列表的图书编号为1,3,4,5
3. 小白自己已经拥有的阅读的图书列表是1,2,5[这也是打叉的意义,自己已经有的,不需要再推荐给自己了]
4. 最后剩余的只有编号为3和编号为4的两本书了
5. 计算公式说明,0.75和0.63代表权重,也就是相似值.4,3,5代表的是该用户对这本书的评分.
1. 性能:适用于用户较少的场合,如果用户过多,计算用户相似度矩阵的代价较大
2. 领域:实效性要求高,用户个性化兴趣要求不高
3. 实时性:用户有新行为,不一定需要推荐结果立即变化
4. 冷启动:在新用户对少的物品产生行为后,不能立即对他进行个性化推荐,因为用户相似度是离线计算的
新物品上线后一段时间,一旦有用户对物品产生行为,就可以将新物品推荐给其他用户
3. 常用的机器学习&数据挖掘知识(点)
常用的机器学习&数据挖掘知识(点)
Basis(基础):MSE(Mean Square Error 均方误差),
LMS(LeastMean Square 最小均方),
LSM(Least Square Methods 最小二乘法),
MLE(MaximumLikelihood Estimation最大似然估计),
QP(Quadratic Programming 二次规划),
CP(Conditional Probability条件概率),
JP(Joint Probability 联合概率),
MP(Marginal Probability边缘概率),
Bayesian Formula(贝叶斯公式),
L1 /L2Regularization(L1/L2正则,
以及更多的,现在比较火的L2.5正则等),
GD(GradientDescent 梯度下降),
SGD(Stochastic Gradient Descent 随机梯度下降),
Eigenvalue(特征值),
Eigenvector(特征向量),
QR-decomposition(QR分解),
Quantile (分位数),
Covariance(协方差矩阵)。
Common Distribution(常见分布):
Discrete Distribution(离散型分布):
BernoulliDistribution/Binomial(贝努利分布/二项分布),
Negative BinomialDistribution(负二项分布),
MultinomialDistribution(多项式分布),
Geometric Distribution(几何分布),
HypergeometricDistribution(超几何分布),
Poisson Distribution (泊松分布)。
Continuous Distribution (连续型分布):
UniformDistribution(均匀分布),
Normal Distribution /Guassian Distribution(正态分布/高斯分布),
ExponentialDistribution(指数分布),
Lognormal Distribution(对数正态分布),
GammaDistribution(Gamma分布),
Beta Distribution(Beta分布),
Dirichlet Distribution(狄利克雷分布),
Rayleigh Distribution(瑞利分布),
Cauchy Distribution(柯西分布),
Weibull Distribution (韦伯分布)。
Three Sampling Distribution(三大抽样分布):
Chi-squarEdistribution(卡方分布),
t-distribution(t-distribution),
F-distribution(F-分布)。
Data Pre-processing(数据预处理):
Missing Value Imputation(缺失值填充),
Discretization(离散化),Mapping(映射),
Normalization(归一化/标准化)。
Sampling(采样):
Simple Random Sampling(简单随机采样),
OfflineSampling(离线等可能K采样),
Online Sampling(在线等可能K采样),
Ratio-based Sampling(等比例随机采样),
Acceptance-RejectionSampling(接受-拒绝采样),
Importance Sampling(重要性采样),
MCMC(MarkovChain Monte Carlo 马尔科夫蒙特卡罗采样算法:Metropolis-Hasting& Gibbs)。
Clustering(聚类):
K-Means,
K-Mediods,
二分K-Means,
FK-Means,
Canopy,
Spectral-KMeans(谱聚类),
GMM-EM(混合高斯模型-期望最大化算法解决),
K-Pototypes,CLARANS(基于划分),
BIRCH(基于层次),
CURE(基于层次),
DBSCAN(基于密度),
CLIQUE(基于密度和基于网格)。
Classification&Regression(分类&回归):
LR(Linear Regression 线性回归),
LR(LogisticRegression逻辑回归),
SR(Softmax Regression 多分类逻辑回归),
GLM(GeneralizedLinear Model 广义线性模型),
RR(Ridge Regression 岭回归/L2正则最小二乘回归),
LASSO(Least Absolute Shrinkage andSelectionator Operator L1正则最小二乘回归),
RF(随机森林),
DT(DecisionTree决策树),
GBDT(Gradient BoostingDecision Tree 梯度下降决策树),
CART(ClassificationAnd Regression Tree 分类回归树),
KNN(K-Nearest Neighbor K近邻),
SVM(Support VectorMachine),
KF(KernelFunction 核函数PolynomialKernel Function 多项式核函、
Guassian KernelFunction 高斯核函数/Radial BasisFunction RBF径向基函数、
String KernelFunction 字符串核函数)、
NB(Naive Bayes 朴素贝叶斯),BN(Bayesian Network/Bayesian Belief Network/ Belief Network 贝叶斯网络/贝叶斯信度网络/信念网络),
LDA(Linear Discriminant Analysis/FisherLinear Discriminant 线性判别分析/Fisher线性判别),
EL(Ensemble Learning集成学习Boosting,Bagging,Stacking),
AdaBoost(Adaptive Boosting 自适应增强),
MEM(MaximumEntropy Model最大熵模型)。
Effectiveness Evaluation(分类效果评估):
Confusion Matrix(混淆矩阵),
Precision(精确度),Recall(召回率),
Accuracy(准确率),F-score(F得分),
ROC Curve(ROC曲线),AUC(AUC面积),
LiftCurve(Lift曲线) ,KS Curve(KS曲线)。
PGM(Probabilistic Graphical Models概率图模型):
BN(Bayesian Network/Bayesian Belief Network/ BeliefNetwork 贝叶斯网络/贝叶斯信度网络/信念网络),
MC(Markov Chain 马尔科夫链),
HMM(HiddenMarkov Model 马尔科夫模型),
MEMM(Maximum Entropy Markov Model 最大熵马尔科夫模型),
CRF(ConditionalRandom Field 条件随机场),
MRF(MarkovRandom Field 马尔科夫随机场)。
NN(Neural Network神经网络):
ANN(Artificial Neural Network 人工神经网络),
BP(Error BackPropagation 误差反向传播)。
Deep Learning(深度学习):
Auto-encoder(自动编码器),
SAE(Stacked Auto-encoders堆叠自动编码器,
Sparse Auto-encoders稀疏自动编码器、
Denoising Auto-encoders去噪自动编码器、
Contractive Auto-encoders 收缩自动编码器),
RBM(RestrictedBoltzmann Machine 受限玻尔兹曼机),
DBN(Deep Belief Network 深度信念网络),
CNN(ConvolutionalNeural Network 卷积神经网络),
Word2Vec(词向量学习模型)。
DimensionalityRection(降维):
LDA LinearDiscriminant Analysis/Fisher Linear Discriminant 线性判别分析/Fisher线性判别,
PCA(Principal Component Analysis 主成分分析),
ICA(IndependentComponent Analysis 独立成分分析),
SVD(Singular Value Decomposition 奇异值分解),
FA(FactorAnalysis 因子分析法)。
Text Mining(文本挖掘):
VSM(Vector Space Model向量空间模型),
Word2Vec(词向量学习模型),
TF(Term Frequency词频),
TF-IDF(Term Frequency-Inverse DocumentFrequency 词频-逆向文档频率),
MI(MutualInformation 互信息),
ECE(Expected Cross Entropy 期望交叉熵),
QEMI(二次信息熵),
IG(InformationGain 信息增益),
IGR(Information Gain Ratio 信息增益率),
Gini(基尼系数),
x2 Statistic(x2统计量),
TEW(TextEvidence Weight文本证据权),
OR(Odds Ratio 优势率),
N-Gram Model,
LSA(Latent Semantic Analysis 潜在语义分析),
PLSA(ProbabilisticLatent Semantic Analysis 基于概率的潜在语义分析),
LDA(Latent DirichletAllocation 潜在狄利克雷模型)。
Association Mining(关联挖掘):
Apriori,
FP-growth(Frequency Pattern Tree Growth 频繁模式树生长算法),
AprioriAll,
Spade。
Recommendation Engine(推荐引擎):
DBR(Demographic-based Recommendation 基于人口统计学的推荐),
CBR(Context-basedRecommendation 基于内容的推荐),
CF(Collaborative Filtering协同过滤),
UCF(User-basedCollaborative Filtering Recommendation 基于用户的协同过滤推荐),
ICF(Item-basedCollaborative Filtering Recommendation 基于项目的协同过滤推荐)。
Similarity Measure&Distance Measure(相似性与距离度量):
Euclidean Distance(欧式距离),
ManhattanDistance(曼哈顿距离),
Chebyshev Distance(切比雪夫距离),
MinkowskiDistance(闵可夫斯基距离),
Standardized Euclidean Distance(标准化欧氏距离),
MahalanobisDistance(马氏距离),
Cos(Cosine 余弦),
HammingDistance/Edit Distance(汉明距离/编辑距离),
JaccardDistance(杰卡德距离),
Correlation Coefficient Distance(相关系数距离),
InformationEntropy(信息熵),
KL(Kullback-Leibler Divergence KL散度/Relative Entropy 相对熵)。
Optimization(最优化):
Non-constrainedOptimization(无约束优化):
Cyclic VariableMethods(变量轮换法),
Pattern Search Methods(模式搜索法),
VariableSimplex Methods(可变单纯形法),
Gradient Descent Methods(梯度下降法),
Newton Methods(牛顿法),
Quasi-NewtonMethods(拟牛顿法),
Conjugate Gradient Methods(共轭梯度法)。
ConstrainedOptimization(有约束优化):
Approximation Programming Methods(近似规划法),
FeasibleDirection Methods(可行方向法),
Penalty Function Methods(罚函数法),
Multiplier Methods(乘子法)。
Heuristic Algorithm(启发式算法),
SA(SimulatedAnnealing,
模拟退火算法),
GA(genetic algorithm遗传算法)。
Feature Selection(特征选择算法):
Mutual Information(互信息),
DocumentFrequence(文档频率),
Information Gain(信息增益),
Chi-squared Test(卡方检验),
Gini(基尼系数)。
Outlier Detection(异常点检测算法):
Statistic-based(基于统计),
Distance-based(基于距离),
Density-based(基于密度),
Clustering-based(基于聚类)。
Learning to Rank(基于学习的排序):
Pointwise:McRank;
Pairwise:RankingSVM,RankNet,Frank,RankBoost;
Listwise:AdaRank,SoftRank,LamdaMART。
Tool(工具):
MPI,Hadoop生态圈,Spark,BSP,Weka,Mahout,Scikit-learn,PyBrain…
以及一些具体的业务场景与case等。
4. 协同过滤与分类
[TOC]
本文是《写给程序员的数据挖掘实践指南》的一周性笔记总结。主要涵盖了以下内容:
所谓推荐系统就是系统根据你的行为操作为你推荐你可能想要的其他物品。这在电商平台、音乐平台、资讯推送平台等多有见到。而协同过滤简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人通过合作的机制给予信息相当程度的回应(如评分)并记录下来以达到过滤的目的进而帮助别人筛选信息。其推荐基础是用户评分。这里可以分为两种用户评分,即显式评分与隐式评分。显式评分即日常见到的为物品打分,如对喜好音乐评级等;隐式评分是通过对用户行为的持续性观察,进而发现用户偏好的一种方法,如新闻网页中的推送你经常阅读过的相关内容等。两种评分方法都有自己的问题。
总体来说,协同过滤其运作机制也可以分为两种:
基于用户的推荐是指通过用户的行为偏好,划分相似用户。在相似用户群体之间互相推送一方喜欢而另一方未有过的物品。核心在于相似用户群体的划分。这种推荐方法有自己的局限:
基于用户的过滤其核心是用户群体的划分,其实也就是分类。
这里的距离函数包括三种:曼哈顿距离和欧氏距离。这里以二维举例,更多维情况下类推即可。
两距离函数可以一般化为:
其中,当r=1时,函数为曼哈顿距离;当r=2时,函数为欧氏距离。
算法实现:
在算出距离函数后,通过比对目标用户与所有用户群体的偏好,找到最近邻的用户并给予推荐。
基于用户距离的推荐有一个明显的问题,就是用户评分体系的差异。比如评分极端的用户给喜欢的评最高分,给不喜欢的评最低分;而有些用户倾向于不出现极端评分。即所谓“分数贬值”( Grade Inflation )问题。这种问题的存在可能让基于距离的评分产生偏差。皮尔逊相关系数可以缓解这种问题。
原皮尔逊相关系数公式在实际运用的时候会出现多次迭代的问题,影响计算效率,这里给出了近似公式:
皮尔逊相关系数的用户判断依据不是单纯的用户距离,而是用户的评分一致性:取值在[-1, 1]之间,越接近1则表示两用户的评分一致性越好;反之则反。
python实现:
基于用户推荐的过程中,另一个存在的问题就是由于大部分人的喜爱物品集合的交集过少,存在大量计算值为0的feature的情况。即所谓 稀疏性 问题。一个较容易理解的例子是对书本内容的挖掘。余弦相似度会忽略这种0-0匹配。
余弦相似度:
python实现:
如此多的评估系数,如何进行抉择呢?根据数据特征:
另外值得考虑的一点是,目前为止的推荐都是基于单用户的。即对一个用户的推荐系统只是基于另一个用户。这会存在一些问题。比如虽然虽然两者相似度很高,但是另外一个人有一些怪癖,怪癖的推荐就是不合理的;又比如,在相似度极高的情况下,你不能确定统一账户下的操作是同一个人做出的或者说操作行为是为了用户自身。比如用户考虑购买某件商品作为礼物送给别人,这就是基于别人喜好的购买行为,这种推荐也是不合适的。
对这种问题的解决可以使用群体划分的方法。原理与单用户类似,但是用户的匹配是k个。在这k位最优匹配的用户之间,以相似度的大小为依据设定权重作为物品推荐的条件。此即协同过滤的k近邻。
正如前面提到的基于用户的推荐有复杂度、稀疏性的问题,而基于物品的过滤则可以缓解这些问题。所谓基于物品的过滤是指,我们事先找到最相似的物品,并结合用户对物品的评级结果来生成推荐。前提是要对物品进行相似度匹配,找到一种算法。
这里的调整是指为了减轻用户评分体系的不一致情况(抵消分数贬值),从每个评级结果中减去该用户所有物品的平均分的评级结果。
其中,U表示所有同时对i, j进行评级过的用户的集合。 表示用户u给物品i的评分减去用户u对所有物品的评分的平均值。
在得到所有物品的余弦相似度后,我们就可以通过该指数预测用户对某件物品的偏好程度。方法就是所有相似物品的相似度乘以得分的总和。
其中p(u, i)指的是用户u对物品i评分的预测值。N是用户u的所有评级物品中每个和i得分相似的物品。这里的相似指的是矩阵中存在N和i的一个相似度得分。 是i和N之间的相似度得分。 是u给N的评级结果。公式较好运行的条件是 取值在(-1, 1)之间,这里就要使用归一化概念。
另一种常用的基于物品过滤的算法就是 slope one 算法。它的大概原理是预测用户u对产品j的评分时,预先计算包含所有物品的两物品偏差表;根据u的已评价的所有物品评分与该物品和产品j的偏差( )之和并乘以所有对此两类物品有过评分的用户个数,一一加总,除以所有同时对产品i与u评价过的所有物品有过评分的用户的人数,得到得分。公式如下:
其中, ; 是利用加权s1算法给出的用户u对物品j的预测值。 指的是对所有除j之外u打过分的物品。
python实现:
在前面两节中,基于物品和基于用户的过滤其前提都是用户需要对已有的item进行评分。而实际上,如果一个新的item出现,由于缺乏别人的偏好,他永远不会被推荐。这就是推荐系统中所谓的—— 冷启动 问题。基于用户评价的系统就会出现这种问题。
冷启动 问题的解决方案之一就是 基于物品属性的过滤 来进行推荐:对物品自身的属性进行归纳总结,并以此进行物品推荐。基于物品属性的过滤存在一个问题同样是量纲的不统一。如果量纲不统一极端值将会对推荐系统造成大麻烦。解决方法也很简单:归一化。此章使用的是z-评分。
使用z得分也存在问题,就是极易受到离群值的影响。这里可以使用 改进的标准分数 来缓解这个问题:
什么时候可以进行归一化呢?
这里用曼哈顿距离举例基于物品属性的过滤:
在上一章最后一节对于用户是否喜欢某件item的判别中,实际上包含了分类器的思想:分类器就是利用对象属性判定对象属于哪个组或类别的程序。这里简单用另一个小项目来说明。
简单来说就是根据运动员的某些指标来判断这位运动员属于什么类别的运动员。
准确率有0.8。
5. 07_推荐系统算法详解
基于人口统计学的推荐与用户画像、基于内容的推荐、基于协同过滤的推荐。
1、基于人口统计学的推荐机制( Demographic-based Recommendation)是一种最易于实现的推荐方法,它只是简单的根据系统用户的基本信息发现用户的相关程度,然后将相似用户喜爱的其他物品推荐给当前用户。
2、对于没有明确含义的用户信息(比如登录时间、地域等上下文信息),可以通过聚类等手段,给用户打上分类标签。
3、对于特定标签的用户,又可以根据预设的规则(知识)或者模型,推荐出对应的物品。
4、用户信息标签化的过程一般又称为 用户画像 ( User Profiling)。
(1)用户画像( User Profile)就是企业通过收集与分析消费者社会属性、生活习惯、消费行为等主要信息的数据之后,完美地抽象出一个用户的商业全貌作是企业应用大数据技术的基本方式。
(2)用户画像为企业提供了足够的信息基础,能够帮助企业快速找到精准用户群体以及用户需求等更为广泛的反馈信息。
(3)作为大数据的根基,它完美地抽象出一个用户的信息全貌,为进一步精准、快速地分析用户行为习惯、消费习惯等重要信息,提供了足够的数据基础。
1、 Content- based Recommendations(CB)根据推荐物品或内容的元数据,发现物品的相关性,再基于用户过去的喜好记录,为用户推荐相似的物品。
2、通过抽取物品内在或者外在的特征值,实现相似度计算。比如一个电影,有导演、演员、用户标签UGC、用户评论、时长、风格等等,都可以算是特征。
3、将用户(user)个人信息的特征(基于喜好记录或是预设兴趣标签),和物品(item)的特征相匹配,就能得到用户对物品感兴趣的程度。在一些电影、音乐、图书的社交网站有很成功的应用,有些网站还请专业的人员对物品进行基因编码/打标签(PGC)。
4、 相似度计算:
5、对于物品的特征提取——打标签(tag)
- 专家标签(PGC)
- 用户自定义标签(UGC)
- 降维分析数据,提取隐语义标签(LFM)
对于文本信息的特征提取——关键词
- 分词、语义处理和情感分析(NLP)
- 潜在语义分析(LSA)
6、 基于内容推荐系统的高层次结构
7、 特征工程
(1)特征( feature):数据中抽取出来的对结果预测有用的信息。
特征的个数就是数据的观测维度。
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。
特征工程一般包括特征清洗(采样、清洗异常样本),特征处理和特征选择。
特征按照不同的数据类型分类,有不同的特征处理方法:数值型、类别型、时间型、统计型。
(2)数值型特征处理
用连续数值表示当前维度特征,通常会对数值型特征进行数学上的处理,主要的做法是归一化和离散化。
* 幅度调整归一化:
特征与特征之间应该是平等的,区别应该体现在 特征内部 。
例如房屋价格和住房面积的幅度是不同的,房屋价格可能在3000000~15000000(万)之间,而住房面积在40-300(平方米)之间,那么明明是平等的两个特征,输入到相同的模型中后由于本身的幅值不同导致产生的效果不同,这是不合理的
* 数值型特征处理——离散化
离散化的两种方式:等步长——简单但不一定有效;等频——min -> 25% -> 75% -> max
两种方法对比:
等频的离散化方法很精准,但需要每次都对数据分布进行一遍从新计算,因为昨天用户在淘宝上买东西的价格分布和今天不一定相同,因此昨天做等频的切分点可能并不适用,而线上最需要避免的就是不固定,需要现场计算,所以昨天训练出的模型今天不一定能使用。
等频不固定,但很精准,等步长是固定的,非常简单,因此两者在工业上都有应用。
(3) 类别型特征处理
类别型数据本身没有大小关系,需要将它们编码为数字,但它们之间不能有预先设定的大小关系,因此既要做到公平,又要区分开它们,那么直接开辟多个空间。
One-Hot编码/哑变量:One-Hot编码/哑变量所做的就是将类别型数据平行地展开,也就是说,经过One-Hot编码哑变量后,这个特征的空间会膨胀。
(4) 时间型特征处理
时间型特征既可以做连续值,又可以看做离散值。
连续值:持续时间(网页浏览时长);间隔时间(上一次购买/点击离现在的时间间隔)。
离散值:一天中哪个时间段;一周中的星期几;一年中哪个月/星期;工作日/周末。
(5) 统计型特征处理
加减平均:商品价格高于平均价格多少,用户在某个品类下消费超过多少。
分位线:商品属于售出商品价格的分位线处。
次序性:商品处于热门商品第几位。
比例类:电商中商品的好/中/差评比例。
8、 推荐系统常见反馈数据 :
9、 基于UGC的推荐
用户用标签来描述对物品的看法,所以用户生成标签(UGC)是联系用户和物品的纽带,也是反应用户兴趣的重要数据源。
一个用户标签行为的数据集一般由一个三元组(用户,物品,标签)的集合表示,其中一条记录(u,i,b)表示用户u给物品打上了标签b。
一个最简单的算法:
- 统计每个用户最常用的标签
- 对于每个标签,统计被打过这个标签次数最多的物品
- 对于一个用户,首先找到他常用的标签,然后找到具有这些标签的最热门的物品,推荐给他
- 所以用户u对物品i的兴趣公式为 ,其中 使用户u打过标签b的次数, 是物品i被打过标签b的次数。
简单算法中直接将用户打出标签的次数和物品得到的标签次数相乘,可以简单地表现出用户对物品某个特征的兴趣。
这种方法倾向于给热门标签(谁都会给的标签,如“大片”、“搞笑”等)、热门物品(打标签人数最多)比较大的权重,如果一个热门物品同时对应着热门标签,那它就会“霸榜”,推荐的个性化、新颖度就会降低。
类似的问题,出现在新闻内容的关键字提取中。比如以下新闻中,哪个关键字应该获得更高的权重?
10、 TF-IDF:词频逆文档频率 ( Term Frequency- -Inverse Document Frequency,TF-DF)是一种用于资讯检索与文本挖掘的常用加权技术。
TFDF是一种统计方法,用以评估一个字词对于一个文件集或一个语料库中的其中份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
TFIDF=TF IDF
TF-IDF的主要思想是 :如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
TF-DF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。
词频( Term Frequency,TF) :指的是某一个给定的词语在该文件中出现的频率。这个数字是对词数的归一化,以防止偏向更长的文件。(同一个词语在长文件里可能会比短文件有更高的词数,而不管该词语重要与否。) ,其中 表示词语 i 在文档 j 中出现的频率, 表示 i 在 j 中出现的次数, 表示文档 j 的总词数。
逆向文件频率( Inverse Document Frequency,IDF) :是一个词语普遍重要性的度量,某一特定词语的IDF,可以由总文档数目除以包含该词语之文档的数目,再将得到的商取对数得到 ,其中 表示词语 i 在文档集中的逆文档频率,N表示文档集中的文档总数, 表示文档集中包含了词语 i 的文档数。
(11) TF-IDF对基于UGC推荐的改进 : ,为了避免热门标签和热门物品获得更多的权重,我们需要对“热门进行惩罚。
借鉴TF-IDF的思想,以一个物品的所有标签作为“文档”,标签作为“词语”,从而计算标签的“词频”(在物品所有标签中的频率)和“逆文档频率”(在其它物品标签中普遍出现的频率)。
由于“物品i的所有标签” 应该对标签权重没有影响,而 “所有标签总数” N 对于所有标签是一定的,所以这两项可以略去。在简单算法的基础上,直接加入对热门标签和热门物品的惩罚项: ,其中, 记录了标签 b 被多少个不同的用户使用过, 记录了物品 i 被多少个不同的用户打过标签。
(一)协同过滤(Collaborative Filtering, CF)
1、基于协同过滤(CF)的推荐:基于内容( Content based,CB)主要利用的是用户评价过的物品的内容特征,而CF方法还可以利用其他用户评分过的物品内容。
CF可以解决CB的一些局限:
- 物品内容不完全或者难以获得时,依然可以通过其他用户的反馈给出推荐。
- CF基于用户之间对物品的评价质量,避免了CB仅依赖内容可能造成的对物品质量判断的干。
- CF推荐不受内容限制,只要其他类似用户给出了对不同物品的兴趣,CF就可以给用户推荐出内容差异很大的物品(但有某种内在联系)
分为两类:基于近邻和基于模型。
2、基于近邻的推荐系统:根据的是相同“口碑”准则。是否应该给Cary推荐《泰坦尼克号》?
(二)基于近邻的协同过滤
1、 基于用户(User-CF): 基于用户的协同过滤推荐的基本原理是,根据所有用户对物品的偏好,发现与当前用户口味和偏好相似的“邻居”用户群,并推荐近邻所偏好的物品。
在一般的应用中是采用计算“K-近邻”的算法;基于这K个邻居的历史偏好信息,为当前用户进行推荐。
User-CF和基于人口统计学的推荐机制:
- 两者都是计算用户的相似度,并基于相似的“邻居”用户群计算推荐。
- 它们所不同的是如何计算用户的相似度:基于人口统计学的机制只考虑用户本身的特征,而基于用户的协同过滤机制可是在用户的历史偏好的数据上计算用户的相似度,它的基本假设是,喜欢类似物品的用户可能有相同或者相似的口味和偏好。
2、基于物品(Item-CF):基于项目的协同过滤推荐的基本原理与基于用户的类似,只是使用所有用户对物品的偏好,发现物品和物品之间的相似度,然后根据用户的历史偏好信息,将类似的物品推荐给用户。
Item-CF和基于内容(CB)的推荐
- 其实都是基于物品相似度预测推荐,只是相似度计算的方法不一样,前者是从用户历史的偏好推断,而后者是基于物品本身的属性特征信息。
同样是协同过滤,在基于用户和基于项目两个策略中应该如何选择呢?
- 电商、电影、音乐网站,用户数量远大于物品数量。
- 新闻网站,物品(新闻文本)数量可能大于用户数量。
3、 User-CF和Item-CF的比较
同样是协同过滤,在User-CF和ltem-CF两个策略中应该如何选择呢?
Item-CF应用场景
- 基于物品的协同过滤( Item-CF ) 推荐机制是 Amazon在基于用户的机制上改良的一种策略因为在大部分的Web站点中,物品的个数是远远小于用户的数量的,而且物品的个数和相似度相对比较稳定,同时基于物品的机制比基于用户的实时性更好一些,所以 Item-CF 成为了目前推荐策略的主流。
User-CF应用场景
- 设想一下在一些新闻推荐系统中,也许物品一一也就是新闻的个数可能大于用户的个数,而且新闻的更新程度也有很快,所以它的相似度依然不稳定,这时用 User-cf可能效果更好。
所以,推荐策略的选择其实和具体的应用场景有很大的关系。
4、 基于协同过滤的推荐优缺点
(1)基于协同过滤的推荐机制的优点:
它不需要对物品或者用户进行严格的建模,而且不要求对物品特征的描述是机器可理解的,所以这种方法也是领域无关的。
这种方法计算出来的推荐是开放的,可以共用他人的经验,很好的支持用户发现潜在的兴趣偏好。
(2)存在的问题
方法的核心是基于历史数据,所以对新物品和新用户都有“冷启动”的问题。
推荐的效果依赖于用户历史好数据的多少和准确性。
在大部分的实现中,用户历史偏好是用稀疏矩阵进行存储的,而稀疏矩阵上的计算有些明显的问题,包括可能少部分人的错误偏好会对推荐的准确度有很大的影响等等。
对于一些特殊品味的用户不能给予很好的推荐。
(三)基于模型的协同过滤
1、基本思想
(1)用户具有一定的特征,决定着他的偏好选择
(2)物品具有一定的特征,影响着用户需是否选择它。
(3)用户之所以选择某一个商品,是因为用户特征与物品特征相互匹配。
基于这种思想,模型的建立相当于从行为数据中提取特征,给用户和物品同时打上“标签”;这和基于人口统计学的用户标签、基于内容方法的物品标签本质是一样的,都是特征的提取和匹配。
有显性特征时(比如用户标签、物品分类标签)我们可以直接匹配做出推荐;没有时,可以根据已有的偏好数据,去发据出隐藏的特征,这需要用到隐语义模型(LFM)。
2、基于模型的协同过滤推荐,就是基于样本的用户偏好信息,训练一个推荐模型,然后根据实时的用户喜好的信息进行预测新物品的得分,计算推荐
基于近邻的推荐和基于模型的推荐
- 基于近邻的推荐是在预测时直接使用已有的用户偏好数据,通过近邻数据来预测对新物品的偏好(类似分类)
- 而基于模型的方法,是要使用这些偏好数据来训练模型,找到内在规律,再用模型来做预测(类似回归)
训练模型时,可以基于标签内容来提取物品特征,也可以让模型去发据物品的潜在特征;这样的模型被称为 隐语义模型 ( Latent Factor Model,LFM)。
(1)隐语义模型(LFM):用隐语义模型来进行协同过滤的目标:
- 揭示隐藏的特征,这些特征能够解释为什么给出对应的预测评分
- 这类特征可能是无法直接用语言解释描述的,事实上我们并不需要知道,类似“玄学”
通过矩阵分解进行降维分析
- 协同过滤算法非常依赖历史数据,而一般的推荐系统中,偏好数据又往往是稀疏的;这就需要对原始数据做降维处理。
- 分解之后的矩阵,就代表了用户和物品的隐藏特征
隐语义模型的实例:基于概率的隐语义分析(pLSA)、隐式迪利克雷分布模型(LDA)、矩阵因子分解模型(基于奇异值分解的模型,SVD)
(2)LFM降维方法——矩阵因子分解
(3)LFM的进一步理解
我们可以认为,用户之所以给电影打出这样的分数,是有内在原因的,我们可以挖掘出影响用户打分的隐藏因素,进而根据未评分电影与这些隐藏因素的关联度,决定此未评分电影的预测评分。
应该有一些隐藏的因素,影响用户的打分,比如电影:演员、题材、年代…甚至不定是人直接可以理解的隐藏因子。
找到隐藏因子,可以对user和Iiem进行关联(找到是由于什么使得user喜欢/不喜欢此Item,什么会决定user喜欢/不喜欢此item),就可以推测用户是否会喜欢某一部未看过的电影。
(4)矩阵因子分解
(5)模型的求解——损失函数
(6)模型的求解算法——ALS
现在,矩阵因子分解的问题已经转化成了一个标准的优化问题,需要求解P、Q,使目标损失函数取最小值。
最小化过程的求解,一般采用随机梯度下降算法或者交替最小二乘法来实现交替最小二乘法( Alternating Least Squares,ALS)
ALS的思想是,由于两个矩阵P和Q都未知,且通过矩阵乘法耦合在一起,为了使它们解耦,可以先固定Q,把P当作变量,通过损失函数最小化求出P,这就是一个经典的最小二乘问题;再反过来固定求得的P,把Q当作变量,求解出Q:如此交替执行,直到误差满足阅值条件,或者到达迭代上限。
(7)梯度下降算法
6. https://.baidu.com/question/2270990967816553188.html
整理一下自己的理解。
对于一个users-procts-rating的评分数据集,ALS会建立一个user*proct的m*n的矩阵
其中,m为users的数量,n为procts的数量
但是在这个数据集中,并不是每个用户都对每个产品进行过评分,所以这个矩阵往往是稀疏的,用户i对产品j的评分往往是空的
ALS所做的事情就是将这个稀疏矩阵通过一定的规律填满,这样就可以从矩阵中得到任意一个user对任意一个proct的评分,ALS填充的评分项也称为用户i对产品j的预测得分
所以说,ALS算法的核心就是通过什么样子的规律来填满(预测)这个稀疏矩阵
它是这么做的:
假设m*n的评分矩阵R,可以被近似分解成U*(V)T
U为m*d的用户特征向量矩阵
V为n*d的产品特征向量矩阵((V)T代表V的转置,原谅我不会打转置这个符号。。)
d为user/proct的特征值的数量
关于d这个值的理解,大概可以是这样的
对于每个产品,可以从d个角度进行评价,以电影为例,可以从主演,导演,特效,剧情4个角度来评价一部电影,那么d就等于4
可以认为,每部电影在这4个角度上都有一个固定的基准评分值
例如《末日崩塌》这部电影是一个产品,它的特征向量是由d个特征值组成的
d=4,有4个特征值,分别是主演,导演,特效,剧情
每个特征值的基准评分值分别为(满分为1.0):
主演:0.9(大光头还是那么霸气)
导演:0.7
特效:0.8
剧情:0.6
矩阵V由n个proct*d个特征值组成
对于矩阵U,假设对于任意的用户A,该用户对一部电影的综合评分和电影的特征值存在一定的线性关系,即电影的综合评分=(a1*d1+a2*d2+a3*d3+a4*d4)
其中a1-4为用户A的特征值,d1-4为之前所说的电影的特征值
参考:
协同过滤中的矩阵分解算法研究
那么对于之前ALS算法的这个假设
m*n的评分矩阵R,可以被近似分解成U*(V)T
就是成立的,某个用户对某个产品的评分可以通过矩阵U某行和矩阵V(转置)的某列相乘得到
那么现在的问题是,如何确定用户和产品的特征值?(之前仅仅是举例子,实际中这两个都是未知的变量)
采用的是交替的最小二乘法
在上面的公式中,a表示评分数据集中用户i对产品j的真实评分,另外一部分表示用户i的特征向量(转置)*产品j的特征向量(这里可以得到预测的i对j的评分)在上面的公式中,a表示评分数据集中用户i对产品j的真实评分,另外一部分表示用户i的特征向量(转置)*产品j的特征向量(这里可以得到预测的i对j的评分)
用真实评分减去预测评分然后求平方,对下一个用户,下一个产品进行相同的计算,将所有结果累加起来(其中,数据集构成的矩阵是存在大量的空打分,并没有实际的评分,解决的方法是就只看对已知打分的项)
参考:
ALS 在 Spark MLlib 中的实现
但是这里之前问题还是存在,就是用户和产品的特征向量都是未知的,这个式子存在两个未知变量
解决的办法是交替的最小二乘法
首先对于上面的公式,以下面的形式显示:
为了防止过度拟合,加上正则化参数为了防止过度拟合,加上正则化参数
首先用一个小于1的随机数初始化V首先用一个小于1的随机数初始化V
根据公式(4)求U
此时就可以得到初始的UV矩阵了,计算上面说过的差平方和
根据计算得到的U和公式(5),重新计算并覆盖V,计算差平方和
反复进行以上两步的计算,直到差平方和小于一个预设的数,或者迭代次数满足要求则停止
取得最新的UV矩阵
则原本的稀疏矩阵R就可以用R=U(V)T来表示了
以上公式内容截图来自:
基于矩阵分解的协同过滤算法
总结一下:
ALS算法的核心就是将稀疏评分矩阵分解为用户特征向量矩阵和产品特征向量矩阵的乘积
交替使用最小二乘法逐步计算用户/产品特征向量,使得差平方和最小
通过用户/产品特征向量的矩阵来预测某个用户对某个产品的评分
不知道是不是理解正确了
有几个问题想请教一下~
7. 协同过滤,矩阵分解有感
这个概念经常在机器学习的文章中看到,但由于接触不久,所以一直都是一知半解,没有好好了解过。
首先从字面上理解,“协同”需要一个“集体“,“过滤”就应该是晒选的意思,那么协同过滤总的来说就是通过“集体”来“筛选”,以评分推荐系统为例子,这里的“协同”我个人理解就是集合”众多人的评价”,这里的“评价”,就是“对集体都接触过的事物进行打分”,这样大概就能通过一些共同的事物反应出用户不同的”价值观“,然后通过这样的价值观来”筛选“出价值观高度相似的人,再相互推荐共同都喜爱的东西。那么这样的推荐就很有可能是大家都需要的。
经过资料洗礼过后,得知cf现在的两大方向,一种是以记忆为基础(Memory-base),另一种是基于模型(Model-based Collaborative Filtering)。
普及的比较多的前者,它基于关注的目标,又分为基于用户的协同过滤和基于项目的协同过滤,上面举的一个简单的评分推荐系统的例子就可以说是基于用户的协同过滤,它是通过用户对共同物品的“主观价值”来筛选相似用户,再互补评分高的商品,从而达到推荐商品的目的;那么基于项目的意思就是通过这个用户集体对商品集的评价,在物品的角度上去寻找相似度高的物品,达到推荐商品的效果。虽然针对的目标不通,但以我个人理解,大体上都是依赖这个用户集营造的“价值观”,只不过区别在于,基于用户的CF是“关心”各个用户的“主观价值”上的“区别”,而基于项目的CF则是要基于这整个用户集对项目集的“普世价值观”,来甄别出“物品”上的差异。不知道这么比喻恰不恰当哈,“普世”我这边理解就是“大多数”,是一种整体趋势的意思。价值观比较“抽象”的话,再直接点这里的“价值观”就相当于物理中的“参考系”。
但是以上两种方法在面对,不是每个用户对大多数商品都做出过评价(数据稀疏)时就无能为力,所以基于这个问题就引导出了基于模型(Model-based )的CF,我在最近的论文中接触到的就是一个“矩阵分解”的协同过滤,它能够基于现有的数据得到一个模型,再用此模型进行推荐。那么是如何做到的呢?接下来看看矩阵分解。
假设我先在有一个关于用户对音乐评分的矩阵如下图:
只有上述的数据是很难使用户相互推荐音乐的,因为可以看出用户本身听过的歌就不够多,那么如何使数据更加“饱满”呢?这时正是需要矩阵分解的时候,矩阵分解算法的数学理论基础是矩阵的行列变换。行列变换中又有以下规则,我们知道矩阵A进行行变换相当于A左乘一个矩阵,矩阵A进行列变换等价于矩阵A右乘一个矩阵,因此矩阵A可以表示为A=PEQ=PQ(E是标准阵)。
形象的表示如下图:
矩阵分解的目的就是把一个稀疏的用户评分矩阵分解成用户因子矩阵和项目因子矩阵相乘的形式R=U(转置)*I,我们的目的就是最后再让两个因子矩阵反乘回去得到饱满的用户评分矩阵。那么这个用户,项目因子是个什么东西呢?我们接着上面的音乐评分的形式说,一首歌可能包含多种音乐风格,我们可以量化风格,体现各种风格在一首歌中的比重,那么这里的“潜在因子”我们就可以当作“音乐风格”,K个因子就可以看作K种风格。譬如下图:
可以说,这些因子就是我们的模型中的重要参数,个人理解分解出来的这两个因子矩阵就可以说是基于模型的CF中的,“模型”的了,其实我觉得可以类比线性模型中的参数,我们的回归模型最终重要的不就是公式中的各项参数吗,这两个因子矩阵其实就是我们这个模型中的重要参数,参数知道了模型也就求出来了。如果不了解线性模型可以参考吴恩达大大的机器学习课程,里面介绍的很详细,不像我这边一知半哈。
那么这些个值具体是怎么得出来的呢?过程和求线性回归也很像,接下来就是相关的简单推倒,首先,我们假设,真实的用户评分和我们预测评分的差遵循高斯分布
R用是评分矩阵 U是用户因子矩阵,V是项目因子矩阵
接下来就是极大似然估计,使,在现有数据下概率最大化
类比求线性模型,就能够了解思想很相似,所以应该同样是运用了似然估计的思想,要使值最大,式子两边同时取对数,可以看到,如果要使概率最大,那么公式的第一项就要最小,是不是想到了什么,没错接下来就可以看到最小二乘法的式子。
线性模型我们遇到这个情况一般怎么做,没错,就是梯度下降。首先求偏导数
最后就是梯度下降的矩阵因子更新公式:
接下来迭代到自己设置的阈值收敛就能得到局部最优解了。
下面是我根据上述矩阵分解的思想随机的模拟实践,可以自行感受一下准度,可能写搓了点~
注释:以上诸多图片材料来自网上多篇博客文章
https://www.hu.com/question/26743347
http://blog.csdn.net/dream_angel_z/article/details/46288167
还有方便实用sklearn的中文API文档
http://cwiki.apachecn.org/pages/viewpage.action?pageId=10030193
8. 利用 SVD 实现协同过滤推荐算法
奇异值分解(Singular Value Decomposition,以下简称SVD)
是在机器学习领域广泛应用的算法,它不光可以用于 降维算法中的特征分解 ,还可以用于 推荐系统 ,以及自然语言处理等领域。
优点: 简化数据,去除噪声,提高算法的结果。
缺点: 数据的转换可能难以理解。
应用领域: 推荐引擎(协同过滤、相似度计算)、图像压缩等。
SVD定义: 如果我们求出了矩阵A的n个特征值λ1≤λ2≤...≤λn,以及这n个特征值所对应的特征向量{w1,w2,...wn},如果这n个特征向量线性无关,那么矩阵A就可以用下式的特征分解表示:A=WΣW−1,其中W是这n个特征向量所张成的n×n维矩阵,而Σ为这n个特征值为主对角线的n×n维矩阵。一般我们会把W的这n个特征向量标准化,即满足||wi||2=1, 或者wiTwi=1,此时W的n个特征向量为标准正交基,满WTW=I,即WT=W−1, 也就是说W为酉矩阵。要进行特征分解,矩阵A必须为方阵。那么如果A不是方阵,则用到SVD。
矩阵A的SVD为:A=UΣVT,其中U是一个m×m的矩阵,Σ是一个m×n的矩阵,除了主对角线上的元素以外全为0,主对角线上的每个元素都称为奇异值,V是一个n×n的矩阵。U和V都是酉矩阵,即满足UTU=I,VTV=I。
对于奇异值,它跟我们特征分解中的特征值类似,在奇异值矩阵中也是按照从大到小排列,而且奇异值的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上的比例。也就是说,我们也可以用最大的k个的奇异值和对应的左右奇异向量来近似描述矩阵。
因此SVD 也是一种强大的降维工具 ,可以利用 SVD 来逼近矩阵并从中获得主要的特征。通过保留矩阵的 80%~90% 的能量,就可以得到重用的特征并去除噪声。
推荐系统 是利用电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程。
主要有以下几种推荐算法:
基于内容的推荐(用到自然语言处理), 协同过滤(主流) ,基于规则推荐(基于最多用户点击,最多用户浏览等),混合推荐(类似集成算法,投票决定),基于人口统计信息的推荐(根据用户基本信息)
协同过滤推荐分为三种类型。 第一种是基于用户(user-based)的协同过滤(需要在线找用户和用户之间的相似度关系),第二种是基于项目(item-based)的协同过滤(基于项目的协同过滤可以离线找物品和物品之间的相似度关系), 第三种是基于模型(model based)的协同过滤(用户和物品,主流)。
一般在推荐系统中,数据往往是使用 用户-物品 矩阵来表示的。 用户对其接触过的物品进行评分,评分表示了用户对于物品的喜爱程度,分数越高,表示用户越喜欢这个物品。而这个矩阵往往是稀疏的,空白项是用户还未接触到的物品,推荐系统的任务则是选择其中的部分物品推荐给用户。
对于这个 用户-物品 矩阵,用已有的部分稀疏数据来预测那些空白的物品和数据之间的评分关系,找到最高评分的物品推荐给用户。
具体基于模型的方法有:
用关联算法做协同过滤(Apriori算法、FP Tree算法)
用聚类算法做协同过滤(针对基于用户或者基于模型,Kmeans,DBSCAN)
用分类算法做协同过滤(设定评分阈值,高于推荐,低于不推荐,逻辑回归和朴素贝叶斯,解释性很强)
用回归算法做协同过滤(Ridge回归,回归树)
用矩阵分解做协同过滤(由于传统的奇异值分解SVD要求矩阵不能有缺失数据,必须是稠密的,而用户物品评分矩阵是一个典型的稀疏矩阵,主要是SVD的一些变种,比如FunkSVD,BiasSVD和SVD++。这些算法和传统SVD的最大区别是不再要求将矩阵分解为UΣVT的形式,而变是两个低秩矩阵PTQ的乘积形式。)
用神经网络做协同过滤(限制玻尔兹曼机RBM)
在 Python 的 numpy 中,linalg已经实现了SVD