Загрузка данных


import numpy as np
import pandas as pd
from sklearn.neural_network import MLPClassifier, MLPRegressor
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import r2_score

# ==========================================================
# ЧАСТЬ 1: РУЧНАЯ РЕАЛИЗАЦИЯ (Задания 1 и 2)
# ==========================================================

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def relu(x):
    return np.maximum(0, x)

class Neuron:
    def __init__(self, weights, bias, activation=sigmoid):
        self.weights = weights
        self.bias = bias
        self.activation = activation

    def feedforward(self, inputs):
        total = np.dot(self.weights, inputs) + self.bias
        return self.activation(total)

# Пример реализации нейросети из задания 1.1 (3 входа, 3 скрытых, 1 выход)
class NeuralNetwork331:
    def __init__(self):
        w, b = np.array([0.5, 0.5, 0.5]), 0
        self.h1, self.h2, self.h3 = Neuron(w, b), Neuron(w, b), Neuron(w, b)
        self.o1 = Neuron(w, b)

    def feedforward(self, x):
        h_out = np.array([self.h1.feedforward(x), self.h2.feedforward(x), self.h3.feedforward(x)])
        return self.o1.feedforward(h_out)

# ==========================================================
# ЧАСТЬ 2: МАШИННОЕ ОБУЧЕНИЕ С НОРМАЛИЗАЦИЕЙ (Задание 3)
# ==========================================================

print("--- КЛАССИФИКАЦИЯ (ИРИСЫ) ---")
iris_url = "https://gist.githubusercontent.com/netj/8836201/raw/6f9306ad21398ea43cba4f7d537619d0e07d5ae3/iris.csv"
df_iris = pd.read_csv(iris_url)
X_c = df_iris.iloc[:, :-1]
y_c = df_iris.iloc[:, -1]

# 1. Нормализация данных
scaler_c = StandardScaler()
X_c_scaled = scaler_c.fit_transform(X_c)

# 2. Обучение классификатора
clf = MLPClassifier(hidden_layer_sizes=(10,), max_iter=1000, random_state=1)
clf.fit(X_c_scaled, y_c)

print(f"Финальная потеря: {clf.loss_:.4f}")
print(f"Точность (Accuracy): {clf.score(X_c_scaled, y_c):.4f}")

print("\n--- РЕГРЕССИЯ (ЗАРПЛАТЫ) ---")
salary_url = "https://raw.githubusercontent.com/AnnaShestova/salary-years-simple-linear-regression/master/Salary_Data.csv"
df_salary = pd.read_csv(salary_url)
X_r = df_salary[['YearsExperience']]
y_r = df_salary['Salary']

# 1. Нормализация признаков и целевой переменной
scaler_x = StandardScaler()
scaler_y = StandardScaler()

X_r_scaled = scaler_x.fit_transform(X_r)
y_r_scaled = scaler_y.fit_transform(y_r.values.reshape(-1, 1)).flatten()

# 2. Обучение регрессора
reg = MLPRegressor(hidden_layer_sizes=(10, 10), max_iter=5000, random_state=1)
reg.fit(X_r_scaled, y_r_scaled)

# 3. Вывод результатов
r2 = reg.score(X_r_scaled, y_r_scaled)
print(f"Финальная потеря (MSE масштабированная): {reg.loss_:.6f}")
print(f"R^2 Score: {r2:.4f}")

# Пример предсказания (возвращаем из масштаба обратно в валюту)
test_val = scaler_x.transform([[5]]) # Предскажем для 5 лет опыта
pred_scaled = reg.predict(test_val)
pred_final = scaler_y.inverse_transform(pred_scaled.reshape(-1, 1))
print(f"Предсказанная зарплата для 5 лет опыта: {pred_final[0][0]:.2f}")