Files
FYS-STK4155/doc/pub/week38/html/._week38-bs015.html
T
2020-09-19 22:18:32 +02:00

389 lines
22 KiB
HTML

<!--
Automatically generated HTML file from DocOnce source
(https://github.com/hplgit/doconce/)
-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="DocOnce: https://github.com/hplgit/doconce/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Data Analysis and Machine Learning: Logistic Regression">
<title>Data Analysis and Machine Learning: Logistic Regression</title>
<!-- Bootstrap style: bootstrap -->
<link href="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
<!-- not necessary
<link href="https://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
-->
<style type="text/css">
/* Add scrollbar to dropdown menus in bootstrap navigation bar */
.dropdown-menu {
height: auto;
max-height: 400px;
overflow-x: hidden;
}
/* Adds an invisible element before each target to offset for the navigation
bar */
.anchor::before {
content:"";
display:block;
height:50px; /* fixed header height for style bootstrap */
margin:-50px 0 0; /* negative fixed header height */
}
</style>
</head>
<!-- tocinfo
{'highest level': 2,
'sections': [('Plans for week 38', 2, None, '___sec0'),
('Thursday September 17', 2, None, '___sec1'),
('Ridge and LASSO Regression, reminder', 2, None, '___sec2'),
('Various steps in cross-validation', 2, None, '___sec3'),
('How to set up the cross-validation for Ridge and/or Lasso',
2,
None,
'___sec4'),
('Cross-validation in brief', 2, None, '___sec5'),
('Code Example for Cross-validation and $k$-fold '
'Cross-validation',
2,
None,
'___sec6'),
('Bias-Variance tradeoff with Bootstrap', 2, None, '___sec7'),
("Another Example from Scikit-Learn's Repository",
2,
None,
'___sec8'),
('Cross-validation with Ridge', 2, None, '___sec9'),
('The Ising model', 2, None, '___sec10'),
('Reformulating the problem to suit regression',
2,
None,
'___sec11'),
('Linear regression', 2, None, '___sec12'),
('Singular Value decomposition', 2, None, '___sec13'),
('The one-dimensional Ising model', 2, None, '___sec14'),
('Ridge regression', 2, None, '___sec15'),
('LASSO regression', 2, None, '___sec16'),
('Performance as function of the regularization parameter',
2,
None,
'___sec17'),
('Finding the optimal value of $\\lambda$', 2, None, '___sec18'),
('Friday September 18: Intro to Logistic Regression',
2,
None,
'___sec19'),
('Logistic Regression', 2, None, '___sec20'),
('Classification problems', 2, None, '___sec21'),
('Optimization and Deep learning', 2, None, '___sec22'),
('Basics', 2, None, '___sec23'),
('Linear classifier', 2, None, '___sec24'),
('Some selected properties', 2, None, '___sec25'),
('Simple example', 2, None, '___sec26'),
('Plotting the mean value for each group', 2, None, '___sec27'),
('The logistic function', 2, None, '___sec28'),
('Examples of likelihood functions used in logistic regression '
'and nueral networks',
2,
None,
'___sec29'),
('Two parameters', 2, None, '___sec30'),
('Maximum likelihood', 2, None, '___sec31'),
('The cost function rewritten', 2, None, '___sec32'),
('Minimizing the cross entropy', 2, None, '___sec33'),
('A more compact expression', 2, None, '___sec34'),
('Extending to more predictors', 2, None, '___sec35'),
('Including more classes', 2, None, '___sec36'),
('More classes', 2, None, '___sec37'),
('Wisconsin Cancer Data', 2, None, '___sec38'),
('Using the correlation matrix', 2, None, '___sec39'),
('Discussing the correlation data', 2, None, '___sec40'),
('Other measures in classification studies: Cancer Data again',
2,
None,
'___sec41')]}
end of tocinfo -->
<body>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
TeX: {
equationNumbers: { autoNumber: "none" },
extensions: ["AMSmath.js", "AMSsymbols.js", "autobold.js", "color.js"]
}
});
</script>
<script type="text/javascript" async
src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>
<!-- Bootstrap navigation bar -->
<div class="navbar navbar-default navbar-fixed-top">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-responsive-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="week38-bs.html">Data Analysis and Machine Learning: Logistic Regression</a>
</div>
<div class="navbar-collapse collapse navbar-responsive-collapse">
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Contents <b class="caret"></b></a>
<ul class="dropdown-menu">
<!-- navigation toc: --> <li><a href="._week38-bs001.html#___sec0" style="font-size: 80%;">Plans for week 38</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs002.html#___sec1" style="font-size: 80%;">Thursday September 17</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs003.html#___sec2" style="font-size: 80%;">Ridge and LASSO Regression, reminder</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs004.html#___sec3" style="font-size: 80%;">Various steps in cross-validation</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs005.html#___sec4" style="font-size: 80%;">How to set up the cross-validation for Ridge and/or Lasso</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs006.html#___sec5" style="font-size: 80%;">Cross-validation in brief</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs007.html#___sec6" style="font-size: 80%;">Code Example for Cross-validation and \( k \)-fold Cross-validation</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs008.html#___sec7" style="font-size: 80%;">Bias-Variance tradeoff with Bootstrap</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs009.html#___sec8" style="font-size: 80%;">Another Example from Scikit-Learn's Repository</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs010.html#___sec9" style="font-size: 80%;">Cross-validation with Ridge</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs011.html#___sec10" style="font-size: 80%;">The Ising model</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs012.html#___sec11" style="font-size: 80%;">Reformulating the problem to suit regression</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs013.html#___sec12" style="font-size: 80%;">Linear regression</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs014.html#___sec13" style="font-size: 80%;">Singular Value decomposition</a></li>
<!-- navigation toc: --> <li><a href="#___sec14" style="font-size: 80%;">The one-dimensional Ising model</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs016.html#___sec15" style="font-size: 80%;">Ridge regression</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs017.html#___sec16" style="font-size: 80%;">LASSO regression</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs018.html#___sec17" style="font-size: 80%;">Performance as function of the regularization parameter</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs019.html#___sec18" style="font-size: 80%;">Finding the optimal value of \( \lambda \)</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs020.html#___sec19" style="font-size: 80%;">Friday September 18: Intro to Logistic Regression</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs021.html#___sec20" style="font-size: 80%;">Logistic Regression</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs022.html#___sec21" style="font-size: 80%;">Classification problems</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs023.html#___sec22" style="font-size: 80%;">Optimization and Deep learning</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs024.html#___sec23" style="font-size: 80%;">Basics</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs025.html#___sec24" style="font-size: 80%;">Linear classifier</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs026.html#___sec25" style="font-size: 80%;">Some selected properties</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs027.html#___sec26" style="font-size: 80%;">Simple example</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs028.html#___sec27" style="font-size: 80%;">Plotting the mean value for each group</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs029.html#___sec28" style="font-size: 80%;">The logistic function</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs030.html#___sec29" style="font-size: 80%;">Examples of likelihood functions used in logistic regression and nueral networks</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs031.html#___sec30" style="font-size: 80%;">Two parameters</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs032.html#___sec31" style="font-size: 80%;">Maximum likelihood</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs033.html#___sec32" style="font-size: 80%;">The cost function rewritten</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs034.html#___sec33" style="font-size: 80%;">Minimizing the cross entropy</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs035.html#___sec34" style="font-size: 80%;">A more compact expression</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs036.html#___sec35" style="font-size: 80%;">Extending to more predictors</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs037.html#___sec36" style="font-size: 80%;">Including more classes</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs038.html#___sec37" style="font-size: 80%;">More classes</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs039.html#___sec38" style="font-size: 80%;">Wisconsin Cancer Data</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs040.html#___sec39" style="font-size: 80%;">Using the correlation matrix</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs041.html#___sec40" style="font-size: 80%;">Discussing the correlation data</a></li>
<!-- navigation toc: --> <li><a href="._week38-bs042.html#___sec41" style="font-size: 80%;">Other measures in classification studies: Cancer Data again</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div> <!-- end of navigation bar -->
<div class="container">
<p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p> <!-- add vertical space -->
<a name="part0015"></a>
<!-- !split -->
<h2 id="___sec14" class="anchor">The one-dimensional Ising model </h2>
<p>
Let us bring back the Ising model again, but now with an additional
focus on Ridge and Lasso regression as well. We repeat some of the
basic parts of the Ising model and the setup of the training and test
data. The one-dimensional Ising model with nearest neighbor
interaction, no external field and a constant coupling constant \( J \) is
given by
$$
\begin{align}
H = -J \sum_{k}^L s_k s_{k + 1},
\tag{7}
\end{align}
$$
where \( s_i \in \{-1, 1\} \) and \( s_{N + 1} = s_1 \). The number of spins in the system is determined by \( L \). For the one-dimensional system there is no phase transition.
<p>
We will look at a system of \( L = 40 \) spins with a coupling constant of \( J = 1 \). To get enough training data we will generate 10000 states with their respective energies.
<p>
<!-- code=python (!bc pycod) typeset with pygments style "default" -->
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%"><span></span><span style="color: #008000; font-weight: bold">import</span> <span style="color: #0000FF; font-weight: bold">numpy</span> <span style="color: #008000; font-weight: bold">as</span> <span style="color: #0000FF; font-weight: bold">np</span>
<span style="color: #008000; font-weight: bold">import</span> <span style="color: #0000FF; font-weight: bold">matplotlib.pyplot</span> <span style="color: #008000; font-weight: bold">as</span> <span style="color: #0000FF; font-weight: bold">plt</span>
<span style="color: #008000; font-weight: bold">from</span> <span style="color: #0000FF; font-weight: bold">mpl_toolkits.axes_grid1</span> <span style="color: #008000; font-weight: bold">import</span> make_axes_locatable
<span style="color: #008000; font-weight: bold">import</span> <span style="color: #0000FF; font-weight: bold">seaborn</span> <span style="color: #008000; font-weight: bold">as</span> <span style="color: #0000FF; font-weight: bold">sns</span>
<span style="color: #008000; font-weight: bold">import</span> <span style="color: #0000FF; font-weight: bold">scipy.linalg</span> <span style="color: #008000; font-weight: bold">as</span> <span style="color: #0000FF; font-weight: bold">scl</span>
<span style="color: #008000; font-weight: bold">from</span> <span style="color: #0000FF; font-weight: bold">sklearn.model_selection</span> <span style="color: #008000; font-weight: bold">import</span> train_test_split
<span style="color: #008000; font-weight: bold">import</span> <span style="color: #0000FF; font-weight: bold">sklearn.linear_model</span> <span style="color: #008000; font-weight: bold">as</span> <span style="color: #0000FF; font-weight: bold">skl</span>
<span style="color: #008000; font-weight: bold">import</span> <span style="color: #0000FF; font-weight: bold">tqdm</span>
sns<span style="color: #666666">.</span>set(color_codes<span style="color: #666666">=</span><span style="color: #008000; font-weight: bold">True</span>)
cmap_args<span style="color: #666666">=</span><span style="color: #008000">dict</span>(vmin<span style="color: #666666">=-1.</span>, vmax<span style="color: #666666">=1.</span>, cmap<span style="color: #666666">=</span><span style="color: #BA2121">&#39;seismic&#39;</span>)
L <span style="color: #666666">=</span> <span style="color: #666666">40</span>
n <span style="color: #666666">=</span> <span style="color: #008000">int</span>(<span style="color: #666666">1e4</span>)
spins <span style="color: #666666">=</span> np<span style="color: #666666">.</span>random<span style="color: #666666">.</span>choice([<span style="color: #666666">-1</span>, <span style="color: #666666">1</span>], size<span style="color: #666666">=</span>(n, L))
J <span style="color: #666666">=</span> <span style="color: #666666">1.0</span>
energies <span style="color: #666666">=</span> np<span style="color: #666666">.</span>zeros(n)
<span style="color: #008000; font-weight: bold">for</span> i <span style="color: #AA22FF; font-weight: bold">in</span> <span style="color: #008000">range</span>(n):
energies[i] <span style="color: #666666">=</span> <span style="color: #666666">-</span> J <span style="color: #666666">*</span> np<span style="color: #666666">.</span>dot(spins[i], np<span style="color: #666666">.</span>roll(spins[i], <span style="color: #666666">1</span>))
</pre></div>
<p>
A more general form for the one-dimensional Ising model is
$$
\begin{align}
H = - \sum_j^L \sum_k^L s_j s_k J_{jk}.
\tag{8}
\end{align}
$$
<p>
Here we allow for interactions beyond the nearest neighbors and a more
adaptive coupling matrix. This latter expression can be formulated as
a matrix-product on the form
$$
\begin{align}
H = X J,
\tag{9}
\end{align}
$$
<p>
where \( X_{jk} = s_j s_k \) and \( J \) is the matrix consisting of the
elements \( -J_{jk} \). This form of writing the energy fits perfectly
with the form utilized in linear regression, viz.
$$
\begin{align}
\boldsymbol{y} = \boldsymbol{X}\boldsymbol{\beta} + \boldsymbol{\epsilon}.
\tag{10}
\end{align}
$$
We organize the data as we did above
<p>
<!-- code=python (!bc pycod) typeset with pygments style "default" -->
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%"><span></span>X <span style="color: #666666">=</span> np<span style="color: #666666">.</span>zeros((n, L <span style="color: #666666">**</span> <span style="color: #666666">2</span>))
<span style="color: #008000; font-weight: bold">for</span> i <span style="color: #AA22FF; font-weight: bold">in</span> <span style="color: #008000">range</span>(n):
X[i] <span style="color: #666666">=</span> np<span style="color: #666666">.</span>outer(spins[i], spins[i])<span style="color: #666666">.</span>ravel()
y <span style="color: #666666">=</span> energies
X_train, X_test, y_train, y_test <span style="color: #666666">=</span> train_test_split(X, y, test_size<span style="color: #666666">=0.96</span>)
X_train_own <span style="color: #666666">=</span> np<span style="color: #666666">.</span>concatenate(
(np<span style="color: #666666">.</span>ones(<span style="color: #008000">len</span>(X_train))[:, np<span style="color: #666666">.</span>newaxis], X_train),
axis<span style="color: #666666">=1</span>
)
X_test_own <span style="color: #666666">=</span> np<span style="color: #666666">.</span>concatenate(
(np<span style="color: #666666">.</span>ones(<span style="color: #008000">len</span>(X_test))[:, np<span style="color: #666666">.</span>newaxis], X_test),
axis<span style="color: #666666">=1</span>
)
</pre></div>
<p>
We will do all fitting with <b>Scikit-Learn</b>,
<p>
<!-- code=python (!bc pycod) typeset with pygments style "default" -->
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%"><span></span>clf <span style="color: #666666">=</span> skl<span style="color: #666666">.</span>LinearRegression()<span style="color: #666666">.</span>fit(X_train, y_train)
</pre></div>
<p>
When extracting the \( J \)-matrix we make sure to remove the intercept
<p>
<!-- code=python (!bc pycod) typeset with pygments style "default" -->
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%"><span></span>J_sk <span style="color: #666666">=</span> clf<span style="color: #666666">.</span>coef_<span style="color: #666666">.</span>reshape(L, L)
</pre></div>
<p>
And then we plot the results
<p>
<!-- code=python (!bc pycod) typeset with pygments style "default" -->
<div class="highlight" style="background: #f8f8f8"><pre style="line-height: 125%"><span></span>fig <span style="color: #666666">=</span> plt<span style="color: #666666">.</span>figure(figsize<span style="color: #666666">=</span>(<span style="color: #666666">20</span>, <span style="color: #666666">14</span>))
im <span style="color: #666666">=</span> plt<span style="color: #666666">.</span>imshow(J_sk, <span style="color: #666666">**</span>cmap_args)
plt<span style="color: #666666">.</span>title(<span style="color: #BA2121">&quot;LinearRegression from Scikit-learn&quot;</span>, fontsize<span style="color: #666666">=18</span>)
plt<span style="color: #666666">.</span>xticks(fontsize<span style="color: #666666">=18</span>)
plt<span style="color: #666666">.</span>yticks(fontsize<span style="color: #666666">=18</span>)
cb <span style="color: #666666">=</span> fig<span style="color: #666666">.</span>colorbar(im)
cb<span style="color: #666666">.</span>ax<span style="color: #666666">.</span>set_yticklabels(cb<span style="color: #666666">.</span>ax<span style="color: #666666">.</span>get_yticklabels(), fontsize<span style="color: #666666">=18</span>)
plt<span style="color: #666666">.</span>show()
</pre></div>
<p>
The results perfectly with our previous discussion where we used our own code.
<p>
<p>
<!-- navigation buttons at the bottom of the page -->
<ul class="pagination">
<li><a href="._week38-bs014.html">&laquo;</a></li>
<li><a href="._week38-bs000.html">1</a></li>
<li><a href="">...</a></li>
<li><a href="._week38-bs007.html">8</a></li>
<li><a href="._week38-bs008.html">9</a></li>
<li><a href="._week38-bs009.html">10</a></li>
<li><a href="._week38-bs010.html">11</a></li>
<li><a href="._week38-bs011.html">12</a></li>
<li><a href="._week38-bs012.html">13</a></li>
<li><a href="._week38-bs013.html">14</a></li>
<li><a href="._week38-bs014.html">15</a></li>
<li class="active"><a href="._week38-bs015.html">16</a></li>
<li><a href="._week38-bs016.html">17</a></li>
<li><a href="._week38-bs017.html">18</a></li>
<li><a href="._week38-bs018.html">19</a></li>
<li><a href="._week38-bs019.html">20</a></li>
<li><a href="._week38-bs020.html">21</a></li>
<li><a href="._week38-bs021.html">22</a></li>
<li><a href="._week38-bs022.html">23</a></li>
<li><a href="._week38-bs023.html">24</a></li>
<li><a href="._week38-bs024.html">25</a></li>
<li><a href="">...</a></li>
<li><a href="._week38-bs042.html">43</a></li>
<li><a href="._week38-bs016.html">&raquo;</a></li>
</ul>
<!-- ------------------- end of main content --------------- -->
</div> <!-- end container -->
<!-- include javascript, jQuery *first* -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
<!-- Bootstrap footer
<footer>
<a href="http://..."><img width="250" align=right src="http://..."></a>
</footer>
-->
<center style="font-size:80%">
<!-- copyright only on the titlepage -->
</center>
</body>
</html>