Подтвердить что ты не робот

Использование генетического алгоритма для преодоления различных наборов данных размера в модели

Итак, я понимаю, что вопрос, который я задаю здесь, большой и сложный.

Потенциальное решение для разновидностей размеров

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

Предлагаемый метод предполагает использование генетического алгоритма для изменения двух чисел, определяющих взаимосвязь между размером набора данных, составляющим скорость implied strike, и процент используемого implied strike, при этом цель модели максимизирует гомологию числа 1 в двух столбцах следующих csv. (ультра упрощенная но, надеюсь, демонстрирует принцип)

Примеры данных

Date,PupilName,Unique class,Achieved rank,x,y,x/y,Average xy
12/12/2012,PupilName1,UniqueClass1,1,3000,9610,0.312174818,0.08527
12/12/2012,PupilName2,UniqueClass1,2,300,961,0.312174818,0.08527
12/12/2012,PupilName3,UniqueClass1,3,1,3,0.333333333,0.08527
13/12/2012,PupilName1,UniqueClass2,1,2,3,0.666666667,0.08527
13/12/2012,PupilName2,UniqueClass2,2,0,1,0,0.08527
13/12/2012,PupilName3,UniqueClass2,3,0,5,0,0.08527
13/12/2012,PupilName4,UniqueClass2,4,0,2,0,0.08527
13/12/2012,PupilName5,UniqueClass2,5,0,17,0,0.08527
14/12/2012,PupilName1,UniqueClass3,1,1,2,0.5,0.08527
14/12/2012,PupilName2,UniqueClass3,2,0,1,0,0.08527
14/12/2012,PupilName3,UniqueClass3,3,0,5,0,0.08527
14/12/2012,PupilName4,UniqueClass3,4,0,6,0,0.08527
14/12/2012,PupilName5,UniqueClass3,5,0,12,0,0.08527
15/12/2012,PupilName1,UniqueClass4,1,0,0,0,0.08527
15/12/2012,PupilName2,UniqueClass4,2,1,25,0.04,0.08527
15/12/2012,PupilName3,UniqueClass4,3,1,29,0.034482759,0.08527
15/12/2012,PupilName4,UniqueClass4,4,1,38,0.026315789,0.08527
16/12/2012,PupilName1,UniqueClass5,1,12,24,0.5,0.08527
16/12/2012,PupilName2,UniqueClass5,2,1,2,0.5,0.08527
16/12/2012,PupilName3,UniqueClass5,3,13,59,0.220338983,0.08527
16/12/2012,PupilName4,UniqueClass5,4,28,359,0.077994429,0.08527
16/12/2012,PupilName5,UniqueClass5,5,0,0,0,0.08527
17/12/2012,PupilName1,UniqueClass6,1,0,0,0,0.08527
17/12/2012,PupilName2,UniqueClass6,2,2,200,0.01,0.08527
17/12/2012,PupilName3,UniqueClass6,3,2,254,0.007874016,0.08527
17/12/2012,PupilName4,UniqueClass6,4,2,278,0.007194245,0.08527
17/12/2012,PupilName5,UniqueClass6,5,1,279,0.003584229,0.08527

Итак, я создал крошечный набор данных модели, в котором содержатся некоторые хорошие примеры того, где мои текущие методы не оправдываются, и как я чувствую, что генетический алгоритм может быть использован для устранения этого. Если мы посмотрим в наборе данных выше, он содержит 6 уникальных классов, конечной целью алгоритма является создание максимально возможного соответствия между рангами скорректированных x/y и achieved rank в столбце 3 (нулевая привязка). В uniqueclass1 мы имеем два идентичных значения x/y, теперь они являются сравнительно большими значениями x/y, если вы сравниваете их со средним значением (обратите внимание, что среднее не вычисляется из этого набора данных), но было бы здравым смыслом ожидать, что 3000/9610 является более значительным и, следовательно, более вероятно, имеет achieved rank of 1, чем 300/961. Поэтому я хочу сделать adjusted x/y для преодоления этих различий в размерах данных, используя логарифмическое отношение роста, определяемое уравнением:

adjusted xy = ((1-exp(-y*α)) * x/y)) + ((1-(1-exp(-y*α)))*Average xy)

Где α - единственное динамическое число

Если я могу немного объяснить свою логику и открыть себя (надеюсь) конструктивных критиков. На приведенном ниже графике показана зависимость экспоненциального роста между размером набора данных и% x/y, вносимым в скорректированный x/y. По существу, как сказано выше, при увеличении набора данных увеличивается процент исходного x/y, используемого в adjusted x/y. Независимо от того, какой процент остался, получается среднее значение xy. Гипотетически может быть 75% x/y и 25% average xy для 300/961 и 95%/5% для 3000/9610, создавая скорректированный x/y, который наглядно демонстрирует

Exponential growth relationship between size of the data set and the % of x/y contributing to the adjusted x/y

Для справки о понимании снижения α будет создано следующее соотношение, в котором более крупный набор данных будет требоваться для достижения того же "% от внесенного в него"

enter image description here

Нарастающее увеличение α приведет к следующему соотношению, когда меньший набор данных будет требоваться для достижения того же "% от xy Contributed"

enter image description here

Итак, я объяснил свою логику. Я также открыт для фрагментов кода, чтобы помочь мне преодолеть эту проблему. Я планирую сделать множество генетических/эволюционных алгоритмов в будущем и действительно смогу использовать рабочий пример, чтобы разобраться и поиграть, чтобы помочь понять, как использовать такие возможности python. Если требуется дополнительная информация или дальнейшее разъяснение проблемы или методов, пожалуйста, спросите, я действительно хочу решить эту проблему и будущие проблемы такого рода.

Итак, после долгих дискуссий о методах, доступных для преодоления представленной здесь проблемы, я пришел к выводу, что лучшим методом будет генетический алгоритм для итерации α, чтобы максимизировать гомологию/соответствие между рангами скорректированного x/y и достигнутый ранг в столбце 3. Было бы очень полезно, если кто-нибудь сможет помочь в этом отделе?

Итак, чтобы уточнить, этот пост больше не является дискуссией о методологии

Я надеюсь, что кто-то может помочь мне создать генетический алгоритм, чтобы максимизировать гомологию между результатами уравнения

adjusted xy = ((1-exp(-y*α)) * x/y)) + ((1-(1-exp(-y*α)))*Average xy)

Где adjusted xy применяется к каждой строке csv. Максимизация гомологии может быть достигнута путем минимизации разницы между рангами adjusted xy (где ранг - только для каждого Unique class) и Achieved rank. Сведение к минимуму этого значения позволило бы максимизировать гомологию и существенно решить проблему, представленную мне с различными наборами данных. Если вам нужна дополнительная информация, пожалуйста, спросите меня, я проверяю это сообщение примерно 20 раз в день на данный момент, поэтому должен отвечать довольно быстро. Большое спасибо НЕМЕДЛЕННО.

4b9b3361

Ответ 1

Проблема, с которой вы сталкиваетесь, звучит для меня как "Bias Variance Dilemna" с общей точки зрения. Короче говоря, более точная модель благоприятствует дисперсии (чувствительность к изменению в одном наборе тренировок), более общая модель благоприятствует смещению (модель работает для многих наборов тренировок)

Могу ли я предложить не сосредоточиться на GA, а посмотреть на Instance Base Learning и передовые методы регрессии. Страница Andrew moore в CMU является хорошей точкой входа.

И особенно эти слайды.

[EDIT]

После второго чтения, вот мое второе понимание:

  • У вас есть набор примерных данных с двумя связанными атрибутами X и Y.
  • Вы не хотите, чтобы X/Y доминировал, когда Y мало, (считается менее представительным).
  • Как следствие, вы хотите "взвешивать" примеры с адаптированным значением adjust_xy.
  • Вы хотите, чтобы adjust_xy был связан с третьим атрибутом R (ранг). Связанные, например, для каждого класса, adjust_xy сортируются как R.

  • Чтобы сделать это, вы предложите поставить его как проблему оптимизации, ищите PARAMS для данной функции F (X, Y, PARAMS) = adjust_xy.

  • С ограничением, что D = Расстояние (достигнутый ранг для этого класса, ранг adjust_xy для этого класса) минимален.

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

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

Как только это сказало, я думаю, вы точно знаете, как работает GA. Вы должны

  • определяют содержание хромосомы: это, по-видимому, ваш альфа-параметр.
  • определить подходящую фитнес-функцию

Функция пригодности для одного человека может быть суммой расстояний по всем примерам набора данных.

Поскольку вы имеете дело с реальными значениями, другие метаэвристики, такие как стратегии эволюции (ES) или имитируемое отжиг, могут быть более адаптированы, чем GA.

Поскольку решение задач оптимизации является интенсивным, вы можете в конечном итоге рассмотреть C или Java вместо Python. (поскольку фитнес, по крайней мере, будет интерпретироваться и, следовательно, будет стоить много).

В качестве альтернативы я бы посмотрел на использование Y в качестве веса для некоторого контролируемого алгоритма обучения (если контролируемое обучение является целью).

Ответ 2

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

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

  • Тот факт, что в некоторых случаях числа попадают в "непригодные для использования случаи", также может быть до уровня выбросов. То есть измерения, которые являются "вне границ" по ряду причин, и которые вам нужно будет найти, чтобы либо исключить их, либо изменить их. Но это сильно зависит от контекста проблемы.

  • "Ставки забастовки" сами по себе не помогут, но это, возможно, шаг в правильном направлении. В любом случае вы не можете сравнивать ставки забастовки, если они поступают из образцов разного размера, как вы это выяснили. Если ваша проблема заключается в том, чтобы определить размер вашей выборки, чтобы ваши результаты соответствовали определенной точности, я бы рекомендовал вам взглянуть на Статистическая мощность и как влияет на него размер размера выборки. Но все же, чтобы определить размер выборки, вам нужно знать немного больше о ваших данных, что возвращает нас к пункту № 1 о присущих изменениях.

  • Поэтому моя попытка ответить такова: если я правильно понял ваш вопрос, вы имеете дело с проблемой классификации, в которой вы пытаетесь присвоить ряд предметов (пациентов) ряду классов ( типы рака) по свидетельству некоторых признаков (наличие генетических маркеров или частота их появления или любой другой величины) в любом случае об этих предметах. Но некоторые функции могут не существовать для всех элементов или, есть основная группа функций, но может быть еще несколько, которые не появляются все время. Вопрос в том, какой классификатор вы используете для достижения этого? Логистическая регрессия была упомянута ранее и не помогла. Поэтому, я бы предположил, что это будет для наивного байесовского классификатора. Классификатор может обучаться с наборами данных, которые вы использовали для получения "ставок старта", которые будут обеспечивать априорные вероятности. Когда классификатор "работает", он будет использовать функции новых данных, чтобы построить вероятность того, что пациент, предоставивший эти данные, должен быть назначен каждому классу. Возможно, более распространенным примером такого классификатора является спам-детекторы электронной почты, где вероятность того, что письмо является спамом, оценивается по наличию конкретных слов в электронном письме (и подходящем учебном наборе данных, который, конечно же, является хорошей отправной точкой).

  • Теперь, с точки зрения проверки этого практически (и поскольку ваш пост отмечен тегами, связанными с python:)), я бы рекомендовал Weka. Weka содержит много связанных функций, включая bootstrapping, которые могут потенциально помочь вам в различиях в размерах наборов данных. Хотя Weka - Java, привязки существуют и для Python. Я бы определенно дал ему уйти, пакет Weka, книга и сообщество очень полезны.

Ответ 3

Нет. Не используйте генетический алгоритм.

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

Вы взяли вопрос в логово программистов. Это не место для этого. Мы решаем головоломки.

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

Возьмите проблему, где она есть, и попросите статистиков вместо этого.

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

Если вы хотите сделать какое-то программирование, я бы предложил вам взять простейшую линейную модель, добавить некоторый случайный шум и сделать пару симуляторов для популяции, например, ваших субъектов. Посмотрите, похожи ли данные на данные, на которые вы смотрите, или если они вообще "выглядят" разными, и в этом случае на самом деле происходит что-то нелинейное (и, возможно, интересное) движение слева.

Ответ 4

Однажды я столкнулся с подобной проблемой (как и в случае подобных проблем), в которой было много классов и высокая дисперсия функций в каждой точке данных. Я лично использовал классификатор Random Forest (который я написал на Java). Поскольку ваши данные весьма разнообразна и поэтому трудно моделировать, вы можете создать несколько лесов из разных случайных выборок вашего большого набора данных и поместить верхний слой управления для классификации данных по всем лесам, а затем взять лучший результат. Я не пишу python, но я нашел эту ссылку http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html который может дать вам что-то, с чем можно играть.

Ответ 5

Следуя бритве Occam, вы должны выбрать более простую модель для небольшого набора данных и, возможно, захотите перейти на более сложную модель по мере роста вашего набора данных.

Нет [хороших] статистических тестов, которые показывают вам, если данная модель, в отдельности, является хорошим предиктором ваших данных. Вернее, тест может сказать вам, что данная модель подходит для N, но вы никогда не можете сказать, что приемлемое значение N.

Таким образом, создайте несколько моделей и выберите один с лучшим компромиссом прогностической мощности и простоты, используя критерий информации Akaike. Он имеет полезные свойства и не слишком сложно понять.:)

Конечно, есть другие тесты, но AIC должен начать работу.

Для простого теста ознакомьтесь с p-value