Использование Python для Машинного обучения. Линейная регрессия. Часть 1.

Итак, мы запускаем цикл статей о Машинном обучении. Примеры, которые будут приводиться могут быть скопированы и ими же можно воспользоваться не только для экспериментов.
Основные алгоритмы машинного обучения описаны здесь.
Мы начнем с решения простейшей задачи - построения линейной регрессии для предсказания. Далее, в каждой последующей статье будем усложнять задачу, пока не доберемся до сути понимания каждой проблемы.
В теории машинного обучения независимый набор значений называется Features (своййства, признаки, характерные черты), а то, что мы хотим предсказать называется Labels (метка, маркер).
У нас есть набор данных, состоящий из двух переменных (Feature, обозначаемая "x" и Label, обозначаемая "y"), и нам необходимо:
У нас есть набор данных, состоящий из двух переменных, и нам необходимо:
1. Найти зависимость одной переменной от другой
2. Построить линию регрессии для предсказания неизвестных значений.
3. Рассчитать насколько наша регрессия близка к исходным данным.
Итак начнем.
#Для начала загрузим необходимые библиотеки.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import patsy as pt
from sklearn.linear_model import LinearRegression

# загружаем файл с данными
df = pd.DataFrame(pd.read_csv("http://roman-kh.github.io/files/linear-models/simple1.csv"))
print(df.head(5))

1jpg
Это исходный набор данных.

# x - выберем в качестве свойства (feature) массив с исходными данными x1
x = df.iloc[:,1].values
print(x.shape)
print(type(x))
# обратите внимание, что массив размерности (306,), т.е массив одномерный,
# а нам для дальнейшей обработки нужен массив (306,1),
# поэтому производим его решейпинг (изменение формата)
x=np.reshape(x, (-1,1))
print(x.shape)
# В результате получился двумерный массив (306,1)

# y - таблица с исходными данными зависимой переменной (Label), значение которой мы хотим предсказать
# подход точно такой же
y = df.iloc[:,-1].values
y=np.reshape(y,(-1,1))
print(y.shape)

#Прогнозируем результаты тестовой выборки
#Разница между y_pred и y в том, что y_pred это прогнозные значения
#Теперь мы можем сравнить их с тестовыми значениями
y_pred = regressor.predict(x)
print(y_pred)

# Визуализация результатов тестового набор данных
# Выводит оригинальный набор данных
plt.scatter(x,y,color = 'red')
# Выводит линию регрессии рассчитаную через вызов  regressor.predict(x)
plt.plot(x, regressor.predict(x), color = 'blue')
plt.title('Заработная плата vs Опыт(Тренировочные данные)')
plt.xlabel('Feature')
plt.ylabel('Label')
plt.show()



2jpg
Результат - линия регрессии. Насколько она близка к реальным данным визуально, видно на рисунке, а на сколько она близка математически, посмотрим в следующей статье.  

Alexander Kalenik,
Senior Premier Field Engineer,
Microsoft Support,
PhD