Регрессия и первый проект

Коэффициенты линейной регрессии

Содержание курса

Предсказание для одной строки и ручная проверка формулы

Чтобы получить предсказание для одного конкретного объекта, нужно передать в 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.