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
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.metrics import r2_score
⚙️ Линейная: y= 3x + 2⚙️ Квадратичная: y = -2x² + 4x + 1
.... и так далее
-3x² — добавляет изгиб
x — линейная зависимоть
+5 — смещение вверх, чтобы
np.random.seed(42)
X = np.linspace(-3, 3, 100).reshape(-1, 1)
y = 2 * X ** 3 - 3 * X**2 + X + 5 + np.random.randn(100, 1) * 5
def plot_poly_regression(X, y, degree):
poly = PolynomialFeatures(degree = degree)
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)
plt.scatter(X, y, color = 'blue', label = 'Исходные данные')
plt.plot(X, y_pred, color = 'blue', label = f'Полином {degree} - й степени (R)²={r2:.3f})')
plt.title(f'Полиномиальная регрессия (степень {degree})')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()
plot_poly_regression(X, y, 1)
plot_poly_regression(X, y, 2)
plot_poly_regression(X, y, 3)
plot_poly_regression(X, y, 5)
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM