49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
import pandas as pd
|
|
from sklearn.model_selection import train_test_split
|
|
from sklearn.linear_model import Lasso
|
|
import matplotlib.pyplot as plt
|
|
from sklearn.preprocessing import StandardScaler
|
|
|
|
#Данные
|
|
data = pd.read_csv('clean_data.csv')
|
|
|
|
#Приведение строчных значений к числовым
|
|
#work
|
|
factorized_data_work, unique_values_work = pd.factorize(data['work'])
|
|
data['work'] = factorized_data_work
|
|
#gymtime
|
|
factorized_data_gymtime, unique_values_gymtime = pd.factorize(data['gymtime'])
|
|
data['gymtime'] = factorized_data_gymtime
|
|
|
|
#Отбор нужных столбцов
|
|
x = data[['age', 'weight', 'work', 'phy_ex', 'gymtime']]
|
|
|
|
#Определение целевой переменной
|
|
y = data['phy_health']
|
|
|
|
#Нормализация данных
|
|
scaler = StandardScaler()
|
|
x = scaler.fit_transform(x)
|
|
|
|
#Получение обучающей и тестовой выборки
|
|
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.1, random_state=42)
|
|
|
|
#Создание и обучение модели
|
|
lasso = Lasso(alpha=.05)
|
|
lasso.fit(x_train, y_train)
|
|
|
|
#Прогнозирование на тестовом наборе
|
|
y_pred = lasso.predict(x_test)
|
|
|
|
#Вывод результатов
|
|
print("Качество модели: ", lasso.score(x_test, y_test))
|
|
#График
|
|
plt.figure(figsize=(10, 7))
|
|
plt.plot(y_test.values, label='Фактические', marker='o', color='#8b00ff')
|
|
plt.plot(y_pred, label='Предсказанные', marker='o', color='#ff294d')
|
|
plt.title('Фактические и предсказанные значения')
|
|
plt.xlabel('Наблюдения')
|
|
plt.ylabel('Значения уровня здоровья')
|
|
plt.legend(loc='best')
|
|
plt.savefig("lasso.png")
|