Это простое руководство по созданию простой модели машинного обучения с использованием набора данных Boston и линейной регрессии в R. Итак, давайте начнем!

1. Загрузка библиотек

Мы будем использовать следующие библиотеки:

library(mlbench)  # Contains the Boston Housing Dataset
library(dplyr)    # Basic manipulation functions
library(ggplot2)  # Graphs and plots
library(reshape2) # To reshape data
library(caret)    # Creating train test sets

2. Загрузка набора данных

Функция data() используется для загрузки набора данных, доступного в загруженных библиотеках. Если вы вызовете data() без аргументов, вы получите список всех доступных наборов данных.

data() # View all available datasets
# Load the Boston Housing dataset in the object named 
# 'BostonHousing'
data(“BostonHousing”)
# For simplicity, lets call it 'housing'
housing = BostonHousing

3. Понимание структуры

Функция str() предоставляет подробную информацию о типах переменных (атрибутов). Необходимо, чтобы вы понимали значение этих атрибутов. Подробнее о значении атрибутов можно узнать здесь.

> str(housing)
'data.frame': 506 obs. of  14 variables:
 $ crim   : num  0.00632 0.02731 0.02729 0.03237 0.06905 ...
 $ zn     : num  18 0 0 0 0 0 12.5 12.5 12.5 12.5 ...
 $ indus  : num  2.31 7.07 7.07 2.18 2.18 2.18 7.87 7.87 7.87 7.87 ...
.
.

4. Заговор

График плотности медианного значения цен на жилье

ggplot(housing, aes(x = medv)) +
 stat_density() +
 labs(x = “Median Value x $1000”, y = “Density”, title = “Density Plot of Median Value House Price”) +
 theme_minimal()

График плотности дает распределение числового атрибута. Мы видим, что большинство домов находятся в ценовом диапазоне от 20 000 до 25 000 долларов.

Атрибуты и средняя цена дома

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

selected.attributes = select(housing, c(crim, rm, age, rad, tax, lstat, medv))
melted = melt(selected.attributes,id="medv")
ggplot(melted, aes(x = value, y = medv, colour = variable)) +
  geom_point(alpha = 0.7) +
  geom_smooth(color='black') +
  facet_wrap(~variable, scales = "free", ncol = 2) +  # Divide the plots based on variable in 2 columns with a free scale that adjusts
  labs(x = "Variable Value", y = "Median House Price x $1000") +
  theme_minimal()

Здесь мы создаем расплавленную версию данных. Мы выберем () несколько атрибутов из «жилья» и расплавим () их. Функция Melt() принимает 2 аргумента: один — это данные, второй — «id». Он берет атрибут «id», повторяет его для выбранных атрибутов и создает связанную переменную, столбцы значений.

Я предлагаю вам просмотреть «расплавленный» фрейм данных, чтобы получить представление о том, что делает Melt().

ggplot() создает график с указанными атрибутами x и y. geom_point() используется для построения данных в виде точек. «альфа» указывает прозрачность точек. geom_smooth() строит черную кривую, которую вы можете видеть на графике ниже. facet_wrap() используется для разделения графиков на несколько графиков в 2 столбцах на основе переменной. labs() используется для маркировки графика.

5. Создание наборов обучающих тестов

set.seed(387)
train.idx = createDataPartition(y = housing$medv, p = 0.75, list = FALSE)
test.idx =createDataPartition(y=housing$medv, p=0.25,list=FALSE)
train = housing[train.idx, ]
test = housing[test.idx, ]

createDataPartition() возвращает случайные номера индексов для выбора набора поездов и тестов. Строки, соответствующие этим индексам, используются для получения набора «поезд» и «тест».

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

model = lm( medv ~ crim + rm + tax + lstat, data = train)

Функция lm() создает линейную модель. В первом аргументе переменные слева от «~» — это целевая переменная, а справа — независимые переменные.

summary(model) # Obtain coefficients, Residuals and statistics
rsquare = summary(model)$r.squared # R-squared value

Я получил значение r-квадрата 0,699.

7. Прогнозирование по модели и построение графика

predictions = predict(model, newdata = test)
predicted.vs.original = data.frame(predicted = predictions, original = test$medv)   # Create a new data frame
ggplot(predicted.vs.original, aes(x = predicted, y = original)) +
 geom_point() +
 geom_smooth(color='blue') +
 labs(x = “Predicted Values”, y = “Original Values”, title = “Predicted vs. Original Values”) +
 theme_minimal()

Здесь мы создаем фрейм данных, который содержит исходные и предсказанные значения, и строим график.

8. Заключение

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

Спасибо за чтение!