Я пытаюсь протестировать мою систему рекомендаций, используя проверку соответствия k-fold cross. Моя система рекомендаций основана на неявной обратной связи. Поскольку я пытаюсь выполнить кросс-валидацию k-fold в моей матрице пользовательского элемента, я не могу использовать собственные методы k-fold scikit-learn (может я?). У меня возникли проблемы с реализацией моей методики проверки перекрестной привязки k-fold. Кажется, я использую много для циклов, и это становится очень медленным. Я прошел через эти ссылки: Optimize this function with numpy (or other vectorization methods) и Speed up for loop with numpy, но я не могу применить его к моему коду. Может кто-нибудь мне помочь?Оптимизация проверки перекрестных ссылок K для неявных систем рекомендаций
Мой код:
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 и оптимизировать код.
Любая помощь была бы оценена
Спасибо!
По какой-то причине я не думаю, что вы goi ng, чтобы сделать его быстрее, чем 'O (n^3)'. – erip
Почему вы не можете использовать проверку креста sklearn? – flyingmeatball
Я не уверен в этом, но я могу использовать sklearn.cross_validation для создания складок. Тем не менее, тренировка на каждой разной складке все равно потребует от меня петли. –