索引時利用K 鄰近演算法過濾重複歌曲

2022-04-22 03:10:50 字數 1149 閱讀 2071

最近一直在做公司搜尋的優化與維護,做完索引和搜尋的分離之後,又有乙個新需求,因為做的是歌曲方面的搜尋,所以在資料庫中有多個同歌名,同演唱者的的資料,這樣在使用者搜尋的時候,會出來一大堆不同版本的歌曲,影響搜尋質量,所以需要在建立索引庫時做乙個初步的過濾,因為只是乙個簡單的過濾,所以並不需要太精確。

首先呢是要確定哪些歌曲需要過濾,我調研後覺得對於同一歌名,同一演唱者的歌曲數量大於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提出的一種基本分類與回歸方法。它的工作原理是 存在乙個樣本資料集合,也稱作為訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每乙個資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新的...