Data Science | Machinelearning [ru] – Telegram
Data Science | Machinelearning [ru]
20.1K subscribers
632 photos
39 videos
29 files
3.52K links
Все о Data Science, машинном обучении и искусственном интеллекте: от базовой теории до cutting-edge исследований и LLM.

По вопросам рекламы или разработки - @g_abashkin

РКН: https://vk.cc/cJPGXD
Download Telegram
​​Метод опорных векторов (Support-Vector Machine)

Техника SVM применяется для классификации объектов. Для этого используется концепция векторных пространств — математических структур, объединяющих множество векторов, с которым можно проводить операции сложения, вычитания и умножения.
Для решения этой задачи каждая переменная (фактически, каждый объект, который нужно отнести к тому или иному классу) выражается в виде точки в n-мерном пространстве, где n — это количество характеристик, которыми вы располагаете. Координаты каждой точки обозначают соответствующие характеристики. Далее алгоритм с помощью метода опорных векторов находит гиперплоскость, которая пролегает точно между группами наших объектов.
Поскольку таких гиперплоскостей может быть больше одной, необходимо определить такую, которая пролегает на максимально далеком расстоянии от каждого объекта. Очевидно, это обеспечивает наилучшую классификацию.
Алгоритм, записанный на "понятном" компьютеру языке программирования, называется...

Исполнителем алгоритмов - 2
👍 1%
Программой - 153
👍👍👍👍👍👍👍👍 94%
Листингом - 5
👍 3%
Текстовкой - 2
👍 1%
Протоколом алгоритма - 1
👍 1%
👥 163 человека уже проголосовало.
⬆️ Правильный ответ ⬆️

Алгоритм, записанный на «понятном» компьютеру языке программирования, называется ПРОГРАММОЙ
This media is not supported in your browser
VIEW IN TELEGRAM
Новый метод позволяет внедрять ИИ в бытовые приборы


Исследователи из Университета Юты в США представили модель, которая внедряет искусственный интеллект (ИИ) в любое устройство. Для этого не нужны сложные вычисления.
Новая модель позволит исследователям внедрять искусственный интеллект в бытовые приборы, которые работают с помощью встроенных технологий для взаимодействия друг с другом или с внешней средой («интернет вещей»). По предварительным данным, приборы повышают безопасность данных и их энергоэффективность.
​​Метод главных компонент (Principal Component Analysis, PCA)
Очень часто эксперту по Data Science приходится работать с наборами данных, которые включают сотни и тысячи переменных. Большинство из них не представляют практического смысла, но даже если отсеять 99 мусорных процентов, на анализ оставшихся данных может потребоваться слишком много времени и ресурсов.
В таких случаях используются техники уменьшения размерности (dimensionality reduction), которые определяют переменные, сильнее всего влияющие на результат. Один из наиболее применимых методов для решения таких задач — метод главных компонент. Если не углубляться в математику, достаточно сказать, что таким образом можно найти основные векторы и спроецировать остальные данные согласно им. .
Git для профессионального программиста

Эта книга представляет собой обновленное руководство по использованию Git в современных условиях. С тех пор как проект Git — распределенная система управления версиями — был создан Линусом Торвальдсом, прошло много лет, и система Git превратилась в доминирующую систему контроля версий, как для коммерческих целей, так и для проектов с открытым исходным кодом. Эффективный и хорошо реализованный контроль версий необходим для любого успешного веб-проекта. Постепенно эту систему приняли на вооружение практически все сообщества разработчиков ПО с открытым исходным кодом. Появление огромного числа графических интерфейсов для всех платформ и поддержка IDE позволили внедрить Git в операционные системы семейства Windows. Второе издание книги было обновлено для Git-версии 2.0 и уделяет большое внимание GitHub.
​​Самый сложный язык программирования

Многие люди, которые желают начать изучать программирование, интересуются – какой самый сложный язык программирования? Вопрос вполне понятен, ведь мало кто из новичков хочет выбрать сразу очень сложный язык и потратить на его изучение множество времени, не имея возможности применить свои знания на практике или даже подзаработать на этом денег. Все стремятся найти такой вариант для изучения, который бы при минимальных вложениях в самые краткие сроки начал бы приносить конкретный результат и прибыль. Но на самом деле подобная стратегия действий далеко не всегда бывает выигрышной.
Дело в том, что простые языки, изучаются очень многими людьми, поэтому конкуренция в попытке коммерциализировать свои знания здесь будет слишком большой. Типичные шаблонные действия с таким языком сможет выполнить любой нормальный студент ВУЗа, а более сложные операции требуют или неординарной находчивости, или же они просто невозможны в силу ограниченных возможностей самого языка. Поэтому выбирая для изучения простой язык программирования, человек заведомо существенно сужает горизонт своих будущих возможностей. Такие языки годятся только для образовательных целей и как базис для изучения более сложных вещей.
Самые сложные языки – обычно самые функциональные
Сортируя языки программирования по сложности стоит понимать, что, как правило, чем более сложный язык и дольше времени требуется на его нормальное усвоение, тем большие возможности и перспективы он предоставляет программисту. Вот некоторые такие языки:
C++. Постепенно устаревающий, но все еще очень функциональный и распространенный язык. Он довольно сложен в изучении, но при хорошем знании с его помощью можно писать не только программы на ПК, но даже и целые операционные системы или их модификации, разрабатывать игры. Он сочетает в себе возможности программирования низкого и высокого уровня. Также с помощью С++ можно работать с компьютерной графикой, писать драйвера на устройства, создавать программы для работы на серверах и многое другое;
PHP. Отличный язык для разработки веб-приложений и динамичных сайтов. Способен реализовать любую задумку веб программиста и представить предельно качественный и функциональный продукт;
С#. Си Шарп – это тоже непростой в изучении язык, но и он предоставляет программисту очень широкие возможности: создание офисных приложений, мобильных программ, использование в играх, веб-приложениях и других сферах.
В качестве заключения нужно сказать, что самый сложный язык программирования в мире – это понятие несуществующее. Каждый язык требует усилий по освоению. Если какой-то язык требует больших усилий и запоминания большего объема знаний, то это с лихвой окупается его большими функциональными возможностями.
This media is not supported in your browser
VIEW IN TELEGRAM
Алгоритм заполнения шахматной доски

Достаточно простая, но тем не менее интересная задача для разминки программиста. Думаю, все видели, как выглядит шахматная доска, а также слышали выражение «расставить в шахматном порядке». На случай, если не видели, это поле, состоящее размером 8 на 8 клеток, имеющих разные цвета – черный и белый. При этом, клетки одного цвета не могут быть смежными, а расположены через одну: белый, черный, белый… как по вертикали, так и по горизонтали.
Мы выведем в шахматном порядке восемь строк по восемь символов в каждой. Черный цвет у нас будет изображать символ «X», а белый – «O».
Самое первое, что приходит в голову:
Создать двумерный массив соответствующего размера;
Двойным циклом заполнить одним белым цветом все поля;
Затем можно запустить еще дополнительные циклы, которые будут обходить нужные клетки и назначать «черный» цвет.
Сингулярное разложение (Singular Value Decomposition)
Способ понизить размерность без потери значительной доли ценной информации. Если у вас есть исходная матрица с большим объемом данных, вы можете разложить ее на меньшие матрицы, которые будут обладать теми же свойствами. Это отличный способ получить полезный результат в шумных условиях или в тех случаях, когда информации, напротив, не хватает. 
Например, Netflix применяет SVD в своих рекомендательных системах, где объем исходной информации (количество фильмов в базе) несравнимо превышает объем информации рабочей (количество фильмов, которые посмотрел пользователь). Кроме того, таким образом оказывается удобно обрабатывать изображения и музыку, сжимая их с минимальным ущербом качеству.
This media is not supported in your browser
VIEW IN TELEGRAM
Процедурные языки программирования

Процедурные языки программирования - языки программирования, код которых можно разделить на процедуры.
Программирование – это очень объемная сфера знаний, изучить которую целиком не сможет ни один человек на свете. Сейчас существует более 120 различных языков программирования, каждый из которых в той или иной мере используется для решения своих специфических задач. Все языки делятся на разные типы. Очень видное место в свое время занимали так называемые процедурные языки программирования. Некоторые их них активно применяются даже сейчас.
Основная особенность языков процедурного программирования – их императивность, что означает создание четкого набора последовательных инструкций, которые должен поочередно выполнять компьютер. Парадигме императивности соответствуют такие главные характеристики
Python Карманный справочник 

Этот краткий справочник по Python карманного типа обновлен с учетом версий 3.4 и 2.7 и очень удобен для наведения быстрых справок в процессе разработки программ на Python. В лаконичной форме здесь представлены все необходимые сведения о типах данных и операторах Python, специальных методах, встроенных функциях и исключениях, наиболее употребительных стандартных библиотечных модулях и других примечательных языковых средствах Python.
​​Языки программирования низкого уровня

Языки программирования низкого уровня или низкоуровневые традиционно появились первыми и в последующем стали базисом для развития всей ИТ индустрии. Они так называются потому, что в своих командах обращаются фактически напрямую к железу компьютера, его микропроцессору. Каждый процессор способен воспринимать определенный набор понятных только ему команд, поэтому к каждой модели немногочисленных устройств в то далекое время создавались свои языки. Изначально такие языки имели минимальный набор команд, и в отличие от высокоуровневых не имели такого большого количества абстрактных классов, разнообразного синтаксиса.
Все существующие языки программирования обычно делят на две большие группы: низкоуровневые и высокоуровневые. Сейчас большинство используемых языков относятся ко второй категории, но так было не всегда. Если смотреть историю развития программирования как можно ближе к ее истокам, то там картина была прямо противоположной.
Языки программирование низкого уровня, либо имеющие их возможности, активно применяются также и сейчас. Ведь только благодаря им возможно писать драйвера на компьютерное железо, подключаемые периферийные устройства, создавать операционные системы и ядра прошивок, а также многие другие важнейшие задачи. В военной сфере, инженерии, медицине программы должны управлять непосредственно определенными устройствами и их физическими параметрами, именно поэтому здесь также языки очень востребовательны. Список используемых сейчас низкоуровневых языков не такой большой, но, тем не менее, они все еще актуальны и способны решать важные задачи.
Некоторые представители низкоуровневых языков
Изначально первым языком программирования низкого уровня считается так называемый машинный код. Он имел вид набора последовательных команд, которые передавались на процессор в виде нулей и единиц. За нуль отвечало отсутствие электрического сигнала на устройстве, а за единицу – подача на него определенного импульса. Таким образом, череда сигналов заставляла процессор решать поставленные перед ним задачи.
Первые такие коды были способны заставить ЭВМ выполнять элементарные простые операции, куда относятся арифметические операции, передача между регистрами простейшей информации, сравнение двух или больше разных кодов и тому подобные действия. Позже машинные языки научились решать сложные задачи, то есть такие, которые состоят из набора элементарных команд. В зависимости от архитектуры процессора он может выполнять разное количество команд и с разной скоростью. Чтобы машинные коды работали нормально на нескольких представителях одного семейства процессоров, их начали разбивать на микропрограммы. Список языков машинного кода вряд ли возможно составить, ведь на каждый процессор и ЭВМ своего времени создавался свой язык.
Artificial Intelligence - одно из самых трендовых направлений в IT-индустрии. Поэтому мы решили поделиться свежим каналом с большой базой знаний и богатым практическим опытом о применении Искусственного Интеллекта в бизнесе и tech стартапах - Новое Электричество.
Теоретический минимум по Computer Science. Все, что нужно программисту и разработчику.

Хватит тратить время на скучные академические фолианты! Изучение Computer Science может быть веселым и увлекательным занятием. Владстон Феррейра Фило знакомит нас с вычислительным мышлением, позволяющим решать любые сложные задачи. Научиться писать код просто — пара недель на курсах, и вы «программист», но чтобы стать профи, который будет востребован всегда и везде, нужны фундаментальные знания. Здесь вы найдете только самую важную информацию, которая необходима каждому разработчику и программисту каждый день.
Освой профессию будущего! Примерь на себя роль Data Scientist на бесплатном онлайн-интенсиве, который пройдёт с 30 по 2 декабря в 19:00 по московскому времени.

Ссылка для бесплатной регистрации: 👉 https://clc.to/ofFQHQ.

За 3 дня ты научишься:
⚡️ исследовать данные с помощью языка Python;
⚡️ отличать Data Science от Machine Learning и Artificial Intelligence;
⚡️ строить модели для реальных кейсов.

Ведёт интенсив ведущий исследователь данных Сбербанка, математик-программист Анастасия Борнева.

🎉 Всех участников ждут подарки от издательства “МИФ”, а авторов трёх лучших проектов — гранты на обучение в онлайн-университете Skillbox!
Трансформеры в Поиске: как Яндекс применил тяжёлые нейросети для поиска по смыслу
​​Что такое закон Мура?
«Закон Мура» относится к ряду связанных наблюдений и предсказаний, касающихся экспоненциального роста плотности и / или производительности электронных схем. Современное резюме, которое не соответствует исходным утверждениям Мура, состоит в том, что количество операций в секунду на каждый затраченный доллар удваивается каждые N месяцев, где N примерно равно 18.

Распространенные заблуждения
Закон Мура - это закон физики . Фактически, это эмпирическое наблюдение за развитием технологий; ничто не требует, чтобы это продолжалось, и, конечно, это не может продолжаться бесконечно. Увеличение тактовой частоты уже вышло на плато, и текущие улучшения в соотношении цена / производительность связаны с увеличением количества ядер (процессорных блоков) на одном кристалле.
Машины становятся быстрее так быстро, что придумывать лучшие алгоритмы. На самом деле, простые улучшения алгоритмов намного важнее, чем улучшения в оборудовании.

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

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

ДА - 54
👍👍👍👍👍 38%
НЕТ - 88
👍👍👍👍👍👍👍👍 62%
👥 142 человека уже проголосовало.
⬆️ Правильный ответ ⬆️

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

Данная статья содержит не только самые распространенные алгоритмы и структуры данных, но и более сложные вещи, о которых вы могли не знать. Читаем и узнаем!
Я предполагаю, что вы знаете как минимум один язык программирования и такие понятия, как объект и указатель. Алгоритмы и структуры данных будут перечисляться по степени их сложности.
Для начала давайте начнем с линейных структур данных и алгоритмов
Массивы
Связный список
Стек
Очереди
Перейдем к базовым алгоритмам
Сортировка - Сортировка слиянием, Сортировка вставками, Быстрая сортировка, Несколько взаимных перестановок.
Умножение матриц (Не обязательно реализовывать, главное - знать алгоритм)
Основные алгоритмы просеивания
Беззнаковая математика, включая умножение и деление
Алгоритм Евклида для нахождения НОД (наибольший общий делитель), Модульная инверсия, Быстрое возведение в степень
Числа Фибоначчи с матричным умножением
Нормальное распределение и математическое ожидание
Статистика – среднее вероятностное значение случайной величины, медиана, дисперсия, теорема Байеса
Также можно изучить популярные алгоритмические методы:
Алгоритмы декомпозиции – Бинарный поиск, Нахождение подмассива с наибольшей суммой элементов
Жадные алгоритмы – Выбор задач, кодирование по алгоритму Хаффмана
Динамичное программирование – Цепное матричное умножение, Алгоритм решения задачи по укладке ранца
Линейное программирование – Максимизация параметра, Линейное время сортировки
Криптографические алгоритмы – Алгоритм Манакера по нахождению длиннейшей подстроки-палиндрома, алгоритм нахождения наибольшей общей подпоследовательности (LSC), расстояние Левенштейна
Теперь перейдем к типичным нелинейным структурам данных
Деревья – Бинарное дерево, Дерево общего вида, Наименьший общий предок
Бинарное дерево поиска – Симметричный обход, Обход по уровням, Нахождение k’ого наибольшего элемента, Диаметр, Глубина, Количество узлов и т.д.
Динамическая память – Динамический массив, Двоичная куча, Пирамидальная сортировка
Алгоритм объединения-поиска
Хеш-таблица – Метод нахождения коллизий (Linear Probing), Открытая адресация, Предотвращение коллизий
Рассмотрим графы
Список смежных вершин графа, Матрица смежности графа, Взвешенные рёбра графа
Основные алгоритмы обхода – Поиск в ширину, Поиск в глубину и т.д.
Алгоритмы нахождения кратчайшего пути - Алгоритм Дейкстры, Алгоритм Флойда-Уоршелла, Алгоритм Беллмана-Форда
Минимальное остовное дерево - Алгоритм Крускала, Алгоритм Прима
К данному моменту вы должны быть хорошо знакомы с программированием, так как для дальнейшего прочтения и углубления в данную тему вы должны знать больше, чем студент.
Усложнённые деревья и графы
Сбалансированные деревья – AVL-дерево, Красно-черное дерево
Heavy-light декомпозиция, Б-деревья, Дерево квадрантов
Усложнённый граф – Минимальный разрез, Максимальный поток
Максимальное покрытие – Теорема о свадьбах
Гамильтонов цикл
Рёберный граф/ Линейный граф
Сильно связные компоненты
Главный подграф, Покрытие вершин, Задача коммивояжёра – Алгоритм аппроксимации
Продвинутые криптографические алгоритмы:
Алгоритм Кнута-Морриса-Пратта
Алгоритм Рабина-Карпа
Префиксные и суффиксные деревья
Автоматизация суффиксов – Алгоритм Укконена
Высшая математика
Быстрое преобразование Фурье
Проверка простоты
Вычислительная геометрия – Задача поиска ближайшей пары, Диаграмма Вороного, Выпуклая оболочка множества точек
Общие продвинутые темы:
Выполнение обхода всех комбинаций/перестановок
Поразрядная обработка
Ссылка на оригинальную статью
This media is not supported in your browser
VIEW IN TELEGRAM
Изучаем алгоритмы: полезные веб-сайты.

Веб-сайты, которые вам стоит использовать, чтоб выучить классические алгоритмы:
A Visual Guide to Graph Traversal Algorithms — Интерактивная визуализация показывает, как работает алгоритм поиска в глубину графа.
Algomation — Поучительное и анимированное описание алгоритмов.
Algorithm Visualizer — Тонны анимированых алгоритмов (с кодом, конечно же), можно также создавать свои алгоритмы.
Algorithms Visualization — Коротенькая статья, посвящённая визуализации алгоритмов.
Big-O Cheat Sheet — Сложности повседневных алгоритмов, используемых в анализе данных.
Data Structure Visualizations — Визуализируйте поведение структур данных и делайте операции с ними.
Geeks for Geeks — Много-много хорошо объяснённых и реализованных алгоритмов.
Rosetta Code — Хрестоматия по программированию, цель которой — показать использование множества алгоритмов и структур данных в разных языках программирования.