machinelearning

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

commit 3196bb39b068759b5e879e3dfb28eada6978242a
parent f6d7d0e9e10ae7d795b21fa2178be11b9031cff8
Author: Andrew <andrewlaack1@gmail.com>
Date:   Thu, 23 May 2024 10:35:40 -0500

Graphed sigmoid function

Diffstat:
MlinearRegression/LinearRegressionHousingV2.ipynb | 820+++++++++++++++++++++++++++----------------------------------------------------
AsigmoidFunction/Sigmoid.ipynb | 76++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 357 insertions(+), 539 deletions(-)

diff --git a/linearRegression/LinearRegressionHousingV2.ipynb b/linearRegression/LinearRegressionHousingV2.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 260, + "execution_count": 288, "metadata": {}, "outputs": [], "source": [ @@ -36,7 +36,7 @@ }, { "cell_type": "code", - "execution_count": 261, + "execution_count": 289, "metadata": {}, "outputs": [ { @@ -78,7 +78,7 @@ }, { "cell_type": "code", - "execution_count": 262, + "execution_count": 290, "metadata": {}, "outputs": [ { @@ -101,7 +101,7 @@ }, { "cell_type": "code", - "execution_count": 263, + "execution_count": 291, "metadata": {}, "outputs": [], "source": [ @@ -117,7 +117,7 @@ }, { "cell_type": "code", - "execution_count": 264, + "execution_count": 292, "metadata": {}, "outputs": [ { @@ -155,7 +155,7 @@ }, { "cell_type": "code", - "execution_count": 265, + "execution_count": 293, "metadata": {}, "outputs": [ { @@ -192,7 +192,7 @@ " <Axes: title={'center': 'median_house_value'}>]], dtype=object)" ] }, - "execution_count": 265, + "execution_count": 293, "metadata": {}, "output_type": "execute_result" }, @@ -235,7 +235,7 @@ }, { "cell_type": "code", - "execution_count": 266, + "execution_count": 294, "metadata": {}, "outputs": [], "source": [ @@ -247,7 +247,7 @@ }, { "cell_type": "code", - "execution_count": 267, + "execution_count": 295, "metadata": {}, "outputs": [], "source": [ @@ -260,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 268, + "execution_count": 296, "metadata": {}, "outputs": [ { @@ -290,7 +290,7 @@ }, { "cell_type": "code", - "execution_count": 269, + "execution_count": 297, "metadata": {}, "outputs": [ { @@ -308,7 +308,7 @@ "Name: median_house_value, dtype: float64" ] }, - "execution_count": 269, + "execution_count": 297, "metadata": {}, "output_type": "execute_result" } @@ -328,7 +328,7 @@ }, { "cell_type": "code", - "execution_count": 270, + "execution_count": 298, "metadata": {}, "outputs": [ { @@ -353,7 +353,7 @@ " dtype=object)" ] }, - "execution_count": 270, + "execution_count": 298, "metadata": {}, "output_type": "execute_result" }, @@ -394,7 +394,7 @@ }, { "cell_type": "code", - "execution_count": 271, + "execution_count": 299, "metadata": {}, "outputs": [ { @@ -403,7 +403,7 @@ "<Axes: xlabel='median_income', ylabel='median_house_value'>" ] }, - "execution_count": 271, + "execution_count": 299, "metadata": {}, "output_type": "execute_result" }, @@ -425,7 +425,7 @@ }, { "cell_type": "code", - "execution_count": 272, + "execution_count": 300, "metadata": {}, "outputs": [ { @@ -446,7 +446,7 @@ "Name: median_house_value, dtype: float64" ] }, - "execution_count": 272, + "execution_count": 300, "metadata": {}, "output_type": "execute_result" } @@ -462,7 +462,7 @@ }, { "cell_type": "code", - "execution_count": 273, + "execution_count": 301, "metadata": {}, "outputs": [ { @@ -488,542 +488,284 @@ }, { "cell_type": "code", - "execution_count": 274, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "median_house_value 1.000000\n", - "median_income 0.689222\n", - "ocean_dist 0.484102\n", - "rooms_per_house 0.148076\n", - "total_rooms 0.128957\n", - "housing_median_age 0.101160\n", - "households 0.059776\n", - "total_bedrooms 0.043272\n", - "people_per_house -0.021860\n", - "population -0.027846\n", - "longitude -0.046072\n", - "latitude -0.143096\n", - "bedroom_ratio -0.258569\n", - "Name: median_house_value, dtype: float64" - ] - }, - "execution_count": 274, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Map them to proportional integers based on average median value\n", - "\n", - "distance_mapping = {\n", - " '<1H OCEAN': 240104,\n", - " 'NEAR OCEAN': 250327,\n", - " 'NEAR BAY': 256986,\n", - " 'INLAND': 125032,\n", - " 'ISLAND': 388233\n", - "}\n", - "\n", - "housing['ocean_dist'] = housing['ocean_proximity'].map(distance_mapping)\n", - "corr = housing.drop(axis=1, columns='ocean_proximity').corr()\n", - "corr['median_house_value'].sort_values(ascending=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 275, + "execution_count": 310, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "<style>#sk-container-id-6 {\n", - " /* Definition of color scheme common for light and dark mode */\n", - " --sklearn-color-text: black;\n", - " --sklearn-color-line: gray;\n", - " /* Definition of color scheme for unfitted estimators */\n", - " --sklearn-color-unfitted-level-0: #fff5e6;\n", - " --sklearn-color-unfitted-level-1: #f6e4d2;\n", - " --sklearn-color-unfitted-level-2: #ffe0b3;\n", - " --sklearn-color-unfitted-level-3: chocolate;\n", - " /* Definition of color scheme for fitted estimators */\n", - " --sklearn-color-fitted-level-0: #f0f8ff;\n", - " --sklearn-color-fitted-level-1: #d4ebff;\n", - " --sklearn-color-fitted-level-2: #b3dbfd;\n", - " --sklearn-color-fitted-level-3: cornflowerblue;\n", - "\n", - " /* Specific color for light theme */\n", - " --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n", - " --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n", - " --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n", - " --sklearn-color-icon: #696969;\n", - "\n", - " @media (prefers-color-scheme: dark) {\n", - " /* Redefinition of color scheme for dark theme */\n", - " --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n", - " --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n", - " --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n", - " --sklearn-color-icon: #878787;\n", - " }\n", - "}\n", - "\n", - "#sk-container-id-6 {\n", - " color: var(--sklearn-color-text);\n", - "}\n", - "\n", - "#sk-container-id-6 pre {\n", - " padding: 0;\n", - "}\n", - "\n", - "#sk-container-id-6 input.sk-hidden--visually {\n", - " border: 0;\n", - " clip: rect(1px 1px 1px 1px);\n", - " clip: rect(1px, 1px, 1px, 1px);\n", - " height: 1px;\n", - " margin: -1px;\n", - " overflow: hidden;\n", - " padding: 0;\n", - " position: absolute;\n", - " width: 1px;\n", - "}\n", - "\n", - "#sk-container-id-6 div.sk-dashed-wrapped {\n", - " border: 1px dashed var(--sklearn-color-line);\n", - " margin: 0 0.4em 0.5em 0.4em;\n", - " box-sizing: border-box;\n", - " padding-bottom: 0.4em;\n", - " background-color: var(--sklearn-color-background);\n", - "}\n", - "\n", - "#sk-container-id-6 div.sk-container {\n", - " /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n", - " but bootstrap.min.css set `[hidden] { display: none !important; }`\n", - " so we also need the `!important` here to be able to override the\n", - " default hidden behavior on the sphinx rendered scikit-learn.org.\n", - " See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n", - " display: inline-block !important;\n", - " position: relative;\n", - "}\n", - "\n", - "#sk-container-id-6 div.sk-text-repr-fallback {\n", - " display: none;\n", - "}\n", - "\n", - "div.sk-parallel-item,\n", - "div.sk-serial,\n", - "div.sk-item {\n", - " /* draw centered vertical line to link estimators */\n", - " background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n", - " background-size: 2px 100%;\n", - " background-repeat: no-repeat;\n", - " background-position: center center;\n", - "}\n", - "\n", - "/* Parallel-specific style estimator block */\n", - "\n", - "#sk-container-id-6 div.sk-parallel-item::after {\n", - " content: \"\";\n", - " width: 100%;\n", - " border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n", - " flex-grow: 1;\n", - "}\n", - "\n", - "#sk-container-id-6 div.sk-parallel {\n", - " display: flex;\n", - " align-items: stretch;\n", - " justify-content: center;\n", - " background-color: var(--sklearn-color-background);\n", - " position: relative;\n", - "}\n", - "\n", - "#sk-container-id-6 div.sk-parallel-item {\n", - " display: flex;\n", - " flex-direction: column;\n", - "}\n", - "\n", - "#sk-container-id-6 div.sk-parallel-item:first-child::after {\n", - " align-self: flex-end;\n", - " width: 50%;\n", - "}\n", - "\n", - "#sk-container-id-6 div.sk-parallel-item:last-child::after {\n", - " align-self: flex-start;\n", - " width: 50%;\n", - "}\n", - "\n", - "#sk-container-id-6 div.sk-parallel-item:only-child::after {\n", - " width: 0;\n", - "}\n", - "\n", - "/* Serial-specific style estimator block */\n", - "\n", - "#sk-container-id-6 div.sk-serial {\n", - " display: flex;\n", - " flex-direction: column;\n", - " align-items: center;\n", - " background-color: var(--sklearn-color-background);\n", - " padding-right: 1em;\n", - " padding-left: 1em;\n", - "}\n", - "\n", - "\n", - "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n", - "clickable and can be expanded/collapsed.\n", - "- Pipeline and ColumnTransformer use this feature and define the default style\n", - "- Estimators will overwrite some part of the style using the `sk-estimator` class\n", - "*/\n", - "\n", - "/* Pipeline and ColumnTransformer style (default) */\n", - "\n", - "#sk-container-id-6 div.sk-toggleable {\n", - " /* Default theme specific background. It is overwritten whether we have a\n", - " specific estimator or a Pipeline/ColumnTransformer */\n", - " background-color: var(--sklearn-color-background);\n", - "}\n", - "\n", - "/* Toggleable label */\n", - "#sk-container-id-6 label.sk-toggleable__label {\n", - " cursor: pointer;\n", - " display: block;\n", - " width: 100%;\n", - " margin-bottom: 0;\n", - " padding: 0.5em;\n", - " box-sizing: border-box;\n", - " text-align: center;\n", - "}\n", - "\n", - "#sk-container-id-6 label.sk-toggleable__label-arrow:before {\n", - " /* Arrow on the left of the label */\n", - " content: \"▸\";\n", - " float: left;\n", - " margin-right: 0.25em;\n", - " color: var(--sklearn-color-icon);\n", - "}\n", - "\n", - "#sk-container-id-6 label.sk-toggleable__label-arrow:hover:before {\n", - " color: var(--sklearn-color-text);\n", - "}\n", - "\n", - "/* Toggleable content - dropdown */\n", - "\n", - "#sk-container-id-6 div.sk-toggleable__content {\n", - " max-height: 0;\n", - " max-width: 0;\n", - " overflow: hidden;\n", - " text-align: left;\n", - " /* unfitted */\n", - " background-color: var(--sklearn-color-unfitted-level-0);\n", - "}\n", - "\n", - "#sk-container-id-6 div.sk-toggleable__content.fitted {\n", - " /* fitted */\n", - " background-color: var(--sklearn-color-fitted-level-0);\n", - "}\n", - "\n", - "#sk-container-id-6 div.sk-toggleable__content pre {\n", - " margin: 0.2em;\n", - " border-radius: 0.25em;\n", - " color: var(--sklearn-color-text);\n", - " /* unfitted */\n", - " background-color: var(--sklearn-color-unfitted-level-0);\n", - "}\n", - "\n", - "#sk-container-id-6 div.sk-toggleable__content.fitted pre {\n", - " /* unfitted */\n", - " background-color: var(--sklearn-color-fitted-level-0);\n", - "}\n", - "\n", - "#sk-container-id-6 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n", - " /* Expand drop-down */\n", - " max-height: 200px;\n", - " max-width: 100%;\n", - " overflow: auto;\n", - "}\n", - "\n", - "#sk-container-id-6 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n", - " content: \"▾\";\n", - "}\n", - "\n", - "/* Pipeline/ColumnTransformer-specific style */\n", - "\n", - "#sk-container-id-6 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", - " color: var(--sklearn-color-text);\n", - " background-color: var(--sklearn-color-unfitted-level-2);\n", - "}\n", - "\n", - "#sk-container-id-6 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", - " background-color: var(--sklearn-color-fitted-level-2);\n", - "}\n", - "\n", - "/* Estimator-specific style */\n", - "\n", - "/* Colorize estimator box */\n", - "#sk-container-id-6 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", - " /* unfitted */\n", - " background-color: var(--sklearn-color-unfitted-level-2);\n", - "}\n", - "\n", - "#sk-container-id-6 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n", - " /* fitted */\n", - " background-color: var(--sklearn-color-fitted-level-2);\n", - "}\n", - "\n", - "#sk-container-id-6 div.sk-label label.sk-toggleable__label,\n", - "#sk-container-id-6 div.sk-label label {\n", - " /* The background is the default theme color */\n", - " color: var(--sklearn-color-text-on-default-background);\n", - "}\n", - "\n", - "/* On hover, darken the color of the background */\n", - "#sk-container-id-6 div.sk-label:hover label.sk-toggleable__label {\n", - " color: var(--sklearn-color-text);\n", - " background-color: var(--sklearn-color-unfitted-level-2);\n", - "}\n", - "\n", - "/* Label box, darken color on hover, fitted */\n", - "#sk-container-id-6 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n", - " color: var(--sklearn-color-text);\n", - " background-color: var(--sklearn-color-fitted-level-2);\n", - "}\n", - "\n", - "/* Estimator label */\n", - "\n", - "#sk-container-id-6 div.sk-label label {\n", - " font-family: monospace;\n", - " font-weight: bold;\n", - " display: inline-block;\n", - " line-height: 1.2em;\n", - "}\n", - "\n", - "#sk-container-id-6 div.sk-label-container {\n", - " text-align: center;\n", - "}\n", - "\n", - "/* Estimator-specific */\n", - "#sk-container-id-6 div.sk-estimator {\n", - " font-family: monospace;\n", - " border: 1px dotted var(--sklearn-color-border-box);\n", - " border-radius: 0.25em;\n", - " box-sizing: border-box;\n", - " margin-bottom: 0.5em;\n", - " /* unfitted */\n", - " background-color: var(--sklearn-color-unfitted-level-0);\n", - "}\n", - "\n", - "#sk-container-id-6 div.sk-estimator.fitted {\n", - " /* fitted */\n", - " background-color: var(--sklearn-color-fitted-level-0);\n", - "}\n", - "\n", - "/* on hover */\n", - "#sk-container-id-6 div.sk-estimator:hover {\n", - " /* unfitted */\n", - " background-color: var(--sklearn-color-unfitted-level-2);\n", - "}\n", - "\n", - "#sk-container-id-6 div.sk-estimator.fitted:hover {\n", - " /* fitted */\n", - " background-color: var(--sklearn-color-fitted-level-2);\n", - "}\n", - "\n", - "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n", - "\n", - "/* Common style for \"i\" and \"?\" */\n", - "\n", - ".sk-estimator-doc-link,\n", - "a:link.sk-estimator-doc-link,\n", - "a:visited.sk-estimator-doc-link {\n", - " float: right;\n", - " font-size: smaller;\n", - " line-height: 1em;\n", - " font-family: monospace;\n", - " background-color: var(--sklearn-color-background);\n", - " border-radius: 1em;\n", - " height: 1em;\n", - " width: 1em;\n", - " text-decoration: none !important;\n", - " margin-left: 1ex;\n", - " /* unfitted */\n", - " border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n", - " color: var(--sklearn-color-unfitted-level-1);\n", - "}\n", - "\n", - ".sk-estimator-doc-link.fitted,\n", - "a:link.sk-estimator-doc-link.fitted,\n", - "a:visited.sk-estimator-doc-link.fitted {\n", - " /* fitted */\n", - " border: var(--sklearn-color-fitted-level-1) 1pt solid;\n", - " color: var(--sklearn-color-fitted-level-1);\n", - "}\n", - "\n", - "/* On hover */\n", - "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n", - ".sk-estimator-doc-link:hover,\n", - "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n", - ".sk-estimator-doc-link:hover {\n", - " /* unfitted */\n", - " background-color: var(--sklearn-color-unfitted-level-3);\n", - " color: var(--sklearn-color-background);\n", - " text-decoration: none;\n", - "}\n", - "\n", - "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n", - ".sk-estimator-doc-link.fitted:hover,\n", - "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n", - ".sk-estimator-doc-link.fitted:hover {\n", - " /* fitted */\n", - " background-color: var(--sklearn-color-fitted-level-3);\n", - " color: var(--sklearn-color-background);\n", - " text-decoration: none;\n", - "}\n", - "\n", - "/* Span, style for the box shown on hovering the info icon */\n", - ".sk-estimator-doc-link span {\n", - " display: none;\n", - " z-index: 9999;\n", - " position: relative;\n", - " font-weight: normal;\n", - " right: .2ex;\n", - " padding: .5ex;\n", - " margin: .5ex;\n", - " width: min-content;\n", - " min-width: 20ex;\n", - " max-width: 50ex;\n", - " color: var(--sklearn-color-text);\n", - " box-shadow: 2pt 2pt 4pt #999;\n", - " /* unfitted */\n", - " background: var(--sklearn-color-unfitted-level-0);\n", - " border: .5pt solid var(--sklearn-color-unfitted-level-3);\n", - "}\n", - "\n", - ".sk-estimator-doc-link.fitted span {\n", - " /* fitted */\n", - " background: var(--sklearn-color-fitted-level-0);\n", - " border: var(--sklearn-color-fitted-level-3);\n", - "}\n", - "\n", - ".sk-estimator-doc-link:hover span {\n", - " display: block;\n", - "}\n", - "\n", - "/* \"?\"-specific style due to the `<a>` HTML tag */\n", - "\n", - "#sk-container-id-6 a.estimator_doc_link {\n", - " float: right;\n", - " font-size: 1rem;\n", - " line-height: 1em;\n", - " font-family: monospace;\n", - " background-color: var(--sklearn-color-background);\n", - " border-radius: 1rem;\n", - " height: 1rem;\n", - " width: 1rem;\n", - " text-decoration: none;\n", - " /* unfitted */\n", - " color: var(--sklearn-color-unfitted-level-1);\n", - " border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n", - "}\n", - "\n", - "#sk-container-id-6 a.estimator_doc_link.fitted {\n", - " /* fitted */\n", - " border: var(--sklearn-color-fitted-level-1) 1pt solid;\n", - " color: var(--sklearn-color-fitted-level-1);\n", - "}\n", - "\n", - "/* On hover */\n", - "#sk-container-id-6 a.estimator_doc_link:hover {\n", - " /* unfitted */\n", - " background-color: var(--sklearn-color-unfitted-level-3);\n", - " color: var(--sklearn-color-background);\n", - " text-decoration: none;\n", - "}\n", - "\n", - "#sk-container-id-6 a.estimator_doc_link.fitted:hover {\n", - " /* fitted */\n", - " background-color: var(--sklearn-color-fitted-level-3);\n", - "}\n", - "</style><div id=\"sk-container-id-6\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LinearRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-6\" type=\"checkbox\" checked><label for=\"sk-estimator-id-6\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;LinearRegression<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.linear_model.LinearRegression.html\">?<span>Documentation for LinearRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>LinearRegression()</pre></div> </div></div></div></div>" + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>longitude</th>\n", + " <th>latitude</th>\n", + " <th>housing_median_age</th>\n", + " <th>total_rooms</th>\n", + " <th>total_bedrooms</th>\n", + " <th>population</th>\n", + " <th>households</th>\n", + " <th>median_income</th>\n", + " <th>median_house_value</th>\n", + " <th>rooms_per_house</th>\n", + " <th>bedroom_ratio</th>\n", + " <th>people_per_house</th>\n", + " <th>ocean_dist</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>5419</th>\n", + " <td>-118.26</td>\n", + " <td>34.16</td>\n", + " <td>19.0</td>\n", + " <td>2919.0</td>\n", + " <td>857.0</td>\n", + " <td>1866.0</td>\n", + " <td>811.0</td>\n", + " <td>3.1733</td>\n", + " <td>206300.0</td>\n", + " <td>3.599260</td>\n", + " <td>0.293594</td>\n", + " <td>2.300863</td>\n", + " <td>240104.670351</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3598</th>\n", + " <td>-118.34</td>\n", + " <td>33.86</td>\n", + " <td>35.0</td>\n", + " <td>1936.0</td>\n", + " <td>343.0</td>\n", + " <td>1008.0</td>\n", + " <td>346.0</td>\n", + " <td>5.4791</td>\n", + " <td>285900.0</td>\n", + " <td>5.595376</td>\n", + " <td>0.177169</td>\n", + " <td>2.913295</td>\n", + " <td>240104.670351</td>\n", + " </tr>\n", + " <tr>\n", + " <th>13269</th>\n", + " <td>-118.22</td>\n", + " <td>33.90</td>\n", + " <td>38.0</td>\n", + " <td>796.0</td>\n", + " <td>159.0</td>\n", + " <td>679.0</td>\n", + " <td>167.0</td>\n", + " <td>3.6607</td>\n", + " <td>110400.0</td>\n", + " <td>4.766467</td>\n", + " <td>0.199749</td>\n", + " <td>4.065868</td>\n", + " <td>240104.670351</td>\n", + " </tr>\n", + " <tr>\n", + " <th>16983</th>\n", + " <td>-118.15</td>\n", + " <td>34.19</td>\n", + " <td>47.0</td>\n", + " <td>1717.0</td>\n", + " <td>314.0</td>\n", + " <td>868.0</td>\n", + " <td>295.0</td>\n", + " <td>3.6094</td>\n", + " <td>160700.0</td>\n", + " <td>5.820339</td>\n", + " <td>0.182877</td>\n", + " <td>2.942373</td>\n", + " <td>240104.670351</td>\n", + " </tr>\n", + " <tr>\n", + " <th>7364</th>\n", + " <td>-117.14</td>\n", + " <td>32.93</td>\n", + " <td>14.0</td>\n", + " <td>1946.0</td>\n", + " <td>463.0</td>\n", + " <td>1205.0</td>\n", + " <td>390.0</td>\n", + " <td>4.2109</td>\n", + " <td>171200.0</td>\n", + " <td>4.989744</td>\n", + " <td>0.237924</td>\n", + " <td>3.089744</td>\n", + " <td>240104.670351</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1153</th>\n", + " <td>-117.42</td>\n", + " <td>33.94</td>\n", + " <td>26.0</td>\n", + " <td>2420.0</td>\n", + " <td>532.0</td>\n", + " <td>1383.0</td>\n", + " <td>469.0</td>\n", + " <td>3.5403</td>\n", + " <td>113500.0</td>\n", + " <td>5.159915</td>\n", + " <td>0.219835</td>\n", + " <td>2.948827</td>\n", + " <td>125032.908322</td>\n", + " </tr>\n", + " <tr>\n", + " <th>14075</th>\n", + " <td>-121.46</td>\n", + " <td>38.60</td>\n", + " <td>29.0</td>\n", + " <td>1978.0</td>\n", + " <td>538.0</td>\n", + " <td>823.0</td>\n", + " <td>490.0</td>\n", + " <td>1.9688</td>\n", + " <td>135600.0</td>\n", + " <td>4.036735</td>\n", + " <td>0.271992</td>\n", + " <td>1.679592</td>\n", + " <td>125032.908322</td>\n", + " </tr>\n", + " <tr>\n", + " <th>7277</th>\n", + " <td>-117.09</td>\n", + " <td>32.65</td>\n", + " <td>20.0</td>\n", + " <td>1445.0</td>\n", + " <td>323.0</td>\n", + " <td>573.0</td>\n", + " <td>334.0</td>\n", + " <td>2.6190</td>\n", + " <td>145800.0</td>\n", + " <td>4.326347</td>\n", + " <td>0.223529</td>\n", + " <td>1.715569</td>\n", + " <td>250327.236143</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9621</th>\n", + " <td>-122.44</td>\n", + " <td>37.79</td>\n", + " <td>52.0</td>\n", + " <td>1817.0</td>\n", + " <td>535.0</td>\n", + " <td>800.0</td>\n", + " <td>487.0</td>\n", + " <td>3.9750</td>\n", + " <td>500001.0</td>\n", + " <td>3.731006</td>\n", + " <td>0.294441</td>\n", + " <td>1.642710</td>\n", + " <td>256986.420765</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9665</th>\n", + " <td>-121.33</td>\n", + " <td>38.28</td>\n", + " <td>14.0</td>\n", + " <td>980.0</td>\n", + " <td>171.0</td>\n", + " <td>659.0</td>\n", + " <td>183.0</td>\n", + " <td>4.4306</td>\n", + " <td>170100.0</td>\n", + " <td>5.355191</td>\n", + " <td>0.174490</td>\n", + " <td>3.601093</td>\n", + " <td>125032.908322</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>16512 rows × 13 columns</p>\n", + "</div>" ], "text/plain": [ - "LinearRegression()" + " longitude latitude housing_median_age total_rooms total_bedrooms \\\n", + "5419 -118.26 34.16 19.0 2919.0 857.0 \n", + "3598 -118.34 33.86 35.0 1936.0 343.0 \n", + "13269 -118.22 33.90 38.0 796.0 159.0 \n", + "16983 -118.15 34.19 47.0 1717.0 314.0 \n", + "7364 -117.14 32.93 14.0 1946.0 463.0 \n", + "... ... ... ... ... ... \n", + "1153 -117.42 33.94 26.0 2420.0 532.0 \n", + "14075 -121.46 38.60 29.0 1978.0 538.0 \n", + "7277 -117.09 32.65 20.0 1445.0 323.0 \n", + "9621 -122.44 37.79 52.0 1817.0 535.0 \n", + "9665 -121.33 38.28 14.0 980.0 171.0 \n", + "\n", + " population households median_income median_house_value \\\n", + "5419 1866.0 811.0 3.1733 206300.0 \n", + "3598 1008.0 346.0 5.4791 285900.0 \n", + "13269 679.0 167.0 3.6607 110400.0 \n", + "16983 868.0 295.0 3.6094 160700.0 \n", + "7364 1205.0 390.0 4.2109 171200.0 \n", + "... ... ... ... ... \n", + "1153 1383.0 469.0 3.5403 113500.0 \n", + "14075 823.0 490.0 1.9688 135600.0 \n", + "7277 573.0 334.0 2.6190 145800.0 \n", + "9621 800.0 487.0 3.9750 500001.0 \n", + "9665 659.0 183.0 4.4306 170100.0 \n", + "\n", + " rooms_per_house bedroom_ratio people_per_house ocean_dist \n", + "5419 3.599260 0.293594 2.300863 240104.670351 \n", + "3598 5.595376 0.177169 2.913295 240104.670351 \n", + "13269 4.766467 0.199749 4.065868 240104.670351 \n", + "16983 5.820339 0.182877 2.942373 240104.670351 \n", + "7364 4.989744 0.237924 3.089744 240104.670351 \n", + "... ... ... ... ... \n", + "1153 5.159915 0.219835 2.948827 125032.908322 \n", + "14075 4.036735 0.271992 1.679592 125032.908322 \n", + "7277 4.326347 0.223529 1.715569 250327.236143 \n", + "9621 3.731006 0.294441 1.642710 256986.420765 \n", + "9665 5.355191 0.174490 3.601093 125032.908322 \n", + "\n", + "[16512 rows x 13 columns]" ] }, - "execution_count": 275, + "execution_count": 310, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "model = LinearRegression()\n", + "# Map them to proportional values based on average median value\n", + "# This was not included in the book, but I thought it would be a nice touch.\n", "\n", - "xCols = housing.columns.to_list()\n", - "xCols.remove('ocean_proximity')\n", - "xCols.remove('median_house_value')\n", - "\n", - "\n", - "housing.dropna(inplace=True)\n", - "y = housing[['median_house_value']]\n", - "x = housing[xCols]\n", - "model.fit(X=x , y=y)" - ] - }, - { - "cell_type": "code", - "execution_count": 276, - "metadata": {}, - "outputs": [], - "source": [ - "# Predictions\n", - "\n", - "stratTest.dropna(inplace=True)\n", - "\n", - "stratTest['rooms_per_house'] = stratTest['total_rooms']/stratTest['households']\n", - "stratTest['bedroom_ratio'] = stratTest['total_bedrooms']/stratTest['total_rooms']\n", - "stratTest['people_per_house'] = stratTest['population'] / stratTest['households']\n", - "distance_mapping = {\n", - " '<1H OCEAN': 240104,\n", - " 'NEAR OCEAN': 250327,\n", - " 'NEAR BAY': 256986,\n", - " 'INLAND': 125032,\n", - " 'ISLAND': 388233\n", - "}\n", - "\n", - "stratTest['ocean_dist'] = stratTest['ocean_proximity'].map(distance_mapping)\n", - "\n", - "x = stratTest[xCols]\n", - "actual = stratTest['median_house_value'].values.tolist()\n", - "predicted = model.predict(x).tolist()" - ] - }, - { - "cell_type": "code", - "execution_count": 277, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "67468.8043253366\n" - ] - } - ], - "source": [ - "# RMSE Calculation\n", - "import math\n", - "count = 0\n", - "total = 0\n", - "\n", - "\n", - "while count < len(predicted):\n", - " total += (predicted[count][0] - actual[count]) ** 2\n", - " count += 1\n", - "\n", - "total = total / len(predicted)\n", + "housing['ocean_dist'] = housing['ocean_proximity'].map(average_price_by_proximity)\n", + "corr = housing.drop(axis=1, columns='ocean_proximity').corr()\n", + "housing.drop(columns='ocean_proximity', axis=1, inplace=True)\n", "\n", - "total = math.sqrt(total)\n", - "print(total)" + "corr['median_house_value'].sort_values(ascending=False)\n" ] } ], diff --git a/sigmoidFunction/Sigmoid.ipynb b/sigmoidFunction/Sigmoid.ipynb @@ -0,0 +1,76 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[<matplotlib.lines.Line2D at 0x7fe4267b2b50>]" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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qfLy8rzH0tLSlJubq5KSEklSSUmJ2rVrp0GDBnnb5OXlKT4+Xu+9917QanWiji1btuj999/XTTfddMr3Jk6cqPT0dA0ePFhPPvnkabeAdlpzru+ZZ55Renq6+vTpoxkzZujYsWM+5+3bt68yMjK8x0aMGKGKigp99NFHzl9IE5z6u1ReXq7U1FQlJvpuNxXMz9DlcmnLli0+Pzvx8fHKy8vz/ux8V0lJiU97yfNZ1Lf35+cxmOxc43cdO3ZMx48fV4cOHXyOb9y4UR07dlTPnj11++2368svv3S0dn/Yvb6qqip169ZNWVlZuuqqq3x+jsLpM3Ti81u+fLlGjx6t1q1b+xwPh8/PjtP9DDrxZ+aPiNgoL5hKS0slyecXVf3X9d8rLS1Vx44dfb6fmJioDh06eNsEgxN1LF++XL169dLQoUN9jt9///36z//8T7Vq1UpvvPGGfvazn6mqqkq/+MUvHKv/dOxe39ixY9WtWzd17txZ//znP3X33Xfr448/1vPPP+89b0Ofb/33gsmJz/DIkSOaN2+ebr31Vp/jwf4Mjxw5Irfb3eCf7c6dOxvs09hncfLPWv2xxtoEk51r/K67775bnTt39vnH/YorrtBPfvITnX322dqzZ4/uueceXXnllSopKVFCQoKj19AUO9fXs2dPPfnkk7rgggtUXl6uhQsXaujQofroo4/UtWvXsPoMm/v5bdq0SR9++KGWL1/uczxcPj87GvsZrKioUE1Njb766qtm/533R0SGkenTp+uhhx5qss2OHTt0/vnnB6kiZ/l7fc1VU1OjlStX6t577z3leycf69+/v6qrq/XII4848oss0Nd38i/lvn37qlOnTrrsssu0Z88enXPOObbPa0WwPsOKigqNHDlSvXv31n333efzvUB+hrBnwYIFKioq0saNG30meY4ePdr733379tUFF1ygc845Rxs3btRll10WilL9NmTIEA0ZMsT79dChQ9WrVy/97ne/07x580JYmfOWL1+uvn37avDgwT7HI/nzCxcRGUamTZumG264ock23bt3t3XuzMxMSVJZWZk6derkPV5WVqacnBxvmy+++MKn34kTJ3T06FFv/+bw9/qaW8eaNWt07NgxjRs37rRtc3NzNW/ePNXW1jZ7/4JgXV+93NxcSdLu3bt1zjnnKDMz85SZ4GVlZZLkyOcnBecaKysrdcUVV6ht27Z64YUX1KJFiybbO/kZNiQ9PV0JCQneP8t6ZWVljV5LZmZmk+39+XkMJjvXWG/hwoVasGCB/vKXv+iCCy5osm337t2Vnp6u3bt3B/WXWXOur16LFi3Uv39/7d69W1J4fYbNub7q6moVFRXp/vvvP+37hOrzs6Oxn8HU1FS1bNlSCQkJzf474RfHZp+EOasTWBcuXOg9Vl5e3uAE1s2bN3vbvP766yGbwGq3juHDh5/yBEZjHnjgAdO+fXvbtdrh1J/z22+/bSSZf/zjH8aYbyewnjwT/He/+51JTU0133zzjXMX4Ae711heXm4uuugiM3z4cFNdXe3XewXjMxw8eLD5+c9/7v3a7XabLl26NDmBddSoUT7HhgwZcsoE1qZ+HoPN6jUaY8xDDz1kUlNTTUlJiV/vcfDgQRMXF2deeumlZtdrlZ3rO9mJEydMz549zdSpU40x4fcZ2r2+FStWmOTkZHPkyJHTvkcoP7+Tyc8JrH369PE5NmbMmFMmsDbn74RftTp2pjC1f/9+s23bNu/jq9u2bTPbtm3zeYy1Z8+e5vnnn/d+vWDBAtOuXTvz0ksvmX/+85/mqquuavDR3v79+5v33nvPvP322+bcc88N2aO9TdXx6aefmp49e5r33nvPp9+uXbtMXFycee21104558svv2yWLVtmPvjgA7Nr1y7zm9/8xrRq1crMnj074NfzXVavb/fu3eb+++83mzdvNnv37jUvvfSS6d69u7n00ku9feof7b388svN+++/b9avX2/OPPPMkD7aa+Uay8vLTW5urunbt6/ZvXu3z+OEJ06cMMaE7jMsKioyycnJ5qmnnjLbt283t956q2nXrp33yaXrr7/eTJ8+3dv+nXfeMYmJiWbhwoVmx44dZs6cOQ0+2nu6n8dgsnqNCxYsMElJSWbNmjU+n1X9v0GVlZXmjjvuMCUlJWbv3r3mL3/5ixkwYIA599xzgx6O7Vzf3Llzzeuvv2727NljtmzZYkaPHm1SUlLMRx995G0TTp+h1eurN2zYMFNQUHDK8XD7/CorK72/5ySZRYsWmW3btpn9+/cbY4yZPn26uf76673t6x/tvfPOO82OHTvMkiVLGny0t6k/MydEfRgZP368kXTK66233vK20b/XY6hXV1dn7r33XpORkWGSk5PNZZddZj7++GOf83755ZdmzJgxpk2bNiY1NdVMmDDBJ+AEy+nq2Lt37ynXa4wxM2bMMFlZWcbtdp9yztdee83k5OSYNm3amNatW5t+/fqZpUuXNtg20Kxe34EDB8yll15qOnToYJKTk02PHj3MnXfe6bPOiDHG7Nu3z1x55ZWmZcuWJj093UybNs3nsdhgsnqNb731VoN/pyWZvXv3GmNC+xn++te/NmeddZZJSkoygwcPNu+++673e8OHDzfjx4/3af/ss8+a8847zyQlJZnvfe97Zu3atT7f9+fnMdisXGO3bt0a/KzmzJljjDHm2LFj5vLLLzdnnnmmadGihenWrZu55ZZbHP2H3ior1zdlyhRv24yMDPPDH/7QbN261ed84fYZWv07unPnTiPJvPHGG6ecK9w+v8b+fai/pvHjx5vhw4ef0icnJ8ckJSWZ7t27+/w+rNfUn5kT4owJ8vOaAAAAJ2GdEQAAEFKEEQAAEFKEEQAAEFKEEQAAEFKEEQAAEFKEEQAAEFKEEQAAEFKEEQAAEFKEEQAAEFKEEQAAEFKEEQAAEFKEEQAAEFL/H9M9/z2z0L5iAAAAAElFTkSuQmCC", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Graph a sigmoid function (logistic function) from -1 to 1\n", + "# defined by the equation 1 / (1 + (e^-x)) where 5 is the constant\n", + "# multiplier of x. The larger this constant the faster the change occurs.\n", + "# As an example, when the constant is 1 the function looks linear, but when this is 100\n", + "# it looks almost vertical.This function can never go below 0 and never above 1. \n", + "\n", + "# To implement this I went through the 1000 values below and 1000 above 0 where the step was\n", + "# .001. This was done by going from -1000 to 1001 and dividing these values by 1000. I then\n", + "# put the x and y values into a dictionary and passed those into matplotlib as the x and y\n", + "# values for the graph. \n", + "\n", + "import matplotlib.pyplot as plt\n", + "import math\n", + "\n", + "data = {}\n", + "for i in range(-1000, 1001):\n", + " i = i / 1000\n", + " denominator = 1 + math.pow(math.e, 5*-i)\n", + " numerator = 1\n", + " data[i] = (numerator / denominator)\n", + "\n", + "plt.plot(data.keys(), data.values(), marker='o', linestyle='-', color='b')" + ] + } + ], + "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 +}