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

Как и в истории программирования, мы стали свидетелями многих серьезных сдвигов парадигмы в области фокусировки. Будь то переход от процедурного к OOPS или от настольного компьютера к Интернету, а затем сначала к мобильному. И теперь, когда технологические гиганты называют это первой эрой искусственного интеллекта.

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

Без лишних слов я расскажу о цели этого блога и своих намерениях. Хотя меня всегда поражали и поражали возможности того, что может делать ИИ, я лишь немного экспериментировал с ИИ во время учебы в колледже. Я начал свою карьеру с обычной веб-разработки, пошел дальше и сделал полный круг, чтобы наконец вернуться к ИИ. Переходя от веб / мобильной разработки, вы можете почувствовать начальное трение, как и я, и это не сильно из-за кода, это все еще делается на языке программирования, но трение заключается в том, как мы тренировали наш мозг, годами занимаясь этим. Веб-разработка. Я много читаю, чтобы начать работу, но, судя по моему опыту, это все разговоры, пока вы не напишете код. Не отрицая, что это также требует большого математического и логического понимания, но нет ничего лучше, чем кодирование вместе с чтением о машинном обучении.

Это все разговоры, пока вы не напишете код

В этой серии статей я напишу об основах машинного обучения для начала, чтобы оно могло помочь тем, кто наткнется на ту же ступеньку, что и я. Это работа, и я буду продолжать ее обновлять. Я постараюсь добавить больше примеров кода и меньше текста, чтобы действительно понять ML, а не просто говорить об этом.

Прежде чем приступить к машинному обучению, давайте немного поговорим об ИИ.

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

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

А теперь давайте начнем с приветственного мира машинного обучения.

Постановка проблемы: отличия яблока от апельсина

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

  • Форма
  • Цвет
  • Вкус
  • Текстура
  • Масса

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

Предположим, что в нашем случае мы берем Вес и Текстуру как функции для обнаружения. Следующим шагом является сбор данных для некоторых существующих случаев.

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

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

Приступаем к коду. В этом руководстве мы будем использовать python и его библиотеки.

Давайте поговорим построчно

from sklearn import tree

Sklearn - это библиотека для Python с открытым исходным кодом. (Подробнее об этом позже)

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

так что мы изменим

features = [[140, "smooth"], [130, "smooth"], [150, "bumpy"], [170, "bumpy"]]
//to
features = [[140, "1"], [130, "1"], [150, "0"], [170, "0"]]
// replacing smooth with 1 and bumpy with 0
// and 
labels = ["apple", "apple", "orange", "orange"]
//to
labels = ["0", "0", "1", "1"]
// changing apple with 0 and orange with 1

Теперь код становится

А пока рассмотрим DecisionTreeClassifier () как существующий классификатор, предоставляемый деревом из sklearn, который имеет функцию fit () для обучения данных. В качестве входных данных он принимает функции и метки. Таким образом, мы можем ввести все доступные нам обучающие данные в классификатор, который мы только что использовали. Все данные, поступающие в систему, называются обучающими данными. Теперь, чтобы проверить данные на уникальное значение, мы должны убедиться, что данные тестирования не являются частью обучающих данных. (Если мы попытаемся предсказать данные из набора обучающих данных, он должен дать правильный результат, и это не интеллект)

Теперь, когда мы прогнозируем для двух входов

print (clf.predict([[130,1]]))
print (clf.predict([[160,0]]))

Мы получаем результаты в виде яблока и апельсина соответственно, что является правильным, хотя данные, которые мы прогнозировали, не являются частью исходного набора данных обучения, что делает нашу систему интеллектуальной? Не совсем, но это начало, поздравляю с написанием Hello World для машинного обучения.

Уровень повышен !!!

А теперь давайте решим еще одну классическую проблему с более глубоким пониманием кода.

Постановка проблемы: различать разные виды Ириса

Существует три вида цветка ириса, а именно Iris setosa, Iris virginica и Iris versicolor. Классификация проводится на основе четырех характеристик: длина лепестка, ширина лепестка, длина чашелистика и ширина чашелистника. Если вы нажмете на ссылку это, вы увидите набор данных по 50 цветкам каждого вида.

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

Классификаторы

Если мы подумаем о классификаторах с общего уровня, они будут выглядеть как функция, написанная ниже

def someClassifier(features):
    # do some logic and magic here
    return label

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

Теперь возвращаясь к проблеме Iris, вот как будет выглядеть стартовый код. Iris - классический пример, поэтому его данные по умолчанию доступны в библиотеке sklearn. В этом коде мы только что загрузили данные диафрагмы с помощью load_iris () и перебрали все данные для печати.

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

Если мы пройдемся по коду построчно сейчас, после загрузки данных в строке 6. Я создал массив для test_idx, который содержит [0,50,100], которые на самом деле являются индексами для первых значений всех трех типов цветов.

0–49: сетоса

50–99: разноцветный

100–149: virginica

Поскольку тестовые данные не должны быть частью обучающих данных, мы удалим их из train_target и train_data в строках 10 и 11.

Затем мы создаем test_data и test_target для тестирования в строках 15 и 16, используя test_idx, т.е. наши тестовые данные содержат три цветка, по одному каждого типа.

Теперь, как и раньше, мы используем DecisionTreeClassifier () в строках 19 и 20 для обучения данных, а затем проверяем результат для тестовых данных в строках 22 и 23.

И бац! мы получаем правильные результаты.

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

Написание собственных классификаторов

На первый взгляд, приведенный ниже код может показаться пугающим для новичков в Python, но не беспокойтесь, посмотрите строку за строкой. Python очень прост для понимания, а код, написанный на python, действительно близок к поэзии. Объясняя себя.

Начнем со строки 31. Следующие несколько строк покажутся вам знакомыми, если вы читали этот пост до сих пор. Мы импортировали данные по радужной оболочке глаза. Теперь в строках 37 и 38 мы назначаем данные и цель для обучающего набора.

В строке 42 мы просто разделяем данные на две части с обучающими и тестовыми значениями, указав size = 0,5, мы просто подразумеваем, что нам нужно 50% данных для каждой (x и y)

x_train, x_test,  y_train, y_test  = train_test_split(x, y , test_size = .5)

Если вы посмотрите на строки 44 и 47–48, я закомментировал классификаторы, а именно DecisionTreeClassifier () и KneighborsClassifier (). Если мы раскомментируем любой из них и используем его вместо строки 45 (где я использовал свой собственный классификатор), он все равно будет работать и, возможно, с большей точностью. Итак, теперь я напишу о своем классификаторе, который я назвал BareBonesKNN (). Как и другие классификаторы, у него должен быть метод fit () для обучения и метод pred () для прогнозирования результата.

Итак, я определил класс под названием BareBonesKNN () с тремя методами - подходящим, прогнозирующим и ближайшим.

метод fit (training_data)

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

прогноз (test_data) метод

Теперь для прогнозирования мы передаем тестовые данные для прогнозирования функции и просто начинаем с пустого массива для прогнозирования, а затем перебираем все значения в test_data. и передает каждое значение в test_data методу closest, который возвращает для него метку, и возвращенная метка добавляется к пустому массиву прогнозов.

ближайший (область, значение_индивидуального_тест_данных)

Ближайшая функция начинается с рассмотрения евклидова расстояния текущего значения test_data_value с первым значением training_data как лучшим расстоянием и индексом этих данных как лучшим индексом для этого значения. Теперь мы просто перебираем все значения в training_data, чтобы проверить, есть ли какое-либо евклидово расстояние меньше того, с которого мы начали, если да, мы заменим его. Наконец, в конце мы возвращаем значение и метку для test_data.

Итак, в данном случае мы рассматривали евклидово расстояние как математический источник для построения линии истинности. Если мы пойдем дальше и попытаемся вычислить точность, она составит всего около 70–75% по сравнению с 90–95% того, что мы получали для DecisionTreeClassifier и KNeighborClassifier. Причина в том, что мы выбрали очень простой способ построить нашу модель, используя евклидово разделение линий. Если мы более точно настроим наш алгоритм и будем искать более конкретное разделение, мы сможем настроить точность.

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

Обновление: Ресурсы для этого блога можно найти на GitHub здесь.

Резюме того, что мы делали на этом занятии

Эпизод - 1

  • Что такое машинное обучение?
  • Вдохновение для машинного обучения
  • Пример классификации Apple и Orange
  • Классический пример набора данных ириса
  • Классификаторы
  • Трубопроводы
  • РешениеДеревоКлассификатор
  • KNeighborClassifier
  • Написание собственных классификаторов

Некоторые вещи, о которых мы поговорим в Эпизоде ​​2

  • TensorFlow
  • Классификатор изображений с использованием TensorFlow
  • Использование TF.Learn