日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Day 4:PredictionIO——如何创建一个博客推荐器

發布時間:2025/3/21 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Day 4:PredictionIO——如何创建一个博客推荐器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天是“30天學習30種新技術”的第4天。到目前為止我很享受,而且周圍開發者反響也很不錯。我現在更有動力在30天內完成它了。在這篇文章中,我將介紹如何在Java下使用PredictionIO來簡單地構建一個博客推薦引擎。我沒找到太多在Java下使用PredictionIO的文檔。所以,本文對那些尋找在Java下使用PredictionIO的完整教程的人可能會有用。“30天學習30種新技術”系列文章的目錄可以在這里找到。

PredictionIO是什么?

PredictionIO是一個用Scala編寫的開源機器學習服務器應用,可以幫助你方便地使用REST API搭建推薦引擎。它同時也提供了客戶端SDK,封裝了REST API。Java、Python、Ruby和PHP都有客戶端SDK。PredictionIO的核心使用Apache Mahout。Apache Mahout是一個可伸縮的機器學習庫,它提供眾多聚集、分類、過濾算法。Apache Mahout可以在分布式的Hapoop集群上運行這些算法。

作為用戶,我們不需要操心這些細節。我們只需安裝PredictionIO然后使用它就是了。欲知詳情,請讀文檔。

我為什么要關心PredictionIO?

我決定學習PredictionIO是因為我想使用一個可以幫助我加上機器學習功能的庫。PredictionIO有助于實施諸如推薦有意思的內容、發現相似內容之類的功能。

安裝PredictionIO

在文檔中提及了很多安裝PredictionIO的方法。我使用Vagrant,這樣我就不會搞亂我的系統,同時不用自己配置所有的東西。

  • 下載適合你的操作系統的最新版的vagrant:http://downloads.vagrantup.com/

  • 下載并安裝 VirtualBox。 請參考 https://www.virtualbox.org/wiki/Downloads

  • 下載最新的包含 PredictionIO 的 vagrant包: https://github.com/PredictionIO/PredictionIO-Vagrant/releases

  • 解壓縮 PredictionIO-x.x.x.zip。其中包括了設置PredictionIO所需要的腳本。打開命令行終端,轉到PredictionIO-x.x.x目錄。

  • vagrant腳本將首先下載Ubuntu vagrant box,接著安裝依賴——MongoDB、Java、Hadoop和PredictionIO服務器。這很耗時間(取決于網速)。如果你所在的位置網絡不穩定,我建議你使用wget下載。wget命令支持斷點續傳。使用如下命令將precise64 box下載到適當的位置:

    wget -c http://files.vagrantup.com/precise64.box

    等待下載完成之后,打開Vagrantfile,修改config.vm.box_url,指向下載目錄,例如:

    config.vm.box_url = "/Users/shekhargulati/tools/vagrant/precise64.box"

    現在只需vagrant up就可以開始安裝進程了。取決于你的網速,這會花一些時間。

    接著我們將按照文檔所言創建一個管理員賬戶 http://docs.prediction.io/current/installation/install-predictionio-with-virtualbox-vagrant.html#create-an-administrator-account

    可以通過 http://localhost:9000/ 訪問應用。閱讀以下文檔了解詳情 http://docs.prediction.io/current/installation/install-predictionio-with-virtualbox-vagrant.html#accessing-predictionio-server-vm-from-the-host-machine PredictionIO應用會要求你登錄。登錄之后,你會見到如下所見的面板。

    創建PredictionIO應用

    作為開始,我們創建一個博客推薦應用。點擊“Add an App”按鈕,輸入應用名“blog-recommender”。

    應用創建后,你可以在如下所示的Applications里看到。

    接著點擊Develop,你將看到應用的詳情。重要的信息是App Key。你編寫應用的時候需要這個。

    應用案例

    我們正要實現的用例和亞馬遜的“購買此商品的顧客也同時購買”功能很相似。我們要實現的是“瀏覽此博客的讀者也同時瀏覽”功能。

    開發博客推薦的Java應用

    既然我們已經創建了PredictionIO應用,那么該是時候編寫我們的Java應用了。我們使用Eclipse來開發這個應用。我使用的是Eclipse Kepler,內建了m2eclipse集成。通過 文件 > 新建 > Maven項目 創建一個基于Maven的項目。選擇maven-archetype-quickstart,然后輸入Maven項目的詳細信息。用下面的內容替換pom.xml。

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelversion><groupId>com.shekhar</groupid><artifactId>blog-recommender</artifactid><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>blog-recommender</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceencoding></properties><dependencies><dependency><groupId>io.prediction</groupid><artifactId>client</artifactid><version>0.6.1</version></dependency></dependencies><build> <plugins><plugin><groupId>org.apache.maven.plugins</groupid><artifactId>maven-compiler-plugin</artifactid><version>3.1</version><configuration><!-- http://maven.apache.org/plugins/maven-compiler-plugin/ --><source>1.7</source><target>1.7</target></configuration></plugin></plugins></build> </project>

    上面的內容中值得注意的是PredictionIO Java API和Maven的依賴關系。

    現在我們將編寫一個類,在PredictionIO中插入數據。這個類是這樣子的。

    package com.shekhar.blog_recommender;import io.prediction.Client; import io.prediction.CreateItemRequestBuilder;public class BlogDataInserter {private static final String API_KEY = "wwoTLn0FR7vH6k51Op8KbU1z4tqeFGZyvBpSgafOaSSe40WqdMf90lEncOA0SB13";public static void main(String[] args) throws Exception {Client client = new Client(API_KEY);addUsers(client);addBlogs(client);userItemViews(client);client.close();}private static void addUsers(Client client) throws Exception {String[] users = { "shekhar", "rahul"};for (String user : users) {System.out.println("Added User " + user);client.createUser(user);}}private static void addBlogs(Client client) throws Exception {CreateItemRequestBuilder blog1 = client.getCreateItemRequestBuilder("blog1", new String[]{"machine-learning"});client.createItem(blog1);CreateItemRequestBuilder blog2 = client.getCreateItemRequestBuilder("blog2", new String[]{"javascript"});client.createItem(blog2);CreateItemRequestBuilder blog3 = client.getCreateItemRequestBuilder("blog3", new String[]{"scala"});client.createItem(blog3);CreateItemRequestBuilder blog4 = client.getCreateItemRequestBuilder("blog4", new String[]{"artificial-intelligence"});client.createItem(blog4);CreateItemRequestBuilder blog5 = client.getCreateItemRequestBuilder("blog5", new String[]{"statistics"});client.createItem(blog5);CreateItemRequestBuilder blog6 = client.getCreateItemRequestBuilder("blog6", new String[]{"python"});client.createItem(blog6);CreateItemRequestBuilder blog7 = client.getCreateItemRequestBuilder("blog7", new String[]{"web-development"});client.createItem(blog7);CreateItemRequestBuilder blog8 = client.getCreateItemRequestBuilder("blog8", new String[]{"security"});client.createItem(blog8);CreateItemRequestBuilder blog9 = client.getCreateItemRequestBuilder("blog9", new String[]{"ruby"});client.createItem(blog9);CreateItemRequestBuilder blog10 = client.getCreateItemRequestBuilder("blog10", new String[]{"openshift"});client.createItem(blog10);}private static void userItemViews(Client client) throws Exception {client.identify("shekhar");client.userActionItem("view","blog1");client.userActionItem("view","blog4");client.userActionItem("view","blog5");client.identify("rahul");client.userActionItem("view","blog1");client.userActionItem("view","blog4");client.userActionItem("view","blog6");client.userActionItem("view","blog7");}}

    上面展示的類主要做了這些事:

  • 我們創建了一個Client類的實例。Client類封裝了PredictionIO的REST API。我們需要將PredictionIO博客推薦應用的 API_KEY 提供給它。
  • 接著我們利用Client實例創建了兩個用戶。這兩個用戶在PredictionIO應用中創建。只有userId是必須要填上的。
  • 在此之后我們利用Clinet實例添加了10個博客。博客同樣在PredictionIO應用中創建。當創建一項事物的時候,你只需傳遞兩樣東西——itemId和itemType。blog1,...blog10是itemId,而javascript、scala等是itemType。
  • 然后我們對創建的事物施加一些行動。用戶shekhar瀏覽了blog1、blog2和blog4,而用戶rahul則瀏覽了blog1、blog4、blog6和blog7。
  • 最后,我們關閉了cilent實例。
  • 將這個類作為Java應用程序運行。它會在PredictionIO中插入記錄,你可以通過查看面板來確認這一點。

    既然數據已經插入了我們的PredictionIO應用了,我們需要在我們的應用中添加引擎。點擊Add an Engine按鈕。如下所示,選擇Item Similarity Engine。

    然后創建Item Similarity Engine,輸入engine1作為名稱。

    按下Create按鈕之后Item Similarity Engine就創建好了?,F在你可以改動一些配置,不過我們將使用默認配置。進入Algorithms標簽,你會看到引擎尚未運行。點擊Train Data Model Now可運行引擎。

    等上一段時間。數據模型訓練完成之后,你會看到狀態已經變成Running了。

    我們要解決的問題是基于用戶訪問過的博客向用戶推薦博客。在下面的代碼中,我們獲取了對userId shekhar 而言 blog1 的相似項。

    import io.prediction.Client;import java.util.Arrays;public class BlogrRecommender {public static void main(String[] args) throws Exception {Client client = new Client("wwoTLn0FR7vH6k51Op8KbU1z4tqeFGZyvBpSgafOaSSe40WqdMf90lEncOA0SB13");client.identify("shekhar");String[] recommendedItems = client.getItemSimTopN("engine1", "blog1", 5);System.out.println(String.format("User %s is recommended %s", "shekhar", Arrays.toString(recommendedItems)));client.close();} }

    運行此Java程序,你會看到結果:blog4、blog5、blog6和blog7。

    正如你在上面的例子中看到的,為應用增加推薦功能很容易。我會在我未來的項目中使用PredictionIO,我也會花更多的時間學習和使用PredictionIO。

    這就是今天的內容。請多多回饋。


    原文 Day 4: PredictionIO--How to Build A Blog Recommender
    翻譯 SegmentFault

    總結

    以上是生活随笔為你收集整理的Day 4:PredictionIO——如何创建一个博客推荐器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。