Какой метод в библиотеке scikitlearn используется для разделения данных на обучающую и тестовую выборки?
Anonymous Quiz
64%
train_test_split()
18%
split_data()
18%
divide_dataset()
0%
data_split()
Какой из следующих параметров в линейной регрессии отвечает за наклон прямой?
Anonymous Quiz
45%
intercept
36%
slope
9%
coefficient
9%
bias
Какой показатель используется для оценки качества линейной регрессии?
Anonymous Quiz
0%
Precision
23%
F1-score
54%
R-squared
23%
Accuracy
Что выведет код?
my_dict = {'a': 1, 'b': 2, 'c': 3}
print(my_dict.get('d', 4))
my_dict = {'a': 1, 'b': 2, 'c': 3}
print(my_dict.get('d', 4))
Anonymous Quiz
8%
1
0%
2
58%
4
8%
3
25%
2765
a = [1, 2, 3]
b = a
b.append(4) print(a)
b = a
b.append(4) print(a)
Anonymous Quiz
29%
[1, 2, 3]
53%
[1, 2, 3, 4]
0%
[4, 3, 2, 1]
18%
Ошибка
0%
[4]
d_pred_d_w5 = h1 * deriv_sigmoid(sum_o1)
d_pred_d_w6 = h2 * deriv_sigmoid(sum_o1)
d_pred_d_b3 = deriv_sigmoid(sum_o1)
d_ypred_d_h1 = self.w5 * deriv_sigmoid(sum_o1)
d_ypred_d_h2 = self.w6 * deriv_sigmoid(sum_o1)
d_h1_d_w1 = x[0] * deriv_sigmoid(sum_h1)
d_h1_d_w2 = x[1] * deriv_sigmoid(sum_h1)
d_h1_d_b1 = deriv_sigmoid(sum_h1)
d_h2_d_w3 = x[0] * deriv_sigmoid(sum_h2)
d_h2_d_w4 = x[1] * deriv_sigmoid(sum_h2)
d_h2_d_b2 = deriv_sigmoid(sum_h2)
d_pred_d_w5 = h1 * deriv_sigmoid(sum_o1) — здесь sum_o1 это взвешенная сумма (сумма входных данных, умноженных на их веса, плюс смещение (bias)) на выходном нейронеЕсли h1 большое, w5 сильнее влияет на o1
d_pred_d_w6 = h2 * deriv_sigmoid(sum_o1) — тут аналогично только для w6 (проще говоря, тут показано влияение w6 на o1)d_pred_d_b3 = deriv_sigmoid(sum_o1) — ( влияние смещения на выход)d_ypred_d_h1 = self.w5 * deriv_sigmoid(sum_o1) — итак, здесь показано насколько вес w5 влияет на выход, для h2 выйдет аналогично...d_h1_d_w1 = x[0] * deriv_sigmoid(sum_h1) — вес w1 умножается на градиент сигмоиды, аналогично будет для w2 и влияния смещения — d_h1_d_b1 = deriv_sigmoid(sum_h1) d_h2_d_w3 = x[0] * deriv_sigmoid(sum_h2), аналогично для w4 и влияния смещения — d_h2_d_b2 = deriv_sigmoid(sum_h2)🔜 Каждый параметр уменьшается на некую величину, зависящую от градиентов и learn_rate (скорости обучения). Это делает предсказания точнее.
self.w1 -= learn_rate * d_l_d_pred * d_ypred_d_h1 * d_h1_d_w1
self.w2 -= learn_rate * d_l_d_pred * d_ypred_d_h1 * d_h1_d_w2
self.b1 -= learn_rate * d_l_d_pred * d_ypred_d_h1 * d_h1_d_b1
self.w3 -= learn_rate * d_l_d_pred * d_ypred_d_h2 * d_h2_d_w3
self.w4 -= learn_rate * d_l_d_pred * d_ypred_d_h2 * d_h2_d_w4
self.b2 -= learn_rate * d_l_d_pred * d_ypred_d_h2 * d_h2_d_b2
self.w5 -= learn_rate * d_l_d_pred * d_pred_d_w5
self.w6 -= learn_rate * d_l_d_pred * d_pred_d_w6
self.b3 -= learn_rate * d_l_d_pred * d_pred_d_b3
if epoch % 10 == 0:
y_preds = np.array([self.feedforward(x) for x in data])
loss = mse_loss(all_y_trues, y_preds)
print(f"Epoch {epoch} loss: {loss:.3f}")
Здесь мы имеем 4 примера и переменную all_y_trues, которая содержит правильные метки или ответы, тут, как вам удобно.
data = np.array([
[-2, -1],
[25, 6],
[17, 4],
[-15, -6]
])
all_y_trues = np.array([1, 0, 0, 1])
network = OurNeuralNetwork()
network.train(data, all_y_trues)
Please open Telegram to view this post
VIEW IN TELEGRAM
А вот он и весь код:
🔤 🔤 🔤 🌹 🔤 🪷 🔤 🔤 🌷 🌸 🔤 🌹 🔤
import numpy as np
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def deriv_sigmoid(x):
fx = sigmoid(x)
return fx * (1 - fx)
def mse_loss(y_true, y_pred):
return ((y_true - y_pred) ** 2).mean()
class OurNeuralNetwork:
def __init__(self):
self.w1 = np.random.normal()
self.w2 = np.random.normal()
self.w3 = np.random.normal()
self.w4 = np.random.normal()
self.w5 = np.random.normal()
self.w6 = np.random.normal()
self.b1 = np.random.normal()
self.b2 = np.random.normal()
self.b3 = np.random.normal()
def feedforward(self, x):
h1 = sigmoid(self.w1 * x[0] + self.w2 * x[1] + self.b1)
h2 = sigmoid(self.w3 * x[0] + self.w4 * x[1] + self.b2)
o1 = sigmoid(self.w5 * h1 + self.w6 * h2 + self.b3)
return o1
def train(self, data, all_y_trues):
learn_rate = 0.1
epochs = 1000
for epoch in range(epochs):
for x, y_true in zip(data, all_y_trues):
sum_h1 = self.w1 * x[0] + self.w2 * x[1] + self.b1
h1 = sigmoid(sum_h1)
sum_h2 = self.w3 * x[0] + self.w4 * x[1] + self.b2
h2 = sigmoid(sum_h2)
sum_o1 = self.w5 * h1 + self.w6 * h2 + self.b3
o1 = sigmoid(sum_o1)
y_pred = o1
d_l_d_pred = -2 * (y_true - y_pred)
d_pred_d_w5 = h1 * deriv_sigmoid(sum_o1)
d_pred_d_w6 = h2 * deriv_sigmoid(sum_o1)
d_pred_d_b3 = deriv_sigmoid(sum_o1)
d_ypred_d_h1 = self.w5 * deriv_sigmoid(sum_o1)
d_ypred_d_h2 = self.w6 * deriv_sigmoid(sum_o1)
d_h1_d_w1 = x[0] * deriv_sigmoid(sum_h1)
d_h1_d_w2 = x[1] * deriv_sigmoid(sum_h1)
d_h1_d_b1 = deriv_sigmoid(sum_h1)
d_h2_d_w3 = x[0] * deriv_sigmoid(sum_h2)
d_h2_d_w4 = x[1] * deriv_sigmoid(sum_h2)
d_h2_d_b2 = deriv_sigmoid(sum_h2)
self.w1 -= learn_rate * d_l_d_pred * d_ypred_d_h1 * d_h1_d_w1
self.w2 -= learn_rate * d_l_d_pred * d_ypred_d_h1 * d_h1_d_w2
self.b1 -= learn_rate * d_l_d_pred * d_ypred_d_h1 * d_h1_d_b1
self.w3 -= learn_rate * d_l_d_pred * d_ypred_d_h2 * d_h2_d_w3
self.w4 -= learn_rate * d_l_d_pred * d_ypred_d_h2 * d_h2_d_w4
self.b2 -= learn_rate * d_l_d_pred * d_ypred_d_h2 * d_h2_d_b2
self.w5 -= learn_rate * d_l_d_pred * d_pred_d_w5
self.w6 -= learn_rate * d_l_d_pred * d_pred_d_w6
self.b3 -= learn_rate * d_l_d_pred * d_pred_d_b3
if epoch % 10 == 0:
y_preds = np.array([self.feedforward(x) for x in data])
loss = mse_loss(all_y_trues, y_preds)
print(f"Epoch {epoch} loss: {loss:.3f}")
data = np.array([
[-2, -1],
[25, 6],
[17, 4],
[-15, -6]
])
all_y_trues = np.array([1, 0, 0, 1])
network = OurNeuralNetwork()
network.train(data, all_y_trues)
Please open Telegram to view this post
VIEW IN TELEGRAM
Завтра будет объяснение, а пока думайте🤯 🧠
def func(a, b=[]): b.append(a) return b print(func(1)) print(func(2)) print(func(3, [])) print(func(4))
def func(a, b=[]): b.append(a) return b print(func(1)) print(func(2)) print(func(3, [])) print(func(4))
Anonymous Quiz
10%
[1] [2] [3] [4]
60%
[1] [1, 2] [3] [1, 2, 4]
20%
[1] [2] [3] [4]
10%
[1] [2] [3] [3, 4]
🔵 Регрессия — важная часть машинного обучения. Она состоит из обучения алгоритма с помеченными данными и его использования для прогнозирования будущих (немаркированных) данных.🔵 Помеченные данные — это данные, поставляемые с метками, которые
в случае регрессии являются числами. Например, числа могут быть ценами на дома.🔵 В наборе данных признаки — это свойства, которые мы используем для прогнозирования метки. Так, если мы хотим спрогнозировать цены на
жилье, характеристики — это все, что описывает дом и что может определить цену, например размер, количество комнат, качество ближайшей школы, уровень преступности в районе, возраст дома и расстояние до шоссе.🔵 Метод линейной регрессии для прогнозирования состоит в присвоении веса каждому из признаков и суммировании весов, умноженных на соответствующие признаки, плюс смещение.🔵 Графически можно представить алгоритм линейной регрессии как попытку провести прямую как можно ближе к набору точек.🔵 Работа алгоритма линейной регрессии заключается в том, что он начинает со случайной прямой, а затем медленно приближает ее к каждой из неправильно классифицированных точек, пытаясь классифицировать
их правильно🔵 Полиномиальная регрессия — это общий случай линейной регрессии, в которой для моделирования данных мы используем кривые вместо прямых. Это особенно полезно, когда набор данных нелинейный.🔵 Регрессия имеет множество применений, включая системы рекомендаций, электронную коммерцию и здравоохранение
Please open Telegram to view this post
VIEW IN TELEGRAM
Всем доброй ночи!
👨💻 Это все можно рассчитать с помощью пары формул, но мы делаем с помощью кода:
0⃣ 🗂 Библиотеки:
1⃣ 📊 Теперь наши данные, сделаем их в виде словаря:
2⃣ 🤯 Pandas мы импортировали не зря, преобразуем наш словарь в таблицу данных:
3⃣ 📊 Формула для прогноза цены у нас есть, сделаем ее в виде функции:
4⃣ ⚙️ Генерим предсказания:
🧑💻 Итак, тут поподробнее: берем df['Размер (s)'], эта часть строки выбирает столбец 'Размер (s)' из DataFrame df, который содержит информацию о размере каждого дома.
🧑💻 Другая часть строки — .apply(predict_price) применяет функцию predict_price к каждому значению в столбце 'Размер (s)'. Функция predict_price вычисляет прогнозируемую цену дома на основе формулы из условия.
🧑💻 df['Прогноз (p)'] = ... : Создает новый столбец 'Прогноз (p)' в DataFrame df и заполняет его значениями, полученными от применения функции predict_price
🧑💻 Если совсем просто, то мы создали новую переменную для прогнозов и теперь она в нашей таблице df DataFrame
5⃣ 🛍 Вычисляем MAE (средняя абсолютная)
6⃣ 📇 MSE (средняя квадратичная)
7⃣ 🧑💻 Остается визуал:
⚙️ Весь код:
*⃣ Вывод:
🧑💻 Средняя абсолютная погрешность (MAE): 38.0
🧑💻 Средняя квадратическая погрешность (MSE): 1550.0
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
data = {
'Дом': [1, 2, 3, 4, 5],
'Размер (s)': [100, 200, 250, 325],
'Вознаграждение (r)': [200, 475, 400, 520, 735]
}df = pd.DataFrame(data)
def predict_price(size):
return 2 * size + 50
df['Прогноз (p)'] = df['Размер (s)'].apply(predict_price)
mae = np.mean(np.abs(df['Вознаграждение (r)'] - df['Прогноз (p)']))
print(f"Средняя абсолютная погрешность (MAE): {mae}")
mse = np.mean((df['Вознаграждение (r)'] - df['Прогноз (p)']) ** 2)
print(f"Средняя квадратическая погрешность (MSE): {mse}")
plt.figure(figsize=(10, 6))
plt.plot(df['Дом'], df['Вознаграждение (r)'], label='Фактические значения', marker='o')
plt.plot(df['Дом'], df['Прогноз (p)'], label='Прогнозы', marker='x')
plt.xlabel('Дом')
plt.ylabel('Цена')
plt.title('Фактические и прогнозируемые цены домов')
plt.legend()
plt.grid(True)
plt.show()
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data = {
'Дом': [1, 2, 3, 4, 5],
'Размер (s)': [100, 200, 200, 250, 325],
'Вознаграждение (r)': [200, 475, 400, 520, 735]
}
df = pd.DataFrame(data)
def predict_price(size):
return 2 * size + 50
df['Прогноз (p)'] = df['Размер (s)'].apply(predict_price)
df['Прогноз (p)'] = df['Размер (s)'].apply(predict_price)
#MAE
mae = np.mean(np.abs(df['Вознаграждение (r)'] - df['Прогноз (p)']))
print(f"Средняя абсолютная погрешность (MAE): {mae}")
#MSE
mse = np.mean((df['Вознаграждение (r)'] - df['Прогноз (p)']) ** 2)
print(f"Средняя квадратическая погрешность (MSE): {mse}")
plt.figure(figsize=(10, 6))
plt.plot(df['Дом'], df['Вознаграждение (r)'], label='Фактические значения', marker='o')
plt.plot(df['Дом'], df['Прогноз (p)'], label='Прогнозы', marker='x')
plt.xlabel('Дом')
plt.ylabel('Цена')
plt.title('Фактические и прогнозируемые цены домов')
plt.legend()
plt.grid(True)
plt.show()
print(df)
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
np.random.rand()➡️ Рандом от 0 до 1 (равномерное)
np.random.randn()➡️ Нормальное распределение (среднее 0)
np.random.randint(a, b)➡️ Целое число от a до b (не включая b)
np.random.uniform(a, b)➡️ Вещественное число от a до b
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Цель градиентного спуска — найти такие параметры (веса модели), чтобы эта ошибка была минимальной (свести ошибку к нулю).🧠 Представьте, что вы находитесь на вершине горы (наша гора — эта функция потерь), а нам нужно спуститься в низину этой горы, вот низина — это место, где ошибка 0 (или близко к нему), ошибка минимальна. спрыгнуть мы туда не можем, поэтому надо аккуратно спускаться. Маленькими шагами мы спускаемся по горе вниз — это и есть градиентный спуск
🔜 "Насколько в среднем сильно модель промахивается",
и причём большие ошибки штрафуются сильнее, потому что возводим в квадрат.
Please open Telegram to view this post
VIEW IN TELEGRAM