Repository: incubator-predictionio-site Updated Branches: refs/heads/asf-site 0f1e2f89e -> 1b72b3036
http://git-wip-us.apache.org/repos/asf/incubator-predictionio-site/blob/1b72b303/templates/ecommercerecommendation/adjust-score/index.html ---------------------------------------------------------------------- diff --git a/templates/ecommercerecommendation/adjust-score/index.html b/templates/ecommercerecommendation/adjust-score/index.html new file mode 100644 index 0000000..87f7546 --- /dev/null +++ b/templates/ecommercerecommendation/adjust-score/index.html @@ -0,0 +1,251 @@ +<!DOCTYPE html><html><head><title>Adjust Score (E-Commerce Recommendation)</title><meta charset="utf-8"/><meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta class="swiftype" name="title" data-type="string" content="Adjust Score (E-Commerce Recommendation)"/><link rel="canonical" href="https://predictionio.incubator.apache.org/templates/ecommercerecommendation/adjust-score/"/><link href="/images/favicon/normal-b330020a.png" rel="shortcut icon"/><link href="/images/favicon/apple-c0febcf2.png" rel="apple-touch-icon"/><link href="//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800" rel="stylesheet"/><link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet"/><link href="/stylesheets/application-eccfc6cb.css" rel="stylesheet" type="text/css"/><script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3. 7.2/html5shiv.min.js"></script><script src="//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script><script src="//use.typekit.net/pqo0itb.js"></script><script>try{Typekit.load({ async: true });}catch(e){}</script></head><body><div id="global"><header><div class="container" id="header-wrapper"><div class="row"><div class="col-sm-12"><div id="logo-wrapper"><span id="drawer-toggle"></span><a href="#"></a><a href="http://predictionio.incubator.apache.org/"><img alt="PredictionIO" id="logo" src="/images/logos/logo-ee2b9bb3.png"/></a><span>â¢</span></div><div id="menu-wrapper"><div id="pill-wrapper"><a class="pill left" href="/gallery/template-gallery">TEMPLATES</a> <a class="pill right" href="//github.com/apache/incubator-predictionio/">OPEN SOURCE</a></div></div><img class="mobile-search-bar-toggler hidden-md hidden-lg" src="/images/icons/search-glass-704bd4ff.png"/></div></div></div></header><div id="search-bar-row-wrapper"><div class="container-fluid" id=" search-bar-row"><div class="row"><div class="col-md-9 col-sm-11 col-xs-11"><div class="hidden-md hidden-lg" id="mobile-page-heading-wrapper"><p>PredictionIO Docs</p><h4>Adjust Score (E-Commerce Recommendation)</h4></div><h4 class="hidden-sm hidden-xs">PredictionIO Docs</h4></div><div class="col-md-3 col-sm-1 col-xs-1 hidden-md hidden-lg"><img id="left-menu-indicator" src="/images/icons/down-arrow-dfe9f7fe.png"/></div><div class="col-md-3 col-sm-12 col-xs-12 swiftype-wrapper"><div class="swiftype"><form class="search-form"><img class="search-box-toggler hidden-xs hidden-sm" src="/images/icons/search-glass-704bd4ff.png"/><div class="search-box"><img src="/images/icons/search-glass-704bd4ff.png"/><input type="text" id="st-search-input" class="st-search-input" placeholder="Search Doc..."/></div><img class="swiftype-row-hider hidden-md hidden-lg" src="/images/icons/drawer-toggle-active-fcbef12a.png"/></form></div></div><div class="mobile-left-menu-toggler hidden-md hidden-lg"></div></div ></div></div><div id="page" class="container-fluid"><div class="row"><div >id="left-menu-wrapper" class="col-md-3"><nav id="nav-main"><ul><li >class="level-1"><a class="expandible" href="/"><span>Apache PredictionIO⢠>(incubating) Documentation</span></a><ul><li class="level-2"><a class="final" >href="/"><span>Welcome to Apache PredictionIO >(incubating)</span></a></li></ul></li><li class="level-1"><a >class="expandible" href="#"><span>Getting Started</span></a><ul><li >class="level-2"><a class="final" href="/start/"><span>A Quick >Intro</span></a></li><li class="level-2"><a class="final" >href="/install/"><span>Installing Apache PredictionIO >(incubating)</span></a></li><li class="level-2"><a class="final" >href="/start/download/"><span>Downloading an Engine >Template</span></a></li><li class="level-2"><a class="final" >href="/start/deploy/"><span>Deploying Your First Engine</span></a></li><li >class="level-2"><a class="final" href="/start/customize/"><span>Customizing >the Engine</span></a></l i></ul></li><li class="level-1"><a class="expandible" href="#"><span>Integrating with Your App</span></a><ul><li class="level-2"><a class="final" href="/appintegration/"><span>App Integration Overview</span></a></li><li class="level-2"><a class="expandible" href="/sdk/"><span>List of SDKs</span></a><ul><li class="level-3"><a class="final" href="/sdk/java/"><span>Java & Android SDK</span></a></li><li class="level-3"><a class="final" href="/sdk/php/"><span>PHP SDK</span></a></li><li class="level-3"><a class="final" href="/sdk/python/"><span>Python SDK</span></a></li><li class="level-3"><a class="final" href="/sdk/ruby/"><span>Ruby SDK</span></a></li><li class="level-3"><a class="final" href="/sdk/community/"><span>Community Powered SDKs</span></a></li></ul></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Deploying an Engine</span></a><ul><li class="level-2"><a class="final" href="/deploy/"><span>Deploying as a Web Service</span></a></li><li class="level-2"><a cl ass="final" href="/batchpredict/"><span>Batch Predictions</span></a></li><li class="level-2"><a class="final" href="/deploy/monitoring/"><span>Monitoring Engine</span></a></li><li class="level-2"><a class="final" href="/deploy/engineparams/"><span>Setting Engine Parameters</span></a></li><li class="level-2"><a class="final" href="/deploy/enginevariants/"><span>Deploying Multiple Engine Variants</span></a></li><li class="level-2"><a class="final" href="/deploy/plugin/"><span>Engine Server Plugin</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Customizing an Engine</span></a><ul><li class="level-2"><a class="final" href="/customize/"><span>Learning DASE</span></a></li><li class="level-2"><a class="final" href="/customize/dase/"><span>Implement DASE</span></a></li><li class="level-2"><a class="final" href="/customize/troubleshooting/"><span>Troubleshooting Engine Development</span></a></li><li class="level-2"><a class="final" href="/api/current/#packag e"><span>Engine Scala APIs</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Collecting and Analyzing Data</span></a><ul><li class="level-2"><a class="final" href="/datacollection/"><span>Event Server Overview</span></a></li><li class="level-2"><a class="final" href="/datacollection/eventapi/"><span>Collecting Data with REST/SDKs</span></a></li><li class="level-2"><a class="final" href="/datacollection/eventmodel/"><span>Events Modeling</span></a></li><li class="level-2"><a class="final" href="/datacollection/webhooks/"><span>Unifying Multichannel Data with Webhooks</span></a></li><li class="level-2"><a class="final" href="/datacollection/channel/"><span>Channel</span></a></li><li class="level-2"><a class="final" href="/datacollection/batchimport/"><span>Importing Data in Batch</span></a></li><li class="level-2"><a class="final" href="/datacollection/analytics/"><span>Using Analytics Tools</span></a></li><li class="level-2"><a class="final" href="/dat acollection/plugin/"><span>Event Server Plugin</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Choosing an Algorithm(s)</span></a><ul><li class="level-2"><a class="final" href="/algorithm/"><span>Built-in Algorithm Libraries</span></a></li><li class="level-2"><a class="final" href="/algorithm/switch/"><span>Switching to Another Algorithm</span></a></li><li class="level-2"><a class="final" href="/algorithm/multiple/"><span>Combining Multiple Algorithms</span></a></li><li class="level-2"><a class="final" href="/algorithm/custom/"><span>Adding Your Own Algorithms</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>ML Tuning and Evaluation</span></a><ul><li class="level-2"><a class="final" href="/evaluation/"><span>Overview</span></a></li><li class="level-2"><a class="final" href="/evaluation/paramtuning/"><span>Hyperparameter Tuning</span></a></li><li class="level-2"><a class="final" href="/evaluation/evaluationdashboard/" ><span>Evaluation Dashboard</span></a></li><li class="level-2"><a >class="final" href="/evaluation/metricchoose/"><span>Choosing Evaluation >Metrics</span></a></li><li class="level-2"><a class="final" >href="/evaluation/metricbuild/"><span>Building Evaluation >Metrics</span></a></li></ul></li><li class="level-1"><a class="expandible" >href="#"><span>System Architecture</span></a><ul><li class="level-2"><a >class="final" href="/system/"><span>Architecture Overview</span></a></li><li >class="level-2"><a class="final" href="/system/anotherdatastore/"><span>Using >Another Data Store</span></a></li></ul></li><li class="level-1"><a >class="expandible" href="#"><span>PredictionIO Official >Templates</span></a><ul><li class="level-2"><a class="final" >href="/templates/"><span>Intro</span></a></li><li class="level-2"><a >class="expandible" href="#"><span>Recommendation</span></a><ul><li >class="level-3"><a class="final" >href="/templates/recommendation/quickstart/"><span>Quick >Start</span></a></li><li cla ss="level-3"><a class="final" href="/templates/recommendation/dase/"><span>DASE</span></a></li><li class="level-3"><a class="final" href="/templates/recommendation/evaluation/"><span>Evaluation Explained</span></a></li><li class="level-3"><a class="final" href="/templates/recommendation/how-to/"><span>How-To</span></a></li><li class="level-3"><a class="final" href="/templates/recommendation/reading-custom-events/"><span>Read Custom Events</span></a></li><li class="level-3"><a class="final" href="/templates/recommendation/customize-data-prep/"><span>Customize Data Preparator</span></a></li><li class="level-3"><a class="final" href="/templates/recommendation/customize-serving/"><span>Customize Serving</span></a></li><li class="level-3"><a class="final" href="/templates/recommendation/training-with-implicit-preference/"><span>Train with Implicit Preference</span></a></li><li class="level-3"><a class="final" href="/templates/recommendation/blacklist-items/"><span>Filter Recommended Item s by Blacklist in Query</span></a></li><li class="level-3"><a class="final" href="/templates/recommendation/batch-evaluator/"><span>Batch Persistable Evaluator</span></a></li></ul></li><li class="level-2"><a class="expandible" href="#"><span>E-Commerce Recommendation</span></a><ul><li class="level-3"><a class="final" href="/templates/ecommercerecommendation/quickstart/"><span>Quick Start</span></a></li><li class="level-3"><a class="final" href="/templates/ecommercerecommendation/dase/"><span>DASE</span></a></li><li class="level-3"><a class="final" href="/templates/ecommercerecommendation/how-to/"><span>How-To</span></a></li><li class="level-3"><a class="final" href="/templates/ecommercerecommendation/train-with-rate-event/"><span>Train with Rate Event</span></a></li><li class="level-3"><a class="final active" href="/templates/ecommercerecommendation/adjust-score/"><span>Adjust Score</span></a></li></ul></li><li class="level-2"><a class="expandible" href="#"><span>Similar Product</sp an></a><ul><li class="level-3"><a class="final" href="/templates/similarproduct/quickstart/"><span>Quick Start</span></a></li><li class="level-3"><a class="final" href="/templates/similarproduct/dase/"><span>DASE</span></a></li><li class="level-3"><a class="final" href="/templates/similarproduct/how-to/"><span>How-To</span></a></li><li class="level-3"><a class="final" href="/templates/similarproduct/multi-events-multi-algos/"><span>Multiple Events and Multiple Algorithms</span></a></li><li class="level-3"><a class="final" href="/templates/similarproduct/return-item-properties/"><span>Returns Item Properties</span></a></li><li class="level-3"><a class="final" href="/templates/similarproduct/train-with-rate-event/"><span>Train with Rate Event</span></a></li><li class="level-3"><a class="final" href="/templates/similarproduct/rid-user-set-event/"><span>Get Rid of Events for Users</span></a></li><li class="level-3"><a class="final" href="/templates/similarproduct/recommended-user/"><spa n>Recommend Users</span></a></li></ul></li><li class="level-2"><a class="expandible" href="#"><span>Classification</span></a><ul><li class="level-3"><a class="final" href="/templates/classification/quickstart/"><span>Quick Start</span></a></li><li class="level-3"><a class="final" href="/templates/classification/dase/"><span>DASE</span></a></li><li class="level-3"><a class="final" href="/templates/classification/how-to/"><span>How-To</span></a></li><li class="level-3"><a class="final" href="/templates/classification/add-algorithm/"><span>Use Alternative Algorithm</span></a></li><li class="level-3"><a class="final" href="/templates/classification/reading-custom-properties/"><span>Read Custom Properties</span></a></li></ul></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Engine Template Gallery</span></a><ul><li class="level-2"><a class="final" href="/gallery/template-gallery/"><span>Browse</span></a></li><li class="level-2"><a class="final" href="/community/subm it-template/"><span>Submit your Engine as a Template</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Demo Tutorials</span></a><ul><li class="level-2"><a class="final" href="/demo/tapster/"><span>Comics Recommendation Demo</span></a></li><li class="level-2"><a class="final" href="/demo/community/"><span>Community Contributed Demo</span></a></li><li class="level-2"><a class="final" href="/demo/textclassification/"><span>Text Classification Engine Tutorial</span></a></li></ul></li><li class="level-1"><a class="expandible" href="/community/"><span>Getting Involved</span></a><ul><li class="level-2"><a class="final" href="/community/contribute-code/"><span>Contribute Code</span></a></li><li class="level-2"><a class="final" href="/community/contribute-documentation/"><span>Contribute Documentation</span></a></li><li class="level-2"><a class="final" href="/community/contribute-sdk/"><span>Contribute a SDK</span></a></li><li class="level-2"><a class="final" href="/community/contribute-webhook/"><span>Contribute a Webhook</span></a></li><li class="level-2"><a class="final" href="/community/projects/"><span>Community Projects</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Getting Help</span></a><ul><li class="level-2"><a class="final" href="/resources/faq/"><span>FAQs</span></a></li><li class="level-2"><a class="final" href="/support/"><span>Support</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Resources</span></a><ul><li class="level-2"><a class="final" href="/cli/"><span>Command-line Interface</span></a></li><li class="level-2"><a class="final" href="/resources/release/"><span>Release Cadence</span></a></li><li class="level-2"><a class="final" href="/resources/intellij/"><span>Developing Engines with IntelliJ IDEA</span></a></li><li class="level-2"><a class="final" href="/resources/upgrade/"><span>Upgrade Instructions</span></a></li><li class="level-2"><a class="fin al" href="/resources/glossary/"><span>Glossary</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Apache Software Foundation</span></a><ul><li class="level-2"><a class="final" href="https://www.apache.org/"><span>Apache Homepage</span></a></li><li class="level-2"><a class="final" href="https://www.apache.org/licenses/"><span>License</span></a></li><li class="level-2"><a class="final" href="https://www.apache.org/foundation/sponsorship.html"><span>Sponsorship</span></a></li><li class="level-2"><a class="final" href="https://www.apache.org/foundation/thanks.html"><span>Thanks</span></a></li><li class="level-2"><a class="final" href="https://www.apache.org/security/"><span>Security</span></a></li></ul></li></ul></nav></div><div class="col-md-9 col-sm-12"><div class="content-header hidden-md hidden-lg"><div id="breadcrumbs" class="hidden-sm hidden xs"><ul><li><a href="#">PredictionIO Official Templates</a><span class="spacer">></span></li><li><a href="# ">E-Commerce Recommendation</a><span class="spacer">></span></li><li><span class="last">Adjust Score</span></li></ul></div><div id="page-title"><h1>Adjust Score (E-Commerce Recommendation)</h1></div></div><div id="table-of-content-wrapper"><h5>On this page</h5><aside id="table-of-contents"><ul> <li> <a href="#modification">Modification</a> </li> </ul> </aside><hr/><a id="edit-page-link" href="https://github.com/apache/incubator-predictionio/tree/livedoc/docs/manual/source/templates/ecommercerecommendation/adjust-score.html.md.erb"><img src="/images/icons/edit-pencil-d6c1bb3d.png"/>Edit this page</a></div><div class="content-header hidden-sm hidden-xs"><div id="breadcrumbs" class="hidden-sm hidden xs"><ul><li><a href="#">PredictionIO Official Templates</a><span class="spacer">></span></li><li><a href="#">E-Commerce Recommendation</a><span class="spacer">></span></li><li><span class="last">Adjust Score</span></li></ul></div><div id="page-title"><h1>Adjust Score (E-Commerce Re commendation)</h1></div></div><div class="content"> <p>This examples demonstrates how to modify E-Commerce Recommendation template to further adjust score.</p><p>By default, items have a weight of 1.0. Giving an item a weight greater than 1.0 will make them appear more often and can be useful for i.e. promoted products. An item can also be given a weight smaller than 1.0 (but bigger than 0), in which case it will be recommended less often than originally. Weight values smaller than 0.0 are invalid.</p><p>You can find the complete modified source code <a href="https://github.com/apache/incubator-predictionio/tree/develop/examples/scala-parallel-ecommercerecommendation/adjust-score">here</a>.</p><h2 id='modification' class='header-anchors'>Modification</h2><h3 id='ecommalgorithm.scala' class='header-anchors'>ECommAlgorithm.scala</h3><p>Add a case class to represent each group items which are given the same weight.</p><div class="highlight scala"><table style="border-spacing: 0"><tbody ><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1 +2 +3 +4 +5</pre></td><td class="code"><pre><span class="c1">// ADDED +</span><span class="k">case</span> <span class="k">class</span> <span class="nc">WeightGroup</span><span class="o">(</span> + <span class="n">items</span><span class="k">:</span> <span class="kt">Set</span><span class="o">[</span><span class="kt">String</span><span class="o">],</span> + <span class="n">weight</span><span class="k">:</span> <span class="kt">Double</span> +<span class="o">)</span> +</pre></td></tr></tbody></table> </div> <p>In ECommAlgorithm, add <code>weightedItems</code> function to extract the sequence of <code>WeightGroup</code>.</p><div class="highlight scala"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28</pre></td><td class="code"><pre> <span class="c1">// ADDED +</span> <span class="cm">/** Get the latest constraint weightedItems */</span> + <span class="k">def</span> <span class="n">weightedItems</span><span class="k">:</span> <span class="kt">Seq</span><span class="o">[</span><span class="kt">WeightGroup</span><span class="o">]</span> <span class="k">=</span> <span class="o">{</span> + <span class="k">try</span> <span class="o">{</span> + <span class="k">val</span> <span class="n">constr</span> <span class="k">=</span> <span class="nc">LEventStore</span><span class="o">.</span><span class="n">findByEntity</span><span class="o">(</span> + <span class="n">appName</span> <span class="k">=</span> <span class="n">ap</span><span class="o">.</span><span class="n">appName</span><span class="o">,</span> + <span class="n">entityType</span> <span class="k">=</span> <span class="s">"constraint"</span><span class="o">,</span> + <span class="n">entityId</span> <span class="k">=</span> <span class="s">"weightedItems"</span><span class="o">,</span> + <span class="n">eventNames</span> <span class="k">=</span> <span class="nc">Some</span><span class="o">(</span><span class="nc">Seq</span><span class="o">(</span><span class="s">"$set"</span><span class="o">)),</span> + <span class="n">limit</span> <span class="k">=</span> <span class="nc">Some</span><span class="o">(</span><span class="mi">1</span><span class="o">),</span> + <span class="n">latest</span> <span class="k">=</span> <span class="kc">true</span><span class="o">,</span> + <span class="n">timeout</span> <span class="k">=</span> <span class="nc">Duration</span><span class="o">(</span><span class="mi">200</span><span class="o">,</span> <span class="s">"millis"</span><span class="o">)</span> + <span class="o">)</span> + <span class="k">if</span> <span class="o">(</span><span class="n">constr</span><span class="o">.</span><span class="n">hasNext</span><span class="o">)</span> <span class="o">{</span> + <span class="n">constr</span><span class="o">.</span><span class="n">next</span><span class="o">.</span><span class="n">properties</span><span class="o">.</span><span class="n">get</span><span class="o">[</span><span class="kt">Seq</span><span class="o">[</span><span class="kt">WeightGroup</span><span class="o">]](</span><span class="s">"weights"</span><span class="o">)</span> + <span class="o">}</span> <span class="k">else</span> <span class="o">{</span> + <span class="nc">Nil</span> + <span class="o">}</span> + <span class="o">}</span> <span class="k">catch</span> <span class="o">{</span> + <span class="k">case</span> <span class="n">e</span><span class="k">:</span> <span class="kt">scala.concurrent.TimeoutException</span> <span class="o">=></span> + <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="o">(</span><span class="n">s</span><span class="s">"Timeout when read set weightedItems event."</span> <span class="o">+</span> + <span class="n">s</span><span class="s">" Empty list is used. ${e}"</span><span class="o">)</span> + <span class="nc">Nil</span> + <span class="k">case</span> <span class="n">e</span><span class="k">:</span> <span class="kt">Exception</span> <span class="o">=></span> + <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="o">(</span><span class="n">s</span><span class="s">"Error when read set weightedItems event: ${e}"</span><span class="o">)</span> + <span class="k">throw</span> <span class="n">e</span> + <span class="o">}</span> + <span class="o">}</span> +</pre></td></tr></tbody></table> </div> <p>Modify the <code>predictKnownUser()</code>, <code>predictDefault()</code> and <code>predictSimilar()</code>:</p> <ul> <li>add the <code>weights: Map[Int, Double]</code> parameter</li> <li>adjust score according to item weights</li> </ul> <div class="highlight scala"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21</pre></td><td class="code"><pre> <span class="k">def</span> <span class="n">predictKnownUser</span><span class="o">(</span> + <span class="n">userFeature</span><span class="k">:</span> <span class="kt">Array</span><span class="o">[</span><span class="kt">Double</span><span class="o">],</span> + <span class="n">productModels</span><span class="k">:</span> <span class="kt">Map</span><span class="o">[</span><span class="kt">Int</span>, <span class="kt">ProductModel</span><span class="o">],</span> + <span class="n">query</span><span class="k">:</span> <span class="kt">Query</span><span class="o">,</span> + <span class="n">whiteList</span><span class="k">:</span> <span class="kt">Option</span><span class="o">[</span><span class="kt">Set</span><span class="o">[</span><span class="kt">Int</span><span class="o">]],</span> + <span class="n">blackList</span><span class="k">:</span> <span class="kt">Set</span><span class="o">[</span><span class="kt">Int</span><span class="o">],</span> + <span class="n">weights</span><span class="k">:</span> <span class="kt">Map</span><span class="o">[</span><span class="kt">Int</span>, <span class="kt">Double</span><span class="o">]</span> <span class="c1">// ADDED +</span> <span class="o">)</span><span class="k">:</span> <span class="kt">Array</span><span class="o">[(</span><span class="kt">Int</span>, <span class="kt">Double</span><span class="o">)]</span> <span class="k">=</span> <span class="o">{</span> + + <span class="o">...</span> + <span class="o">.</span><span class="n">map</span> <span class="o">{</span> <span class="k">case</span> <span class="o">(</span><span class="n">i</span><span class="o">,</span> <span class="n">pm</span><span class="o">)</span> <span class="k">=></span> + <span class="c1">// NOTE: features must be defined, so can call .get +</span> <span class="k">val</span> <span class="n">s</span> <span class="k">=</span> <span class="n">dotProduct</span><span class="o">(</span><span class="n">userFeature</span><span class="o">,</span> <span class="n">pm</span><span class="o">.</span><span class="n">features</span><span class="o">.</span><span class="n">get</span><span class="o">)</span> + <span class="c1">// may customize here to further adjust score +</span> <span class="c1">// ADDED +</span> <span class="k">val</span> <span class="n">adjustedScore</span> <span class="k">=</span> <span class="n">s</span> <span class="o">*</span> <span class="n">weights</span><span class="o">(</span><span class="n">i</span><span class="o">)</span> + <span class="o">(</span><span class="n">i</span><span class="o">,</span> <span class="n">adjustedScore</span><span class="o">)</span> + <span class="o">}</span> + <span class="o">...</span> + + <span class="o">}</span> +</pre></td></tr></tbody></table> </div> <p>Lastly, modify the <code>predict()</code> method. The sequence of <code>WeightGroup</code> transforms into a <code>Map[Int, Double]</code> that we can easily query to extract the weight given to an item, using its <code>Int</code> index.</p><div class="highlight scala"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51</pre></td><td class="code"><pre> <span class="k">def</span> <span class="n">predict</span><span class="o">(</span><span class="n">model</span><span class="k">:</span> <span class="kt">ECommModel</span><span class="o">,</span> <span class="n">query</span><span class="k">:</span> <span class="kt">Query</span><span class="o">)</span><span class="k">:</span> <span class="kt">PredictedResult</span> <span class="o">=</span> <span class="o">{</span> + + <span class="o">...</span> + + <span class="c1">// ADDED +</span> <span class="k">val</span> <span class="n">weights</span><span class="k">:</span> <span class="kt">Map</span><span class="o">[</span><span class="kt">Int</span>, <span class="kt">Double</span><span class="o">]</span> <span class="k">=</span> <span class="o">(</span><span class="k">for</span> <span class="o">{</span> + <span class="n">group</span> <span class="k"><-</span> <span class="n">weightedItems</span> + <span class="n">item</span> <span class="k"><-</span> <span class="n">group</span><span class="o">.</span><span class="n">items</span> + <span class="n">index</span> <span class="k"><-</span> <span class="n">model</span><span class="o">.</span><span class="n">itemStringIntMap</span><span class="o">.</span><span class="n">get</span><span class="o">(</span><span class="n">item</span><span class="o">)</span> + <span class="o">}</span> <span class="k">yield</span> <span class="o">(</span><span class="n">index</span><span class="o">,</span> <span class="n">group</span><span class="o">.</span><span class="n">weight</span><span class="o">))</span> + <span class="o">.</span><span class="n">toMap</span> + <span class="o">.</span><span class="n">withDefaultValue</span><span class="o">(</span><span class="mf">1.0</span><span class="o">)</span> + + <span class="o">...</span> + + <span class="k">val</span> <span class="n">topScores</span><span class="k">:</span> <span class="kt">Array</span><span class="o">[(</span><span class="kt">Int</span>, <span class="kt">Double</span><span class="o">)]</span> <span class="k">=</span> <span class="k">if</span> <span class="o">(</span><span class="n">userFeature</span><span class="o">.</span><span class="n">isDefined</span><span class="o">)</span> <span class="o">{</span> + <span class="c1">// the user has feature vector +</span> <span class="n">predictKnownUser</span><span class="o">(</span> + <span class="n">userFeature</span> <span class="k">=</span> <span class="n">userFeature</span><span class="o">.</span><span class="n">get</span><span class="o">,</span> + <span class="n">productModels</span> <span class="k">=</span> <span class="n">productModels</span><span class="o">,</span> + <span class="n">query</span> <span class="k">=</span> <span class="n">query</span><span class="o">,</span> + <span class="n">whiteList</span> <span class="k">=</span> <span class="n">whiteList</span><span class="o">,</span> + <span class="n">blackList</span> <span class="k">=</span> <span class="n">finalBlackList</span><span class="o">,</span> + <span class="n">weights</span> <span class="k">=</span> <span class="n">weights</span> <span class="c1">// ADDED +</span> <span class="o">)</span> + <span class="o">}</span> <span class="k">else</span> <span class="o">{</span> + <span class="o">...</span> + + <span class="k">if</span> <span class="o">(</span><span class="n">recentFeatures</span><span class="o">.</span><span class="n">isEmpty</span><span class="o">)</span> <span class="o">{</span> + <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="o">(</span><span class="n">s</span><span class="s">"No features vector for recent items ${recentItems}."</span><span class="o">)</span> + <span class="n">predictDefault</span><span class="o">(</span> + <span class="n">productModels</span> <span class="k">=</span> <span class="n">productModels</span><span class="o">,</span> + <span class="n">query</span> <span class="k">=</span> <span class="n">query</span><span class="o">,</span> + <span class="n">whiteList</span> <span class="k">=</span> <span class="n">whiteList</span><span class="o">,</span> + <span class="n">blackList</span> <span class="k">=</span> <span class="n">finalBlackList</span><span class="o">,</span> + <span class="n">weights</span> <span class="k">=</span> <span class="n">weights</span> <span class="c1">// ADDED +</span> <span class="o">)</span> + <span class="o">}</span> <span class="k">else</span> <span class="o">{</span> + <span class="n">predictSimilar</span><span class="o">(</span> + <span class="n">recentFeatures</span> <span class="k">=</span> <span class="n">recentFeatures</span><span class="o">,</span> + <span class="n">productModels</span> <span class="k">=</span> <span class="n">productModels</span><span class="o">,</span> + <span class="n">query</span> <span class="k">=</span> <span class="n">query</span><span class="o">,</span> + <span class="n">whiteList</span> <span class="k">=</span> <span class="n">whiteList</span><span class="o">,</span> + <span class="n">blackList</span> <span class="k">=</span> <span class="n">finalBlackList</span><span class="o">,</span> + <span class="n">weights</span> <span class="k">=</span> <span class="n">weights</span> <span class="c1">// ADDED +</span> <span class="o">)</span> + <span class="o">}</span> + <span class="o">}</span> + + <span class="o">...</span> + <span class="o">}</span> +</pre></td></tr></tbody></table> </div> <p>Now, to send an event to Event Server:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20</pre></td><td class="code"><pre><span class="gp">$ </span>curl -i -X POST http://localhost:7070/events.json?accessKey<span class="o">=</span><span class="nv">$ACCESS_KEY</span> <span class="se">\</span> +-H <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span> +-d <span class="s1">'{ + "event" : "$set", + "entityType" : "constraint", + "entityId" : "weightedItems", + "properties" : { + "weights": [ + { + "items": ["i4", "i14"], + "weight": 1.2 + }, + { + "items": ["i11"], + "weight": 1.5 + } + ] + }, + "eventTime" : "2014-11-02T09:39:45.618-08:00" +}'</span> +</pre></td></tr></tbody></table> </div> <p>That's it! Now your engine can predict with adjusted scores.</p></div></div></div></div><footer><div class="container"><div class="seperator"></div><div class="row"><div class="col-md-6 footer-link-column"><div class="footer-link-column-row"><h4>Community</h4><ul><li><a href="//predictionio.incubator.apache.org/install/" target="blank">Download</a></li><li><a href="//predictionio.incubator.apache.org/" target="blank">Docs</a></li><li><a href="//github.com/apache/incubator-predictionio" target="blank">GitHub</a></li><li><a href="mailto:[email protected]" target="blank">Subscribe to User Mailing List</a></li><li><a href="//stackoverflow.com/questions/tagged/predictionio" target="blank">Stackoverflow</a></li></ul></div></div><div class="col-md-6 footer-link-column"><div class="footer-link-column-row"><h4>Contribute</h4><ul><li><a href="//predictionio.incubator.apache.org/community/contribute-code/" target="bl ank">Contribute</a></li><li><a href="//github.com/apache/incubator-predictionio" target="blank">Source Code</a></li><li><a href="//issues.apache.org/jira/browse/PIO" target="blank">Bug Tracker</a></li><li><a href="mailto:[email protected]" target="blank">Subscribe to Development Mailing List</a></li></ul></div></div></div><div class="row"><div class="col-md-12 footer-link-column"><p>Apache PredictionIO, PredictionIO, Apache, the Apache feather logo, and the Apache PredictionIO project logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries.</p><p>All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p></div></div><div class="row"><div class="col-md-12 footer-link-column"><a class="pull-right" href="http://incubator.apache.org/projects/predictionio.html"><img alt="Apache Incubator" src="/images/logos/apache_incubator-6954bd16.png"/></a><span >Apache PredictionIO is an effort undergoing incubation at The Apache Software >Foundation (ASF), sponsored by the Apache Incubator. Incubation is required >of all newly accepted projects until a further review indicates that the >infrastructure, communications, and decision making process have stabilized >in a manner consistent with other successful ASF projects. While incubation >status is not necessarily a reflection of the completeness or stability of >the code, it does indicate that the project has yet to be fully endorsed by >the ASF.</span></div></div></div><div id="footer-bottom"><div >class="container"><div class="row"><div class="col-md-12"><div >id="footer-logo-wrapper"><img alt="PredictionIO" >src="/images/logos/logo-white-d1e9c6e6.png"/><span>â¢</span></div><div >id="social-icons-wrapper"><a class="github-button" >href="https://github.com/apache/incubator-predictionio" data-style="mega" >data-count-href="/apache/incubator-predictionio/stargazers" >data-count-api="/repos/apache/incub ator-predictionio#stargazers_count" data-count-aria-label="# stargazers on GitHub" aria-label="Star apache/incubator-predictionio on GitHub">Star</a> <a class="github-button" href="https://github.com/apache/incubator-predictionio/fork" data-icon="octicon-git-branch" data-style="mega" data-count-href="/apache/incubator-predictionio/network" data-count-api="/repos/apache/incubator-predictionio#forks_count" data-count-aria-label="# forks on GitHub" aria-label="Fork apache/incubator-predictionio on GitHub">Fork</a> <script id="github-bjs" async="" defer="" src="https://buttons.github.io/buttons.js"></script><a href="https://twitter.com/predictionio" target="blank"><img alt="PredictionIO on Twitter" src="/images/icons/twitter-ea9dc152.png"/></a> <a href="https://www.facebook.com/predictionio" target="blank"><img alt="PredictionIO on Facebook" src="/images/icons/facebook-5c57939c.png"/></a> </div></div></div></div></div></footer></div><script>(function(w,d,t,u,n,s,e){w['SwiftypeObject']=n ;w[n]=w[n]||function(){ +(w[n].q=w[n].q||[]).push(arguments);};s=d.createElement(t); +e=d.getElementsByTagName(t)[0];s.async=1;s.src=u;e.parentNode.insertBefore(s,e); +})(window,document,'script','//s.swiftypecdn.com/install/v1/st.js','_st'); + +_st('install','HaUfpXXV87xoB_zzCQ45');</script><script src="/javascripts/application-a6acb1f5.js"></script></body></html> \ No newline at end of file
