Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何在Excel-.exe文件中加载逻辑回归模型太慢 注:_Python 3.x_Machine Learning_Exe_Pyinstaller_Logistic Regression - Fatal编程技术网

Python 3.x 如何在Excel-.exe文件中加载逻辑回归模型太慢 注:

Python 3.x 如何在Excel-.exe文件中加载逻辑回归模型太慢 注:,python-3.x,machine-learning,exe,pyinstaller,logistic-regression,Python 3.x,Machine Learning,Exe,Pyinstaller,Logistic Regression,我对数据科学/编码比较陌生,所以如果我缺少一些基本的东西,请告诉我 问题: 在Microsoft excel中实现机器学习模型的建议步骤是什么 我的策略如下: 1.)矢量化我的文本数据以供培训 2.)训练逻辑回归模型 3.)Pickle训练模型和拟合矢量器 4.)将模型/矢量器加载到单独的python文件中 5.)使用PyInstaller将python文件转换为.exe文件 6.)在Excel VBA中调用python.exe文件,根据需要对文本数据进行分类 这个过程有效,我可以调用模型对文本

我对数据科学/编码比较陌生,所以如果我缺少一些基本的东西,请告诉我

问题: 在Microsoft excel中实现机器学习模型的建议步骤是什么

我的策略如下:

1.)矢量化我的文本数据以供培训

2.)训练逻辑回归模型

3.)Pickle训练模型和拟合矢量器

4.)将模型/矢量器加载到单独的python文件中

5.)使用PyInstaller将python文件转换为.exe文件

6.)在Excel VBA中调用python.exe文件,根据需要对文本数据进行分类

这个过程有效,我可以调用模型对文本进行分类。但是,一个大问题是执行.exe文件需要多长时间。加载pickle数据的python代码只需10-20秒即可执行。另一方面,如果只需要一个字符串条目进行分类,则从该代码派生的.exe至少需要5分钟才能执行

.exe文件也非常大,为305 MB。这可能是由于安装了加载模型和矢量器所需的sklearn模块。我不确定是否有更轻的解决方案。我确信对于简单的逻辑回归模型有更好的选择

最后,我希望能就如何在excel中高效运行我的机器学习模型找到任何建议

Python代码示例 生成Logistic回归模型和Pickle 将pickle文件加载到单独的Python文件中 使用PyInstaller在命令提示符下创建.Exe文件 在命令提示符下,我从.py文件创建了一个可执行文件

pyinstaller--一个文件eSOMS\u MS\u Executable.spec

注意:我调整了提供给PyInstaller的.spec文件,以提高递归限制并指定大量隐藏导入:

# -*- 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 )

代码可以工作,但太慢了,不实用。

在与我的it朋友讨论后,他们将我引向以下帖子:

我了解到从一个文件创建的可执行文件可能非常大/非常慢。我改为--onedir,可执行文件变得更小,现在只有15MB(与305MB相比有了很大的改进)

pyinstaller--onedir eSOMS\u MS\u Executable.spec


谢谢大家

出于好奇,为什么需要使用excel?我将在excel工作表中构建其他功能,这些功能将与python代码可执行文件集成。我希望用户能够在不同的时间范围内输入,我的用户使用Excel都很舒服。谢谢,我明白,很多人都抵制改变,他们喜欢按他们的方式行事,但请考虑这是一个创新的机会。您可以使用Flask、Dash、Django轻松构建前端,用户可以使用类似于每个人使用的移动银行或一些在线帐户管理系统的界面与您的模型进行交互。我在我的公司也有同样的经历,但如果你能以正确的方式为自己的晋升做好准备的话。组织喜欢创新的思考者。祝你好运。这是一个公平的评论。这条路会有一些挑战,因为我们有一个相当严格的限制。然而,这可能是最好的长期解决方案。
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)

# -*- 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 )