PolynomialRegression/Polynomial Regression.ipynb
2021-06-24 13:03:10 +02:00

369 lines
53 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Algorytm najszybszego spadku dla regresji wielomianowej. \n",
"Zakładamy, że dysponujemy zbiorem składającym się z dwóch cech (x i y). Modelujemy zależność y od x za pomocą funkcji wielomianowej. Celem projektu jest implementacja metody najszybszego spadku dla tego problemu. Zakładamy kwadratową funkcję straty. Implementacja powinna umożliwiać podanie stopnia wielomianu, który ma być użyty do modelowania. Implementacja powinna zwracać wektor oszacowanych parametrów oraz pokazywać wizualnie zmiany wartości funkcji straty wraz z postępem uczenia."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Zbiór danych: https://www.kaggle.com/varpit94/apple-stock-data-updated-till-22jun2021?select=AAPL.csv\n",
"This dataset provides historical data of APPLE INC. stock (AAPL). The data is available at a daily level. Currency is USD."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"degree = 6\n",
"X_plot = np.linspace(0, 150, 1000)\n",
"initial_theta = [0] * (degree + 1)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<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>Date</th>\n",
" <th>Open</th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Close</th>\n",
" <th>Adj Close</th>\n",
" <th>Volume</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1980-12-12</td>\n",
" <td>0.128348</td>\n",
" <td>0.128906</td>\n",
" <td>0.128348</td>\n",
" <td>0.128348</td>\n",
" <td>0.100751</td>\n",
" <td>469033600</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1980-12-15</td>\n",
" <td>0.122210</td>\n",
" <td>0.122210</td>\n",
" <td>0.121652</td>\n",
" <td>0.121652</td>\n",
" <td>0.095495</td>\n",
" <td>175884800</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1980-12-16</td>\n",
" <td>0.113281</td>\n",
" <td>0.113281</td>\n",
" <td>0.112723</td>\n",
" <td>0.112723</td>\n",
" <td>0.088485</td>\n",
" <td>105728000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1980-12-17</td>\n",
" <td>0.115513</td>\n",
" <td>0.116071</td>\n",
" <td>0.115513</td>\n",
" <td>0.115513</td>\n",
" <td>0.090676</td>\n",
" <td>86441600</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1980-12-18</td>\n",
" <td>0.118862</td>\n",
" <td>0.119420</td>\n",
" <td>0.118862</td>\n",
" <td>0.118862</td>\n",
" <td>0.093304</td>\n",
" <td>73449600</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Date Open High Low Close Adj Close Volume\n",
"0 1980-12-12 0.128348 0.128906 0.128348 0.128348 0.100751 469033600\n",
"1 1980-12-15 0.122210 0.122210 0.121652 0.121652 0.095495 175884800\n",
"2 1980-12-16 0.113281 0.113281 0.112723 0.112723 0.088485 105728000\n",
"3 1980-12-17 0.115513 0.116071 0.115513 0.115513 0.090676 86441600\n",
"4 1980-12-18 0.118862 0.119420 0.118862 0.118862 0.093304 73449600"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df = pd.read_csv('AAPL.csv')\n",
"X = df[['Low']]\n",
"Y = df['Volume']\n",
"display(df.head(5))"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10,5))\n",
"chart = fig.add_subplot()\n",
"chart.plot(X,Y ,\"go\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Metody do regresji wielomianowej"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"11\n",
"441.0\n"
]
}
],
"source": [
"def polynomial_regression(theta, x):\n",
" value = 0\n",
" for i in range(len(theta)):\n",
" value += theta[i] * x**i\n",
" return value \n",
"\n",
"def mean_squared_error(Y_predicted, Y):\n",
" result = 0\n",
" for i in range(len(Y)):\n",
" result += (Y_predicted[i] - Y[i]) ** 2\n",
" return result/len(Y)\n",
"\n",
"def gradient(theta, X, Y):\n",
" return 1.0 / len(y) * (X.T * (X * theta - Y)) \n",
"\n",
"def gradient_descent(X, Y, theta, cost_function = mean_squared_error, alpha=0.1, eps=0.001, max_steps = 1000000):\n",
" cost = cost_function([polynomial_regression(theta, x) for x in X], Y)\n",
" logs = [[cost, theta]]\n",
" \n",
" for i in range(max_steps):\n",
" theta = theta - alpha * gradient(theta, X, Y)\n",
" next_cost = cost_function([polynomial_regression(theta, x) for x in X], Y)\n",
" logs.append([next_cost, theta])\n",
" if abs(cost - next_cost) <= eps:\n",
" break\n",
" return theta, logs\n",
" \n",
" \n",
"print(polynomial_regression([1,1,0,1], 2))\n",
"print(mean_squared_error([1,2,1,1],[1,2,43,1]))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Metody do wykresów"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def plot_polynomial_regression(theta):\n",
" fig = plt.figure(figsize=(10,5))\n",
" Y_plot = [polynomial_regression(theta, x) for x in X_plot]\n",
" chart = fig.add_subplot()\n",
" chart.plot(X_plot, Y_plot, color=\"red\", lw=2, label=f\"degree {len(theta)}\")\n",
" chart.plot(X,Y ,\"go\")\n",
" plt.show()\n",
" \n",
"plot_polynomial_regression([1,100,0,1000]) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Wyniki za pomocą gotowej biblioteki"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.preprocessing import PolynomialFeatures, StandardScaler\n",
"from sklearn.pipeline import make_pipeline\n",
"from sklearn.linear_model import Ridge, LinearRegression"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Pipeline(steps=[('polynomialfeatures', PolynomialFeatures(degree=6)),\n",
" ('linearregression', LinearRegression())])"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model = make_pipeline(PolynomialFeatures(degree=degree, include_bias=True), \n",
" LinearRegression())\n",
"model.fit(X,Y)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"6"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"Y_plot = model.predict([[x] for x in X_plot])\n",
"\n",
"fig = plt.figure(figsize=(10,5))\n",
"chart = fig.add_subplot()\n",
"chart.plot(X,Y ,\"go\")\n",
"chart.plot(X_plot, Y_plot, color=\"red\", lw=2, label=f\"degree {degree}\")\n",
"degree"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"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.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 4
}