commit 3196bb39b068759b5e879e3dfb28eada6978242a
parent f6d7d0e9e10ae7d795b21fa2178be11b9031cff8
Author: Andrew <andrewlaack1@gmail.com>
Date: Thu, 23 May 2024 10:35:40 -0500
Graphed sigmoid function
Diffstat:
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\"> 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
+}