• Основы машинного обучения
  • Основы Python
  • Основы фляги
  • Угловые основы
  • Сохранение и загрузка модели машинного обучения — Ссылка

Что такое вывод?

  • После обучения модели необходимо использовать обученную модель путем передачи соответствующих входных данных для получения выходных данных. Результатом может быть классификация, прогнозирование, кластеризация и т. д. Этот процесс использования модели для создания выходных данных называется выводом.
  • По сути, за кулисами, на основе данных обучения, модель разработала математическое уравнение. Где, когда предоставляются входные данные, это уравнение/алгоритм работает с входными данными на основе параметров, полученных из обучающих данных, для получения выходных данных.
  • Другими словами,

Вывод машинного обучения — это процесс ввода точек данных в модель машинного обучения для расчета выходных данных, таких как одна числовая оценка. Этот процесс также называется эксплуатацией модели машинного обучения или запуском модели машинного обучения в производство. — Облачная документация Google

Проблемы при построении логических выводов

  • Как вызвать эту обученную модель из другого приложения? Предположим, у нас есть пользовательский интерфейс (Angular, React и т. д.), где мы получаем входные данные от пользователей, и нам нужно передать эти входные данные обученной модели. Как мы можем этого добиться?
  • Как мы индустриализируем или производим обученную модель?

Решение

  • Чтобы сделать модель доступной для других приложений, мы можем использовать API. В общем, API (интерфейс прикладного программирования) — это метод, с помощью которого два или более приложений могут взаимодействовать друг с другом.

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

  • Несколько фреймворков могут помочь нам в реализации API, таких как Flask, Django и т. д. Эти фреймворки могут предоставлять API, где открытые API получают входные данные в желаемом формате, обрабатывают входные данные, передавая их обученной модели, и возвращают ответ.

Сквозная реализация — пример

  • Давайте создадим простую модель машинного обучения и воспользуемся ею из внешнего интерфейса. Модель машинного обучения будет разработана с использованием Python. Для разработки API мы будем использовать фреймворк Flask.
  • Пользовательский интерфейс интерфейса разработан с использованием Angular, где мы будем получать входные данные от пользователя. Входные данные из пользовательского интерфейса будут передаваться во фреймворк Flask через API.
  • Платформа Flask будет обрабатывать входные данные, применяя обученную модель и возвращая ответ. Возвращенный ответ будет получен и показан клиенту приложением angular.

Модель машинного обучения

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

Шаги для обучения

  • Импортируйте необходимые пакеты. Модель реализована с помощью методов TfidfVectorizer и RandomForestClassifier из пакета sklearn. Обязательно установите пакет sklearn с помощью команды pip install sklearn.
import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
import getpass
import pickle
  • Загрузить и просмотреть данные. Надежность пароля может принимать три значения: 0 — надежность пароля «слабая», 1 — надежность пароля «средняя» и 2 — надежность пароля «сильная».
data = pd.read_csv("../assets/train_data/training.csv", error_bad_lines=False)
print(data.head())

  • Предварительно обработайте данные. Здесь есть только два шага предварительной обработки: отбрасывание нулевых значений и сопоставление надежности пароля с числом (чтобы сделать его пригодным для моделирования).
data = data.dropna()
data["strength"] = data["strength"].map({0: "Weak", 
                                         1: "Medium",
                                         2: "Strong"})
  • Векторизация и разделение данных. Пароль обучающих данных преобразуется с помощью TfidfVectorizer. Мы можем заметить, что 5% обучающих данных используются для тестирования.
def word(password):
    character=[]
    for i in password:
        character.append(i)
    return character
  
x = np.array(data["password"])
y = np.array(data["strength"])

tdif = TfidfVectorizer(tokenizer=word)
x = tdif.fit_transform(x)
xtrain, xtest, ytrain, ytest = train_test_split(x, y, 
                                                test_size=0.05, 
                                                random_state=42)
  • Обучение модели RandomForestClassifier. И после подгонки модели мы можем получить среднюю точность ~ 95% на тестовых данных.
model = RandomForestClassifier()
model.fit(xtrain, ytrain)
print(model.score(xtest, ytest))
  • Сохраните модель как рассол. Подробнее о травлении и рассоле смотрите в этом блоге — Ссылка.
pickle.dump(tdif, open("../assets/pickled/vectorizer.pkl", "wb"))
pickle.dump(model, open('../assets/pickled/model.pkl', 'wb'))

Флэш-сервер

Сервер Flask определяется как серверное программное обеспечение, способное выполнять HTTP-запросы в общедоступной всемирной сети, частной локальной сети и частных глобальных сетях и состоящее из одного или нескольких компьютеров, объединенных вместе и специально работающих для запуска программного приложения во всемирной сети. — ЭДУКБА

  • Кодовую базу для flask-сервера можно найти здесь — Ссылка

Шаги по настройке сервера Flask

  • Установите Flask с помощью команды pip install Flask.
  • Создайте файл app.py и следующий код
from flask import Flask, render_template, jsonify, request, json
import os

app = Flask(__name__)

@app.route('/pingServer', methods=['GET'])
def pingServer():
    resp = {
        "messId": "S",
        "messText": "Success"
    }
    return jsonify(resp)


if __name__ == "__main__":
    port = int(os.environ.get('PORT', 5011))
    app.run(debug=True, host='0.0.0.0', port=port)
  • Запустите приложение с помощью команды python app.py. Перейдите по URL-адресу http://localhost:5011/pingServer. Вы должны получить результат, аналогичный показанному ниже.

  • Добавьте нашу обученную модель в качестве API, внеся несколько дополнений в код. Первый шаг — загрузить подобранный векторизатор и обученную модель из файла рассола.
if __name__ == "__main__":
    # Load Pickled Objects
    pickled_tfidf = pickle.load(open('./assets/pickled/vectorizer.pkl', 'rb'))
    pickled_model = pickle.load(open('./assets/pickled/model.pkl', 'rb'))

    port = int(os.environ.get('PORT', 5011))
    app.run(debug=True, host='0.0.0.0', port=port)
  • Добавьте API, чтобы получать входные данные и обрабатывать их с помощью обученной модели.
@app.route('/validatePass', methods=['POST'])
@cross_origin()
def validatePass():
    body_inp = json.loads(request.data)
    data = pickled_tfidf.transform([body_inp['password']]).toarray()
    output = pickled_model.predict(data)
    resp = {
        "messId": "S",
        "messText": "Success",
        "strength": output[0]
    }
    return jsonify(resp)


def word(password):
    character = []
    for i in password:
        character.append(i)
    return character
  • Проверьте этот почтовый запрос в почтальоне, как показано ниже. Входные данные передаются через тело. Ответ о силе для данного пароля можно найти в ключе ответа «сила».

Заключительные комментарии — сервер Flask

  • Сервер Flask работает на порту 5011 с двумя конечными точками API. Одной конечной точкой является проверка соединения. Другая конечная точка используется для передачи входных данных для запуска модели и возврата ответа.

Угловой интерфейс

Angular — это JavaScript-фреймворк с открытым исходным кодом, написанный на TypeScript. Google поддерживает его, и его основная цель — разработка одностраничных приложений. Как фреймворк Angular имеет явные преимущества, а также предоставляет стандартную структуру для работы разработчиков. — Просто учиться

  • Кодовую базу приложения angular можно найти здесь — Ссылка

Шаги по настройке приложения Angular

  • Установите Angular CLI с помощью команды npm install -g @angular/cli
  • Создайте новый проект angular с помощью команды ng new client.
  • В папке клиента будет создано несколько файлов. Мы обсудим только важные файлы.

  • Создайте сервисный слой в Angular с помощью команды ng generate service common-service
  • Добавьте код для доступа к Flask API на сервисном уровне angular в созданный файл common.service.ts. Обратите внимание, что мы используем тот же порт, на котором работает Flask. Точно так же мы используем конечные точки, которые мы подготовили в Flask.
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/internal/Observable';
import { HttpClient } from '@angular/common/http';

@Injectable({
  providedIn: 'root',
})
export class CommonService {
  constructor(private http: HttpClient) {}

  pingServer(): Observable<any> {
    return this.http.get(`http://localhost:5011/pingServer`);
  }

  checkPasswordStrenth(body): Observable<any> {
    return this.http.post(`http://localhost:5011/validatePass`, body)
  }
}
  • Перейдите к app.component.html и добавьте код, аналогичный приведенному ниже.
<h1>Password Strength Check Using ML</h1>

<br />

<button (click)="pingServer()">Ping Server To Test Connection</button>

<br /><br /><br /><br />

<input type="text" [(ngModel)]="password" placeholder="Enter password..." />

<button
  type="button"
  (click)="checkPasswordStrength()"
  style="margin-left: 0.5%"
>
  Check Password Strength
</button>

<router-outlet></router-outlet>
  • Перейдите к app.component.ts и добавьте часть кода контроллера, которая получает входные данные из файла HTML и вызывает API для получения надежности пароля. Как только ответ получен, он отображается пользователю в виде предупреждения.
pingServer() {
  const pingServerRequest = this.commonService.pingServer();

  forkJoin([pingServerRequest]).subscribe((results) => {
    console.log(results);
    if (results[0]?.messId === 'S') {
      window.alert(results[0]['messText']);
    } else {
      window.alert('Failure to establish connection to server...');
    }
  });
}

checkPasswordStrength() {
  if (this.password == '') {
    window.alert('Please enter a password to check.');
  } else {
    let body = {
      password: this.password,
    };

    const checkPassStrengthRequest =
      this.commonService.checkPasswordStrenth(body);

    forkJoin([checkPassStrengthRequest]).subscribe((results) => {
      console.log(results);
      if (results[0]?.messId === 'S') {
        window.alert('Your password strength is ' + results[0]['strength']);
      } else {
        window.alert('Failure to establish connection to server...');
      }
    });
  }
}
  • Запустите приложение с помощью команды npm start или ng serve. Перейдите по URL-адресу http://localhost:4200. Вы должны увидеть вывод, аналогичный приведенному ниже.

  • Теперь нажмите кнопку Ping Server To Test Connection, и вы сможете получить предупреждение, как показано ниже. Это означает, что приложение Angular может успешно подключиться к внутреннему серверу Flask.

  • Чтобы проверить надежность пароля, введите пароль в поле ввода и нажмите «Проверить надежность пароля». Надежность пароля будет показана в окне предупреждения, как показано ниже.

Заключительные комментарии — приложение Angular

  • Приложение angular успешно работает на порту 4200. Оно может успешно взаимодействовать с сервером Flask. Мы можем получить надежность пароля из обученной модели с помощью API, и она успешно отображается клиенту в виде предупреждения.

Заключение

  • Мы поняли, как мы можем получить выводы из модели машинного обучения. И как его можно индустриализировать для потребления из других приложений.
  • Мы также разработали простое комплексное приложение от внешнего интерфейса до внутреннего. Мы использовали Python для разработки модели классификации надежности пароля. Для API мы использовали фреймворк Flask. И для пользовательского интерфейса мы использовали Angular.
  • Таким образом, мы успешно реализовали UI, из которого пользователь может отправить запрос с входными данными. Сервер Flask, в свою очередь, может успешно получить запрос и обработать его с использованием модели. Наконец, сервер Flask возвращает ответ, который приложение Angular получает и показывает пользователю.

Рекомендации