Skip to content

Commit 93ee57d

Browse files
authored
Update README.md
1 parent f059b57 commit 93ee57d

1 file changed

Lines changed: 108 additions & 0 deletions

File tree

README.md

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,110 @@
11
# Cost-function
22
In this repository, we implement and explore the cost function for linear regression with one variable.
3+
Этот код — из курса по машинному обучению (Andrew Ng, Coursera), где демонстрируется графическая интуиция для линейной регрессии. Давай подробно разберём его **построчно**.
4+
5+
***
6+
7+
### Импорт библиотек
8+
```python
9+
import numpy as np
10+
%matplotlib widget
11+
import matplotlib.pyplot as plt
12+
from lab_utils_uni import plt_intuition, plt_stationary, plt_update_onclick, soup_bowl
13+
```
14+
- `import numpy as np` — импортируем библиотеку NumPy для работы с массивами и числовыми вычислениями.
15+
- `%matplotlib widget` — Jupyter Notebook *магическая команда*. Делает графики Matplotlib *интерактивными* (можно кликать и обновлять графики прямо в окне).
16+
- `import matplotlib.pyplot as plt` — импортируем Matplotlib для построения графиков.
17+
- `from lab_utils_uni import ...` — импорт функций из вспомогательного модуля (`lab_utils_uni.py`), подготовленного авторами курса:
18+
- `plt_intuition` — рисует интуитивный график линейной регрессии (прямая + точки).
19+
- `plt_stationary` — строит статичный график для работы с данными.
20+
- `plt_update_onclick` — позволяет обновлять график при клике (менять параметры линейной регрессии).
21+
- `soup_bowl` — отображает "чашу супа" (график функции стоимости в 3D), иллюстрирующий минимум ошибки.
22+
23+
***
24+
25+
### Создание обучающих данных
26+
```python
27+
x_train = np.array([1.0, 2.0])
28+
y_train = np.array([300.0, 500.0])
29+
```
30+
- `x_train` — массив значений признака (например, площадь квартиры).
31+
- `y_train` — массив целевых значений (например, цена квартиры).
32+
Здесь задаются всего два примера: площадь $$1.0$$ и $$2.0$$, соответствующие ценам $$300$$ и $$500$$.
33+
34+
***
35+
36+
### Функция стоимости (Cost Function)
37+
```python
38+
def compute_cost(x, y, w, b):
39+
m = x.shape[0]
40+
cost_sum = 0
41+
for i in range(m):
42+
f_wb = w * x[i] + b
43+
cost = (f_wb - y[i]) ** 2
44+
cost_sum = cost_sum + cost
45+
total_cost = (1 / (2 * m)) * cost_sum
46+
return total_cost
47+
```
48+
- `def compute_cost(x, y, w, b):` — определяем функцию для вычисления стоимости (Mean Squared Error с коэффициентом 1/2).
49+
- `m = x.shape` — получаем количество обучающих примеров.
50+
- `cost_sum = 0` — инициализация суммы ошибок.
51+
- `for i in range(m):` — пробегаем по всем примерам.
52+
- `f_wb = w * x[i] + b` — вычисляем предсказание гипотезы (линейная модель).
53+
- `cost = (f_wb - y[i]) ** 2` — считаем квадрат ошибки каждого примера.
54+
- `cost_sum = cost_sum + cost` — суммируем ошибки.
55+
- `total_cost = (1 / (2 * m)) * cost_sum` — усредняем ошибку по всем примерам и умножаем на 1/2.
56+
- `return total_cost` — возвращаем итоговую стоимость.
57+
58+
***
59+
60+
### Визуализация интуиции
61+
```python
62+
plt_intuition(x_train, y_train)
63+
```
64+
- Строится график точек $$ (x, y) $$ и прямая (линейная регрессия) для интуитивного понимания.
65+
66+
***
67+
68+
### Новые тренировочные данные
69+
```python
70+
x_train = np.array([1.0, 1.7, 2.0, 2.5, 3.0, 3.2])
71+
y_train = np.array([250, 300, 480, 430, 630, 730,])
72+
```
73+
- Создаем новый набор данных из 6 точек. Теперь наша база чуть "реалистичнее".
74+
75+
***
76+
77+
### Закрытие старых графиков
78+
```python
79+
plt.close('all')
80+
```
81+
- Закрывает все ранее открытые графики Matplotlib (нужно, чтобы старые фигуры не мешались новым).
82+
83+
***
84+
85+
### Создание статичной визуализации
86+
```python
87+
fig, ax, dyn_items = plt_stationary(x_train, y_train)
88+
```
89+
- `plt_stationary` строит график с точками и «заготовленной» линией.
90+
- `fig, ax` — стандартные объекты Figure и Axes в Matplotlib.
91+
- `dyn_items` — динамические элементы (например, сама линия, предсказания и легенды), которые будут обновляться.
92+
93+
***
94+
95+
### Добавление интерактивности
96+
```python
97+
updater = plt_update_onclick(fig, ax, x_train, y_train, dyn_items)
98+
```
99+
- Связывает график с функцией обновления: теперь при клике мышкой будут изменяться параметры $$w$$ и $$b$$, и пересчитываться линия регрессии/ошибка.
100+
101+
***
102+
103+
### Визуализация функции стоимости
104+
```python
105+
soup_bowl()
106+
```
107+
- Показывает 3D-график стоимости $$J(w, b)$$.
108+
- Поверхность напоминает «чашу супа», у которой минимум находится в центре: именно туда должен стремиться градиентный спуск.
109+
110+
***

0 commit comments

Comments
 (0)