Как загрузить модель логистической регрессии в Excel - .exe файл слишком медленный - PullRequest
0 голосов
/ 30 мая 2019

ПРИМЕЧАНИЕ:

Я относительно новичок в области Data Science / кодирования, поэтому, пожалуйста, дайте мне знать, если я что-то упустил.

Вопрос

Какая процедура предлагается для реализации модели машинного обучения в Microsoft Excel?

Моя стратегия для этого была следующей:

1.) Векторизация моих текстовых данных для обучения

2.) Обучение модели логистической регрессии

3.) Обработка обученной модели и подгонка векторизатора

4.) Загрузка модели / векторизатора в отдельный файл python

5.) Преобразование файла python в файл .exe с помощью PyInstaller

6.) Вызовите файл python.exe в Excel VBA, классифицируя текстовые данные по необходимости

Эта процедура работает, и я могу вызвать модель для классификации текста.Тем не менее, большая проблема заключается в том, сколько времени требуется для выполнения файла .exe.Код Python, который загружает выбранные данные, занимает всего 10-20 секунд.С другой стороны, .exe, полученный из этого кода, выполняется не менее 5 минут, учитывая только одну строковую запись для классификации.

.exe-файл также очень большой - 305 МБ.Вероятно, это связано с установкой модулей sklearn, необходимых для загрузки модели и векторизатора.Я не уверен, есть ли более легкое решение для этого.Я уверен, что есть лучшая альтернатива для простой модели логистической регрессии.

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

Образец кода Python

Создание модели логистической регрессии и выборки

 from sklearn.externals import joblib 
''' https://www.geeksforgeeks.org/saving-a-machine-learning-model/ '''

path = "N:\\Drive_Location\\Pickles"
model_string = "eSOMS_Logistic_Regression_Model.pkl"
vectorizer_transformer_string = "eSOMS_Logistic_Regression_vectorizer_transformer.pkl"
model_full_path = path +'\\' + model_string
vectorizer_full_path = path +'\\' + vectorizer_transformer_string

''' Save the model as a pickle in a file '''
joblib.dump(classifier, model_full_path) 
joblib.dump(vectorizer.transform, vectorizer_full_path) 
logistic_regression_from_joblib = joblib.load(model_full_path)  
vectorizer_transformer_from_joblib = joblib.load(vectorizer_full_path)

Загрузка маринованного файла в отдельный файл Python

from sklearn.externals import joblib 

path = "N:\\Drive_Location\\Pickles"
model_string = "eSOMS_Logistic_Regression_Model.pkl"
vectorizer_transformer_string = "eSOMS_Logistic_Regression_vectorizer_transformer.pkl"
model_full_path = path +'\\' + model_string
vectorizer_full_path = path +'\\' + vectorizer_transformer_string

logistic_regression_from_joblib = joblib.load(model_full_path)  
vectorizer_transformer_from_joblib = joblib.load(vectorizer_full_path)

import sys

argument = sys.argv[1]

def myfunction(string):
    print (logistic_regression_from_joblib.predict(vectorizer_transformer_from_joblib([string])))

myfunction(argument)

Создать.Exe-файл в командной строке с помощью PyInstaller

В командной строке я создал исполняемый файл из файла .py.

pyinstaller --onefile eSOMS_MS_Executable.spec

ПРИМЕЧАНИЕ: Iизменил файл .spec, подаваемый в PyInstaller, чтобы увеличить предел рекурсии и указать многочисленные скрытые операции импорта:

# -*- mode: python -*-

import sys
sys.setrecursionlimit(5000)

block_cipher = None


a = Analysis(['eSOMS_MS_Executable.py'],
             pathex=['C:\\Users\\Username\\Desktop\\Python\\eSOMS'],
             binaries=[],
             datas=[],
             hiddenimports = ['sklearn.linear_model', 'sklearn.utils.sparsetools._graph_validation', 'sklearn.utils.sparsetools._graph_tools', 'sklearn.neighbors.typedefs', 'sklearn.feature_extraction'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='eSOMS_MS_Executable',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=True )

Код работает, но он слишком медленный, чтобы быть практичным.

1 Ответ

0 голосов
/ 05 июня 2019

После обсуждения с моими ИТ-друзьями они направили меня к этому сообщению: Приложение, созданное с помощью PyInstaller, имеет медленный запуск

Я узнал, что исполняемый файл, созданный из --onefile, может быть очень большим / медленным. Я изменил на --onedir, и исполняемый файл стал намного меньше, и теперь составляет всего 15 МБ (большое улучшение по сравнению с 305 МБ).

pyinstaller --onedir eSOMS_MS_Executable.spec

Спасибо, ребята!

...