http://git-wip-us.apache.org/repos/asf/incubator-predictionio-site/blob/32eb5edf/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..1738a0f
--- /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-3a3867f7.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></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><di
 v 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></li></ul></li><li cla
 ss="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 class="final" href="/
 cli/#engine-commands"><span>Engine Command-line Interface</span></a></li><li 
class="level-2"><a class="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></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/#package"><
 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="/cli/#event-server-commands"><span>Event 
Server Command-line Interface</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></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/evalu
 ationdashboard/"><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 class="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 Items 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>Sim
 ilar Product</span></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/recomme
 nded-user/"><span>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/submit-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="/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="final" 
href="/resources/glossary/"><span>Glossary</span></a></li></ul></li><li cl
 ass="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 Recommendation)</h1></div></div><div class="content"> <p>This 
examples demonstra
 tes 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"><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 refl
 ection 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"/></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/incubator-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-labe
 l="# 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

http://git-wip-us.apache.org/repos/asf/incubator-predictionio-site/blob/32eb5edf/templates/ecommercerecommendation/adjust-score/index.html.gz
----------------------------------------------------------------------
diff --git a/templates/ecommercerecommendation/adjust-score/index.html.gz 
b/templates/ecommercerecommendation/adjust-score/index.html.gz
new file mode 100644
index 0000000..5065f4a
Binary files /dev/null and 
b/templates/ecommercerecommendation/adjust-score/index.html.gz differ


Reply via email to