Skip to content
This repository has been archived by the owner on Jun 25, 2020. It is now read-only.

Latest commit

 

History

History
243 lines (166 loc) · 19.2 KB

_readme_lab2.md

File metadata and controls

243 lines (166 loc) · 19.2 KB

Linear regression

Table of contents

Used software:

  • Python-IDE: PyCharm Community 2017.2;
  • Project Interpreter: python 3.5.3 (amd64);
  • Used python packeges:
    • matplotlib v2.1.0;
    • tabulate v0.8.1;
    • numpy v1.13.3.

Problem

  1. Implement linear regression;
  2. Configure the coefficient vector in two ways - gradient descent and evolution algorithm;
  3. To assess the quality of use MSE;
  4. Select hyperparameters and methods arbitrarily;
  5. Perform data visualization;
  6. Teach the code to take additional points from the console to check the already trained model.

Start dataset

Dataset.txt - dependence of objects: area, number of rooms, price.

Program structure

  • DatasetProcessing:
    • getDataset;
    • getSeparetedData;
    • getAvgData;
    • getStandardDeviationData;
    • getNormalizeDataset;
    • getNormalizeInputDataset;
    • getCombinedInputData.
  • GradientDescent:
    • calculateGradientDescent;
    • calculateInputPrice.
  • Visualization:
    • build3DStartDataset (start dots);
    • build3DRegressionLinearPlusInput (gradient);
    • build3DRegressionLinear (all);
    • build3DRegressionLinearGradientVsEvolution (together);
    • build3DCostFunction (gradient);
    • build2DInfo (together);
    • build2DIndividualMSEEvolution (evolution).
  • Evolution:
    • startEvolution;
    • calculateNewPrice (off):
    • testEvo;
    • weightStartIntialization;
    • calculateMSE;
    • mutationProbability;
    • selectionIndividuals;
    • testEvo;
    • selection (off);
    • crossing (off).
  • presentation files:

Output (one start)

Other results:

Graphics (example-output):

3DStartDataset

3DCostFunction

3DRegressionLinear (together)

2DInfo

2DIndividualMSEEvolution

3DRegressionLinearGradientVsEvolution

FAQ

Gradient descent:

\left{\begin{matrix} \widehat{y_i{}}=w_0{}x_0{}+w_1{}x_1{}+w_2{}x_2{}+\cdots+w_N{}x_N{} \ x_0{}=1=const\ \end{matrix}\right.

\left{\begin{matrix} x=\begin{Bmatrix}x_1{},x_2{},\cdots ,x_N{} \end{Bmatrix}^T\ y=\begin{Bmatrix}y_1{},y_2{},\cdots ,y_N{} \end{Bmatrix}^T\ w=\begin{Bmatrix}w_0{},w_1{},\cdots ,w_D{} \end{Bmatrix}^T\ \end{matrix}\right.

\left{\begin{matrix} w_i{}=w_i{}-\alpha\frac{\partial}{\partial w_i{}}J(w)\ \frac{\partial}{\partial w_i{}}J(w)=\frac{\partial}{\partial w_i{}}\frac{1} {2*N}\sum_{i=1}^{N}(\widehat{y_i{}}-y_i{})^2=\frac{[x^T]{}([x][w]-[y])}{N}\ \end{matrix}\right.

\left{\begin{matrix} [w]=[w]-\alphax^T{}\ [\widehat{y}]=[x][w]\ \end{matrix}\right.

[w]=[w]-\alphaX^T{}

\begin{pmatrix} w_1{}\ w_2{}\ \vdots\ w_D{}\ \end{pmatrix}=\begin{pmatrix} w_1{}\ w_2{}\ \vdots\ w_D{}\ \end{pmatrix}-\alpha \begin{pmatrix} 1& 1& \cdots & 1&\ x_{11}&  x_{21}&  \cdots & x_{N1}\ x_{12}&  x_{22}&  \cdots & x_{N2}\ \vdots &  \vdots &  \ddots & \vdots \ x_{1D}&  x_{2D}&  \cdots & x_{ND} \end{pmatrix}\begin{pmatrix} \begin{pmatrix} 1& x_{11}&  x_{12}&  \cdots & x_{1D}\ 1& x_{21}&  x_{22}&  \cdots & x_{2D}\ \vdots &  \vdots & \vdots & \ddots & \vdots \ 1& x_{N1}&  x_{N2}&  \cdots & x_{ND} \end{pmatrix}& \begin{pmatrix} w_1{}\ w_2{}\ \vdots\ w_D{}\ \end{pmatrix} -&  \begin{pmatrix} y_1{}\ y_2{}\ \vdots\ y_N{}\ \end{pmatrix} \end{pmatrix}

Evolution algorithm:

evolution algorithm

mutation + selection

example

  1. Generate 7 coefficient vector (np.random.randn(3, 1));

2.1 Calculate MSE for each coefficient vector:

MSE=\frac{1}{2N}\sum_{i=1}^{N}([x][w_i]-[y])^2

2.2 Find the top three MSE and coefficient vectors.

  1. Produce selection with mutation:
  • top one on step 2.2 record to new_w0 without changes/mutations;
  • other six descendats have two mandatory parents (mutation replaces first parent with probability given in main.py);
  • for one descendats possibly only one mutation (probability 33% for each chromosome).
  1. evolution goes through a certain number of iterations given in main.py.
  1. Question: Что такое линейная регрессия?

    Answer: Линейная регрессия — метод восстановления зависимости между двумя переменными.

  2. Question: Что такое среднеквадратичное отклонение/ошибка?

    Answer:

    Q(a,X)=\frac{1}{l}\sum_{i=1}^{l}(a(x_{i})-y_{i})^{2}.

    Это функционал ошибки. Его преимущество (по сравнению с модулем отклюнения алгоритма/прогноза) заключается в том, что квадрат отклонения алгоритма от истинного ответа (a(x)-y)^{2}, содержащийся в нем, является гладкой функцией (имеет производную во всех точках), что позволит использовать минимизацию градиентными методами.

    Для линейной модели (вместо (a(x_{i}), подставляя (\left \langle w,x_{i} \right \rangle получается не функционал, а функция:

    Q(w,X)=\frac{1}{l}\sum_{i=1}^{l}(\left \langle w,x_{i} \right \rangle-y_{i})^{2}.

    Ошибка зависит не от некоторой функции (a(x_{i}), а от вектора весов w, который возможно подвергнуть оптимизации.

  3. Question: Как записать в матричном виде среднеквадратичную ошибку?

    Answer:

    Среднеквадратичная ошибка в матричном виде:

    Q(w,X)=\frac{1}{l}\left | Xw-y \right |^{2}\rightarrow \min_{w}, где:

    X=\begin{pmatrix} {x_{11}}& ...& {x_{1d}}\  ...&  ...& ...\  {x_{l1}}&  ...& {x_{ld}} \end{pmatrix} - матрица "объекты-признаки".

    \begin{pmatrix}{x_{11}} &  ...& {x_{1d}} \end{pmatrix} - все признаки i-ого объекта.

    \begin{pmatrix}{x_{11}}\ ...\ {x_{l1}}\end{pmatrix} - значения j-ого признака на всех объектах.

    y=\begin{bmatrix}{y_{1}}\ ...\ {y_{l}} \end{bmatrix} - вектор ответов.

  4. Question: Зачем использовать градиентный спуск, если существует способ получения аналитического решения задачи минимизации среднеквадратичной ошибки без оптимизации?

    Аналитическое решение: {w_{*}}=(X^{T}X)^{-1}X^{T}y.

    Answer:
    Основная проблема состоит в том, что необходимо обращать матрицу d\times d (число признаков на признаков) - число операций {d^{3}}. На тысяче признаков - критическая сложность вычислений.

    Кроме того, при обращении могут возникнуть численные проблемы при определенном устройстве матриц.

  5. Question: Что такое градиентый спуск?

    Answer: Градиентый спуск - это способ поиска решения оптимизационным подходом.

    Подход основан на том, что среднеквадратичная ошибка обладает свойствами выпуклой и гладкой функции.

    Из выпуклости функции следует, что у функции существует один минимум, а из гладкости, что в каждой точки функции возможно вычислить градиент.

    Градиент - это вектор, указывающий направление наибольшего возрастания некоторой величины.

    Другими словами, градиент показывает сторону наискорейшего возрастания функции, а антиградиент показывает сторону наискорейшего убавания функции.

    Алгоритм:

    1. Инициализация:

    Каким-то образом находится начальное приближение для вектора весов: либо вектор заполняется нулями w: w^0=0, либо случайными небольшими числами.

    1. Цикл t:

      w^{t}=w^{t-1}-{\eta_{t}}\bigtriangledown Q(w^{t-1},X), где

      \bigtriangledown Q(w^{t-1},X) - вектор градиентов этой точки;

      {\eta_{t}} - шаг, регулирует, на сколько далеко шагаем в сторону антиградиента (оптимальный шаг не слишком большой).

      Градиентные шаги повторяются до наступления сходимости.

      Сходимость можно определять:

      • как ситуацию, когда векторы весов от шага к шагу меняются не очень сильно: \left | w^{t}-w^{t-1} \right |<\varepsilon ;

      • производить сравнение функционала ошибки между текущей иттерацией и предыдущей.

  6. Question: Настройка коэффециентов линейной регрессии генетикой

    Answer:

  7. Question: Среднеквадратичная линейная регрессия

    Answer:

other: параметры сглаживания (2) регуляризация коэффициент сглаживания матрица весов (нули) градиент ошибки - производная по всем направлениям эвристики для подбора матрицы весов (веса в отрезке) критерий останова (епсилон) \количество итераций (2000), ошибка (0,063) задача линейной регрессии эмпирический риск псевдообразная матрица (точное решение)

включать случайные в алгоритм для генетического разнообразия (чтобы не застрять в локальном минимуме) цель - оптимизация функции ошибки (эмперического риска)

Links

  1. линейная регрессия; https://ru.coursera.org/learn/supervised-learning/lecture/hCGR6/obuchieniie-linieinoi-rieghriessii https://basegroup.ru/deductor/function/algorithm/linear-regression http://www.machinelearning.ru/wiki/images/6/6d/Voron-ML-1.pdf
  2. London Machine Learning Stydy Group. Lecture 1;
  3. Trace in linear algebra;
  4. Evolution algohithms [RUS].