㈠ 用python寫一個單詞推薦系統
實現一個簡單的單詞推薦系統,可以使用如下步談畢驟:
1. 准備單詞列表和輸入單詞
首先准備一個單詞列表,用於查找相似單詞。然後輸入用戶要查詢的單詞。
words = ['apple', 'banana', 'cherry', 'date', 'elderberry', 'fig', 'grape', 'honeydew', 'kiwi', 'lemon']
query = input("Please enter a word: ")
2. 計算單詞間的相似度
可以使用如下的餘弦相似度公式計算兩個單詞之間的培侍棚相似度:
$similarity = frac{sum_{i=1}^{n} a_i imes b_i}{sqrt{sum_{i=1}^{n} a_i^2} imes sqrt{sum_{i=1}^{n} b_i^2}}$
其中,$a_i$ 和 $b_i$ 分別表示兩個單詞的向量表示中第 $i$ 個元素的值。
在這里,我們採用單詞向量的方法,將每個單詞表示為一個向量。向量的每個元素表示單詞中每個字母的出現次數。
定義一個函數,用於計算兩個單詞之間的相似度:
import math
def compute_similarity(word1, word2):
vector1 = [0] * 26
vector2 = [0] * 26
# 統計每個單詞中每個字母的出現次數
for char in word1:
vector1[ord(char) - ord('a')] += 1
for char in word2:
vector2[ord(char) - ord('a')] += 1
# 計算餘弦相似度
dot_proct = sum([vector1[i] * vector2[i] for i in range(26)])
magnitude1 = math.sqrt(sum([x ** 2 for x in vector1]))
magnitude2 = math.sqrt(sum([x ** 2 for x in vector2]))
similarity = dot_proct / (magnitude1 * magnitude2)
return similarity
3. 查找相似單詞
遍歷單詞配則列表,計算每個單詞與輸入單詞的相似度,並將相似度保存在字典中。然後將字典按照相似度從大到小排序,輸出前五個相似的單詞。
similarities = {}
for word in words:
similarities[word] = compute_similarity(query, word)
similarities = {k: v for k, v in sorted(similarities.items(), key=lambda item: item[1], reverse=True)}
print("The recommended words are: ")
count = 0
for key in similarities.keys():
if count >= 5:
break
if key != query:
print(key)
count += 1
示例輸出結果:
Please enter a word: banan
The recommended words are:
banana
lemon
apple
kiwi
grape
注意:這只是一個簡單的單詞推薦系統示例,實際應用中可能需要使用更復雜的演算法或數據結構來實現,以達到更好的推薦效果。
希望我的回答能夠幫助到您!
㈡ 推薦演算法小結
輸入 :與用戶相關的包含眾多特徵(feature)的數據:
用戶的注冊信息(職業、年齡、性別等 顯信息),行為信息(使用功能、有效使用時長等 隱信息)。
輸出 :推薦給用戶的功能列表(根據得分高低排序)
函數 : 傳統演算法 、 機器學習演算法 (Machine Learning)、 深度學習演算法 (Deep Learning)
基於流行度的演算法非常簡單粗暴,類似於各大新聞、微博熱榜等,根據VV、UV、日均PV或分享率等數據來按某種熱度(加權)排序來推薦給用戶。
訪問次數 (VV):記錄1天內所有訪客訪問了該網站多少次,相同的訪客有可能多次訪問該網站,且訪問的次數累加。
獨立訪客 (UV):記錄1天內所有訪客訪問了該網站多少次,雖然相同訪客能多次訪問網站,但只計算為1個獨立訪客。
PV訪問量 (Page View):即頁面訪問量,每打開一次頁面或者刷新一次頁面,PV值+1。
優點:該演算法簡單,適用於剛注冊的新用戶
缺點:無法針對用戶提供個性化的推薦
改進:基於該演算法可做一些優化,例如加入用戶分群的流行度進行排序,通過把熱榜上的體育內容優先推薦給體育迷,把政要熱文推給熱愛談論政治的用戶。
基於用戶的協同過濾推薦演算法 (UserCF):針對目標用戶(A),先通過興趣、愛好或行為習慣找到與他相似的「其他用戶」(BCD...),然後把BCD...喜歡的並且A沒有瀏覽過的物品或功能推給A。
基於物品的協同過濾推薦演算法 (ItemCF):例如由於我之前看過張藝謀導演的《英雄》這部電影,會給我推薦《紅高粱》、《歸來》等同導演電影。
1)分析各個用戶對物品的評價,通過瀏覽記錄、購買記錄等得到用戶的隱性評分;
2)根據用戶對物品的隱性評分計算得到所有用戶之間的相似度;
3)選出與目標用戶最相似的K個用戶;
4)將這K個用戶隱性評分最高並且目標用戶又沒有瀏覽過的物品推薦給目標用戶。
優點:
基於用戶的協同過濾推薦演算法是給目標用戶推薦那些和他有共同興趣的用戶喜歡的物品,所以該演算法推薦較為社會化,即推薦的物品是與用戶興趣一致的那個群體中的熱門物品;
適於物品比用戶多、物品時效性較強的情形,否則計算慢;
能實現跨領域、驚喜度高的結果。
缺點:
在很多時候,很多用戶兩兩之間的共同評分僅有幾個,也即用戶之間的重合度並不高,同時僅有的共同打了分的物品,往往是一些很常見的物品,如票房大片、生活必需品;
用戶之間的距離可能變得很快,這種離線演算法難以瞬間更新推薦結果;
推薦結果的個性化較弱、較寬泛。
改進:
兩個用戶對流行物品的有相似興趣,絲毫不能說明他們有相似的興趣,此時要增加懲罰力度;
如果兩個用戶同時喜歡了相同的物品,那麼可以給這兩個用戶更高的相似度;
在描述鄰居用戶的偏好時,給其最近喜歡的物品較高權重;
把類似地域用戶的行為作為推薦的主要依據。
1)分析各個用戶對物品的瀏覽記錄;
2)依據瀏覽記錄分析得出所有物品之間的相似度;
3)對於目標用戶評價高的物品,找出與之相似度最高的K個物品;
4)將這K個物品中目標用戶沒有瀏覽過的物品推薦給目標用戶
優點:
基於物品的協同過濾推薦演算法則是為目標用戶推薦那些和他之前喜歡的物品類似的物品,所以基於物品的協同過濾推薦演算法的推薦較為個性,因為推薦的物品一般都滿足目標用戶的獨特興趣。
物品之間的距離可能是根據成百上千萬的用戶的隱性評分計算得出,往往能在一段時間內保持穩定。因此,這種演算法可以預先計算距離,其在線部分能更快地生產推薦列表。
應用最廣泛,尤其以電商行業為典型。
適於用戶多、物品少的情形,否則計算慢
推薦精度高,更具個性化
傾向於推薦同類商品
缺點:
不同領域的最熱門物品之間經常具有較高的相似度。比如,基於本演算法,我們可能會給喜歡聽許嵩歌曲的同學推薦汪峰的歌曲,也就是推薦不同領域的暢銷作品,這樣的推薦結果可能並不是我們想要的。
在物品冷啟動、數據稀疏時效果不佳
推薦的多樣性不足,形成信息閉環
改進:
如果是熱門物品,很多人都喜歡,就會接近1,就會造成很多物品都和熱門物品相似,此時要增加懲罰力度;
活躍用戶對物品相似度的貢獻小於不活躍的用戶;
同一個用戶在間隔很短的時間內喜歡的兩件商品之間,可以給予更高的相似度;
在描述目標用戶偏好時,給其最近喜歡的商品較高權重;
同一個用戶在同一個地域內喜歡的兩件商品之間,可以給予更高的相似度。
(相似度計算:餘弦相似度、Jaccard系數、皮爾森相關系數等)
常見經典 ML 分類演算法:
邏輯回歸 (Logistics Regression)
支持向量機 (SVM)
隨機森林 (Random Forest)
提升類演算法 (Boosting):Adaboost、GBDT、XGboost
一般處理流程:數據處理 -> 特徵工程 -> 模型選擇 -> 交叉驗證 -> 模型選擇與模型融合
特徵清洗 :剔除不可信樣本,預設值極多的欄位不予考慮
特徵預處理 :單個特徵(歸一化,離散化,缺失值補全,數據變換),多個特徵(PCA/LDA降維,特徵選擇)
使用工具 :pandas(python開源庫)
模型選擇與模型融合 :根據交叉驗證得分選擇前幾名模型,然後進行模型融合(Bagging、Boosting、Stacking)
DL 優勢 :ML 中特徵工程是十分重要並且要根據行業經驗確定,DL 可以自己從數據中學習特徵。DL 能自動對輸入的低階特徵進行組合、變換,得到高階特徵。對於公司產品應用領域來說,用戶的注冊信息(職業、年齡、性別等 顯信息),行為信息(使用功能、有效使用時長等 隱信息)。這些就可以作為低階特徵輸入。
RNN系列 (處理文本數據)
CNN系列 (處理圖像數據)
DNN (處理一般性分類)
㈢ python演算法有哪些
演算法(Algorithm)是指解題方案的准確而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制。也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。一個演算法的優劣可以用空間復雜度與時間復雜度來衡量。
一個演算法應該具有以下七個重要的特徵:
①有窮性(Finiteness):演算法的有窮性是指演算法必須能在執行有限個步驟之後終止;
②確切性(Definiteness):演算法的每一步驟必須有確切的定義;
③輸入項(Input):一個演算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸 入是指演算法本身定出了初始條件;
④輸出項(Output):一個演算法有一個或多個輸出,以反映對輸入數據加工後的結果。沒 有輸出的演算法是毫無意義的;
⑤可行性(Effectiveness):演算法中執行的任何計算步驟都是可以被分解為基本的可執行 的操作步,即每個計算步都可以在有限時間內完成(也稱之為有效性);
⑥高效性(High efficiency):執行速度快,佔用資源少;
⑦健壯性(Robustness):對數據響應正確。
相關推薦:《Python基礎教程》
五種常見的Python演算法:
1、選擇排序
2、快速排序
3、二分查找
4、廣度優先搜索
5、貪婪演算法
㈣ Python實現協同過濾推薦演算法,用的大一些的數據集就報錯MemoryError
python雖然易用,但是內存佔用比較多;所以如果你有C/C++/Java基礎,考慮用這些語言來實現;
CF演算法需要計算大量的相似度,如果能把中間結果存起來,或者簡化計算過程(如,你可能會重復計算一個item的均值)可以省下不少內存;(個人試過計算1w個用戶Pearson是沒問題的)
如果內存實在不夠用,那就用時間換空間,把中間計算結果分成小文件存到磁碟上,用的時候再讀取。
供參考。