2017-09-02 143 views
2

我正在使用推薦系統。這將是一個Android應用程序,用戶將在其中輸入他們的偏好,並在這些偏好的基礎上,向該用戶顯示其他匹配的簡檔。我從用戶那裏獲取數據並將其存儲在Firebase中。如何實施策略設計模式?

這些是數值和爲了顯示匹配的簡檔與該用戶,我使用用於計算用戶之間的相似性計數兩種算法:Cosine similarityPearson correlation

我擷取算法的名稱從應用程序,然後執行算法,以顯示相似的配置文件給用戶。

if (request.query.algo === "cosine") { 
    // compute cosine value 
} 
else if (request.query.algo === "pearson-correlation") { 
    // compute pearson correlation coefficents 

} 

因爲這將是一個實時應用,因此這種方法是完全錯誤的,我想實現戰略設計模式,其中的算法可以在運行時,而不是在編譯時決定。

所以現在的問題是,在策略設計模式中,我將如何決定何時使用哪種算法?

例如,當您用信用卡購買東西時,信用卡類型無關緊要。所有信用卡都有一個磁條,其中編碼了信息。條和它包含的內容代表'接口',卡的類型將是'實現'。每張信用卡都可以被任何其他人取代,而且所有信用卡都完全相互獨立。

同樣,我應該在什麼基礎上選擇餘弦和皮爾森之間的運行時間與策略設計模式?

+0

爲什麼這種方法是錯誤的?這仍然是運行時選擇策略,因爲它取決於請求 – ByeBye

回答

0

從我對它的理解中,皮爾遜在兩個用戶配置文件有非常不同的項目集合(在這種情況下是首選項)的情況下表現會更差。

也許這可能是你的標準?如果匹配首選項的數量超過某個閾值,則使用Pearson,其他情況使用餘弦。

你也許可以向你的用戶顯示一個關閉匹配列表,它使用餘弦顯示用戶誰的配置文件有很多共同點。

然後,您可以顯示第二個列表,其中顯示您可能也會感興趣,它使用Pearson顯示沒有大量共同偏好的匹配配置文件。

+0

謝謝你的回答。你在說我應該把門檻作爲實施戰略設計模式的標準。例如,我分析了他們兩人的結果,然後我發現對於皮爾遜來說,0.2的閾值給出了完美的結果,而在餘弦中,0.9的閾值給出了完美的結果。那麼我怎麼能在這些閾值的基礎上實施SDP?你能簡要描述一下這一點嗎? –

+0

我需要更好地看看你的課程,才能夠幫助你。但從外觀上看,工廠設計模式可能更適合這種戰略模式。您只需致電工廠即可獲得配置文件之間的匹配度,然後工廠可以返回需要使用的相應算法。 –

+0

你也許可以保留一個比較策略作爲輸入的ProfileComparator接口。然後,您可以將其擴展到CosineProfileComparator和PearsonProfileComparator。現在,當您返回近距離匹配列表時,您可以使用CosineComparator實例化ProfileComparator,並使用PearsonComparator –