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">&gt;</span></li><li><a href="#
 ">E-Commerce Recommendation</a><span class="spacer">&gt;</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">&gt;</span></li><li><a href="#">E-Commerce 
Recommendation</a><span class="spacer">&gt;</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">=&gt;</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">=&gt;</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">=&gt;</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">&lt;-</span> <span 
class="n">weightedItems</span>
+      <span class="n">item</span> <span class="k">&lt;-</span> <span 
class="n">group</span><span class="o">.</span><span class="n">items</span>
+      <span class="n">index</span> <span class="k">&lt;-</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&#39;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


Reply via email to