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

Как выполнить линейную регрессию с помощью TensorFlow.

!pip install tensorflow
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

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

# Generate random data for dependent and independent variables
X = np.linspace(0, 10, 100)
Y = 2*X + np.random.randn(*X.shape)*0.5

Мы можем визуализировать наши данные с помощью пакета matplotlib.

# Plot the data
plt.scatter(X, Y)
plt.xlabel('Independent variable')
plt.ylabel('Dependent variable')
plt.title('Scatter plot of sample data')
plt.show()

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

Давайте создадим модель TensorFlow для линейной регрессии. Мы определим две переменные TensorFlow, W и b, которые представляют наклон и точку пересечения прямой линии соответственно. Мы также определим два заполнителя TensorFlow, X_placeholder и Y_placeholder, которые будут содержать входные данные и выходные данные соответственно.

# Define TensorFlow variables and placeholders
W = tf.Variable(0.0, name='slope')
b = tf.Variable(0.0, name='intercept')
X_placeholder = tf.placeholder(tf.float32, name='X')
Y_placeholder = tf.placeholder(tf.float32, name='Y')

Далее мы определим модель TensorFlow, используя уравнение Y_predicted = W*X + b. Это уравнение представляет собой линейную зависимость между зависимой и независимой переменными. Мы будем использовать функции tf.add() и tf.multiply() для вычисления предсказанных значений зависимой переменной.

# Define TensorFlow model
Y_predicted = tf.add(tf.multiply(W, X_placeholder), b)

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

# Define loss function
loss = tf.reduce_mean(tf.square(Y_predicted - Y_placeholder))

Мы будем использовать алгоритм градиентного спуска, чтобы минимизировать функцию потерь и оптимизировать значения переменных TensorFlow. Мы установим скорость обучения на 0,01 и количество итераций на 1000.

# Define optimizer
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(loss)

# Initialize TensorFlow variables
init = tf.global_variables_initializer()

# Start TensorFlow session
with tf.Session() as sess:
    sess.run(init)
    
    # Train the model for 1000 iterations
    for i in range(1000):
        _, l = sess.run([optimizer, loss], feed_dict={X_placeholder: X, Y_placeholder: Y})
        
        if i % 100 == 0:
            print('Iteration %d: Loss = %f' % (i, l))
    
    # Get the optimized values of the TensorFlow variables
    slope, intercept = sess.run([W, b])