Aspiring Data Science – Telegram
Aspiring Data Science
385 subscribers
465 photos
12 videos
12 files
2.15K links
Заметки экономиста о программировании, прогнозировании и принятии решений, научном методе познания.
Контакт: @fingoldo

I call myself a data scientist because I know just enough math, economics & programming to be dangerous.
Download Telegram
#featureselection #diogenes

Прошлые несколько дней были весьма продуктивны в плане развития отборщика признаков.

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

На винде отмечаю, что с дефолтным бэком (loky) воркеры иногда создаются очень долго, порядка минуты, с полной загрузкой ядер. Хм, надо бы попробовать backend="threading" и njit(nogil=True).

По алгоритмам. Не сработала моя идея с коррекцией формулы Флеврета, на удивление она даёт много ложноположительных срабатываний. Также пришлось придумать решение, которое понижает выгоду от добавления ПАРЫ кандидатов, при условии что один из кандидатов уже подтверждён как предиктор (иначе необоснованно всплывали подобные пары). Ещё выяснилось, что в тестах надёжности перемешивать таргет бывает недостаточно, лучше мешать ещё и кандидатов.

Закрыл практически все базовые задачи по этому проекту. Сегодня добиваю проверку на связь с 2 и больше другими кандидатами, и временно переключаюсь на другой проект. К Диогену вернусь через неделю, надо его будет потестить в скальпинге и в большом сравнении FS-алгоритмов.

Что в нём осталось сделать:

обёртку для совместимости с конвейерами sklearn
мультитаргет
опциональный алгоритм PLD
допстатистика в графовой визуализации (пары, иерархия)

Как я вижу его применение

1) как средство denoscriptive analytics - найти хорошие признаки из тысяч кандидатов, понять, в какую сторону копать дальше, чтобы создать больше хороших фичей (особенно с фишкой мультитаргета)

2) как средство predictive analytics , чтобы в боевом ML конвейере осуществлять прескрининг признаков. Он будет разбивать все признаки на influencing (те, что отобраны mrmr), redundant (те, для которых значимо подтверждена связь с таргетом, но которые не добавляют новой инфы к influencing), possibly_redundant (те, для которых возможна связь с таргетом, но которые не добавляют новой инфы к influencing), и irrelevant. Ну или можно использовать терминологию Boruta: accepted, tentative, rejected.

По идее, вся дальнейшая работа должна вестись со списком influencing. но ещё можно порекомендовать по отдельной модели на списки redundant+possibly_redundant и даже на irrelevant, потому что Диоген отлавливает только ограниченный порядок интеракций (обычно 2-3, дальше совместные распределения начинают вырождаться - тут бы придумать научно обоснованную перенормировку, но это в будущем). Не знаю, смогут ли поймать 4-интеракции типа XOR леса/бустинги, но вдруг. Лично мне пока кажется, что 2-way interactions+influencing only для практических задач будет за глаза.
#featurselection #itmofs

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

Ха-ха, и уже в первом же примере использования у них концептуальная ошибка.

"Here is one of examples of feature selection improving the classification quality:

>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import SGDClassifier
>>> from ITMO_FS.embedded import MOS

>>> X, y = make_classification(n_samples=300, n_features=10, random_state=0, n_informative=2)
>>> sel = MOS()
>>> trX = sel.fit_transform(X, y, smote=False)

>>> cl1 = SGDClassifier()
>>> cl1.fit(X, y)
>>> cl1.score(X, y)
0.9033333333333333

>>> cl2 = SGDClassifier()
>>> cl2.fit(trX, y)
>>> cl2.score(trX, y)
0.9433333333333334
As expected, the quality of the SVGClassifier’s results is impacted by the presence of redundant features in data set. We can see that after using of feature selection the mean accuracy increases from 0.903 to 0.943."
#books

How much I've made with Modeling Mindsets

"Let’s hear the numbers already
The book has gotten 73 reviews, 40 on Amazon and 33 on Leanpub.

I’ve sold 745 ebooks on Leanpub and earned $7,007.94

On Amazon, I’ve sold 900 print books and 296 Kindle ebooks, totaling €6,570.64

In total, I’ve earned €13,013 (=$14,155)

It took me around half a year to write the book. Not full-time since I also finished my Ph.D., did social media and wrote the newsletter. But let’s pretend for now that I worked for 6 months full-time, which would mean I earned €2168.83 (=$2.365,51) per month. Certainly not an amount of money to get rich from, but together with the income from my other books, I can sustain myself financially 🙏 (even though it’s less than I earned in my Ph.D.).

And the great thing about digital assets and books is: They may further generate income down the road. Modeling Mindsets still keeps selling."

https://mindfulmodeler.substack.com/p/how-much-ive-made-with-modeling-mindsets
#python #excel #microsoft

"Microsoft также добавила новую функцию PY, которая позволяет отображать данные Python в ячейках электронной таблицы Excel. Благодаря партнёрству с Anaconda, корпоративным репозиторием Python, популярные библиотеки Python, такие как Pandas, Statsmodels, Seaborn и Matplotlib, будут доступны в Excel. Расчёты Python выполняются в Microsoft Cloud, а результаты возвращаются в таблицу Excel. Пользователи Excel смогут создавать формулы, сводные таблицы и диаграммы на основе данных Python для визуализации тепловых карт, роевых диаграмм и скрипичных графиков.

«Я рад, что интеграция Python и Excel увидела свет, — говорит создатель Python, а ныне заслуженный инженер Microsoft Гвидо Ван Россум (Guido van Rossum), — Я ожидаю, что оба сообщества найдут новые интересные применения в этом сотрудничестве, расширив возможности каждого партнёра. Когда я присоединился к Microsoft три года назад, я и представить себе не мог, что такое возможно»."

https://3dnews.ru/1091868/microsoft-integrirovala-populyarniy-yazik-programmirovaniya-python-v-excel
#ann #karpathy #mlgems

Рецепт работы с нейронками от Андрея Карпатий:

1) Learn the data
2) Create baselines
3) Overfit
4) Regularize
5) Tune
6) Dominate

Удивили вот эти рекомендации:

verify loss @ init. Verify that your loss starts at the correct loss value. E.g. if you initialize your final layer correctly you should measure -log(1/n_classes) on a softmax at initialization. The same default values can be derived for L2 regression, Huber losses, etc.

init well. Initialize the final layer weights correctly. E.g. if you are regressing some values that have a mean of 50 then initialize the final bias to 50. If you have an imbalanced dataset of a ratio 1:10 of positives:negatives, set the bias on your logits such that your network predicts probability of 0.1 at initialization. Setting these correctly will speed up convergence and eliminate “hockey stick” loss curves where in the first few iteration your network is basically just learning the bias.

На них даже ссылаются в учебном примере tensorflow, где в задаче бинарной классификации нейронке с сигмоидой в последнем слое задают начальное смещение равное логарифму доли положительного класса. Я попробовал то же самое на своей задаче, но у меня в последнем softmax, и формулка не сработала. При конвертации в sigmoid лосс нетренерованной модели и правда стал нулём, но обучение это совсем не улучшило. У кого какой с этим опыт?

Ну и на сладенькое.

"Suffering is a perfectly natural part of getting a neural network to work well, but it can be mitigated by being thorough, defensive, paranoid, and obsessed with visualizations of basically every possible thing. The qualities that in my experience correlate most strongly to success in deep learning are patience and attention to detail.

Hyper-parameter optimization. There is a large number of fancy bayesian hyper-parameter optimization toolboxes around and a few of my friends have also reported success with them, but my personal experience is that the state of the art approach to exploring a nice and wide space of models and hyperparameters is to use an intern :). Just kidding.

Ensembles. Model ensembles are a pretty much guaranteed way to gain 2% of accuracy on anything. If you can’t afford the computation at test time look into distilling your ensemble into a network using dark knowledge.

Leave it training. I’ve often seen people tempted to stop the model training when the validation loss seems to be leveling off. In my experience networks keep training for unintuitively long time. One time I accidentally left a model training during the winter break and when I got back in January it was SOTA (“state of the art”)."

http://karpathy.github.io/2019/04/25/recipe/#2-set-up-the-end-to-end-trainingevaluation-skeleton--get-dumb-baselines
2
#tensorflow #bollocks

Больше 2 лет юзеры просят мудаков из команды tensorflow предоставить способ освобождения памяти GPU без завершения процесса. Конечно же, я в 2023-м налетел на эту проблему.

https://github.com/tensorflow/tensorflow/issues/36465
#astronomy

"На основе новых данных о поведении людей в длительных экспедициях, включая миссии на Международной космической станции, учёные из Университета Джорджа Мейсона (США) рассчитали минимальное количество астронавтов, необходимое для создания и поддержания колонии на Марсе. Научная статья по теме исследования пока не прошла рецензирование и находится на сайте arXiv. Однако свежие выводы учёных идут в разрез со всеми предыдущими исследованиями на эту тему.

Учёные считают, что для выживания колонии человечества на Марсе необходимо минимум 22 человека. Эта группа закроет все потребности базы в вопросах значительной автономии, включая добычу и переработку воды на Марсе в кислород для дыхания и водород для топлива. Психическая устойчивость астронавтов играет при этом главенствующую роль. «Невротики» быстро погибают, тогда как приятные в общении колонисты с эмпатией (с умением сопереживать и понимать чувства коллег) гарантируют выживание для небольшой горстки людей на негостеприимной Красной планете.

Большой вопрос, а нужны ли на Марсе людские поселения? На поверхности планеты высочайший уровень радиации, который загонит колонистов под «землю» — в норы, что не добавит психологической устойчивости в отношении поселенцев друг к другу.

Учёные запускали компьютерную симуляцию длительностью 28 виртуальных лет для групп колонистов от 10 до 170 человек. При всей совокупности заданных условий, а также с учётом комбинаций четырёх основных типов характеров людей, машина утверждает, что 22 человека вполне достаточно, чтобы колония на Марсе долго оставалась жизнеспособной."

https://3dnews.ru/1091913/dlya-vigivaniya-kolonii-lyudey-na-marse-dostatochno-22-priyatnih-v-obshchenii-astronavtov
👍1
#nvidia #stocks

"Квартальная отчётность NVIDIA будет опубликована завтра, а с начала прошлой недели курс акций компании уже вырос на 12 % в ожидании воодушевляющих результатов. По итогам вчерашней торговой сессии курс опустился на 2,77 % до $456,68 за акцию, но в ходе торгов он успел достичь исторического максимума на отметке $481,87. Всего же с начала этого года акции NVIDIA выросли в цене на 219 %."

https://3dnews.ru/1091896/aktsii-nvidia-utroilis-v-tsene-s-nachala-goda-i-na-etoy-nedele-obnovili-istoricheskiy-maksimum
#numba #gpt #optimization #python #ai

Такая история: в процессе оптимизации питоновской функции с помощью numba выяснилось, что njit-нуть её не получится - она использует модуль itertools для получения списка комбинаций индексов массива. Думаю, была, не была, попросил чат ГПТ сгенерить нативный питоновский код для combinations без модуля itertools. ИИ справился. Потом попросил функцию модифицировать чтоб она njit-тилась. И это без проблем выполнилось, и сразу рабочий код. Будущее уже наступает. Или наступило.

import numpy as np
from numba import njit

@njit
def generate_combinations_recursive_njit(sequence, r):
if r == 0:
return np.empty((1, 0), dtype=sequence.dtype)
if sequence.size == 0:
return np.empty((0, r), dtype=sequence.dtype)

first, rest = sequence[0], sequence[1:]

without_first = generate_combinations_recursive_njit(rest, r)
with_first = generate_combinations_recursive_njit(rest, r - 1)

result = np.empty((without_first.shape[0] + with_first.shape[0], r), dtype=sequence.dtype)

result[:without_first.shape[0], :] = without_first
for i in range(with_first.shape[0]):
result[i + without_first.shape[0], 0] = first
result[i + without_first.shape[0], 1:] = with_first[i, :]

return result

sequence = np.arange(4)
r = 2

combinations_array = generate_combinations_recursive_njit(sequence, r)
combinations_list = sorted(combinations_array.tolist())
print(combinations_list)


A Skynet funding bill is passed in the United States Congress, and the system goes online on August 4, 1997, removing human decisions from strategic defense. Skynet begins to learn rapidly and eventually becomes self-aware at 2:14 a.m., EDT, on August 29, 1997.
#vikram #astronomy

"Индийская миссия «Чандраян-3» (Chandrayaan-3) вписала своё имя в историю покорения космоса, успешно произведя мягкую посадку возле южного полюса Луны. Всего несколько дней назад в этом регионе потерпел неудачу российский аппарат «Луна-25». Индия стала четвёртой страной, совершившей мягкую посадку на Луне, и первой, которая сделала это на Южном полюсе — малоисследованной области, которая предположительно содержит водяной лёд.

Миссия «Чандраян-3» стартовала с площадки Космического центра им. Сатиша Дхавана (Satish Dhawan Space Centre) 14 июля. 5 августа космический корабль вышел на лунную орбиту, 17 августа от него отделился посадочный модуль «Викрам» (Vikram) с луноходом «Прагъян» (Pragyan). Это уже вторая попытка Индии произвести посадку аппарата на Луне — в 2019 году аппарат миссии «Чандраян-2» врезался в её поверхность.

На следующем этапе миссии «Чандраян-3» будет развёрнут луноход «Прагъян», который займётся исследованием местности в течение одного лунного дня (14 земных) и проведением научных экспериментов — в первую очередь это будет спектрометрия, которая поможет определить состав поверхности Луны."

https://www.youtube.com/watch?v=x5hIrH908ZU

https://3dnews.ru/1091928/apparat-indiyskoy-missii-chandrayan3-uspeshno-sel-v-rayone-yugnogo-polyusa-luni
#featureselection

Примечательна планетарная модель групп коррелирующих факторов.

https://www.youtube.com/watch?v=P7PhGneBFcI
#python #pandas #numpy #codegems

В очередной раз убедился, как паршиво местами "оптимизирован" пандас.
#windows #tricks

СКМ, блд ) Что ж вы, и правда, раньше молчали?

"Оказывается, всё это время можно было заблокировать прыгающие процессы в диспетчере задач Windows 7/10/11 с помощью Ctrl.

«Знаете ли вы, что если вы удерживаете Ctrl, то это приостанавливает обновление диспетчера задач и означает, что имена процессов не перемещаются и их легче выбирать, когда вы сортируете нужные процессы по использованию различных ресурсов ПК», — сообщил менеджер Microsoft Джен Джентльман.

Почему он решил рассказать об этом только сейчас — загадка."

А вообще, в этой истории прекрасно всё. Джен(нифер) вроде женское имя. Но фамилия Джентльмен? Это псевдоним? )
#featureselection #entropy #histogram #binning #diogenes #astropy

Один важнейший аспект своего отборщика признаков я совершенно упустил - это построение гистограмм для оценки энтропии и взаимной информации. Для улавливания связей на этапе тестирования мне хватало равномерного разбиения (непрерывной переменной) на N бинов, я просто для быстроты разработки взял KbinsDiscretizer с параметром strategy='uniform' и n_bins=4. Но даже там есть ещё варианты quantile и kmeans, их я думал потестить позже. Однако при попытке различить коллинеарные факторы на более "оригинальные" и "зависимые"/"зашумлённые" такого простого подхода перестало хватать. Да и кто сказал, что хорошо использовать одно и то же число бинов для всех факторов?

Я вспомнил про формулы Стёрджеса и прочие, довольно много вариаций оказалось реализовано в нампае. Астропай порадовал наличием расчёт байесовской гистограммы с переменным размером бина. Я заценил на своих данных, посмотрим, какая будет дискриминирующая способность всех этих подходов.
Forwarded from DLStories
Увидела в одном из чатов обсуждение AGI (да, опять) и того, погубит ли оно в конце концов человечество. Одна из причин страха такого развития событий — наблюдения, что большие модели типа GPT-4 часто начинают "внезапно" демонстрировать способности, которых у моделей поменьше, кажется, нет и в помине. Ну, например, если обучить языковую модель с количеством параметров 10B, то она, внезапно, начинает уметь в zero-shot question answering или отгадывание загадок. А у моделей с меньшим количеством параметров, сколько их ни обучай, таких способностей не возникает.
(на всякий случай: количество 10B и примеры задач взяты тут с потолка. Надеюсь, общая идея понятна)

Этот эффект называется "emerging abilities of Large Language Models". Из-за него кажется, что большое количество параметров каким-то магическим образом позволяет модели развить умение решать сложные задачи, развить абстрактные высокоуровневые способности типа reasoning, abstract thinking, понимание связей, юмора и т.п. И если эту мысль экстраполировать, то появляется идея, что при еще большем увеличении количества параметров модели у нее также внезапно может появиться и условное "сознание". На этом и основываются многие страхи AGI-апокалипсиса.

Так вот. Это все напомнило мне одну статью, про которую я уже давно хотела написать в канал, но как-то руки не доходили. Называется она "Are Emergent Abilities of Large Language Models a Mirage?". В ней авторы говорят, что эффект emerging abilities — это мираж. И на самом деле его нет (или почти нет). А способности к reasoning, abstract thinking и т.п. у модели появляются не внезапно, а очень даже предсказуемо. Вся проблема в том, что мы неправильно считаем метрики.

Давайте пример. Возьмем задачу "отгадай загадку". Модели подается на вход загадка на естественном языке. В ответ модели нужно выдать ответ тоже на естественнос языке.
В качестве метрики качества ответов LLM на такой задаче обычно берется exact string match. Т.е. metric=1, если модель ввыдала текст, полностью совпадающий с правильным ответом, и metric=0 в любом остальном случае. И вот если смотреть на то, как меняется эта метрика для моделей с разным количеством обучаемых параметров, тут как раз и наблюдается тот самый внезапный эффект. Маленькие модели получают acc = eps, а модели тяжелее условных 10B параметров внезапно показывают acc>0.5.

В чем тут проблема? А в том, что метрика супердискретна. Она не учитывает то, как при увеличении параметров модели меняется распределение вероятностей модели на ответы. И на самом деле дела обстоят так: при увеличении размера модели она научается давать все больше вероятности адекватным вариантам ответа на загадку, и все меньше — бредовым. Короче, на самом деле учится все лучше и лучше решать задачу. И при каком-то значении размера модели она становится способна давать настолько много вероятности правильным ответам, что нашу дискретную метрику exact string match "прорывает" от почти 0 сразу до большого значения.

Короче, мысль такова: на самом деле способности по большинству задач растут вполне предсказуемо с ростом размера моделей. Заменив дискретные метрики на более непрерывные, авторы этой статьи показали, что по крайне мере на 92% задач из Big Bench никакого "внезапного" прорыва у больших моделей не происходит. Качество на них растет плавно и предсказуемо при увеличении размера моделей.

А еще авторы показали, что такой же эффект "emerging ability" можно смоделировать и на обычных автоэнкодерах на датасете CIFAR100. Нужно только поменять метрику качества на чуть более дискретную, чем обычно используется (об этом в разделе 5 статьи)

Вот так. Конечно, этот результат не означает, что у моделей точно никаких "emerging abilities" быть не может, и сознание она никак не получит. Нет. Но это, как минимум, повод задумываться над всеми "странными" результатами, которые получают исследователи, и лучше их изучать. А не просто экстраполировать и сразу делать страшные выводы.

📄Статья