2023-11-04 20:32:30 +04:00
|
|
|
|
import pandas as pd
|
|
|
|
|
from sklearn.linear_model import Ridge
|
|
|
|
|
from sklearn import metrics
|
|
|
|
|
from sklearn.preprocessing import MinMaxScaler
|
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
|
|
|
|
|
# Загрузка данных и разделение на обучающий и тестовый наборы
|
|
|
|
|
data = pd.read_csv('stroke_prediction_ds.csv')
|
|
|
|
|
data = data.dropna()
|
|
|
|
|
|
|
|
|
|
scaler = MinMaxScaler()
|
|
|
|
|
x = data[['age', 'hypertension', 'heart_disease']] # выделение признаков (возраст, гипертензия, сердечные заболевания)
|
|
|
|
|
y = scaler.fit_transform(data['avg_glucose_level'].values.reshape(-1, 1)).flatten() # масштабирование данных
|
|
|
|
|
|
|
|
|
|
split_point = round(len(data) * 0.99) # 99% данных
|
|
|
|
|
x_train, x_test = x.iloc[:split_point], x.iloc[split_point:] # x_train читает 99% данных, а x_test - оставшийся 1%
|
|
|
|
|
y_train, y_test = y[:split_point], y[split_point:] # y_train читает 99% данных, а y_test - оставшийся 1%
|
|
|
|
|
|
|
|
|
|
# Обучение модели и прогнозирование, применение алгоритма гребневой регрессии
|
|
|
|
|
rid = Ridge(alpha=1.0).fit(x_train.values, y_train)
|
|
|
|
|
y_predict = rid.predict(x_test.values)
|
|
|
|
|
|
|
|
|
|
# Вычисление метрик и построение графика (среднеквадратичная ошибка и коэффициент детерминации)
|
|
|
|
|
mid_square = round(metrics.mean_squared_error(y_test, y_predict) ** 0.5, 3)
|
|
|
|
|
coeff_determ = round(metrics.r2_score(y_test, y_predict), 2)
|
|
|
|
|
|
|
|
|
|
# Визуализация данных
|
|
|
|
|
plt.plot(y_test, c="red", label="y_test")
|
|
|
|
|
plt.plot(y_predict, c="orange", label=f"y_pred\nmean_squared_error (mid_square) = {mid_square}\nCoefficient of determination (coeff_determ) = {coeff_determ}")
|
|
|
|
|
plt.legend(loc='upper right')
|
|
|
|
|
plt.title("Гребневая регрессия")
|
|
|
|
|
plt.show()
|