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 #featureimportance

Оказывается, к "встроенной" важности признаков, по кр. мере, у деревянных моделей, нужно относиться с недоверием. Если модель оверфитнулась, большую внутреннюю важность могут запросто получить даже случайные признаки, особенно если у них высокая кардинальность. С другой стороны, такие оверфитнутые модельки вовсе не бесполезны, и истинную ценность признаков из них можно извлечь, используя holdout set и перестановочную важность. Но и она страдает от наличия мультиколлинеарности:

"When features are collinear, permutating one feature will have little effect on the models performance because it can get the same information from a correlated feature. One way to handle multicollinear features is by performing hierarchical clustering on the Spearman rank-order correlations, picking a threshold, and keeping a single feature from each cluster."
#astronomy

Деградация во всём.

"«Луна-25» стала первой российской миссией к Луне за последние полвека. Запуск произошёл 11 августа с космодрома Восточный в Амурской области. Станция планировалась к посадке на Луну с 21 по 24 августа, а 16 августа успешно вышла на окололунную орбиту. Несмотря на кратковременное существование, «Луна-25» успела провести ряд исследований, включая измерение потоков гамма-лучей и нейтронов. Последний аналогичный проект, «Луна-24», был реализован советскими учёными в 1976 году. Тогда аппарат привёз на Землю 170 граммов лунного грунта, в котором содержалась вода.

Крушение «Луна-25» стало напоминанием о сложностях космических исследований и неизвестности далёкого космоса. Несмотря на технологические достижения, изучение Луны остаётся сложной и рискованной задачей. Надежда на успешное освоение ближайшего спутника Земли сохраняется, и новые миссии, несомненно, будут запущены в ближайшем будущем."

https://3dnews.ru/1091771/missiya-luna-25-zavershilas-krusheniem-roskosmos-podtverdil-stolknovenie
#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, их я думал потестить позже. Однако при попытке различить коллинеарные факторы на более "оригинальные" и "зависимые"/"зашумлённые" такого простого подхода перестало хватать. Да и кто сказал, что хорошо использовать одно и то же число бинов для всех факторов?

Я вспомнил про формулы Стёрджеса и прочие, довольно много вариаций оказалось реализовано в нампае. Астропай порадовал наличием расчёт байесовской гистограммы с переменным размером бина. Я заценил на своих данных, посмотрим, какая будет дискриминирующая способность всех этих подходов.