gpt4 book ai didi

python - 隐式推荐系统的K折交叉验证优化

转载 作者:行者123 更新时间:2023-12-01 03:58:33 26 4
gpt4 key购买 nike

我一直在尝试使用 k 折交叉验证来测试我的推荐系统。我的推荐系统基于隐式反馈。由于我尝试在用户项矩阵上实现 k 折交叉验证,因此我无法使用 scikit-learn 的原生 k 折方法(可以吗?)。我在实现 k 重交叉验证技术时遇到问题。我似乎使用了很多 for 循环,而且它变得非常慢。我已经浏览了这些链接:Optimize this function with numpy (or other vectorization methods)Speed up for loop with numpy但我似乎无法将其应用到我的代码中。有人可以帮我吗?

我的代码:

 def TrainRepeat2(counts,FinalArr,k=3):


"""
parameters:
-------------------------------------------

counts : user-item matrix
k : No of folds
FinalArr : shuffled indices

Example:
if k = 3
FinalArr will be a list containing 3 lists with randomly shuffled indices
"""


# No of factors
num_factors= [10,20]
PartitionList = range(k)


# Iterating over the number of factors
for i in range(len(num_factors)):


# iterating over the folds
for partition in PartitionList:

# Keep one fold for testing
validation = counts[FinalArr[partition],:]

# CKeep the rest for training
validation_list = [x for x in PartitionList if x != partition]

# Train over the rest
for t in validation_list:

train = counts[FinalArr[t],:]
train = sparse.csr_matrix(train)
print "THe evaluation is being done for factor no %d" %(num_factors[i])
reg_param = 5

MF_als = ImplicitMF(train,validation,num_factors = num_factors[i],num_iterations=80,reg_param = reg_param,num_threads=14)
user_vectors,item_vectors= MF_als.train_model(flag,leaveone=False)

具体来说,该算法为o(N^3)。我想以某种方式删除 for 循环并优化代码。

如有任何帮助,我们将不胜感激

谢谢!

最佳答案

根据评论进行编辑

最终,如果您想运行交叉验证 n 次,则必须循环 n 次。无论该循环对您隐藏(并且希望以 cython 或类似的方式编写得非常有效)还是在您的代码中可见,这种情况都会发生。

我认为从高层次上讲,您想要的就在这里:

http://scikit-learn.org/stable/modules/cross_validation.html

你需要做的事情:编写一个分类器对象,它接受 train_data、train_class、test_data 返回 test_data 的预测列表。这是您的“推荐”类,适用于任何 sklearn 分类器。

编写一个评分对象。根据下面的评论,这应该采用两个相同长度的数组、预测和正确的分类,并计算误差。然后您可以在下面的示例 sklearn 代码中直接使用这两个对象。

假设:

您的完整数据集位于 df 中

你的“目标”(无论如何定义)在目标中

clf 是您的分类器(在本例中为推荐器)

记分器是计算误差的方式

n_samples = len(df)
cv = cross_validation.ShuffleSplit(n_samples, n_iter=3, test_size=0.3, random_state=0)

cross_validation.cross_val_score(clf, df, targets, scoring = scorer,cv=cv)

array([ 0.97..., 0.97..., 1. ])

关于python - 隐式推荐系统的K折交叉验证优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37014266/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com