190 lines
29 KiB
HTML
190 lines
29 KiB
HTML
<!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.11"/>
|
|
<title>mlpack: Linear/ridge regression tutorial (mlpack_linear_regression)</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="search/search.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
|
<script type="text/javascript" src="search/search.js"></script>
|
|
<script type="text/javascript">
|
|
$(document).ready(function() { init_search(); });
|
|
</script>
|
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
<link href="extra-stylesheet.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 id="projectalign" style="padding-left: 0.5em;">
|
|
<div id="projectname">mlpack
|
|
 <span id="projectnumber">master</span>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Generated by Doxygen 1.8.11 -->
|
|
<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 Page</span></a></li>
|
|
<li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
|
|
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
|
<li><a href="annotated.html"><span>Classes</span></a></li>
|
|
<li><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>
|
|
<!-- window showing the filter options -->
|
|
<div id="MSearchSelectWindow"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
</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><!-- top -->
|
|
<div class="header">
|
|
<div class="headertitle">
|
|
<div class="title">Linear/ridge regression tutorial (mlpack_linear_regression) </div> </div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
<div class="textblock"><h1><a class="anchor" id="intro_lrtut"></a>
|
|
Introduction</h1>
|
|
<p>Linear regression and ridge regression are simple machine learning techniques that aim to estimate the parameters of a linear model. Assuming we have <img class="formulaInl" alt="$n$" src="form_33.png"/> <b>predictor</b> points <img class="formulaInl" alt="$\mathbf{x_i}, 0 \le i < n$" src="form_135.png"/> of dimensionality <img class="formulaInl" alt="$d$" src="form_136.png"/> and <img class="formulaInl" alt="$n$" src="form_33.png"/> responses <img class="formulaInl" alt="$y_i, 0 \le i < n$" src="form_137.png"/>, we are trying to estimate the best fit for <img class="formulaInl" alt="$\beta_i, 0 \le i \le d$" src="form_138.png"/> in the linear model</p>
|
|
<p class="formulaDsp">
|
|
<img class="formulaDsp" alt="\[ y_i = \beta_0 + \displaystyle\sum_{j = 1}^{d} \beta_j x_{ij} \]" src="form_139.png"/>
|
|
</p>
|
|
<p>for each predictor <img class="formulaInl" alt="$\mathbf{x_i}$" src="form_140.png"/> and response <img class="formulaInl" alt="$y_i$" src="form_141.png"/>. If we take each predictor <img class="formulaInl" alt="$\mathbf{x_i}$" src="form_140.png"/> as a row in the matrix <img class="formulaInl" alt="$\mathbf{X}$" src="form_142.png"/> and each response <img class="formulaInl" alt="$y_i$" src="form_141.png"/> as an entry of the vector <img class="formulaInl" alt="$\mathbf{y}$" src="form_143.png"/>, we can represent the model in vector form:</p>
|
|
<p class="formulaDsp">
|
|
<img class="formulaDsp" alt="\[ \mathbf{y} = \mathbf{X} \mathbf{\beta} + \beta_0 \]" src="form_144.png"/>
|
|
</p>
|
|
<p>The result of this method is the vector <img class="formulaInl" alt="$\mathbf{\beta}$" src="form_145.png"/>, including the offset term (or intercept term) <img class="formulaInl" alt="$\beta_0$" src="form_146.png"/>.</p>
|
|
<p><b>mlpack</b> provides:</p>
|
|
<ul>
|
|
<li>a <a class="el" href="lrtutorial.html#cli_lrtut">simple command-line executable</a> to perform linear regression or ridge regression</li>
|
|
<li>a <a class="el" href="lrtutorial.html#linreg_lrtut">simple C++ interface</a> to perform linear regression or ridge regression</li>
|
|
</ul>
|
|
<h1><a class="anchor" id="toc_lrtut"></a>
|
|
Table of Contents</h1>
|
|
<p>A list of all the sections this tutorial contains.</p>
|
|
<ul>
|
|
<li><a class="el" href="lrtutorial.html#intro_lrtut">Introduction</a></li>
|
|
<li><a class="el" href="lrtutorial.html#toc_lrtut">Table of Contents</a></li>
|
|
<li><a class="el" href="lrtutorial.html#cli_lrtut">Command-Line 'mlpack_linear_regression'</a><ul>
|
|
<li><a class="el" href="lrtutorial.html#cli_ex1_lrtut">One file, generating the function coefficients</a></li>
|
|
<li><a class="el" href="lrtutorial.html#cli_ex2_lrtut">Compute model and predict at the same time</a></li>
|
|
<li><a class="el" href="lrtutorial.html#cli_ex3_lrtut">Prediction using a precomputed model</a></li>
|
|
<li><a class="el" href="lrtutorial.html#cli_ex4_lrtut">Using ridge regression</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a class="el" href="lrtutorial.html#linreg_lrtut">The 'LinearRegression' class</a><ul>
|
|
<li><a class="el" href="lrtutorial.html#linreg_ex1_lrtut">Generating a model</a></li>
|
|
<li><a class="el" href="lrtutorial.html#linreg_ex2_lrtut">Setting a model</a></li>
|
|
<li><a class="el" href="lrtutorial.html#linreg_ex3_lrtut">Load a model from a file</a></li>
|
|
<li><a class="el" href="lrtutorial.html#linreg_ex4_lrtut">Prediction</a></li>
|
|
<li><a class="el" href="lrtutorial.html#linreg_ex5_lrtut">Setting lambda for ridge regression</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a class="el" href="lrtutorial.html#further_doc_lrtut">Further documentation</a></li>
|
|
</ul>
|
|
<h1><a class="anchor" id="cli_lrtut"></a>
|
|
Command-Line 'mlpack_linear_regression'</h1>
|
|
<p>The simplest way to perform linear regression or ridge regression in <b>mlpack</b> is to use the <code>mlpack_linear_regression</code> executable. This program will perform linear regression and place the resultant coefficients into one file.</p>
|
|
<p>The output file holds a vector of coefficients in increasing order of dimension; that is, the offset term ( <img class="formulaInl" alt="$\beta_0$" src="form_146.png"/>), the coefficient for dimension 1 ( <img class="formulaInl" alt="$\beta_1$" src="form_147.png"/>, then dimension 2 ( <img class="formulaInl" alt="$\beta_2$" src="form_148.png"/>) and so forth, as well as the intercept. This executable can also predict the <img class="formulaInl" alt="$y$" src="form_149.png"/> values of a second dataset based on the computed coefficients.</p>
|
|
<p>Below are several examples of simple usage (and the resultant output). The <code>option</code> is used so that verbose output is given. Further documentation on each individual option can be found by typing</p>
|
|
<div class="fragment"><div class="line">$ mlpack_linear_regression --help</div></div><!-- fragment --><h2><a class="anchor" id="cli_ex1_lrtut"></a>
|
|
One file, generating the function coefficients</h2>
|
|
<div class="fragment"><div class="line">$ mlpack_linear_regression --training_file dataset.csv -v -M lr.xml</div><div class="line">[INFO ] Loading <span class="stringliteral">'dataset.csv'</span> as CSV data. Size is 2 x 5.</div><div class="line">[INFO ]</div><div class="line">[INFO ] Execution parameters:</div><div class="line">[INFO ] help: <span class="keyword">false</span></div><div class="line">[INFO ] info: <span class="stringliteral">""</span></div><div class="line">[INFO ] input_model_file: <span class="stringliteral">""</span></div><div class="line">[INFO ] lambda: 0</div><div class="line">[INFO ] output_model_file: lr.xml</div><div class="line">[INFO ] output_predictions: predictions.csv</div><div class="line">[INFO ] test_file: <span class="stringliteral">""</span></div><div class="line">[INFO ] training_file: dataset.csv</div><div class="line">[INFO ] training_responses: <span class="stringliteral">""</span></div><div class="line">[INFO ] verbose: <span class="keyword">true</span></div><div class="line">[INFO ] version: <span class="keyword">false</span></div><div class="line">[INFO ]</div><div class="line">[INFO ] Program timers:</div><div class="line">[INFO ] load_regressors: 0.000263s</div><div class="line">[INFO ] loading_data: 0.000220s</div><div class="line">[INFO ] regression: 0.000392s</div><div class="line">[INFO ] total_time: 0.001920s</div></div><!-- fragment --><p>Convenient program timers are given for different parts of the calculation at the bottom of the output, as well as the parameters the simulation was run with. Now, if we look at the output model file, which is <code>lr.xml</code>,</p>
|
|
<div class="fragment"><div class="line">$ cat dataset.csv</div><div class="line">0,0</div><div class="line">1,1</div><div class="line">2,2</div><div class="line">3,3</div><div class="line">4,4</div><div class="line"></div><div class="line">$ cat lr.xml</div><div class="line"><?<a class="code" href="namespacemlpack_1_1data.html#a82fdad40c0f211749dd5b7794a478ad7ac63d17a4db61541233d7579e571c6274">xml</a> version=<span class="stringliteral">"1.0"</span> encoding=<span class="stringliteral">"UTF-8"</span> standalone=<span class="stringliteral">"yes"</span> ?></div><div class="line"><!DOCTYPE boost_serialization></div><div class="line"><boost_serialization signature=<span class="stringliteral">"serialization::archive"</span> version=<span class="stringliteral">"12"</span>></div><div class="line"><linearRegressionModel class_id=<span class="stringliteral">"0"</span> tracking_level=<span class="stringliteral">"0"</span> version=<span class="stringliteral">"0"</span>></div><div class="line"> <parameters class_id=<span class="stringliteral">"1"</span> tracking_level=<span class="stringliteral">"0"</span> version=<span class="stringliteral">"0"</span>></div><div class="line"> <n_rows>2</n_rows></div><div class="line"> <n_cols>1</n_cols></div><div class="line"> <n_elem>2</n_elem></div><div class="line"> <vec_state>1</vec_state></div><div class="line"> <item>-3.97205464519563669e-16</item></div><div class="line"> <item>1.00000000000000022e+00</item></div><div class="line"> </parameters></div><div class="line"> <lambda>0.00000000000000000e+00</lambda></div><div class="line"> <intercept>1</intercept></div><div class="line"></linearRegressionModel></div><div class="line"></boost_serialization></div></div><!-- fragment --><p>As you can see, the function for this input is <img class="formulaInl" alt="$f(y)=0+1x_1$" src="form_150.png"/>. We can see that the model we have trained catches this; in the <code></code> <parameters> section of <code>lr.xml</code>, we can see that there are two elements, which are (approximately) 0 and 1. The first element corresponds to the intercept 0, and the second column corresponds to the coefficient 1 for the variable <img class="formulaInl" alt="$x_1$" src="form_151.png"/>. Note that in this example, the regressors for the dataset are the second column. That is, the dataset is one dimensional, and the last column has the <img class="formulaInl" alt="$y$" src="form_149.png"/> values, or responses, for each row. You can specify these responses in a separate file if you want, using the <code>–input_responses</code>, or <code>-r</code>, option.</p>
|
|
<h2><a class="anchor" id="cli_ex2_lrtut"></a>
|
|
Compute model and predict at the same time</h2>
|
|
<div class="fragment"><div class="line">$ mlpack_linear_regression --training_file dataset.csv --test_file predict.csv \</div><div class="line">> -v</div><div class="line">[INFO ] Loading <span class="stringliteral">'dataset.csv'</span> as CSV data. Size is 2 x 5.</div><div class="line">[INFO ] Loading <span class="stringliteral">'predict.csv'</span> as raw ASCII formatted data. Size is 1 x 3.</div><div class="line">[INFO ] Saving CSV data to <span class="stringliteral">'predictions.csv'</span>.</div><div class="line">[INFO ]</div><div class="line">[INFO ] Execution parameters:</div><div class="line">[INFO ] help: <span class="keyword">false</span></div><div class="line">[INFO ] info: <span class="stringliteral">""</span></div><div class="line">[INFO ] input_model_file: <span class="stringliteral">""</span></div><div class="line">[INFO ] lambda: 0</div><div class="line">[INFO ] output_model_file: <span class="stringliteral">""</span></div><div class="line">[INFO ] output_predictions: predictions.csv</div><div class="line">[INFO ] test_file: predict.csv</div><div class="line">[INFO ] training_file: dataset.csv</div><div class="line">[INFO ] training_responses: <span class="stringliteral">""</span></div><div class="line">[INFO ] verbose: <span class="keyword">true</span></div><div class="line">[INFO ] version: <span class="keyword">false</span></div><div class="line">[INFO ]</div><div class="line">[INFO ] Program timers:</div><div class="line">[INFO ] load_regressors: 0.000371s</div><div class="line">[INFO ] load_test_points: 0.000229s</div><div class="line">[INFO ] loading_data: 0.000491s</div><div class="line">[INFO ] prediction: 0.000075s</div><div class="line">[INFO ] regression: 0.000449s</div><div class="line">[INFO ] saving_data: 0.000186s</div><div class="line">[INFO ] total_time: 0.002731s</div><div class="line"></div><div class="line">$ cat dataset.csv</div><div class="line">0,0</div><div class="line">1,1</div><div class="line">2,2</div><div class="line">3,3</div><div class="line">4,4</div><div class="line"></div><div class="line">$ cat predict.csv</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line"></div><div class="line">$ cat predictions.csv</div><div class="line">2.0000000000e+00</div><div class="line">3.0000000000e+00</div><div class="line">4.0000000000e+00</div></div><!-- fragment --><p>We used the same dataset, so we got the same parameters. The key thing to note about the <code>predict.csv</code> dataset is that it has the same dimensionality as the dataset used to create the model, one. If the model generating dataset has <img class="formulaInl" alt="$d$" src="form_136.png"/> dimensions, so must the dataset we want to predict for.</p>
|
|
<h2><a class="anchor" id="cli_ex3_lrtut"></a>
|
|
Prediction using a precomputed model</h2>
|
|
<div class="fragment"><div class="line">$ mlpack_linear_regression --input_model_file lr.xml --test_file predict.csv -v</div><div class="line">[INFO ] Loading <span class="stringliteral">'predict.csv'</span> as raw ASCII formatted data. Size is 1 x 3.</div><div class="line">[INFO ] Saving CSV data to <span class="stringliteral">'predictions.csv'</span>.</div><div class="line">[INFO ]</div><div class="line">[INFO ] Execution parameters:</div><div class="line">[INFO ] help: <span class="keyword">false</span></div><div class="line">[INFO ] info: <span class="stringliteral">""</span></div><div class="line">[INFO ] input_model_file: lr.xml</div><div class="line">[INFO ] lambda: 0</div><div class="line">[INFO ] output_model_file: <span class="stringliteral">""</span></div><div class="line">[INFO ] output_predictions: predictions.csv</div><div class="line">[INFO ] test_file: predict.csv</div><div class="line">[INFO ] training_file: <span class="stringliteral">""</span></div><div class="line">[INFO ] training_responses: <span class="stringliteral">""</span></div><div class="line">[INFO ] verbose: <span class="keyword">true</span></div><div class="line">[INFO ] version: <span class="keyword">false</span></div><div class="line">[INFO ]</div><div class="line">[INFO ] Program timers:</div><div class="line">[INFO ] load_model: 0.000264s</div><div class="line">[INFO ] load_test_points: 0.000186s</div><div class="line">[INFO ] loading_data: 0.000157s</div><div class="line">[INFO ] prediction: 0.000098s</div><div class="line">[INFO ] saving_data: 0.000157s</div><div class="line">[INFO ] total_time: 0.001688s</div><div class="line"></div><div class="line">$ cat lr.xml</div><div class="line"><?<a class="code" href="namespacemlpack_1_1data.html#a82fdad40c0f211749dd5b7794a478ad7ac63d17a4db61541233d7579e571c6274">xml</a> version=<span class="stringliteral">"1.0"</span> encoding=<span class="stringliteral">"UTF-8"</span> standalone=<span class="stringliteral">"yes"</span> ?></div><div class="line"><!DOCTYPE boost_serialization></div><div class="line"><boost_serialization signature=<span class="stringliteral">"serialization::archive"</span> version=<span class="stringliteral">"12"</span>></div><div class="line"><linearRegressionModel class_id=<span class="stringliteral">"0"</span> tracking_level=<span class="stringliteral">"0"</span> version=<span class="stringliteral">"0"</span>></div><div class="line"> <parameters class_id=<span class="stringliteral">"1"</span> tracking_level=<span class="stringliteral">"0"</span> version=<span class="stringliteral">"0"</span>></div><div class="line"> <n_rows>2</n_rows></div><div class="line"> <n_cols>1</n_cols></div><div class="line"> <n_elem>2</n_elem></div><div class="line"> <vec_state>1</vec_state></div><div class="line"> <item>-3.97205464519563669e-16</item></div><div class="line"> <item>1.00000000000000022e+00</item></div><div class="line"> </parameters></div><div class="line"> <lambda>0.00000000000000000e+00</lambda></div><div class="line"> <intercept>1</intercept></div><div class="line"></linearRegressionModel></div><div class="line"></boost_serialization></div><div class="line"></div><div class="line">$ cat predict.csv</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line"></div><div class="line">$ cat predictions.csv</div><div class="line">2.0000000000e+00</div><div class="line">3.0000000000e+00</div><div class="line">4.0000000000e+00</div></div><!-- fragment --><h2><a class="anchor" id="cli_ex4_lrtut"></a>
|
|
Using ridge regression</h2>
|
|
<p>Sometimes, the input matrix of predictors has a covariance matrix that is not invertible, or the system is overdetermined. In this case, ridge regression is useful: it adds a normalization term to the covariance matrix to make it invertible. Ridge regression is a standard technique and documentation for the mathematics behind it can be found anywhere on the Internet. In short, the covariance matrix</p>
|
|
<p class="formulaDsp">
|
|
<img class="formulaDsp" alt="\[ \mathbf{X}' \mathbf{X} \]" src="form_152.png"/>
|
|
</p>
|
|
<p>is replaced with</p>
|
|
<p class="formulaDsp">
|
|
<img class="formulaDsp" alt="\[ \mathbf{X}' \mathbf{X} + \lambda \mathbf{I} \]" src="form_153.png"/>
|
|
</p>
|
|
<p>where <img class="formulaInl" alt="$\mathbf{I}$" src="form_154.png"/> is the identity matrix. So, a <img class="formulaInl" alt="$\lambda$" src="form_155.png"/> parameter greater than zero should be specified to perform ridge regression, using the <code>–lambda</code> (or <code>-l</code>) option. An example is given below.</p>
|
|
<div class="fragment"><div class="line">$ mlpack_linear_regression --training_file dataset.csv -v --lambda 0.5 -M lr.xml</div><div class="line">[INFO ] Loading <span class="stringliteral">'dataset.csv'</span> as CSV data. Size is 2 x 5.</div><div class="line">[INFO ]</div><div class="line">[INFO ] Execution parameters:</div><div class="line">[INFO ] help: <span class="keyword">false</span></div><div class="line">[INFO ] info: <span class="stringliteral">""</span></div><div class="line">[INFO ] input_model_file: <span class="stringliteral">""</span></div><div class="line">[INFO ] lambda: 0.5</div><div class="line">[INFO ] output_model_file: lr.xml</div><div class="line">[INFO ] output_predictions: predictions.csv</div><div class="line">[INFO ] test_file: <span class="stringliteral">""</span></div><div class="line">[INFO ] training_file: dataset.csv</div><div class="line">[INFO ] training_responses: <span class="stringliteral">""</span></div><div class="line">[INFO ] verbose: <span class="keyword">true</span></div><div class="line">[INFO ] version: <span class="keyword">false</span></div><div class="line">[INFO ]</div><div class="line">[INFO ] Program timers:</div><div class="line">[INFO ] load_regressors: 0.000210s</div><div class="line">[INFO ] loading_data: 0.000170s</div><div class="line">[INFO ] regression: 0.000332s</div><div class="line">[INFO ] total_time: 0.001835s</div></div><!-- fragment --><p>Further documentation on options should be found by using the <code>–help</code> option.</p>
|
|
<h1><a class="anchor" id="linreg_lrtut"></a>
|
|
The 'LinearRegression' class</h1>
|
|
<p>The 'LinearRegression' class is a simple implementation of linear regression.</p>
|
|
<p>Using the LinearRegression class is very simple. It has two available constructors; one for generating a model from a matrix of predictors and a vector of responses, and one for loading an already computed model from a given file.</p>
|
|
<p>The class provides one method that performs computation: </p><div class="fragment"><div class="line"><span class="keywordtype">void</span> Predict(<span class="keyword">const</span> arma::mat& points, arma::vec& predictions);</div></div><!-- fragment --><p>Once you have generated or loaded a model, you can call this method and pass it a matrix of data points to predict values for using the model. The second parameter, predictions, will be modified to contain the predicted values corresponding to each row of the points matrix.</p>
|
|
<h2><a class="anchor" id="linreg_ex1_lrtut"></a>
|
|
Generating a model</h2>
|
|
<div class="fragment"><div class="line"><span class="preprocessor">#include <<a class="code" href="linear__regression_8hpp.html">mlpack/methods/linear_regression/linear_regression.hpp</a>></span></div><div class="line"></div><div class="line"><span class="keyword">using namespace </span><a class="code" href="namespacemlpack_1_1regression.html">mlpack::regression</a>;</div><div class="line"></div><div class="line">arma::mat data; <span class="comment">// The dataset itself.</span></div><div class="line">arma::vec responses; <span class="comment">// The responses, one row for each row in data.</span></div><div class="line"></div><div class="line"><span class="comment">// Regress.</span></div><div class="line"><a class="code" href="classmlpack_1_1regression_1_1LinearRegression.html">LinearRegression</a> lr(data, responses);</div><div class="line"></div><div class="line"><span class="comment">// Get the parameters, or coefficients.</span></div><div class="line">arma::vec parameters = lr.Parameters();</div></div><!-- fragment --><h2><a class="anchor" id="linreg_ex2_lrtut"></a>
|
|
Setting a model</h2>
|
|
<p>Assuming you already have a model and do not need to create one, this is how you would set the parameters for a LinearRegression instance.</p>
|
|
<div class="fragment"><div class="line">arma::vec parameters; <span class="comment">// Your model.</span></div><div class="line"></div><div class="line">LinearRegression lr(); <span class="comment">// Create a new LinearRegression instance or reuse one.</span></div><div class="line">lr.Parameters() = parameters; <span class="comment">// Set the model.</span></div></div><!-- fragment --><h2><a class="anchor" id="linreg_ex3_lrtut"></a>
|
|
Load a model from a file</h2>
|
|
<p>If you have a generated model in a file somewhere you would like to load and use, you can use <code><a class="el" href="namespacemlpack_1_1data.html#a19805d6585ac8b0be7c4e4b7f081977c" title="Loads a matrix from file, guessing the filetype from the extension. ">data::Load()</a></code> to load it.</p>
|
|
<div class="fragment"><div class="line"><a class="code" href="bindings_2matlab_2CMakeLists_8txt.html#ad3a3f86b22ab94a882506e9e614165f1">std::string</a> filename; <span class="comment">// The path and name of your file.</span></div><div class="line"></div><div class="line">LinearRegression lr;</div><div class="line"><a class="code" href="namespacemlpack_1_1data.html#a19805d6585ac8b0be7c4e4b7f081977c">data::Load</a>(filename, <span class="stringliteral">"lr_model"</span>, lr);</div></div><!-- fragment --><h2><a class="anchor" id="linreg_ex4_lrtut"></a>
|
|
Prediction</h2>
|
|
<p>Once you have generated or loaded a model using one of the aforementioned methods, you can predict values for a dataset.</p>
|
|
<div class="fragment"><div class="line">LinearRegression lr();</div><div class="line"><span class="comment">// Load or generate your model.</span></div><div class="line"></div><div class="line"><span class="comment">// The dataset we want to predict on; each row is a data point.</span></div><div class="line">arma::mat points;</div><div class="line"><span class="comment">// This will store the predictions; one row for each point.</span></div><div class="line">arma::vec predictions;</div><div class="line"></div><div class="line">lr.Predict(points, predictions); <span class="comment">// Predict.</span></div><div class="line"></div><div class="line"><span class="comment">// Now, the vector 'predictions' will contain the predicted values.</span></div></div><!-- fragment --><h2><a class="anchor" id="linreg_ex5_lrtut"></a>
|
|
Setting lambda for ridge regression</h2>
|
|
<p>As discussed in <a class="el" href="lrtutorial.html#cli_ex4_lrtut">Using ridge regression</a>, ridge regression is useful when the covariance of the predictors is not invertible. The standard constructor can be used to set a value of lambda:</p>
|
|
<div class="fragment"><div class="line"><span class="preprocessor">#include <<a class="code" href="linear__regression_8hpp.html">mlpack/methods/linear_regression/linear_regression.hpp</a>></span></div><div class="line"></div><div class="line"><span class="keyword">using namespace </span><a class="code" href="namespacemlpack_1_1regression.html">mlpack::regression</a>;</div><div class="line"></div><div class="line">arma::mat data; <span class="comment">// The dataset itself.</span></div><div class="line">arma::vec responses; <span class="comment">// The responses, one row for each row in data.</span></div><div class="line"></div><div class="line"><span class="comment">// Regress, with a lambda of 0.5.</span></div><div class="line"><a class="code" href="classmlpack_1_1regression_1_1LinearRegression.html">LinearRegression</a> lr(data, responses, 0.5);</div><div class="line"></div><div class="line"><span class="comment">// Get the parameters, or coefficients.</span></div><div class="line">arma::vec parameters = lr.Parameters();</div></div><!-- fragment --><p>In addition, the <code>Lambda()</code> function can be used to get or modify the lambda value:</p>
|
|
<div class="fragment"><div class="line">LinearRegression lr;</div><div class="line">lr.Lambda() = 0.5;</div><div class="line">Log::Info << <span class="stringliteral">"Lambda is "</span> << lr.Lambda() << <span class="stringliteral">"."</span> << std::endl;</div></div><!-- fragment --><h1><a class="anchor" id="further_doc_lrtut"></a>
|
|
Further documentation</h1>
|
|
<p>For further documentation on the LinearRegression class, consult the <a class="el" href="classmlpack_1_1regression_1_1LinearRegression.html">complete API documentation</a>. </p>
|
|
</div></div><!-- contents -->
|
|
<!-- start footer part -->
|
|
<hr class="footer"/><address class="footer"><small>
|
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
</a> 1.8.11
|
|
</small></address>
|
|
</body>
|
|
<script type="text/javascript">
|
|
var x = document.getElementsByClassName("formulaDsp");
|
|
var i;
|
|
for (i = 0; i < x.length; i++)
|
|
{
|
|
x[i].width /= 4;
|
|
}
|
|
</script>
|
|
</html>
|