blob: 1a0dba18ec4a4d9ff462fd13d3332215a7ba532c [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.4"/>
<title>MADlib: pca_project.sql_in Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
jax: ["input/TeX","output/HTML-CSS"],
});
</script><script src="../mathjax/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">MADlib
&#160;<span id="projectnumber">1.1</span> <span style="font-size:10pt; font-style:italic"><a href="../latest/./pca__project_8sql__in_source.html"> A newer version is available</a></span>
</div>
<div id="projectbrief">User Documentation</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.4 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>File&#160;Members</span></a></li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('pca__project_8sql__in_source.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Groups</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">pca_project.sql_in</div> </div>
</div><!--header-->
<div class="contents">
<a href="pca__project_8sql__in.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/* ----------------------------------------------------------------------- */</span><span class="comment">/**</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * @file pca_project.sql_in</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * @brief Principal Component Analysis Projection</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * @sa For a brief introduction to Principal Component Analysis, see the module</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * description \ref grp_pca.</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> */</span><span class="comment">/* ----------------------------------------------------------------------- */</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;</div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;m4_include(`SQLCommon.m4<span class="stringliteral">&#39;)</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="stringliteral"></span><span class="comment"></span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">@addtogroup grp_pca_project</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment">&lt;div class =&quot;toc&quot;&gt;&lt;b&gt;Contents&lt;/b&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">&lt;ul&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">&lt;li class=&quot;level1&quot;&gt;&lt;a href=&quot;#pca_train&quot;&gt;About&lt;/a&gt;&lt;/li&gt;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">&lt;li class=&quot;level1&quot;&gt;&lt;a href=&quot;#help&quot;&gt;Online Help&lt;/a&gt;&lt;/li&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">&lt;li class=&quot;level1&quot;&gt;&lt;a href=&quot;#train&quot;&gt;Training Function&lt;/a&gt;&lt;/li&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment">&lt;li class=&quot;level1&quot;&gt;&lt;a href=&quot;#output&quot;&gt;Output Tables&lt;/a&gt;&lt;/li&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">&lt;li class=&quot;level1&quot;&gt;&lt;a href=&quot;#examples&quot;&gt;Examples&lt;/a&gt;&lt;/li&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">&lt;li class=&quot;level1&quot;&gt;&lt;a href=&quot;#seealso&quot;&gt;See Also&lt;/a&gt;&lt;/li&gt;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment">&lt;li class=&quot;level1&quot;&gt;&lt;a href=&quot;#background&quot;&gt;Technical Background&lt;/a&gt;&lt;/li&gt;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment">&lt;/ul&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment">&lt;/div&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment">@anchor about</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment">@about</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment">Principal component projection is a mathematical procedure that projects high</span></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment">dimensional data onto a lower dimensional space. This lower dimensional space</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment">is defined by the \f$ k \f$ principal components with the highest variance in</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="comment">the training data. More details on the mathematics of PCA can be found in \ref</span></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="comment">pca_train and some details about the principal component projection calculations</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="comment">can be found in the \ref background &quot;Technical Background&quot;.</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="comment">@anchor help</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment">@par Online Help</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="comment">View short help messages using the following statements:</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="comment">@verbatim</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment">-- Summary of PCA projection</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="comment">madlib.pca_project()</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment">madlib.pca_project(&#39;?&#39;)</span></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="comment">madlib.pca_project(&#39;help&#39;)</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="comment">-- Projection function syntax and output table format</span></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment">madlib.pca_project(&#39;usage&#39;)</span></div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment">-- Summary of PCA projection with sparse matrices</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment">madlib.pca_sparse_project()</span></div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment">madlib.pca_sparse_project(&#39;?&#39;)</span></div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment">madlib.pca_sparse_project(&#39;help&#39;)</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment">-- Projection function syntax and output table format</span></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment">madlib.pca_sparse_project(&#39;usage&#39;)</span></div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment">@endverbatim</span></div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment">@anchor train</span></div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment">@par Training Function</span></div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment">The training functions have the following formats:</span></div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment">@verbatim</span></div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="comment">madlib.pca_project( source_table, pc_table, out_table, row_id,</span></div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="comment"> residual_table := NULL, result_summary_table := NULL)</span></div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment">@endverbatim</span></div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="comment">and</span></div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment">@verbatim</span></div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment">madlib.pca_sparse_project( source_table, pc_table, out_table, row_id,</span></div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment"> col_id, val_id, row_dim, col_dim, residual_table := NULL,</span></div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment"> result_summary_table := NULL)</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment">@endverbatim</span></div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment">\note This function is intended to operate on the principal component tables</span></div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment">generated by &lt;em&gt; pca_train &lt;/em&gt; or &lt;em&gt; pca_sparse_train&lt;/em&gt;. The MADlib PCA</span></div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment">functions generate a table containing the column-means in addition to a table</span></div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment">containing the principal components. If this table is not found by the MADlib</span></div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment">projection function, it will trigger an error. As long the principal component</span></div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment">tables are created with MADlib functions, then the column-means table will be</span></div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment">automatically found by the MADlib projection functions.</span></div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment">\note Because of the centering step in PCA projection (see \ref background &quot;Technical Background&quot;), sparse matrices almost always become dense during the projection process. Thus, this implementation automatically densifies sparse matrix input, and there should be no expected performance improvement in using sparse matrix input over dense matrix input.</span></div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment">@par Arguments</span></div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment">&lt;DL class=&quot;arglist&quot;&gt;</span></div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment">&lt;DT&gt;source_table&lt;/DT&gt;</span></div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="comment">&lt;DD&gt;Text value. Source table name.</span></div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="comment">Identical to \ref pca_train, the input data matrix should have \f$ N \f$ rows</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment">and \f$ M \f$ columns, where \f$ N \f$ is the number of data points, and \f$ M</span></div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment">\f$ is the number of features for each data point.</span></div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment">The input table for &lt;em&gt; pca_project &lt;/em&gt; is expected to be in the one of the</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment">two standard MADlib dense matrix formats, and the sparse input table for &lt;em&gt;</span></div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment">pca_sparse_project &lt;/em&gt; should be in the standard MADlib sparse matrix format.</span></div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="comment">These formats are described in the documentation for \ref pca_train.&lt;/DD&gt;</span></div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment">&lt;DT&gt;pc_table&lt;/DT&gt;</span></div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="comment">&lt;DD&gt;Text value. Table name for the table containing principal components. &lt;/DD&gt;</span></div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="comment">&lt;DT&gt;out_table&lt;/DT&gt;</span></div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="comment">&lt;DD&gt;Text value. Name of the table that will contain the low-dimensional representation of the input data.&lt;/DD&gt;</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="comment">&lt;DT&gt;row_id&lt;/DT&gt;</span></div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="comment">&lt;DD&gt;Text value. Column name containing the row IDs in the input source table.&lt;/DD&gt;</span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="comment">&lt;DT&gt;col_id&lt;/DT&gt;</span></div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="comment">&lt;DD&gt;Text value. Name of &#39;col_id&#39; column in sparse matrix representation (sparse matrices only). &lt;/DD&gt;</span></div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="comment">&lt;DT&gt;val_id&lt;/DT&gt;</span></div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="comment">&lt;DD&gt;Text value. Name of &#39;val_id&#39; column in sparse matrix representation (sparse matrices only). &lt;/DD&gt;</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="comment">&lt;DT&gt;row_dim&lt;/DT&gt;</span></div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="comment">&lt;DD&gt;Integer value. The number of rows in the sparse matrix (sparse matrices only). &lt;/DD&gt;</span></div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="comment">&lt;DT&gt;col_dim&lt;/DT&gt;</span></div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="comment">&lt;DD&gt;Integer value. The number of columns in the sparse matrix (sparse matrices only). &lt;/DD&gt;</span></div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="comment">&lt;DT&gt;residual_table&lt;/DT&gt;</span></div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="comment">&lt;DD&gt;Text value. Name of the optional residual table. Default: NULL.&lt;/DD&gt;</span></div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="comment">&lt;DT&gt;result_summary_table&lt;/DT&gt;</span></div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="comment">&lt;DD&gt;Text value. Name of the optional summary table. Default: NULL.&lt;/DD&gt;</span></div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;<span class="comment">&lt;/DL&gt;</span></div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="comment">@anchor output</span></div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="comment">@par Output Tables</span></div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="comment">The output is divided into three tables (two of which are optional).</span></div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="comment">The output table (&#39;&lt;em&gt;out_table&lt;/em&gt;&#39; above) encodes a dense matrix</span></div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="comment"> with the projection onto the principal components. The table has the following columns:</span></div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;<span class="comment">\par</span></div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="comment">&lt;DL class=&quot;arglist&quot;&gt;</span></div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="comment">&lt;DT&gt;row_id&lt;/DT&gt;</span></div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="comment">&lt;DD&gt;Row id of the output matrix.&lt;/DD&gt;</span></div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="comment">&lt;DT&gt;row_vec&lt;/DT&gt;</span></div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="comment">&lt;DD&gt;A vector containing elements in the row of the matrix.&lt;/DD&gt;</span></div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="comment">&lt;/DL&gt;</span></div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="comment">The residual table (&#39;&lt;em&gt;residual_table&lt;/em&gt;&#39; above) encodes a dense residual</span></div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="comment"> matrix. The table has the following columns:</span></div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;<span class="comment">\par</span></div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="comment">&lt;DL class=&quot;arglist&quot;&gt;</span></div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="comment">&lt;DT&gt;row_id&lt;/DT&gt;</span></div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="comment">&lt;DD&gt;Row id of the output matrix.&lt;/DD&gt;</span></div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="comment">&lt;DT&gt;row_vec&lt;/DT&gt;</span></div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="comment">&lt;DD&gt;A vector containing elements in the row of the residual matrix.&lt;/DD&gt;</span></div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="comment">&lt;/DL&gt;</span></div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;<span class="comment">The result summary table (&#39;&lt;em&gt;result_summary_table&lt;/em&gt;&#39; above) contains information about the performance time of the PCA projection. The table has the following columns:</span></div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="comment">\par</span></div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="comment">&lt;DL class=&quot;arglist&quot;&gt;</span></div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="comment">&lt;DT&gt;exec_time&lt;/DT&gt;</span></div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="comment">&lt;DD&gt;Wall clock time (ms) of the function.&lt;/DD&gt;</span></div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="comment">&lt;DT&gt;residual_norm&lt;/DT&gt;</span></div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="comment">&lt;DD&gt;Absolute error of the residuals.&lt;/DD&gt;</span></div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="comment">&lt;DT&gt;relative_residual_norm&lt;/DT&gt;</span></div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;<span class="comment">&lt;DD&gt;Relative error of the residuals.&lt;/DD&gt;</span></div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="comment">&lt;/DL&gt;</span></div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;<span class="comment">@anchor examples</span></div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="comment">@examp</span></div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="comment">-# Create the sample data.</span></div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="comment">@verbatim</span></div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="comment">sql&gt; DROP TABLE IF EXISTS mat;</span></div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;<span class="comment">sql&gt; CREATE TABLE mat (</span></div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;<span class="comment"> row_id integer,</span></div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="comment"> row_vec double precision[]</span></div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="comment">);</span></div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;<span class="comment">sql&gt; COPY mat (row_id, row_vec) FROM stdin;</span></div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;<span class="comment">1 {1,2,5}</span></div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;<span class="comment">0 {4,7,5}</span></div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;<span class="comment">3 {9,2,4}</span></div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;<span class="comment">2 {7,4,4}</span></div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;<span class="comment">5 {0,5,5}</span></div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;<span class="comment">4 {8,5,7}</span></div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;<span class="comment">\.</span></div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="comment">@endverbatim</span></div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="comment">-# Run the PCA function and keep only the top two PCs:</span></div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;<span class="comment">@verbatim</span></div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;<span class="comment">sql&gt; DROP TABLE IF EXISTS result_table;</span></div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="comment">sql&gt; SELECT pca_train(</span></div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="comment"> &#39;mat&#39;, -- name of the input table</span></div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;<span class="comment"> &#39;result_table&#39;, -- name of the output table</span></div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;<span class="comment"> &#39;row_id&#39;, -- column containing the matrix indices</span></div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;<span class="comment"> 2 -- Number of PCA components to compute</span></div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<span class="comment">);</span></div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="comment">@endverbatim</span></div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;<span class="comment">-# Project the original data into a low-dimensional representation.</span></div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;<span class="comment">@verbatim</span></div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;<span class="comment">sql&gt; DROP TABLE IF EXISTS residual_table, result_summary_table, out_table;</span></div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;<span class="comment">sql&gt; SELECT pca_project(</span></div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;<span class="comment"> &#39;mat&#39;, -- name of the input table</span></div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="comment"> &#39;result_table&#39;, -- name of the table containing the PCs</span></div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="comment"> &#39;out_table&#39; -- name of the table containing the projection</span></div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;<span class="comment"> &#39;row_id&#39;, -- column containing the input matrix indices</span></div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="comment"> &#39;residual_table&#39;, -- Name of the optional residual table</span></div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;<span class="comment"> &#39;result_summary_table&#39; -- Name of the optional summary table</span></div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;<span class="comment">);</span></div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;<span class="comment">@endverbatim</span></div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="comment">-# Check the error in the projection.</span></div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;<span class="comment">@verbatim</span></div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;<span class="comment">sql&gt; SELECT * FROM result_summary_table;</span></div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="comment"> exec_time | residual_norm | relative_residual_norm</span></div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="comment">---------------+---------------+------------------------</span></div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;<span class="comment"> 5685.40501595 | 2.19726255664 | 0.099262204234</span></div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;<span class="comment">@endverbatim</span></div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;<span class="comment">@anchor seealso</span></div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;<span class="comment">@sa File pca_project.sql_in documenting the SQL functions.</span></div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;<span class="comment">@sa grp_pca_train</span></div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="comment">@anchor background</span></div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;<span class="comment">@par Technical Background</span></div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;<span class="comment">Given a table containing some principal components \f$ \boldsymbol P \f$ and</span></div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;<span class="comment">some input data \f$ \boldsymbol X \f$, the low-dimensional representation \f$</span></div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;<span class="comment">{\boldsymbol X}&#39; \f$ is computed as \f{align*}{ {\boldsymbol {\hat{X}}} &amp; =</span></div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;<span class="comment">{\boldsymbol X} - \vec{e} \hat{x}^T \\ {\boldsymbol X}&#39; &amp; = {\boldsymbol</span></div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="comment">{\hat {X}}} {\boldsymbol P}. \f} where \f$\hat{x} \f$ is the column means of</span></div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;<span class="comment">\f$ \boldsymbol X \f$ and \f$ \vec{e} \f$ is the vector of all ones. This</span></div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;<span class="comment">step is equivalent to centering the data around the origin.</span></div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="comment">The residual table \f$ \boldsymbol R \f$ is a measure of how well the</span></div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="comment">low-dimensional representation approximates the true input data, and is computed</span></div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;<span class="comment">as \f[ {\boldsymbol R} = {\boldsymbol {\hat{X}}} - {\boldsymbol X}&#39; {\boldsymbol</span></div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;<span class="comment">P}^T. \f] A residual matrix with entries mostly close to zero indicates a good</span></div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;<span class="comment">representation.</span></div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="comment">The residual norm \f$ r \f$ is simply</span></div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;<span class="comment">\f[</span></div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;<span class="comment">r = \|{\boldsymbol R}\|_F</span></div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;<span class="comment">\f]</span></div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;<span class="comment">where \f$ \|\cdot\|_F \f$ is the Frobenius norm. The relative residual norm \f$ r&#39; \f$ is</span></div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;<span class="comment">\f[</span></div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;<span class="comment">r&#39; = \frac{ \|{\boldsymbol R}\|_F }{\|{\boldsymbol X}\|_F }</span></div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;<span class="comment">\f]</span></div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;<span class="comment">**/</span></div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;-- -----------------------------------------------------------------------</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;-- PCA projection for Dense matrices</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;-- -----------------------------------------------------------------------</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;/*</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;@brief Compute principal compoents for a dense matrix stored in a</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; database table</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;*/</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;CREATE OR REPLACE FUNCTION</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;MADLIB_SCHEMA.pca_project(</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; source_table TEXT, -- Source table name (dense matrix)</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; pc_table TEXT, -- Principal components table (output from pca module)</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; out_table TEXT, -- Output table name for the principal components</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; row_id TEXT, -- Column name for the ID for each row</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; residual_table TEXT, -- Residual table (Default: NULL)</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; result_summary_table TEXT -- Table name to store summary of results (Default: NULL)</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;)</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;RETURNS VOID AS $$</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;PythonFunction(pca, pca_project, pca_project)</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;$$ LANGUAGE plpythonu;</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;-- Overloaded functions for optional parameters</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;-- -----------------------------------------------------------------------</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;CREATE OR REPLACE FUNCTION</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;MADLIB_SCHEMA.pca_project(</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; source_table TEXT, -- Source table name (dense matrix)</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; pc_table TEXT, -- Principal components table (output from pca module)</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; out_table TEXT, -- Output table name for the principal components</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; row_id TEXT -- Column name for the ID for each row</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;)</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;RETURNS VOID AS $$</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; SELECT MADLIB_SCHEMA.pca_project($1, $2, $3, $4, NULL, NULL)</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;$$ LANGUAGE SQL;</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;CREATE OR REPLACE FUNCTION</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;MADLIB_SCHEMA.pca_project(</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; source_table TEXT, -- Source table name (dense matrix)</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; pc_table TEXT, -- Principal components table (output from pca module)</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; out_table TEXT, -- Output table name for the principal components</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; row_id TEXT, -- Column name for the ID for each row</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; residual_table TEXT -- Residual table (Default: NULL)</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;)</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160;RETURNS VOID AS $$</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; SELECT MADLIB_SCHEMA.pca_project($1, $2, $3, $4, $5, NULL)</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;$$ LANGUAGE SQL;</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;-- Help and usage functions</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;-----------------------------------------------------------------------------</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;CREATE OR REPLACE FUNCTION</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;MADLIB_SCHEMA.pca_project(</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; usage_string TEXT -- Usage string</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;)</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;RETURNS VARCHAR AS $$</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;PythonFunction(pca, pca_project, pca_project_help)</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;$$ LANGUAGE plpythonu;</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;CREATE OR REPLACE FUNCTION</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;MADLIB_SCHEMA.pca_project()</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;RETURNS VARCHAR AS $$</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;BEGIN</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; RETURN MADLIB_SCHEMA.pca_project(&#39;<span class="stringliteral">&#39;);</span></div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;<span class="stringliteral">END;</span></div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;<span class="stringliteral">$$ LANGUAGE plpgsql VOLATILE;</span></div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;<span class="stringliteral"></span></div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;<span class="stringliteral"></span></div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;<span class="stringliteral"></span></div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;<span class="stringliteral">-- -----------------------------------------------------------------------</span></div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;<span class="stringliteral">-- PCA sparse projection for dense matrices</span></div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;<span class="stringliteral">-- -----------------------------------------------------------------------</span></div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160;<span class="stringliteral">/*</span></div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;<span class="stringliteral">@brief Compute principal compoents for a dense matrix stored in a</span></div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;<span class="stringliteral"> database table</span></div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;<span class="stringliteral">*/</span></div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;<span class="stringliteral">CREATE OR REPLACE FUNCTION</span></div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;<span class="stringliteral">MADLIB_SCHEMA.pca_sparse_project(</span></div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;<span class="stringliteral"> source_table TEXT, -- Source table name (dense matrix)</span></div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;<span class="stringliteral"> pc_table TEXT, -- Principal components table (output from pca module)</span></div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;<span class="stringliteral"> out_table TEXT, -- Output table name for the principal components</span></div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;<span class="stringliteral"> row_id TEXT, -- Column name for the row id</span></div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;<span class="stringliteral"> col_id TEXT, -- Column name for the col id</span></div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;<span class="stringliteral"> val_id TEXT, -- Column name for the value id</span></div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;<span class="stringliteral"> row_dim INT4, -- Row dimension of the sparse matrix</span></div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;<span class="stringliteral"> col_dim INT4, -- Column dimension of the sparse matrix</span></div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;<span class="stringliteral"> residual_table TEXT, -- Residual table (Default: NULL)</span></div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;<span class="stringliteral"> result_summary_table TEXT -- Table name to store summary of results (Default: NULL)</span></div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;<span class="stringliteral">)</span></div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;<span class="stringliteral">RETURNS VOID AS $$</span></div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;<span class="stringliteral">PythonFunction(pca, pca_project, pca_sparse_project)</span></div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;<span class="stringliteral">$$ LANGUAGE plpythonu;</span></div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;<span class="stringliteral"></span></div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;<span class="stringliteral">-- Overloaded functions for optional parameters</span></div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;<span class="stringliteral">-- -----------------------------------------------------------------------</span></div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;<span class="stringliteral"></span></div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;<span class="stringliteral">CREATE OR REPLACE FUNCTION</span></div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160;<span class="stringliteral">MADLIB_SCHEMA.pca_sparse_project(</span></div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;<span class="stringliteral"> source_table TEXT, -- Source table name (dense matrix)</span></div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;<span class="stringliteral"> pc_table TEXT, -- Principal components table (output from pca module)</span></div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;<span class="stringliteral"> out_table TEXT, -- Output table name for the principal components</span></div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;<span class="stringliteral"> row_id TEXT, -- Column name for the row id</span></div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;<span class="stringliteral"> col_id TEXT, -- Column name for the col id</span></div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;<span class="stringliteral"> val_id TEXT, -- Column name for the value id</span></div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;<span class="stringliteral"> row_dim INT4, -- Row dimension of the sparse matrix</span></div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;<span class="stringliteral"> col_dim INT4 -- Column dimension of the sparse matrix</span></div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;<span class="stringliteral">)</span></div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;<span class="stringliteral">RETURNS VOID AS $$</span></div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;<span class="stringliteral"> SELECT MADLIB_SCHEMA.pca_sparse_project($1, $2, $3, $4, $5, $6, $7, $8, NULL, NULL)</span></div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;<span class="stringliteral">$$ LANGUAGE SQL;</span></div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;<span class="stringliteral"></span></div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;<span class="stringliteral">CREATE OR REPLACE FUNCTION</span></div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;<span class="stringliteral">MADLIB_SCHEMA.pca_sparse_project(</span></div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;<span class="stringliteral"> source_table TEXT, -- Source table name (dense matrix)</span></div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;<span class="stringliteral"> pc_table TEXT, -- Principal components table (output from pca module)</span></div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;<span class="stringliteral"> out_table TEXT, -- Output table name for the principal components</span></div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;<span class="stringliteral"> row_id TEXT, -- Column name for the row id</span></div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;<span class="stringliteral"> col_id TEXT, -- Column name for the col id</span></div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160;<span class="stringliteral"> val_id TEXT, -- Column name for the value id</span></div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160;<span class="stringliteral"> row_dim INT4, -- Row dimension of the sparse matrix</span></div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;<span class="stringliteral"> col_dim INT4, -- Column dimension of the sparse matrix</span></div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;<span class="stringliteral"> residual_table TEXT -- Residual table (Default: NULL)</span></div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;<span class="stringliteral">)</span></div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;<span class="stringliteral">RETURNS VOID AS $$</span></div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;<span class="stringliteral"> SELECT MADLIB_SCHEMA.pca_sparse_project($1, $2, $3, $4, $5, $6, $7, $8, $9, NULL)</span></div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;<span class="stringliteral">$$ LANGUAGE SQL;</span></div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;<span class="stringliteral"></span></div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;<span class="stringliteral"></span></div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;<span class="stringliteral">-- Help and usage functions</span></div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160;<span class="stringliteral">-----------------------------------------------------------------------------</span></div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;<span class="stringliteral">CREATE OR REPLACE FUNCTION</span></div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;<span class="stringliteral">MADLIB_SCHEMA.pca_sparse_project(</span></div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;<span class="stringliteral"> usage_string TEXT -- Usage string</span></div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;<span class="stringliteral">)</span></div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;<span class="stringliteral">RETURNS VARCHAR AS $$</span></div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;<span class="stringliteral">PythonFunction(pca, pca_project, pca_sparse_project_help)</span></div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;<span class="stringliteral">$$ LANGUAGE plpythonu;</span></div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;<span class="stringliteral"></span></div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;<span class="stringliteral"></span></div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;<span class="stringliteral">CREATE OR REPLACE FUNCTION</span></div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160;<span class="stringliteral">MADLIB_SCHEMA.pca_sparse_project()</span></div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;<span class="stringliteral">RETURNS VARCHAR AS $$</span></div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;<span class="stringliteral">BEGIN</span></div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;<span class="stringliteral"> RETURN MADLIB_SCHEMA.pca_sparse_project(&#39;</span><span class="stringliteral">&#39;);</span></div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;<span class="stringliteral">END;</span></div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;<span class="stringliteral">$$ LANGUAGE plpgsql VOLATILE;</span></div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;<span class="stringliteral"></span></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_efbcf68973d247bbf15f9eecae7f24e3.html">ports</a></li><li class="navelem"><a class="el" href="dir_a4a48839224ef8488facbffa8a397967.html">postgres</a></li><li class="navelem"><a class="el" href="dir_dc596537ad427a4d866006d1a3e1fe29.html">modules</a></li><li class="navelem"><a class="el" href="dir_9db0190ed89ab407304aec250d1ef64f.html">pca</a></li><li class="navelem"><a class="el" href="pca__project_8sql__in.html">pca_project.sql_in</a></li>
<li class="footer">Generated on Wed Aug 21 2013 16:09:52 for MADlib by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.4 </li>
</ul>
</div>
</body>
</html>