Методические указания к лр. 3
install.packages("MASS")
library(MASS)
#загрузка исходных данных (набора Boston) из пакета MASS
Параметр |
Значение |
crim |
уровень преступности на душу населения по городам |
zn
|
доля земли под жилую застройку, (под участки площадью более 25000 кв. футов) |
indus |
доля акров, не связанных с розничной торговлей, на город |
chas |
Фиктивная переменная Charles River (= 1, если участок граничит с рекой; 0 в противном случае) |
nox |
концентрация оксидов азота (частей на 10 млн) |
rm |
среднее количество комнат в доме |
age |
доля занятых владельцами единиц, построенных до 1940 года |
dis
|
средневзвешенное расстояние до пяти бостонских центров занятости |
rad |
индекс доступности радиальных автомобильных дорог |
tax
|
полная ставка налога на имущество за каждые 10 000 долларов стоимости |
ptratio |
соотношение учеников и учителей по городам |
black |
|
lstat |
более низкий статус населения (в процентах) |
medv
|
медианная стоимость домов, занимаемых владельцами, составляет 1000 долларов |
data(Boston)
#Вывод первых 5 строк набора Boston
head(Boston)
#Вывод признака indus перед нормализацией
hist(Boston$indus)
#масштабирование (нормализация) данных, необходимая для исключения
#преобладающего влияния какого-либо параметра на результат прогноза
#метод масштабирования – min-max Normalization
Boston$indus<- (Boston$indus - min(Boston$indus)) / (max(Boston$indus) - min(Boston$indus))
Рис. 1. Пример масштабирования параметра indus обучающей выборки |
#выполняем
масштабирование остальных параметров обучающей выборки (кроме chas
)
hist(Boston$indus)
#делим данные на обучающую и тестовую выборки
set.seed(222)
inp <- sample(2, nrow(Boston), replace = TRUE, prob = c(0.7, 0.3))
train.boston <- Boston[inp==1, ]
head(train.boston)
test.boston <- Boston[inp==2, ]
head(test.boston)
#настройка нейронной
сети
install.packages("neuralnet")
library(neuralnet)
set.seed(333)
#паремтры функции neuralnet
- formula - символьное описание модели, которая должна быть установлена. По умолчанию не указано.
- data - фрейм данных, содержащий переменные, указанные в формуле. По умолчанию не указано.
- hidden - вектор, определяющий количество скрытых слоев и скрытых нейронов в каждом слое. Например, вектор (3,2,1) создает нейронную сеть с тремя скрытыми слоями, первый
из которых состоит из трех, второй - из двух, а третий - из одного скрытого нейрона. По умолчанию:1.
- threshold - целое число, задающее порог для частных производных функции ошибки в качестве критерия остановки. По умолчанию: 0,01.
- rep - количество повторений в тренировочном процессе. По умолчанию: 1.
- startweights - вектор, содержащий заданные начальные значения для весов. По умолчанию: случайные числа, полученные из стандартного нормального распределения
algorithm - алгоритм - строка, содержащая тип алгоритма. Возможные значения: "backprop", "rprop+", "rprop-", "sag" или "slr". "backprop" относится к традиционному обратному распространению, "rprop+" и "rprop-" относятся к устойчивому обратному распространению с отслеживанием веса и без него, а "sag" и "slr" относятся к модифицированному глобально конвергентному алгоритму (grprop). "sag" и "slr" определяют скорость обучения , которая изменяется в соответствии со всеми остальными параметрами. "sag" относится к наименьшей абсолютной производной, "slr" - к наименьшей скорости обучения. По умолчанию: "rprop+"
- err.fct - дифференцируемая функция обнаружения ошибок. Можно использовать строки "sse" и "ce", которые относятся к "сумме квадратов ошибок" и "перекрестной энтропии’. По умолчанию: "sse"
- act.fct - дифференцируемая функция активации. Строки "logistic" и "tanh" возможны для логистической функции и касательной гиперболы. По умолчанию: "logistic"
- linear.output - логический. Если act.fct не следует применять к выходным нейронам, значение linear.output должно быть ИСТИННЫМ. По умолчанию: TRUE
- likelihood - вероятность, логическая. Если функция ошибки равна отрицательной логарифмической функции правдоподобия, вероятность должна быть ИСТИННОЙ. Затем будут рассчитаны информационный критерий Акайке (AIC, Akaike, 1973) и информационный критерий Байеса (BIC, Schwarz, 1978). По умолчанию: FALSE
- exclude - вектор или матрица, указывающая веса, которые должны быть исключены из обучения. Матрица с n строками и тремя столбцами исключит n весов, где первый столбец указывает уровень, второй столбец - входной нейрон веса, а третий нейрон - выходной нейрон веса. Если задано в виде вектора, то должна быть известна точная нумерация. Нумерацию можно проверить, используя предоставленный график или сохраненные начальные веса. По умолчанию: NULL
- constant.weights - вектор, определяющий значения весов, которые исключаются из обучения и рассматриваются как фиксированные. По умолчанию: NULL
n <-neuralnet(chas~crim
+ zn + indus + nox + rm + age + dis + rad + tax + ptratio + black + lstat +
medv, data = train.boston,
hidden = 15,
#количество скрытых нейронов (вершин) в каждом слое
err.fct = "ce",
linear.output = FALSE,
lifesign = 'full',
rep = 2,
#количество повторений для обучения нейронной сети
algorithm = "rprop+", stepmax = 100000)
Рис. 2. Результаты первой и второй итераций
# визуализация построенной нейронной сети (рис. 2), черные линии – веса,
# синие – смещения
Первая итерация дает ошибку (рис. 2): 0.06541, вторая – 0.01633. Для дальнейших вычислений будем использовать вторую итерацию.
plot(n, rep = 2)# может быть здесь rep=2
Рис. 3. Визуализация построенной нейронной сети |
# генерация ошибки нейронной сети по весам между входом, скрытыми слоями и выходом
n$result.matrix
Рис. 4. Фрагмент результатов генерации ошибки
# функция subset используется для исключения зависимой переменной из тестовой выборки
# (рис. 5)
test <- subset(test.boston, select = c("crim","zn","indus","nox","rm","age","dis","rad","tax","ptratio","black","lstat","medv"))
head (test)
#
Рис. 5. Результат работы функции subset
#Функция compute создает переменную прогноза
n.results <- compute (n, test)
# переменная result содержит сводную таблицу прогнозируемых и фактических результатов
results <- data.frame (actual = test.boston $ chas, prediction = n.results $ net.result)
results
Рис. 6. Фрагмент сводной таблицы прогнозируемых и фактических результатов
# составление матрицы путаницы
# функция sapply округляет результаты
roundres<-sapply(results,round,digits=0)
roundres1 =data.frame(roundres)
attach(roundres1)
#вывод матрицы путаницы*(см. примечание) (рис. 7)
table(actual,prediction)
Рис. 7. Фрагмент сводной таблицы прогнозируемых и фактических результатов
Метрика accuracy составляет 0, 89 или 89%.
Этот показатель может быть улучшен ручным подбором количества скрытых слоев и количества нейронов в каждом из них.
В таблице 6.7 приведены метрики проведенной классификации:
Таблица 1. Метрики проведенной классификации |
Метрики |
accuracy |
error-rate |
TP rate |
FP rate (recall) |
TN rate |
precision |
F-measure |
|
0.89 |
0.11 |
0.95 |
0.85 |
0.15 |
0.92 |
0.88 |
#Еще один вариант вывода матрицы путаницы
#Устанавливаем библиотеку caret
install.packages("caret")
library(caret)
confmatr <- table(prediction, actual)
confusionMatrix(confmatr)
*1. Матрица неточностей (матрица путаницы) (confusion matrix) – таблица, в которой строки являются реально существующие объекты некоторого класса. Столбцы таблицы – прогнозируемые объекты некоторого класса. На основе матрицы может быть вычислена метрика accuracy. Например,
Имеется 12 изображений автомобилей. Из них 7 – обычные автомобили, 5 – болиды. Классификатор правильно определил 5 обычных автомобилей из 7, а два были ошибочно определены, как болиды. Из 5 болидов классификатор верно распознал 3 болида и 2 были распознан, как обычный автомобиль. В матрице неточности все примеры, принадлежащие одному классу из двух, считаются положительными (positive), а все пример, принадлежащие другому классу – отрицательными (negative). Значения за пределами диагонали рассматриваются, как ошибки. В примере 2 обычных автомобиля и 2 болида были неправильно распознаны. То есть, из 12 изображений 4 изображения распознаны с ошибками, а 8 – правильно.
Таблица 6.1. Матрица неточностей |
Фактический класс
Прогнозируемый класс |
Обычный автомобиль |
Болид |
Обычный автомобиль |
5 (TP) |
2 (FN) |
Болид |
2 (FP) |
3 (TN) |
2. Accuracy (точность) – метрика бинарной классификации - доля правильных ответов модели. Измеряется отношением числа правильных ответов модели, к числу всех объектов. Эта метрика измеряет количество верно классифицированных объектов относительно общего количества всех объектов. Метрику не следует использовать для несбалансированных классов, (большое количество экземпляров одного класса и небольшое другого класса)
где
- TP - количество положительных примеров, определенных правильно
- TN - количество отрицательных примеров, определенных правильно
- FP - количество положительных примеров, определенных ошибочно
- FN - количество отрицательных примеров, определенных ошибочно
Например, из 100 писем, не являющихся спамом, 90 классификатор определил верно ( ), и из 10 спам-писем, 5 классификатор определил верно
3. TP rate (чувствительность) или recall (эффективность) – процент верно классифицированных объектов рассматриваемого класса:
4. FP rate – количество объектов, другого класса, ошибочно распознанных, как объекты рассматриваемого класса:
5. TN rate (специфичность (specificity)) – количество объектов, другого класса, ошибочно распознанных, как объекты рассматриваемого класса:
6. Precision (точность) - процент верно классифицированных объектов, отнесенных алгоритмом к рассматриваемому классу:
7. Error rate (misclassification error) - ошибка неправильной классификации:
8. Среднее гармоническое precision и recall:
9. Корень из среднеквадратичной ошибки (RMSE) (Root Меаn Squared Error) (RMSD) или среднеквадратичное отклонение (Root Меаn Squared Deviation) - метрика регрессии, в которой каждая из ошибок возводится в квадрат, что усиливает значимость такой ошибки. В результате – можно избежать крупных ошибок.
,

