Aspiring Data Science – Telegram
Aspiring Data Science
386 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
#hpo #hpt #ensembling #diogenes #todo #metalearning

Требования к тюнеру:

В реальных задачах есть конкретное железо и бюджет времени на обучение. Соответственно, планировщик должен понимать, какое время займёт обучение каждого кандидата и сколько потребует ресурсов (RAM, VRAM, диска для хранения модели). В идеале, если пользователь задал совсем жёсткое ограничение, планировщик должен рассчитать сэмплирование и обучить одну "предполагаемую лучшую" модель на этом сэмпле, использовав (почти) всё отведённое время.

То есть, от кандидатов надо собирать не только достигнутые на CV разнообразные ML-метрики, но и затраченные ресурсы CPU, GPU, памяти, диска. (add resulting model size as a factor. in xgboost, max_cat_threshold must be varied btw 0 and max cat features cardinality! # affects model size heavily when high cardinality cat features r present! ADD HIGH CARD dataset to the testing suite!)

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

Значит, мета-модель должна прогнозировать среднюю "непохожесть" ответов кандидата на ответы всех остальных кандидатов (хотя бы внутри группы данного алгоритма).
Тут есть тонкий момент, навеянный идеями ensemble selection: возможно, ещё надо пытаться прогнозировать, сможет ли данный кандидат составить "лучшее в группе простое усреднение" с каким-то другим кандидатом. Типа, можно быть довольно похожим на остальных, но вот прям засиять с кем-то в паре.


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

Учёт multi-fidelity. Если данные представлены таблицей с миллионами строк, конечно, нет смысла тестировать всех кандидатов на полном датасете. В идеале "пристрелку" хорошо бы вести на более разумном сэмпле, скажем, 10k, ну или хотя бы 100k строк. Но тогда надо понимать, а как для одних и тех же HP соотносятся результаты на полной и уменьшенных версиях датасета, и можно ли последние использовать для оценки первых (непосредственно в виде рангов, или через отдельную ML-модель).

Значит, при сборе мета-признаков надо их собирать как для полного датасета, так и для его "уменьшенных копий", при точно тех же HP (сэмплирование надо фиксировать для воспроизводимости).
#ghosts

Ахаха, блэт, этот Егор просто Крамник в мире айтишников!! )) А ты сколько коммитов сделал за год, сволочь такая, не призрак ли ты?! Я слежу за тобой!

https://blog.stackademic.com/1-in-10-silicon-valley-engineers-are-ghost-engineer-earning-300k-for-doing-almost-nothing-474b667da09d
🤡1
#featureengineering #pysr #symbolicregression

На самом деле, подход символьной регрессии перекликается с моей идеей использования информационно-теоретических метрик.

Читаю сейчас статью pysr, у них интересный подход с генетиком над признаками, отобранными бустингом.

Очень хочу сравнить их результаты со своими на том же игрушечном примере.

Для естественных наук приложение прямое, для машинного обучения, естественно, приложение может быть в создании новых хороших признаков.

Ps. ДА! pysr отлично справился с моим примером!

import numpy as np, pandas as pd

n =100_000
a = np.random.rand(n)
b = np.random.rand(n)
c = np.random.rand(n)
d = np.random.rand(n)
e = np.random.rand(n)
f = np.random.rand(n)

y=a**2/b+f/5+np.log(c)*np.sin(d)

df = pd.DataFrame(
{
"a": a,
"b": b,
"c": c,
"d": d,
"e": e,

}
)

from pysr import PySRRegressor

model = PySRRegressor(
maxsize=20,
niterations=40, # < Increase me for better results
binary_operators=["+", "*"],
unary_operators=[
"cos",
"exp",
"log",
"sin",
"inv(x) = 1/x",
# ^ Custom operator (julia syntax)
],
extra_sympy_mappings={"inv": lambda x: 1 / x},
# ^ Define operator for SymPy as well
elementwise_loss="loss(prediction, target) = (prediction - target)^2",
# ^ Custom loss function (julia syntax)
)

model.fit(df, y)

model.get_best()


после ~6 минут работы

complexity 14
loss 0.003329
score 0.947915
sympy_format a**2/b + log(c)*sin(d) + 0.09998281
👍2
#featureengineering #pysr #symbolicregression #todo

Библиотека pysr заслуживает пристального внимания. Она настолько хорошо сделана, глубока и функциональна, что просто загляденье.

Полностью готова к внедрению в бой, поддерживает оптимизации, кластера, логгинг в тензорборд, пре-отбор признаков с помощью ML, сохранение прогресса в файл и тёплый старт.

Зацените функциональность и количество опций:

model = PySRRegressor(
populations=8,
# ^ Assuming we have 4 cores, this means 2 populations per core, so one is always running.
population_size=50,
# ^ Slightly larger populations, for greater diversity.
ncycles_per_iteration=500,
# ^ Generations between migrations.
niterations=10000000, # Run forever
early_stop_condition=(
"stop_if(loss, complexity) = loss < 1e-6 && complexity < 10"
# Stop early if we find a good and simple equation
),
timeout_in_seconds=60 * 60 * 24,
# ^ Alternatively, stop after 24 hours have passed.
maxsize=50,
# ^ Allow greater complexity.
maxdepth=10,
# ^ But, avoid deep nesting.
binary_operators=["*", "+", "-", "/"],
unary_operators=["square", "cube", "exp", "cos2(x)=cos(x)^2"],
constraints={
"/": (-1, 9),
"square": 9,
"cube": 9,
"exp": 9,
},
# ^ Limit the complexity within each argument.
# "inv": (-1, 9) states that the numerator has no constraint,
# but the denominator has a max complexity of 9.
# "exp": 9 simply states that `exp` can only have
# an expression of complexity 9 as input.
nested_constraints={
"square": {"square": 1, "cube": 1, "exp": 0},
"cube": {"square": 1, "cube": 1, "exp": 0},
"exp": {"square": 1, "cube": 1, "exp": 0},
},
# ^ Nesting constraints on operators. For example,
# "square(exp(x))" is not allowed, since "square": {"exp": 0}.
complexity_of_operators={"/": 2, "exp": 3},
# ^ Custom complexity of particular operators.
complexity_of_constants=2,
# ^ Punish constants more than variables
select_k_features=4,
# ^ Train on only the 4 most important features
progress=True,
# ^ Can set to false if printing to a file.
weight_randomize=0.1,
# ^ Randomize the tree much more frequently
cluster_manager=None,
# ^ Can be set to, e.g., "slurm", to run a slurm
# cluster. Just launch one noscript from the head node.
precision=64,
# ^ Higher precision calculations.
warm_start=True,
# ^ Start from where left off.
turbo=True,
# ^ Faster evaluation (experimental)
extra_sympy_mappings={"cos2": lambda x: sympy.cos(x)**2},
# extra_torch_mappings={sympy.cos: torch.cos},
# ^ Not needed as cos already defined, but this
# is how you define custom torch operators.
# extra_jax_mappings={sympy.cos: "jnp.cos"},
# ^ For JAX, one passes a string.
)


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

И хорошо бы её потестить для FE, на каких-то разумных настройках глубины/сложности/времени. И датасетах с в т.ч. большим количеством фичей.
👍2
#energy

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

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

https://3dnews.ru/1118710/nesmotrya-na-risk-zemletryaseniy-geotermalnuyu-energiyu-gdyot-svetloe-budushchee-schitayut-uchyonie
#business #skype

Ну не знаю, купить сервис за 8 лярдов и потом закрыть?

"Сервис одноранговых видеозвонков Skype был создан Никласом Зеннстрёмом (Niklas Zennström), Янусом Фриисом (Janus Friis) и четырьмя другими эстонскими разработчиками. После запуска в 2003 году Skype приобрёл широкую популярность. К осени 2005 года сервис привлек 40 млн активных пользователей и был приобретён eBay за $2,6 млрд. В 2011 году Microsoft приобрела у eBay сервис за $8,5 млрд.

Во время пандемии Skype окончательно уступил позиции Zoom. И когда Microsoft прекратила поддержку программы-клиента Skype for Business в 2021 году, дни Skype были уже сочтены. Microsoft отказалась сообщить последние данные о количестве пользователей Skype и заявила, что сокращений в команде специалистов в связи с переходом на Teams не будет. Она добавила, что у Teams около 320 млн активных пользователей в месяц.

«Skype стал неотъемлемой частью формирования современных коммуникаций и создания бесчисленных значимых моментов, и мы гордимся тем, что стали частью этого пути», — сообщили в Microsoft."

https://3dnews.ru/1119037/microsoft-podtverdila-zakritie-skype-v-mae-ego-zamenit-teams
👍1
Писали ли Вы за последние полгода хоть одно сообщение в skype?
Anonymous Poll
15%
Да
85%
Нет
#religion

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

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