machinelearning

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit a85539ca7202428d522eb6bf697d81fcec5d8089
parent 3c9ef47af3d828c03113e2a89ea5bb29c13b0d1d
Author: Andrew <andrewlaack1@gmail.com>
Date:   Tue, 14 May 2024 16:58:26 -0500

Created implementation of RMSE/RMSD using python and arbitrary data.

Diffstat:
MlinearRegression/LinRegByHand.ipynb | 40++++++++++++++++++++++++++++++++++++----
MlinearRegression/LinearRegressionSciLearn.ipynb | 27++++++++++++++++++++++++---
ArootMeanSquareError/RMSE.ipynb | 65+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 125 insertions(+), 7 deletions(-)

diff --git a/linearRegression/LinRegByHand.ipynb b/linearRegression/LinRegByHand.ipynb @@ -2,17 +2,18 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 29, "id": "ae9b31b1-3b43-4fc4-a66a-02bdbd36e197", "metadata": {}, "outputs": [], "source": [ - "import pandas as pd" + "import pandas as pd\n", + "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 30, "id": "78775d8d-7c34-45ca-81b6-f11cc3647087", "metadata": {}, "outputs": [], @@ -23,7 +24,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 31, "id": "5cb98e28-6901-498e-a32c-1105d22220cc", "metadata": {}, "outputs": [ @@ -65,6 +66,37 @@ "source": [ "print(df)" ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "69dbc13a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "<Axes: xlabel='GDP per capita (USD)', ylabel='Life satisfaction'>" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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dDa3w825556rV155pUX7woULde6553qkKAAAgL3ldrhZuXKljjnmmBbtRx99tFauXOmRogAAAPaW2+Fmx44drZ6W2rlzp3777TePFAUAALC33A43o0eP1tNPP92i/amnntLIkSM9UhQAAMDe6vBsqWZ33323xo8fr3Xr1unYY4+VJC1btkyrV6/WRx995PECAQAA3OH2kZu0tDQtX75cCQkJWrhwod5++23ZbDZ98803OuqoozqjRgAAgA6zGGOMt4voSjU1NYqJiVF1dTX36gEAwE+4s/92+7TUrn7//Xc1NDS4tBEYAACAN7l9Wqq+vl6XX3654uPj1bNnT/Xp08flBQAA4E1uh5vrrrtOH3/8sebOnauwsDA9++yzuuOOOzRw4EDNnz+/M2oEAADoMLdPS7399tuaP3++jj76aF144YU66qijZLPZlJiYqAULFmjy5MmdUScAAECHuH3kprKyUoMGDZL05/U1lZWVkqQjjzxSOTk5nq0OAADATW6Hm0GDBqm4uFiSNGTIEC1cuFDSn0d0evfu7dHiAAAA3OV2uLnwwgu1bt06SdKNN96oJ554QuHh4brqqqt03XXXebxAAAAAd+zzfW5KS0v11VdfyWaz6ZBDDvFUXZ2G+9wAAOB/3Nl/d+jITd++fVVeXi5Juuiii7R9+3bnssTERJ1++ul+EWwAAEDg61C4aWhoUE1NjSTpxRdf1O+//96pRQEAAOytDk0FT01N1amnnqqRI0fKGKPMzExFRES02vf555/3aIEAAADu6FC4eemll/TII49o48aNslgsqq6u5ugNAADwSW5fUJycnKw1a9YoNja2s2rqVFxQDACA/+nUB2c23+NmV1VVVdzjBgAA+AS373Nz//3369VXX3W+P/vss9W3b1/tt99+zvvfuOOnn37S+eefr9jYWEVERGjEiBFas2ZNm/0//fRTWSyWFq+ysjK3/zYA31HkqNUn+b+quLzO26UA8HNuH7l56qmntGDBAknSkiVLtGTJEn3wwQdauHChrrvuOn300UcdXte2bduUlpamY445Ru+//77i4uJUUFDQoaeL5+fnuxyWio+Pd/erAPABVfUNyszOU06Bw9mWnhKnrAy7YiJDvFgZAH/ldrgpKytTQkKCJOmdd97R2WefreOOO05JSUkaM2aMW+u6//77lZCQoHnz5jnbkpOTO/TZ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Fpf2YItF6Slx3WLGEGMAAOhshJsulpVhV5rN6tKWZrMqK8PupYq6HmMAAOhMPDjTS4rL61RSUdet7/HCGAAAOsqd/Tf3ufGSZCs7dMYAANAZOC0FAAACCuEGAAAEFMINAAAIKIQbAAAQUAg3AAAgoBBuAABAQCHcAACAgEK4AQAAAYVwAwAAAgrhBgAABJRu9/iF5kdp1dTUeLkSAADQUc377Y48ErPbhZvt27dLkhISErxcCQAAcNf27dsVExPTbp9u91TwpqYm/fzzz+rVq5e2b9+uhIQEbd682atPCPcFNTU1jMX/MBZ/YSz+xDj8hbH4C2Pxl64YC2OMtm/froEDByooqP2rarrdkZugoCDtv//+kiSLxSJJio6O7vYbZjPG4i+MxV8Yiz8xDn9hLP7CWPyls8diT0dsmnFBMQAACCiEGwAAEFC6dbgJCwvTrFmzFBYW5u1SvI6x+Atj8RfG4k+Mw18Yi78wFn/xtbHodhcUAwCAwNatj9wAAIDAQ7gBAAABhXADAAACCuEGAAAEFL8LN7Nnz9bf/vY39erVS/Hx8Tr11FOVn5/v0ufoo4+WxWJxeV166aUufTZt2qSTTjpJkZGRio+P13XXXac//vjDpc+nn36qww8/XGFhYbLZbHrhhRda1PPEE08oKSlJ4eHhGjNmjFatWuXx79yauXPn6pBDDnHeMCk1NVXvv/++c/nvv/+uGTNmKDY2VlFRUTrjjDP0yy+/uKzD38eg2Z7GojtsD6257777ZLFYdOWVVzrbutN2savWxqK7bBe33357i+85ZMgQ5/LutE3saSy6yzbR7KefftL555+v2NhYRUREaMSIEVqzZo1zuTFGt912mwYMGKCIiAiNHz9eBQUFLuuorKzU5MmTFR0drd69e2vatGmqra116fPNN9/oqKOOUnh4uBISEvSvf/2rRS2vvfaahgwZovDwcI0YMULvvffevn0542cmTpxo5s2bZ9avX2/y8vLMiSeeaA444ABTW1vr7DNu3DhzySWXmK1btzpf1dXVzuV//PGHGT58uBk/frxZu3atee+994zVajU33XSTs09RUZGJjIw0V199tfn+++9NVlaWCQ4ONh988IGzzyuvvGJCQ0PN888/b7777jtzySWXmN69e5tffvml08dh8eLF5t133zU//vijyc/PNzfffLMJCQkx69evN8YYc+mll5qEhASzbNkys2bNGnPEEUeYsWPHBtQYdHQsusP2sLtVq1aZpKQkc8ghh5iZM2c627vTdtGsrbHoLtvFrFmzzLBhw1y+p8PhcC7vTtvEnsaiu2wTxhhTWVlpEhMTzQUXXGBWrlxpioqKzIcffmgKCwudfe677z4TExNjFi1aZNatW2dOOeUUk5ycbH777Tdnn+OPP94ceuihZsWKFebzzz83NpvNZGRkOJdXV1ebfv36mcmTJ5v169eb7OxsExERYf797387++Tm5prg4GDzr3/9y3z//ffmlltuMSEhIebbb7/d6+/nd+Fmd7/++quRZD777DNn27hx41z+I7a79957zwQFBZmysjJn29y5c010dLTZsWOHMcaY66+/3gwbNszlc+ecc46ZOHGi8/3o0aPNjBkznO8bGxvNwIEDzezZs/f1a+2VPn36mGeffdZUVVWZkJAQ89prrzmXbdiwwUgyy5cvN8YE7hg0ax4LY7rf9rB9+3aTkpJilixZ4vLdu+N20dZYGNN9totZs2aZQw89tNVl3W2baG8sjOk+24Qxxtxwww3myCOPbHN5U1OT6d+/v3nggQecbVVVVSYsLMxkZ2cbY4z5/vvvjSSzevVqZ5/333/fWCwW89NPPxljjHnyySdNnz59nOPT/LcHDx7sfH/22Webk046yeXvjxkzxvzjH//Y6+/nd6eldlddXS1J6tu3r0v7ggULZLVaNXz4cN10002qr693Llu+fLlGjBihfv36OdsmTpyompoafffdd84+48ePd1nnxIkTtXz5cklSQ0ODvvrqK5c+QUFBGj9+vLNPV2lsbNQrr7yiuro6paam6quvvtLOnTtdahsyZIgOOOAAZ22BNgbNdh+LZt1pe5gxY4ZOOumkFvV2x+2irbFo1l22i4KCAg0cOFCDBg3S5MmTtWnTJkndc5toayyadZdtYvHixRo1apTOOussxcfHy26365lnnnEuLy4uVllZmUudMTExGjNmjMu20bt3b40aNcrZZ/z48QoKCtLKlSudfdLT0xUaGursM3HiROXn52vbtm3OPu2N2d7w6wdnNjU16corr1RaWpqGDx/ubD/vvPOUmJiogQMH6ptvvtENN9yg/Px8vfHGG5KksrIyl41TkvN9WVlZu31qamr022+/adu2bWpsbGy1zw8//ODx79qab7/9Vqmpqfr9998VFRWlN998UwcffLDy8vIUGhqq3r17t6htT9+veVl7fXxpDJq1NRZS99keJOmVV17R119/rdWrV7dYVlZW1q22i/bGQuo+28WYMWP0wgsvaPDgwdq6davuuOMOHXXUUVq/fn232ybaG4tevXp1m21CkoqKijR37lxdffXVuvnmm7V69WplZmYqNDRUU6dOdX6f1urc9bvGx8e7LO/Ro4f69u3r0ic5ObnFOpqX9enTp80xa17H3vDrcDNjxgytX79eX3zxhUv79OnTnf8eMWKEBgwYoGOPPVYbN27UgQce2NVldprBgwcrLy9P1dXV+u9//6upU6fqs88+83ZZXtHWWBx88MHdZnvYvHmzZs6cqSVLlig8PNzb5XhVR8aiu2wXJ5xwgvPfhxxyiMaMGaPExEQtXLhQERERXqys67U3FtOmTes224T058GBUaNG6d5775Uk2e12rV+/Xk899ZSmTp3q5er2nd+elrr88sv1zjvv6JNPPtH+++/fbt8xY8ZIkgoLCyVJ/fv3bzEboPl9//792+0THR2tiIgIWa1WBQcHt9qneR2dLTQ0VDabTSNHjtTs2bN16KGH6tFHH1X//v3V0NCgqqqqNmsLlDFo1tZYtCZQt4evvvpKv/76qw4//HD16NFDPXr00GeffabHHntMPXr0UL9+/brNdrGnsWhsbGzxmUDdLnbXu3dvHXTQQSosLOyW/63Y1a5j0ZpA3iYGDBjgPLrdbOjQoc7TdM21tFdn//799euvv7os/+OPP1RZWemR7WdfxsPvwo0xRpdffrnefPNNffzxxy0Od7UmLy9P0p8/piSlpqbq22+/dflRlixZoujoaOePnZqaqmXLlrmsZ8mSJc7rOEJDQzVy5EiXPk1NTVq2bJnLtR5dqampSTt27NDIkSMVEhLiUlt+fr42bdrkrC1Qx2DXOnbs2NHqskDdHo499lh9++23ysvLc75GjRqlyZMnO//dXbaLPY1FcHBwi88E6naxu9raWm3cuFEDBgzo9v+t2HUsWhPI20RaWlqL26j8+OOPSkxMlCQlJyerf//+LnXW1NRo5cqVLttGVVWVvvrqK2efjz/+WE1NTc5gmJqaqpycHO3cudPZZ8mSJRo8eLD69Onj7NPemO2Vvb4U2Usuu+wyExMTYz799FOX6Xr19fXGGGMKCwvNnXfeadasWWOKi4vNW2+9ZQYNGmTS09Od62ieznfccceZvLw888EHH5i4uLhWp/Ndd911ZsOGDeaJJ55odTpfWFiYeeGFF8z3339vpk+fbnr37u1yJX1nufHGG81nn31miouLzTfffGNuvPFGY7FYzEcffWSM+XN65wEHHGA+/vhjs2bNGpOammpSU1MDagw6MhbdZXtoy+6zP7rTdrG7XceiO20X11xzjfn0009NcXGxyc3NNePHjzdWq9X8+uuvxpjutU20NxbdaZsw5s9bJPTo0cPcc889pqCgwCxYsMBERkaal156ydnnvvvuM7179zZvvfWW+eabb8ykSZNanQput9vNypUrzRdffGFSUlJcpoJXVVWZfv36mf/7v/8z69evN6+88oqJjIxsMRW8R48e5sEHHzQbNmwws2bN6n5TwSW1+po3b54xxphNmzaZ9PR007dvXxMWFmZsNpu57rrrXO5VYIwxJSUl5oQTTjARERHGarWaa665xuzcudOlzyeffGIOO+wwExoaagYNGuT8G7vKysoyBxxwgAkNDTWjR482K1as6Kyv7uKiiy4yiYmJJjQ01MTFxZljjz3WGWyMMea3334z//znP02fPn1MZGSkOe2008zWrVtd1uHvY9CsvbHoLttDW3YPN91pu9jdrmPRnbaLc845xwwYMMCEhoaa/fbbz5xzzjku9zLpTttEe2PRnbaJZm+//bYZPny4CQsLM0OGDDFPP/20y/KmpiZz6623mn79+pmwsDBz7LHHmvz8fJc+FRUVJiMjw0RFRZno6Ghz4YUXmu3bt7v0WbdunTnyyCNNWFiY2W+//cx9993XopaFCxeagw46yISGhpphw4aZd999d5++m8UYY/b+uA8AAIBv8btrbgAAANpDuAEAAAGFcAMAAAIK4QYAAAQUwg0AAAgohBsAABBQCDcAACCgEG4AAEBAIdwA6PaSkpI0Z86cTlt/enq6Xn755U5bf0d88MEHOuyww9TU1OTVOoCuQLgB/EhZWZlmzpwpm82m8PBw9evXT2lpaZo7d67q6+ud/ZKSkmSxWGSxWBQREaGkpCSdffbZ+vjjj13WV1JS4uxnsVgUGxur4447TmvXru3qr+ZVq1ev1vTp053vLRaLFi1a5JF1L168WL/88ovOPffcPa7/ggsu0Kmnnup8X1xcrPPOO08DBw5UeHi49t9/f02aNEk//PCDy7qaXz179lRKSoouuOACl4cZStLxxx+vkJAQLViwwCPfC/BlhBvATxQVFclut+ujjz7Svffeq7Vr12r58uW6/vrr9c4772jp0qUu/e+8805t3bpV+fn5mj9/vnr37q3x48frnnvuabHupUuXauvWrfrwww9VW1urE044QVVVVV30zf6061ODu1pcXJwiIyM7Zd2PPfaYLrzwQgUFufef2507d2rChAmqrq7WG2+8ofz8fL366qsaMWJEi99m3rx52rp1q7777js98cQTqq2t1ZgxYzR//nyXfhdccIEee+yxff1KgO/bpydTAegyEydONPvvv7+pra1tdXlTU5Pz34mJieaRRx5p0ee2224zQUFB5ocffjDGGFNcXGwkmbVr1zr75ObmGkkuTzHe1axZs8yhhx5qnnrqKbP//vubiIgIc9ZZZ5mqqiqXfs8884wZMmSICQsLM4MHDzZPPPGEc1nz333llVdMenq6CQsLa/XhgsYYs23bNjN9+nQTHx9vwsLCzLBhw8zbb79tjDGmvLzcnHvuuWbgwIEmIiLCDB8+3Lz88ssunx83bpyZMWOGmTFjhomOjjaxsbHmlltuaXO8EhMTXR7Km5iYaIz580nip5xyiomPjzc9e/Y0o0aNMkuWLGm15ma//vqrsVgsZv369S7tksybb77Zov/UqVPNpEmTjDHGrF271kgyJSUl7f6NttY1ZcoU06tXL1NZWelsKy0tNZJcHpwJBCKO3AB+oKKiQh999JFmzJihnj17ttrHYrHscT0zZ86UMUZvvfVWm30iIiIkSQ0NDW32KSws1MKFC/X222/rgw8+0Nq1a/XPf/7TuXzBggW67bbbdM8992jDhg269957deutt+rFF190Wc+NN96omTNnasOGDZo4cWKLv9PU1KQTTjhBubm5eumll/T999/rvvvuU3BwsCTp999/18iRI/Xuu+9q/fr1mj59uv7v//5Pq1atclnPiy++qB49emjVqlV69NFH9fDDD+vZZ59t9butXr1a0l9HQ5rf19bW6sQTT9SyZcu0du1aHX/88Tr55JO1adOmNsfpiy++UGRkpIYOHdpmn7bExcUpKChI//3vf9XY2Oj256+66ipt375dS5YscbYdcMAB6tevnz7//HO31wf4FW+nKwB7tmLFCiPJvPHGGy7tsbGxpmfPnqZnz57m+uuvd7a3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", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df.plot(kind='scatter', x='GDP per capita (USD)', y='Life satisfaction')" + ] } ], "metadata": { diff --git a/linearRegression/LinearRegressionSciLearn.ipynb b/linearRegression/LinearRegressionSciLearn.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 9, + "execution_count": 2, "id": "997cfcd4-1cae-4e39-bc98-d74fee9c15de", "metadata": {}, "outputs": [], @@ -15,7 +15,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 3, "id": "9cb40f1e-4273-4a7e-80d2-91bde63c1b5b", "metadata": {}, "outputs": [], @@ -28,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 4, "id": "6dab85c8-17f4-486a-9c0b-9539b5a31afc", "metadata": {}, "outputs": [ @@ -49,6 +49,27 @@ "plt.axis([23_500, 62_500, 4, 9])\n", "plt.show()" ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "97bdb821", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[6.30165767]]\n" + ] + } + ], + "source": [ + "model = LinearRegression()\n", + "model.fit(X, y)\n", + "X_new = [[37_655.2]] # Example per capita value to predict upon.\n", + "print(model.predict(X_new))" + ] } ], "metadata": { diff --git a/rootMeanSquareError/RMSE.ipynb b/rootMeanSquareError/RMSE.ipynb @@ -0,0 +1,65 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import math\n", + "\n", + "# Often you would use ordered pairs for expected and inference.\n", + "expected = [10, 10, 4, 3, 2, 4, 5, 5]\n", + "inference = [9 , 7, 3, 2, 1, 3, 2, 5]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.695582495781317\n" + ] + } + ], + "source": [ + "count = 0\n", + "total = 0\n", + "while count < len(expected):\n", + " exp = expected[count]\n", + " inf = inference[count]\n", + " total += (exp - inf) ** 2\n", + " count += 1\n", + "\n", + "total = total / count\n", + "total = math.sqrt(total)\n", + "print(total)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "notebook", + "language": "python", + "name": "notebook" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}