Python2019/labs05/sklearn cz. 1.ipynb

607 lines
31 KiB
Plaintext
Raw Normal View History

2019-02-10 08:39:58 +01:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Kkolejna część zajęć będzie wprowadzeniem do drugiej, szeroko używanej biblioteki w Pythonie: `sklearn`. Zajęcia będą miały charaktere case-study poprzeplatane zadaniami do wykonania. Zacznijmy od załadowania odpowiednich bibliotek."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Zacznijmy od załadowania danych. Na dzisiejszych zajęciach będziemy korzystać z danych z portalu [gapminder.org](https://www.gapminder.org/data/)."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"df = pd.read_csv('gapminder.csv', index_col=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Dane zawierają różne informacje z większość państw świata (z roku 2008). Poniżej znajduje się opis kolumn:\n",
" * female_BMI - średnie BMI u kobiet\n",
" * male_BMI - średnie BMI u mężczyzn\n",
" * gdp - PKB na obywatela\n",
" * population - wielkość populacji\n",
" * under5mortality - wskaźnik śmiertelności dzieni pon. 5 roku życia (na 1000 urodzonych dzieci)\n",
" * life_expectancy - średnia długość życia\n",
" * fertility - wskaźnik dzietności"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**zad. 1**\n",
"Na podstawie danych zawartych w `df` odpowiedz na następujące pytania:\n",
" * Jaki był współczynniki dzietności w Polsce w 2018?\n",
" * W którym kraju ludzie żyją najdłużej?\n",
" * Z ilu krajów zostały zebrane dane?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**zad. 2** Stwórz kolumnę `gdp_log`, która powstanie z kolumny `gdp` poprzez zastowanie funkcji `log` (logarytm). \n",
"\n",
"Hint 1: Wykorzystaj funkcję `apply` (https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.apply.html#pandas.Series.apply).\n",
"\n",
"Hint 2: Wykorzystaj fukcję `log` z pakietu `np`."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Naszym zadaniem będzie oszacowanie długości życia (kolumna `life_expectancy`) na podstawie pozostałych zmiennych. Na samym początku, zastosujemy regresje jednowymiarową na `fertility`."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Y shape: (176,)\n",
"X shape: (176,)\n"
]
}
],
"source": [
"y = df['life_expectancy'].values\n",
"X = df['fertility'].values\n",
"\n",
"print(\"Y shape:\", y.shape)\n",
"print(\"X shape:\", X.shape)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Będziemy korzystać z gotowej implementacji regreji liniowej z pakietu sklearn. Żeby móc wykorzystać, musimy napierw zmienić shape na dwuwymiarowy."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Y shape: (176, 1)\n",
"X shape: (176, 1)\n"
]
}
],
"source": [
"y = y.reshape(-1, 1)\n",
"X = X.reshape(-1, 1)\n",
"\n",
"print(\"Y shape:\", y.shape)\n",
"print(\"X shape:\", X.shape)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Jeszcze przed właściwą analizą, narysujmy wykres i zobaczny czy istnieje \"wizualny\" związek pomiędzy kolumnami."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f10a1ee1978>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"df.plot.scatter('fertility', 'life_expectancy')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**zad. 3** Zaimportuj `LinearRegression` z pakietu `sklearn.linear_model`."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Tworzymy obiekt modelu regresji liniowej."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'LinearRegression' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-8-28d4d21f64c7>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmodel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mLinearRegression\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mNameError\u001b[0m: name 'LinearRegression' is not defined"
]
}
],
"source": [
"model = LinearRegression()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Trening modelu ogranicza się do wywołania metodu `fit`, która przyjmuje dwa argumenty:"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)"
]
},
"execution_count": 97,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.fit(X, y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Współczynniki modelu:"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Wyraz wolny (bias): [82.92548061]\n",
"Współczynniki cech: [[-4.29315763]]\n"
]
}
],
"source": [
"print(\"Wyraz wolny (bias):\", model.intercept_)\n",
"print(\"Współczynniki cech:\", model.coef_)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**zad. 4** Wytrenuj nowy model `model2`, który będzie jako X przyjmie kolumnę `gdp_log`. Wyświetl parametry nowego modelu."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Mając wytrenowany model możemy wykorzystać go do predykcji. Wystarczy wywołać metodę `predict`."
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"input: 6.2\t predicted: 56.30790328839987\t expected: 52.8\n",
"input: 1.76\t predicted: 75.36952317631349\t expected: 76.8\n",
"input: 2.73\t predicted: 71.2051602728729\t expected: 75.5\n",
"input: 6.43\t predicted: 55.32047703294488\t expected: 56.7\n",
"input: 2.16\t predicted: 73.6522601233483\t expected: 75.5\n"
]
}
],
"source": [
"X_test = X[:5,:]\n",
"y_test = y[:5,:]\n",
"output = model.predict(X_test)\n",
"\n",
"for i in range(5):\n",
" print(\"input: {}\\t predicted: {}\\t expected: {}\".format(X_test[i,0], output[i,0], y_test[i,0]))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Sprawdzenie jakości modelu - metryki: $R^2$ i $MSE$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Istnieją 3 metryki, które określają jak dobry jest nasz model:\n",
" * $R^2$: [Współczynnik determinacji](https://pl.wikipedia.org/wiki/Wsp%C3%B3%C5%82czynnik_determinacji)\n",
" * $MSE$: [błąd średnio-kwadratowy](https://pl.wikipedia.org/wiki/B%C5%82%C4%85d_%C5%9Bredniokwadratowy) \n",
" * $RMSE = \\sqrt{MSE}$"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"R^2: 0.5793180095847132\n",
"Root Mean Squared Error: 5.77824860865276\n"
]
}
],
"source": [
"from sklearn.metrics import mean_squared_error\n",
"\n",
"print(\"R^2: {}\".format(model.score(X, y)))\n",
"rmse = np.sqrt(mean_squared_error(y, model.predict(X)))\n",
"print(\"Root Mean Squared Error: {}\".format(rmse))"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"R^2: 0.4881890528165924\n",
"Root Mean Squared Error: 5.889906845544505\n"
]
}
],
"source": [
"# Import necessary modules\n",
"from sklearn.linear_model import LinearRegression\n",
"from sklearn.metrics import mean_squared_error\n",
"from sklearn.model_selection import train_test_split\n",
"\n",
"# Create training and test sets\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.30, random_state=42)\n",
"\n",
"# Create the regressor: reg_all\n",
"reg_all = LinearRegression()\n",
"\n",
"# Fit the regressor to the training data\n",
"reg_all.fit(X_train, y_train)\n",
"\n",
"# Predict on the test data: y_pred\n",
"y_pred = reg_all.predict(X_test)\n",
"\n",
"# Compute and print R^2 and RMSE\n",
"print(\"R^2: {}\".format(reg_all.score(X_test, y_test)))\n",
"rmse = np.sqrt(mean_squared_error(y_test, y_pred))\n",
"print(\"Root Mean Squared Error: {}\".format(rmse))\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Regresja wielu zmiennych"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Model regresji liniowej wielu zmiennych nie różni się istotnie od modelu jednej zmiennej. Np. chcąc zbudować model oparty o dwie kolumny: `fertility` i `gdp` wystarczy zmienić X (cechy wejściowe):"
]
},
{
"cell_type": "code",
"execution_count": 149,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(176,)\n",
"(176, 1)\n"
]
},
{
"data": {
"text/plain": [
"0.6421567875738732"
]
},
"execution_count": 149,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X = df[['fertility', 'gdp']]\n",
"print(df['fertility'].shape)\n",
"print(df[['fertility']].shape)\n",
"\n",
"model_mv = LinearRegression()\n",
"model_mv.fit(X, y)\n",
"\n",
"model_mv.score(X, y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**zad. 6** Która kombinacja dwóch kolumn daje najlepszy wynik w metryce $R^2$? Tak jak poprzednio, próbujemy przewidzieć zawartosć kolumny `life_expectancy`.\n",
"\n",
"Uwaga: Należy wyłączyć kolumnę `life_expectancy` spośród szukanych."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**zad. 7** \n",
" * Zbuduj model regresji liniowej, która oszacuje wartność kolumny `life_expectancy` na podstawie pozostałych kolumn.\n",
" * Wyświetl współczynniki modelu? Dla jakich cech współczynniki modelu są bliskie 0? Dlaczego?\n",
" * Oblicz wartości obu metryk na zbiorze trenującym.\n",
" "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**zad. 6**\n",
"Wykonaj jedno z zadań 6.1 lub 6.2."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**zad. 6.1** Zaimplementuj metrykę $R^2$ jako fukcję `r2` (szablon poniżej). Fukcja `r2` przyjmuje dwa parametry typu *list* i ma zwrócić wartość metryki $R^2$."
]
},
{
"cell_type": "code",
"execution_count": 131,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Real R2: 0.6421567875738732\n",
"Calculated: None\n"
]
}
],
"source": [
"def r2(expected, predicted):\n",
" \"\"\"\n",
" argumenty:\n",
" expected (type: list): poprawne wartości\n",
" predicted (type: list): oszacowanie z modelu\n",
" \"\"\"\n",
" pass\n",
"\n",
"y = df['life_expectancy'].values\n",
"X = df[['fertility', 'gdp']].values\n",
"\n",
"test_model = LinearRegression()\n",
"test_model.fit(X, y)\n",
"\n",
"print(\"Real R2:\", test_model.score(X, y))\n",
"\n",
"predicted = list(test_model.predict(X))\n",
"expected = list(y)\n",
"\n",
"print(\"Calculated:\", r2(expected, predicted))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" Zaimplementuj metrykę $RMSE$ jako fukcję rmse (szablon poniżej). Fukcja rmse przyjmuje dwa parametry typu list i ma zwrócić wartość metryki $RMSE$ ."
]
},
{
"cell_type": "code",
"execution_count": 133,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Real R2: 5.329244618514514\n",
"Calculated: None\n"
]
}
],
"source": [
"def rmse(expected, predicted):\n",
" \"\"\"\n",
" argumenty:\n",
" expected (type: list): poprawne wartości\n",
" predicted (type: list): oszacowanie z modelu\n",
" \"\"\"\n",
" pass\n",
"\n",
"y = df['life_expectancy'].values\n",
"X = df[['fertility', 'gdp']].values\n",
"\n",
"test_model = LinearRegression()\n",
"test_model.fit(X, y)\n",
"\n",
"print(\"Real R2:\", np.sqrt(mean_squared_error(y, test_model.predict(X))))\n",
"\n",
"predicted = list(test_model.predict(X))\n",
"expected = list(y)\n",
"\n",
"print(\"Calculated:\", r2(expected, predicted))"
]
}
],
"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.7.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}