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
⬆️ Правильный ответ ⬆️

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

Данная статья содержит не только самые распространенные алгоритмы и структуры данных, но и более сложные вещи, о которых вы могли не знать. Читаем и узнаем!
Я предполагаю, что вы знаете как минимум один язык программирования и такие понятия, как объект и указатель. Алгоритмы и структуры данных будут перечисляться по степени их сложности.
Для начала давайте начнем с линейных структур данных и алгоритмов
Массивы
Связный список
Стек
Очереди
Перейдем к базовым алгоритмам
Сортировка - Сортировка слиянием, Сортировка вставками, Быстрая сортировка, Несколько взаимных перестановок.
Умножение матриц (Не обязательно реализовывать, главное - знать алгоритм)
Основные алгоритмы просеивания
Беззнаковая математика, включая умножение и деление
Алгоритм Евклида для нахождения НОД (наибольший общий делитель), Модульная инверсия, Быстрое возведение в степень
Числа Фибоначчи с матричным умножением
Нормальное распределение и математическое ожидание
Статистика – среднее вероятностное значение случайной величины, медиана, дисперсия, теорема Байеса
Также можно изучить популярные алгоритмические методы:
Алгоритмы декомпозиции – Бинарный поиск, Нахождение подмассива с наибольшей суммой элементов
Жадные алгоритмы – Выбор задач, кодирование по алгоритму Хаффмана
Динамичное программирование – Цепное матричное умножение, Алгоритм решения задачи по укладке ранца
Линейное программирование – Максимизация параметра, Линейное время сортировки
Криптографические алгоритмы – Алгоритм Манакера по нахождению длиннейшей подстроки-палиндрома, алгоритм нахождения наибольшей общей подпоследовательности (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 — Хрестоматия по программированию, цель которой — показать использование множества алгоритмов и структур данных в разных языках программирования.
​​Изучаем алгоритмы: онлайн-курсы.

Бесплатные и качественные курсы онлайн:
Algorithms: Divide and Conquer, Sorting and Searching, and Randomized Algorithms - Основные темы: асимптотика ("Большое О(х)"), сортировка и поиск, разделяй и властвуй, а также другие разные алгоритмы.
Algorithms: Graph Search, Shortest Paths, and Data Structures - Основные темы: структуры данных, графы и их применения.
Algorithms: Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming - Основные темы: жадные алгоритмы и динамическое программирование.
Algorithms: Shortest Paths Revisited, NP-Complete Problems and What To Do About Them - Основные темы: кратчайший путь, NP-полные задачи и что это все значит для разработчика.
Algorithms, Part 1 — Этот курс затрагивает необходимую информацию об алгоритмах и структурах данных, в которой нуждается каждый программист, который серьезно относится к своему делу. Курс рассказывает о структурах данных, сортировке и алгоритмах поиска.
Algorithms, Part 2 — Вторая часть курса, которая сфокусирована на жадном алгоритме и динамических парадигмах, а также на NP-полных задачах.
Khan Academy Algorithms — курс по алгоритмам, созданный Томасом Корменом и Девином Балккомом.
MIT-6-006 — Хорошо описанные алгоритмы.
MIT-6-046j — Такой же курс, как и предыдущий, только с другими алгоритмами.
MIT-6-00sc — Простое и понятное введение в алгоритмы.
Udacity Intro to Algorithms — Курс по алгоритмам на Python.
​​Разработчики выпустили восьмую версию языка программирования PHP

Группа энтузиастов во главе с датским программистом Лердорформ Расмусом выпустили восьмую версию скриптового языка программирования PHP. Релиз состоялся 26 ноября 2020 года, почти на год раньше, чем планировалось. По сравнению с предыдущей версией PHP 8 получил несколько серьезных улучшений, включая применение JIT-компилятора и существенную доработку «синтаксического сахара», позволяющую уменьшить объем шаблонного кода.
Разработка языка программирования PHP ведется с 1995 года. Основной сферой его применения является разработка динамических веб-сайтов с исполнением кода на серверной стороне. При этом доступна и компиляция программ, написанных на PHP, для исполнения на UNIX-операционных системах и в среде Windows. Существенное влияние на синтаксис PHP оказали несколько языков программирования, включая C++ и Java.
Наиболее существенным изменением в версии PHP 8 стало использование JIT-компилятора. Он позволяет переводить код программы в машинный код в режиме реального времени непосредственно во время исполнения программы. Таким образом для некоторых случаев удается повысить скорость исполнения приложений. В случае с PHP 8 наибольший прирост скорости с помощью JIT-компилятора достигается при выполнении математических операций.
Еще одним практичным улучшением в PHP 8 стало добавление выражения match. В целом оно работает аналогично традиционному switch, однако, в отличие от последнего, использует строгое сравнение значений. При этом результат работы match может быть сохранен в переменную и использован в дальнейшем или возвращен, например, с помощью функции echo. В отличие от switch, выражение match работает с однострочными выражениями, не требующими конструкции break.
В PHP 8 также появились именованные аргументы для использования в библиотеках или ассоциативных массивах. Это нововведение, в отличие от PHP 7, использует самодокументируемые аргументы, что позволяет использовать их в любом порядке, пропуская необязательные параметры. Это положительно сказывается на читаемости кода и его объеме, особенно если речь идет об использовании библиотек, работающих с булевыми параметрами.
Еще в PHP 8 появилась возможность использовать структурные метаданные с нативным синтаксисом PHP вместо аннотаций PHPDoc. Благодаря этому, например, при написании метаданных можно будет использовать подсказки среды разработки. Кроме того, в PHP 8 стали возможными одновременное объявление и инициализация свойств в конструкторе класса. В некоторые случаях это позволяет сократить объем кода втрое.
Наконец, еще одним существенным изменением в PHP 8 стало использование нового оператора Nullsafe, который записывается занком ? после обрабатываемого элемента. Это избавляет, например, от необходимости прописывать проверку на null для каждой переменной, используя вместо этого последовательность вызовов с оператором Nullsafe. В этом случае, если хотя бы один элемент возвращает значение null, вся последовательность вернет null.
С более полным списком нововведений в PHP 8 и документацией по ним можно ознакомится в сообщении о релизе.
Алгоритмы и структуры данных.
Извлечение информации на языке Java
Аллен Б.Доуни

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

Научитесь работать со структурами данных, например, со списками и словарями, разберитесь, как они работают.
Напишите приложение, которое читает страницы Википедии, выполняет синтаксический разбор и обеспечивает навигацию по полученному дереву данных.
Анализируйте код и учитесь прогнозировать, как быстро он будет работать и сколько памяти при этом потреблять.
Пишите классы, реализующие интерфейс Map, пользуйтесь при этом хеш-таблицей и двоичным деревом поиска.
Создайте простой веб-поисковик с собственным поисковым роботом: он будет индексировать веб-страницы, сохранять их содержимое и возвращать нужные результаты.
Вспомним математику!

При составление формул используется такой знак ∑.
Давайте вспомним, сумму чего именно так можно обозначить.

Это сумма всех цифр от 1 до 100. - 137
👍👍👍👍👍👍👍👍 97%
Это сумма двух цифр: 1 и 100. - 4
👍 3%
👥 141 человек уже проголосовал.
⬆️ Правильный ответ ⬆️

Это сумма всех чисел в заданном диапазоне, от 1 до 100
Изучаем алгоритмы: полезные книги

Самые популярные книги для изучения алгоритмов:
Англоязычные:
Algorithm Design — Раскрывает суть решения задач, встречающихся в жизни.
Algorithms — Решения задач на Java, описание хороших практик ООП и бесплатные онлайн-курсы.
Data Structures Using C — Примеры использования структур данных.
Elementary Algorithms — Потрясающая книга об алгоритмах и структурах данных.
Grokking Algorithms — Книга об алгоритмах и их практических применениях с множеством иллюстраций.
Java. Объектно-ориентированное программирование

Учебное пособие предназначено для изучающих объектно-ориентированное программирование в вузе, а также для всех желающих самостоятельно изучить язык программирования Java. Книга охватывает все базовые темы, необходимые для эффективного составления программ на Java, в том числе базовые типы данных, управляющие инструкции, особенности описания классов и объектов в Java, создание пакетов и интерфейсов, перегрузку методов и наследование. Особое внимание уделяется созданию приложений с графическим интерфейсом.
Векторное представление слов (Word Embeddings)
Как нетрудно догадаться, этот метод используется для работы с текстом в NLP-системах (Natural Language Processing). Компьютеры не понимают человеческий язык, хотя в последнее время им и удается более-менее успешно производить обратное впечатление. Это становится возможным благодаря техникам «цифровизации» слов, которые переводят их семантическое значение в векторы.
Для этого используются самые разные атрибуты — количество букв в слове, теги обозначения частей речи и грамматических отношений между ними, векторные нотации и многое другое. Эти данные помещаются в n-мерное пространство, где аналитическая модель определяет между ними взаимосвязи, выстраивает контекстные цепочки и так далее.
Таким образом нейросеть может переварить некий языковой корпус и строить на его основе предложения. Собственных мыслей у компьютера нет, так что от своего лица он может только нести грамматически верную чушь. А понимать поступающие реплики и формировать ответы на них таким образом получается очень хорошо.
Машинное обучение — это просто?

Математика, физика и даже информатика, чаще всего преподаются с использованием восходящего подхода: темы логично следуют одна за другой, постепенно усложняясь и расширяясь. Но для успешного освоения того или иного навыка нужны ещё и мотивация, азарт и возможность видеть результат.
Повседневные навыки, такие как чтение, вождение и готовка, мы получили прямо противоположным путём — используя нисходящий подход. Он делает изучение технических навыков не только быстрее и продуктивнее, но и интереснее.
В этой статье речь пойдёт о принципиальной разнице между этими подходами и о том, какой подход лучше использовать для изучения машинного обучения.
Классификация языков программирования

Классификация и виды языков программирования – это очень сложный, многообразный вопрос, который постоянно вызывает споры, требует регулярной переоценки и умения находить в различных языках объединяющие их характеристики и особенности. Сейчас существует огромное количество самых разных языков программирования. По некоторым подсчетам, всего их более чем 120. Некоторые из них очень распространены и популярны (C++, Java, Python), некоторые известны только узкому кругу специалистов и любителей экзотики (Groovy, Clojure, Boo)
Хочешь освоить востребованную профессию? Data Scientist — одна из самых перспективных и высокооплачиваемых специальностей в IT-сфере!
Попробуй свои силы на бесплатном интенсиве Skillbox.

Регистрируйся по ссылке: 👉 https://clc.to/VQGf1Q.

Тебя ждут:
✔️ основы анализа данных и машинного обучения;
✔️ программирование на Python;
✔️ работа с библиотеками Matplotlib и scikit-learn;
✔️ выгрузка и визуализация данных;
✔️ оценка качества моделей.


💼 В результате ты создашь проект, который станет частью твоего портфолио — программу, предсказывающую курс доллара.

📌 У тебя будет шанс получить грант на 30 000 рублей для обучения в Skillbox!
3 причины, почему Tensorflow - самый популярный фреймворк машинного обучения

TensorFlow за короткий промежуток времени стал самым популярным инструментом и фреймворком для машинного обучения. Он пользуется огромной популярностью среди инженеров и разработчиков машинного обучения.
Вот три причины популярности TensorFlow:

1. Самая распространенная платформа ИИ, доступная для разработчиков.
TensorFlow - единственная доступная среда для запуска моделей машинного обучения от облака до мельчайших микроконтроллеров.

2. TensorFlow - это часть основной управляемой публичным облаком ML PaaS.
TensorFlow является неотъемлемой частью общедоступных облачных платформ. Он поддерживает API-интерфейсы для компьютерного зрения, обработки естественного языка, персонализации и рекомендаций.

3. Обширная поддержка инструментов и интеграции.
TensorFlow - это больше, чем просто фреймворк для машинного обучения или инструментарий. По сути, это платформа для управления всем жизненным циклом приложений ИИ.
1
Главная платформа на рынке краудсорсинга в России, Яндекс.Толока, проведеут воркшоп на конференции NeurIPS 2020 - мероприятии мирового масштаба в области искусственного интеллекта.

Обсуждение будет крутиться вокруг актуальных на сегодня тем в индустрии краудсорсинга:
📍Удалённая работа. Насколько эффективна может быть удалённая работа на краудсорсинговых платформах.
📍 Справедливость. Как краудсорсинговая платформа может обеспечивать исполнителям гибкость в выборе задач и рабочих часов.
📍 Механизмы. Двусторонние механизмы, которые не только обеспечивают гибкость исполнителям, но и гарантируют качество результата и эффективность процесса заказчикам.

Подробнее о воркшопе по ссылке.
Нейросети учатся определять, когда они недостаточно компетентны.

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

Помимо трех законов робототехники искусственному интеллекту понадобится еще обязательное понимание пределов своих возможностей, заявили ученые. Нейронные сети с глубоким обучением предназначены для имитации человеческого мозга, взвешивая множество факторов и выявляя закономерности в массивах данных, которые люди не в состоянии проанализировать. Однако такая система должна осознавать случаи, когда она ненадежна, рассказывает Science Alert
«Нам нужна способность не только иметь высокопроизводительные модели, но и понимать, когда мы не можем доверять этим моделям», — сказал автор новой разработки, программист Александр Амини из Лаборатории компьютерных наук и искусственного интеллекта Массачусетского технологического института (CSAIL) в США.
Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих | Бхаргава Адитья

Алгоритмы - это всего лишь последовательность решения задач, и большинство таких задач уже были кем-то решены, протестированы и проверены. Можно, конечно, погрузиться в глубокую философию гениального Кнута, изучить многостраничные фолианты с доказательствами и обоснованиями, но хотите ли вы тратить на это свое время? Откройте великолепно иллюстрированную книгу и вы сразу поймете, что алгоритмы - это просто. А грокать алгоритмы - это веселое и увлекательное занятие.
Как называется свойство алгоритма, означающее, что данный алгоритм применим к решению целого класса задач?

Понятность - 4
👍 3%
Определённость - 4
👍 3%
Результативность - 5
👍 4%
Массовость - 115
👍👍👍👍👍👍👍👍 90%
👥 128 человек уже проголосовало.
⬆️ Правильный ответ ⬆️

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

Онлайн-практика для того, чтоб оттачивать свои навыки:
ACM-ICPC Live Archive — Сотни задач с предыдущих региональных состязаний ACM-ICPC и мировых состязаний World Finals.
AIZU ONLINE JUDGE — Японская онлайн практика.
CodeChef — Больше задач и ежемесячные состязания.
Codeforces — Единственный сайт, где можно посостязаться в знаниях платформы Web 2.0.
CodeWars — Веб-сайт, который предлагает задачи по алгоритмам на многих языках и для многих уровней сложности.
CoderByte — Скромный веб-сайт с задачами на оттачивание алгоритмов для начального и продвинутого уровней. Поддерживает множество популярных языков программирования, таких как С++, Python, JavaScript, Ruby и так далее.
HackerEarth — Решайте задачи, используя алгоритмы и принимайте участие в решении задач, которые задают при приёме на работу.
HackerRank — Онлайн практика по известным алгоритмам и функциональном программировании.
Infoarena — Румынская онлайн-практика. 1500+ задач по алгоритмам.
LavidaOnlineJudge — Корейская онлайн-практика(около половины на английском) 1300+ задач.
Learneroo Algorithms Tutorials — Учитесь и практикуйтесь в написании алгоритмов, решая задачи онлайн.
LeetCode — Выучите алгоритмы и подготовьтесь к интервью.
PKU JudgeOnline — Китайская онлайн-практика.
ProjectEuler — Математические задачи, которые могут быть решены с использованием алгоритмов (или даже с помощью карандаша, зависит от того, сколько вы уже знаете).
Rosalind — Платформа для изучения биоинформатики и программирования, решая задачи.
ShareCode — Онлайн практика и состязания с множеством задач по алгоритмам.
Snakify — Вводный курс по Python с 100+ задачами по алгоритмам и отладке (российский).
SPOJ — Еще больше задач.
TopCoder — Множество задач по графическому дизайну, анализу данных и разработки в целом.
URI — Бразильская онлайн-практика. Не так много задач по сравнению с конкурентами, но их база растет, а также у них есть онлайн-состязания.
UVA — Ещё много задач с предыдущих региональных состязаний ACM-ICPC и мировых состязаний World Finals.