2016-12-24 3 views
1

Я использую adabag R-пакета, чтобы подгонять деревья с увеличенным (большим) набором данных (140 наблюдений с 3 845 предикторами).различные значения путем установки увеличенного дерева дважды

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

Функция, которая возвращает точность с учетом прогнозируемых значений и значений истинных значений теста.

err<-function(pred_d, test_d) 
{ 
    abs.acc<-sum(pred_d==test_d) 
    rel.acc<-abs.acc/length(test_d) 

    v<-c(abs.acc,rel.acc) 

    return(v) 
} 

новый Edit (9.1.2017): важный следующий вопрос выше контексте.

Насколько я могу видеть, я не использую никаких «объектов случайности псевдо» (например, генерации случайных чисел и т.д.) в моем коде, потому что я в основном подходят деревья (с помощью г-пакета rpart) и росту деревьев (с использованием r-пакета adabag) в большой набор данных. Можете ли вы объяснить мне, где «псевдослучайность» входит, когда я выполняю свой код?

Редактировать 1: Подобное явление происходит и с деревом (с использованием R-пакета rpart).

Редактировать 2: Подобное явление не происходило с деревьями (с использованием rpart) на наборе диафрагмы данных.

+0

я думаю, что вы должны использовать 'set.seed' для того, чтобы получить те же результаты. –

+0

Да, нет причин, по которым вам следует ожидать получения тех же результатов, если вы не установили свое семя. –

+0

@ChirayuChamoli К сожалению, я не знаком с этой функцией. Могу ли я разместить его в любом месте исполняемого кода? Какое значение следует задать (например, set.seed (1))? – bjn

ответ

1

Нет причин, по которым вы должны ожидать получения тех же результатов, если вы не установили свое семя (с set.seed()).

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

Это вездесущее в статистике; он влияет на все вероятностные модели и процессы на всех языках.

Обратите внимание, что в случае информационной безопасности важно иметь (псевдо) случайное семя, которое не может быть легко угадано атаками грубой силы, потому что (в двух словах) знание значения затравки, используемого внутри программы безопасности, путь для его взлома. В науке и статистике все наоборот: вы и все, кому вы делитесь своим кодом/исследованиями, должны знать семена, чтобы обеспечить воспроизводимость.

https://en.wikipedia.org/wiki/Random_seed

http://www.grasshopper3d.com/forum/topics/what-are-random-seed-values

+0

Спасибо, что он многое разъясняет. Только для того, чтобы быть полностью уверенным (поскольку от этого зависит большая работа), если другой парень на другом компьютере выполняет тот же код с тем же начальным значением (например, set.seed (1)), то он получает те же результаты, что и я делать? – bjn

+0

да, это так. –

+0

После некоторого размышления, для меня неясно, где я использую псевдослучайность в моем коде. По сути, я тренирую два метода, увеличивая деревья с помощью adabag и деревьев, используя rpart, на основе некоторого набора данных. Где я использую псевдослучайность? – bjn