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