Коэффициенты линейной регрессии
Содержание курса
Предсказание для одной строки и ручная проверка формулы
Чтобы получить предсказание для одного конкретного объекта, нужно передать в model.predict не словарь и не Series, а DataFrame с одной строкой и теми же столбцами, что у X_train. В актуальных версиях scikit-learn передача голого словаря или Series вызывает предупреждение или ошибку.
import pandas as pd
row = pd.DataFrame([{
'age': X_test.iloc[0]['age'],
'sex': X_test.iloc[0]['sex'],
'bmi': X_test.iloc[0]['bmi'],
'bp': X_test.iloc[0]['bp'],
's1': X_test.iloc[0]['s1'],
's2': X_test.iloc[0]['s2'],
's3': X_test.iloc[0]['s3'],
's4': X_test.iloc[0]['s4'],
's5': X_test.iloc[0]['s5'],
's6': X_test.iloc[0]['s6'],
}])
pred = model.predict(row)
print("predict:", pred[0])
Результат model.predict — NumPy-массив из одного элемента; нужное число берётся через [0].
Чтобы убедиться, что коэффициенты прочитаны правильно, можно воспроизвести то же значение вручную по формуле линейной регрессии:
import numpy as np
manual = model.intercept_ + np.sum(model.coef_ * row.values[0])
print("manual:", manual)
row.values[0] — NumPy-массив значений признаков в том же порядке, что model.coef_. Поэлементное произведение и сумма дают intercept_ + Σ(coef_[i] * x[i]) — именно ту формулу, которую решает линейная регрессия.
Если pred[0] и manual совпадают (с точностью до floating-point округления), это подтверждает: коэффициенты сопоставлены с признаками верно, порядок столбцов не нарушен. Расхождение в нескольких знаках после запятой — нормальная арифметика с плавающей точкой, не ошибка. Если числа расходятся значительно, стоит проверить порядок столбцов в row относительно X_train.
