blob: ac6f49897dc4de3e50e02183f426a68975ffc1cd [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"/>
<title>MADlib: elastic_net.sql_in Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</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 src="../mathjax/MathJax.js">
MathJax.Hub.Config({
extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
jax: ["input/TeX","output/HTML-CSS"],
});
</script>
</head>
<body>
<div id="top"><!-- do not remove this div! -->
<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">0.7</span> <span style="font-size:10pt; font-style:italic"><a href="../latest/./elastic__net_8sql__in_source.html"> A newer version is available</a></span>
</div>
<div id="projectbrief">User Documentation</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- Generated by Doxygen 1.7.5.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="dynsections.js"></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>
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
initNavTree('elastic__net_8sql__in.html','');
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">elastic_net.sql_in</div> </div>
</div>
<div class="contents">
<a href="elastic__net_8sql__in.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* ----------------------------------------------------------------------- */</span><span class="comment">/** </span>
<a name="l00002"></a>00002 <span class="comment"> *</span>
<a name="l00003"></a>00003 <span class="comment"> * @file elastic_net.sql_in</span>
<a name="l00004"></a>00004 <span class="comment"> *</span>
<a name="l00005"></a>00005 <span class="comment"> * @brief SQL functions for elastic net regularization</span>
<a name="l00006"></a>00006 <span class="comment"> * @date July 2012</span>
<a name="l00007"></a>00007 <span class="comment"> *</span>
<a name="l00008"></a>00008 <span class="comment"> * @sa For a brief introduction to elastic net, see the module</span>
<a name="l00009"></a>00009 <span class="comment"> * description \ref grp_lasso.</span>
<a name="l00010"></a>00010 <span class="comment"> *</span>
<a name="l00011"></a>00011 <span class="comment"> */</span><span class="comment">/* ----------------------------------------------------------------------- */</span>
<a name="l00012"></a>00012
<a name="l00013"></a>00013 m4_include(`SQLCommon.m4<span class="stringliteral">&#39;) --&#39;</span>
<a name="l00014"></a>00014 <span class="comment"></span>
<a name="l00015"></a>00015 <span class="comment">/**</span>
<a name="l00016"></a>00016 <span class="comment">@addtogroup grp_elasticnet</span>
<a name="l00017"></a>00017 <span class="comment"></span>
<a name="l00018"></a>00018 <span class="comment">@about</span>
<a name="l00019"></a>00019 <span class="comment"></span>
<a name="l00020"></a>00020 <span class="comment">This module implements the elastic net regularization for regression problems.</span>
<a name="l00021"></a>00021 <span class="comment"></span>
<a name="l00022"></a>00022 <span class="comment">This method seeks to find a weight vector that, for any given training example set, minimizes:</span>
<a name="l00023"></a>00023 <span class="comment">\f[\min_{w \in R^N} L(w) + \lambda \left(\frac{(1-\alpha)}{2} \|w\|_2^2 + \alpha \|w\|_1 \right)\f]</span>
<a name="l00024"></a>00024 <span class="comment">where \f$L\f$ is the metric function that the user wants to minimize. Here \f$ \alpha \in [0,1] \f$</span>
<a name="l00025"></a>00025 <span class="comment">and \f$ lambda \geq 0 \f$. If \f$alpha = 0\f$, we have the ridge regularization (known also as Tikhonov regularization), and if \f$\alpha = 1\f$, we have the LASSO regularization.</span>
<a name="l00026"></a>00026 <span class="comment"></span>
<a name="l00027"></a>00027 <span class="comment">For the Gaussian response family (or linear model), we have</span>
<a name="l00028"></a>00028 <span class="comment">\f[L(\vec{w}) = \frac{1}{2}\left[\frac{1}{M} \sum_{m=1}^M (w^{t} x_m + w_{0} - y_m)^2 \right]</span>
<a name="l00029"></a>00029 <span class="comment">\f]</span>
<a name="l00030"></a>00030 <span class="comment"></span>
<a name="l00031"></a>00031 <span class="comment">For the Binomial response family (or logistic model), we have</span>
<a name="l00032"></a>00032 <span class="comment">\f[</span>
<a name="l00033"></a>00033 <span class="comment">L(\vec{w}) = \sum_{m=1}^M\left[y_m \log\left(1 + e^{-(w_0 +</span>
<a name="l00034"></a>00034 <span class="comment"> \vec{w}\cdot\vec{x}_m)}\right) + (1-y_m) \log\left(1 + e^{w_0 +</span>
<a name="l00035"></a>00035 <span class="comment"> \vec{w}\cdot\vec{x}_m}\right)\right]\ ,</span>
<a name="l00036"></a>00036 <span class="comment">\f]</span>
<a name="l00037"></a>00037 <span class="comment">where \f$y_m \in {0,1}\f$.</span>
<a name="l00038"></a>00038 <span class="comment"></span>
<a name="l00039"></a>00039 <span class="comment">To get better convergence, one can rescale the value of each element of x</span>
<a name="l00040"></a>00040 <span class="comment">\f[ x&#39; \leftarrow \frac{x - \bar{x}}{\sigma_x} \f]</span>
<a name="l00041"></a>00041 <span class="comment">and for Gaussian case we also let</span>
<a name="l00042"></a>00042 <span class="comment">\f[y&#39; \leftarrow y - \bar{y} \f]</span>
<a name="l00043"></a>00043 <span class="comment">and then minimize with the regularization terms.</span>
<a name="l00044"></a>00044 <span class="comment">At the end of the calculation, the orginal scales will be restored and an intercept term will be obtained at the same time as a by-product.</span>
<a name="l00045"></a>00045 <span class="comment"></span>
<a name="l00046"></a>00046 <span class="comment">Note that fitting after scaling is not equivalent to directly fitting.</span>
<a name="l00047"></a>00047 <span class="comment"></span>
<a name="l00048"></a>00048 <span class="comment">Right now, two optimizers are supported. The default one is FISTA, and the other is IGD. They have their own parameters, which can be specified in the &lt;em&gt;optimizer_params&lt;/em&gt; as a text array. For example, &#39;max_stepsize = 0.1, warmup = t, warmup_lambdas = [0.4, 0.3, 0.2]&#39;.</span>
<a name="l00049"></a>00049 <span class="comment"></span>
<a name="l00050"></a>00050 <span class="comment">&lt;b&gt;(1) FISTA&lt;/b&gt;</span>
<a name="l00051"></a>00051 <span class="comment"></span>
<a name="l00052"></a>00052 <span class="comment">Fast Iterative Shrinkage Thresholding Algorithm (FISTA) [2] has the following optimizer-specific parameters:</span>
<a name="l00053"></a>00053 <span class="comment"></span>
<a name="l00054"></a>00054 <span class="comment"> max_stepsize - default is 4.0</span>
<a name="l00055"></a>00055 <span class="comment"> eta - default is 2, if stepsize does not work</span>
<a name="l00056"></a>00056 <span class="comment"> stepsize/eta will be tried</span>
<a name="l00057"></a>00057 <span class="comment"> warmup - default is False</span>
<a name="l00058"></a>00058 <span class="comment"> warmup_lambdas - default is NULL, which means that lambda</span>
<a name="l00059"></a>00059 <span class="comment"> values will be automatically generated</span>
<a name="l00060"></a>00060 <span class="comment"> warmup_lambda_no - default is 15. How many lambda&#39;s are used in</span>
<a name="l00061"></a>00061 <span class="comment"> warm-up, will be overridden if warmup_lambdas </span>
<a name="l00062"></a>00062 <span class="comment"> is not NULL</span>
<a name="l00063"></a>00063 <span class="comment"> warmup_tolerance - default is the same as tolerance. The value</span>
<a name="l00064"></a>00064 <span class="comment"> of tolerance used during warmup. </span>
<a name="l00065"></a>00065 <span class="comment"> use_active_set - default is False. Whether to use active-set</span>
<a name="l00066"></a>00066 <span class="comment"> method to speed up the computation.</span>
<a name="l00067"></a>00067 <span class="comment"> activeset_tolerance - default is the same as tolerance. The</span>
<a name="l00068"></a>00068 <span class="comment"> value of tolerance used during active set</span>
<a name="l00069"></a>00069 <span class="comment"> calculation</span>
<a name="l00070"></a>00070 <span class="comment"> random_stepsize - default is False. Whether add some randomness</span>
<a name="l00071"></a>00071 <span class="comment"> to the step size. Sometimes, this can speed</span>
<a name="l00072"></a>00072 <span class="comment"> up the calculation.</span>
<a name="l00073"></a>00073 <span class="comment"></span>
<a name="l00074"></a>00074 <span class="comment">Here, backtracking for step size is used. At each iteration, we first try the &lt;em&gt;stepsize = max_stepsize&lt;/em&gt;, and if it does not work out, we then try a smaller step size &lt;em&gt;stepsize = stepsize / eta&lt;/em&gt;, where &lt;em&gt;eta&lt;/em&gt; must be larger than 1. At first sight, this seems to do repeated iterations for even one step, but it actually greatly increases the computation speed by using a larger step size and minimizes the total number of iterations. A careful choice of max_stepsize can decrease the computation time by more than 10 times.</span>
<a name="l00075"></a>00075 <span class="comment"></span>
<a name="l00076"></a>00076 <span class="comment">If &lt;em&gt;warmup&lt;/em&gt; is &lt;em&gt;True&lt;/em&gt;, a series of lambda values, which is strictly descent and ends at the lambda value that the user wants to calculate, will be used. The larger lambda gives very sparse solution, and the sparse solution again is used as the initial guess for the next lambda&#39;s solution, which will speed up the computation for the next lambda. For larger data sets, this can sometimes accelerate the whole computation and might be faster than computation on only one lambda value.</span>
<a name="l00077"></a>00077 <span class="comment"></span>
<a name="l00078"></a>00078 <span class="comment">If &lt;em&gt;use_active_set&lt;/em&gt; is &lt;em&gt;True&lt;/em&gt;, active-set method will be used to speed up the computation. Considerable speedup is obtained by organizing the iterations around the active set of features— those with nonzero coefficients. After a complete cycle through all the variables, we iterate on only the active set till convergence. If another complete cycle does not change the active set, we are done, otherwise the process is repeated.</span>
<a name="l00079"></a>00079 <span class="comment"></span>
<a name="l00080"></a>00080 <span class="comment">&lt;b&gt;(2) IGD&lt;/b&gt;</span>
<a name="l00081"></a>00081 <span class="comment"></span>
<a name="l00082"></a>00082 <span class="comment">Incremental Gradient Descent (IGD) or Stochastic Gradient Descent (SGD) [3] has the following optimizer-specific parameters:</span>
<a name="l00083"></a>00083 <span class="comment"></span>
<a name="l00084"></a>00084 <span class="comment"> stepsize - default is 0.01</span>
<a name="l00085"></a>00085 <span class="comment"> threshold - default is 1e-10. When a coefficient is really</span>
<a name="l00086"></a>00086 <span class="comment"> small, set it to be 0</span>
<a name="l00087"></a>00087 <span class="comment"> warmup - default is False</span>
<a name="l00088"></a>00088 <span class="comment"> warmup_lambdas - default is Null</span>
<a name="l00089"></a>00089 <span class="comment"> warmup_lambda_no - default is 15. How many lambda&#39;s are used in</span>
<a name="l00090"></a>00090 <span class="comment"> warm-up, will be overridden if warmup_lambdas </span>
<a name="l00091"></a>00091 <span class="comment"> is not NULL</span>
<a name="l00092"></a>00092 <span class="comment"> warmup_tolerance - default is the same as tolerance. The value</span>
<a name="l00093"></a>00093 <span class="comment"> of tolerance used during warmup. </span>
<a name="l00094"></a>00094 <span class="comment"> parallel - default is True. Run the computation on</span>
<a name="l00095"></a>00095 <span class="comment"> multiple segments or not.</span>
<a name="l00096"></a>00096 <span class="comment"></span>
<a name="l00097"></a>00097 <span class="comment">Due to the stochastic nature of SGD, we can only obtain very small values for the fitting coefficients. Therefore, &lt;em&gt;threshold&lt;/em&gt; is needed at the end of the computation to screen out those tiny values and just hard set them to be zeros. This is done as the following: (1) multiply each coefficient with the standard deviation of the corresponding feature (2) compute the average of absolute values of re-scaled coefficients (3) divide each rescaled coefficients with the average, and if the resulting absolute value is smaller than &lt;em&gt;threshold&lt;/em&gt;, set the original coefficient to be zero.</span>
<a name="l00098"></a>00098 <span class="comment"></span>
<a name="l00099"></a>00099 <span class="comment">SGD is in nature a sequential algorithm, and when running in a distributed way, each segment of the data runs its own SGD model, and the models are averaged to get a model for each iteration. This average might slow down the convergence speed, although we acquire the ability to process large data set on multiple machines. So this algorithm provides an option &lt;em&gt;parallel&lt;/em&gt; to let the user choose whether to do parallel computation.</span>
<a name="l00100"></a>00100 <span class="comment"></span>
<a name="l00101"></a>00101 <span class="comment">&lt;b&gt;Stopping Criteria&lt;/b&gt; Both optimizers compute the average difference between the coefficients of two consecutive iterations, and if the difference is smaller than &lt;em&gt;tolerance&lt;/em&gt; or the iteration number is larger than &lt;em&gt;max_iter&lt;/em&gt;, the computation stops.</span>
<a name="l00102"></a>00102 <span class="comment"></span>
<a name="l00103"></a>00103 <span class="comment">&lt;b&gt;Online Help&lt;/b&gt; The user can read short help messages by using any one of the following</span>
<a name="l00104"></a>00104 <span class="comment">\code</span>
<a name="l00105"></a>00105 <span class="comment">SELECT madlib.elastic_net_train();</span>
<a name="l00106"></a>00106 <span class="comment">SELECT madlib.elastic_net_train(&#39;usage&#39;);</span>
<a name="l00107"></a>00107 <span class="comment">SELECT madlib.elastic_net_train(&#39;predict&#39;);</span>
<a name="l00108"></a>00108 <span class="comment">SELECT madlib.elastic_net_train(&#39;gaussian&#39;);</span>
<a name="l00109"></a>00109 <span class="comment">SELECT madlib.elastic_net_train(&#39;binomial&#39;);</span>
<a name="l00110"></a>00110 <span class="comment">SELECT madlib.elastic_net_train(&#39;linear&#39;);</span>
<a name="l00111"></a>00111 <span class="comment">SELECT madlib.elastic_net_train(&#39;fista&#39;);</span>
<a name="l00112"></a>00112 <span class="comment">SELECT madlib.elastic_net_train(&#39;igd&#39;);</span>
<a name="l00113"></a>00113 <span class="comment">\endcode</span>
<a name="l00114"></a>00114 <span class="comment"></span>
<a name="l00115"></a>00115 <span class="comment">@input</span>
<a name="l00116"></a>00116 <span class="comment"></span>
<a name="l00117"></a>00117 <span class="comment">The &lt;b&gt;training examples&lt;/b&gt; is expected to be of the following form:</span>
<a name="l00118"></a>00118 <span class="comment">&lt;pre&gt;{TABLE|VIEW} &lt;em&gt;input_table&lt;/em&gt; (</span>
<a name="l00119"></a>00119 <span class="comment"> ...</span>
<a name="l00120"></a>00120 <span class="comment"> &lt;em&gt;independentVariables&lt;/em&gt; DOUBLE PRECISION[],</span>
<a name="l00121"></a>00121 <span class="comment"> &lt;em&gt;dependentVariable&lt;/em&gt; DOUBLE PRECISION,</span>
<a name="l00122"></a>00122 <span class="comment"> ...</span>
<a name="l00123"></a>00123 <span class="comment">)&lt;/pre&gt;</span>
<a name="l00124"></a>00124 <span class="comment"></span>
<a name="l00125"></a>00125 <span class="comment">Null values are not expected.</span>
<a name="l00126"></a>00126 <span class="comment"></span>
<a name="l00127"></a>00127 <span class="comment">@usage</span>
<a name="l00128"></a>00128 <span class="comment"></span>
<a name="l00129"></a>00129 <span class="comment">&lt;b&gt;Pre-run :&lt;/b&gt; Usually one gets better results and faster convergence using &lt;em&gt;standardize = True&lt;/em&gt;. &lt;b&gt;It is highly recommended to run &lt;em&gt;elastic_net_train&lt;/em&gt; function on a subset of the data with limited &lt;em&gt;max_iter&lt;/em&gt; before applying it onto the full data set with a large &lt;em&gt;max_iter&lt;/em&gt;. In the pre-run, the user can tweak the parameters to get the best performance and then apply the best set of parameters onto the whole data set.&lt;/b&gt;</span>
<a name="l00130"></a>00130 <span class="comment"></span>
<a name="l00131"></a>00131 <span class="comment">- Get the fitting coefficients for a linear model:</span>
<a name="l00132"></a>00132 <span class="comment"></span>
<a name="l00133"></a>00133 <span class="comment">&lt;pre&gt;</span>
<a name="l00134"></a>00134 <span class="comment"> SELECT {schema_madlib}.elastic_net_train (</span>
<a name="l00135"></a>00135 <span class="comment"> &#39;tbl_source&#39;, -- Data table</span>
<a name="l00136"></a>00136 <span class="comment"> &#39;tbl_result&#39;, -- Result table</span>
<a name="l00137"></a>00137 <span class="comment"> &#39;col_dep_var&#39;, -- Dependent variable, can be an expression or</span>
<a name="l00138"></a>00138 <span class="comment"> &#39;*&#39;</span>
<a name="l00139"></a>00139 <span class="comment"> &#39;col_ind_var&#39;, -- Independent variable, can be an expression</span>
<a name="l00140"></a>00140 <span class="comment"> &#39;regress_family&#39;, -- &#39;gaussian&#39; (or &#39;linear&#39;). &#39;binomial&#39;</span>
<a name="l00141"></a>00141 <span class="comment"> (or &#39;logistic&#39;) will be supported</span>
<a name="l00142"></a>00142 <span class="comment"> alpha, -- Elastic net control parameter, value in [0, 1] </span>
<a name="l00143"></a>00143 <span class="comment"> lambda_value, -- Regularization parameter, positive</span>
<a name="l00144"></a>00144 <span class="comment"> standardize, -- Whether to normalize the data. Default: True</span>
<a name="l00145"></a>00145 <span class="comment"> &#39;grouping_col&#39;, -- Group by which columns. Default: NULL</span>
<a name="l00146"></a>00146 <span class="comment"> &#39;optimizer&#39;, -- Name of optimizer. Default: &#39;fista&#39;</span>
<a name="l00147"></a>00147 <span class="comment"> &#39;optimizer_params&#39;,-- Optimizer parameters, delimited by comma. Default: NULL</span>
<a name="l00148"></a>00148 <span class="comment"> &#39;excluded&#39;, -- Column names excluded from &#39;*&#39;. Default: NULL</span>
<a name="l00149"></a>00149 <span class="comment"> max_iter, -- Maximum iteration number. Default: 10000</span>
<a name="l00150"></a>00150 <span class="comment"> tolerance -- Stopping criteria. Default: 1e-6</span>
<a name="l00151"></a>00151 <span class="comment"> );</span>
<a name="l00152"></a>00152 <span class="comment">&lt;/pre&gt;</span>
<a name="l00153"></a>00153 <span class="comment"></span>
<a name="l00154"></a>00154 <span class="comment">If &lt;em&gt;col_ind_var&lt;/em&gt; is &#39;*&#39;, then all columns of &lt;em&gt;tbl_source&lt;/em&gt; will be used as features except those listed in the &lt;em&gt;excluded&lt;/em&gt; string. If the dependent variable is a column name, it is then automatically excluded from the features. However, if the dependent variable is a valid Postgres expression, then the column names inside this expression are not excluded unless explicitly put into the &lt;em&gt;excluded&lt;/em&gt; list. So it is a good idea to put all column names involved in the dependent variable expression into the &lt;em&gt;excluded&lt;/em&gt; string.</span>
<a name="l00155"></a>00155 <span class="comment"></span>
<a name="l00156"></a>00156 <span class="comment">The &lt;em&gt;excluded&lt;/em&gt; string is a list of column names excluded from features delimited by comma. For example, &#39;col1, col2&#39;. If it is NULL or an empty string &#39;&#39;, no column is excluded.</span>
<a name="l00157"></a>00157 <span class="comment"></span>
<a name="l00158"></a>00158 <span class="comment">If &lt;em&gt;col_ind_var&lt;/em&gt; is a single column name, which is the array type, one can still use &lt;em&gt;excluded&lt;/em&gt;. For example, if &lt;em&gt;x&lt;/em&gt; is a column name, which is an array of size 1000, and the user wants to exclude the 100-th, 200-th and 301-th elements of the array, he can set &lt;em&gt;excluded&lt;/em&gt; to be &#39;100, 200, 301&#39;.</span>
<a name="l00159"></a>00159 <span class="comment"></span>
<a name="l00160"></a>00160 <span class="comment">Both &lt;em&gt;col_dep_var&lt;/em&gt; and &lt;em&gt;col_ind_var&lt;/em&gt; can be valid Postgres expression. For example, &lt;em&gt;col_dep_var = &#39;log(y+1)&#39;&lt;/em&gt;, and &lt;em&gt;col_ind_var = &#39;array[exp(x[1]), x[2], 1/(1+x[3])]&#39;&lt;/em&gt; etc. In the binomial case, one can set &lt;em&gt;col_dep_var = &#39;y &lt; 0&#39;&lt;/em&gt; etc.</span>
<a name="l00161"></a>00161 <span class="comment"></span>
<a name="l00162"></a>00162 <span class="comment"> Output:</span>
<a name="l00163"></a>00163 <span class="comment"> &lt;pre&gt; family | features | features_selected | coef_nonzero | coef_all | intercept | log_likelihood | standardize | iteration_run</span>
<a name="l00164"></a>00164 <span class="comment"> ------------------+------------+------------+------------+--------------+-------------+--------+--------+-----------</span>
<a name="l00165"></a>00165 <span class="comment"> ...</span>
<a name="l00166"></a>00166 <span class="comment"> &lt;/pre&gt;</span>
<a name="l00167"></a>00167 <span class="comment"></span>
<a name="l00168"></a>00168 <span class="comment">where &lt;em&gt;log_likelihood&lt;/em&gt; is just the negative value of the first equation above (up to a constant depending on the data set).</span>
<a name="l00169"></a>00169 <span class="comment"></span>
<a name="l00170"></a>00170 <span class="comment">- Get the \b prediction on a data set using a linear model:</span>
<a name="l00171"></a>00171 <span class="comment">&lt;pre&gt;</span>
<a name="l00172"></a>00172 <span class="comment">SELECT madlib.elastic_net_predict(</span>
<a name="l00173"></a>00173 <span class="comment"> &#39;&lt;em&gt;regress_family&lt;/em&gt;&#39;, -- Response type, &#39;gaussian&#39; (&#39;linear&#39;) or &#39;binomial&#39; (&#39;logistic&#39;)</span>
<a name="l00174"></a>00174 <span class="comment"> &lt;em&gt;coefficients&lt;/em&gt;, -- fitting coefficients</span>
<a name="l00175"></a>00175 <span class="comment"> &lt;em&gt;intercept&lt;/em&gt;, -- fitting intercept</span>
<a name="l00176"></a>00176 <span class="comment"> &lt;em&gt;independent Variables&lt;/em&gt; </span>
<a name="l00177"></a>00177 <span class="comment">) from tbl_data, tbl_train_result;</span>
<a name="l00178"></a>00178 <span class="comment">&lt;/pre&gt;</span>
<a name="l00179"></a>00179 <span class="comment">The above function returns a double value for each data point.</span>
<a name="l00180"></a>00180 <span class="comment">When predicting with binomial models, the return value is 1 </span>
<a name="l00181"></a>00181 <span class="comment">if the predicted result is True, and 0 if the prediction is </span>
<a name="l00182"></a>00182 <span class="comment">False. </span>
<a name="l00183"></a>00183 <span class="comment"></span>
<a name="l00184"></a>00184 <span class="comment">&lt;b&gt;Or&lt;/b&gt;</span>
<a name="l00185"></a>00185 <span class="comment">(1)</span>
<a name="l00186"></a>00186 <span class="comment">&lt;pre&gt;</span>
<a name="l00187"></a>00187 <span class="comment">SELECT madlib.elastic_net_gaussian_predict ( </span>
<a name="l00188"></a>00188 <span class="comment"> coefficients, intercept, ind_var </span>
<a name="l00189"></a>00189 <span class="comment">) FROM tbl_result, tbl_new_source LIMIT 10;</span>
<a name="l00190"></a>00190 <span class="comment">&lt;/pre&gt;</span>
<a name="l00191"></a>00191 <span class="comment"></span>
<a name="l00192"></a>00192 <span class="comment">(2)</span>
<a name="l00193"></a>00193 <span class="comment">&lt;pre&gt;</span>
<a name="l00194"></a>00194 <span class="comment">SELECT madlib.elastic_net_binomial_predict ( </span>
<a name="l00195"></a>00195 <span class="comment"> coefficients, intercept, ind_var </span>
<a name="l00196"></a>00196 <span class="comment">) FROM tbl_result, tbl_new_source LIMIT 10;</span>
<a name="l00197"></a>00197 <span class="comment">&lt;/pre&gt;</span>
<a name="l00198"></a>00198 <span class="comment"> </span>
<a name="l00199"></a>00199 <span class="comment">This returns 10 BOOLEAN values. </span>
<a name="l00200"></a>00200 <span class="comment"> </span>
<a name="l00201"></a>00201 <span class="comment">(3)</span>
<a name="l00202"></a>00202 <span class="comment">&lt;pre&gt;</span>
<a name="l00203"></a>00203 <span class="comment">SELECT madlib.elastic_net_binomial_prob ( </span>
<a name="l00204"></a>00204 <span class="comment"> coefficients, intercept, ind_var </span>
<a name="l00205"></a>00205 <span class="comment">) FROM tbl_result, tbl_new_source LIMIT 10;</span>
<a name="l00206"></a>00206 <span class="comment">&lt;/pre&gt;</span>
<a name="l00207"></a>00207 <span class="comment"> </span>
<a name="l00208"></a>00208 <span class="comment">This returns 10 probability values for True class. </span>
<a name="l00209"></a>00209 <span class="comment"></span>
<a name="l00210"></a>00210 <span class="comment">&lt;b&gt;Or&lt;/b&gt; The user can use another prediction function which stores the prediction result in a table. This is usefule if the user wants to use elastic net together with general cross validation function.</span>
<a name="l00211"></a>00211 <span class="comment">&lt;pre&gt;</span>
<a name="l00212"></a>00212 <span class="comment">SELECT madlib.elastic_net_predict(</span>
<a name="l00213"></a>00213 <span class="comment"> &#39;&lt;em&gt;tbl_train_result&lt;/em&gt;&#39;,</span>
<a name="l00214"></a>00214 <span class="comment"> &#39;&lt;em&gt;tbl_data&lt;/em&gt;&#39;,</span>
<a name="l00215"></a>00215 <span class="comment"> &#39;&lt;em&gt;col_id&lt;/em&gt;&#39;, -- ID associated with each row</span>
<a name="l00216"></a>00216 <span class="comment"> &#39;&lt;em&gt;tbl_predict&lt;/em&gt;&#39; -- Prediction result</span>
<a name="l00217"></a>00217 <span class="comment">);</span>
<a name="l00218"></a>00218 <span class="comment">&lt;/pre&gt;</span>
<a name="l00219"></a>00219 <span class="comment"></span>
<a name="l00220"></a>00220 <span class="comment">@examp</span>
<a name="l00221"></a>00221 <span class="comment"></span>
<a name="l00222"></a>00222 <span class="comment">-# Prepare an input table/view:</span>
<a name="l00223"></a>00223 <span class="comment">\code</span>
<a name="l00224"></a>00224 <span class="comment">CREATE TABLE en_data (</span>
<a name="l00225"></a>00225 <span class="comment"> ind_var DOUBLE PRECISION[],</span>
<a name="l00226"></a>00226 <span class="comment"> dep_var DOUBLE PRECISION</span>
<a name="l00227"></a>00227 <span class="comment">);</span>
<a name="l00228"></a>00228 <span class="comment">\endcode </span>
<a name="l00229"></a>00229 <span class="comment">-# Populate the input table with some data, which should be well-conditioned, e.g.:</span>
<a name="l00230"></a>00230 <span class="comment">\code</span>
<a name="l00231"></a>00231 <span class="comment">mydb=# INSERT INTO lasso_data values ({1, 1}, 0.89);</span>
<a name="l00232"></a>00232 <span class="comment">mydb=# INSERT INTO lasso_data values ({0.67, -0.06}, 0.3);</span>
<a name="l00233"></a>00233 <span class="comment">...</span>
<a name="l00234"></a>00234 <span class="comment">mydb=# INSERT INTO lasso_data values ({0.15, -1.3}, -1.3);</span>
<a name="l00235"></a>00235 <span class="comment">\endcode </span>
<a name="l00236"></a>00236 <span class="comment">-# learn coefficients, e.g.: </span>
<a name="l00237"></a>00237 <span class="comment">\code</span>
<a name="l00238"></a>00238 <span class="comment">mydb=# SELECT madlib.elastic_net_train(&#39;en_data&#39;, &#39;en_model&#39;, &#39;ind_var&#39;, &#39;dep_var&#39;, 0.5, 0.1,</span>
<a name="l00239"></a>00239 <span class="comment"> True, &#39;linear&#39;, &#39;igd&#39;, &#39;stepsize = 0.1, warmup = t,</span>
<a name="l00240"></a>00240 <span class="comment"> warmup_lambda_no=3, warmup_lambdas = [0.4, 0.3, 0.2, 0.1],</span>
<a name="l00241"></a>00241 <span class="comment"> parallel=t&#39;, &#39;1&#39;, 10000, 1e-6);</span>
<a name="l00242"></a>00242 <span class="comment">\endcode</span>
<a name="l00243"></a>00243 <span class="comment">\code</span>
<a name="l00244"></a>00244 <span class="comment">mydb=# select madlib.elastic_net_predict(family, coef_all, intercept, ind_var)</span>
<a name="l00245"></a>00245 <span class="comment">mydb-# from en_data, en_model;</span>
<a name="l00246"></a>00246 <span class="comment">\endcode</span>
<a name="l00247"></a>00247 <span class="comment"></span>
<a name="l00248"></a>00248 <span class="comment">@literature</span>
<a name="l00249"></a>00249 <span class="comment"></span>
<a name="l00250"></a>00250 <span class="comment">[1] Elastic net regularization. http://en.wikipedia.org/wiki/Elastic_net_regularization</span>
<a name="l00251"></a>00251 <span class="comment"></span>
<a name="l00252"></a>00252 <span class="comment">[2] Beck, A. and M. Teboulle (2009), A fast iterative shrinkage-thresholding algorothm for linear inverse problems. SIAM J. on Imaging Sciences 2(1), 183-202. </span>
<a name="l00253"></a>00253 <span class="comment"></span>
<a name="l00254"></a>00254 <span class="comment">[3] Shai Shalev-Shwartz and Ambuj Tewari, Stochastic Methods for l1 Regularized Loss Minimization. Proceedings of the 26th International Conference on Machine Learning, Montreal, Canada, 2009. </span>
<a name="l00255"></a>00255 <span class="comment"></span>
<a name="l00256"></a>00256 <span class="comment">@sa File elastic_net.sql_in documenting the SQL functions.</span>
<a name="l00257"></a>00257 <span class="comment"></span>
<a name="l00258"></a>00258 <span class="comment">*/</span>
<a name="l00259"></a>00259
<a name="l00260"></a>00260 ------------------------------------------------------------------------
<a name="l00261"></a>00261 <span class="comment"></span>
<a name="l00262"></a>00262 <span class="comment">/**</span>
<a name="l00263"></a>00263 <span class="comment"> * @brief Interface for elastic net</span>
<a name="l00264"></a>00264 <span class="comment"> *</span>
<a name="l00265"></a>00265 <span class="comment"> * @param tbl_source Name of data source table</span>
<a name="l00266"></a>00266 <span class="comment"> * @param tbl_result Name of the table to store the results</span>
<a name="l00267"></a>00267 <span class="comment"> * @param col_ind_var Name of independent variable column, independent variable is an array</span>
<a name="l00268"></a>00268 <span class="comment"> * @param col_dep_var Name of dependent variable column</span>
<a name="l00269"></a>00269 <span class="comment"> * @param regress_family Response type (gaussian or binomial)</span>
<a name="l00270"></a>00270 <span class="comment"> * @param alpha The elastic net parameter, [0, 1]</span>
<a name="l00271"></a>00271 <span class="comment"> * @param lambda_value The regularization parameter</span>
<a name="l00272"></a>00272 <span class="comment"> * @param standardize Whether to normalize the variables (default True)</span>
<a name="l00273"></a>00273 <span class="comment"> * @param grouping_col List of columns on which to apply grouping </span>
<a name="l00274"></a>00274 <span class="comment"> * (currently only a placeholder)</span>
<a name="l00275"></a>00275 <span class="comment"> * @param optimizer The optimization algorithm, &#39;fista&#39; or &#39;igd&#39;. Default is &#39;fista&#39;</span>
<a name="l00276"></a>00276 <span class="comment"> * @param optimizer_params Parameters of the above optimizer, </span>
<a name="l00277"></a>00277 <span class="comment"> * the format is &#39;arg = value, ...&#39;. Default is NULL</span>
<a name="l00278"></a>00278 <span class="comment"> * @param exclude Which columns to exclude? Default is NULL</span>
<a name="l00279"></a>00279 <span class="comment"> * (applicable only if col_ind_var is set as * or a column of array,</span>
<a name="l00280"></a>00280 <span class="comment"> * column names as &#39;col1, col2, ...&#39; if col_ind_var is &#39;*&#39;;</span>
<a name="l00281"></a>00281 <span class="comment"> * element indices as &#39;1,2,3, ...&#39; if col_ind_var is a column of array)</span>
<a name="l00282"></a>00282 <span class="comment"> * @param max_iter Maximum number of iterations to run the algorithm</span>
<a name="l00283"></a>00283 <span class="comment"> * (default value of 10000)</span>
<a name="l00284"></a>00284 <span class="comment"> * @param tolerance Iteration stopping criteria. Default is 1e-6</span>
<a name="l00285"></a>00285 <span class="comment"> */</span>
<a name="l00286"></a>00286 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_train (
<a name="l00287"></a>00287 tbl_source TEXT,
<a name="l00288"></a>00288 tbl_result TEXT,
<a name="l00289"></a>00289 col_dep_var TEXT,
<a name="l00290"></a>00290 col_ind_var TEXT,
<a name="l00291"></a>00291 regress_family TEXT,
<a name="l00292"></a>00292 alpha DOUBLE PRECISION,
<a name="l00293"></a>00293 lambda_value DOUBLE PRECISION,
<a name="l00294"></a>00294 standardize BOOLEAN,
<a name="l00295"></a>00295 grouping_col TEXT,
<a name="l00296"></a>00296 optimizer TEXT,
<a name="l00297"></a>00297 optimizer_params TEXT,
<a name="l00298"></a>00298 excluded TEXT,
<a name="l00299"></a>00299 max_iter INTEGER,
<a name="l00300"></a>00300 tolerance DOUBLE PRECISION
<a name="l00301"></a>00301 ) RETURNS VOID AS $$
<a name="l00302"></a>00302 PythonFunction(elastic_net, elastic_net, <a class="code" href="elastic__net_8sql__in.html#a735038a5090c112505c740a90a203e83" title="Interface for elastic net.">elastic_net_train</a>)
<a name="l00303"></a>00303 $$ LANGUAGE plpythonu;
<a name="l00304"></a>00304
<a name="l00305"></a>00305 ------------------------------------------------------------------------
<a name="l00306"></a>00306 -- Overloaded functions
<a name="l00307"></a>00307 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_train (
<a name="l00308"></a><a class="code" href="elastic__net_8sql__in.html#a735038a5090c112505c740a90a203e83">00308</a> tbl_source TEXT,
<a name="l00309"></a>00309 tbl_result TEXT,
<a name="l00310"></a>00310 col_ind_var TEXT,
<a name="l00311"></a>00311 col_dep_var TEXT,
<a name="l00312"></a>00312 regress_family TEXT,
<a name="l00313"></a>00313 alpha DOUBLE PRECISION,
<a name="l00314"></a>00314 lambda_value DOUBLE PRECISION,
<a name="l00315"></a>00315 standardization BOOLEAN,
<a name="l00316"></a>00316 grouping_columns TEXT,
<a name="l00317"></a>00317 optimizer TEXT,
<a name="l00318"></a>00318 optimizer_params TEXT,
<a name="l00319"></a>00319 excluded TEXT,
<a name="l00320"></a>00320 max_iter INTEGER
<a name="l00321"></a>00321 ) RETURNS VOID AS $$
<a name="l00322"></a>00322 BEGIN
<a name="l00323"></a>00323 PERFORM MADLIB_SCHEMA.elastic_net_train($1, $2, $3, $4, $5, $6, $7, $8,
<a name="l00324"></a>00324 $9, $10, $11, $12, $13, 1e-6);
<a name="l00325"></a>00325 END;
<a name="l00326"></a>00326 $$ LANGUAGE plpgsql VOLATILE;
<a name="l00327"></a>00327
<a name="l00328"></a>00328 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_train (
<a name="l00329"></a>00329 tbl_source TEXT,
<a name="l00330"></a>00330 tbl_result TEXT,
<a name="l00331"></a>00331 col_ind_var TEXT,
<a name="l00332"></a>00332 col_dep_var TEXT,
<a name="l00333"></a>00333 regress_family TEXT,
<a name="l00334"></a>00334 alpha DOUBLE PRECISION,
<a name="l00335"></a>00335 lambda_value DOUBLE PRECISION,
<a name="l00336"></a>00336 standardization BOOLEAN,
<a name="l00337"></a>00337 grouping_columns TEXT,
<a name="l00338"></a>00338 optimizer TEXT,
<a name="l00339"></a>00339 optimizer_params TEXT,
<a name="l00340"></a>00340 excluded TEXT
<a name="l00341"></a>00341 ) RETURNS VOID AS $$
<a name="l00342"></a>00342 BEGIN
<a name="l00343"></a>00343 PERFORM MADLIB_SCHEMA.elastic_net_train($1, $2, $3, $4, $5, $6, $7, $8,
<a name="l00344"></a>00344 $9, $10, $11, $12, 10000);
<a name="l00345"></a>00345 END;
<a name="l00346"></a>00346 $$ LANGUAGE plpgsql VOLATILE;
<a name="l00347"></a>00347
<a name="l00348"></a>00348 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_train (
<a name="l00349"></a>00349 tbl_source TEXT,
<a name="l00350"></a>00350 tbl_result TEXT,
<a name="l00351"></a>00351 col_ind_var TEXT,
<a name="l00352"></a>00352 col_dep_var TEXT,
<a name="l00353"></a>00353 regress_family TEXT,
<a name="l00354"></a>00354 alpha DOUBLE PRECISION,
<a name="l00355"></a>00355 lambda_value DOUBLE PRECISION,
<a name="l00356"></a>00356 standardization BOOLEAN,
<a name="l00357"></a>00357 grouping_columns TEXT,
<a name="l00358"></a>00358 optimizer TEXT,
<a name="l00359"></a>00359 optimizer_params TEXT
<a name="l00360"></a>00360 ) RETURNS VOID AS $$
<a name="l00361"></a>00361 BEGIN
<a name="l00362"></a>00362 PERFORM MADLIB_SCHEMA.elastic_net_train($1, $2, $3, $4, $5, $6, $7, $8,
<a name="l00363"></a>00363 $9, $10, $11, NULL);
<a name="l00364"></a>00364 END;
<a name="l00365"></a>00365 $$ LANGUAGE plpgsql VOLATILE;
<a name="l00366"></a>00366
<a name="l00367"></a>00367 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_train (
<a name="l00368"></a>00368 tbl_source TEXT,
<a name="l00369"></a>00369 tbl_result TEXT,
<a name="l00370"></a>00370 col_ind_var TEXT,
<a name="l00371"></a>00371 col_dep_var TEXT,
<a name="l00372"></a>00372 regress_family TEXT,
<a name="l00373"></a>00373 alpha DOUBLE PRECISION,
<a name="l00374"></a>00374 lambda_value DOUBLE PRECISION,
<a name="l00375"></a>00375 standardization BOOLEAN,
<a name="l00376"></a>00376 grouping_columns TEXT,
<a name="l00377"></a>00377 optimizer TEXT
<a name="l00378"></a>00378 ) RETURNS VOID AS $$
<a name="l00379"></a>00379 BEGIN
<a name="l00380"></a>00380 PERFORM MADLIB_SCHEMA.elastic_net_train($1, $2, $3, $4, $5, $6, $7, $8,
<a name="l00381"></a>00381 $9, $10, NULL::TEXT);
<a name="l00382"></a>00382 END;
<a name="l00383"></a>00383 $$ LANGUAGE plpgsql VOLATILE;
<a name="l00384"></a>00384
<a name="l00385"></a>00385 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_train (
<a name="l00386"></a>00386 tbl_source TEXT,
<a name="l00387"></a>00387 tbl_result TEXT,
<a name="l00388"></a>00388 col_ind_var TEXT,
<a name="l00389"></a>00389 col_dep_var TEXT,
<a name="l00390"></a>00390 regress_family TEXT,
<a name="l00391"></a>00391 alpha DOUBLE PRECISION,
<a name="l00392"></a>00392 lambda_value DOUBLE PRECISION,
<a name="l00393"></a>00393 standardization BOOLEAN,
<a name="l00394"></a>00394 grouping_columns TEXT
<a name="l00395"></a>00395 ) RETURNS VOID AS $$
<a name="l00396"></a>00396 BEGIN
<a name="l00397"></a>00397 PERFORM MADLIB_SCHEMA.elastic_net_train($1, $2, $3, $4, $5, $6, $7, $8,
<a name="l00398"></a>00398 $9, <span class="stringliteral">&#39;FISTA&#39;</span>);
<a name="l00399"></a>00399 END;
<a name="l00400"></a>00400 $$ LANGUAGE plpgsql VOLATILE;
<a name="l00401"></a>00401
<a name="l00402"></a>00402 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_train (
<a name="l00403"></a>00403 tbl_source TEXT,
<a name="l00404"></a>00404 tbl_result TEXT,
<a name="l00405"></a>00405 col_ind_var TEXT,
<a name="l00406"></a>00406 col_dep_var TEXT,
<a name="l00407"></a>00407 regress_family TEXT,
<a name="l00408"></a>00408 alpha DOUBLE PRECISION,
<a name="l00409"></a>00409 lambda_value DOUBLE PRECISION,
<a name="l00410"></a>00410 standardization BOOLEAN
<a name="l00411"></a>00411 ) RETURNS VOID AS $$
<a name="l00412"></a>00412 BEGIN
<a name="l00413"></a>00413 PERFORM MADLIB_SCHEMA.elastic_net_train($1, $2, $3, $4, $5, $6, $7, $8,
<a name="l00414"></a>00414 NULL);
<a name="l00415"></a>00415 END;
<a name="l00416"></a>00416 $$ LANGUAGE plpgsql VOLATILE;
<a name="l00417"></a>00417
<a name="l00418"></a>00418 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_train (
<a name="l00419"></a>00419 tbl_source TEXT,
<a name="l00420"></a>00420 tbl_result TEXT,
<a name="l00421"></a>00421 col_ind_var TEXT,
<a name="l00422"></a>00422 col_dep_var TEXT,
<a name="l00423"></a>00423 regress_family TEXT,
<a name="l00424"></a>00424 alpha DOUBLE PRECISION,
<a name="l00425"></a>00425 lambda_value DOUBLE PRECISION
<a name="l00426"></a>00426 ) RETURNS VOID AS $$
<a name="l00427"></a>00427 BEGIN
<a name="l00428"></a>00428 PERFORM MADLIB_SCHEMA.elastic_net_train($1, $2, $3, $4, $5, $6, $7, True);
<a name="l00429"></a>00429 END;
<a name="l00430"></a>00430 $$ LANGUAGE plpgsql VOLATILE;
<a name="l00431"></a>00431
<a name="l00432"></a>00432 ------------------------------------------------------------------------
<a name="l00433"></a>00433 <span class="comment"></span>
<a name="l00434"></a>00434 <span class="comment">/**</span>
<a name="l00435"></a>00435 <span class="comment"> * @brief Help function, to print out the supported families</span>
<a name="l00436"></a>00436 <span class="comment"> */</span>
<a name="l00437"></a>00437 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_train ()
<a name="l00438"></a>00438 RETURNS TEXT AS $$
<a name="l00439"></a>00439 PythonFunction(elastic_net, elastic_net, elastic_net_help)
<a name="l00440"></a>00440 $$ LANGUAGE plpythonu;
<a name="l00441"></a>00441
<a name="l00442"></a>00442 ------------------------------------------------------------------------
<a name="l00443"></a>00443 <span class="comment"></span>
<a name="l00444"></a>00444 <span class="comment">/**</span>
<a name="l00445"></a>00445 <span class="comment"> * @brief Help function, to print out the supported optimizer for a family</span>
<a name="l00446"></a>00446 <span class="comment"> * or print out the parameter list for an optimizer</span>
<a name="l00447"></a>00447 <span class="comment"> *</span>
<a name="l00448"></a>00448 <span class="comment"> * @param family_or_optimizer Response type, &#39;gaussian&#39; or &#39;binomial&#39;, or</span>
<a name="l00449"></a>00449 <span class="comment"> * optimizer type</span>
<a name="l00450"></a>00450 <span class="comment"> */</span>
<a name="l00451"></a>00451 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_train (
<a name="l00452"></a>00452 family_or_optimizer TEXT
<a name="l00453"></a>00453 ) RETURNS TEXT AS $$
<a name="l00454"></a>00454 PythonFunction(elastic_net, elastic_net, elastic_net_help)
<a name="l00455"></a>00455 $$ LANGUAGE plpythonu;
<a name="l00456"></a>00456
<a name="l00457"></a>00457 ------------------------------------------------------------------------
<a name="l00458"></a>00458 ------------------------------------------------------------------------
<a name="l00459"></a><a class="code" href="elastic__net_8sql__in.html#add7e2592fb0bd9f2eb1d8b176c80b5d0">00459</a> ------------------------------------------------------------------------
<a name="l00460"></a>00460 <span class="comment"></span>
<a name="l00461"></a>00461 <span class="comment">/**</span>
<a name="l00462"></a>00462 <span class="comment"> * @brief Prediction and put the result in a table</span>
<a name="l00463"></a>00463 <span class="comment"> * can be used together with General-CV</span>
<a name="l00464"></a>00464 <span class="comment"> * @param tbl_model The result from elastic_net_train</span>
<a name="l00465"></a>00465 <span class="comment"> * @param tbl_new_source Data table</span>
<a name="l00466"></a>00466 <span class="comment"> * @param col_id Unique ID associated with each row</span>
<a name="l00467"></a>00467 <span class="comment"> * @param tbl_predict Prediction result</span>
<a name="l00468"></a>00468 <span class="comment"> */</span>
<a name="l00469"></a>00469 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_predict (
<a name="l00470"></a>00470 tbl_model TEXT,
<a name="l00471"></a>00471 tbl_new_source TEXT,
<a name="l00472"></a>00472 col_id TEXT,
<a name="l00473"></a><a class="code" href="elastic__net_8sql__in.html#a6f6ee3def49b5e9a1d3375fe41427dc0">00473</a> tbl_predict TEXT
<a name="l00474"></a>00474 ) RETURNS VOID AS $$
<a name="l00475"></a>00475 PythonFunction(elastic_net, elastic_net, elastic_net_predict_all)
<a name="l00476"></a>00476 $$ LANGUAGE plpythonu;
<a name="l00477"></a>00477
<a name="l00478"></a>00478 ------------------------------------------------------------------------
<a name="l00479"></a>00479 <span class="comment"></span>
<a name="l00480"></a>00480 <span class="comment">/**</span>
<a name="l00481"></a>00481 <span class="comment"> * @brief Prediction use learned coefficients for a given example</span>
<a name="l00482"></a>00482 <span class="comment"> *</span>
<a name="l00483"></a>00483 <span class="comment"> * @param regress_family model family</span>
<a name="l00484"></a>00484 <span class="comment"> * @param coefficients The fitting coefficients</span>
<a name="l00485"></a>00485 <span class="comment"> * @param intercept The fitting intercept</span>
<a name="l00486"></a>00486 <span class="comment"> * @param ind_var Features (independent variables)</span>
<a name="l00487"></a>00487 <span class="comment"> *</span>
<a name="l00488"></a>00488 <span class="comment"> * returns a double value. When regress_family is &#39;binomial&#39; or &#39;logistic&#39;,</span>
<a name="l00489"></a>00489 <span class="comment"> * this function returns 1 for True and 0 for False</span>
<a name="l00490"></a>00490 <span class="comment"> */</span>
<a name="l00491"></a><a class="code" href="elastic__net_8sql__in.html#a3578608204ac9b2d3442ff42977f632b">00491</a> CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_predict (
<a name="l00492"></a>00492 regress_family TEXT,
<a name="l00493"></a>00493 coefficients DOUBLE PRECISION[],
<a name="l00494"></a>00494 intercept DOUBLE PRECISION,
<a name="l00495"></a>00495 ind_var DOUBLE PRECISION[]
<a name="l00496"></a>00496 ) RETURNS DOUBLE PRECISION AS $$
<a name="l00497"></a>00497 DECLARE
<a name="l00498"></a>00498 family_name TEXT;
<a name="l00499"></a>00499 binomial_result BOOLEAN;
<a name="l00500"></a>00500 BEGIN
<a name="l00501"></a>00501 family_name := lower(regress_family);
<a name="l00502"></a>00502
<a name="l00503"></a>00503 IF family_name = <span class="stringliteral">&#39;gaussian&#39;</span> OR family_name = <span class="stringliteral">&#39;linear&#39;</span> THEN
<a name="l00504"></a>00504 RETURN MADLIB_SCHEMA.elastic_net_gaussian_predict(coefficients, intercept, ind_var);
<a name="l00505"></a>00505 END IF;
<a name="l00506"></a>00506
<a name="l00507"></a>00507 IF family_name = <span class="stringliteral">&#39;binomial&#39;</span> OR family_name = <span class="stringliteral">&#39;logistic&#39;</span> THEN
<a name="l00508"></a>00508 binomial_result := MADLIB_SCHEMA.elastic_net_binomial_predict(coefficients, intercept, ind_var);
<a name="l00509"></a>00509 IF binomial_result THEN
<a name="l00510"></a>00510 <span class="keywordflow">return</span> 1;
<a name="l00511"></a>00511 ELSE
<a name="l00512"></a>00512 <span class="keywordflow">return</span> 0;
<a name="l00513"></a><a class="code" href="elastic__net_8sql__in.html#aaddbfdfea4207d38ab7e2cd3db876bdc">00513</a> END IF;
<a name="l00514"></a>00514 END IF;
<a name="l00515"></a>00515
<a name="l00516"></a>00516 RAISE EXCEPTION <span class="stringliteral">&#39;This regression family is not supported!&#39;</span>;
<a name="l00517"></a>00517 END;
<a name="l00518"></a>00518 $$ LANGUAGE plpgsql IMMUTABLE STRICT;
<a name="l00519"></a>00519
<a name="l00520"></a>00520 ------------------------------------------------------------------------
<a name="l00521"></a>00521 <span class="comment"></span>
<a name="l00522"></a>00522 <span class="comment"> /**</span>
<a name="l00523"></a>00523 <span class="comment"> * @brief Prediction for linear models use learned coefficients for a given example</span>
<a name="l00524"></a>00524 <span class="comment"> *</span>
<a name="l00525"></a>00525 <span class="comment"> * @param coefficients Linear fitting coefficients</span>
<a name="l00526"></a>00526 <span class="comment"> * @param intercept Linear fitting intercept</span>
<a name="l00527"></a>00527 <span class="comment"> * @param ind_var Features (independent variables)</span>
<a name="l00528"></a>00528 <span class="comment"> *</span>
<a name="l00529"></a>00529 <span class="comment"> * returns a double value</span>
<a name="l00530"></a>00530 <span class="comment"> */</span>
<a name="l00531"></a>00531 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_gaussian_predict (
<a name="l00532"></a>00532 coefficients DOUBLE PRECISION[],
<a name="l00533"></a>00533 intercept DOUBLE PRECISION,
<a name="l00534"></a>00534 ind_var DOUBLE PRECISION[]
<a name="l00535"></a>00535 ) RETURNS DOUBLE PRECISION AS
<a name="l00536"></a>00536 <span class="stringliteral">&#39;MODULE_PATHNAME&#39;</span>, <span class="stringliteral">&#39;__elastic_net_gaussian_predict&#39;</span>
<a name="l00537"></a>00537 LANGUAGE C IMMUTABLE STRICT;
<a name="l00538"></a>00538
<a name="l00539"></a>00539 ------------------------------------------------------------------------<span class="comment"></span>
<a name="l00540"></a>00540 <span class="comment">/**</span>
<a name="l00541"></a>00541 <span class="comment"> * @brief Prediction for logistic models use learned coefficients for a given example</span>
<a name="l00542"></a>00542 <span class="comment"> *</span>
<a name="l00543"></a>00543 <span class="comment"> * @param coefficients Logistic fitting coefficients</span>
<a name="l00544"></a>00544 <span class="comment"> * @param intercept Logistic fitting intercept</span>
<a name="l00545"></a>00545 <span class="comment"> * @param ind_var Features (independent variables)</span>
<a name="l00546"></a>00546 <span class="comment"> *</span>
<a name="l00547"></a>00547 <span class="comment"> * returns a boolean value</span>
<a name="l00548"></a>00548 <span class="comment"> */</span>
<a name="l00549"></a>00549 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_binomial_predict (
<a name="l00550"></a>00550 coefficients DOUBLE PRECISION[],
<a name="l00551"></a>00551 intercept DOUBLE PRECISION,
<a name="l00552"></a>00552 ind_var DOUBLE PRECISION[]
<a name="l00553"></a><a class="code" href="elastic__net_8sql__in.html#a96db4ff4ba3ea363fafbf6c036c19fae">00553</a> ) RETURNS BOOLEAN AS
<a name="l00554"></a>00554 <span class="stringliteral">&#39;MODULE_PATHNAME&#39;</span>, <span class="stringliteral">&#39;__elastic_net_binomial_predict&#39;</span>
<a name="l00555"></a>00555 LANGUAGE C IMMUTABLE STRICT;
<a name="l00556"></a>00556
<a name="l00557"></a>00557 ------------------------------------------------------------------------<span class="comment"></span>
<a name="l00558"></a>00558 <span class="comment">/**</span>
<a name="l00559"></a>00559 <span class="comment"> * @brief Compute the probability of belonging to the True class for a given observation</span>
<a name="l00560"></a>00560 <span class="comment"> *</span>
<a name="l00561"></a>00561 <span class="comment"> * @param coefficients Logistic fitting coefficients</span>
<a name="l00562"></a>00562 <span class="comment"> * @param intercept Logistic fitting intercept</span>
<a name="l00563"></a>00563 <span class="comment"> * @param ind_var Features (independent variables)</span>
<a name="l00564"></a>00564 <span class="comment"> *</span>
<a name="l00565"></a>00565 <span class="comment"> * returns a double value, which is the probability of this data point being True class</span>
<a name="l00566"></a>00566 <span class="comment"> */</span>
<a name="l00567"></a>00567 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.elastic_net_binomial_prob (
<a name="l00568"></a>00568 coefficients DOUBLE PRECISION[],
<a name="l00569"></a>00569 intercept DOUBLE PRECISION,
<a name="l00570"></a>00570 ind_var DOUBLE PRECISION[]
<a name="l00571"></a><a class="code" href="elastic__net_8sql__in.html#aa78cde79f1f2caa7c5b38f933001d793">00571</a> ) RETURNS DOUBLE PRECISION AS
<a name="l00572"></a>00572 <span class="stringliteral">&#39;MODULE_PATHNAME&#39;</span>, <span class="stringliteral">&#39;__elastic_net_binomial_prob&#39;</span>
<a name="l00573"></a>00573 LANGUAGE C IMMUTABLE STRICT;
<a name="l00574"></a>00574
<a name="l00575"></a>00575 ------------------------------------------------------------------------
<a name="l00576"></a>00576 <span class="comment">/* Compute the log-likelihood for one data point */</span>
<a name="l00577"></a>00577 CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__elastic_net_binomial_loglikelihood (
<a name="l00578"></a>00578 coefficients DOUBLE PRECISION[],
<a name="l00579"></a>00579 intercept DOUBLE PRECISION,
<a name="l00580"></a>00580 dep_var BOOLEAN,
<a name="l00581"></a>00581 ind_var DOUBLE PRECISION[]
<a name="l00582"></a>00582 ) RETURNS DOUBLE PRECISION AS
<a name="l00583"></a>00583 <span class="stringliteral">&#39;MODULE_PATHNAME&#39;</span>, <span class="stringliteral">&#39;__elastic_net_binomial_loglikelihood&#39;</span>
<a name="l00584"></a>00584 LANGUAGE C IMMUTABLE STRICT;
<a name="l00585"></a>00585
<a name="l00586"></a>00586 ------------------------------------------------------------------------
<a name="l00587"></a>00587 -- Compute the solution <span class="keywordflow">for</span> just one step ------------------------------
<a name="l00588"></a>00588 ------------------------------------------------------------------------
<a name="l00589"></a><a class="code" href="elastic__net_8sql__in.html#a308718fd5234bc1007b971a639aadf71">00589</a>
<a name="l00590"></a>00590 CREATE TYPE MADLIB_SCHEMA.__elastic_net_result AS (
<a name="l00591"></a>00591 intercept DOUBLE PRECISION,
<a name="l00592"></a>00592 coefficients DOUBLE PRECISION[],
<a name="l00593"></a>00593 lambda_value DOUBLE PRECISION
<a name="l00594"></a>00594 );
<a name="l00595"></a>00595
<a name="l00596"></a>00596 ------------------------------------------------------------------------
<a name="l00597"></a>00597
<a name="l00598"></a>00598 <span class="comment">/* IGD */</span>
<a name="l00599"></a>00599
<a name="l00600"></a>00600 CREATE FUNCTION MADLIB_SCHEMA.__gaussian_igd_transition (
<a name="l00601"></a>00601 state DOUBLE PRECISION[],
<a name="l00602"></a>00602 ind_var DOUBLE PRECISION[],
<a name="l00603"></a>00603 dep_var DOUBLE PRECISION,
<a name="l00604"></a>00604 pre_state DOUBLE PRECISION[],
<a name="l00605"></a>00605 lambda DOUBLE PRECISION,
<a name="l00606"></a>00606 alpha DOUBLE PRECISION,
<a name="l00607"></a>00607 dimension INTEGER,
<a name="l00608"></a>00608 stepsize DOUBLE PRECISION,
<a name="l00609"></a>00609 total_rows INTEGER,
<a name="l00610"></a>00610 xmean DOUBLE PRECISION[],
<a name="l00611"></a>00611 ymean DOUBLE PRECISION,
<a name="l00612"></a>00612 step_decay DOUBLE PRECISION
<a name="l00613"></a>00613 ) RETURNS DOUBLE PRECISION[]
<a name="l00614"></a>00614 AS <span class="stringliteral">&#39;MODULE_PATHNAME&#39;</span>, <span class="stringliteral">&#39;gaussian_igd_transition&#39;</span>
<a name="l00615"></a>00615 LANGUAGE C IMMUTABLE;
<a name="l00616"></a>00616
<a name="l00617"></a>00617 --
<a name="l00618"></a>00618
<a name="l00619"></a>00619 CREATE FUNCTION MADLIB_SCHEMA.__gaussian_igd_merge (
<a name="l00620"></a>00620 state1 DOUBLE PRECISION[],
<a name="l00621"></a>00621 state2 DOUBLE PRECISION[]
<a name="l00622"></a>00622 ) RETURNS DOUBLE PRECISION[] AS
<a name="l00623"></a>00623 <span class="stringliteral">&#39;MODULE_PATHNAME&#39;</span>, <span class="stringliteral">&#39;gaussian_igd_merge&#39;</span>
<a name="l00624"></a>00624 LANGUAGE C IMMUTABLE STRICT;
<a name="l00625"></a>00625
<a name="l00626"></a>00626 --
<a name="l00627"></a>00627
<a name="l00628"></a>00628 CREATE FUNCTION MADLIB_SCHEMA.__gaussian_igd_final (
<a name="l00629"></a>00629 state DOUBLE PRECISION[]
<a name="l00630"></a>00630 ) RETURNS DOUBLE PRECISION[] AS
<a name="l00631"></a>00631 <span class="stringliteral">&#39;MODULE_PATHNAME&#39;</span>, <span class="stringliteral">&#39;gaussian_igd_final&#39;</span>
<a name="l00632"></a>00632 LANGUAGE C IMMUTABLE STRICT;
<a name="l00633"></a>00633
<a name="l00634"></a>00634 <span class="comment">/*</span>
<a name="l00635"></a>00635 <span class="comment"> * Perform one iteration step of IGD for linear models</span>
<a name="l00636"></a>00636 <span class="comment"> */</span>
<a name="l00637"></a>00637 CREATE AGGREGATE MADLIB_SCHEMA.__gaussian_igd_step(
<a name="l00638"></a>00638 <span class="comment">/* ind_var */</span> DOUBLE PRECISION[],
<a name="l00639"></a>00639 <span class="comment">/* dep_var */</span> DOUBLE PRECISION,
<a name="l00640"></a>00640 <span class="comment">/* pre_state */</span> DOUBLE PRECISION[],
<a name="l00641"></a>00641 <span class="comment">/* lambda */</span> DOUBLE PRECISION,
<a name="l00642"></a>00642 <span class="comment">/* alpha */</span> DOUBLE PRECISION,
<a name="l00643"></a>00643 <span class="comment">/* dimension */</span> INTEGER,
<a name="l00644"></a>00644 <span class="comment">/* stepsize */</span> DOUBLE PRECISION,
<a name="l00645"></a>00645 <span class="comment">/* total_rows */</span> INTEGER,
<a name="l00646"></a>00646 <span class="comment">/* xmeans */</span> DOUBLE PRECISION[],
<a name="l00647"></a>00647 <span class="comment">/* ymean */</span> DOUBLE PRECISION,
<a name="l00648"></a>00648 <span class="comment">/* step_decay */</span> DOUBLE PRECISION
<a name="l00649"></a>00649 ) (
<a name="l00650"></a>00650 SType = DOUBLE PRECISION[],
<a name="l00651"></a>00651 SFunc = MADLIB_SCHEMA.__gaussian_igd_transition,
<a name="l00652"></a>00652 m4_ifdef(`GREENPLUM<span class="stringliteral">&#39;, `prefunc = MADLIB_SCHEMA.__gaussian_igd_merge,&#39;</span>)
<a name="l00653"></a>00653 FinalFunc = MADLIB_SCHEMA.__gaussian_igd_final,
<a name="l00654"></a>00654 InitCond = &#39;{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}<span class="stringliteral">&#39;</span>
<a name="l00655"></a>00655 <span class="stringliteral">);</span>
<a name="l00656"></a>00656 <span class="stringliteral"></span>
<a name="l00657"></a>00657 <span class="stringliteral">CREATE AGGREGATE MADLIB_SCHEMA.__gaussian_igd_step_single_seg (</span>
<a name="l00658"></a>00658 <span class="stringliteral"> /* ind_var */ DOUBLE PRECISION[],</span>
<a name="l00659"></a>00659 <span class="stringliteral"> /* dep_var */ DOUBLE PRECISION,</span>
<a name="l00660"></a>00660 <span class="stringliteral"> /* pre_state */ DOUBLE PRECISION[],</span>
<a name="l00661"></a>00661 <span class="stringliteral"> /* lambda */ DOUBLE PRECISION,</span>
<a name="l00662"></a>00662 <span class="stringliteral"> /* alpha */ DOUBLE PRECISION,</span>
<a name="l00663"></a>00663 <span class="stringliteral"> /* dimension */ INTEGER,</span>
<a name="l00664"></a>00664 <span class="stringliteral"> /* stepsize */ DOUBLE PRECISION,</span>
<a name="l00665"></a>00665 <span class="stringliteral"> /* total_rows */ INTEGER,</span>
<a name="l00666"></a>00666 <span class="stringliteral"> /* xmeans */ DOUBLE PRECISION[],</span>
<a name="l00667"></a>00667 <span class="stringliteral"> /* ymean */ DOUBLE PRECISION,</span>
<a name="l00668"></a>00668 <span class="stringliteral"> /* step_decay */ DOUBLE PRECISION</span>
<a name="l00669"></a>00669 <span class="stringliteral">) (</span>
<a name="l00670"></a>00670 <span class="stringliteral"> SType = DOUBLE PRECISION[],</span>
<a name="l00671"></a>00671 <span class="stringliteral"> SFunc = MADLIB_SCHEMA.__gaussian_igd_transition,</span>
<a name="l00672"></a>00672 <span class="stringliteral"> -- m4_ifdef(`GREENPLUM&#39;</span>, `prefunc = MADLIB_SCHEMA.__gaussian_igd_merge,<span class="stringliteral">&#39;)</span>
<a name="l00673"></a>00673 <span class="stringliteral"> FinalFunc = MADLIB_SCHEMA.__gaussian_igd_final,</span>
<a name="l00674"></a>00674 <span class="stringliteral"> InitCond = &#39;</span>{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}<span class="stringliteral">&#39;</span>
<a name="l00675"></a>00675 <span class="stringliteral">);</span>
<a name="l00676"></a>00676 <span class="stringliteral"></span>
<a name="l00677"></a>00677 <span class="stringliteral">--</span>
<a name="l00678"></a>00678 <span class="stringliteral"></span>
<a name="l00679"></a>00679 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__gaussian_igd_state_diff (</span>
<a name="l00680"></a>00680 <span class="stringliteral"> state1 DOUBLE PRECISION[],</span>
<a name="l00681"></a>00681 <span class="stringliteral"> state2 DOUBLE PRECISION[]</span>
<a name="l00682"></a>00682 <span class="stringliteral">) RETURNS DOUBLE PRECISION AS</span>
<a name="l00683"></a>00683 <span class="stringliteral">&#39;</span>MODULE_PATHNAME<span class="stringliteral">&#39;, &#39;</span>__gaussian_igd_state_diff<span class="stringliteral">&#39;</span>
<a name="l00684"></a>00684 <span class="stringliteral">LANGUAGE C IMMUTABLE STRICT;</span>
<a name="l00685"></a>00685 <span class="stringliteral"></span>
<a name="l00686"></a>00686 <span class="stringliteral">--</span>
<a name="l00687"></a>00687 <span class="stringliteral"></span>
<a name="l00688"></a>00688 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__gaussian_igd_result (</span>
<a name="l00689"></a>00689 <span class="stringliteral"> in_state DOUBLE PRECISION[],</span>
<a name="l00690"></a>00690 <span class="stringliteral"> feature_sq DOUBLE PRECISION[],</span>
<a name="l00691"></a>00691 <span class="stringliteral"> threshold DOUBLE PRECISION,</span>
<a name="l00692"></a>00692 <span class="stringliteral"> tolerance DOUBLE PRECISION</span>
<a name="l00693"></a>00693 <span class="stringliteral">) RETURNS MADLIB_SCHEMA.__elastic_net_result AS</span>
<a name="l00694"></a>00694 <span class="stringliteral">&#39;</span>MODULE_PATHNAME<span class="stringliteral">&#39;, &#39;</span>__gaussian_igd_result<span class="stringliteral">&#39;</span>
<a name="l00695"></a>00695 <span class="stringliteral">LANGUAGE C IMMUTABLE STRICT;</span>
<a name="l00696"></a>00696 <span class="stringliteral"></span>
<a name="l00697"></a>00697 <span class="stringliteral">------------------------------------------------------------------------</span>
<a name="l00698"></a>00698 <span class="stringliteral"></span>
<a name="l00699"></a>00699 <span class="stringliteral">/* FISTA */</span>
<a name="l00700"></a>00700 <span class="stringliteral"></span>
<a name="l00701"></a>00701 <span class="stringliteral">CREATE FUNCTION MADLIB_SCHEMA.__gaussian_fista_transition (</span>
<a name="l00702"></a>00702 <span class="stringliteral"> state DOUBLE PRECISION[],</span>
<a name="l00703"></a>00703 <span class="stringliteral"> ind_var DOUBLE PRECISION[],</span>
<a name="l00704"></a>00704 <span class="stringliteral"> dep_var DOUBLE PRECISION,</span>
<a name="l00705"></a>00705 <span class="stringliteral"> pre_state DOUBLE PRECISION[],</span>
<a name="l00706"></a>00706 <span class="stringliteral"> lambda DOUBLE PRECISION,</span>
<a name="l00707"></a>00707 <span class="stringliteral"> alpha DOUBLE PRECISION,</span>
<a name="l00708"></a>00708 <span class="stringliteral"> dimension INTEGER,</span>
<a name="l00709"></a>00709 <span class="stringliteral"> total_rows INTEGER,</span>
<a name="l00710"></a>00710 <span class="stringliteral"> max_stepsize DOUBLE PRECISION,</span>
<a name="l00711"></a>00711 <span class="stringliteral"> eta DOUBLE PRECISION,</span>
<a name="l00712"></a>00712 <span class="stringliteral"> use_active_set INTEGER,</span>
<a name="l00713"></a>00713 <span class="stringliteral"> is_active INTEGER,</span>
<a name="l00714"></a>00714 <span class="stringliteral"> random_stepsize INTEGER</span>
<a name="l00715"></a>00715 <span class="stringliteral">) RETURNS DOUBLE PRECISION[]</span>
<a name="l00716"></a>00716 <span class="stringliteral">AS &#39;</span>MODULE_PATHNAME<span class="stringliteral">&#39;, &#39;</span>gaussian_fista_transition<span class="stringliteral">&#39;</span>
<a name="l00717"></a>00717 <span class="stringliteral">LANGUAGE C IMMUTABLE;</span>
<a name="l00718"></a>00718 <span class="stringliteral"></span>
<a name="l00719"></a>00719 <span class="stringliteral">--</span>
<a name="l00720"></a>00720 <span class="stringliteral"></span>
<a name="l00721"></a>00721 <span class="stringliteral">CREATE FUNCTION MADLIB_SCHEMA.__gaussian_fista_merge (</span>
<a name="l00722"></a>00722 <span class="stringliteral"> state1 DOUBLE PRECISION[],</span>
<a name="l00723"></a>00723 <span class="stringliteral"> state2 DOUBLE PRECISION[]</span>
<a name="l00724"></a>00724 <span class="stringliteral">) RETURNS DOUBLE PRECISION[] AS</span>
<a name="l00725"></a>00725 <span class="stringliteral">&#39;</span>MODULE_PATHNAME<span class="stringliteral">&#39;, &#39;</span>gaussian_fista_merge<span class="stringliteral">&#39;</span>
<a name="l00726"></a>00726 <span class="stringliteral">LANGUAGE C IMMUTABLE STRICT;</span>
<a name="l00727"></a>00727 <span class="stringliteral"></span>
<a name="l00728"></a>00728 <span class="stringliteral">--</span>
<a name="l00729"></a>00729 <span class="stringliteral"></span>
<a name="l00730"></a>00730 <span class="stringliteral">CREATE FUNCTION MADLIB_SCHEMA.__gaussian_fista_final (</span>
<a name="l00731"></a>00731 <span class="stringliteral"> state DOUBLE PRECISION[]</span>
<a name="l00732"></a>00732 <span class="stringliteral">) RETURNS DOUBLE PRECISION[] AS</span>
<a name="l00733"></a>00733 <span class="stringliteral">&#39;</span>MODULE_PATHNAME<span class="stringliteral">&#39;, &#39;</span>gaussian_fista_final<span class="stringliteral">&#39;</span>
<a name="l00734"></a>00734 <span class="stringliteral">LANGUAGE C IMMUTABLE STRICT;</span>
<a name="l00735"></a>00735 <span class="stringliteral"></span>
<a name="l00736"></a>00736 <span class="stringliteral">/* </span>
<a name="l00737"></a>00737 <span class="stringliteral"> Perform one iteration step of FISTA for linear models</span>
<a name="l00738"></a>00738 <span class="stringliteral"> */</span>
<a name="l00739"></a>00739 <span class="stringliteral">CREATE AGGREGATE MADLIB_SCHEMA.__gaussian_fista_step(</span>
<a name="l00740"></a>00740 <span class="stringliteral"> /* ind_var */ DOUBLE PRECISION[],</span>
<a name="l00741"></a>00741 <span class="stringliteral"> /* dep_var */ DOUBLE PRECISION,</span>
<a name="l00742"></a>00742 <span class="stringliteral"> /* pre_state */ DOUBLE PRECISION[],</span>
<a name="l00743"></a>00743 <span class="stringliteral"> /* lambda */ DOUBLE PRECISION,</span>
<a name="l00744"></a>00744 <span class="stringliteral"> /* alpha */ DOUBLE PRECISION,</span>
<a name="l00745"></a>00745 <span class="stringliteral"> /* dimension */ INTEGER,</span>
<a name="l00746"></a>00746 <span class="stringliteral"> /* total_rows */ INTEGER,</span>
<a name="l00747"></a>00747 <span class="stringliteral"> /* max_stepsize */ DOUBLE PRECISION,</span>
<a name="l00748"></a>00748 <span class="stringliteral"> /* eta */ DOUBLE PRECISION,</span>
<a name="l00749"></a>00749 <span class="stringliteral"> /* use_active_set */ INTEGER,</span>
<a name="l00750"></a>00750 <span class="stringliteral"> /* is_active */ INTEGER,</span>
<a name="l00751"></a>00751 <span class="stringliteral"> /* random_stepsize */ INTEGER</span>
<a name="l00752"></a>00752 <span class="stringliteral">) (</span>
<a name="l00753"></a>00753 <span class="stringliteral"> SType = DOUBLE PRECISION[],</span>
<a name="l00754"></a>00754 <span class="stringliteral"> SFunc = MADLIB_SCHEMA.__gaussian_fista_transition,</span>
<a name="l00755"></a>00755 <span class="stringliteral"> m4_ifdef(`GREENPLUM&#39;</span>, `prefunc = MADLIB_SCHEMA.__gaussian_fista_merge,<span class="stringliteral">&#39;)</span>
<a name="l00756"></a>00756 <span class="stringliteral"> FinalFunc = MADLIB_SCHEMA.__gaussian_fista_final,</span>
<a name="l00757"></a>00757 <span class="stringliteral"> InitCond = &#39;</span>{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}<span class="stringliteral">&#39;</span>
<a name="l00758"></a>00758 <span class="stringliteral">);</span>
<a name="l00759"></a>00759 <span class="stringliteral"></span>
<a name="l00760"></a>00760 <span class="stringliteral">--</span>
<a name="l00761"></a>00761 <span class="stringliteral"></span>
<a name="l00762"></a>00762 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__gaussian_fista_state_diff (</span>
<a name="l00763"></a>00763 <span class="stringliteral"> state1 DOUBLE PRECISION[],</span>
<a name="l00764"></a>00764 <span class="stringliteral"> state2 DOUBLE PRECISION[]</span>
<a name="l00765"></a>00765 <span class="stringliteral">) RETURNS DOUBLE PRECISION AS</span>
<a name="l00766"></a>00766 <span class="stringliteral">&#39;</span>MODULE_PATHNAME<span class="stringliteral">&#39;, &#39;</span>__gaussian_fista_state_diff<span class="stringliteral">&#39;</span>
<a name="l00767"></a>00767 <span class="stringliteral">LANGUAGE C IMMUTABLE STRICT;</span>
<a name="l00768"></a>00768 <span class="stringliteral"></span>
<a name="l00769"></a>00769 <span class="stringliteral">--</span>
<a name="l00770"></a>00770 <span class="stringliteral"></span>
<a name="l00771"></a>00771 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__gaussian_fista_result (</span>
<a name="l00772"></a>00772 <span class="stringliteral"> in_state DOUBLE PRECISION[]</span>
<a name="l00773"></a>00773 <span class="stringliteral">) RETURNS MADLIB_SCHEMA.__elastic_net_result AS</span>
<a name="l00774"></a>00774 <span class="stringliteral">&#39;</span>MODULE_PATHNAME<span class="stringliteral">&#39;, &#39;</span>__gaussian_fista_result<span class="stringliteral">&#39;</span>
<a name="l00775"></a>00775 <span class="stringliteral">LANGUAGE C IMMUTABLE STRICT;</span>
<a name="l00776"></a>00776 <span class="stringliteral"></span>
<a name="l00777"></a>00777 <span class="stringliteral">------------------------------------------------------------------------</span>
<a name="l00778"></a>00778 <span class="stringliteral">------------------------------------------------------------------------</span>
<a name="l00779"></a>00779 <span class="stringliteral">------------------------------------------------------------------------</span>
<a name="l00780"></a>00780 <span class="stringliteral"></span>
<a name="l00781"></a>00781 <span class="stringliteral">/* Binomial IGD */</span>
<a name="l00782"></a>00782 <span class="stringliteral"></span>
<a name="l00783"></a>00783 <span class="stringliteral">CREATE FUNCTION MADLIB_SCHEMA.__binomial_igd_transition (</span>
<a name="l00784"></a>00784 <span class="stringliteral"> state DOUBLE PRECISION[],</span>
<a name="l00785"></a>00785 <span class="stringliteral"> ind_var DOUBLE PRECISION[],</span>
<a name="l00786"></a>00786 <span class="stringliteral"> dep_var BOOLEAN,</span>
<a name="l00787"></a>00787 <span class="stringliteral"> pre_state DOUBLE PRECISION[],</span>
<a name="l00788"></a>00788 <span class="stringliteral"> lambda DOUBLE PRECISION,</span>
<a name="l00789"></a>00789 <span class="stringliteral"> alpha DOUBLE PRECISION,</span>
<a name="l00790"></a>00790 <span class="stringliteral"> dimension INTEGER,</span>
<a name="l00791"></a>00791 <span class="stringliteral"> stepsize DOUBLE PRECISION,</span>
<a name="l00792"></a>00792 <span class="stringliteral"> total_rows INTEGER,</span>
<a name="l00793"></a>00793 <span class="stringliteral"> xmean DOUBLE PRECISION[],</span>
<a name="l00794"></a>00794 <span class="stringliteral"> ymean DOUBLE PRECISION,</span>
<a name="l00795"></a>00795 <span class="stringliteral"> step_decay DOUBLE PRECISION</span>
<a name="l00796"></a>00796 <span class="stringliteral">) RETURNS DOUBLE PRECISION[]</span>
<a name="l00797"></a>00797 <span class="stringliteral">AS &#39;</span>MODULE_PATHNAME<span class="stringliteral">&#39;, &#39;</span>binomial_igd_transition<span class="stringliteral">&#39;</span>
<a name="l00798"></a>00798 <span class="stringliteral">LANGUAGE C IMMUTABLE;</span>
<a name="l00799"></a>00799 <span class="stringliteral"></span>
<a name="l00800"></a>00800 <span class="stringliteral">--</span>
<a name="l00801"></a>00801 <span class="stringliteral"></span>
<a name="l00802"></a>00802 <span class="stringliteral">CREATE FUNCTION MADLIB_SCHEMA.__binomial_igd_merge (</span>
<a name="l00803"></a>00803 <span class="stringliteral"> state1 DOUBLE PRECISION[],</span>
<a name="l00804"></a>00804 <span class="stringliteral"> state2 DOUBLE PRECISION[]</span>
<a name="l00805"></a>00805 <span class="stringliteral">) RETURNS DOUBLE PRECISION[] AS</span>
<a name="l00806"></a>00806 <span class="stringliteral">&#39;</span>MODULE_PATHNAME<span class="stringliteral">&#39;, &#39;</span>binomial_igd_merge<span class="stringliteral">&#39;</span>
<a name="l00807"></a>00807 <span class="stringliteral">LANGUAGE C IMMUTABLE STRICT;</span>
<a name="l00808"></a>00808 <span class="stringliteral"></span>
<a name="l00809"></a>00809 <span class="stringliteral">--</span>
<a name="l00810"></a>00810 <span class="stringliteral"></span>
<a name="l00811"></a>00811 <span class="stringliteral">CREATE FUNCTION MADLIB_SCHEMA.__binomial_igd_final (</span>
<a name="l00812"></a>00812 <span class="stringliteral"> state DOUBLE PRECISION[]</span>
<a name="l00813"></a>00813 <span class="stringliteral">) RETURNS DOUBLE PRECISION[] AS</span>
<a name="l00814"></a>00814 <span class="stringliteral">&#39;</span>MODULE_PATHNAME<span class="stringliteral">&#39;, &#39;</span>binomial_igd_final<span class="stringliteral">&#39;</span>
<a name="l00815"></a>00815 <span class="stringliteral">LANGUAGE C IMMUTABLE STRICT;</span>
<a name="l00816"></a>00816 <span class="stringliteral"></span>
<a name="l00817"></a>00817 <span class="stringliteral">/*</span>
<a name="l00818"></a>00818 <span class="stringliteral"> * Perform one iteration step of IGD for linear models</span>
<a name="l00819"></a>00819 <span class="stringliteral"> */</span>
<a name="l00820"></a>00820 <span class="stringliteral">CREATE AGGREGATE MADLIB_SCHEMA.__binomial_igd_step(</span>
<a name="l00821"></a>00821 <span class="stringliteral"> /* ind_var */ DOUBLE PRECISION[],</span>
<a name="l00822"></a>00822 <span class="stringliteral"> /* dep_var */ BOOLEAN,</span>
<a name="l00823"></a>00823 <span class="stringliteral"> /* pre_state */ DOUBLE PRECISION[],</span>
<a name="l00824"></a>00824 <span class="stringliteral"> /* lambda */ DOUBLE PRECISION,</span>
<a name="l00825"></a>00825 <span class="stringliteral"> /* alpha */ DOUBLE PRECISION,</span>
<a name="l00826"></a>00826 <span class="stringliteral"> /* dimension */ INTEGER,</span>
<a name="l00827"></a>00827 <span class="stringliteral"> /* stepsize */ DOUBLE PRECISION,</span>
<a name="l00828"></a>00828 <span class="stringliteral"> /* total_rows */ INTEGER,</span>
<a name="l00829"></a>00829 <span class="stringliteral"> /* xmeans */ DOUBLE PRECISION[],</span>
<a name="l00830"></a>00830 <span class="stringliteral"> /* ymean */ DOUBLE PRECISION,</span>
<a name="l00831"></a>00831 <span class="stringliteral"> /* step_decay */ DOUBLE PRECISION</span>
<a name="l00832"></a>00832 <span class="stringliteral">) (</span>
<a name="l00833"></a>00833 <span class="stringliteral"> SType = DOUBLE PRECISION[],</span>
<a name="l00834"></a>00834 <span class="stringliteral"> SFunc = MADLIB_SCHEMA.__binomial_igd_transition,</span>
<a name="l00835"></a>00835 <span class="stringliteral"> m4_ifdef(`GREENPLUM&#39;</span>, `prefunc = MADLIB_SCHEMA.__binomial_igd_merge,<span class="stringliteral">&#39;)</span>
<a name="l00836"></a>00836 <span class="stringliteral"> FinalFunc = MADLIB_SCHEMA.__binomial_igd_final,</span>
<a name="l00837"></a>00837 <span class="stringliteral"> InitCond = &#39;</span>{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}<span class="stringliteral">&#39;</span>
<a name="l00838"></a>00838 <span class="stringliteral">);</span>
<a name="l00839"></a>00839 <span class="stringliteral"></span>
<a name="l00840"></a>00840 <span class="stringliteral">CREATE AGGREGATE MADLIB_SCHEMA.__binomial_igd_step_single_seg (</span>
<a name="l00841"></a>00841 <span class="stringliteral"> /* ind_var */ DOUBLE PRECISION[],</span>
<a name="l00842"></a>00842 <span class="stringliteral"> /* dep_var */ BOOLEAN,</span>
<a name="l00843"></a>00843 <span class="stringliteral"> /* pre_state */ DOUBLE PRECISION[],</span>
<a name="l00844"></a>00844 <span class="stringliteral"> /* lambda */ DOUBLE PRECISION,</span>
<a name="l00845"></a>00845 <span class="stringliteral"> /* alpha */ DOUBLE PRECISION,</span>
<a name="l00846"></a>00846 <span class="stringliteral"> /* dimension */ INTEGER,</span>
<a name="l00847"></a>00847 <span class="stringliteral"> /* stepsize */ DOUBLE PRECISION,</span>
<a name="l00848"></a>00848 <span class="stringliteral"> /* total_rows */ INTEGER,</span>
<a name="l00849"></a>00849 <span class="stringliteral"> /* xmeans */ DOUBLE PRECISION[],</span>
<a name="l00850"></a>00850 <span class="stringliteral"> /* ymean */ DOUBLE PRECISION,</span>
<a name="l00851"></a>00851 <span class="stringliteral"> /* step_decay */ DOUBLE PRECISION</span>
<a name="l00852"></a>00852 <span class="stringliteral">) (</span>
<a name="l00853"></a>00853 <span class="stringliteral"> SType = DOUBLE PRECISION[],</span>
<a name="l00854"></a>00854 <span class="stringliteral"> SFunc = MADLIB_SCHEMA.__binomial_igd_transition,</span>
<a name="l00855"></a>00855 <span class="stringliteral"> -- m4_ifdef(`GREENPLUM&#39;</span>, `prefunc = MADLIB_SCHEMA.__binomial_igd_merge,<span class="stringliteral">&#39;)</span>
<a name="l00856"></a>00856 <span class="stringliteral"> FinalFunc = MADLIB_SCHEMA.__binomial_igd_final,</span>
<a name="l00857"></a>00857 <span class="stringliteral"> InitCond = &#39;</span>{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}<span class="stringliteral">&#39;</span>
<a name="l00858"></a>00858 <span class="stringliteral">);</span>
<a name="l00859"></a>00859 <span class="stringliteral"></span>
<a name="l00860"></a>00860 <span class="stringliteral">--</span>
<a name="l00861"></a>00861 <span class="stringliteral"></span>
<a name="l00862"></a>00862 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__binomial_igd_state_diff (</span>
<a name="l00863"></a>00863 <span class="stringliteral"> state1 DOUBLE PRECISION[],</span>
<a name="l00864"></a>00864 <span class="stringliteral"> state2 DOUBLE PRECISION[]</span>
<a name="l00865"></a>00865 <span class="stringliteral">) RETURNS DOUBLE PRECISION AS</span>
<a name="l00866"></a>00866 <span class="stringliteral">&#39;</span>MODULE_PATHNAME<span class="stringliteral">&#39;, &#39;</span>__binomial_igd_state_diff<span class="stringliteral">&#39;</span>
<a name="l00867"></a>00867 <span class="stringliteral">LANGUAGE C IMMUTABLE STRICT;</span>
<a name="l00868"></a>00868 <span class="stringliteral"></span>
<a name="l00869"></a>00869 <span class="stringliteral">--</span>
<a name="l00870"></a>00870 <span class="stringliteral"></span>
<a name="l00871"></a>00871 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__binomial_igd_result (</span>
<a name="l00872"></a>00872 <span class="stringliteral"> in_state DOUBLE PRECISION[],</span>
<a name="l00873"></a>00873 <span class="stringliteral"> feature_sq DOUBLE PRECISION[],</span>
<a name="l00874"></a>00874 <span class="stringliteral"> threshold DOUBLE PRECISION,</span>
<a name="l00875"></a>00875 <span class="stringliteral"> tolerance DOUBLE PRECISION</span>
<a name="l00876"></a>00876 <span class="stringliteral">) RETURNS MADLIB_SCHEMA.__elastic_net_result AS</span>
<a name="l00877"></a>00877 <span class="stringliteral">&#39;</span>MODULE_PATHNAME<span class="stringliteral">&#39;, &#39;</span>__binomial_igd_result<span class="stringliteral">&#39;</span>
<a name="l00878"></a>00878 <span class="stringliteral">LANGUAGE C IMMUTABLE STRICT;</span>
<a name="l00879"></a>00879 <span class="stringliteral"></span>
<a name="l00880"></a>00880 <span class="stringliteral">------------------------------------------------------------------------</span>
<a name="l00881"></a>00881 <span class="stringliteral"></span>
<a name="l00882"></a>00882 <span class="stringliteral">/* Binomial FISTA */</span>
<a name="l00883"></a>00883 <span class="stringliteral"></span>
<a name="l00884"></a>00884 <span class="stringliteral">CREATE FUNCTION MADLIB_SCHEMA.__binomial_fista_transition (</span>
<a name="l00885"></a>00885 <span class="stringliteral"> state DOUBLE PRECISION[],</span>
<a name="l00886"></a>00886 <span class="stringliteral"> ind_var DOUBLE PRECISION[],</span>
<a name="l00887"></a>00887 <span class="stringliteral"> dep_var BOOLEAN,</span>
<a name="l00888"></a>00888 <span class="stringliteral"> pre_state DOUBLE PRECISION[],</span>
<a name="l00889"></a>00889 <span class="stringliteral"> lambda DOUBLE PRECISION,</span>
<a name="l00890"></a>00890 <span class="stringliteral"> alpha DOUBLE PRECISION,</span>
<a name="l00891"></a>00891 <span class="stringliteral"> dimension INTEGER,</span>
<a name="l00892"></a>00892 <span class="stringliteral"> total_rows INTEGER,</span>
<a name="l00893"></a>00893 <span class="stringliteral"> max_stepsize DOUBLE PRECISION,</span>
<a name="l00894"></a>00894 <span class="stringliteral"> eta DOUBLE PRECISION,</span>
<a name="l00895"></a>00895 <span class="stringliteral"> use_active_set INTEGER,</span>
<a name="l00896"></a>00896 <span class="stringliteral"> is_active INTEGER,</span>
<a name="l00897"></a>00897 <span class="stringliteral"> random_stepsize INTEGER</span>
<a name="l00898"></a>00898 <span class="stringliteral">) RETURNS DOUBLE PRECISION[]</span>
<a name="l00899"></a>00899 <span class="stringliteral">AS &#39;</span>MODULE_PATHNAME<span class="stringliteral">&#39;, &#39;</span>binomial_fista_transition<span class="stringliteral">&#39;</span>
<a name="l00900"></a>00900 <span class="stringliteral">LANGUAGE C IMMUTABLE;</span>
<a name="l00901"></a>00901 <span class="stringliteral"></span>
<a name="l00902"></a>00902 <span class="stringliteral">--</span>
<a name="l00903"></a>00903 <span class="stringliteral"></span>
<a name="l00904"></a>00904 <span class="stringliteral">CREATE FUNCTION MADLIB_SCHEMA.__binomial_fista_merge (</span>
<a name="l00905"></a>00905 <span class="stringliteral"> state1 DOUBLE PRECISION[],</span>
<a name="l00906"></a>00906 <span class="stringliteral"> state2 DOUBLE PRECISION[]</span>
<a name="l00907"></a>00907 <span class="stringliteral">) RETURNS DOUBLE PRECISION[] AS</span>
<a name="l00908"></a>00908 <span class="stringliteral">&#39;</span>MODULE_PATHNAME<span class="stringliteral">&#39;, &#39;</span>binomial_fista_merge<span class="stringliteral">&#39;</span>
<a name="l00909"></a>00909 <span class="stringliteral">LANGUAGE C IMMUTABLE STRICT;</span>
<a name="l00910"></a>00910 <span class="stringliteral"></span>
<a name="l00911"></a>00911 <span class="stringliteral">--</span>
<a name="l00912"></a>00912 <span class="stringliteral"></span>
<a name="l00913"></a>00913 <span class="stringliteral">CREATE FUNCTION MADLIB_SCHEMA.__binomial_fista_final (</span>
<a name="l00914"></a>00914 <span class="stringliteral"> state DOUBLE PRECISION[]</span>
<a name="l00915"></a>00915 <span class="stringliteral">) RETURNS DOUBLE PRECISION[] AS</span>
<a name="l00916"></a>00916 <span class="stringliteral">&#39;</span>MODULE_PATHNAME<span class="stringliteral">&#39;, &#39;</span>binomial_fista_final<span class="stringliteral">&#39;</span>
<a name="l00917"></a>00917 <span class="stringliteral">LANGUAGE C IMMUTABLE STRICT;</span>
<a name="l00918"></a>00918 <span class="stringliteral"></span>
<a name="l00919"></a>00919 <span class="stringliteral">/*</span>
<a name="l00920"></a>00920 <span class="stringliteral"> Perform one iteration step of FISTA for linear models</span>
<a name="l00921"></a>00921 <span class="stringliteral"> */</span>
<a name="l00922"></a>00922 <span class="stringliteral">CREATE AGGREGATE MADLIB_SCHEMA.__binomial_fista_step(</span>
<a name="l00923"></a>00923 <span class="stringliteral"> /* ind_var */ DOUBLE PRECISION[],</span>
<a name="l00924"></a>00924 <span class="stringliteral"> /* dep_var */ BOOLEAN,</span>
<a name="l00925"></a>00925 <span class="stringliteral"> /* pre_state */ DOUBLE PRECISION[],</span>
<a name="l00926"></a>00926 <span class="stringliteral"> /* lambda */ DOUBLE PRECISION,</span>
<a name="l00927"></a>00927 <span class="stringliteral"> /* alpha */ DOUBLE PRECISION,</span>
<a name="l00928"></a>00928 <span class="stringliteral"> /* dimension */ INTEGER,</span>
<a name="l00929"></a>00929 <span class="stringliteral"> /* total_rows */ INTEGER,</span>
<a name="l00930"></a>00930 <span class="stringliteral"> /* max_stepsize */ DOUBLE PRECISION,</span>
<a name="l00931"></a>00931 <span class="stringliteral"> /* eta */ DOUBLE PRECISION,</span>
<a name="l00932"></a>00932 <span class="stringliteral"> /* use_active_set */ INTEGER,</span>
<a name="l00933"></a>00933 <span class="stringliteral"> /* is_active */ INTEGER,</span>
<a name="l00934"></a>00934 <span class="stringliteral"> /* random_stepsize */ INTEGER</span>
<a name="l00935"></a>00935 <span class="stringliteral">) (</span>
<a name="l00936"></a>00936 <span class="stringliteral"> SType = DOUBLE PRECISION[],</span>
<a name="l00937"></a>00937 <span class="stringliteral"> SFunc = MADLIB_SCHEMA.__binomial_fista_transition,</span>
<a name="l00938"></a>00938 <span class="stringliteral"> m4_ifdef(`GREENPLUM&#39;</span>, `prefunc = MADLIB_SCHEMA.__binomial_fista_merge,<span class="stringliteral">&#39;)</span>
<a name="l00939"></a>00939 <span class="stringliteral"> FinalFunc = MADLIB_SCHEMA.__binomial_fista_final,</span>
<a name="l00940"></a>00940 <span class="stringliteral"> InitCond = &#39;</span>{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}<span class="stringliteral">&#39;</span>
<a name="l00941"></a>00941 <span class="stringliteral">);</span>
<a name="l00942"></a>00942 <span class="stringliteral"></span>
<a name="l00943"></a>00943 <span class="stringliteral">--</span>
<a name="l00944"></a>00944 <span class="stringliteral"></span>
<a name="l00945"></a>00945 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__binomial_fista_state_diff (</span>
<a name="l00946"></a>00946 <span class="stringliteral"> state1 DOUBLE PRECISION[],</span>
<a name="l00947"></a>00947 <span class="stringliteral"> state2 DOUBLE PRECISION[]</span>
<a name="l00948"></a>00948 <span class="stringliteral">) RETURNS DOUBLE PRECISION AS</span>
<a name="l00949"></a>00949 <span class="stringliteral">&#39;</span>MODULE_PATHNAME<span class="stringliteral">&#39;, &#39;</span>__binomial_fista_state_diff<span class="stringliteral">&#39;</span>
<a name="l00950"></a>00950 <span class="stringliteral">LANGUAGE C IMMUTABLE STRICT;</span>
<a name="l00951"></a>00951 <span class="stringliteral"></span>
<a name="l00952"></a>00952 <span class="stringliteral">--</span>
<a name="l00953"></a>00953 <span class="stringliteral"></span>
<a name="l00954"></a>00954 <span class="stringliteral">CREATE OR REPLACE FUNCTION MADLIB_SCHEMA.__binomial_fista_result (</span>
<a name="l00955"></a>00955 <span class="stringliteral"> in_state DOUBLE PRECISION[]</span>
<a name="l00956"></a>00956 <span class="stringliteral">) RETURNS MADLIB_SCHEMA.__elastic_net_result AS</span>
<a name="l00957"></a>00957 <span class="stringliteral">&#39;</span>MODULE_PATHNAME<span class="stringliteral">&#39;, &#39;</span>__binomial_fista_result<span class="stringliteral">&#39;</span>
<a name="l00958"></a>00958 <span class="stringliteral">LANGUAGE C IMMUTABLE STRICT;</span>
<a name="l00959"></a>00959 <span class="stringliteral"></span>
<a name="l00960"></a>00960 <span class="stringliteral"></span>
</pre></div></div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="elastic__net_8sql__in.html">elastic_net.sql_in</a> </li>
<!-- 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></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>
<li class="footer">Generated on Fri May 10 2013 01:37:13 for MADlib by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.5.1 </li>
</ul>
</div>
</body>
</html>