Skip to content

Instantly share code, notes, and snippets.

@mattherbert1
Last active October 15, 2020 14:15
Show Gist options
  • Select an option

  • Save mattherbert1/854fe25b74ecdd674ab1acaa7b117cf9 to your computer and use it in GitHub Desktop.

Select an option

Save mattherbert1/854fe25b74ecdd674ab1acaa7b117cf9 to your computer and use it in GitHub Desktop.

Revisions

  1. mattherbert1 revised this gist Oct 15, 2020. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion khf2.ipynb
    Original file line number Diff line number Diff line change
    @@ -30,7 +30,7 @@
    "id": "Mt4XrJmh8WXZ"
    },
    "source": [
    "Herbert Máté - LNHG6Y",
    "Herbert Máté - LNHG6Y\n",
    "Usage: comment out the methods in the code which is not used in the particular scenario"
    ]
    },
  2. mattherbert1 revised this gist Oct 15, 2020. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions khf2.ipynb
    Original file line number Diff line number Diff line change
    @@ -30,6 +30,7 @@
    "id": "Mt4XrJmh8WXZ"
    },
    "source": [
    "Herbert Máté - LNHG6Y",
    "Usage: comment out the methods in the code which is not used in the particular scenario"
    ]
    },
  3. mattherbert1 revised this gist Oct 13, 2020. 1 changed file with 12 additions and 1 deletion.
    13 changes: 12 additions & 1 deletion khf2.ipynb
    Original file line number Diff line number Diff line change
    @@ -5,14 +5,25 @@
    "colab": {
    "name": "khf2.ipynb",
    "provenance": [],
    "authorship_tag": "ABX9TyM9f89fSYzHCwUdMK7BmoFN"
    "authorship_tag": "ABX9TyM9f89fSYzHCwUdMK7BmoFN",
    "include_colab_link": true
    },
    "kernelspec": {
    "name": "python3",
    "display_name": "Python 3"
    }
    },
    "cells": [
    {
    "cell_type": "markdown",
    "metadata": {
    "id": "view-in-github",
    "colab_type": "text"
    },
    "source": [
    "<a href=\"https://colab.research.google.com/gist/mattherbert1/854fe25b74ecdd674ab1acaa7b117cf9/khf2.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
    ]
    },
    {
    "cell_type": "markdown",
    "metadata": {
  4. mattherbert1 created this gist Oct 13, 2020.
    446 changes: 446 additions & 0 deletions khf2.ipynb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,446 @@
    {
    "nbformat": 4,
    "nbformat_minor": 0,
    "metadata": {
    "colab": {
    "name": "khf2.ipynb",
    "provenance": [],
    "authorship_tag": "ABX9TyM9f89fSYzHCwUdMK7BmoFN"
    },
    "kernelspec": {
    "name": "python3",
    "display_name": "Python 3"
    }
    },
    "cells": [
    {
    "cell_type": "markdown",
    "metadata": {
    "id": "Mt4XrJmh8WXZ"
    },
    "source": [
    "Usage: comment out the methods in the code which is not used in the particular scenario"
    ]
    },
    {
    "cell_type": "code",
    "metadata": {
    "id": "GAWeFmC1sFjM"
    },
    "source": [
    "import numpy as np\n",
    "from sklearn import preprocessing\n",
    "import copy"
    ],
    "execution_count": 9,
    "outputs": []
    },
    {
    "cell_type": "code",
    "metadata": {
    "id": "-6bClFPKscUF"
    },
    "source": [
    "def activation(x):\n",
    " return 1 / (1 + np.exp(-x))"
    ],
    "execution_count": 2,
    "outputs": []
    },
    {
    "cell_type": "code",
    "metadata": {
    "id": "TvSEAd5WtaBG"
    },
    "source": [
    "def dactivation(x):\n",
    " return np.exp(-x)/((1+np.exp(-x))**2)"
    ],
    "execution_count": 3,
    "outputs": []
    },
    {
    "cell_type": "code",
    "metadata": {
    "id": "yInbWKD6tce8"
    },
    "source": [
    "# MLP osztály létrehozása.\n",
    "class MLP:\n",
    " \n",
    " # A hálózat inicializálása az argumentumként megadott méretek alapján.\n",
    " def __init__(self, *args):\n",
    " # random seed megadása\n",
    " np.random.seed(123)\n",
    " # A hálózat formája (rétegek száma), amely megegyezik a paraméterek számával\n",
    " self.shape = args\n",
    " n = len(args)\n",
    " # Rétegek létrehozása\n",
    " self.layers = []\n",
    " # Bemeneti réteg létrehozása (+1 egység a BIAS-nak)\n",
    " self.layers.append(np.ones(self.shape[0]+1))\n",
    " # Rejtett réteg(ek) és a kimeneti réteg létrehozása\n",
    " for i in range(1,n):\n",
    " self.layers.append(np.ones(self.shape[i]))\n",
    " # Súlymátrix létrehozása\n",
    " self.weights = []\n",
    " for i in range(n-1):\n",
    " self.weights.append(np.zeros((self.layers[i].size,\n",
    " self.layers[i+1].size)))\n",
    " # dw fogja tartalmazni a súlyok utolsó módosításait (később pl. a momentum módszer számára)\n",
    " self.dw = [0,]*len(self.weights)\n",
    " # Súlyok újrainicializálása\n",
    " self.reset()\n",
    " \n",
    " # Súlyok újrainicializálási függvényének definiálása\n",
    " def reset(self):\n",
    " for i in range(len(self.weights)):\n",
    " # véletlen számok [0,1) tartományban \n",
    " Z = np.random.random((self.layers[i].size,self.layers[i+1].size))\n",
    " # átskálázzuk a súlyokat -1..1 tartományba\n",
    " self.weights[i][...] = (2*Z-1)*1\n",
    "\n",
    " # A bemenő adatok végigküldése a hálózaton, kimeneti rétegig (forward propagation)\n",
    " def propagate_forward(self, data):\n",
    " # Bemeneti réteg beállítása (tanító adatok)\n",
    " self.layers[0][0:-1] = data\n",
    " # Az adatok végigküldése a bemeneti rétegtől az utolsó előtti rétegig (az utolsó ugyanis a kimeneti réteg).\n",
    " # A szigmoid aktivációs függvény használatával, mátrixszorzások alkalmazásával.\n",
    " # Az előadáson a \"layers\" változót jelöltük \"a\"-val.\n",
    " for i in range(1,len(self.shape)):\n",
    " self.layers[i][...] = activation(np.dot(self.layers[i-1],self.weights[i-1]))\n",
    " # Visszatérés a hálózat által becsült eredménnyel\n",
    " return self.layers[-1]\n",
    "\n",
    " # Hibavisszaterjesztés (backpropagation) definiálása. \n",
    " # A a learning rate (tanulási ráta) paraméter befolyásolja, hogy a hálózat súlyait milyen\n",
    " # mértékben módosítsuk a gradiens függvényében. Ha ez az érték túl magas, akkor a háló \n",
    " # \"oszcillálhat\" egy lokális vagy globális minimum körül. Ha túl kicsi értéket választunk,\n",
    " # akkor pedig jelentősen több időbe telik mire elérjük a legjobb megoldást vagy leakad egy lokális \n",
    " # minimumban és sose éri el azt.\n",
    " \n",
    " def propagate_backward(self, target, lrate=0.1):\n",
    " deltas = []\n",
    " # Hiba kiszámítása a kimeneti rétegen\n",
    " error = -(target-self.layers[-1]) # y-y_kalap\n",
    " # error*dactivation(s(3))\n",
    " delta = np.multiply(error,dactivation(np.dot(self.layers[-2],self.weights[-1])))\n",
    " deltas.append(delta)\n",
    " # Gradiens kiszámítása a rejtett réteg(ek)ben\n",
    " for i in range(len(self.shape)-2,0,-1):\n",
    " # pl. utolsó rejtett réteg: delta(3)*(W(2).T)*dactivation(s(2)) (lásd előadás)\n",
    " delta=np.dot(deltas[0],self.weights[i].T)*dactivation(np.dot(self.layers[i-1],self.weights[i-1]))\n",
    " deltas.insert(0,delta) \n",
    " # Súlyok módosítása\n",
    " for i in range(len(self.weights)):\n",
    " layer = np.atleast_2d(self.layers[i])\n",
    " delta = np.atleast_2d(deltas[i])\n",
    " # pl. utolsó rétegben: delta(3)*a(2) (lásd előadás)\n",
    " dw = -lrate*np.dot(layer.T,delta)\n",
    "\n",
    " # HF2 start l1reg\n",
    " # weight modification part of l1reg\n",
    " # dw -= self.l1reg(self.weights[i],10**(-5),lrate)\n",
    " # HF2 end l1reg\n",
    "\n",
    " # HF2 start l2reg\n",
    " # weight modification part of l2reg\n",
    " # dw -= self.l2reg(self.weights[i],10**(-5),lrate)\n",
    " # HF2 end l2reg\n",
    "\n",
    " # HF2 start momentum\n",
    " # weight modification part of momentum\n",
    " # dw -= self.momentum(self.dw[i], 0.75)\n",
    " # HF2 end momentum\n",
    "\n",
    " # súlyok módosítása\n",
    " self.weights[i] += dw \n",
    "\n",
    " # a súlymódosítás eltárolása\n",
    " self.dw[i] = dw\n",
    "\n",
    " cost = 0 # used to cummulate the cost caused by the particular procedure (l1 or l2reg)\n",
    "\n",
    " # HF2 start l1reg\n",
    " # cost part of l1reg\n",
    " # cost = l1reg_cost(10**(-5))\n",
    " # HF2 end l1reg\n",
    "\n",
    " # HF2 start l2reg\n",
    " # cost part of l2reg\n",
    " # cost = l2reg_cost(10**(-5))\n",
    " # HF2 end l2reg\n",
    "\n",
    " err_ret = (error**2).sum() + cost\n",
    "\n",
    " # Visszatérés a hibával\n",
    " return err_ret\n",
    " \n",
    " # HF2 start l1reg\n",
    " def l1reg(weights, lambda_1=10**(-5), lrate=0.1):\n",
    " return lrate * lambda_1 * np.sign(weights)\n",
    "\n",
    " def l1reg_cost(lambda_1=10**(-5)):\n",
    " return lambda_1 * np.abs(self.weights).sum()\n",
    " # HF2 end l1reg\n",
    " \n",
    " # HF2 start l2reg\n",
    " def l2reg(weights, lambda_2=10**(-5), lrate=0.1):\n",
    " return lrate * lambda_2 * weights\n",
    "\n",
    " def l2reg_cost(lambda_2=10**(-5)):\n",
    " return 0.5 * lambda_2 * (self.weights**2).sum()\n",
    " # HF2 end l2reg\n",
    "\n",
    " # HF2 start momentum\n",
    " def momentum(dw, alpha=0.75):\n",
    " return alpha * dw\n",
    "\n",
    " # HF2 end momentum"
    ],
    "execution_count": 10,
    "outputs": []
    },
    {
    "cell_type": "code",
    "metadata": {
    "id": "EwFKCIPPuAck"
    },
    "source": [
    "def learn(network, X, Y, valid_split, test_split, epochs=20, lrate=0.1):\n",
    "\n",
    " # train-validation-test minták különválasztása\n",
    " X_train = X[0:int(nb_samples*(1-valid_split-test_split))]\n",
    " Y_train = Y[0:int(nb_samples*(1-valid_split-test_split))]\n",
    " X_valid = X[int(nb_samples*(1-valid_split-test_split)):int(nb_samples*(1-test_split))]\n",
    " Y_valid = Y[int(nb_samples*(1-valid_split-test_split)):int(nb_samples*(1-test_split))]\n",
    " X_test = X[int(nb_samples*(1-test_split)):]\n",
    " Y_test = Y[int(nb_samples*(1-test_split)):]\n",
    " \n",
    " # standardizálás\n",
    " scaler = preprocessing.StandardScaler().fit(X_train)\n",
    " X_train = scaler.transform(X_train)\n",
    " X_valid = scaler.transform(X_valid)\n",
    " X_test = scaler.transform(X_test)\n",
    " \n",
    " # ugyanolyan sorrendben keverjük be a bemeneteket és kimeneteket, a három külön adatbázisra\n",
    " randperm = np.random.permutation(len(X_train))\n",
    " X_train, Y_train = X_train[randperm], Y_train[randperm]\n",
    " \n",
    " # Tanítási fázis, epoch-szor megyünk át 1-1 véltelenszerűen kiválasztott mintán.\n",
    " for i in range(epochs):\n",
    " # Jelen megoldás azt a módszert használja, hogy a megadott \n",
    " # tanító adatokon végigmegyünk és minden elemet először végigküldünk\n",
    " # a hálózaton, majd terjeszti vissza a kapott eltérést az\n",
    " # elvárt eredménytől. Ezt hívjuk SGD-ek (stochastic gradient descent).\n",
    " train_err = 0\n",
    " for k in range(X_train.shape[0]):\n",
    " network.propagate_forward( X_train[k] )\n",
    " train_err += network.propagate_backward( Y_train[k], lrate )\n",
    " train_err /= X_train.shape[0]\n",
    "\n",
    " # validációs fázis\n",
    " valid_err = 0\n",
    " o_valid = np.zeros(X_valid.shape[0])\n",
    " for k in range(X_valid.shape[0]):\n",
    " o_valid[k] = network.propagate_forward(X_valid[k])\n",
    " valid_err += (o_valid[k]-Y_valid[k])**2\n",
    " valid_err /= X_valid.shape[0]\n",
    "\n",
    " print(\"%d epoch, train_err: %.4f, valid_err: %.4f\" % (i, train_err, valid_err))\n",
    "\n",
    " # Tesztelési fázis\n",
    " print(\"\\n--- TESZTELÉS ---\\n\")\n",
    " test_err = 0\n",
    " o_test = np.zeros(X_test.shape[0])\n",
    " for k in range(X_test.shape[0]):\n",
    " o_test[k] = network.propagate_forward(X_test[k])\n",
    " test_err += (o_test[k]-Y_test[k])**2\n",
    " print(k, X_test[k], '%.2f' % o_test[k], ' (elvart eredmeny: %.2f)' % Y_test[k])\n",
    " test_err /= X_test.shape[0]"
    ],
    "execution_count": 11,
    "outputs": []
    },
    {
    "cell_type": "code",
    "metadata": {
    "id": "CzhTRhQJuJB1"
    },
    "source": [
    "# Mesterséges neurális hálózat létrehozása, 2 bemenettel, 10 rejtett neuronnal és 1 kimenettel\n",
    "network = MLP(2,10,1)"
    ],
    "execution_count": 13,
    "outputs": []
    },
    {
    "cell_type": "code",
    "metadata": {
    "id": "WO7JohWLufT3"
    },
    "source": [
    "# Tanító, validációs és teszt adatok megadása a rendszernek (zajjal terhelt XOR adatok)\n",
    "nb_samples=1000\n",
    "X = np.zeros((nb_samples,2))\n",
    "Y = np.zeros(nb_samples)\n",
    "for i in range(0,nb_samples,4):\n",
    " noise = np.random.normal(0,1,8)\n",
    " X[i], Y[i] = (-2+noise[0],-2+noise[1]), 0\n",
    " X[i+1], Y[i+1] = (2+noise[2],-2+noise[3]), 1\n",
    " X[i+2], Y[i+2] = (-2+noise[4],2+noise[5]), 1\n",
    " X[i+3], Y[i+3] = (2+noise[6],2+noise[7]), 0"
    ],
    "execution_count": 7,
    "outputs": []
    },
    {
    "cell_type": "code",
    "metadata": {
    "id": "oEtfgbdwusN3",
    "outputId": "ee251b9e-905a-4e51-ab0c-ad22cd1407fd",
    "colab": {
    "base_uri": "https://localhost:8080/",
    "height": 1000
    }
    },
    "source": [
    "# Tanítás/Tesztelés indítása\n",
    "network.reset()\n",
    "learn(network, X, Y, 0.2, 0.1)"
    ],
    "execution_count": 12,
    "outputs": [
    {
    "output_type": "stream",
    "text": [
    "0 epoch, train_err: 0.2575, valid_err: 0.2487\n",
    "1 epoch, train_err: 0.2515, valid_err: 0.2455\n",
    "2 epoch, train_err: 0.2472, valid_err: 0.2403\n",
    "3 epoch, train_err: 0.2395, valid_err: 0.2306\n",
    "4 epoch, train_err: 0.2253, valid_err: 0.2131\n",
    "5 epoch, train_err: 0.2017, valid_err: 0.1865\n",
    "6 epoch, train_err: 0.1699, valid_err: 0.1549\n",
    "7 epoch, train_err: 0.1366, valid_err: 0.1260\n",
    "8 epoch, train_err: 0.1091, valid_err: 0.1041\n",
    "9 epoch, train_err: 0.0894, valid_err: 0.0890\n",
    "10 epoch, train_err: 0.0760, valid_err: 0.0787\n",
    "11 epoch, train_err: 0.0667, valid_err: 0.0715\n",
    "12 epoch, train_err: 0.0601, valid_err: 0.0662\n",
    "13 epoch, train_err: 0.0553, valid_err: 0.0623\n",
    "14 epoch, train_err: 0.0516, valid_err: 0.0592\n",
    "15 epoch, train_err: 0.0488, valid_err: 0.0568\n",
    "16 epoch, train_err: 0.0465, valid_err: 0.0548\n",
    "17 epoch, train_err: 0.0446, valid_err: 0.0531\n",
    "18 epoch, train_err: 0.0430, valid_err: 0.0517\n",
    "19 epoch, train_err: 0.0417, valid_err: 0.0505\n",
    "\n",
    "--- TESZTELÉS ---\n",
    "\n",
    "0 [-0.49551261 -0.7444607 ] 0.11 (elvart eredmeny: 0.00)\n",
    "1 [ 0.89288499 -1.26981044] 0.94 (elvart eredmeny: 1.00)\n",
    "2 [-0.17687074 1.45002022] 0.72 (elvart eredmeny: 1.00)\n",
    "3 [0.23518118 1.54853674] 0.36 (elvart eredmeny: 0.00)\n",
    "4 [-0.91921004 -1.15158256] 0.04 (elvart eredmeny: 0.00)\n",
    "5 [ 0.45007887 -0.45520451] 0.63 (elvart eredmeny: 1.00)\n",
    "6 [-0.7232066 0.52937545] 0.86 (elvart eredmeny: 1.00)\n",
    "7 [0.52408431 0.74905089] 0.11 (elvart eredmeny: 0.00)\n",
    "8 [-1.13124799 -0.64346812] 0.09 (elvart eredmeny: 0.00)\n",
    "9 [ 1.05619852 -1.16867333] 0.95 (elvart eredmeny: 1.00)\n",
    "10 [-1.64331284 0.32178486] 0.84 (elvart eredmeny: 1.00)\n",
    "11 [1.27592446 0.47490425] 0.10 (elvart eredmeny: 0.00)\n",
    "12 [-0.85234509 -1.67766207] 0.06 (elvart eredmeny: 0.00)\n",
    "13 [ 1.06439281 -0.01519469] 0.45 (elvart eredmeny: 1.00)\n",
    "14 [-1.49598073 1.1721386 ] 0.98 (elvart eredmeny: 1.00)\n",
    "15 [1.00867052 1.33834844] 0.04 (elvart eredmeny: 0.00)\n",
    "16 [-0.96073952 -0.75856217] 0.06 (elvart eredmeny: 0.00)\n",
    "17 [ 0.96820285 -0.62312564] 0.91 (elvart eredmeny: 1.00)\n",
    "18 [-1.27731201 1.01086655] 0.97 (elvart eredmeny: 1.00)\n",
    "19 [1.24921224 1.45125364] 0.03 (elvart eredmeny: 0.00)\n",
    "20 [-0.68034828 -1.39272014] 0.07 (elvart eredmeny: 0.00)\n",
    "21 [ 0.19203454 -0.69725794] 0.54 (elvart eredmeny: 1.00)\n",
    "22 [-1.35447081 1.3051462 ] 0.98 (elvart eredmeny: 1.00)\n",
    "23 [0.75811891 1.38066171] 0.07 (elvart eredmeny: 0.00)\n",
    "24 [ 0.04865448 -0.90985725] 0.47 (elvart eredmeny: 0.00)\n",
    "25 [ 0.83494361 -0.42420374] 0.81 (elvart eredmeny: 1.00)\n",
    "26 [-0.42625033 1.69214366] 0.85 (elvart eredmeny: 1.00)\n",
    "27 [0.9747302 0.63829576] 0.05 (elvart eredmeny: 0.00)\n",
    "28 [-0.89859695 -1.16324684] 0.04 (elvart eredmeny: 0.00)\n",
    "29 [ 0.99406789 -1.27367092] 0.95 (elvart eredmeny: 1.00)\n",
    "30 [-0.4986541 1.23885647] 0.90 (elvart eredmeny: 1.00)\n",
    "31 [0.94899899 0.93553572] 0.04 (elvart eredmeny: 0.00)\n",
    "32 [-0.98989922 -0.28933404] 0.25 (elvart eredmeny: 0.00)\n",
    "33 [ 1.4178541 -0.81594234] 0.93 (elvart eredmeny: 1.00)\n",
    "34 [-1.28515493 0.39272723] 0.87 (elvart eredmeny: 1.00)\n",
    "35 [1.01544978 0.6359506 ] 0.05 (elvart eredmeny: 0.00)\n",
    "36 [-0.68920096 -1.05628831] 0.06 (elvart eredmeny: 0.00)\n",
    "37 [ 1.23285696 -0.78808995] 0.94 (elvart eredmeny: 1.00)\n",
    "38 [-0.45570044 -0.08445807] 0.36 (elvart eredmeny: 1.00)\n",
    "39 [0.78528024 1.92471042] 0.17 (elvart eredmeny: 0.00)\n",
    "40 [-2.02150252 -0.50132607] 0.34 (elvart eredmeny: 0.00)\n",
    "41 [ 1.07375928 -0.30132133] 0.78 (elvart eredmeny: 1.00)\n",
    "42 [-0.97967981 1.46134931] 0.97 (elvart eredmeny: 1.00)\n",
    "43 [1.43104178 1.01282183] 0.03 (elvart eredmeny: 0.00)\n",
    "44 [-1.42261241 -0.46956705] 0.19 (elvart eredmeny: 0.00)\n",
    "45 [ 0.45148347 -0.9437387 ] 0.85 (elvart eredmeny: 1.00)\n",
    "46 [-0.47857327 1.4169799 ] 0.89 (elvart eredmeny: 1.00)\n",
    "47 [0.73120781 1.20702752] 0.06 (elvart eredmeny: 0.00)\n",
    "48 [-1.59189506 -1.0949691 ] 0.04 (elvart eredmeny: 0.00)\n",
    "49 [ 1.54374629 -0.27527979] 0.76 (elvart eredmeny: 1.00)\n",
    "50 [-0.6027629 0.85996166] 0.91 (elvart eredmeny: 1.00)\n",
    "51 [1.26573007 0.91350389] 0.03 (elvart eredmeny: 0.00)\n",
    "52 [-0.82681195 -0.8418245 ] 0.06 (elvart eredmeny: 0.00)\n",
    "53 [ 0.53999516 -0.55402011] 0.76 (elvart eredmeny: 1.00)\n",
    "54 [-1.38054512 1.27422799] 0.98 (elvart eredmeny: 1.00)\n",
    "55 [0.45722329 0.59802441] 0.15 (elvart eredmeny: 0.00)\n",
    "56 [-2.17252156 -0.95218351] 0.16 (elvart eredmeny: 0.00)\n",
    "57 [ 0.97142945 -0.50835919] 0.88 (elvart eredmeny: 1.00)\n",
    "58 [-0.31580073 0.25126539] 0.54 (elvart eredmeny: 1.00)\n",
    "59 [1.32725243 0.7145116 ] 0.05 (elvart eredmeny: 0.00)\n",
    "60 [-0.93427312 -0.92924414] 0.05 (elvart eredmeny: 0.00)\n",
    "61 [ 0.68579039 -1.28345398] 0.92 (elvart eredmeny: 1.00)\n",
    "62 [-0.7771762 1.29016349] 0.96 (elvart eredmeny: 1.00)\n",
    "63 [0.32342975 0.91520552] 0.19 (elvart eredmeny: 0.00)\n",
    "64 [-1.18335154 -0.38699305] 0.20 (elvart eredmeny: 0.00)\n",
    "65 [ 1.10755805 -0.20065101] 0.69 (elvart eredmeny: 1.00)\n",
    "66 [-1.5946805 1.39085526] 0.98 (elvart eredmeny: 1.00)\n",
    "67 [0.95956766 0.59662601] 0.06 (elvart eredmeny: 0.00)\n",
    "68 [-0.68326656 -0.17477146] 0.31 (elvart eredmeny: 0.00)\n",
    "69 [ 1.60443149 -0.51055056] 0.85 (elvart eredmeny: 1.00)\n",
    "70 [-1.345509 1.06387085] 0.97 (elvart eredmeny: 1.00)\n",
    "71 [1.0399581 1.48467107] 0.04 (elvart eredmeny: 0.00)\n",
    "72 [-0.97578159 -0.8746935 ] 0.05 (elvart eredmeny: 0.00)\n",
    "73 [ 0.59456082 -0.58012958] 0.80 (elvart eredmeny: 1.00)\n",
    "74 [-0.99838184 1.00794573] 0.97 (elvart eredmeny: 1.00)\n",
    "75 [0.67683025 0.94531504] 0.07 (elvart eredmeny: 0.00)\n",
    "76 [-1.38522558 -0.80909313] 0.07 (elvart eredmeny: 0.00)\n",
    "77 [ 0.61733912 -0.56602641] 0.80 (elvart eredmeny: 1.00)\n",
    "78 [-0.07583425 1.30576314] 0.63 (elvart eredmeny: 1.00)\n",
    "79 [0.38597268 0.76179308] 0.16 (elvart eredmeny: 0.00)\n",
    "80 [-1.62192946 -0.87559713] 0.07 (elvart eredmeny: 0.00)\n",
    "81 [ 0.0933582 -1.42405863] 0.67 (elvart eredmeny: 1.00)\n",
    "82 [-0.41178207 1.31268606] 0.87 (elvart eredmeny: 1.00)\n",
    "83 [0.20688708 0.72200264] 0.28 (elvart eredmeny: 0.00)\n",
    "84 [-0.6947673 -0.70454052] 0.09 (elvart eredmeny: 0.00)\n",
    "85 [ 0.15912428 -0.76434734] 0.53 (elvart eredmeny: 1.00)\n",
    "86 [-1.17388859 1.46510224] 0.98 (elvart eredmeny: 1.00)\n",
    "87 [0.79729717 1.08618224] 0.05 (elvart eredmeny: 0.00)\n",
    "88 [-0.95084721 -0.58087122] 0.10 (elvart eredmeny: 0.00)\n",
    "89 [ 0.54332732 -0.58005466] 0.77 (elvart eredmeny: 1.00)\n",
    "90 [-0.36137803 1.75261358] 0.82 (elvart eredmeny: 1.00)\n",
    "91 [1.59511841 0.68196924] 0.09 (elvart eredmeny: 0.00)\n",
    "92 [-0.64393552 -0.51719602] 0.14 (elvart eredmeny: 0.00)\n",
    "93 [ 1.15069897 -0.54158161] 0.90 (elvart eredmeny: 1.00)\n",
    "94 [-0.71245188 0.67784608] 0.90 (elvart eredmeny: 1.00)\n",
    "95 [0.97944428 1.30625314] 0.04 (elvart eredmeny: 0.00)\n",
    "96 [-0.6956089 -1.37664792] 0.06 (elvart eredmeny: 0.00)\n",
    "97 [ 0.49433522 -1.06646624] 0.88 (elvart eredmeny: 1.00)\n",
    "98 [-0.99364269 0.99498732] 0.96 (elvart eredmeny: 1.00)\n",
    "99 [0.44984778 1.28285523] 0.15 (elvart eredmeny: 0.00)\n"
    ],
    "name": "stdout"
    }
    ]
    }
    ]
    }