void ModelComputationMTStaticSchedule::ThreadRun(int64 taskIdBegin, int64 taskIdEnd) { for (int64 taskId = taskIdBegin; taskId < taskIdEnd; ++taskId) { int uid1 = static_cast<int>((Math::Sqrt(8.0 * taskId + 1) + 1) / 2); int uid2 = taskId - (int64)uid1*(uid1-1)/2; const UserVec& uv1 = mTrainData->GetUserVector(uid1); const UserVec& uv2 = mTrainData->GetUserVector(uid2); float sim = ComputeSimilarity(uv1, uv2); mModel->Put(uid1, uid2, sim); } }
void ModelComputationST::ComputeModel(const TrainOption *option, RatingMatUsers *trainData, Model *model) { mTrainOption = option; mTrainData = trainData; mModel = model; AdjustRating(); for (int uid1 = 0; uid1 < mTrainData->NumUser(); ++uid1) { const UserVec& uv1 = trainData->GetUserVector(uid1); for (int uid2 = uid1 + 1; uid2 < mTrainData->NumUser(); ++uid2) { const UserVec& uv2 = trainData->GetUserVector(uid2); float sim = ComputeSimilarity(uv1, uv2); mModel->DirectPut(uid2, uid1, sim); } } }
void ModelComputationMT::WorkerRun() { while (true) { TaskBundle *currentBundle = mScheduler->WorkerGetTask(); if (currentBundle == nullptr) break; for (int i = 0; i < currentBundle->size(); ++i) { Task& task = currentBundle->at(i); const UserVec& uv1 = mTrainData->GetUserVector(task.uid1); const UserVec& uv2 = mTrainData->GetUserVector(task.uid2); task.sim = ComputeSimilarity(uv1, uv2); mModel->DirectPut(task.uid2, task.uid1, task.sim); } mScheduler->WorkerPutTask(currentBundle); } mScheduler->WorkerDone(); }
void LocalGeometryRef::ComputeSimilarityMatrix(char dis, int k) { this->Normalize(); //initialize similarity matrix this->similarity_matrix.set_size(this->num_row, this->num_row); this->similarity_matrix.fill(0); //searching for the k nearest neighbours //std::vector<std::vector< std::pair<unsigned int, double> > > kNeighborIDs; //kNeighborIDs = this->KnnSearch(k); //starting compute similarity matrix for(int i = 0; i < this->num_row; i++) { for(int j = i + 1; j < this->num_row; j++) { vnl_vector<double> dt1 = this->nor_data_matrix.get_row(i); vnl_vector<double> dt2 = this->nor_data_matrix.get_row(j); double distance = ComputeSimilarity(dt1,dt2,dis); similarity_matrix(i,j) = distance; similarity_matrix(j,i) = distance; } } }