Repository: incubator-predictionio-site
Updated Branches:
  refs/heads/asf-site 92a45fa47 -> 734e6fcd3


http://git-wip-us.apache.org/repos/asf/incubator-predictionio-site/blob/734e6fcd/templates/complementarypurchase/dase/index.html
----------------------------------------------------------------------
diff --git a/templates/complementarypurchase/dase/index.html 
b/templates/complementarypurchase/dase/index.html
index 4141bac..ef0c407 100644
--- a/templates/complementarypurchase/dase/index.html
+++ b/templates/complementarypurchase/dase/index.html
@@ -1,26 +1,4 @@
-<!DOCTYPE html><html><head><title>DASE Components Explained (Complementary 
Purchase)</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="DASE Components Explained 
(Complementary Purchase)"/><link rel="canonical" 
href="https://docs.prediction.io/templates/complementarypurchase/dase/"/><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-3598c7d7.css" 
rel="stylesheet" type="text/css"/><!--[if lt IE 9]><script 
src="//cdnjs.cloudflare.com/ajax/libs/
 html5shiv/3.7.2/html5shiv.min.js"></script><![endif]--><script 
src="//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script><script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
-(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
-m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
-
-ga('create', 'UA-38306178-1', 'auto');
-ga('require', 'linkid', 'linkid.js');
-ga('send', 'pageview');</script><script>!function(){var 
analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment
 snippet included 
twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","group","track","ready","alias","page","once","off","on"];analytics.factory=function(t){return
 function(){var 
e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return 
analytics}};for(var t=0;t<analytics.methods.length;t++){var 
e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t){var
 
e=document.createElement("script");e.type="text/javascript";e.async=!0;e.src=("https:"===document.location.protocol?"https://":"http://";)+"cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var
 
n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(e,n)};analytics.SNIPPET_VERSION="3.0.1";
-  analytics.load("YlF3updaI3DR96hnNgSGpR3PPBUGDzt8");
-  analytics.page()
-  
}}();</script><script>RCX_CUSTOM_LIB="https://cdn.recontext.com/staging/rcx.min.js";;
-(function(b,d,a){b.RCX_OBJECT=a;a=b[a]||[];if(!a.snipV&&!a.libV){b.rcx=a;a.snipV="0.2.0";var
 
g=function(a,b,c,d){a[b]=a[b]||function(){c.push([d].concat(Array.prototype.slice.call(arguments)))}};b="init
 page track identify link setUserProperty unsetUserProperty".split(" ");for(var 
f=0;f<b.length;f++){var 
e,c;e=b[f];c=e.split(".");2==c.length?(a[c[0]]=a[c[0]]||[],g(a[c[0]],c[1],a,e)):g(a,e,a,e)}a=d.createElement("script");a.type="text/javascript";a.async=!0;a.src="undefined"!==typeof
 RCX_CUSTOM_LIB?
-RCX_CUSTOM_LIB:"https://cdn.recontext.com/rcx.min.js";d=d.getElementsByTagName("script")[0];d.parentNode.insertBefore(a,d)}})(window,document,"rcx");
-rcx.init("kTxFcI3IWdXYfRsh6uuYuej4qYl8m8LVMePM2hdIkM9YjHqkAFC6mqdqO9fpp8p9");
-rcx.page();</script><script>function t(e){analytics.identify(e); 
analytics.track("newsletter signup");
-  rcx.track("newsletter signup", { '_email': e 
});}</script><script>!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
-n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
-n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
-t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
-document,'script','//connect.facebook.net/en_US/fbevents.js');
-
-fbq('init', '1073028432707778');
-fbq('track', "PageView");</script><script 
src="//use.typekit.net/mut4mjx.js"></script><script>try{Typekit.load();}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://prediction.io/";><img 
alt="PredictionIO" id="logo" 
src="/images/logos/logo-ee2b9bb3.png"/></a></div><div id="menu-wrapper"><div 
id="header-nav-options-wrapper"><ul><li><a href="/">Install & Doc</a></li> 
<li><a href="/support">Support</a></li> </ul></div><div id="pill-wrapper"><a 
class="pill left" href="//templates.prediction.io/">TEMPLATES</a> <a 
class="pill right" href="//github.com/PredictionIO/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>DASE Components Explained (Complementary Purchase)</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></li></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 class="fina
 l" href="/cli/#engine-commands"><span>Engine Command-line 
Interface</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 cla
 ss="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="le
 vel-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>Engine Template Gallery</span></a><ul><li class="level-2"><a 
class="final" 
href="http://templates.prediction.io";><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="fina
 l" href="/resources/faq/"><span>FAQs</span></a></li><li class="level-2"><a 
class="final" href="/support/"><span>Community Support</span></a></li><li 
class="level-2"><a class="final" 
href="/support/#enterprise-support"><span>Enterprise 
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/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></ul></nav></div><div
 class="col-md-9 col-sm-12"><div class="content-header hidden-md 
hidden-lg"><div id="page-title"><h1>DASE Components Explained (Complementary 
Purchase)</h1></div></div><div id="table-of-content-wrapper"><h5>On this 
page</h5><aside id="table-of-contents"><ul> <li> <a href="#the-engine-design"
 >The Engine Design</a> </li> <li> <a href="#data">Data</a> </li> <li> <a 
 >href="#algorithm">Algorithm</a> </li> <li> <a href="#serving">Serving</a> 
 ></li> </ul> </aside><hr/><a id="edit-page-link" 
 >href="https://github.com/apache/incubator-predictionio/tree/livedoc/docs/manual/source/templates/complementarypurchase/dase.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="page-title"><h1>DASE 
 >Components Explained (Complementary Purchase)</h1></div></div><div 
 >class="content"><p>PredictionIO&#39;s DASE architecture brings the 
 >separation-of-concerns design principle to predictive engine development. 
 >DASE stands for the following components of an engine:</p> <ul> 
 ><li><strong>D</strong>ata - includes Data Source and Data Preparator</li> 
 ><li><strong>A</strong>lgorithm(s)</li> <li><strong>S</strong>erving</li> 
 ><li><strong>E</strong>valuator</li> </ul> <p><p>Let&#39;s look at the code 
 >and see how you ca
 n customize the engine you built from the Complementary Purchase Engine 
Template.</p><div class="alert-message note"><p>Evaluator will not be covered 
in this tutorial.</p></div></p><h2 id='the-engine-design' 
class='header-anchors'>The Engine Design</h2><p>As you can see from the Quick 
Start, <em>MyComplementaryPurchase</em> takes a JSON prediction query, e.g. 
<code>{ &quot;items&quot; : [&quot;s2i1&quot;], &quot;num&quot; : 3 }</code>, 
and return a JSON predicted result. In 
MyComplementaryPurchase/src/main/scala/<strong><em>Engine.scala</em></strong>, 
the <code>Query</code> case class defines the format of such 
<strong>query</strong>:</p><div class="highlight scala"><table 
style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: 
right"><pre class="lineno">1
+<!DOCTYPE html><html><head><title>DASE Components Explained (Complementary 
Purchase)</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="DASE Components Explained 
(Complementary Purchase)"/><link rel="canonical" 
href="https://docs.prediction.io/templates/complementarypurchase/dase/"/><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-3598c7d7.css" 
rel="stylesheet" type="text/css"/><script 
src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/h
 tml5shiv.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="header-nav-options-wrapper"><ul><li><a href="/">Install & Doc</a></li> 
<li><a href="/support">Support</a></li> </ul></div><div id="pill-wrapper"><a 
class="pill left" href="//templates.prediction.io/">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-gla
 ss-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>DASE Components 
Explained (Complementary Purchase)</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/dra
 wer-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></li></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 clas
 s="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="/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/evaluationdashboard/"><span>Evaluation 
Dashboard</span></a></li><li c
 lass="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>Engine Template Gallery</span></a><ul><li 
class="level-2"><a class="final" 
href="http://templates.prediction.io";><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>Community Support</span></a></li><li 
class="level-2"><a class="final" 
href="/support/#enterprise-support"><span>Enterprise 
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/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></ul></nav></div><div
 class="col-md-9 col-sm-12"><div class="content-header hidden-md 
hidden-lg"><div id="page-title"><h1>DASE Components Explained (Complementary 
Purchase)</h1></div></d
 iv><div id="table-of-content-wrapper"><h5>On this page</h5><aside 
id="table-of-contents"><ul> <li> <a href="#the-engine-design">The Engine 
Design</a> </li> <li> <a href="#data">Data</a> </li> <li> <a 
href="#algorithm">Algorithm</a> </li> <li> <a href="#serving">Serving</a> </li> 
</ul> </aside><hr/><a id="edit-page-link" 
href="https://github.com/apache/incubator-predictionio/tree/livedoc/docs/manual/source/templates/complementarypurchase/dase.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="page-title"><h1>DASE 
Components Explained (Complementary Purchase)</h1></div></div><div 
class="content"><p>PredictionIO&#39;s DASE architecture brings the 
separation-of-concerns design principle to predictive engine development. DASE 
stands for the following components of an engine:</p> <ul> 
<li><strong>D</strong>ata - includes Data Source and Data Preparator</li> 
<li><strong>A</strong>lgorithm(s)</li> 
 <li><strong>S</strong>erving</li> <li><strong>E</strong>valuator</li> </ul> 
<p><p>Let&#39;s look at the code and see how you can customize the engine you 
built from the Complementary Purchase Engine Template.</p><div 
class="alert-message note"><p>Evaluator will not be covered in this 
tutorial.</p></div></p><h2 id='the-engine-design' class='header-anchors'>The 
Engine Design</h2><p>As you can see from the Quick Start, 
<em>MyComplementaryPurchase</em> takes a JSON prediction query, e.g. <code>{ 
&quot;items&quot; : [&quot;s2i1&quot;], &quot;num&quot; : 3 }</code>, and 
return a JSON predicted result. In 
MyComplementaryPurchase/src/main/scala/<strong><em>Engine.scala</em></strong>, 
the <code>Query</code> case class defines the format of such 
<strong>query</strong>:</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</pre></td><td class="code"><pre><span class="k">case</span> <span 
class="k">class</span> <span class="nc">Query</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">num</span><span class="k">:</span> <span class="kt">Int</span><span 
class="o">)</span>
   <span class="k">extends</span> <span class="nc">Serializable</span>
 </pre></td></tr></tbody></table> </div> <p>The <code>PredictedResult</code> 
case class defines the format of <strong>predicted result</strong>, such 
as</p><div class="highlight json"><table style="border-spacing: 
0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre 
class="lineno">1
@@ -430,36 +408,9 @@ fbq('track', "PageView");</script><script 
src="//use.typekit.net/mut4mjx.js"></s
     <span class="n">predictedResults</span><span class="o">.</span><span 
class="n">head</span>
   <span class="o">}</span>
 <span class="o">}</span>
-</pre></td></tr></tbody></table> </div> <p>When you send a JSON query to <a 
href="http://localhost:8000/queries.json";>http://localhost:8000/queries.json</a>,
 <code>PredictedResult</code> from all models will be passed to 
<code>serve</code> as a sequence, i.e. 
<code>Seq[PredictedResult]</code>.</p><div class="alert-message note"><p>An 
engine can train multiple models if you specify more than one Algorithm 
component in <code>object ComplementaryPurchaseEngine</code> inside 
<strong><em>Engine.scala</em></strong> and the corresponding parameters in 
<strong><em>engine.json</em></strong>. Since only one <code>Algorithm</code> is 
implemented by default, this <code>Seq</code> contains one 
element.</p></div></div></div></div></div><footer><div class="container"><div 
class="seperator"></div><div class="row"><div class="col-md-4 col-md-push-8 
col-xs-12"><div class="subscription-form-wrapper"><h4>Subscribe to our 
Newsletter</h4><form class="ajax-form" id="subscribe-form" method="POST" 
action="h
 
ttps://script.google.com/macros/s/AKfycbwhzeKCQJjQ52eVAqNT_vcklH07OITUO7wzOMDXvK6EGAWgaZgF/exec"><input
 class="required underlined-input" type="email" placeholder="Your email 
address" name="subscription_email" id="subscription_email"/><input 
class="pill-button" value="SUBSCRIBE" type="submit" 
data-state-normal="SUBSCRIBE" data-state-sucess="SUBSCRIBED!" 
data-state-loading="SENDING..." 
onclick="t($('#subscription_email').val());"/><p 
class="result"></p></form></div></div><div class="col-md-2 col-md-pull-4 
col-xs-6 footer-link-column"><div 
class="footer-link-column-row"><h4>Community</h4><ul><li><a 
href="//docs.prediction.io/install/" target="blank">Download</a></li><li><a 
href="//docs.prediction.io/" target="blank">Docs</a></li><li><a 
href="//github.com/PredictionIO/PredictionIO" 
target="blank">GitHub</a></li><li><a 
href="//groups.google.com/forum/#!forum/predictionio-user" 
target="blank">Support Forum</a></li><li><a 
href="//stackoverflow.com/questions/tagged/predictionio" target="bl
 ank">Stackoverflow</a></li><li><a 
href="mailto:&#x73;&#x75;&#x70;&#x70;&#x6F;&#x72;&#x74;&#x40;&#x70;&#x72;&#x65;&#x64;&#x69;&#x63;&#x74;&#x69;&#x6F;&#x6E;&#x2E;&#x69;&#x6F;";
 target="blank">Contact Us</a></li></ul></div></div><div class="col-md-2 
col-md-pull-4 col-xs-6 footer-link-column"><div 
class="footer-link-column-row"><h4>Contribute</h4><ul><li><a 
href="//docs.prediction.io/community/contribute-code/" 
target="blank">Contribute</a></li><li><a 
href="//github.com/PredictionIO/PredictionIO" target="blank">Source 
Code</a></li><li><a href="//predictionio.atlassian.net/secure/Dashboard.jspa" 
target="blank">Bug Tracker</a></li><li><a 
href="//groups.google.com/forum/#!forum/predictionio-dev" 
target="blank">Contributors&#146; Forum</a></li><li><a 
href="//prediction.io/cla">Contributor Agreement</a></li><li><a 
href="//predictionio.uservoice.com/forums/219398-general/filters/top">Request 
Features</a></li></ul></div></div><div class="col-md-2 col-md-pull-4 col-xs-6 
footer-link-column"><div
  class="footer-link-column-row"><h4>Enterprise</h4><ul><li><a 
href="//docs.prediction.io/support/" target="blank">Support</a></li><li><a 
href="//prediction.io/enterprise">Enterprise</a></li><li><a 
href="//prediction.io/products/predictionio-enterprise">Services</a></li></ul></div><div
 class="footer-link-column-row"><h4>Connect</h4><ul><li><a 
href="//blog.prediction.io/" target="blank">Blog</a></li><li><a 
href="//predictionio.theresumator.com/" 
target="blank">Careers</a></li></ul></div></div><div class="col-md-2 
col-md-pull-4 col-xs-6 footer-link-column"><div 
class="footer-link-column-row"><h4>Partnership</h4><ul><li><a 
href="//prediction.io/partners/program">Partner 
Program</a></li></ul></div></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/Pred
 ictionIO/PredictionIO" data-style="mega" 
data-count-href="/PredictionIO/PredictionIO/stargazers" 
data-count-api="/repos/PredictionIO/PredictionIO#stargazers_count" 
data-count-aria-label="# stargazers on GitHub" aria-label="Star 
PredictionIO/PredictionIO on GitHub">Star</a> <a class="github-button" 
href="https://github.com/PredictionIO/PredictionIO/fork"; 
data-icon="octicon-git-branch" data-style="mega" 
data-count-href="/PredictionIO/PredictionIO/network" 
data-count-api="/repos/PredictionIO/PredictionIO#forks_count" 
data-count-aria-label="# forks on GitHub" aria-label="Fork 
PredictionIO/PredictionIO on GitHub">Fork</a> <script id="github-bjs" async="" 
defer="" src="https://buttons.github.io/buttons.js";></script><a 
href="//www.facebook.com/predictionio" target="blank"><img alt="PredictionIO on 
Twitter" src="/images/icons/twitter-ea9dc152.png"/></a> <a 
href="//twitter.com/predictionio" target="blank"><img alt="PredictionIO on 
Facebook" src="/images/icons/facebook-5c57939c.png"/></a> </d
 
iv></div></div></div></div></footer></div><script>(function(w,d,t,u,n,s,e){w['SwiftypeObject']=n;w[n]=w[n]||function(){
+</pre></td></tr></tbody></table> </div> <p>When you send a JSON query to <a 
href="http://localhost:8000/queries.json";>http://localhost:8000/queries.json</a>,
 <code>PredictedResult</code> from all models will be passed to 
<code>serve</code> as a sequence, i.e. 
<code>Seq[PredictedResult]</code>.</p><div class="alert-message note"><p>An 
engine can train multiple models if you specify more than one Algorithm 
component in <code>object ComplementaryPurchaseEngine</code> inside 
<strong><em>Engine.scala</em></strong> and the corresponding parameters in 
<strong><em>engine.json</em></strong>. Since only one <code>Algorithm</code> is 
implemented by default, this <code>Seq</code> contains one 
element.</p></div></div></div></div></div><footer><div class="container"><div 
class="seperator"></div><div class="row"><div class="col-md-6 col-xs-6 
footer-link-column"><div 
class="footer-link-column-row"><h4>Community</h4><ul><li><a 
href="//docs.prediction.io/install/" target="blank">Download</a></li><li>
 <a href="//docs.prediction.io/" target="blank">Docs</a></li><li><a 
href="//github.com/apache/incubator-predictionio" 
target="blank">GitHub</a></li><li><a 
href="mailto:user-subscr...@predictionio.incubator.apache.org"; 
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 
col-xs-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="blank">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:dev-subscr...@predictionio.incubator.apache.org"; 
target="blank">Subscribe to Development Mailing 
List</a></li></ul></div></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-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="//www.facebo
 ok.com/predictionio" target="blank"><img alt="PredictionIO on Twitter" 
src="/images/icons/twitter-ea9dc152.png"/></a> <a 
href="//twitter.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>var _qevents = _qevents 
|| [];
-(function() {
-var elem = document.createElement('script');
-elem.src = (document.location.protocol == "https:" ? "https://secure"; : 
"http://edge";) + ".quantserve.com/quant.js";
-elem.async = true;
-elem.type = "text/javascript";
-var scpt = document.getElementsByTagName('script')[0];
-scpt.parentNode.insertBefore(elem, scpt);
-})();
-_qevents.push({
-qacct:"p-stVMxuw8H5EPX"
-});</script><noscript><div style="display:none;"><img 
src="//pixel.quantserve.com/pixel/p-stVMxuw8H5EPX.gif" border="0" height="1" 
width="1" alt="Quantcast"/></div></noscript><script>adroll_adv_id = 
"CPSSMJFFZ5DDHITC2STA54";
-adroll_pix_id = "UWX4N2WIMJADVHJGOFTM44";
-(function () {
-    var _onload = function(){
-        if (document.readyState && 
!/loaded|complete/.test(document.readyState)){setTimeout(_onload, 10);return}
-        if (!window.__adroll_loaded){__adroll_loaded=true;setTimeout(_onload, 
50);return}
-        var scr = document.createElement("script");
-        var host = (("https:" == document.location.protocol) ? 
"https://s.adroll.com"; : "http://a.adroll.com";);
-        scr.setAttribute('async', 'true');
-        scr.type = "text/javascript";
-        scr.src = host + "/j/roundtrip.js";
-        ((document.getElementsByTagName('head') || [null])[0] ||
-            
document.getElementsByTagName('script')[0].parentNode).appendChild(scr);
-    };
-    if (window.addEventListener) {window.addEventListener('load', _onload, 
false);}
-    else {window.attachEvent('onload', _onload)}
-}());</script><script 
src="/javascripts/application-5a24945b.js"></script></body></html>
\ No newline at end of file
+_st('install','HaUfpXXV87xoB_zzCQ45');</script><script 
src="/javascripts/application-5a24945b.js"></script></body></html>
\ No newline at end of file


Reply via email to