缩短 sklearn 逻辑回归的运行时间
Posted
技术标签:
【中文标题】缩短 sklearn 逻辑回归的运行时间【英文标题】:shortening runtime for sklearn Logistic Regression 【发布时间】:2021-01-30 06:57:06 【问题描述】:我目前有一个 Flask 服务器,它接收数据并对其应用逻辑回归算法。但是,我计划将其转换为 AWS Lambda 函数,并且我希望算法在时间上尽可能高效。
输入是这样的:
代码的算法部分只有几行:
from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression(random_state = 0)
classifier.fit(X_train, y_train)
y_predict_test = classifier.predict(X)
oldlist = classifier.predict_proba(X)
problist = sortProb(oldlist)
return(problist)
目前处理此过程大约需要 2.6 秒。有没有办法加快速度?
谢谢
【问题讨论】:
在样本上运行您的模型 这能回答你的问题吗? Speeding up sklearn logistic regression 【参考方案1】:这不是 lambda 通常在机器学习管道中使用的方式。通常,您会使用 lambda 进行一些数据格式化并将结果传递到托管经过训练的模型的 SageMaker 端点。但是对于一些非常小的模型,我想你可以试试 lambda 作为你的后端。
首先,无论您使用的是 lambda 还是任何后端,您很可能都不想在每次调用端点时都训练模型,您只想进行推理(除非我们专门讨论在线学习)。
因此,像往常一样离线训练您的模型,然后使用该训练过的模型进行推理。逻辑回归是一种非常简单的算法(至少是推理部分),因此您可以提取相关参数并将它们“硬编码”到具有适当推理逻辑的 lambda 函数中。
这是提取模型系数和截距的方法。
# This is the offline part
classifier = LogisticRegression(random_state = 0)
classifier.fit(X_train, y_train)
coef, intercept = clf.coef_, clf.intercept_
并在您的 lambda 函数中使用它们。以下是你可以如何实现它(我在这里使用numpy
,但你可以随意实现它)。另外,我省略了 lambda 的样板代码。
# This goes into your lambda function
coef, intercept = # hardcoded parameters here
def sigmoid(X):
return 1 / (1 + np.exp(-X))
def predict(X, intercept, coef):
return sigmoid(np.dot(X, coef.T) + intercept)
# compute prediction
predict(X[0], intercept, coef)
【讨论】:
我不太明白如何在 lambda 中进行离线训练?我希望能够将数据框传递到 LogReg 算法并获取概率列表。不知道离线如何使用它。如果您不介意,我可以获取您的 reddit 用户名,以便我可以带这个 convo 聊天吗? 我所说的离线训练是指你在不使用 lambda 的情况下执行训练步骤(本地在你的计算机上或你可以访问的某个虚拟服务器上),一旦完成,你只需提取参数然后将其硬编码到您的 lambda 函数中。这假设您的端点仅负责预测,而不负责实际训练。如果你打算同时进行训练和预测,那么我认为 lambda 不适合这样的任务,你很可能需要设计不同的策略。以上是关于缩短 sklearn 逻辑回归的运行时间的主要内容,如果未能解决你的问题,请参考以下文章
逻辑回归 SKLEARN 无法将字符串转换为浮点数:“DailyReturns”