训练基于个性化的机器学习模型

时间:2019-09-29 16:08:42

标签: python machine-learning

我与python一起使用php项目进行工作,该Python使用flask作为api,根据以前在其他帖子上的参与度(纯粹基于用户)来预测用户喜欢该帖子。

我的要求是假设我们的系统中有1000个用户。而且他们以前也喜欢旧帖子。当新帖子到来时,我需要以某种方式确定用户是否喜欢。这是通过cron作业完成的

方法1

我正在使用Logistic回归作为模型,因此可能每个用户都需要动态pkl文件。因为不同用户对同一帖子的参与度不同,所以我需要保存诸如model_ {user_id} .pkl之类的文件,其中user_id是用户ID用户的

方法2

使用基于内容的推荐系统。但是据我所知,它不能像生产中的pkl文件那样存储。因此,对于1000个用户中的每个用户,我都需要运行荐荐功能。

解决1个缺点

为每个用户创建动态pkl文件,这意味着会有更多文件。我在互联网上从未见过这种方法

解决2个缺点

为每个用户调用推荐功能可能是一个坏主意。这会严重影响cpu的使用等。

有人可以帮助我如何正确解决此问题吗?我是机器学习的新手。请考虑我的问题。预先感谢。

1 个答案:

答案 0 :(得分:1)

我建议这样的事情:

  • 将用户模型创建为模型的数组(或数据框)
  • 将此数组另存为pkl
  • 加载应用程序时(不在每个API调用上),请将模型数组加载到内存中
  • 调用API时,模型已经在内存中-使用它来预测结果

类似这样的东西(未经测试-只是一个概念):

#for saving the model
model_data = pd.DataFrame(columns=['user','model'])
temp_model = RandomForestClassifier().fit(X,y)
new = pd.DataFrame({'user':[user_id],'model':[temp_model]})
model_data = model_data.append(new)
packed_model = jsonpickle.pickler.Pickler.flatten(model_data)

#for loading the model
unpacked_model = jsonpickle.unpickler.Unpickler.restore(packed_model) #this should be in the begining of your flask file - loaded into the memory
user_model=unpacked_model.at(user_id,'model') #this should be inside every api call