Это третья статья из серии о NotebookJS. Часть 1 и Часть 2 относительно тривиальны по сравнению с этой, поскольку мы будем уделять больше внимания содержанию, а не сценарию построчно. Я настоятельно рекомендую прочитать хотя бы Часть 1, если вы чувствуете, что получаете небольшой список.

Используя NotebookJS, мы обучим нейронную сеть и посмотрим, сможем ли мы получить цену за дом, который хотим купить. Мы попробуем разные наборы данных и посмотрим, как они меняют наши результаты. Готовый?

Оглавление

  1. Подготовка данных
  2. Обучение NN
  3. Обучение NN путем увеличения размера набора данных

Настраивать

  1. Войдите в свою учетную запись Datazar.
  2. Перейдите в свой проект из предыдущих постов или создайте новый. Вы даже можете присоединиться к моему проекту!
  3. Создайте сценарий NotebookJS.
  4. Установите модуль NN. Документы о том, как это сделать здесь.

Модуль

На этом занятии мы будем использовать модуль NotebookJS. Модули - это просто библиотеки JavaScript, абстрактные для использования системой ноутбука. Этот конкретный модуль, NN, является абстракцией мозговой JS-библиотеки Хизер Артур.

Подготовка данных

Модуль принимает обучающий набор данных с полями ввода и вывода. Оба должны быть от 1 до 0. Входные и выходные параметры также могут быть самими объектами.

Мы будем использовать три набора данных, поэтому давайте объявим их вверху под заголовками документов.

Для первого набора данных входными данными является размер дома в квадратных футах, а выходными данными - цена дома.

Для второго набора данных входные и выходные значения совпадают, за исключением того, что в наборе данных больше записей.

Для третьего набора данных, который имеет такое же количество записей, как и второй, входными данными являются размер дома, а также количество ванных комнат в нем. Результат такой же; цена дома. Дополнительные данные помогут нам получить лучшую цену, так как мы также учитываем количество ванных комнат в каждом доме.

Обучение нейронной сети

Пришло время обучить нейронную сеть. Скрипт можно найти здесь. Нажмите кнопку Использовать файл, чтобы вы могли редактировать его по мере продвижения.

Посмотрим, что мы получим. Мы собираемся получить цену дома на основе данных обучения и параметра, который мы дали сети (размер = 0,002). Давайте воспользуемся функцией nb.print для просмотра вывода:

Мы получили свою цену! 42 639 долл. США

Поскольку мы сохранили значения во время обучения сети (simpleNetTrain1), мы можем отобразить ошибку и количество итераций, которые потребовались.

Теперь давайте попробуем то же самое, используя большой набор данных.

У нас другая цена! 31 056 долл. США

Имея больше точек данных, мы можем приближаться к желаемой цене. Но давайте сделаем еще один шаг и попробуем обучить сеть другим набором входных данных - количеством ванных комнат в каждом доме.

Обучение NN путем увеличения размера набора данных

Итак, мы увидели разницу, когда использовали наборы данных разных размеров. Теперь попробуем сделать это одновременно. Мы обучим нейронную сеть по мере увеличения размера набора данных и построим график зависимости цены от размера набора данных. Мы будем использовать набор данных с количеством ванных комнат (самый большой набор данных).

var loopOutput=[];
for(let i=0;i< biggestDataset.length;i++) {
    let loopNet=new nb.nn.NeuralNetwork();
    let loopTrain=loopNet.train(nb.drop(biggestDataset,-i));
    output=loopNet.run({"size": 0.002,"bath":0.3});
    loopOutput[i]={'loops':i,'price':Math.round(output.price*100000),'error':loopTrain.error*100,'iterations':loopTrain.iterations};
}
nb.lineplot(loopOutput,'loops','price','dataset size','price $');

Цена нашего дома снижается по мере того, как мы добавляем все больше и больше точек данных на дома в одном и том же районе, и последний результат цикла, кажется, составляет около 30 000 долларов! Здесь вводятся как размер дома, так и количество ванных комнат. Что происходит, когда мы добавляем новые атрибуты?

Вывод

Это был очень простой пример того, как использовать нейронную сеть в NotebookJS с помощью модуля. Надеюсь, вам понравилось читать этот текст, так же как и мне.

Этот пример основан на Интерактивном руководстве по нейронным сетям Дж. Алламара; Я настоятельно рекомендую прочитать все это.

Скопируйте мой сценарий NotebookJS и повторите этот пример. Если у вас есть какие-либо вопросы, напишите мне по электронной почте на aman [at] datazar.com.