<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 項目焦點:使用 Artem Yankov 在 Python 中進行事件推薦 > 原文: [https://machinelearningmastery.com/project-spotlight-with-artem-yankov/](https://machinelearningmastery.com/project-spotlight-with-artem-yankov/) 這是 Artem Yankov 的項目焦點。 ## 你能介紹一下自己嗎? 我叫 Artem Yankov,過去 3 年我曾在 [Badgeville](http://badgeville.com/) 擔任軟件工程師。我在那里使用 Ruby 和 Scala,雖然我之前的背景包括使用各種語言,如:匯編,C / C ++,Python,Clojure 和 JS。 我喜歡黑客攻擊小項目并探索不同的領域,例如我看過的兩個幾乎隨機的領域是機器人和惡意軟件分析。我不能說我成了專家,但我確實有很多樂趣。我制造的一個小型機器人看起來非常難看,但它可以通過 [MS Kinect](http://www.microsoft.com/en-us/kinectforwindows/) “看到”它來反映我的手臂動作。 直到去年我完成 [Andrew Ng 關于 Coursera](https://www.coursera.org/course/ml) 的課程并且我真的很喜歡它時,我根本沒有做任何機器學習。 ## 你的項目叫什么,它做了什么? 該項目名為 [hapsradar.com](http://hapsradar.com) ,它是一個活動推薦網站,專注于現在或不久的將來發生的事情。 我是一個可怕的周末計劃者,我常常想知道如果我突然決定在我的家/互聯網之外做一些事情該怎么辦。我發現正在發生的事情的典型算法是訪問 meetup.com 和 eventbrite 等網站,瀏覽大量類別,點擊大量按鈕并閱讀當前事件列表。 因此,當我完成機器學習課程并開始尋找項目來練習我的技能時,我認為我可以通過從這些網站獲取事件列表然后根據我喜歡的方式構建推薦來真正自動化此事件搜索過程。 [![HapsRadar by Artem Yankov](https://img.kancloud.cn/27/4b/274b6b6d7365b7fe5e5309e1c8d6db47_300x142.jpg)](https://3qeqpr26caki16dnhd19sv6by6v-wpengine.netdna-ssl.com/wp-content/uploads/2014/03/HapsRadar.png) HapsRadar by Artem Yankov 該網站非常簡約,目前只提供來自兩個網站的活動: [meetup.com](http://www.meetup.com/) 和 [eventbrite.com](http://www.eventbrite.com/) 。用戶需要在推薦引擎啟動之前評估至少 100 個事件。然后它每晚運行并使用用戶喜歡/不喜歡進行訓練,然后嘗試預測用戶可能喜歡的事件。 ## 你是怎么開始的? 我的開始只是因為我想練習我的機器學習技巧,并讓我更有趣,我選擇解決一個真正的問題。經過一番評估后,我決定使用 python 作為我的推薦人。這是我使用的工具: * [熊貓](http://pandas.pydata.org/) * [Scikit-Learn](http://scikit-learn.org/stable/) * [PostgreSQL](http://www.postgresql.org/) * Scala / [PlayFramework](http://www.playframework.com/) (用于事件提取器和網站) 使用 meetup.com 和 eventbrite.com 提供的標準 API 獲取事件并存儲在 postgresql 中。在我開始使用爬蟲之前,我通過電子郵件仔細檢查了我是否可以做這樣的事情,特別是因為我想每天運行這些爬蟲來保持我的數據庫更新所有事件。 這些人非常好,eventbrite 甚至沒有任何問題地提高了我的 API 速率限制。 meetup.com 有一個很好的流媒體 API,允許您訂閱所有發生的變化。我想抓住 [yelp.com](http://www.yelp.com) ,因為他們有事件列表,但是他們完全禁止這樣做。 在我第一次刪除數據后,我構建了一個簡單的站點,在給定的郵政編碼的某個范圍內顯示事件(我目前只為美國提取事件)。 現在是推薦部分。構建我的功能的主要材料是事件標題和事件描述。我決定事件發生的時間,或者離家多遠的事情都不會增加很多價值,因為我只想簡單回答一下問題:這個事件是否與我的興趣有關? ### **想法#1。預測主題** 一些獲取的事件具有標簽或類別,其中一些沒有。 最初我認為我應該嘗試使用標記事件來預測未標記事件的標記,然后將它們用作訓練功能。花了一些時間后,我認為這可能不是一個好主意。大多數標記事件只有 1-3 個標記,它們通常非常不準確甚至完全隨機。 我認為 eventbrite 允許客戶輸入任何標簽作為標簽,而人們不太善于提出好話。此外,每個事件的標簽數量通常較低,即使您使用人工智能,也不足以判斷事件 當然,有可能找到已經準確分類的文本并將其用于預測主題,但這又提出了許多其他問題:在何處獲取機密文本?與我的活動描述有多相關?我應該使用多少個標簽?所以我決定找到另一個想法。 ### 想法#2。 LDA 主題建模 經過一些研究,我發現了一個名為 [gensim](http://radimrehurek.com/gensim/) 的真棒 python 庫,它實現了 LDA( [Latent Dirichlet Allocation](http://en.wikipedia.org/wiki/Latent_Dirichlet_allocation) )用于主題建模。 值得注意的是,這里使用主題并不意味著用英語定義的主題,如“體育”,“音樂”或“編程”。 LDA 中的主題是對單詞的概率分布。粗略地說,它發現了具有一定概率的單詞集合。每個這樣的集群都是一個“主題”。然后,您可以為模型提供新文檔,并為其推斷主題。 使用 LDA 非常簡單。首先,我通過刪除停止英語單詞,逗號,html 標簽等來清理文檔(在我的案例文檔中是事件的描述和標題)。然后我根據所有事件描述構建字典: 來自 gensim import corpora 的`,模型 dct = corpora.Dictionary(clean_documents)` 然后我過濾非常罕見的單詞 `dct.filter_extremes(no_below=2)` 要訓??練模型,所有文件都需要轉換成文字袋: `corpus = [dct.doc2bow(doc) for doc in clean_documents]` 然后像這樣創建模型 `lda = ldamodel.LdaModel(corpus=corpus, id2word=dct, num_topics=num_topics)` 其中 num_topics 是需要在文檔上建模的許多主題。在我的情況下它是 100.然后將任何文字袋形式的文件轉換為稀疏矩陣形式的主題表示: `x = lda[doc_bow]` 所以現在我可以為任何給定的事件獲得一個特征矩陣,我可以很容易地為用戶評分的事件獲得一個訓練矩陣: `docs_bow = [dct.doc2bow(doc)for doc in rated_events] X_train = [lda [doc_bow] for doc_bow in docs_bow]` 這似乎或多或少是不錯的解決方案,使用 SVM([支持向量機](http://en.wikipedia.org/wiki/Support_vector_machine))分類器我得到了大約 85%的準確度,當我查看預測事件對我來說它確實看起來非常準確。 注意:并非所有分類器都支持稀疏矩陣,有時您需要將其轉換為完整矩陣。 Gensim 有辦法做到這一點。 `gensim.matutils.sparse2full(sparse_matrix, num_topics)` ### 想法#3。 TF-IDF 向量化器 我想嘗試構建特征的另一個想法是 [TF-IDF 向量化器](http://en.wikipedia.org/wiki/Tf%E2%80%93idf)。 [Scikit-learn](http://scikit-learn.org/stable/) 支持開箱即用,它正在做的是根據文檔中該單詞的頻率除以文檔中單詞的頻率為文檔中的每個單詞分配權重。文件的語料庫。因此,如果您經常看到這個詞的重量會很低,并且可以濾除噪音。要從所有文檔中構建向量化器: 來自 sklearn.feature_extraction.text 的`導入 TfidfVectorizer vectorizer = TfidfVectorizer(max_df = 0.5,sublinear_tf = True,stop_words ='english') vectorizer.fit(all_events)` 然后將給定的文檔集轉換為 TF-IDF 表示: `X_train = vectorizer.transform(rated_events)` 現在,當我嘗試將其提供給真正花費很長時間的分類器時,結果很糟糕。這實際上并不令人意外,因為在這種情況下,幾乎每個單詞都是一個特征。所以我開始尋找一種方法來選擇表現最佳的功能。 Scikit-learn 提供方法 [SelectKBest](http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectKBest.html) ,你可以傳遞評分函數和許多功能來選擇它,它為你執行魔術。對于得分,我使用 chi2([卡方檢驗](http://en.wikipedia.org/wiki/Chi-squared_test)),我不會說你到底為什么。我只是憑經驗發現它在我的情況下表現得更好,并在我的 todo 桶中“研究了 chi2 背后的理論”。 `來自 sklearn.feature_selection import SelectKBest,chi2 num_features = 100 ch2 = SelectKBest(chi2,k = num_features) X_train = ch2.fit_transform(X_train,y_train).toarray()` 就是這樣。 X_train 是我的訓練集。 ### 訓練分類器 我不高興承認這一點,但我選擇的分類器并沒有多少科學參與。我只是試了一堆,然后選擇表現最好的那一個。就我而言,它是 SVM。至于我用[網格搜索](http://scikit-learn.org/stable/modules/grid_search.html)選擇最好的參數,所有 scikit-learn 提供開箱即用的參數。在代碼中它看起來像這樣: `clf = svm.SVC() params = dict(gamma = [0.001,0.01,0.1,0.2,1,10,100],C = [1,10,100,1000],kernel = [“linear “,”rb“]) clf = grid_search.GridSearchCV(clf,param_grid = params,cv = 5,scoring ='f1')` 我選擇 [f1-score](http://en.wikipedia.org/wiki/F1_score) 作為評分方法只是因為它是我或多或少了解的那個。網格搜索將嘗試上述參數的所有組合,執行交叉驗證并找到表現最佳的參數。 我嘗試將這個分類器提供給 X_train,主題是用 LDA 和 TF-IDF + Chi2 建模的。兩者表現相似,但主觀上看起來像 TF-IDF + Chi2 解決方案產生了更好的預測。我對 v1 的結果非常滿意,并花費了其余的時間來修復網站的 UI。 ## 你做了哪些有趣的發現? 我學到的一件事是,如果你正在建立一個推薦系統,并期望你的用戶一次來評價一堆東西,那么它可以工作 - 你錯了。 我在我的朋友們上試過這個網站,雖然評分過程對我來說似乎非常簡單和快速,但是很難讓他們花幾分鐘點擊“喜歡”按鈕。雖然沒關系,因為我的主要目標是練習技能并為自己構建一個工具,我想如果我想從中做出更大的東西,我需要弄清楚如何使評級過程更簡單。 我學到的另一件事是,為了提高效率,我需要更多地理解算法。當您了解自己在做什么時,調整參數會更有趣。 ## 你想在項目上做什么? 我目前的主要問題是 UI。我想保持簡約,但我需要弄清楚如何使評級過程更有趣和方便。事件瀏覽也可能更好。 完成這部分后,我正在考慮尋找新的事件來源:會議,音樂會等。也許我會為此添加一個移動應用程序。 ## 學到更多 * 項目: [hapsradar.com](http://hapsradar.com) 由于阿爾喬姆。 **你有機器學習方面的項目嗎?** 如果你有一個使用機器學習的側面項目,并希望像 Artem 一樣被推薦,請[與我聯系](http://machinelearningmastery.com/contact/ "Contact")。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看