最近一直在做公司搜尋的優化與維護,做完索引和搜尋的分離之後,又有乙個新需求,因為做的是歌曲方面的搜尋,所以在資料庫中有多個同歌名,同演唱者的的資料,這樣在使用者搜尋的時候,會出來一大堆不同版本的歌曲,影響搜尋質量,所以需要在建立索引庫時做乙個初步的過濾,因為只是乙個簡單的過濾,所以並不需要太精確。
首先呢是要確定哪些歌曲需要過濾,我調研後覺得對於同一歌名,同一演唱者的歌曲數量大於10時,就進行過濾,也即閥值為10,當然這個後期可以隨時調整。
然後是需要確定過濾的維度,也即怎樣確定乙個歌曲就比另乙個歌曲***?維度如下:
歌曲質量(超清、高畫質、普通….)
確定完維度之後,還需要確定權重,因為不同的維度對歌曲質量的影響是不同的。
最後需要乙個演算法,這要是最核心的,正好以前稍微看了下機器學習這本書,就想到了裡面的k鄰近演算法,據我粗淺的理解,也就是空間向量計算距離,距離預期近,就說明好。
那麼我的步驟如下:
先確定預期,也即乙個理論上完美的歌曲,每個維度的值應該為多少。
//expectation point
integer origonpoint = ;
我這邊出於各種考慮,就只給出三個維度,其實維度增加,道理是一樣的。
那麼對於一首歌曲(0.5,1,10000)距離預期的點的距離就為:
所以就像前面說的,需要確定全權重
int playcompletenessfactor = 10;double qualtityfactor = 2.5;
int timesfactor = 1/10000000;
那麼現在距離就為:
(1-0.5)^2 * playcompletenessfactor + (2-1)^2 * qualtityfactor + (100000000 - 10000) * timesfactor開根號
在不斷的試驗和調整中,最終能找到乙個合適的權重係數。
所以總結下,整個演算法其實很簡單,主要步驟如下:
在建索引時,先按照歌曲名稱,歌手名稱排字典序,所以可以用當前索引的歌曲同上乙個歌曲比對,如果相同,數量加1,如果不同,就看數量如果大於閥值,就將所有歌曲進行過濾。
進入過濾演算法,得到各歌曲與預期的距離,按照距離公升序排列,取出前n首歌曲
將n首歌曲進行索引,其餘歌曲丟棄。
K 鄰近演算法
k 鄰近演算法 1.演算法描述 k 鄰近演算法 k nearest neighbor,knn 分類演算法,是最簡單的機器學習演算法。工作原理 存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每乙個資料與所屬分類對應的關係。輸入沒有標籤的新資料後,將新資料的每...
k鄰近演算法
今天學習了一點機器學習的知識,主要是機器學習最基本的演算法 k鄰近演算法。正好今天寫這篇blog可以複習鞏固,其中涉及到的code和一些內容來自 機器學習實戰 在此基礎上加了一點自己的注釋和理解。這本教程還是挺適合入門的,理論 相結合。k 近鄰演算法 knn 採用測量不同特徵值之間的距離方法進行分類...
K鄰近演算法
k近鄰法 k nearest neighbor,k nn 是1967年由cover t和hart p提出的一種基本分類與回歸方法。它的工作原理是 存在乙個樣本資料集合,也稱作為訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每乙個資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新的...