Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Подскажите с нейросетью
Форум врачей-аспирантов > Разделы форума > Медицинская статистика
Fedor_Petuhov
Здравствуйте, проконсультируйте, пожалуйста. Надеюсь здесь кто-нибудь знает R.
1. Какое минимальное количество наблюдений нужно, чтобы построить нейросеть? У меня 7 независимых переменных и 3 зависимых (все метрические).
Между ними надо найти закономерности. Регрессия не вариант. Что-то КМД слабый.
2. Дело в том, что я работаю на производстве, где добывать данные крайне сложно, вернее дорого, там по-минимуму наблюдений. У меня в наборе всего 5 наблюдений. Есть ли какие-то хитрые способы грамотно и математически обосновано сгенерировать наблюдения для переменных, а уже потом строить нейросеть на них.
Спасибо всем за помощь.
passant
Цитата(Fedor_Petuhov @ 10.02.2017 - 16:49) *
Здравствуйте, проконсультируйте, пожалуйста. Надеюсь здесь кто-нибудь знает R.
1. Какое минимальное количество наблюдений нужно, чтобы построить нейросеть? У меня 7 независимых переменных и 3 зависимых (все метрические).
Между ними надо найти закономерности. Регрессия не вариант. Что-то КМД слабый.
2. Дело в том, что я работаю на производстве, где добывать данные крайне сложно, вернее дорого, там по-минимуму наблюдений. У меня в наборе всего 5 наблюдений. Есть ли какие-то хитрые способы грамотно и математически обосновано сгенерировать наблюдения для переменных, а уже потом строить нейросеть на них.
Спасибо всем за помощь.

Добрый день.
К сожалению, информация, которую Вы предоставили, крайне скудна, что-бы по ней можно было давать какие-то рекомендации.
1. Итак, что Вы реально сообщили: имеется 7+3 переменных и 5 (ПЯТЬ!!!!) наблюдений. При этом "регрессия - не вариант". Я так понял, вы строите три регрессионные модели в каждой из которых 7 независимы и одна зависимая переменная. По пяти точкам! И получаете большую ошибку предсказания. Т.е. это не метод плох, это у Вас нет необходимой информации, для корректного построения модели выбранного типа. Вопрос - каким боком может помочь всемогущая нейронная сеть, если информации нет в самих данных? Может, просто взять нелинейную регрессионную модель? (Просто ради примера, что-бы было понятно - нейронная сеть без промежуточных слоев, содержащая только линейные элементы и обучаемая с помощью линейной оптимизации есть ни что иное, как традиционная регрессионная модель, та самая, которая у Вас "не сработала").
2. Непонятно, какую вообще задачу Вы ставите. Мы не знаем, и даже не можем догадаться. Может - вы хотите выполнить задачу классификации? Или кластеризации? Или предикативный анализ?? В любой постановке при Ваших данных (я имею ввиду их мизерное количество) можно попытаться применить методы, которые используются в соответствующих разделах Data Science без привлечения ИНС, причем в вашем случае эти методы могут сработать гораздо эффективнее. Другой вопрос - точность, которую Вы получите, но тут уж что есть. Хотите точности - ищите дополнительные данные.
3. Имея 5 замеров в 8-мерном пространстве измерения надеяться на "способы грамотно и математически обосновано сгенерировать наблюдения" - не приходится.
4. "Какое минимальное количество наблюдений нужно, чтобы построить нейросеть?" - ответ совершенно очевиден - чем больше, чем лучше. Именно там, где данных слишком много и "традиционные методы" просто захлебываются, имеет смысл применять ИНС. (см. выше пример с линейной регрессией).
5. Вообще непонятно, каким боком тут знания R, но да, сильно подозреваю, что тут есть "кто-нибудь", не просто знающий, но и использующий R.
Fedor_Petuhov
1. Виноват. Второпях перепутал. 3 независ , 7 завис. переменных. Простите
2. Т.о. зная 3 физических показателя нужно предсказать выходные, а именно химические компоненты продукта
3. Ну приблизительно, аппроксимация повсюду:)
4. я понял, что нужно очень много
5. коварный R нужен, потому что я на нем буду все делать, а далее именно он будет внедрен в производство для контроля. Это уже вопрос к программерам.

В таком случае мне нужно только подсказка по 3 вопросу. пусть и с аппроксимацией
passant
Цитата(Fedor_Petuhov @ 12.02.2017 - 12:18) *
1. Виноват. Второпях перепутал. 3 независ , 7 завис. переменных. Простите
2. Т.о. зная 3 физических показателя нужно предсказать выходные, а именно химические компоненты продукта
3. Ну приблизительно, аппроксимация повсюду:)
4. я понял, что нужно очень много
5. коварный R нужен, потому что я на нем буду все делать, а далее именно он будет внедрен в производство для контроля. Это уже вопрос к программерам.

В таком случае мне нужно только подсказка по 3 вопросу. пусть и с аппроксимацией


Есть такая книга "В.К. Шитиков, Г.С. Розенберг. Рандомизация и бутстреп: статистический анализ в биологии и экологии с использованием R". Попробуйте посмотреть. Думаю, найдете там много чего интересного и полезного на будущее. И по теме "как хитрым способом грамотно и математически обосновано сгенерировать наблюдения для переменных" и по теме "R" (за одно и некоторые иллюзии развеете rolleyes.gif ).. Но при имеющейся исходной выборке в пять точек рассчитывать на какие-то серьезные результаты в Вашем случае я бы не стал. А смотрел бы в первую очередь в сторону нелинейной регрессии.
P.S. Кстати, зачем Вам R я так и не понял. При пяти точках и трех переменных - достаточно EXCEL. Или даже калькулятора biggrin.gif
nokh
Цитата(Fedor_Petuhov @ 12.02.2017 - 15:18) *
2. Т.о. зная 3 физических показателя нужно предсказать выходные, а именно химические компоненты продукта

Для таких задач в хемометрии традиционно применяются варианты PLS-регрессии. Погуглите на темы PLS in chemometrics, PLS in R.
Вот первый попавшийся пакет: ftp://cran.r-project.org/pub/R/web/packag...cs-vignette.pdf
Методы и пакеты требуют данных. Может лучше экстрасенс?
Fedor_Petuhov
Без экстрасенсов и прочих жуликов:) Только чистые данные))
p2004r
Цитата(Fedor_Petuhov @ 12.02.2017 - 20:08) *
Без экстрасенсов и прочих жуликов:) Только чистые данные))


Резко выпадает пятая точка, пока "вокруг неё" нет подтверждающих любые модели очень слабы получаться будут...

А так, 4 точки на одной линии лежат. Но надо понимать, что размерности хватит только для предсказания некого "агрегата по y" (ну "изоповерхность" нарисовать не более).
nokh
Цитата(p2004r @ 13.02.2017 - 13:37) *
Резко выпадает пятая точка, пока "вокруг неё" нет подтверждающих любые модели очень слабы получаться будут...

Не факт. В PCA вы вращали два набора одновременно. А если использовать constrained ordination типа Redundancy Analysis (RDA) или Partial Least Squares Regression (PLS, разные варианты), то пространство зависимых переменных будет вращаться относительно пространства независимых отдельно. При таком подходе шансов найти проекцию с более близкой к линейной зависимостью куда выше. Считается, что для объяснения дисперсии зависимых показателей от независимых точнее RDA, но для прогноза лучше PLS, которая является несколько смещённым вариантом RDA.

Для представленного в посте набора достаточно одной компоненты, зависимость выглядит как S-образная загогулина, но достаточно близко к линии (делал не в R). К сожалению, пока сам разобрался с PLS не полностью, осваиваю. Но и детские болезни в пользовании R: не получается пока разбить data.frame на 2 списка в пределах одного набора data, чтобы назначить один X другой Y (типа как data(oliveoil) в пакете pls). Разберусь с PLS (в R - в частности) - отпишусь в эту ветку. Пока отхожу от шока: оказывается в хемометрии 5-10 образцов с десятками независимых и десятками зависимых показателей - не редкость. Так, что и без экстрасенсов 5 наблюдений может какбэ хватить... Сеть строить смысла нет, по крайней мере на практике используют варианты PLS.
p2004r
Цитата(nokh @ 14.02.2017 - 08:14) *
Не факт. В PCA вы вращали два набора одновременно. А если использовать constrained ordination типа Redundancy Analysis (RDA) или Partial Least Squares Regression (PLS, разные варианты), то пространство зависимых переменных будет вращаться относительно пространства независимых отдельно. При таком подходе шансов найти проекцию с более близкой к линейной зависимостью куда выше. Считается, что для объяснения дисперсии зависимых показателей от независимых точнее RDA, но для прогноза лучше PLS, которая является несколько смещённым вариантом RDA.

Для представленного в посте набора достаточно одной компоненты, зависимость выглядит как S-образная загогулина, но достаточно близко к линии (делал не в R). К сожалению, пока сам разобрался с PLS не полностью, осваиваю. Но и детские болезни в пользовании R: не получается пока разбить data.frame на 2 списка в пределах одного набора data, чтобы назначить один X другой Y (типа как data(oliveoil) в пакете pls). Разберусь с PLS (в R - в частности) - отпишусь в эту ветку. Пока отхожу от шока: оказывается в хемометрии 5-10 образцов с десятками независимых и десятками зависимых показателей - не редкость. Так, что и без экстрасенсов 5 наблюдений может какбэ хватить... Сеть строить смысла нет, по крайней мере на практике используют варианты PLS.


1. Там прямо в pdf на странице пакета показано как в дата фрейм поместить две матрицы.

2. Это простые проекции данных (геометрия), все работает пока хватает размерности (даже в пределе, когда одна точка на размерность приходиться). То что это все кто то описывает как "распределения" ничего не значит для исходной постановки задачи.

3. Я не думаю что PLS в данном случае покажет что то лучше, тут зависимость и так предельно близка к линейной (s образность целиком вопрос единиц измерения у показателей). Но если сегодня не будут мешать попробую.


PS результаты pls для двух компонент (чисто что бы графика была богаче, поскольку по нагрузкам там одна только)
Fedor_Petuhov
Для химических смесей бывают исключения, когда данные собрать просто дорого, а так если есть деньги, то хоть 500 млн наблюдений
Но я читаю книжку именно по бутстрепу.
Кстати, вопрос к знающим, а Монте-Карло тут применим для моделирования?
Fedor_Petuhov
и да приветствуются любые варианты кода, может из пазлов создам что то целое.
При это горе-моя голова забыла сказать, что рецепты разные бывают. плюс это ещё классификационная задача, но я её решу, разбив анализ на категории. Но тем не менее, а стоит ли и фактор рецепта включать, у меня их 50.
50. и у каждого свои наблюдения. Тоже по 5.
Рецепты не водка, их лучше не объединять. бодяжить тут нельзя.
p2004r
Цитата(Fedor_Petuhov @ 14.02.2017 - 15:27) *
у меня их 50.
50. и у каждого свои наблюдения. Тоже по 5.


Ну вот когда всё вспомните и сформулируете техзадание (и форму оплаты за объем в техзадании smile.gif ) можно и продолжить будет.
Fedor_Petuhov
Тех задание не нужно. Непосредственно по программированию нейросети, сможете подсказать?

У нас 3 независ. пер, 1 пер это класс рецепта и зависимые переменные. Некоторые убрал
Как с помощью функции predict, сделать так, чтобы, если я указал только класс химического состава, то программа показывает наиболее точное соотношение независимых и зависимых переменных?
типа
predict(a,mymodel)

## x1=100
## x2=200
## X3=400
## Y1=101
## y2=102

И да корректно ли так указывать категориальную переменную в зависимых?
mydata <- <path to data>
maxs <- apply(data, 2, max)
mins <- apply(data, 2, min)
scaled <- as.data.frame(scale(mydata, center = mins, scale = maxs - mins))
train_ <- scaled[index,]
test_ <- scaled[-index,]
library(neuralnet)
neuralnet(y1+y2+y3+classvar~x1+x2+x3, infert,
err.fct="ce", linear.output=FALSE, likelihood=TRUE))

ogurtsov
Цитата(Fedor_Petuhov @ 15.02.2017 - 22:32) *
neuralnet(y1+y2+y3+classvar~x1+x2+x3, infert,
err.fct="ce", linear.output=FALSE, likelihood=TRUE))


Попробуйте, и нам расскажете.
p2004r
Цитата(Fedor_Petuhov @ 15.02.2017 - 21:32) *
И да корректно ли так указывать категориальную переменную в зависимых?


Корректно. Но, если каждый рецепт "уникален", еще и "бессмысленно и беспощадно" smile.gif

Есть соответствующая техника называемая "Embedding".
nokh
Цитата(nokh @ 14.02.2017 - 10:14) *
Разберусь с PLS (в R - в частности) - отпишусь в эту ветку.

C PLS-регрессией по алгоритму NIPALS всё более-менее ясно. В примере топикстартера 93,3% дисперсии набора Х объясняют 47,9% дисперсии набора Y если брать только первую компоненту. Набор Х очень хорошо прогнозирует Y1 (коэффициент детерминации R2=0,946), Y2 (0,946) и Y3 (0,881) и безобразно Y4 (0,096) и Y6 (0,072). Даже если брать все три компоненты ситуация с Y4, Y5 и Y6 неважная (R2 около 0,15). Это значит, что для надёжного прогноза химии (Y) одной рецептуры (X) недостаточно, нужно учитывать ещё что-то (может физические факторы, продолжительность процесса и т.п.). В целом же и по одной компоненте весьма похоже прогнозируется:
y1 y2 y3 y4 y5 y6 y7
103,3 -3,3 48,1 83,8 7,8 8,3 23,0
84,6 15,4 68,7 77,5 11,3 11,1 16,6
77,9 22,1 76,2 75,3 12,6 12,1 14,3
72,0 28,0 82,6 73,3 13,7 13,0 12,3
62,3 37,7 93,3 70,0 15,5 14,4 9,0

С R тоже есть прогресс, но пока он позволил только разочароваться в пакете pls:

1) результаты по алгоритму NIPALS (method="oscorespls") не совпадают с расчётами в других пакетах (Statistica, Tanagra)
2) результаты для 4 разных методов "kernelpls", "widekernelpls", "simpls", "oscorespls" дают одинаковые результаты (по крайней мере для этого примера)
3) для одной компоненты не может выдать summary (остальное считает):
> res.nipals<-mvr(Y ~ X, ncomp = 1, method = "oscorespls", scale = TRUE)
> summary(res.nipals)
Data: X dimension: 5 3
Y dimension: 5 7
Fit method: oscorespls
Number of components considered: 1
TRAINING: % variance explained
Ошибка в dimnames(tbl) <- list(c("X", yvarnames), paste(1:object$ncomp, :
длина 'dimnames' [1] не равна протяженности многомерной матрицы
4) вместо регрессионных коэффициентов предикторов пакет выдаёт их умноженными на стандартные отклонения предикторов.

Буду смотреть другие пакеты с PLSR.
Fedor_Petuhov
Да, я на stackoverflow почитал про нее, но не все сразу, я сначала одно попробую, попроверяю свои гипотезы, а потом другое. По поводу простого neuralnet
p2004r, может ли эта ошибка возникать из-за того, что classvar у меня представлена как текстовые категории, или копать в другое место нужно. Больше вопросов нет.


> neuralnet(y1+y2+y3~classvar+x1+x2+x3, infert,
+ err.fct="ce", linear.output=FALSE, likelihood=TRUE,data=mydata)
Error in as.vector(as.integer(hidden)) :
(list) object cannot be coerced to type 'integer'
Fedor_Petuhov
nokh, а такой R^2 может быть вызван малым кол-вом наблюдений?
p2004r
Цитата(nokh @ 17.02.2017 - 00:01) *
C PLS-регрессией по алгоритму NIPALS всё более-менее ясно. В примере топикстартера 93,3% дисперсии набора Х объясняют 47,9% дисперсии набора Y если брать только первую компоненту. Набор Х очень хорошо прогнозирует Y1 (коэффициент детерминации R2=0,946), Y2 (0,946) и Y3 (0,881) и безобразно Y4 (0,096) и Y6 (0,072). Даже если брать все три компоненты ситуация с Y4, Y5 и Y6 неважная (R2 около 0,15). Это значит, что для надёжного прогноза химии (Y) одной рецептуры (X) недостаточно, нужно учитывать ещё что-то (может физические факторы, продолжительность процесса и т.п.). В целом же и по одной компоненте весьма похоже прогнозируется:
y1 y2 y3 y4 y5 y6 y7
103,3 -3,3 48,1 83,8 7,8 8,3 23,0
84,6 15,4 68,7 77,5 11,3 11,1 16,6
77,9 22,1 76,2 75,3 12,6 12,1 14,3
72,0 28,0 82,6 73,3 13,7 13,0 12,3
62,3 37,7 93,3 70,0 15,5 14,4 9,0

С R тоже есть прогресс, но пока он позволил только разочароваться в пакете pls:

1) результаты по алгоритму NIPALS (method="oscorespls") не совпадают с расчётами в других пакетах (Statistica, Tanagra)
2) результаты для 4 разных методов "kernelpls", "widekernelpls", "simpls", "oscorespls" дают одинаковые результаты (по крайней мере для этого примера)
3) для одной компоненты не может выдать summary (остальное считает):
> res.nipals<-mvr(Y ~ X, ncomp = 1, method = "oscorespls", scale = TRUE)
> summary(res.nipals)
Data: X dimension: 5 3
Y dimension: 5 7
Fit method: oscorespls
Number of components considered: 1
TRAINING: % variance explained
Ошибка в dimnames(tbl) <- list(c("X", yvarnames), paste(1:object$ncomp, :
длина 'dimnames' [1] не равна протяженности многомерной матрицы
4) вместо регрессионных коэффициентов предикторов пакет выдаёт их умноженными на стандартные отклонения предикторов.

Буду смотреть другие пакеты с PLSR.


1. тонко! пакету уже как бы 15 лет исполнилось, я бы у себя "в конфигурации" искал проблему в таком случае (ну или написал авторам на почту поддержки пакета если был бы уверен в проблеме)

2. и как удалось посмотреть _что_ считает статистика? исходный код есть? вот что вообще за вычисления делает статистика? в случае {pls} достаточно посмотреть в исходный код. не нравиться {pls} -- есть еще реализации, например https://cran.r-project.org/web/packages/matrixpls/index.html

PS собственно вот http://stats.stackexchange.com/questions/2...data-not-equiv#
100$
NIPALS 1966 г.р. {pls} v. 2.6-0 датируется 18/12/2016. Словом, переходите на SIMPLS (de Jong,1993), ребята.

Что считает Statistica тайной за семью печатями не является: Тыц!
Fedor_Petuhov
as.numeric(mydata$classvar)+1
показал, что дело не текстовых категориях. Значит можно.
Fedor_Petuhov
закрываю вопрос) стаковерфлёу в помощь был))
вот так правильно делать, мало ли на будущее у кого-то будет такой вопрос
pr.nn <- compute(nn,test_[,1:3])

pr.nn_ <- pr.nn$net.result*(max(mydata$y1+mydata$y2+mydata$y3+mydata$y4+mydata$y5+mydata$y6)-min(mydata$y1+mydata$y2+mydata$y3+mydata$y4+mydata$y5+mydata$y6))
+min(mydata$y1+mydata$y2+mydata$y3+mydata$y4+mydata$y5+mydata$y6)
Fedor_Petuhov
Коллеги, я стал работать с pls регрессией, help.gif с интерпретацией результатов

plsr(formula = y1 + y2 + y3 + y4 ~ ., ncomp = 2, data = reg, method = "oscorespls", scale = TRUE, validation = "CV", segments = 9, segment.type = "consecutive", length.seg = 3)
> summary(plsFit)
Data: X dimension: 70 3
Y dimension: 70 1
Fit method: oscorespls
Number of components considered: 2

VALIDATION: RMSEP
Cross-validated using 24 consecutive segments.
(Intercept) 1 comps 2 comps
CV 17.15 8.794 8.082
adjCV 17.15 8.785 8.067

TRAINING: % variance explained
1 comps 2 comps
X 78.12 94.41
y1 + y2 + y3 + y4 75.56 mega_shok.gif.99

что значит CV и что значит adjCV
какое вывод по этим цифрам я могу сделать?

И что значит понятие компоненты в этой регрессии?

nokh, вопрос к Вам, поскольку Вы прогали эту регрессию, возможно сможете дать небольшой ликбез.smile.gif
p2004r
Цитата(Fedor_Petuhov @ 11.03.2017 - 15:12) *
VALIDATION: RMSEP
Cross-validated using 24 consecutive segments.


что значит CV и что значит adjCV
какое вывод по этим цифрам я могу сделать?


Фелор, вы что _реально_ про кроссвалидацию ничего не слышали? И какого интересно "ответа" ждете, "зачитывания вслух" странички из педивикии? smile.gif

Конкретная реализация в пакете pls в нем же и _исчерпывающе_ описана ?pls::crossval (если просто набрать pls::crossval то получите код реализации)
Там же ссылка на литературный источник с описанием теории техники

Код
Mevik, B.-H., Cederkvist, H. R. (2004) Mean Squared Error of Prediction (MSEP) Estimates for
Principal Component Regression (PCR) and Partial Least Squares Regression (PLSR).
Journal of Chemometrics, 18(9), 422?429.
nokh
Цитата(Fedor_Petuhov @ 17.02.2017 - 19:52) *
nokh, а такой R^2 может быть вызван малым кол-вом наблюдений?

Для других показателей число наблюдений также мало, но тем не менее этого числа хватило. Поэтому вряд-ли, хотя доказать этого пока нельзя. Вы находитесь в более выгодном положении, поскольку имеете не один набор данных, а много. Их анализ позволит уже более конкретно определиться с причиной. Возможно, какие-то показатели всегда "шумят" сильнее, например, в силу меньшей концентрации или влияния на них других факторов.

Цитата(Fedor_Petuhov @ 11.03.2017 - 17:12) *
Коллеги, я стал работать с pls регрессией, help.gif с интерпретацией результатов
...
И что значит понятие компоненты в этой регрессии?
nokh, вопрос к Вам, поскольку Вы прогали эту регрессию, возможно сможете дать небольшой ликбез.smile.gif

Про компоненты нужно почитать. Если не знакомы с PLS, то можно и даже проще начать с анализа главных компонент - это базовая техника для целого семейства методов. Если кратко, то не вся информация в наборе данных важна и/или отлична от случайного шума. Главные компоненты - ряд убывающих по важности (доле объясняемой дисперсии) новых переменных, скомбинированных из исходных переменных. Они обобщают данные и позволяют представить их в пространстве меньшей размерности, поэтому такие методы называют иногда методами редукции данных с обобщением. Работу методов типа анализа избыточности (RDA) можно представить себе так: одно гипероблако облако независимых переменных неподвижно, а второе гипероблако зависимых пременных поворачивается относительно первого так, чтобы такая проекция объяснила максимум дисперсии второго. Первая такая проекция и является первой компонентой. Далее ищется вторая, ортогональная первой, третья, ортогональная перым двум и т.д., но в выложенном вами наборе 2 и 3 ничтожно малы. PLS-регрессия - смещённый вариант RDA, с акцентом не на объяснение дисперсии, а на прогноз.

К сожалению, не было времени разобраться с PLS в R, я тренировался с PLS в пакете tanagra ( http://eric.univ-lyon2.fr/~ricco/tanagra/en/tanagra.html ), который уже был у меня установлен и для которого нашёл в сети понятную мне инструкцию. Как я писал выше, один пакет R мне не понравился и хотя часть вопросов ушла, моя "конфигурация" не позволила сделать прогноз, используя его выкладки на экране и калькулятор в руках, тогда как для tanagra - позволила и результат сошёлся с выдаваемыми пакетом прогнозными значениями. Опробую chemometrics - отпишусь.

По поводу CV вам ответили. Кроссвалидация более популярна в Machine Learning, тогда как в традиционной прикладной статистике наработаны другие, включая чисто графические подходы. Я этим способом выявлять надёжные предикторы не пользуюсь, польскольку работаю обычно с небольшими наборами данных, а в них - всё не особо надёжно smile.gif Полагаю, у вас - та же ситуация, поэтому с числом необходимых и достаточных для прогноза компонент проще определиться по графику каменистой осыпи (scree plot). Число компонент равно числу предикторов, поэтому в вашем случае начальное решение должно содержать не 2, а 3 компоненты.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.