Отбор значимых входов из 10^4-10^6 входов

krysonka

Есть данные по активности органических соединений, я получаю множество из 10^4-10^6 фрагментных дескрипторов. Среди этого множества входов большая часть коррелирует между собой. Требуется из них отобрать 100 для дальнейшего построения нейросетевой модели. Зависимость между данными нелинейная. Сейчас у меня есть софт, который использует пошаговую линейную регрессию для построения линейной модели, а попавшие в модель дескрипторы уже используются для построения нейросетевой модели. Но этот софт не переваривает больше 10^4 входов, да и качество отбора не лучшее.
Доброфорум, подскажите в каком направлении копать? Какие алгоритмы нелинейного(в идеале или линейного отбора значимых входов среди множества коррелирующих входов выбрать?
Upd: более формальное описание
Есть матрица, в ее строках размещены "наблюдения"(молекулы их число от 100 до 10000, но обычно не более 1000, я сейчас работаю с базой где всего 257 молекул) а в столбцах "факторы", их число, как я писал выше 10^4-10^6 Факторы и являются входами. и есть "вектор наблюдений зависимой переменной "активность". Требуется отобрать из этих факторов 100 которые наилучшим образом коррелируют с активностью для последующего анализа.

sashok01

Principal Component Analysis?

krysonka

Principal Component Analysis
Насколько я понимаю, он не отбирает входы которые коррелируют с активностью, а сворачивают размерность в пространстве исходных признаков, хотя я могу и ошибаться, да.
Тем более что задача отобрать сами входы а не компоненты

sashok01

лучше задачу переводить на язык математики, чтобы понятнее было. "Активность" - это один из входов? Или что?
Корреляцию PCA учитывает.
 
Principal component analysis (PCA) is a mathematical procedure that uses an orthogonal transformation to convert a set of observations of possibly correlated variables into a set of values of linearly uncorrelated variables called principal components

krysonka

"Активность" - это один из входов
Это выход, который мы хотим предсказать

krysonka

Есть матрица, в ее строках размещены "наблюдения"(молекулы) а в столбцах "факторы", их число, как я писал выше 10^4-10^6 Факторы и являются входами. и есть "вектор наблюдений зависимой переменной "активность". Требуется отобрать из этих факторов 100 которые наилучшим образом коррелируют с активностью для последующего анализа.

sashok01

что мешает его считать одним из входов?

krysonka

В принципе ничего это вариант, да, но если я правильно понимаю в результате использования метода мы получим новые переменные, а мне нужны оригинальные входы.

kshangin

Если я правильно понимаю, то как раз тут и может помочь PCA. Активность необходимо ввести в модель как один из входов, и после построения модели те оригинальные входы, которые будут ближе к Активности в построенном пространстве PC, и будут наиболее коррелированы с ней. Возможно, разумно будет искусственно завысить вес Активности по сравнению с оригинальными входами, чтобы она легла поближе к PC1. Тем более Активность одна, а структурных параметров много - может картина смазаться. Как вариант - делать не PCA, а PCR (principal component regression) с Активностью в качестве Y-переменной.
Но мне сдается, что все эти методы оценивают линейную корреляцию.

krysonka

Но мне сдается, что все эти методы оценивают линейную корреляцию
линейный PCA естественно, а нелинейный, при помощи например нейросети с узким горлом... я думаю если начать обучение нейросети с миллионом входов она через пару сотен лет обучения может заговорить :grin:

Niklz

Стандартные способы для этого:
- пошаговая регрессия (stepwise regression) http://en.wikipedia.org/wiki/Stepwise_regression
- регрессия регуляризованная суммой модулей коэффициентов (lasso regression) http://en.wikipedia.org/wiki/Least_squares#Lasso_method
Оба этих метода есть, к примеру, в R:
http://stat.ethz.ch/R-manual/R-devel/library/stats/html/step...
http://cran.r-project.org/web/packages/lars/index.html
http://cran.r-project.org/web/packages/glmnet/
или в Matlab:
http://www.mathworks.cn/cn/help/stats/stepwisefit.html
http://www.mathworks.cn/cn/help/stats/lasso.html

krysonka

Стандартные способы для этого:
- пошаговая регрессия (stepwise regression) http://en.wikipedia.org/wiki/Stepwise_regression
- регрессия регуляризованная суммой модулей коэффициентов (lasso regression) http://en.wikipedia.org/wiki/Least_squares#Lasso_method
Оба этих метода есть, к примеру, в R или в Matlab
1. Пошаговую регрессию я и так делаю, но у пошаговой регрессии есть много вариантов отбора(за исключением тривиального F-теста я, например, нашел статью где отбор входов в модель осуществляется при помощи генетического алгоритма, а в качестве целевой функции используется ошибка модели на тестовом множестве. Скорее всего есть и другие варианты, собственно я и прошу форумчан, кто работал с подобными задачами подсказать их.
2. Lasso regression я не делал, посмотрю.
3. Насчет R. При использовании стандартных библиотечных функции R лег намертво еще при 10000 параметров, хотя, возможно, это моя ошибка.

Niklz

попробуй матлаб, он обычно быстрее и стабильнее R, я выше ссылки добавил.
Оставить комментарий
Имя или ник:
Комментарий: