導航:首頁 > 源碼編譯 > 機器學習svd源碼

機器學習svd源碼

發布時間:2023-02-19 10:42:20

A. 奇異值分解(SVD)的原理及應用

姓名:劉保闊

學號:19021210887

轉自:https://www.cnblogs.com/tianqi/p/9745913.html

【嵌牛導讀】

      奇異值分解(Singular Value Decomposition)是 矩陣論 中一種重要的 矩陣 分解,奇異值分解則是 特徵 分解在任意矩陣上的推廣。在 信號處理 、 統計學 等領域有重要應用。

【嵌牛正文】

一、奇異值與特徵值基礎知識:

  特徵值分解和奇異值分解在機器學習領域都是屬於滿地可見的方法。兩者有著很緊密的關系,我在接下來會談到,特徵值分解和奇異值分解的目的都是一樣,就是提取出一個矩陣最重要的特徵。先談談特徵值分解吧:

   1)特徵值:

    如果說一個向量v是方陣A的特徵向量,將一定可以表示成下面的形式:

    這時候λ就被稱為特徵向量v對應的特徵值,一個矩陣的一組特徵向量是一組正交向量。特徵值分解是將一個矩陣分解成下面的形式:

    其中Q是這個矩陣A的特徵向量組成的矩陣,Σ是一個對角陣,每一個對角線上的元素就是一個特徵值。我這里引用了一些參考文獻中的內容來說明一下。首先,要明確的是,一個矩陣其實就是一個線性變換,因為一個矩陣乘以一個向量後得到的向量,其實就相當於將這個向量進行了線性變換。比如說下面的一個矩陣:

它其實對應的線性變換是下面的形式:

因為這個矩陣M乘以一個向量(x,y)的結果是:

上面的矩陣是對稱的,所以這個變換是一個對x,y軸的方向一個拉伸變換(每一個對角線上的元素將會對一個維度進行拉伸變換,當值>1時,是拉長,當值<1時時縮短),當矩陣不是對稱的時候,假如說矩陣是下面的樣子:

它所描述的變換是下面的樣子:

這其實是在平面上對一個軸進行的拉伸變換(如藍色的箭頭所示),在圖中,藍色的箭頭是一個最主要的變化方向(變化方向可能有不止一個),如果我們想要描述好一個變換,那我們就描述好這個變換主要的變化方向就好了。反過頭來看看之前特徵值分解的式子,分解得到的Σ矩陣是一個對角陣,裡面的特徵值是由大到小排列的,這些特徵值所對應的特徵向量就是描述這個矩陣變化方向(從主要的變化到次要的變化排列)。

當矩陣是高維的情況下,那麼這個矩陣就是高維空間下的一個線性變換,這個線性變化可能沒法通過圖片來表示,但是可以想像,這個變換也同樣有很多的變換方向,我們通過特徵值分解得到的前N個特徵向量,那麼就對應了這個矩陣最主要的N個變化方向。我們利用這前N個變化方向,就可以近似這個矩陣(變換)。也就是之前說的:提取這個矩陣最重要的特徵。總結一下,特徵值分解可以得到特徵值與特徵向量,特徵值表示的是這個特徵到底有多重要,而特徵向量表示這個特徵是什麼,可以將每一個特徵向量理解為一個線性的子空間,我們可以利用這些線性的子空間干很多的事情。不過,特徵值分解也有很多的局限,比如說變換的矩陣必須是方陣。

  2)奇異值:

    下面談談奇異值分解。特徵值分解是一個提取矩陣特徵很不錯的方法,但是它只是對方陣而言的,在現實的世界中,我們看到的大部分矩陣都不是方陣,比如說有N個學生,每個學生有M科成績,這樣形成的一個N * M的矩陣就不可能是方陣,我們怎樣才能描述這樣普通的矩陣呢的重要特徵呢?奇異值分解可以用來干這個事情,奇異值分解是一個能適用於任意的矩陣的一種分解的方法:

假設A是一個N * M的矩陣,那麼得到的U是一個N * N的方陣(裡面的向量是正交的,U裡面的向量稱為左奇異向量),Σ是一個N * M的矩陣(除了對角線的元素都是0,對角線上的元素稱為奇異值),V』(V的轉置)是一個N * N的矩陣,裡面的向量也是正交的,V裡面的向量稱為右奇異向量),從圖片來反映幾個相乘的矩陣的大小可得下面的圖片

那麼奇異值和特徵值是怎麼對應起來的呢?首先,我們將一個矩陣A的轉置 * A,將會得到一個方陣,我們用這個方陣求特徵值可以得到:這里得到的v,就是我們上面的右奇異向量。此外我們還可以得到:

這里的σ就是上面說的奇異值,u就是上面說的左奇異向量。奇異值σ跟特徵值類似,在矩陣Σ中也是從大到小排列,而且σ的減少特別的快,在很多情況下,前10%甚至1%的奇異值的和就佔了全部的奇異值之和的99%以上了。也就是說,我們也可以用前r大的奇異值來近似描述矩陣,這里定義一下部分奇異值分解:

    r是一個遠小於m、n的數,這樣矩陣的乘法看起來像是下面的樣子:

    右邊的三個矩陣相乘的結果將會是一個接近於A的矩陣,在這兒,r越接近於n,則相乘的結果越接近於A。而這三個矩陣的面積之和(在存儲觀點來說,矩陣面積越小,存儲量就越小)要遠遠小於原始的矩陣A,我們如果想要壓縮空間來表示原矩陣A,我們存下這里的三個矩陣:U、Σ、V就好了。

二、奇異值的計算:

    奇異值的計算是一個難題,是一個O(N^3)的演算法。在單機的情況下當然是沒問題的,matlab在一秒鍾內就可以算出1000 * 1000的矩陣的所有奇異值,但是當矩陣的規模增長的時候,計算的復雜度呈3次方增長,就需要並行計算參與了。Google的吳軍老師在數學之美系列談到SVD的時候,說起Google實現了SVD的並行化演算法,說這是對人類的一個貢獻,但是也沒有給出具體的計算規模,也沒有給出太多有價值的信息。

    其實SVD還是可以用並行的方式去實現的,在解大規模的矩陣的時候,一般使用迭代的方法,當矩陣的規模很大(比如說上億)的時候,迭代的次數也可能會上億次,如果使用Map-Rece框架去解,則每次Map-Rece完成的時候,都會涉及到寫文件、讀文件的操作。個人猜測Google雲計算體系中除了Map-Rece以外應該還有類似於MPI的計算模型,也就是節點之間是保持通信,數據是常駐在內存中的,這種計算模型比Map-Rece在解決迭代次數非常多的時候,要快了很多倍。

Lanczos迭代 就是一種解對稱方陣部分特徵值的方法(之前談到了,解A』* A得到的對稱方陣的特徵值就是解A的右奇異向量),是將一個對稱的方程化為一個三對角矩陣再進行求解。按網上的一些文獻來看,Google應該是用這種方法去做的奇異值分解的。請見Wikipedia上面的一些引用的論文,如果理解了那些論文,也「幾乎」可以做出一個SVD了。

    由於奇異值的計算是一個很枯燥,純數學的過程,而且前人的研究成果(論文中)幾乎已經把整個程序的流程圖給出來了。更多的關於奇異值計算的部分,將在後面的參考文獻中給出,這里不再深入,我還是focus在奇異值的應用中去。

三、奇異值與主成分分析(PCA):

主成分分析在上一節裡面也講了一些,這里主要談談如何用SVD去解PCA的問題。PCA的問題其實是一個基的變換,使得變換後的數據有著最大的方差。方差的大小描述的是一個變數的信息量,我們在講一個東西的穩定性的時候,往往說要減小方差,如果一個模型的方差很大,那就說明模型不穩定了。但是對於我們用於機器學習的數據(主要是訓練數據),方差大才有意義,不然輸入的數據都是同一個點,那方差就為0了,這樣輸入的多個數據就等同於一個數據了。以下面這張圖為例子:

這個假設是一個攝像機採集一個物體運動得到的圖片,上面的點表示物體運動的位置,假如我們想要用一條直線去擬合這些點,那我們會選擇什麼方向的線呢?當然是圖上標有signal的那條線。如果我們把這些點單純的投影到x軸或者y軸上,最後在x軸與y軸上得到的方差是相似的(因為這些點的趨勢是在45度左右的方向,所以投影到x軸或者y軸上都是類似的),如果我們使用原來的xy坐標系去看這些點,容易看不出來這些點真正的方向是什麼。但是如果我們進行坐標系的變化,橫軸變成了signal的方向,縱軸變成了noise的方向,則就很容易發現什麼方向的方差大,什麼方向的方差小了。

    一般來說,方差大的方向是信號的方向,方差小的方向是雜訊的方向,我們在數據挖掘中或者數字信號處理中,往往要提高信號與雜訊的比例,也就是信噪比。對上圖來說,如果我們只保留signal方向的數據,也可以對原數據進行不錯的近似了。

    PCA的全部工作簡單點說,就是對原始的空間中順序地找一組相互正交的坐標軸,第一個軸是使得方差最大的,第二個軸是在與第一個軸正交的平面中使得方差最大的,第三個軸是在與第1、2個軸正交的平面中方差最大的,這樣假設在N維空間中,我們可以找到N個這樣的坐標軸,我們取前r個去近似這個空間,這樣就從一個N維的空間壓縮到r維的空間了,但是我們選擇的r個坐標軸能夠使得空間的壓縮使得數據的損失最小。

   還是假設我們矩陣每一行表示一個樣本,每一列表示一個feature,用矩陣的語言來表示,將一個m * n的矩陣A的進行坐標軸的變化,P就是一個變換的矩陣從一個N維的空間變換到另一個N維的空間,在空間中就會進行一些類似於旋轉、拉伸的變化。

    而將一個m * n的矩陣A變換成一個m * r的矩陣,這樣就會使得本來有n個feature的,變成了有r個feature了(r < n),這r個其實就是對n個feature的一種提煉,我們就把這個稱為feature的壓縮。用數學語言表示就是:

但是這個怎麼和SVD扯上關系呢?之前談到,SVD得出的奇異向量也是從奇異值由大到小排列的,按PCA的觀點來看,就是方差最大的坐標軸就是第一個奇異向量,方差次大的坐標軸就是第二個奇異向量…我們回憶一下之前得到的SVD式子:

在矩陣的兩邊同時乘上一個矩陣V,由於V是一個正交的矩陣,所以V轉置乘以V得到單位陣I,所以可以化成後面的式子

將後面的式子與A * P那個m * n的矩陣變換為m * r的矩陣的式子對照看看,在這里,其實V就是P,也就是一個變化的向量。這里是將一個m * n 的矩陣壓縮到一個m * r的矩陣,也就是對列進行壓縮,如果我們想對行進行壓縮(在PCA的觀點下,對行進行壓縮可以理解為,將一些相似的sample合並在一起,或者將一些沒有太大價值的sample去掉)怎麼辦呢?同樣我們寫出一個通用的行壓縮例子:

這樣就從一個m行的矩陣壓縮到一個r行的矩陣了,對SVD來說也是一樣的,我們對SVD分解的式子兩邊乘以U的轉置U'

這樣我們就得到了對行進行壓縮的式子。可以看出,其實PCA幾乎可以說是對SVD的一個包裝,如果我們實現了SVD,那也就實現了PCA了,而且更好的地方是,有了SVD,我們就可以得到兩個方向的PCA,如果我們對A』A進行特徵值的分解,只能得到一個方向的PCA。

四、奇異值與潛在語義索引LSI:

潛在語義索引(Latent Semantic Indexing)與PCA不太一樣,至少不是實現了SVD就可以直接用的,不過LSI也是一個嚴重依賴於SVD的演算法,之前吳軍老師在 矩陣計算與文本處理中的分類問題 中談到:

    「三個矩陣有非常清楚的物理含義。第一個矩陣X中的每一行表示意思相關的一類詞,其中的每個非零元素表示這類詞中每個詞的重要性(或者說相關性),數值越大越相關。最後一個矩陣Y中的每一列表示同一主題一類文章,其中每個元素表示這類文章中每篇文章的相關性。中間的矩陣則表示類詞和文章雷之間的相關性。因此,我們只要對關聯矩陣A進行一次奇異值分解,w 我們就可以同時完成了近義詞分類和文章的分類。(同時得到每類文章和每類詞的相關性)。」

     上面這段話可能不太容易理解,不過這就是LSI的精髓內容,我下面舉一個例子來說明一下,下面的例子來自LSA tutorial,具體的網址我將在最後的引用中給出:

這就是一個矩陣,不過不太一樣的是,這里的一行表示一個詞在哪些title中出現了(一行就是之前說的一維feature),一列表示一個title中有哪些詞,(這個矩陣其實是我們之前說的那種一行是一個sample的形式的一種轉置,這個會使得我們的左右奇異向量的意義產生變化,但是不會影響我們計算的過程)。比如說T1這個title中就有guide、investing、market、stock四個詞,各出現了一次,我們將這個矩陣進行SVD,得到下面的矩陣:

左奇異向量表示詞的一些特性,右奇異向量表示文檔的一些特性,中間的奇異值矩陣表示左奇異向量的一行與右奇異向量的一列的重要程序,數字越大越重要。

      繼續看這個矩陣還可以發現一些有意思的東西,首先,左奇異向量的第一列表示每一個詞的出現頻繁程度,雖然不是線性的,但是可以認為是一個大概的描述,比如book是0.15對應文檔中出現的2次,investing是0.74對應了文檔中出現了9次,rich是0.36對應文檔中出現了3次;

      其次,右奇異向量中一的第一行表示每一篇文檔中的出現詞的個數的近似,比如說,T6是0.49,出現了5個詞,T2是0.22,出現了2個詞。

      然後我們反過頭來看,我們可以將左奇異向量和右奇異向量都取後2維(之前是3維的矩陣),投影到一個平面上,可以得到:

在圖上,每一個紅色的點,都表示一個詞,每一個藍色的點,都表示一篇文檔,這樣我們可以對這些詞和文檔進行聚類,比如說stock 和 market可以放在一類,因為他們老是出現在一起,real和estate可以放在一類,dads,guide這種詞就看起來有點孤立了,我們就不對他們進行合並了。按這樣聚類出現的效果,可以提取文檔集合中的近義詞,這樣當用戶檢索文檔的時候,是用語義級別(近義詞集合)去檢索了,而不是之前的詞的級別。這樣一減少我們的檢索、存儲量,因為這樣壓縮的文檔集合和PCA是異曲同工的,二可以提高我們的用戶體驗,用戶輸入一個詞,我們可以在這個詞的近義詞的集合中去找,這是傳統的索引無法做到的。

B. 求《Java機器學習》全文免費下載百度網盤資源,謝謝~

《Java機器學習》網路網盤pdf最新全集下載:
鏈接: https://pan..com/s/1D1gpbGOim6uvIv698RZtXA

?pwd=7vbh 提取碼: 7vbh
簡介:本書涵蓋了機器學習中的經典技術,如分類、聚類、降維、離群值檢測、半監督學習和主動學習。同時介紹了近期高深的主題,包括流數據學習、深度學習以及大數據學習的挑戰。每一章指定一個主題,包括通過案例研究,介紹前沿的基於Java的工具和軟體,以及完整的知識發現周期:數據採集、實驗設計、建模、結果及評估。每一章都是獨立的,提供了很大的使用靈活性。附帶的網站提供了源碼和數據。對於學生和數據分析從業員來說,這確實很難得,大家可以直接用剛學到的方法進行實驗,或者通過將這些方法應用到真實環境中,加深對它們的理解。

C. 常用的機器學習&數據挖掘知識(點)

常用的機器學習&數據挖掘知識(點)
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等。

D. 推薦系統中矩陣分解演算法-funkSVD和ALS

矩陣分解funkSVD:該矩陣分解不像是線代中的,他屬於偽分解。其主要思想是,用兩個m*k和k*n的矩陣代替m*n的矩陣。

因為在推薦系統中,矩陣十分稀疏,分解後的矩陣一般是密集的,且可以通過行列相乘來得到空缺的值。

(其預測的是第u個用戶對第i個商品的評分)

其通過機器學習最小化損失函數來得到矩陣,

其學習方式有兩種,一種是隨機梯度下降,一種是交替最小二乘。

第一種不說,隨處可見。第二種是通過

該式子實現的。

我們先隨機化一個Q,因為R是那個稀疏矩陣已知,所以能得到P,我們再反過來用PR求Q。直到模型的誤差低於一個閾值。

上面的svd是對於評分的演算法,還有svd++等對用戶,物品做了偏移項。

隱式矩陣分解(最常見)ALS

我們一般的推薦問題不是通過評分推薦,因為評分的產生十分的困難,一般用戶沒有這個習慣。我們與其預測評分,不如去預測用戶行為。如果我們給用戶一個頁面有十個商品,我們預測到用戶會點擊哪一個,這不就說明用戶喜歡這個。而且基於用戶的信息很多。

我們的矩陣由1,0和空缺組成,1表示該用戶點擊過該商品(即表示用戶對它有想法),0表示用戶對它沒有想法(怎麼是沒想法呢,我們定義用戶知道他卻不想了解他。即我們在所有沒有點擊該商品的用戶中抽樣,該商品越火熱抽取的人越多。因為熱門的東西大家應該都知道,而你卻沒點擊他,說明他不感興趣)

我們要將該矩陣分解。

我們的損失函數是

Cui是置信度,比如我點擊10次當時比只點擊一次的喜歡置信度高。

對於學習方法,我們使用加權交替最小二乘法

初始化Y,我們計算出x,再通過

計算出y。再反復交替,直到小於閾值。

該演算法目前在spark上有實現。且sparkml將其作為唯一的推薦系統演算法。

閱讀全文

與機器學習svd源碼相關的資料

熱點內容
r語言編程基礎第五章課後題答案 瀏覽:167
linuxutf8withbom 瀏覽:440
什麼是伺服器配置與管理 瀏覽:156
如何保證伺服器硬碟數據安全 瀏覽:471
賬號出租用什麼app 瀏覽:222
電腦改伺服器需要什麼主板好 瀏覽:512
使用到的編譯器 瀏覽:351
鄞州百丈公園幼兒編程課 瀏覽:417
java實現介面繼承類 瀏覽:492
程序轉化為控制流圖需要編譯嗎 瀏覽:472
聯想彩信在哪個文件夾 瀏覽:462
編譯原理類c語言文法 瀏覽:988
centos時間同步命令 瀏覽:4
會計真賬實操pdf 瀏覽:342
文件加密重裝系統顯示沒有許可權 瀏覽:348
c編譯器怎麼放大字體 瀏覽:342
復雜方程的簡便演算法 瀏覽:502
清理大師中微信語音加密如何解開 瀏覽:268
雲圖計劃演算法造成傷害詞條 瀏覽:141
元氣部落是什麼app 瀏覽:676