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

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

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

Я выполнил некоторую предварительную обработку и выбрал 3 столбца для использования, open,low,high мы будем использовать это для прогнозирования нашего close .

Итак, давайте начнем с нашего проекта, давайте начнем с настройки нашего проекта, создав папку проекта и инициализировав проект узла.

mkdir regressionProblem

cd regressionProblem

npm start

npm install @king__somto/дикарь

Теперь мы инициализировали наш проект и установили нашу библиотеку.

Создадим новый файл index.js

touch index.js

Итак, вот наш полный код для нашей проблемы

Хорошо, теперь это наша модель, теперь давайте посмотрим на код блок за блоком.

const {Savage_model} =  require('@king__somto/savage')
const mod = new Savage_model()

Здесь мы импортируем нашу необходимую библиотеку и инициируем экземпляр нашего класса с именем mod.

const data = mod.loadDataFromCSV('./data/finance.csv',true)
data = mod.splitData(data,0.2)
const trainData = data[0]
const testData = data[1]

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

let x = []
let y = []
for (let i = 0; i < trainData.length; i++) {
   const element = trainData[i];
    y.push([element[4]])
    x.push(element.slice(1,4).map(function(item) {
    return parseInt(item, 10);
}))
}

Мы выполняем некоторую сортировку данных и извлекаем столбцы, необходимые для решения нашей проблемы.

x = savage_.standardize(x)
mod.dataClassesDistribution(y)
mod.addDense({
    'output':3,
    'input':3,
    'activation':'sigmoid'
})
mod.addDense({
   'output':3,
   'activation':'sigmoid'
})
mod.addDense({
    'output':4,
    'activation':'relu'
})
mod.addDense({
    'output':1,
    'activation':'linear'
})

Итак, это основная часть кода, здесь мы определяем нашу модель с помощью Savage Net Builder.

Наша сеть использует 3 слоя (1 скрытый, 1 вход и 1 выход) (3,3,3,4,1). И мы прикрепляем нашу функцию активации к каждому слою.

let itterations = 200000
let learningRate = 0.00000000002
mod.run(x,y,itterations,learningRate)

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

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

x = []
y = []
for (let i = 0; i < testData.length; i++) {
   const element = testData[i];
   y.push([element[4]])
   x.push(element.slice(1,4).map(function(item) {
   return parseInt(item, 10);
}))}
x = savage_.standardize(x)
const min = 0
const max = x.length
let rand = parseInt(math.random(min,max))
console.log('predicted:',mod.predict(x[rand]));
console.log('actual:',y[rand])
rand = parseInt(math.random(min,max))
console.log('predicted:',mod.predict(x[rand]));
console.log('actual:',y[rand])
rand = parseInt(math.random(min,max))
console.log('predicted:',mod.predict(x[rand]));
console.log('actual:',y[rand])

У вас должен быть вывод, похожий на

Itterration 190000
predicted: [ 16828.917628708543 ]
actual: [ '16379.049805' ]
predicted: [ 26028.79589729219 ]
actual: [ '25887.380859' ]
predicted: [ 24435.560712727893 ]
actual: [ '23848.419922' ]

Итак, теперь давайте подведем итоги того, что мы уже сделали.

  • Мы импортировали нашу библиотеку машинного обучения (savage.io)
  • Мы разработали нейронную сеть
  • Мы обучили нашу сеть
  • Мы проверили нашу NN с помощью некоторых тестовых данных.

На этом пока все, нашим следующим уроком будет задача класса с несколькими выходами, так что следите за обновлениями.