Начало работы с TensorFlow: линейная регрессия

машинное обучение TensorFlow

 

TensorFlow также является платформой машинного обучения, с которой знакомы многие программисты. Она была открыта в 2014 году и имеет активное сообщество. Несколько дней назад на конференции разработчиков TensorFlow также был анонсирован TensorFlow для JS и Swift. Воспользуйтесь этой возможностью, чтобы написать вводную статью. учебник для TensorFlow, И некоторые знания, необходимые для начала работы с машинным обучением. На этот раз, начиная с самой простой линейной регрессии, в этой статье будет выполняться линейная регрессия для набора данных и вычисляться выражение.

Описание проблемы: линейная регрессия

Текущая идея регрессии не сложна Основная идея линейной регрессии состоит в том, чтобы выразить кучу данных с помощью линейных аналитических выражений, то есть линейной функции. Функция первого порядка — это то, что все учат в средней школе: y = k*x + b, где k — наклон, а b — длина пересечения. Через это выражение, учитывая значение x, будет соответствующее ему значение y. Многие явления в реальной жизни также могут быть представлены этой моделью.Вот пример, размеры и цены домов.Допустим, мы получаем набор таблиц размеров и цен домов и рисуем его.

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

По координатам заданной точки подгоняется прямая, а аналитическая формула этой прямой и есть то, что нужно делать линейной регрессии. Для удобства понимания я переписываю y = k*x + b как y = w * x + b, где w представляет собой вес, а b представляет собой смещение. Затем введите серию баллов, программа вычислит вес и смещение является целью на этот раз.

Набор данных прочитан

Во-первых, чтобы прочитать набор данных. Я заранее сгенерировал несколько точек в excel. Первый столбец представляет собой абсциссу, а второй столбец представляет собой ординату. Из нарисованного графика рассеяния эта серия точек полностью линейно распределена. Затем я буду сделать линейную регрессию по этим точкам.

Сначала прочитайте файл CSV с помощью numpy и сохраните первый и второй столбцы в два массива.

import tensorflow as tf
import numpy as np

my_data = np.genfromtxt('dataset.csv', delimiter=',', dtype=float)
x_data = np.array(my_data[:,0])
y_data = np.array(my_data[:,1])

print(x_data)
print(y_data)

Запустив программу, выводятся x_data и y_data

 

Построение модели

Следующим шагом является построение модели.Конечно, эта проблема является линейной моделью.Во-первых, объявите, что переменная веса имеет значение от -1 до 1, переменная смещения по умолчанию равна 0, а выражениеy = weights * x_data + biasesЭто модель.

weights = tf.Variable(tf.random_uniform([1], -1,0, 1.0))
biases = tf.Variable(tf.zeros([1]))

y = weights*x_data + biases

 

Вычислительная ошибка: среднеквадратическая ошибка

После того, как модель указана, TensorFlow продолжит генерировать веса и смещения после обучения, но есть тысячи весов и смещений Как мы можем найти точки, которые лучше всего соответствуют точкам в наборе данных? В следующем наборе графиков есть три кривые, каждая с наклоном и точкой пересечения, и на графике первая кривая лучше всего соответствует этим точкам. Однако как это выразить математически? Это приведет к квадратичным потерям,потеря — это числовое значение, которое представляет собой штраф за плохие прогнозы..

На рисунке ниже точка y является исходной координатой (observation), y' - прогнозируемая точка (prediction), красная стрелка – потери (Loss)

Формула квадрата потерь:(у - у') ^ 2

Чаще будет использоватьСреднеквадратическая ошибка (MSE)Чтобы рассчитать потери, необходимо рассчитать квадрат ошибки всех точек выборки, а затем взять среднее значение.

MSE хорошо представлена ​​в TensorFlow

loss = tf.reduce_mean(tf.square(y-y_data))

 

Распространение ошибок: градиентный спуск

Итак, теперь, когда потери рассчитаны, вы должны найти способ уменьшить потери.На каждой итерации вес и смещение нового прогноза корректируются с учетом входящих потерь. Этот процесс звучит абстрактно, но все играли в игру угадывания цены. Вы угадываете цену вещи, и я отвечаю: «высокая» или «низкая», чтобы дать вам обратную связь, и вы можете использовать мою обратную связь, чтобы дать вам отзыв о новой Предполагаемая цена корректируется, чтобы угадать правильную цену Это основная идея метода градиентного спуска.

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

Код TensorFlow легко реализовать.В следующем коде объявляется GradientDescentOptimizer со скоростью обучения 0,5.

optimizer = tf.train.GradientDescentOptimizer(0.5)

 

тренироваться

После этого можно приступать к обучению.Сначала вызовите функцию global_variables_initializer() для инициализации всех тензорных переменных, затем создайте новую сессию, а затем запустите итерацию 201 раз, выводя значения веса и смещения каждые 20 итераций слова.

optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)

init = tf.global_variables_initializer() 

sess = tf.Session()
sess.run(init)         

for step in range(201):
    sess.run(train)
    if step % 20 == 0:
        print(step, 'weight: ',sess.run(weights), ' bias: ', sess.run(biases))

После запуска можно обнаружить, что результат сходится, окончательный результат веса составляет около 0,4, а окончательный результат смещения равен 2,999.

 

На самом деле это выражение, которое я указал в Excel в начале, которое доказывает, что линейная регрессия работает, и TensorFlow вычисляет правильные значения W и B.

 

Эта статья была впервые опубликована на Miketech.it, автор Чжоу Иган, пожалуйста, не перепечатывайте без разрешения.

 

 

 

 

награда