From 68e18944b6de82070ab3d96fa33623ce9ee04fdd Mon Sep 17 00:00:00 2001 From: mhjensen Date: Wed, 14 Aug 2019 17:13:58 +0200 Subject: [PATCH] update on getting started --- .../How2ReadData/html/How2ReadData-bs.html | 108 +++++++----------- .../html/How2ReadData-reveal.html | 48 +++----- .../html/How2ReadData-solarized.html | 80 +++++-------- doc/pub/How2ReadData/html/How2ReadData.html | 80 +++++-------- doc/pub/How2ReadData/ipynb/How2ReadData.ipynb | 25 ++-- .../ipynb/ipynb-How2ReadData-src.tar.gz | Bin 103580 -> 103580 bytes .../How2ReadData/pdf/How2ReadData-minted.pdf | Bin 464361 -> 464357 bytes doc/src/How2ReadData/How2ReadData.do.txt | 25 ++-- 8 files changed, 142 insertions(+), 224 deletions(-) diff --git a/doc/pub/How2ReadData/html/How2ReadData-bs.html b/doc/pub/How2ReadData/html/How2ReadData-bs.html index a47e06046..b3f391ef5 100644 --- a/doc/pub/How2ReadData/html/How2ReadData-bs.html +++ b/doc/pub/How2ReadData/html/How2ReadData-bs.html @@ -55,27 +55,25 @@ Automatically generated HTML file from DocOnce source None, '___sec8'), ('Basic Matrix Features', 2, None, '___sec9'), - ('Basic Matrix Features', 2, None, '___sec10'), - ('Basic Matrix Features', 2, None, '___sec11'), - ('Some famous Matrices', 2, None, '___sec12'), - ('Basic Matrix Features', 2, None, '___sec13'), - ('Numpy and arrays', 2, None, '___sec14'), - ('Matrices in Python', 2, None, '___sec15'), - ('Meet the Pandas', 2, None, '___sec16'), - ('Reading Data and fitting', 2, None, '___sec17'), + ('Some famous Matrices', 3, None, '___sec10'), + ('More Basic Matrix Features', 3, None, '___sec11'), + ('Numpy and arrays', 2, None, '___sec12'), + ('Matrices in Python', 2, None, '___sec13'), + ('Meet the Pandas', 2, None, '___sec14'), + ('Reading Data and fitting', 2, None, '___sec15'), ('Simple linear regression model using _scikit-learn_', 3, None, - '___sec18'), + '___sec16'), ('To our real data: nuclear binding energies. Brief reminder on ' 'masses and binding energies', 3, None, - '___sec19'), - ('Organizing our data', 3, None, '___sec20'), - ('Seeing the wood for the trees', 3, None, '___sec21'), - ('And what about using neural networks?', 3, None, '___sec22'), - ('A first summary', 2, None, '___sec23')]} + '___sec17'), + ('Organizing our data', 3, None, '___sec18'), + ('Seeing the wood for the trees', 3, None, '___sec19'), + ('And what about using neural networks?', 3, None, '___sec20'), + ('A first summary', 2, None, '___sec21')]} end of tocinfo --> @@ -123,20 +121,18 @@ MathJax.Hub.Config({
  • Installing R, C++, cython, Numba etc
  • Numpy examples and Important Matrix and vector handling packages
  • Basic Matrix Features
  • -
  • Basic Matrix Features
  • -
  • Basic Matrix Features
  • -
  • Some famous Matrices
  • -
  • Basic Matrix Features
  • -
  • Numpy and arrays
  • -
  • Matrices in Python
  • -
  • Meet the Pandas
  • -
  • Reading Data and fitting
  • -
  •    Simple linear regression model using scikit-learn
  • -
  •    To our real data: nuclear binding energies. Brief reminder on masses and binding energies
  • -
  •    Organizing our data
  • -
  •    Seeing the wood for the trees
  • -
  •    And what about using neural networks?
  • -
  • A first summary
  • +
  •    Some famous Matrices
  • +
  •    More Basic Matrix Features
  • +
  • Numpy and arrays
  • +
  • Matrices in Python
  • +
  • Meet the Pandas
  • +
  • Reading Data and fitting
  • +
  •    Simple linear regression model using scikit-learn
  • +
  •    To our real data: nuclear binding energies. Brief reminder on masses and binding energies
  • +
  •    Organizing our data
  • +
  •    Seeing the wood for the trees
  • +
  •    And what about using neural networks?
  • +
  • A first summary
  • @@ -170,7 +166,7 @@ MathJax.Hub.Config({
    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    Aug 13, 2019

    +

    Aug 14, 2019


    @@ -194,7 +190,7 @@ polynomials with random noise added. We will use the Python software package Scikit-Learn and introduce various machine learning algorithms to make fits of the data and predictions. We move thereafter to more interesting -cases such as nuclear binding energies. +cases such as data from say experiments (below we will look at experimental nuclear binding energies as an example). These are examples where we can easily set up the data and then use machine learning algorithms included in for example Scikit-Learn. @@ -204,7 +200,7 @@ These examples will serve us the purpose of getting started. Furthermore, they allow us to catch more than two birds with a stone. They will allow us to bring in some programming specific topics and tools as well as showing the power of various Python -packages for machine learning and statistical data analysis. +libraries for machine learning and statistical data analysis.

    Here, we will mainly focus on two @@ -411,14 +407,14 @@ Here we list several useful Python libraries we strongly recommend (if you use a

    You will also find it convenient to utilize R. We will mainly -use Python during lectures and in various projects and exercises. +use Python during our lectures and in various projects and exercises. Those of you already familiar with R should feel free to continue using R, keeping however an eye on the parallel Python set ups. Similarly, if you are a Python afecionado, feel free to explore R as well. Jupyter/Ipython notebook allows you to run R codes interactively in your -browser. The software library R is tuned to statistically analysis -and allows for an easy usage of the tools we will discuss in these +browser. The software library R is really tailored for statistical data analysis +and allows for an easy usage of the tools and algorithms we will discuss in these lectures.

    @@ -462,7 +458,7 @@ formats, ipython notebooks, latex files, pdf files etc with minimal edits. These

    Numpy examples and Important Matrix and vector handling packages

    -There are several central software packages for linear algebra and eigenvalue problems. Several of the more +There are several central software libraries for linear algebra and eigenvalue problems. Several of the more popular ones have been wrapped into ofter software packages like those from the widely used text Numerical Recipes. The original source codes in many of the available packages are often taken from the widely used software package LAPACK, which follows two other popular packages developed in the 1970s, namely EISPACK and LINPACK. We describe them shortly here. @@ -493,14 +489,6 @@ $$ 0 & 0 & 0 & 1 \end{bmatrix} $$ - - - - -

    Basic Matrix Features

    -
    -
    -

    The inverse of a matrix is defined by @@ -508,16 +496,6 @@ The inverse of a matrix is defined by $$ \mathbf{A}^{-1} \cdot \mathbf{A} = I $$ -

    -
    - - -

    Basic Matrix Features

    - -

    -

    -
    -

    @@ -542,7 +520,7 @@ $$

    -

    Some famous Matrices

    +

    Some famous Matrices

    -

    Basic Matrix Features

    +

    More Basic Matrix Features

    @@ -576,7 +554,7 @@ For an \( N\times N \) matrix \( \mathbf{A} \) the following properties are all
    -

    Numpy and arrays

    +

    Numpy and arrays

    Numpy provides an easy way to handle arrays in Python. The standard way to import this library is as

    @@ -661,7 +639,7 @@ x = np.l print(x.itemsize)

    -

    Matrices in Python

    +

    Matrices in Python

    Having defined vectors, we are now ready to try out matrices. We can @@ -798,7 +776,7 @@ plt.plot(x,y,marker.show() -

    Meet the Pandas

    +

    Meet the Pandas





    @@ -923,7 +901,7 @@ most operations are vectorized, achieving thereby a high performance when dealin As we will see below it leads also to a very concice code close to the mathematical operations we may be interested in. For multidimensional arrays, we recommend strongly xarray. xarray has much of the same flexibility as pandas, but allows for the extension to higher dimensions than two. We will see examples later of the usage of both pandas and xarray. -

    Reading Data and fitting

    +

    Reading Data and fitting

    In order to study various Machine Learning algorithms, we need to @@ -959,7 +937,7 @@ you can easily implement other algorithms like decision trees and random forests But before we really start with nuclear physics data, let's just look at some simpler polynomial fitting cases, such as, (don't be offended) fitting straight lines! -

    Simple linear regression model using scikit-learn

    +

    Simple linear regression model using scikit-learn

    We start with perhaps our simplest possible example, using Scikit-Learn to perform linear regression analysis on a data set produced by us. @@ -1253,7 +1231,7 @@ plt.show() print (error(y)) -

    To our real data: nuclear binding energies. Brief reminder on masses and binding energies

    +

    To our real data: nuclear binding energies. Brief reminder on masses and binding energies

    Let us now dive into nuclear physics and remind ourselves briefly about some basic features about binding @@ -1331,7 +1309,7 @@ We could also add a so-called pairing term, which is a correction term that arises from the tendency of proton pairs and neutron pairs to occur. An even number of particles is more stable than an odd number. -

    Organizing our data

    +

    Organizing our data

    Let us start with reading and organizing our data. @@ -1517,7 +1495,7 @@ save_fig("Masses2016") plt.show() -

    Seeing the wood for the trees

    +

    Seeing the wood for the trees

    As a teaser, let us now see how we can do this with decision trees using scikit-learn. Later we will switch to so-called random forests! @@ -1556,7 +1534,7 @@ plt.show() print(np.mean( (Energies-y_1)**2)) -

    And what about using neural networks?

    +

    And what about using neural networks?

    The seaborn package allows us to visualize data in an efficient way. Note that we use scikit-learn's multi-layer perceptron (or feed forward neural network) functionality. @@ -1594,7 +1572,7 @@ ax.set_xlabel(& plt.show() -

    A first summary

    +

    A first summary

    The aim behind these introductory words was to present to you various diff --git a/doc/pub/How2ReadData/html/How2ReadData-reveal.html b/doc/pub/How2ReadData/html/How2ReadData-reveal.html index 3bc2a9175..5353224f2 100644 --- a/doc/pub/How2ReadData/html/How2ReadData-reveal.html +++ b/doc/pub/How2ReadData/html/How2ReadData-reveal.html @@ -148,7 +148,7 @@ MathJax.Hub.Config({

    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

     
    -

    Aug 13, 2019

    +

    Aug 14, 2019


    Introduction

    @@ -170,7 +170,7 @@ polynomials with random noise added. We will use the Python software package Scikit-Learn and introduce various machine learning algorithms to make fits of the data and predictions. We move thereafter to more interesting -cases such as nuclear binding energies. +cases such as data from say experiments (below we will look at experimental nuclear binding energies as an example). These are examples where we can easily set up the data and then use machine learning algorithms included in for example Scikit-Learn. @@ -180,7 +180,7 @@ These examples will serve us the purpose of getting started. Furthermore, they allow us to catch more than two birds with a stone. They will allow us to bring in some programming specific topics and tools as well as showing the power of various Python -packages for machine learning and statistical data analysis. +libraries for machine learning and statistical data analysis.

    Here, we will mainly focus on two @@ -396,14 +396,14 @@ Here we list several useful Python libraries we strongly recommend (if you use a

    You will also find it convenient to utilize R. We will mainly -use Python during lectures and in various projects and exercises. +use Python during our lectures and in various projects and exercises. Those of you already familiar with R should feel free to continue using R, keeping however an eye on the parallel Python set ups. Similarly, if you are a Python afecionado, feel free to explore R as well. Jupyter/Ipython notebook allows you to run R codes interactively in your -browser. The software library R is tuned to statistically analysis -and allows for an easy usage of the tools we will discuss in these +browser. The software library R is really tailored for statistical data analysis +and allows for an easy usage of the tools and algorithms we will discuss in these lectures.

    @@ -447,7 +447,7 @@ formats, ipython notebooks, latex files, pdf files etc with minimal edits. These

    Numpy examples and Important Matrix and vector handling packages

    -There are several central software packages for linear algebra and eigenvalue problems. Several of the more +There are several central software libraries for linear algebra and eigenvalue problems. Several of the more popular ones have been wrapped into ofter software packages like those from the widely used text Numerical Recipes. The original source codes in many of the available packages are often taken from the widely used software package LAPACK, which follows two other popular packages developed in the 1970s, namely EISPACK and LINPACK. We describe them shortly here. @@ -482,11 +482,7 @@ $$ \end{bmatrix} $$

     
    - -

    Basic Matrix Features

    -
    -

    The inverse of a matrix is defined by @@ -495,13 +491,7 @@ $$ \mathbf{A}^{-1} \cdot \mathbf{A} = I $$

     
    -

    -

    Basic Matrix Features

    - -

    -

    -Matrix Properties Reminder.

    @@ -518,7 +508,7 @@ $$ -

    Some famous Matrices

    +

    Some famous Matrices

      @@ -541,7 +531,7 @@ $$

    • Banded, block upper triangular, block lower triangular....
    -

    Basic Matrix Features

    +

    More Basic Matrix Features

    @@ -565,7 +555,7 @@ For an \( N\times N \) matrix \( \mathbf{A} \) the following properties are all
    -

    Numpy and arrays

    +

    Numpy and arrays

    Numpy provides an easy way to handle arrays in Python. The standard way to import this library is as

    @@ -650,7 +640,7 @@ x = np.log(np.array([4.0, print(x.itemsize) -

    Matrices in Python

    +

    Matrices in Python

    Having defined vectors, we are now ready to try out matrices. We can @@ -793,7 +783,7 @@ plt.plot(x,y,marker='x') plt.show() -

    Meet the Pandas

    +

    Meet the Pandas





    @@ -918,7 +908,7 @@ most operations are vectorized, achieving thereby a high performance when dealin As we will see below it leads also to a very concice code close to the mathematical operations we may be interested in. For multidimensional arrays, we recommend strongly xarray. xarray has much of the same flexibility as pandas, but allows for the extension to higher dimensions than two. We will see examples later of the usage of both pandas and xarray. -

    Reading Data and fitting

    +

    Reading Data and fitting

    In order to study various Machine Learning algorithms, we need to @@ -954,7 +944,7 @@ you can easily implement other algorithms like decision trees and random forests But before we really start with nuclear physics data, let's just look at some simpler polynomial fitting cases, such as, (don't be offended) fitting straight lines! -

    Simple linear regression model using scikit-learn

    +

    Simple linear regression model using scikit-learn

    We start with perhaps our simplest possible example, using Scikit-Learn to perform linear regression analysis on a data set produced by us. @@ -1266,7 +1256,7 @@ plt.show() print (error(y)) -

    To our real data: nuclear binding energies. Brief reminder on masses and binding energies

    +

    To our real data: nuclear binding energies. Brief reminder on masses and binding energies

    Let us now dive into nuclear physics and remind ourselves briefly about some basic features about binding @@ -1360,7 +1350,7 @@ We could also add a so-called pairing term, which is a correction term that arises from the tendency of proton pairs and neutron pairs to occur. An even number of particles is more stable than an odd number. -

    Organizing our data

    +

    Organizing our data

    Let us start with reading and organizing our data. @@ -1546,7 +1536,7 @@ save_fig("Masses2016") plt.show() -

    Seeing the wood for the trees

    +

    Seeing the wood for the trees

    As a teaser, let us now see how we can do this with decision trees using scikit-learn. Later we will switch to so-called random forests! @@ -1585,7 +1575,7 @@ plt.show() print(np.mean( (Energies-y_1)**2)) -

    And what about using neural networks?

    +

    And what about using neural networks?

    The seaborn package allows us to visualize data in an efficient way. Note that we use scikit-learn's multi-layer perceptron (or feed forward neural network) functionality. @@ -1623,7 +1613,7 @@ ax.set_xlabel("$\lambda$") plt.show() -

    A first summary

    +

    A first summary

    The aim behind these introductory words was to present to you various diff --git a/doc/pub/How2ReadData/html/How2ReadData-solarized.html b/doc/pub/How2ReadData/html/How2ReadData-solarized.html index 38f4ae343..5b0ab6a7b 100644 --- a/doc/pub/How2ReadData/html/How2ReadData-solarized.html +++ b/doc/pub/How2ReadData/html/How2ReadData-solarized.html @@ -75,27 +75,25 @@ div { text-align: justify; text-justify: inter-word; } None, '___sec8'), ('Basic Matrix Features', 2, None, '___sec9'), - ('Basic Matrix Features', 2, None, '___sec10'), - ('Basic Matrix Features', 2, None, '___sec11'), - ('Some famous Matrices', 2, None, '___sec12'), - ('Basic Matrix Features', 2, None, '___sec13'), - ('Numpy and arrays', 2, None, '___sec14'), - ('Matrices in Python', 2, None, '___sec15'), - ('Meet the Pandas', 2, None, '___sec16'), - ('Reading Data and fitting', 2, None, '___sec17'), + ('Some famous Matrices', 3, None, '___sec10'), + ('More Basic Matrix Features', 3, None, '___sec11'), + ('Numpy and arrays', 2, None, '___sec12'), + ('Matrices in Python', 2, None, '___sec13'), + ('Meet the Pandas', 2, None, '___sec14'), + ('Reading Data and fitting', 2, None, '___sec15'), ('Simple linear regression model using _scikit-learn_', 3, None, - '___sec18'), + '___sec16'), ('To our real data: nuclear binding energies. Brief reminder on ' 'masses and binding energies', 3, None, - '___sec19'), - ('Organizing our data', 3, None, '___sec20'), - ('Seeing the wood for the trees', 3, None, '___sec21'), - ('And what about using neural networks?', 3, None, '___sec22'), - ('A first summary', 2, None, '___sec23')]} + '___sec17'), + ('Organizing our data', 3, None, '___sec18'), + ('Seeing the wood for the trees', 3, None, '___sec19'), + ('And what about using neural networks?', 3, None, '___sec20'), + ('A first summary', 2, None, '___sec21')]} end of tocinfo --> @@ -137,7 +135,7 @@ MathJax.Hub.Config({

    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    Aug 13, 2019

    +

    Aug 14, 2019


    Introduction

    @@ -159,7 +157,7 @@ polynomials with random noise added. We will use the Python software package Scikit-Learn and introduce various machine learning algorithms to make fits of the data and predictions. We move thereafter to more interesting -cases such as nuclear binding energies. +cases such as data from say experiments (below we will look at experimental nuclear binding energies as an example). These are examples where we can easily set up the data and then use machine learning algorithms included in for example Scikit-Learn. @@ -169,7 +167,7 @@ These examples will serve us the purpose of getting started. Furthermore, they allow us to catch more than two birds with a stone. They will allow us to bring in some programming specific topics and tools as well as showing the power of various Python -packages for machine learning and statistical data analysis. +libraries for machine learning and statistical data analysis.

    Here, we will mainly focus on two @@ -376,14 +374,14 @@ Here we list several useful Python libraries we strongly recommend (if you use a

    You will also find it convenient to utilize R. We will mainly -use Python during lectures and in various projects and exercises. +use Python during our lectures and in various projects and exercises. Those of you already familiar with R should feel free to continue using R, keeping however an eye on the parallel Python set ups. Similarly, if you are a Python afecionado, feel free to explore R as well. Jupyter/Ipython notebook allows you to run R codes interactively in your -browser. The software library R is tuned to statistically analysis -and allows for an easy usage of the tools we will discuss in these +browser. The software library R is really tailored for statistical data analysis +and allows for an easy usage of the tools and algorithms we will discuss in these lectures.

    @@ -427,7 +425,7 @@ formats, ipython notebooks, latex files, pdf files etc with minimal edits. These

    Numpy examples and Important Matrix and vector handling packages

    -There are several central software packages for linear algebra and eigenvalue problems. Several of the more +There are several central software libraries for linear algebra and eigenvalue problems. Several of the more popular ones have been wrapped into ofter software packages like those from the widely used text Numerical Recipes. The original source codes in many of the available packages are often taken from the widely used software package LAPACK, which follows two other popular packages developed in the 1970s, namely EISPACK and LINPACK. We describe them shortly here. @@ -458,13 +456,6 @@ $$ 0 & 0 & 0 & 1 \end{bmatrix} $$ - - - -

    Basic Matrix Features

    -
    - -

    The inverse of a matrix is defined by @@ -472,15 +463,6 @@ The inverse of a matrix is defined by $$ \mathbf{A}^{-1} \cdot \mathbf{A} = I $$ -

    - - -

    Basic Matrix Features

    - -

    -

    -Matrix Properties Reminder. -

    @@ -499,7 +481,7 @@ $$ -

    Some famous Matrices

    +

    Some famous Matrices

    • Diagonal if \( a_{ij}=0 \) for \( i\ne j \)
    • @@ -513,7 +495,7 @@ $$
    • Banded, block upper triangular, block lower triangular....
    -

    Basic Matrix Features

    +

    More Basic Matrix Features

    @@ -532,7 +514,7 @@ For an \( N\times N \) matrix \( \mathbf{A} \) the following properties are all
    -

    Numpy and arrays

    +

    Numpy and arrays

    Numpy provides an easy way to handle arrays in Python. The standard way to import this library is as

    @@ -617,7 +599,7 @@ x = np.log(np.array([4.0, print(x.itemsize) -

    Matrices in Python

    +

    Matrices in Python

    Having defined vectors, we are now ready to try out matrices. We can @@ -754,7 +736,7 @@ plt.plot(x,y,marker='x') plt.show() -

    Meet the Pandas

    +

    Meet the Pandas





    @@ -879,7 +861,7 @@ most operations are vectorized, achieving thereby a high performance when dealin As we will see below it leads also to a very concice code close to the mathematical operations we may be interested in. For multidimensional arrays, we recommend strongly xarray. xarray has much of the same flexibility as pandas, but allows for the extension to higher dimensions than two. We will see examples later of the usage of both pandas and xarray. -

    Reading Data and fitting

    +

    Reading Data and fitting

    In order to study various Machine Learning algorithms, we need to @@ -915,7 +897,7 @@ you can easily implement other algorithms like decision trees and random forests But before we really start with nuclear physics data, let's just look at some simpler polynomial fitting cases, such as, (don't be offended) fitting straight lines! -

    Simple linear regression model using scikit-learn

    +

    Simple linear regression model using scikit-learn

    We start with perhaps our simplest possible example, using Scikit-Learn to perform linear regression analysis on a data set produced by us. @@ -1209,7 +1191,7 @@ plt.show() print (error(y)) -

    To our real data: nuclear binding energies. Brief reminder on masses and binding energies

    +

    To our real data: nuclear binding energies. Brief reminder on masses and binding energies

    Let us now dive into nuclear physics and remind ourselves briefly about some basic features about binding @@ -1287,7 +1269,7 @@ We could also add a so-called pairing term, which is a correction term that arises from the tendency of proton pairs and neutron pairs to occur. An even number of particles is more stable than an odd number. -

    Organizing our data

    +

    Organizing our data

    Let us start with reading and organizing our data. @@ -1473,7 +1455,7 @@ save_fig("Masses2016") plt.show() -

    Seeing the wood for the trees

    +

    Seeing the wood for the trees

    As a teaser, let us now see how we can do this with decision trees using scikit-learn. Later we will switch to so-called random forests! @@ -1512,7 +1494,7 @@ plt.show() print(np.mean( (Energies-y_1)**2)) -

    And what about using neural networks?

    +

    And what about using neural networks?

    The seaborn package allows us to visualize data in an efficient way. Note that we use scikit-learn's multi-layer perceptron (or feed forward neural network) functionality. @@ -1550,7 +1532,7 @@ ax.set_xlabel("$\lambda$") plt.show() -

    A first summary

    +

    A first summary

    The aim behind these introductory words was to present to you various diff --git a/doc/pub/How2ReadData/html/How2ReadData.html b/doc/pub/How2ReadData/html/How2ReadData.html index 230e16f8a..24aea122f 100644 --- a/doc/pub/How2ReadData/html/How2ReadData.html +++ b/doc/pub/How2ReadData/html/How2ReadData.html @@ -80,27 +80,25 @@ div { text-align: justify; text-justify: inter-word; } None, '___sec8'), ('Basic Matrix Features', 2, None, '___sec9'), - ('Basic Matrix Features', 2, None, '___sec10'), - ('Basic Matrix Features', 2, None, '___sec11'), - ('Some famous Matrices', 2, None, '___sec12'), - ('Basic Matrix Features', 2, None, '___sec13'), - ('Numpy and arrays', 2, None, '___sec14'), - ('Matrices in Python', 2, None, '___sec15'), - ('Meet the Pandas', 2, None, '___sec16'), - ('Reading Data and fitting', 2, None, '___sec17'), + ('Some famous Matrices', 3, None, '___sec10'), + ('More Basic Matrix Features', 3, None, '___sec11'), + ('Numpy and arrays', 2, None, '___sec12'), + ('Matrices in Python', 2, None, '___sec13'), + ('Meet the Pandas', 2, None, '___sec14'), + ('Reading Data and fitting', 2, None, '___sec15'), ('Simple linear regression model using _scikit-learn_', 3, None, - '___sec18'), + '___sec16'), ('To our real data: nuclear binding energies. Brief reminder on ' 'masses and binding energies', 3, None, - '___sec19'), - ('Organizing our data', 3, None, '___sec20'), - ('Seeing the wood for the trees', 3, None, '___sec21'), - ('And what about using neural networks?', 3, None, '___sec22'), - ('A first summary', 2, None, '___sec23')]} + '___sec17'), + ('Organizing our data', 3, None, '___sec18'), + ('Seeing the wood for the trees', 3, None, '___sec19'), + ('And what about using neural networks?', 3, None, '___sec20'), + ('A first summary', 2, None, '___sec21')]} end of tocinfo --> @@ -142,7 +140,7 @@ MathJax.Hub.Config({

    [2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

    -

    Aug 13, 2019

    +

    Aug 14, 2019


    Introduction

    @@ -164,7 +162,7 @@ polynomials with random noise added. We will use the Python software package Scikit-Learn and introduce various machine learning algorithms to make fits of the data and predictions. We move thereafter to more interesting -cases such as nuclear binding energies. +cases such as data from say experiments (below we will look at experimental nuclear binding energies as an example). These are examples where we can easily set up the data and then use machine learning algorithms included in for example Scikit-Learn. @@ -174,7 +172,7 @@ These examples will serve us the purpose of getting started. Furthermore, they allow us to catch more than two birds with a stone. They will allow us to bring in some programming specific topics and tools as well as showing the power of various Python -packages for machine learning and statistical data analysis. +libraries for machine learning and statistical data analysis.

    Here, we will mainly focus on two @@ -381,14 +379,14 @@ Here we list several useful Python libraries we strongly recommend (if you use a

    You will also find it convenient to utilize R. We will mainly -use Python during lectures and in various projects and exercises. +use Python during our lectures and in various projects and exercises. Those of you already familiar with R should feel free to continue using R, keeping however an eye on the parallel Python set ups. Similarly, if you are a Python afecionado, feel free to explore R as well. Jupyter/Ipython notebook allows you to run R codes interactively in your -browser. The software library R is tuned to statistically analysis -and allows for an easy usage of the tools we will discuss in these +browser. The software library R is really tailored for statistical data analysis +and allows for an easy usage of the tools and algorithms we will discuss in these lectures.

    @@ -432,7 +430,7 @@ formats, ipython notebooks, latex files, pdf files etc with minimal edits. These

    Numpy examples and Important Matrix and vector handling packages

    -There are several central software packages for linear algebra and eigenvalue problems. Several of the more +There are several central software libraries for linear algebra and eigenvalue problems. Several of the more popular ones have been wrapped into ofter software packages like those from the widely used text Numerical Recipes. The original source codes in many of the available packages are often taken from the widely used software package LAPACK, which follows two other popular packages developed in the 1970s, namely EISPACK and LINPACK. We describe them shortly here. @@ -463,13 +461,6 @@ $$ 0 & 0 & 0 & 1 \end{bmatrix} $$ - - - -

    Basic Matrix Features

    -
    - -

    The inverse of a matrix is defined by @@ -477,15 +468,6 @@ The inverse of a matrix is defined by $$ \mathbf{A}^{-1} \cdot \mathbf{A} = I $$ -

    - - -

    Basic Matrix Features

    - -

    -

    -Matrix Properties Reminder. -

    @@ -504,7 +486,7 @@ $$ -

    Some famous Matrices

    +

    Some famous Matrices

    • Diagonal if \( a_{ij}=0 \) for \( i\ne j \)
    • @@ -518,7 +500,7 @@ $$
    • Banded, block upper triangular, block lower triangular....
    -

    Basic Matrix Features

    +

    More Basic Matrix Features

    @@ -537,7 +519,7 @@ For an \( N\times N \) matrix \( \mathbf{A} \) the following properties are all
    -

    Numpy and arrays

    +

    Numpy and arrays

    Numpy provides an easy way to handle arrays in Python. The standard way to import this library is as

    @@ -622,7 +604,7 @@ x = np.l print(x.itemsize) -

    Matrices in Python

    +

    Matrices in Python

    Having defined vectors, we are now ready to try out matrices. We can @@ -759,7 +741,7 @@ plt.plot(x,y,marker.show() -

    Meet the Pandas

    +

    Meet the Pandas





    @@ -884,7 +866,7 @@ most operations are vectorized, achieving thereby a high performance when dealin As we will see below it leads also to a very concice code close to the mathematical operations we may be interested in. For multidimensional arrays, we recommend strongly xarray. xarray has much of the same flexibility as pandas, but allows for the extension to higher dimensions than two. We will see examples later of the usage of both pandas and xarray. -

    Reading Data and fitting

    +

    Reading Data and fitting

    In order to study various Machine Learning algorithms, we need to @@ -920,7 +902,7 @@ you can easily implement other algorithms like decision trees and random forests But before we really start with nuclear physics data, let's just look at some simpler polynomial fitting cases, such as, (don't be offended) fitting straight lines! -

    Simple linear regression model using scikit-learn

    +

    Simple linear regression model using scikit-learn

    We start with perhaps our simplest possible example, using Scikit-Learn to perform linear regression analysis on a data set produced by us. @@ -1214,7 +1196,7 @@ plt.show() print (error(y)) -

    To our real data: nuclear binding energies. Brief reminder on masses and binding energies

    +

    To our real data: nuclear binding energies. Brief reminder on masses and binding energies

    Let us now dive into nuclear physics and remind ourselves briefly about some basic features about binding @@ -1292,7 +1274,7 @@ We could also add a so-called pairing term, which is a correction term that arises from the tendency of proton pairs and neutron pairs to occur. An even number of particles is more stable than an odd number. -

    Organizing our data

    +

    Organizing our data

    Let us start with reading and organizing our data. @@ -1478,7 +1460,7 @@ save_fig("Masses2016") plt.show() -

    Seeing the wood for the trees

    +

    Seeing the wood for the trees

    As a teaser, let us now see how we can do this with decision trees using scikit-learn. Later we will switch to so-called random forests! @@ -1517,7 +1499,7 @@ plt.show() print(np.mean( (Energies-y_1)**2)) -

    And what about using neural networks?

    +

    And what about using neural networks?

    The seaborn package allows us to visualize data in an efficient way. Note that we use scikit-learn's multi-layer perceptron (or feed forward neural network) functionality. @@ -1555,7 +1537,7 @@ ax.set_xlabel(& plt.show() -

    A first summary

    +

    A first summary

    The aim behind these introductory words was to present to you various diff --git a/doc/pub/How2ReadData/ipynb/How2ReadData.ipynb b/doc/pub/How2ReadData/ipynb/How2ReadData.ipynb index a17d0d7a4..6ee1372cb 100644 --- a/doc/pub/How2ReadData/ipynb/How2ReadData.ipynb +++ b/doc/pub/How2ReadData/ipynb/How2ReadData.ipynb @@ -10,7 +10,7 @@ " \n", "**Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University\n", "\n", - "Date: **Aug 13, 2019**\n", + "Date: **Aug 14, 2019**\n", "\n", "Copyright 1999-2019, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license\n", "\n", @@ -36,7 +36,7 @@ "software package [Scikit-Learn](http://scikit-learn.org/stable/) and\n", "introduce various machine learning algorithms to make fits of\n", "the data and predictions. We move thereafter to more interesting\n", - "cases such as nuclear binding energies.\n", + "cases such as data from say experiments (below we will look at experimental nuclear binding energies as an example).\n", "These are examples where we can easily set up the data and\n", "then use machine learning algorithms included in for example\n", "**Scikit-Learn**. \n", @@ -45,7 +45,7 @@ "started. Furthermore, they allow us to catch more than two birds with\n", "a stone. They will allow us to bring in some programming specific\n", "topics and tools as well as showing the power of various Python \n", - "packages for machine learning and statistical data analysis. \n", + "libraries for machine learning and statistical data analysis. \n", "\n", "Here, we will mainly focus on two\n", "specific Python packages for Machine Learning, Scikit-Learn and\n", @@ -249,14 +249,14 @@ "## Installing R, C++, cython or Julia\n", "\n", "You will also find it convenient to utilize **R**. We will mainly\n", - "use Python during lectures and in various projects and exercises.\n", + "use Python during our lectures and in various projects and exercises.\n", "Those of you\n", "already familiar with **R** should feel free to continue using **R**, keeping\n", "however an eye on the parallel Python set ups. Similarly, if you are a\n", "Python afecionado, feel free to explore **R** as well. Jupyter/Ipython\n", "notebook allows you to run **R** codes interactively in your\n", - "browser. The software library **R** is tuned to statistically analysis\n", - "and allows for an easy usage of the tools we will discuss in these\n", + "browser. The software library **R** is really tailored for statistical data analysis\n", + "and allows for an easy usage of the tools and algorithms we will discuss in these\n", "lectures.\n", "\n", "To install **R** with Jupyter notebook \n", @@ -307,7 +307,7 @@ "\n", "## Numpy examples and Important Matrix and vector handling packages\n", "\n", - "There are several central software packages for linear algebra and eigenvalue problems. Several of the more\n", + "There are several central software libraries for linear algebra and eigenvalue problems. Several of the more\n", "popular ones have been wrapped into ofter software packages like those from the widely used text **Numerical Recipes**. The original source codes in many of the available packages are often taken from the widely used\n", "software package LAPACK, which follows two other popular packages\n", "developed in the 1970s, namely EISPACK and LINPACK. We describe them shortly here.\n", @@ -347,8 +347,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Basic Matrix Features\n", - "\n", "The inverse of a matrix is defined by" ] }, @@ -365,11 +363,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Basic Matrix Features\n", - "\n", - "**Matrix Properties Reminder.**\n", - "\n", - "\n", "

    \n", "\n", "\n", @@ -386,7 +379,7 @@ "\n", "\n", "\n", - "## Some famous Matrices\n", + "### Some famous Matrices\n", "\n", " * Diagonal if $a_{ij}=0$ for $i\\ne j$\n", "\n", @@ -406,7 +399,7 @@ "\n", " * Banded, block upper triangular, block lower triangular....\n", "\n", - "## Basic Matrix Features\n", + "### More Basic Matrix Features\n", "\n", "**Some Equivalent Statements.**\n", "\n", diff --git a/doc/pub/How2ReadData/ipynb/ipynb-How2ReadData-src.tar.gz b/doc/pub/How2ReadData/ipynb/ipynb-How2ReadData-src.tar.gz index 4e4f7e1ffa0f085b2fa106bc135b7891babca7ef..1823d4414ed171d1d983d519b4d9847a935de2e4 100644 GIT binary patch delta 21 dcmbQUl5NgPHg@@L4u*d!A&u-?*%_x!0RT~n2Q&Zx delta 21 dcmbQUl5NgPHg@@L4hCNJ;70bX?2J>V002lb21Nh> diff --git a/doc/pub/How2ReadData/pdf/How2ReadData-minted.pdf b/doc/pub/How2ReadData/pdf/How2ReadData-minted.pdf index 0b0bd4ff98fcf1fa6232a4e1d371625e2d22c009..bc2461995f4f8a972618c6da647bc39880d63b9c 100644 GIT binary patch delta 25996 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 y@0Yu5&A(A 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 tIK5;$?&l3rl^rr9Z&q?R7=M0)b j$ @@ -350,7 +343,7 @@ The inverse of a matrix is defined by * Banded, block upper triangular, block lower triangular.... -===== Basic Matrix Features ===== +=== More Basic Matrix Features === !bblock Some Equivalent Statements For an $N\times N$ matrix $\mathbf{A}$ the following properties are all equivalent
    Relations Name matrix elements