Загрузить файлы в «lab4»
Этот коммит содержится в:
621
lab4/4_kohonen.ipynb
Обычный файл
621
lab4/4_kohonen.ipynb
Обычный файл
@@ -0,0 +1,621 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### ЛАБОРАТОРНАЯ РАБОТА №4\n",
|
||||
"## Сеть Кохонена"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> Цель работы: знакомство с применением многослойного персептрона для решения задач сжатия данных, прогнозирования временных рядов и распознавания образов.\n",
|
||||
">\n",
|
||||
"> Задание\n",
|
||||
"> 1. Изучить разделы справки связанные с обучением сети Кохонена. Загрузить набор данных, содержащий измерения длины и ширины чашелистика и лепестка 150 экземпляров ириса (ирисы Фишера). Создать сеть Кохонена и выполнить с помощью неё кластеризацию сортов ириса. Проанализировать полученные результаты. Выполнить визуализацию исходных данных.\n",
|
||||
"> 2. Построить и обучить сеть Кохонена для кластеризации данных скрытого слоя автоассоциативной сети из п.1. лабораторной работы №3. Проанализировать результаты и сравнить их с результатами классификации многослойным персептроном, полученными в лабораторной работе №2.."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Импорт библиотек:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "5pnjRdYLSLXZ"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"import pandas as pd\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"from IPython.display import clear_output\n",
|
||||
"from mpl_toolkits.mplot3d import Axes3D\n",
|
||||
"from sklearn.datasets import load_iris\n",
|
||||
"\n",
|
||||
"%matplotlib inline"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Содержание: \n",
|
||||
"[1. Ирисы Фишера](#p_1) \n",
|
||||
"[2. Данные скрытого слоя](#p_2)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 1. Ирисы Фишера<a id=\"p_1\"></a>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Сеть Кохонена (или самоорганизующаяся карта) — это тип нейронных сетей без учителя (unsupervised learning), разработанный финским учёным Теуво Кохоненом. \n",
|
||||
"\n",
|
||||
"Основная цель таких сетей — визуализация и кластеризация многомерных данных путём их проецирования на пространство меньшей размерности (чаще всего двумерное).\n",
|
||||
"\n",
|
||||
"Ключевые особенности:\n",
|
||||
" - Без учителя: не требует размеченных данных для обучения.\n",
|
||||
" - Топологическое упорядочивание: сохраняет пространственные отношения между точками данных — близкие входные векторы активируют соседние нейроны на карте.\n",
|
||||
" - Конкурентное обучение: в каждый момент времени «побеждает» только один нейрон (ближайший к входному вектору).\n",
|
||||
"\n",
|
||||
"Обучение сети Кохонена происходит итеративно, по одному примеру за раз.\n",
|
||||
" - Шаг 1. Инициализация. \n",
|
||||
"Веса всех нейронов инициализируются случайными значениями (обычно из того же распределения, что и входные данные).\n",
|
||||
" - Шаг 2. Выбор входного вектора. \n",
|
||||
"Из набора данных случайным образом выбирается один образец $x$ (пусть количество признаков равно $m$).\n",
|
||||
" - Шаг 3. Определение «нейрона‑победителя». \n",
|
||||
"Находится нейрон, вектор весов которого наиболее близок к входному вектору. Мера близости — обычно евклидово расстояние:\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"d(x, w_i) = \\sqrt{\\sum_{j=1}^{m} (x_j - w_{ij})^2}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
" - Шаг 4. Обновление весов. \n",
|
||||
"Вектор весов нейрона‑победителя (и, опционально, его соседей) подтягивается ближе к входному вектору:\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"w_i(t+1) = w_i(t) + \\eta(t) \\cdot (x(t) - w_i(t))\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"где $w_i$ — вектор весов $i$-го нейрона (кластера); $\\eta(t)$ — скорость обучения (learning rate) в момент времени $t$, которая определяет, насколько сильно будут скорректированы веса; $x(t)$ — текущий входной вектор.\n",
|
||||
"\n",
|
||||
" - Шаг 5. Уменьшение скорости обучения. \n",
|
||||
"На этом этапе скорость обучения $\\eta$ постепенно уменьшается с каждой эпохой. Это необходимо для стабилизации карты в конце обучения: на ранних этапах допускаются большие корректировки весов (чтобы быстро приблизиться к оптимальной конфигурации), а на поздних — только мелкие уточнения. Обновление скорости обучения происходит по следующему правилу:\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"\\eta(t+1) = \\eta(t) \\times \\text{decay}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"где $\\text{decay}$ — коэффициент затухания (гиперпараметр, обычно близкий к $1$, например $0{,}99$ или $0{,}95$).\n",
|
||||
"\n",
|
||||
" - Шаг 6. Повторение. \n",
|
||||
"Шаги 2–5 повторяются заданное число эпох или до сходимости (т.е. пока значения весов нейронов в карте практически не перестанут меняться от эпохи к эпохе — структура карты, таким образом, уже сформирована и отражает топологию входных данных).\n",
|
||||
"\n",
|
||||
"Преимущества сетей Кохонена:\n",
|
||||
" - простота реализации и интерпретации;\n",
|
||||
" - наглядная визуализация сложных данных;\n",
|
||||
" - устойчивость к шуму в данных;\n",
|
||||
" - сохранение топологических свойств исходного пространства.\n",
|
||||
"\n",
|
||||
"Недостатки:\n",
|
||||
" - чувствительность к инициализации весов;\n",
|
||||
" - необходимость ручного подбора числа кластеров;\n",
|
||||
" - относительно медленное обучение на больших наборах данных.\n",
|
||||
" - результат может зависеть от порядка предъявления данных (поэтому их необходимо перемешивать).\n",
|
||||
"\n",
|
||||
"Описанная выше сеть Кохонена реализована в классе `KohonenClustering`:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "JJtHNld8SOWL"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class KohonenClustering:\n",
|
||||
" def __init__(self, n_clusters, lr=0.1, decay=0.99):\n",
|
||||
" self.n_clusters = n_clusters\n",
|
||||
" self.lr = lr\n",
|
||||
" self.decay = decay\n",
|
||||
" self.cluster_weights = None\n",
|
||||
"\n",
|
||||
" def winner(self, x):\n",
|
||||
" \n",
|
||||
" # Вычисляем евклидово расстояние от входного вектора до каждого кластера\n",
|
||||
" distances = np.zeros((x.shape[0], self.n_clusters))\n",
|
||||
" for i, cluster_weight in enumerate(self.cluster_weights):\n",
|
||||
" distances[:, i] = np.sqrt(np.sum((x - cluster_weight) ** 2, axis=1))\n",
|
||||
" \n",
|
||||
" # Находим индексы нейронов с минимальным расстоянием (победителей)\n",
|
||||
" winner_idx = np.argmin(distances, axis=1)\n",
|
||||
" return winner_idx\n",
|
||||
"\n",
|
||||
" def fit(self, data, epochs=100):\n",
|
||||
"\n",
|
||||
" self.cluster_weights = np.random.randn(self.n_clusters, data.shape[1]).astype(np.float32)\n",
|
||||
" \n",
|
||||
" lr_history = []\n",
|
||||
" for epoch in range(epochs):\n",
|
||||
"\n",
|
||||
" # Перемешиваем индексы данных для случайного выбора векторов\n",
|
||||
" indices = np.random.permutation(data.shape[0])\n",
|
||||
" \n",
|
||||
" # Проходим по всем векторам в случайном порядке\n",
|
||||
" for i in indices:\n",
|
||||
" # Извлекаем один вектор\n",
|
||||
" x = data[i:i+1]\n",
|
||||
" \n",
|
||||
" # Определяем нейрон‑победитель для текущего входного вектора\n",
|
||||
" winner_idx = self.winner(x)\n",
|
||||
" \n",
|
||||
" # Обновляем веса победившего нейрона: подтягиваем их ближе к входному вектору\n",
|
||||
" for i, idx in enumerate(winner_idx):\n",
|
||||
" self.cluster_weights[idx] += self.lr * (x[i] - self.cluster_weights[idx])\n",
|
||||
"\n",
|
||||
" lr_history.append(self.lr)\n",
|
||||
"\n",
|
||||
" # Постепенно уменьшаем скорость обучения для стабилизации карты\n",
|
||||
" self.lr *= self.decay\n",
|
||||
"\n",
|
||||
" if (epoch + 1) % 5 == 0:\n",
|
||||
"\n",
|
||||
" clear_output(True)\n",
|
||||
" plt.plot(range(1, epoch+2), lr_history, label='Learning Rate')\n",
|
||||
" plt.title(f'Epoch: {epoch + 1}, Learning Rate: {lr_history[-1]:.6f}')\n",
|
||||
" plt.grid(True, alpha=0.3)\n",
|
||||
" plt.legend(loc='best')\n",
|
||||
" plt.show()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Загрузим данные ирисов для их анализа с помощью сети Кохонена:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "N7kdsjBEWy3P"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"iris_data = load_iris()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Значения четырёх входных признаков:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "1qmf6ZAxWy8A",
|
||||
"outputId": "b7eaeee4-39ea-4204-e6e7-f9b47a10f73f",
|
||||
"scrolled": false
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"X_iris_data = iris_data['data']\n",
|
||||
"print(X_iris_data[:5])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Названия признаков — длина и ширина чашелистика, длина и ширина лепестка:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "UDNslebrcXfK",
|
||||
"outputId": "9ece4206-94c9-436d-c6a2-d6bbf2495fa0"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"iris_data['feature_names']"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Значения выходного признака — метки классов (три сорта ирисов):"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "IF6_sIBtXjNI",
|
||||
"outputId": "c59b99c6-3c1d-4576-d88c-6b7c870a9428"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"y_iris_data = iris_data['target']\n",
|
||||
"print(y_iris_data)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Названия сортов ирисов:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "IWZwrWKaX2R8",
|
||||
"outputId": "59e3f58e-71a1-40e2-9410-8871c5b0b695"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"iris_names = iris_data['target_names']\n",
|
||||
"print(iris_names)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Поскольку при обучении сети Кохонена вычисляются евклидовы расстояния между входными данными и весами нейронов, входные данные рекомендуются отнормировать или отстандартизировать:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"X_means = X_iris_data.mean(axis=0)\n",
|
||||
"X_stds = X_iris_data.std(axis=0, ddof=1)\n",
|
||||
"\n",
|
||||
"X_iris_data_scaled = # Ваш код здесь"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Обучите модель `kohonen_iris` на нормированных (или стандартизированных) данных.\n",
|
||||
"\n",
|
||||
"Для этого подберите количество кластеров `n_clusters`, скорость обучения `lr`, шаг снижения скорости обучения `decay`. При неоходимости измените количество эпох `epochs`."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"kohonen_iris = KohonenClustering(\n",
|
||||
" n_clusters= # Ваш код здесь\n",
|
||||
" lr= # Ваш код здесь\n",
|
||||
" decay= # Ваш код здесь\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"kohonen_iris.fit(X_iris_data_scaled, epochs=100)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Получим метки кластеров — сопоставьте их с исходными метками классов:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "4gVxatZFYVCm",
|
||||
"outputId": "bfa24efd-eb30-4036-c01d-5e09aa8b931e"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"clusters_iris = kohonen_iris.winner(X_iris_data_scaled)\n",
|
||||
"print(clusters_iris)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Построим диаграмму рассеяния, например, для пары признаков — длины и ширины лепестка. Точки разметим по трём сортам ирисов:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/",
|
||||
"height": 450
|
||||
},
|
||||
"id": "B8vgAwpQd4Zh",
|
||||
"outputId": "ebf196cd-ea4e-4367-a88b-cbc22bb9a7c5"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"scatter = plt.scatter(X_iris_data[:, 2], X_iris_data[:, 3], c=y_iris_data)\n",
|
||||
"plt.xlabel('petal length (cm)')\n",
|
||||
"plt.ylabel('petal width (cm)')\n",
|
||||
"plt.grid(True, alpha=0.3)\n",
|
||||
"\n",
|
||||
"# Код для легенды\n",
|
||||
"handles, _ = scatter.legend_elements(prop='colors')\n",
|
||||
"plt.legend(handles, iris_names, loc='best', title='Classes')\n",
|
||||
"\n",
|
||||
"plt.show()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Построим такую же диаграмму, олнако точки в ней будут размечены по меткам кластеров: "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/",
|
||||
"height": 450
|
||||
},
|
||||
"id": "hWedmXtmeKXH",
|
||||
"outputId": "0c8b239e-b140-4cdc-d80f-238bc3038304"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"scatter = plt.scatter(X_iris_data[:, 2], X_iris_data[:, 3], c=clusters_iris)\n",
|
||||
"plt.xlabel('petal length (cm)')\n",
|
||||
"plt.ylabel('petal width (cm)')\n",
|
||||
"plt.grid(True, alpha=0.3)\n",
|
||||
"\n",
|
||||
"# Код для легенды\n",
|
||||
"handles, labels = scatter.legend_elements(prop='colors')\n",
|
||||
"plt.legend(handles, labels, loc='best', title='Clusters')\n",
|
||||
"\n",
|
||||
"plt.show()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "6Wlm1xrBYzuf"
|
||||
},
|
||||
"source": [
|
||||
"Поэкспериментируйте с количеством кластеров `n_clusters`. Проанализируйте варианты, когда:\n",
|
||||
" - количество кластеров совпадает с количеством сортов ирисов;\n",
|
||||
" - кластеров меньше сортов ирисов;\n",
|
||||
" - кластеров больше сортов ирисов."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 2. Данные скрытого слоя<a id=\"p_2\"></a>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Загрузим из файла `encoded_2d.npy` двумерные данные с выхода энкодера автоассоциативной сети из третьей лабораторной работы:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "B0OS99x8Dz9v",
|
||||
"outputId": "9b21ab60-5422-421f-e83b-64e378763bd7"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"encoded_2d = np.load('encoded_2d.npy')\n",
|
||||
"print(encoded_2d[:5])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Обучите модель `kohonen_2d` на этих данных. Количество кластеров пусть совпадает с количеством сортов минеральной воды (т.е. 5)."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "3TXtr9d6SZ9a"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"kohonen_2d = KohonenClustering(\n",
|
||||
" # Ваш код здесь\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"kohonen_2d.fit(encoded_2d, epochs=100)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "LOv1vQ1kWKKf"
|
||||
},
|
||||
"source": [
|
||||
"Получим метки кластеров:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "zm3DoRAEStuR"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"clusters_2d = kohonen_2d.winner(encoded_2d)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "arnxu4zcSzyk"
|
||||
},
|
||||
"source": [
|
||||
"Построим двухмерную диаграмму рассеяния:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/",
|
||||
"height": 430
|
||||
},
|
||||
"id": "KkToPCInQQ1J",
|
||||
"outputId": "418558e8-8c2a-4521-9ef1-6b25b971cff0"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"scatter = plt.scatter(x=encoded_2d[:, 0], y=encoded_2d[:, 1], c=clusters_2d, cmap='viridis')\n",
|
||||
"plt.grid(True, alpha=0.3)\n",
|
||||
"\n",
|
||||
"# Код для легенды\n",
|
||||
"handles, labels = scatter.legend_elements(prop='colors')\n",
|
||||
"plt.legend(handles, labels, loc='best', title='Clusters')\n",
|
||||
"\n",
|
||||
"plt.show()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Сравните диаграмму с соответствующим результатом из третьей лабораторной работы. "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Загрузите данные из остальных файлов (`encoded_3d.npy`, `encoded_2d_include.npy`, `encoded_3d_include.npy`) и также обучите на них по отдельному экземпляру сети Кохонена. Получите метки кластеров и постройте для каждого набора диаграммы рассеяния. Сравните их с соответствующими диаграммами из третьей лабораторной работы."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "QwJagpWTWMIb"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Ваш код здесь"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Ваш код здесь"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Литература:\n",
|
||||
"1. Бородкин А.А., Елисеев В.Л. Основы и применение искусственных нейронных сетей. Сборник лабораторных работ: методическое пособие. – М.: Издательский дом МЭИ, 2017.\n",
|
||||
"2. MachineLearning.ru — профессиональный информационно-аналитический ресурс, посвященный машинному обучению, распознаванию образов и интеллектуальному анализу данных: http://www.machinelearning.ru\n",
|
||||
"3. Modern State of Artificial Intelligence — Online Masters program at MIPT: https://girafe.ai/"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "w2UD2JKOWyrb"
|
||||
},
|
||||
"source": [
|
||||
" "
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"provenance": []
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.7.3"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 1
|
||||
}
|
||||
Ссылка в новой задаче
Block a user