289 KiB
289 KiB
In [ ]:
! curl https://raw.githubusercontent.com/MSU-ML-COURSE/ML-COURSE-25-26/refs/heads/master/requirements/requirements.txt -o ./requirements_2025_26_for_colab_small.txt
! pip install -q -r ./requirements_2025_26_for_colab_small.txt[1m[[0m[34;49mnotice[0m[1;39;49m][0m[39;49m A new release of pip is available: [0m[31;49m25.2[0m[39;49m -> [0m[32;49m25.3[0m [1m[[0m[34;49mnotice[0m[1;39;49m][0m[39;49m To update, run: [0m[32;49mpip install --upgrade pip[0m
In [ ]:
import catboost
assert(catboost.__version__ == '1.2.8')In [4]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.simplefilter("ignore")
sns.set(style="darkgrid")
%matplotlib inlineIn [5]:
from sklearn.linear_model import RidgeIn [6]:
np.random.seed(1)
X = np.random.uniform(0, 1, 100)
Y = X * 0.5 + 0.1 + np.random.randn(100) * 0.1
X3 = np.hstack((X[:, None], 3 * X[:, None]))
Y3 = X3[:, 0] * 0.5 + 0.1 + np.random.randn(100) * 0.1In [7]:
w1 = []
w2 = []
alphas = [0.01, 0.1, 1, 10, 100, 1000]
for alpha in alphas:
reg = Ridge(alpha=alpha)
reg.fit(X3, Y3)
w1.append(reg.coef_[0])
w2.append(reg.coef_[1])
w1 = np.array(w1)
w2 = np.array(w2)
fig, axs = plt.subplots(figsize=(14, 7), ncols=2)
axs[0].plot(alphas, w1, label="w1")
axs[0].plot(alphas, w2, label="w2")
axs[0].set_xscale("log")
axs[0].set_title("Веса регрессии при разных alpha")
axs[0].set_xlabel("alpha")
axs[0].set_ylabel("Значение весов")
axs[0].legend()
axs[1].plot(alphas, w2 / w1, label="отношение w2 к w1", linewidth=10)
axs[1].plot([0.01, 1000], [3, 3], label="отношение x2 к x1", linestyle="--", linewidth=8)
axs[1].set_xscale("log")
axs[1].set_ylim(2,4)
axs[1].set_xlabel("alpha")
axs[1].set_ylabel("Значение отношения")
axs[1].set_title("Отношение весов")
axs[1].legend()
plt.show()In [8]:
from sklearn.linear_model import LassoIn [9]:
reg = Lasso(alpha=1., max_iter=1000, tol=1e-4)
reg.fit(X3, Y3)
print("Веса, при alpha = 1.")
print("w1:", reg.coef_[0], "\tw2:", reg.coef_[1])
print()
reg = Lasso(alpha=0.1, max_iter=1000, tol=1e-4)
reg.fit(X3, Y3)
print("Веса, при alpha = 0.1")
print("w1:", reg.coef_[0], "\tw2:", reg.coef_[1])
print()
reg = Lasso(alpha=0.01, max_iter=1000, tol=1e-4)
reg.fit(X3, Y3)
print("Веса, при alpha = 0.01")
print("w1:", reg.coef_[0], "\tw2:", reg.coef_[1])
print()
reg = Lasso(alpha=0.001, max_iter=1000, tol=1e-4)
reg.fit(X3, Y3)
print("Веса, при alpha = 0.001")
print("w1:", reg.coef_[0], "\tw2:", reg.coef_[1])
print()
reg = Lasso(alpha=0.0001, max_iter=1000, tol=1e-4)
reg.fit(X3, Y3)
print("Веса, при alpha = 0.0001")
print("w1:", reg.coef_[0], "\tw2:", reg.coef_[1])
print()
reg = Lasso(alpha=0.00001, max_iter=1000, tol=1e-4)
reg.fit(X3, Y3)
print("Веса, при alpha = 0.00001")
print("w1:", reg.coef_[0], "\tw2:", reg.coef_[1])
print()Веса, при alpha = 1. w1: 0.0 w2: 0.0 Веса, при alpha = 0.1 w1: 0.0 w2: 0.029684463509327023 Веса, при alpha = 0.01 w1: 0.0 w2: 0.14506160917248503 Веса, при alpha = 0.001 w1: 0.0 w2: 0.15659932373880084 Веса, при alpha = 0.0001 w1: 0.0 w2: 0.1577530951954324 Веса, при alpha = 0.00001 w1: 0.3966873199145487 w2: 0.025639365702912757
In [ ]:
reg = Lasso(alpha=0.00001, max_iter=10000, tol=1e-4)
reg.fit(X3, Y3)
print("Веса, при alpha = 0.00001")
print("w1:", reg.coef_[0], "\tw2:", reg.coef_[1])Веса, при alpha = 0.00001 w1: 0.0 w2: 0.15786847234109574
In [19]:
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
def generate_polynomial_data(n_samples):
X = np.linspace(-10, 10, n_samples)
coeffs = [-1, 3, 2]
y = np.polyval(coeffs, X) + np.random.uniform(0, 1, n_samples)
X = X.reshape(-1, 1)
return X, y
X4, Y4 = generate_polynomial_data(500)
X4_train, X4_test, Y4_train, Y4_test = train_test_split(X4, Y4, test_size=0.2, random_state=50)
reg = Ridge(alpha=0.1)
reg.fit(X4_train, Y4_train)
Y4_pred = reg.predict(X4_test)
print("MSE для модели: ", mean_squared_error(Y4_test, Y4_pred))
plt.figure(figsize=(18, 6))
plt.subplot(1, 3, 1)
plt.scatter(X4, Y4, color='blue', label='Данные')
plt.scatter(X4_test, Y4_pred, color='red', label='Предсказание')
plt.xlabel('Признак X')
plt.ylabel('Целевая y')
plt.title('Данные с пол зависимостью')
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()MSE для модели: 810.5074902548056
In [20]:
X1 = np.random.randn(100, 1)
X2 = np.ones((100, 1))*10
Y = 3 * X1
X = np.hstack((X1, X2))
ridge = Ridge(alpha=0.5)
ridge.fit(X, Y)
print("Коэфф Ridge-регрессии:")
print(f"w1 (X1): {ridge.coef_[0]:.4f}")
print(f"w2 (X2): {ridge.coef_[1]}")Коэфф Ridge-регрессии: w1 (X1): 2.9883 w2 (X2): 0.0