Список форумов Форум Форум
Форум
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   medals.phpНаграды   РегистрацияРегистрация 
 ПрофильПрофиль   СудокуСудоку   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Python
На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8, 9  След.
 
Начать новую тему   Ответить на тему    Список форумов Форум -> Наука и технологии
Предыдущая тема :: Следующая тема  
Автор Сообщение
Slav
Мастер-Флудер I
Мастер-Флудер I


Репутация: +16    

Зарегистрирован: 06.06.2006
Сообщения: 9906
Откуда: КиевЪ
Награды: Нет

СообщениеДобавлено: Вт Янв 21, 2020 7:19 am    Заголовок сообщения: Ответить с цитатой

Мне бы найти что то про питоновские библиотеки по работе с data, типа pandas
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Rasty
Crackpot


Репутация: +88/–10    

Зарегистрирован: 23.05.2006
Сообщения: 22371

Награды: Нет

СообщениеДобавлено: Вт Янв 21, 2020 2:53 pm    Заголовок сообщения: Ответить с цитатой

Slav писал(а):
Искал что то для расширения сознания и лучшего понимания базовых алгоритмов машинного обучения.


Поздравляю - нашел. Дальше попытаюсь по-простому, научно-популярно рассказать о базовых алгоритмах машинного обучения. Об одном из базовый алгоритмов машинного обучения - самом простом. Классификаторы.

Есть у нас множество объектов, принадлежащих разным классам. Каждый объект задается некоторыми параметрами (x1, x2, x3, ..., xn), которые рассматриваются как вектор в n-мерном пространстве (количество параметров у объекта определяет размерность пространства). Задача машинного обучения - научить модель (классификатор) определять по входным параметрам, к какому классу принадлежит объект.

Самая простая модель в машинном обучении - это линейный классификатор. Задается формулой:



Умножаем параметры объекта x[j] (регрессоры) на весовые коэффициенты классификатора w[j] (параметры регрессии) - получаем некоторое число y, которое определяет, к какому классу принадлежит объект.

Spoiler:

Admin писал(а):

Хочешь, не хочешь - но самая простая модель в машинном обучении - это нейросеть с одним нейроном



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

Например, в двухмерном пространстве, наш классификатор будет прямой (синя линия), которая отделяет объекты одного класса (красные точки) от объектов другого класса (зеленые точки):



Как обучить такой классификатор. Каждый объект - это вектор входных параметров (n параметров):



Множество всех объектов (m объектов) можно записать в виде транспонированной матрицы их (объектов) векторов:



Нам надо найти некоторый вектор w (поиск этого вектора - это и есть машинное обучение):



Умножение которого на матрицу параметров объектов даст нам вектор классификации объектов:



Матрица X нам известна - это параметры объектов из датасета (датасет - наборы примеров, с помощью которых мы обучаем наш классификатор). Вектор y мы тоже знаем - каждый объект в датасете уже классифицирован.

Как найти вектор w? В соседней теме писал.

Умножение матрицы на вектор запишем как:



Существует обратная матрица - такая, умножение которой на матрицу X даст единичную матрицу E:



Единичная матрица - это такая матрица, умножение которой на вектор дает тот же вектор



Умножаем левую и правую часть выражения на обратную матрицу:



В левой части получили единичную матрицу умноженную на вектор, сократили, получили:



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

Теперь, имея параметры (w) линейного классификатора, можем взять объект того же типа, что и объекты в датасете. Взять параметры объекта. Прогнать их через линейный классификатор:



x[j] нам известны - параметры объекта.
w[j] мы только что посчитали.
Умножаем каждый x на соответствующий w. Суммируем. Получаем y который определяет, к каком классу принадлежит наш объект.

Все работает. В чем сложность и для чего надо это все машинное обучение, если эти обратные матрицы научились считать 200 лет назад? Сложность в том, что если у объекта много параметров - тогда все способы нахождения обратной матрицы становятся вычислительно неэффективными. Обучить такую систему становится невозможно за адекватное время. Задачи машинного обучения (в контексте линейных классификаторов) - это поиск таких алгоритмов (методы оптимизации), которые посчитают вектор w за адекватное время.

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

Для реальных задач классификации, описанная выше модель (линейный классификатор) - тупая. В реальности, классифицируемые объекты не получится разделить плоскостью в многомерном пространстве. Для двухмерного пространства, например:



Линейная модель классифицирует объекты с некоторой точностью. Чтобы повысить точность - надо создавать нелинейную модель:



Чтобы классифицировать объекты, нам надо искать не плоскость, а некоторую поверхность в многомерном пространстве, которая опять же будет разделять объекты на классы.

В нелинейной модели, у нас опять же есть некоторая функция:



Которая задает некоторую поверхность в многомерном пространстве. Машинное обучение, в контексте данной функции - опять же подбор таких параметров вектора w, которые для параметров объекта x нарисуют с помощью этой функции правильную поверхность. Самый популярный метод поиска вектора w - метод градиентного спуска. Находим производную функции по x, тем самым узнаем в какую сторону нам надо изменять (прибавлять/отнимать некоторый коэффициент эпсилон, который подбирается эмпирически) параметры вектора w, чтобы оптимизировать нелинейную функцию (найти локальный минимум функции). Очень просто. Но на деле сложно. Не вычислительно сложно, а нелинейная функция может быть сложной



и чтобы придумать, как брать от нее производную - надо уметь мозг напрячь.

Я к чему веду. Нейросети, которые в машинном обучении не называют "нейросетями", а называют "классификаторами" - это самое простое, что есть в машинном обучении. Самое простое, на фоне всего остального, что там в машинном обучении есть. Например, поиск по дереву принятия решений (еще один вид классификации) осуществляется с помощью метода Монте-Карло. Там интегралы.

Как я написал в соседней теме:

Admin писал(а):
Сложность нейросети не в архитектуре, а в способе обучения.


В машинном обучении

Slav писал(а):
Мне бы найти что то про питоновские библиотеки по работе с data, типа pandas


Slav писал(а):
Для того что бы с ml работать сейчас даже не обязательно учиться кодить, это реализовано в интерфейсе.


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

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

Например, существует библиотека TensorFlow - библиотека машинного обучения от компании Google. Библиотека позволяет перемножать матрицы (тензоры). Перемножать матрицы в лоб (с помощью циклов) - неэффективно. Неэффективно по скорости. Поэтому Гугл взял кусок кода, который перемножает матрицы и ебанул его на ассемблере, скомпилировал и в библиотеку засунул вызов этого куска кода, с помощью библиотечной функции, которая в качестве аргументов принимает две матрицы и возвращает третью матрицу в качестве значения. Понадобилось тебе две матрицы в коде перемножить. Подключил библиотеку, вызвал функцию, функция тебе посчитала эти матрицы на ассемблере (или на видяхе, если к своему питону подключил CUDA). Еще в библиотеке TensorFlow есть функция, которая позволяет градиент посчитать. Быстренько и эффективно - тоже на видюхе. Заебись? А что ты с этим градиентом делать собрался?

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

Резюмируя. Хочешь изучить машинное обучение - изучай программирование. Поxуй на чем, хоть сразу на Питоне. Дальше изучай линейную алгебру, статистику и матанализ. После чего, смотри какой математически аппарат используется в машинном обучении и ебошь его на чистом Питоне. Как научишься программировать машин лёрнинг и встанет вопрос повышения эффективности вычислений - подключай библиотеки NumPy, Pandas, PyTorch, тот же TensorFlow или любую другую, которая к тому времени будет считаться актуальной.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Blum
Мастер-Флудер I
Мастер-Флудер I


Предупреждение
Репутация: +23    

Зарегистрирован: 05.11.2008
Сообщения: 5042
Откуда: Східна Сибір
Награды: Нет

СообщениеДобавлено: Вт Янв 21, 2020 3:04 pm    Заголовок сообщения: Ответить с цитатой

Не мечи бисер перед свиньями:

Слив писал(а):
Blum писал(а):

Слав, а ты где теорию вероятности изучал?


В интернете


http://rasty.kiev.ua/viewtopic.php?p=454026&highlight=%E8%ED%F2%E5%F0%ED%E5%F2%E5#454026
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Rasty
Crackpot


Репутация: +88/–10    

Зарегистрирован: 23.05.2006
Сообщения: 22371

Награды: Нет

СообщениеДобавлено: Вт Янв 21, 2020 3:08 pm    Заголовок сообщения: Ответить с цитатой

Можно подумать, я где-то в другом месте все изучаю
У меня только первый курс универа закончен.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Slav
Мастер-Флудер I
Мастер-Флудер I


Репутация: +16    

Зарегистрирован: 06.06.2006
Сообщения: 9906
Откуда: КиевЪ
Награды: Нет

СообщениеДобавлено: Вт Янв 21, 2020 4:50 pm    Заголовок сообщения: Ответить с цитатой

Читну когда время будет, тут так просто не разобраться

Классификатор о котором ты писал, я так понял что это то же самое что и кластер?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
.
ящер-гриль
ящер-гриль


Репутация: +260/–45    

Зарегистрирован: 21.06.2006
Сообщения: 53738
Откуда: град обреченный
Награды: Нет

СообщениеДобавлено: Вт Янв 21, 2020 11:37 pm    Заголовок сообщения: Ответить с цитатой

Admin писал(а):
Поxуй на чем, хоть сразу на Питоне.


Алгоритмический язык!
_________________
has many Yanukoviches
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Rasty
Crackpot


Репутация: +88/–10    

Зарегистрирован: 23.05.2006
Сообщения: 22371

Награды: Нет

СообщениеДобавлено: Ср Янв 22, 2020 12:49 pm    Заголовок сообщения: Ответить с цитатой

Slav писал(а):
Классификатор о котором ты писал, я так понял что это то же самое что и кластер?


Не то же самое. Даже не однофамильцы.

Самый простой пример классификатора. Автомобилестроительный завод изготавливает двигатели. Часть собранных двигателей, скажем 1% - с дефектом (брак есть на любом производстве). Причем дефект может быть неявным. В течении получаса двигатель на испытательном стенде поработал - показатели в норме. Собрали автомобиль с этим двигателем, уехал он к потребителю. Потребитель 100 км проехал и двигатель заклинил. Дефект надо выявить на этапе производства. С этой задачей справляется классификатор. На испытательном стенде записали все параметры: расход топлива, температура, обороты, состав выхлопных газов, вибрации, звук (спектрограмму). Отправили их на вход классификатора. Классификатор посчитал и выдал на выходе заключение: 1 - двигатель исправен или 0 - двигатель с дефектом.

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

. писал(а):
Admin писал(а):
Поxуй на чем, хоть сразу на Питоне.


Алгоритмический язык!


Да, Питон - алгоритмический язык. Или ты о чем-то другом?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
.
ящер-гриль
ящер-гриль


Репутация: +260/–45    

Зарегистрирован: 21.06.2006
Сообщения: 53738
Откуда: град обреченный
Награды: Нет

СообщениеДобавлено: Ср Янв 22, 2020 10:19 pm    Заголовок сообщения: Ответить с цитатой

Не, я про совецкие учебники информатики




_________________
has many Yanukoviches
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Blum
Мастер-Флудер I
Мастер-Флудер I


Предупреждение
Репутация: +23    

Зарегистрирован: 05.11.2008
Сообщения: 5042
Откуда: Східна Сибір
Награды: Нет

СообщениеДобавлено: Чт Янв 23, 2020 1:09 am    Заголовок сообщения: Ответить с цитатой

А почему переменные объявили как Integer, а не Byte?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
.
ящер-гриль
ящер-гриль


Репутация: +260/–45    

Зарегистрирован: 21.06.2006
Сообщения: 53738
Откуда: град обреченный
Награды: Нет

СообщениеДобавлено: Чт Янв 23, 2020 4:15 am    Заголовок сообщения: Ответить с цитатой

Это ко мне вопрос?
_________________
has many Yanukoviches
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Blum
Мастер-Флудер I
Мастер-Флудер I


Предупреждение
Репутация: +23    

Зарегистрирован: 05.11.2008
Сообщения: 5042
Откуда: Східна Сибір
Награды: Нет

СообщениеДобавлено: Чт Янв 23, 2020 4:48 am    Заголовок сообщения: Ответить с цитатой

. писал(а):
Это ко мне вопрос?

Наверное нет. Это я типа пошутил
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Blum
Мастер-Флудер I
Мастер-Флудер I


Предупреждение
Репутация: +23    

Зарегистрирован: 05.11.2008
Сообщения: 5042
Откуда: Східна Сибір
Награды: Нет

СообщениеДобавлено: Чт Янв 23, 2020 5:23 am    Заголовок сообщения: Ответить с цитатой

Но если кто-нибудь объяснит смысл использования лишнего байта, буду благодарен:)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
.
ящер-гриль
ящер-гриль


Репутация: +260/–45    

Зарегистрирован: 21.06.2006
Сообщения: 53738
Откуда: град обреченный
Награды: Нет

СообщениеДобавлено: Чт Янв 23, 2020 6:36 am    Заголовок сообщения: Ответить с цитатой

Трех байтов

Экономия памяти смехотворная даже по меркам 80-х годов. Зато могут вылезти сюрпризы, если количество итераций выйдет за 256

По идее, экономия памяти на счетчиках хоть как-то оправдана, если у тебя херова туча вложенных циклов и ты точно знаешь, что они все не превысят определенное значение
_________________
has many Yanukoviches
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Blum
Мастер-Флудер I
Мастер-Флудер I


Предупреждение
Репутация: +23    

Зарегистрирован: 05.11.2008
Сообщения: 5042
Откуда: Східна Сибір
Награды: Нет

СообщениеДобавлено: Чт Янв 23, 2020 9:25 am    Заголовок сообщения: Ответить с цитатой

Тут дело не столько в ресурсах, сколько в культуре программирования:)

PS Пардон, оговорился. Не байт, а бит конечно же
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Rasty
Crackpot


Репутация: +88/–10    

Зарегистрирован: 23.05.2006
Сообщения: 22371

Награды: Нет

СообщениеДобавлено: Чт Янв 23, 2020 3:54 pm    Заголовок сообщения: Ответить с цитатой

. писал(а):


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



Научился играть в такие шахматы. Все ок. Только реальные задачи решать не можешь. В реальных задачах есть кони. Теперь надо садиться и повторно учить шахматы, но уже не детские, а взрослые. Сомнительный подход.

"Учебный алгоритмический язык" - бессмысленная, бесполезная и вредная штука.
1. Бессмысленная. Возмножно, во времена СССР в ней был смысл (сомнительный). Когда на весь город был всего один компьютер - ЭВМ в каком-нить Вычислительном центре Академии наук. Информатику изучали не для того, чтобы программировать, а для общего развития.
2. Бесполезная. Надо научиться решать определенный тип задач. Смотришь, какой язык используется для решения задач этого типа. Учишь. Сразу учишь алгоритмы и синтаксис языка, который будешь использовать в будущем. По мере изучения пишешь код и запускаешь на выбранном языке - смотришь, как оно работает и где ошибки. В случае же с этим "учебным языком" - код запустить не получится. Нужен учитель-преподаватель, который будет смотреть твой код и указывать на ошибки. Можно, конечно, под эту срань поискать какой-нить компилятор "Мурзилка". Но это, xуй его знает, какой-то анекдот
Spoiler:


3. Вредная. Опять же, после изучения этой штуки, повторно придется изучать уже настоящий, взрослый, язык программирования. Трата времени на изучение десткой бесполезной хуиты.
Дальше кириллица в синтаксисе. Это жесть. Может развиться очень вредная привычка использовать кириллицу в коде. Некоторые языки программирования позволяют использовать кириллицу в названиях перменных. Например, в JavaSctipt в названиях перменных можно использовать символы Unicode:



Из-за этого (не из-за особенностей языка, а из-за особенностей человека, который постоянно раскладку дрочит, когда код пишет) могут возникнуть ошибки, выявить которые будет ну очень трудно:



В 2012-ом сайтики сидел делал (к Яну работать тогда устроился). Посадили к нам в офис SMO-шника. Есть на сайте страничка с текстом и картинками, на страничке ссылка с подпиской на рассылку. За каждого подписчика получаем деньги от владельца сайта. SMO-шник придумывает эффективные тексты для этой странички. За каким-то хуем он полез html-код странички редактировать (ссылку отредактировать). Всю страничку распидорасило. Я нормально так сидел тупил, пока не понял, что он в <a href> вместо "a" написал "а". Это хорошо, если распидорасит. Но может не распидорасить и посчитать некорректно. Например:



(В третьей строке проебал раскладку. Результаты вычислений записались в кириллическую переменную. В латинской переменной осталось предыдущее значение).

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

Вот, кстати, не смог найти информацию, есть ли в этой мурзилке функции или это и правда шахматы без коней.

. писал(а):
Трех байтов

Экономия памяти смехотворная даже по меркам 80-х годов. Зато могут вылезти сюрпризы, если количество итераций выйдет за 256

По идее, экономия памяти на счетчиках хоть как-то оправдана, если у тебя херова туча вложенных циклов и ты точно знаешь, что они все не превысят определенное значение


Оптимизация таких примитивов должна быть на уровне инстинктов у каждого программиста. Не знаешь, сколько у тебя итераций в цикле - это уже шаманство, а не программирование В Майкрософте такие шаманы сидят. Скайп, до того, как его выкупил Майкрософт, запускался одним процессом и съедал не больше 30 мб оперативной памяти. Сейчас скайп висит в 6 процессов и сжирает около 360 метров (неделю назад, после очередного обновления, выедал 800 метров, скрин не сделал).



Мессенджер, говорилка, 360 метров. Что они туда запихнули Там три байта проебал, тут три байта проебал и получил в сумме 360 мегабайт мусора.

Для сравнения, VLC player, в котором запущено Full HD видео, съедает всего 105 метров.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Форум -> Наука и технологии Часовой пояс: GMT
На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8, 9  След.
Страница 2 из 9

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB