"""
1. Wczytać dataset diabetis (https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_
diabetes.html, https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset).
"""
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.model_selection import train_test_split
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)
"""
2. Wybrać ze wczytanego zbioru danych kolumny (zmienne) pod indeksami 0, 2, 3. Zgodnie z dokumentacją są
to zmienne: age age in years, bmi body mass index, bp average blood pressure.
"""
diabetes_Xage = diabetes_X[:, np.newaxis, 0] #age
diabetes_Xbmi = diabetes_X[:, np.newaxis, 2] #bmi
diabetes_Xbp = diabetes_X[:, np.newaxis, 3] #bp
diabetes_X = diabetes_X[:,[0,2,3]]
"""
3. Narysować 3 wykresy punktowe, pokazujące jak zmienna zależna (y) zależy od zmiennych niezależnych (3
poprzednio wybrane kolumny z X).
"""
#age
plt.scatter(diabetes_Xage, diabetes_y)
plt.title('AGE')
plt.xlabel('X - AGE')
plt.ylabel('Y')
plt.show()
#bmi
plt.scatter(diabetes_Xbmi, diabetes_y)
plt.title('BMI')
plt.xlabel('X - BMI')
plt.ylabel('Y')
plt.show()
#bp
plt.scatter(diabetes_Xbp, diabetes_y)
plt.title('BP')
plt.xlabel('X - BP')
plt.ylabel('Y')
plt.show()
"""
4. Podzielić zbiór danych na dane uczące i testujące w proporcji 80% danych uczących i 20% danych testowych.
"""
# split 80 uczące 20 testowych
diabetes_X_train, diabetes_X_test, diabetes_y_train, diabetes_y_test = train_test_split(
diabetes_X, diabetes_y, train_size=0.2, random_state=0)
"""
5. Utworzyć obiekt regresji liniowej i nauczyć go na danych uczących (https://scikit-learn.org/stable/
modules/generated/sklearn.linear_model.LinearRegression.html).
"""
#obiekt
regr = linear_model.LinearRegression()
regr.fit(diabetes_X_train, diabetes_y_train)
"""
6. Wykonać predykcje na danych testowych i obliczyć błąd średniokwadratowy pomiędzy rzeczywistymi danymi a
predykcją (https://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_squared_error.
html).
"""
# Make predictions using the testing set
diabetes_y_pred = regr.predict(diabetes_X_test)
#coefficients
print("Coefficients: \n", regr.coef_)
#mean squared error
print("Mean squared error: %.2f" % mean_squared_error(diabetes_y_test, diabetes_y_pred))
#coefficient of determination
print("Coefficient of determination: %.2f" % r2_score(diabetes_y_test, diabetes_y_pred))
"""
7. Sprawdzić, czy dodanie innych zmiennych poza tymi wybranymi może polepszyć jakość regresji (zmniejszyć
błąd na danych testowych). W celu tego proszę powtórzyć w pętli punkty 2-6 wybierając poza zmiennymi
wskazanymi w punkcie 2 jedną z pozostałych zmiennych (inną w każdej iteracji).
"""
"""
8. Proszę wykonać raport w postaci PDF. W raporcie proszę umieścić wyniki poszczególnych etapów wykonywania zadania,
jak to wygenerowane wykresy, otrzymane wartości błędów na zbiorze testowym, informacje
o tym czy inne zmienne poprawiają czy pogarszają jakość regresji, wyniki błędu średniokwadrotowego dla
innych zestawów zmiennych.
"""