x <- c("08:46", "08:51", "08:56", "09:01", "09:06", "09:11", "09:16", "09:21", "09:26", "09:31") library(lubridate) x <- parse_date_time(x, orders="H!:M!") - minutes(1) x <- format(x, "%H:%M") x
mytarmail, 16.10.2016 16:04
Здравствуйте! Есть алгоритм dtw и соответствующие пакеты "dtw" и "dtwclust" , суть алгоритма в том что он может сравнивать два ВР на схожесть даже если они разной длинны, ну и еще некоторые задачи с помощью его решают...
Но как с ним работают в контексте маш. обуч. ?? вот решил я обучить допустим нейросеть вместе с dtw , но как это делается вообще? нарезать разные куски ВР и потом их кластеризировать dtw? или когда уже сеть обучилась новые данные которые поступают в сеть подавать разными кусками через dtw?
Поясните пожалуйста как это все делается? а то информации про это я не нашел, на русском точно нет
PS2004R, 16.10.2016 18:09
(mytarmail @ 16.10.2016 16:04)
Поясните пожалуйста как это все делается? а то информации про это я не нашел, на русском точно нет
Да навалом информации. Всё методы ML которые используют матрицу на выходе dist() подходят.
В чем разница использовать сами случаи выборки и результат dist() на них... ну во втором случае в чистом виде задача распознавание образов получается -- есть некий граф, вершины которого по свойствам ребер надо раскрасить, задача с полным перебором при решении с которой сражаются всякими эвристиками.
ПолинаШ, 17.10.2016 18:02
Вот столкнулась с парадоксом. Решаю задачу с большим числом переборов и несколькими вызываемыми друг из друга функциями. Результаты (очень небольшая часть переборов) хочу помещать по мере расчетов в глобально объявленный list. Но столкнулся с тем, что, если добавление в list вести в теле какой-нибудь функции, то туда ничего не добавляется. Как-то так:
Sklad <- list() for (x in BitMask) { if ((sum(x==vec_neg)==0) & ((countK = sum(x==vec_pos))>= minNum)) { Sklad[[length(Sklad)+1]] <- list(countK=countK, ColCom=ColCom, Bits=x, RowList = which(vec_pos %in% x)) } } Sklad
[[1]] [[1]]$countK [1] 4
[[1]]$ColCom [1] "x2" "x4" "x7"
[[1]]$Bits [1] "111"
[[1]]$RowList [1] 5 6 7 8
Но, если фрагмент с for поместить в тело какой-нибудь функции, то опять получаем пустой list. Как тут быть? Обходиться совсем без функций или помещать результаты в таблицу - некошерно. Создавать список с lapply() и потом урезать его на 99% - варварство...
Добрый день! Есть таблица значений: a,b,c,... В итоге нужно получить матрицу, на пересечении строк и столбцов которой будет стоять разница элементов таблицы. Т.е., столбец 1: a-a, a-b, a-c, ...столбец 2: b-a, b-b, b-c,... и т.д. Получится зеркальная матрица, по диагонали у которой будут нули. Проблема в том, что хотя я и написал цикл, высчитывающий разницу между элементами таблицы, а вот в матрицу их загнать у меня не выходит. Сам код: n<-length (istok$Price) for (i in 1:n) { for (k in 1:n) { print (matrix(istok$Price[[i]]-istok$Price[[k]], n, n)) } } То есть, я так понимаю, при вычислении разностей выводится последовательность вычислений, а не вектор. Подскажите, как сделать чтобы все результаты загнать в один вектор а потом из него построить матрицу? Заранее спасибо.
Спасибо! Язык учу без месяца неделю, и под рукой спросить не у кого...
PS2004R, 20.10.2016 11:27
(massachusets @ 20.10.2016 11:16)
Язык учу без месяца неделю, и под рукой спросить не у кого...
Обязательно прочитайте-просмотрите список функций {base} по ссылке из предыдущего сообщения. Если всерьез занялись R 80-90% они обязательно понадобиться.
Фактически все эти функции введены исходя из практики написания кода в R, и представляют из себя типовые "кубики", которые писать на самом R по каким то соображениям не удобно.
mytarmail, 02.11.2016 15:42
Здравствуйте! Не знаю как решить такую задачку чтобы было быстро и просто, и самое главное производительно
на самом деле колонок в соти раз больше, это просто для примера
В данных у нас колонки с кластерами с диапазоном от 1 до 30 каждый и последняя колонка с целевой которая может иметь значения 0 или 1
1) не учитывая target.label нужно найти такие строчки которые повторяются не менее 10 раз в всей выборке 2) в каждой из найденных одинаковых групок которые повторялись, количество "1" в target.label должно превышать 70% по отношению к "0"
3) поиск этих одинаковых строчек идет по всем возможным комбинациям из колонок типа cluster1 и cluster2 cluster1 и cluster5 и cluster2 cluster3 и cluster1 cluster5 и cluster2............
4) найденные строчки которые прошли этапы 1) и 2) записываются в лист в виде названий кластеров и их цифровых значений
в сколько раз единичек было больше чем нулей в target.label
CODE
sum.duplicate.finded 33
сколько именно этих одинаковых строчек было найдено в истории
plantago, 03.11.2016 01:34
Я бы просто стал писать код, пункт за пунктом. Ну а спрашивать стал бы, приводя готовый код в пример
mytarmail, 03.11.2016 10:59
(plantago @ 03.11.2016 02:34)
Я бы просто стал писать код, пункт за пунктом. Ну а спрашивать стал бы, приводя готовый код в пример
Был бы готовый код, о чем тогда спрашивать?
Ну да ладно я вас понял, просто я хотел посмотреть как бы это делали профессионалы так как быстродействие тут очень важно, или может даже бы подсказали есть ли какой то пакет в котором это все уже сделано...
для меня на данном этапе не понятны только две вещи
1) как из данных вычленить группы строк которые повторялись от 10 раз и более 2) как из этих найденных групп вычленить такие группы в которых количество единичек в target.label превышает количество нулей на 70%
поможете?
Я пытаюсь создать некий глубокий классификатор который пытается объяснить не всю целевую как это делаться стандартно.. Классификатор поступает умно, он обучается только на той части целевой которую он действительно может объяснить с сильным стат. перевесом, а это по сути избавление от переобучения
bf109xxl, 09.11.2016 16:49
(mytarmail @ 03.11.2016 09:59)
1) как из данных вычленить группы строк которые повторялись от 10 раз и более
Ну, сделать фрейм данных из вышеприведенного, думаю, труда не составит.
Спасибо вам, вот какое решение мне предложили на stackoverflow вот почему я и говорил что хотел бы увидеть как это делают профессионалы, так как мои решения такие же громоздкие как и по ссылке выше, а я таки чувствовал что можно намного лучше это реализовать, спасибо еще раз
plantago, 18.11.2016 02:05
Очень хорошо, что кому-то было не лень сделать эту работу за Вас Кстати, я сомневаюсь, что "тыр-дыр" пакеты "обеспечивают максимальную скорость исполнения"
PS2004R, 18.11.2016 08:49
(plantago @ 18.11.2016 02:05)
Очень хорошо, что кому-то было не лень сделать эту работу за Вас Кстати, я сомневаюсь, что "тыр-дыр" пакеты "обеспечивают максимальную скорость исполнения"
Тут вообще повеситься реально
Картинки:
_________________2016_11_18_08_48_07.png — (2.66)
mytarmail, 18.11.2016 14:08
(plantago @ 18.11.2016 03:05)
Очень хорошо, что кому-то было не лень сделать эту работу за Вас Кстати, я сомневаюсь, что "тыр-дыр" пакеты "обеспечивают максимальную скорость исполнения"
Повторю еще раз для тех кому вчитываться в написанное лень У меня было свое решение но оно меня не устраивало из за медленности и громоздкости, на stackoverflow мне предлагали такие же громоздкие решения, потому и написал сюда, потому что знал что можно написать намного лучше, но не знал как
plantago, 18.11.2016 17:42
Если оно у Вас было, почему Вы его не привели здесь?
plantago, 18.11.2016 17:55
(PS2004R @ 18.11.2016 01:49)
Тут вообще повеситься реально
А это что за график?
PS2004R, 18.11.2016 18:44
(plantago @ 18.11.2016 17:55)
А это что за график?
У человека уже два аккаунта там (один он спалил в процессе старта троллинга сразу), это статистика второго.
mytarmail, 19.11.2016 12:43
(plantago @ 18.11.2016 18:55)
Если оно у Вас было, почему Вы его не привели здесь?
Потому что я знал что "нормальное" решение будет принцыпиально иным, я там вообще циклами делал...
mytarmail, 19.11.2016 12:47
(PS2004R @ 19.11.2016 13:43)
У человека уже два аккаунта там (один он спалил в процессе старта троллинга сразу), это статистика второго.
у человека два аккаунта потому что человек регистрировался и на русском и на английском stackoverflow... Найдете тролинг, дам медаль. В наших краях то что вы сейчас делаете называется балаболить, таких не уважают
ПолинаШ, 20.01.2017 14:01
Хочу сравнить качество моделей простейших бинарных классификаторов, да еще и с разным набором предикторов. Предполагаю выполнить простую 10-кратную кросс-проверку и сравнить либо точность, либо ROC моделей. Использую train() и вижу, что вместо моделей дискриминантного анализа и логит-регрессии она начинает перебирать модели Random Forrest:
lda.step.pro <- train(DGlass[,3:4], DGlass$F1,metod="lda", trControl = trainControl(method = "cv", classProbs = TRUE), metric = "Accuracy") lda.step.pro$finalModel Call: randomForest(x = x, y = y, mtry = param$mtry, metod = "lda") . lm.step.pro <- train(F1 ~., data= DGlass[,-c(1,4,10,12)], metod="glm", family=binomial, trControl = trainControl(method = "cv", classProbs = T, summaryFunction = twoClassSummary )) Call: randomForest(x = x, y = y, mtry = param$mtry, metod = "glm", family = ..2)
Это что - живет она так, или это мой глюк? Как это все объяснить? В инете что-то не нахожу никаких внятных объяснений. Как я смогу сравнить, например, модели LDA и QDA, если первая на самом деле RandomForrest и по определению будет эффективней.
plantago, 20.01.2017 19:52
> ?train No documentation for ‘train’ in specified packages and libraries: you could try ‘??train’ === Не предполагайте, пожалуйста, телепатию у читающих Ваше сообщение.
PS2004R, 20.01.2017 20:19
(plantago @ 20.01.2017 19:52)
> ?train No documentation for ‘train’ in specified packages and libraries: you could try ‘??train’ === Не предполагаете, пожалуйста, телепатию у читающих Ваше сообщение.
Скорее всего это library(caret). Хотя написать про это _явно_ было бы очень хорошо.
В R даже специальную команду встроили для описания текущей сессии
CODE
> sessionInfo() R version 3.2.3 (2015-12-10) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Ubuntu 14.04.5 LTS
Хочу сравнить качество моделей простейших бинарных классификаторов, да еще и с разным набором предикторов. Предполагаю выполнить простую 10-кратную кросс-проверку и сравнить либо точность, либо ROC моделей. Использую train() и вижу, что вместо моделей дискриминантного анализа и логит-регрессии она начинает перебирать модели Random Forrest:
Это что - живет она так, или это мой глюк? Как это все объяснить? В инете что-то не нахожу никаких внятных объяснений. Как я смогу сравнить, например, модели LDA и QDA, если первая на самом деле RandomForrest и по определению будет эффективней.
Это легко пояснить, параметр называется на самом деле:
method: a string specifying which classification or regression model to use. Possible values are found using ‘names(getModelInfo())’. See <URL: http://topepo.github.io/caret/bytag.html>. A list of functions can also be passed for a custom model function. See <URL: http://topepo.github.io/caret/custom_models.html> for details.
ПолинаШ, 21.01.2017 10:11
Прошу покорно прощения у сообщества за отнятое время. И большое спасибо за ответ. Но все оказалось до нелепости просто: слово method написано с очепяткой как metod, поэтому обучение запускается со значением параметра по умолчанию - а это как раз "rf". Я вся в смущении из-за своей невнимательности.
plantago, 21.01.2017 21:36
Вот оно как. Спасибо. Но у меня появился теперь вопрос, и быстрым поиском я его решить не могу.
Есть ли какой-то способ запретить выполнение "...", если это выражение уже участвует в определении функции?
Надеюсь, понятно, как это связано с предыдущими сообщениями. Если нет, то пример:
‘...’ and ‘..1’, ‘..2’ etc, which are used to refer to arguments passed down from a calling function. See the ‘Introduction to R’ manual for usage of these syntactic elements, and dotsMethods for their use in formal methods.
с вот такими ручками доступа ?dotsMethods
plantago, 21.01.2017 23:17
О, это уже горячо, спасибо. Но зачем же train() теряет троеточие, как моя function1()? Более того, троеточие теряют и более простые функции, например, mean(). Пока мне приходит в голову только, что это сделано для того, чтобы потом была возможность формировать вызов функции по кусочкам, например, через match.call() (как это делает write.csv() -- хотя в этом случае как раз все сделано нормально, неправильные аргументы не проходят).
Но это все равно не то что бы небезопасно, но как-то неправильно, что ли. Выглядит как "dirty trick".
Мораль пока одна -- надо быть осторожным с "...". Пойду-ка я по своим функциям и проверю, действительно ли везде это нужно.
А может, написать автору caret и указать на проблему?
(Подумал еще что, если бы ПолинаШ написала me="lda", все бы было нормально. Хорошая идея, но нет не выйдет, см. ?train).
PS2004R, 21.01.2017 23:40
(plantago @ 21.01.2017 23:17)
О, это уже горячо, спасибо. Но зачем же train() теряет троеточие, как моя function1()? Более того, троеточие теряют и более простые функции, например, mean(). Пока мне приходит в голову только, что это сделано для того, чтобы потом была возможность формировать вызов функции по кусочкам, через match.call().
он ничего не теряет, он так сделан
CODE
> caret:::train function (x, ...) { UseMethod("train") }
он фактически плавно (ну насколько позволяет ?UseMethod) переходит к вызову
Но выдает ошибку Warning message: In readLines(json_file) : incomplete final line found on 'C:/Users/Константин/Downloads/N1.json'
Подскажите, в чем дело. Мне просто нужно из всех полей содержащие полнотекстовые сообщения выгрузить все слова в txt. Как это сделать? Спасибо
plantago, 08.02.2017 18:19
Это не ошибка, это предупреждение. Обычно его можно просто проигнорировать. Сам-то объект json_data нормальный получился? Проверили?
penkin.2011, 08.02.2017 18:32
В том то и дело, если его открыть через notepad ++, там все данные одной строкой Как его структурировать чтобы текст вытащить?
plantago, 08.02.2017 20:16
Как говорится, УМВР:
library(rjson) json_data <- fromJSON(paste(readLines("N1.json"), collapse="")) # ignore warning! str(json_data) # very long output is.list(json_data) # TRUE write(file="new.txt", unlist(json_data))
После чего new.txt читается текстовым редактором без проблем. Только совершенно непонятно, этого ли Вы хотите или нет
penkin.2011, 08.02.2017 21:51
plantago, почти, Вы сделали все ок, но в текстовый документ нужно выгрузить только те тексты, которые помечены как текст т.е. так $ text естественно без префиксов .$ text : chr
.$ text : chr "Between Two Ferns With Zach Galifianakis: Hillary Clinton https://t.co/qvxJ3XzIW4 via @YouTube"
Хотя опять-таки мне непонятно, что эта политика делает на биологическом форуме
И учитесь правильно формулировать вопросы, в следующий раз Вам вполне могут тут не ответить. И будут правы.
penkin.2011, 09.02.2017 10:04
plantago, спасибо Вам Ну политика везде и в биологии и так далее. Где ее только нет Ну, а если серьезно, я искал форум не по специальности, а где есть помощь по R. Вышел Ваш. Нужно в рунете создать форум посвященный вопросам в R в целом, а не только для биологов
penkin.2011, 10.02.2017 15:55
Ещё раз простите, за то что не в профильный форум пишу. Скажите, а что значит это ошибка и как её исправить > tdm = as.matrix(tdm) Error: cannot allocate vector of size 28.5 Gb > #
PS2004R, 10.02.2017 17:19
(penkin.2011 @ 10.02.2017 15:55)
Ещё раз простите, за то что не в профильный форум пишу. Скажите, а что значит это ошибка и как её исправить > tdm = as.matrix(tdm) Error: cannot allocate vector of size 28.5 Gb > #
Дословно означает что не хватило оперативной памяти. Если это не по причине использования 32-разрялной версии R, то надо считать на машине где имеется достаточно ОЗУ.
penkin.2011, 10.02.2017 18:11
Ничевоськи-себески. Сколько же ему надо. 24 гига оперативы. Это все тот же файлик, когда делаю dtm матричку А как быть тогда?
PS2004R, 10.02.2017 18:14
(penkin.2011 @ 10.02.2017 18:11)
Ничевоськи-себески. Сколько же ему надо. 24 гига оперативы. Это все тот же файлик, когда делаю dtm матричку А как быть тогда?
Как все -- оставить часть матрицы (обычно по частоте встречаемости термина). Ну или выбрать метод факторизации итеративный, который работает с порциями данных.
Это — лёгкая версия форума. Чтобы попасть на полную, щелкните здесь.