Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
CodeLab
Проголосуйте за канал, чтобы он получил больше возможностей.
x_train_transformed = poly.fit_transform(x_train) # Обучается на тренировачных данных и сразу применяет преобразование ()
x_test_transformed = poly.transform(x_test) #
model = LinearRegression()
model.fit(x_train_transformed, y_train)
poly = PolynomialFeatures(degree=2, include_bias=False)
[[1, 1], Первый столбец — исходные значения
[2, 4], Второй столбец — X² (Квадрат исходных значений)
[3, 9]]
w₀ — intercept (свободный член). это значение y, когда все признаки X, X² равны нулю, отвечает за смещение модели вдоль оси y, вверх или вниз
w₁ — коэффициент для X, показывает, как y изменяется при изменении X (отвечает за наклон, линейность зависимости)
w₂ — коэффициент для X², показывает, как y изменяется при изменении X² (отвечает за кривизну (нелинейность зависимости)
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error
np.random.seed(42)
X = np.linspace(-3, 3, 100).reshape(-1, 1)
y = 0.5 * X**2 + X + 2 + np.random.normal(0, 1, (100, 1))
poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X)
model = LinearRegression()
model.fit(X_poly, y)
y_pred = model.predict(X_poly)
r2 = r2_score(y, y_pred)
mae = mean_absolute_error(y, y_pred)
mse = mean_squared_error(y, y_pred)
rmse = np.sqrt(mse)
print(f"R²: {r2:.4f}")
print(f"MAE: {mae:.4f}")
print(f"MSE: {mse:.4f}")
print(f"RMSE: {rmse:.4f}")R²: 0.8657
MAE: 0.7167
MSE: 0.8118
RMSE: 0.9010
🔗 Сама метрика R² показывает, насколько хорошо модель объясняет дисперсию данных.
🔗 Учитывает квадраты ошибок, что делает её более чувствительной к выбросам
Please open Telegram to view this post
VIEW IN TELEGRAM
CodeLab
y_pred = model.predict(x_test_transformed)
r2 = r2_score(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred) # Средняя абсолютная ошибка
mse = mean_squared_error(y_test, y_pred) # Средняя квадратическая ошибка
plt.plot(X, y, 'b.')
plt.xlabel('X')
plt.ylabel('y')
plt.title('Исходные данные')
plt.show()
print(f'R**2 score: {r2:.4f}')
print(f'MAE: {mae:.4f}')
print(f'MSE: {mse:.4f}')
plt.plot(x_test, y_test, 'b.', label = 'Тестовые данные')
plt.plot(x_test, y_pred, 'r.', label = 'Предсказанные значения')
plt.title('Реальные и предсказанные значения')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()
print("Коэффициенты модели:", model.coef_)
print('Свободный член (intercept):', model.intercept_)Визуализация предсказаний на новых данных
....
Продолжим завтра, я спать
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error
np.random.seed(43)
X = 6 * np.random.rand(200, 1) - 3
y = 0.8 * X**2 + 0.9 * X + 2 + np.random.randn(200, 1)
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42)
poly = PolynomialFeatures(degree = 2, include_bias = False)
'''
fit (изучение) используется только на обучающих данных;
transform: Применяет преобразование; в тестовых данных
нам нужно просто применить transform, поскольку параметры
рассчитали выше
'''
x_train_transformed = poly.fit_transform(x_train)
x_test_transformed = poly.transform(x_test)
model = LinearRegression()
model.fit(x_train_transformed, y_train)
y_pred = model.predict(x_test_transformed)
r2 = r2_score(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred) # Средняя абсолютная ошибка
mse = mean_squared_error(y_test, y_pred) # Средняя квадратическая ошибка
plt.plot(X, y, 'b.')
plt.xlabel('X')
plt.ylabel('y')
plt.title('Исходные данные')
plt.show()
print(f'R**2 score: {r2:.4f}')
print(f'MAE: {mae:.4f}')
print(f'MSE: {mse:.4f}')
plt.plot(x_test, y_test, 'b.', label = 'Тестовые данные')
plt.plot(x_test, y_pred, 'r.', label = 'Предсказанные значения')
plt.title('Реальные и предсказанные значения')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()
print("Коэффициенты модели:", model.coef_)
print('Свободный член (intercept):', model.intercept_)
Please open Telegram to view this post
VIEW IN TELEGRAM
Друзья, полноценный пост будет завтра, сегодня попробую вам че нить написать интересное 🫡
Please open Telegram to view this post
VIEW IN TELEGRAM
CodeLab
X_new = np.linspace(-3, 3, 200).reshape(200, 1) # Создаем равномерные точки в диапазоне [-3, 3]
X_new_poly = poly.transform(X_new) # Применяем полиномиальное преобразование
y_new = model.predict(X_new_poly) # Предсказываем значения
plt.plot(X_new, y_new, "r-", linewidth=2, label="Predictions") # Линия предсказаний (красная потому что r)
plt.plot(x_train, y_train, "b.", label='Training points') # Обучающие данные (синие )
plt.plot(x_test, y_test, "g.", label='Testing points') # Тестовые данные (зеленые)
plt.xlabel("X")
plt.ylabel("y")
plt.legend()
plt.show()
Please open Telegram to view this post
VIEW IN TELEGRAM
print(model.coef_) # [[1.5 0.7]]
print(model.intercept_) # [2.0]
Что будет выводить
R**2 score: 0.8533
MAE: 0.8395
MSE: 1.0314
Коэффициенты модели: [[0.95958032 0.785119 ]]
Свободный член (intercept): [2.13459906]
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM