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

Реализованные алгоритмы:

  • Машина опорных векторов
  • K ближайший сосед
  • Наивный байесовский метод Гаусса
  • Обучение персептрона

Библиотеки и модуль машинного обучения:

  • Библиотека обучения Scikit
  • CSV-модуль
  • случайный модуль

Если вы не знакомы с библиотекой машинного обучения Pandas, NumPy и т. д., эти модули будут вам полезны. Потому что эти модули похожи на базовый синтаксис Python.

Введение

Машинное обучение!!!🤪 Очень интересная технология в современном мире 😉. Я знаю, что вы много слышали об этом. Сегодня мы собираемся построить модель машинного обучения для проверки подлинности банкноты, независимо от того, подлинная она или нет 💵.

Всякий раз, когда вы идете в банк, чтобы внести наличные, кассир кладет банкноты в автомат, который определяет, являются ли банкноты подлинными или поддельными. Для этого машина использует некоторые методы классификации. Существует множество алгоритмов машинного обучения для классификации. Классификация — это тип контролируемого машинного обучения. В классификации есть несколько алгоритмов машинного обучения. Мы понимаем, что новичку сложно понять теоретическую концепцию каждого алгоритма. Если это правда для вас, то паниковать не о чем.🤪

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

Предыстория/интерес

Эта статья является частью лабораторного отчета курса «Искусственный интеллект» в Городском университете, Дакка, Бангладеш, проводимого Нуруззаманом Фаруки. Это лучший курс по искусственному интеллекту в Бангладеш.

В этом курсе мы изучили ИИ с нуля. Мы начали с базового Python и закончили обработкой естественного языка. Мы хорошо изучили теоретические концепции, основы математики в курсе «CSE 417: Искусственный интеллект», затем применили наши знания в лабораторном курсе «CSE 418: Лаборатория искусственного интеллекта».

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

Постановка задачи

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

Некоторыми источниками для загрузки бесплатного набора данных являются Kaggle, репозиторий машинного обучения UCI и т. д.

Мы знаем, что данные беспорядочны. Набор данных может содержать несколько отсутствующих значений. В этой ситуации мы должны очистить набор данных. Чтобы избежать подобных хлопот, мы собираемся использовать предварительно очищенный набор данных. Вы можете загрузить набор данных (файл .CSV) из моего репозитория Github. Вот ссылка (GitHub)

Набор данных содержит в общей сложности 1372 записи различных банкнот. Четыре левых столбца — это данные, которые мы можем использовать, чтобы предсказать, является ли банкнота подлинной или поддельной, то есть внешними данными, предоставленными человеком, закодированными как 0 и 1, где 0 представляет собой подлинную, а 1 — поддельную/поддельную банкноту. Алгоритмы машинного обучения требуют данных, в которых функции и метки отделены друг от друга. Метка означает выходной класс или выходную категорию. В нашем наборе данных дисперсия, асимметрия, эксцесс и энтропия являются функциями, тогда как столбец класса содержит метку.

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

Код Python для построения модели машинного обучения

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

#import sklearn
# pip install scikit-learn
import csv
import random

from sklearn import svm
from sklearn.linear_model import Perceptron
from sklearn.naive_bayes import GaussianNB
from sklearn.neighbors import KNeighborsClassifier
#Loading Algorithm in model variable
model = svm.SVC()
#model = Perceptron()
# model = KNeighborsClassifier(n_neighbors=3)
# model = GaussianNB()
# Read data in from file
with open("banknotes.csv") as f:
    reader = csv.reader(f)
    next(reader)
    data = []
    for row in reader:
    data.append({
        "feature": [float(cell) for cell in row[:4]],
        "label": "Authentic" if row[4] == "0" else "Counterfeit"
    })
# Separate data into training and testing groups
holdout = int(0.40 * len(data))
random.shuffle(data)
testing = data[:holdout]
training = data[holdout:]
# Train model on training set
X_training = [row["feature"] for row in training]
y_training = [row["label"] for row in training]
model.fit(X_training, y_training)
# Make predictions on the testing set
X_testing = [row["feature"] for row in testing]
y_testing = [row["label"] for row in testing]
predictions = model.predict(X_testing)
# Compute how well we performed
correct = 0
incorrect = 0
total = 0
for actual, predicted in zip(y_testing, predictions):
    total += 1
    if actual == predicted:
        correct += 1
    else:
        incorrect += 1
# Print results
print(f"Results for model {type(model).__name__}")
print(f"Correct: {correct}")
print(f"Incorrect: {incorrect}")
print(f"Accuracy: {100 * correct / total:.2f}%")

Вывод

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

Результат

Объяснение всего кода для лучшего понимания

1. Импорт необходимых модулей

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

import csv
import random

2. Загрузите алгоритмы машинного обучения из научной библиотеки.

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

  1. Машина опорных векторов

Для обучения машины опорных векторов мы использовали класс SVC из модуля «sklearn.svm».

from sklearn import svm
model = svm.SVC()

2. Обучение перцептрону

Для обучения Perceptron Learning мы импортировали Perceptron из модуля «sklearn.linear_model».

from sklearn.linear_model import Perceptron
model = Perceptron()

3. Гауссовский наивный байесовский метод

Для обучения Gaussian Naive Bayes мы импортировали Gaussian из модуля «sklearn.naive_bayes».

from sklearn.naive_bayes import GaussianNB
model = GaussianNB()

4. K ближайший сосед

Для обучения машины опорных векторов мы импортировали KNeighborsClassifier из модуля «sklearn.neighbors». Мы рассмотрели 3 ближайших соседа.

from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier(n_neighbors=3)

Скрипт:

from sklearn import svm
from sklearn.linear_model import Perceptron
from sklearn.naive_bayes import GaussianNB
from sklearn.neighbors import KNeighborsClassifier
# Loading Algorithm in model
model = svm.SVC()
#model = Perceptron()
#model = KNeighborsClassifier(n_neighbors=3)
#model = GaussianNB()

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

3. Загрузка набора данных

После импорта библиотек следующим шагом будет загрузка набора данных в наше приложение. Для этого мы открыли файл с основными функциями файла Python и использовали функцию «csv.reader()» модуля csv, которая считывает набор данных в формате CSV.

# Read data from the file
with open("banknotes.csv") as f:
    reader = csv.reader(f)
    next(reader)

4. Разделите набор данных на функции и метки.

В нашем наборе данных дисперсия, асимметрия, эксцесс и энтропия являются функциями, тогда как столбец класса содержит метку. Следующий сценарий вместе с частью «Загрузка» делит данные на функции и наборы меток. Затем сохраните функцию и метку в списке данных = []

#Read data from csv file
with open("banknotes.csv") as f:
    reader = csv.reader(f)
    next(reader)
    data = []
    for row in reader:
        data.append({
            "feature": [float(cell) for cell in row[:4]],
            "label": "Authentic" if row[4] == "0" else "Counterfeit"
        })

Цикл for индекс, который мы хотим отфильтровать из нашего набора данных, в «функции»: [float(cell) для ячейки в строке [:4]], строка, в которой мы отфильтровали столбец 0 до столбца 3, которые содержат наш набор функций. В «метке»: «Подлинный», если строка [4] == «0», иначе «Подделка», мы отфильтровали только записи из четвертого столбца, который содержит метки (класс). Где, если метка равна 0, банкнота является подлинной/настоящей, а когда метка равна 0, банкнота является поддельной/фальшивой.

5. Разделите набор данных на группы обучения и тестирования.

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

# Separate data into training and testing groups
holdout = int(0.40 * len(data))
random.shuffle(data)
testing = data[:holdout]
training = data[holdout:]

Во-первых, мы вычисляем длину списка данных в holdout = int(0,40 * len(data)) и перемешиваем элементы данных для лучшей производительности, используя функцию random.shuffle() из модуля random в random.shuffle(data)

Затем мы сохраняем 40% данных в группе тестирования и 60% данных в группе обучения.

6. Обучение модели на тренировочном наборе

# Train model on the training set
X_training = [row["feature"] for row in training]
y_training = [row["label"] for row in training]
model.fit(X_training, y_training)

Набор функций обучения сохраняется как x_traing, а набор меток обучения сохраняется как y_training, а затем передается методу «fit()».

7. Тестирование модели на тестовом наборе

После обучения алгоритма мы выполнили прогнозы на тестовом наборе. Для прогнозирования используется метод «predict()». Прогнозируемые записи передаются в качестве параметров в метод «predict()», как показано ниже:

# Make predictions on the testing set
X_testing = [row["evidence"] for row in testing]
y_testing = [row["label"] for row in testing]
predictions = model.predict(X_testing)

8. Оценка производительности модели

Мы оценили производительность модели с помощью простого кода на Python:

# Compute how well we performed
correct = 0
incorrect = 0
total = 0
for actual, predicted in zip(y_testing, predictions):
    total += 1
    if actual == predicted:
        correct += 1
    else:
        incorrect += 1

9. Точность печати модели

В конце напечатал точность модели для лучшего понимания

# Print results
print(f"Results for model {type(model).__name__}")
print(f"Correct: {correct}")
print(f"Incorrect: {incorrect}")
print(f"Accuracy: {100 * correct / total:.2f}%")

Вывод

Аутентификация банкнот является важной задачей. Выявить фальшивые банкноты вручную сложно. В этом могут помочь алгоритмы машинного обучения. В этой статье мы объяснили, как решили проблему аутентификации банкнот с помощью методов машинного обучения. Мы сравнили четыре разных алгоритма с точки зрения производительности и пришли к выводу, что алгоритмы KNN и SVM являются лучшими алгоритмами для аутентификации банкнот с точностью 100% и 99,45%.

Однако вы можете создать собственную модель для классификации похожих наборов данных (например, классификация раковых опухолевых клеток, классификация лекарств, анализ настроений и т. д.), реализовав тот же/слегка измененный фрагмент кода, который приведен выше. Это была простая и легкая реализация курса «CSE 418: Лаборатория искусственного интеллекта» в Городском университете, Дакка, Бангладеш, проводимого сэром Нуруззаманом Фаруки. Какой лучший курс ИИ в Бангладеш.

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