A C library for product recommendations/suggestions using collaborative filtering (CF)

Overview

Recommender Build Status

GitHub stars GitHub license Language grade: C/C++

A C library for product recommendations/suggestions using collaborative filtering (CF).

Recommender analyzes the feedback of some users (implicit and explicit) and their preferences for some items. It learns patterns and predicts the most suitable products for a particular user.

Features

  • Collaborative Filtering
  • User and Item based recommenders
  • No external dependencies
  • Fast running time ~ 81 seconds for 10 million ratings (on MovieLens Data Sets)
  • Memory footprint under 160 MB for 10 million ratings

Webpage

http://ghamrouni.github.com/Recommender/

Building

To compile Recommender:

make

The compilation will produce libRecommender.a

To compile an example:

gcc test/test.c src/libRecommender.a -lm -o test/t1 -I src/

Alternatively you can use clang

clang test/test.c src/libRecommender.a -lm -o test/t1 -I src/

Keywords

Collaborative filtering, recommender system

References

  1. http://en.wikipedia.org/wiki/Recommendation_system
  2. http://public.research.att.com/~volinsky/netflix/kdd08koren.pdf
  3. http://research.yahoo.com/files/ieeecomputer.pdf
Issues
  • The usage of srand is incorrect

    The usage of srand is incorrect

    the generate_random_matrix is using srand(0) to generate random number everytime.

    srand(0) sets the seed of the random number generator to 0. Calling it again with the same parameter sets the seed to 0 again, and will cause the random generator to create the same output.

    e.g. srand(0); for(int i = 0; i<5; i++) printf(" %d ", rand());
    return 0;

    prints 1804289383 846930886 1681692777 1714636915 1957747793 all the time (should use something like srand(time(0)))

    So the matrix is not generated randomly as it should be.

    opened by Ruide 3
  • make failed

    make failed

    error: format specifies type 'unsigned int *' but the argument has
          type 'size_t *' (aka 'unsigned long *') [-Werror,-Wformat]
                    if (fscanf (file, "%u %u", &i, &j) != 2)
                                          ~~       ^~
    
    opened by syzer 2
  • Invalid arguments in test.c

    Invalid arguments in test.c

    Function call in test.c

    estimate_rating_from_factors(0, 0, learned, model)

    gives the following error

    test.c: In function ‘main’: test.c:80:4: error: incompatible type for argument 2 of ‘estimate_rating_from_factors’ estimate_rating_from_factors(0, 0, learned, model));

    Function prototype from recommender.h

    double estimate_rating_from_factors(rating_estimator_parameters_t* estim_param, struct learning_model model);

    Comment from above prototype has 4 arguments while you have only defined 2.

    opened by piyushrungta25 0
  • Migrate LGTM.com installation from OAuth to GitHub App

    Migrate LGTM.com installation from OAuth to GitHub App

    Hi There,

    This project is still using an old implementation of LGTM's automated code review, which has now been disabled. To continue using automated code review, and receive checks on your Pull Requests, please install the GitHub App on this repository.

    Thanks, The LGTM Team

    opened by LGTM-badger 0
Owner
Ghassen Hamrouni
Software engineer passionate about algorithms, Computer Vision, Machine learning, computational geometry and Comp Sci.
Ghassen Hamrouni
Header-only library for using Keras models in C++.

frugally-deep Use Keras models in C++ with ease Table of contents Introduction Usage Performance Requirements and Installation FAQ Introduction Would

Tobias Hermann 872 Jun 22, 2022
Using PLT trampolines to provide a BLAS and LAPACK demuxing library.

libblastrampoline All problems in computer science can be solved by another level of indirection Using PLT trampolines to provide a BLAS and LAPACK de

Elliot Saba 44 May 13, 2022
An open source machine learning library for performing regression tasks using RVM technique.

Introduction neonrvm is an open source machine learning library for performing regression tasks using RVM technique. It is written in C programming la

Siavash Eliasi 33 May 31, 2022
ORB-SLAM3 is the first real-time SLAM library able to perform Visual, Visual-Inertial and Multi-Map SLAM with monocular, stereo and RGB-D cameras, using pin-hole and fisheye lens models.

Just to test for my research, and I add coordinate transformation to evaluate the ORB_SLAM3. Only applied in research, and respect the authors' all work.

B.X.W 4 May 13, 2022
HackySAC is a C++ header only library for model estimation using RANSAC.

HackySAC HackySAC is a C++ header only library for model estimation using RANSAC. Available under the MIT license. Examples Minimal working example fo

Jonathan Broere 1 Oct 10, 2021
AGE is a simple 2D console game engine runs in UNIX using third library Ncurses.

AGE-Game-Engine AGE is a simple 2D console game engine runs in UNIX using third library Ncurses. How-To-Run You need to install ncurses using the foll

SIHAN LI 1 Dec 16, 2021
Radeon Rays is ray intersection acceleration library for hardware and software multiplatforms using CPU and GPU

RadeonRays 4.1 Summary RadeonRays is a ray intersection acceleration library. AMD developed RadeonRays to help developers make the most of GPU and to

GPUOpen Libraries & SDKs 961 Jun 23, 2022
The dgSPARSE Library (Deep Graph Sparse Library) is a high performance library for sparse kernel acceleration on GPUs based on CUDA.

dgSPARSE Library Introdution The dgSPARSE Library (Deep Graph Sparse Library) is a high performance library for sparse kernel acceleration on GPUs bas

dgSPARSE 49 Jun 17, 2022
GPU Cloth TOP in TouchDesigner using CUDA-enabled NVIDIA Flex

This project demonstrates how to use NVIDIA FleX for GPU cloth simulation in a TouchDesigner Custom Operator. It also shows how to render dynamic meshes from the texture data using custom PBR GLSL material shaders inside TouchDesigner.

Vinícius Ginja 35 Apr 7, 2022
ICRA 2021 - Robust Place Recognition using an Imaging Lidar

Robust Place Recognition using an Imaging Lidar A place recognition package using high-resolution imaging lidar. For best performance, a lidar equippe

Tixiao Shan 268 Jun 26, 2022
Spying on Microcontrollers using Current Sensing and embedded TinyML models

Welcome to CurrentSense-TinyML CurrentSense-TinyML is all about detecting microcontroller behaviour with current sensing and TinyML. Basically we are

Santander Security Research 67 May 24, 2022
ResNet Implementation, Training, and Inference Using LibTorch C++ API

LibTorch C++ ResNet CIFAR Example Introduction ResNet implementation, training, and inference using LibTorch C++ API. Because there is no native imple

Lei Mao 20 Jun 20, 2022
Raspberry Pi guitar pedal using neural networks to emulate real amps and pedals.

NeuralPi NeuralPi is a guitar pedal using neural networks to emulate real amps and pedals on a Raspberry Pi 4. The NeuralPi software is a VST3 plugin

Keith Bloemer 662 Jun 16, 2022
vs2015上使用tensorRT加速yolov5推理(Using tensorrt to accelerate yolov5 reasoning on vs2015)

1、安装环境 CUDA10.2 TensorRT7.2 OpenCV3.4(工程中已给出,不需安装) vs2015 下载相关工程:https://github.com/wang-xinyu/tensorrtx.git 2、生成yolov5s.wts文件 在生成yolov5s.wts前,首先需要下载模

null 16 Apr 19, 2022
License plate parsing using Darknet and YOLO

DarkPlate Note that DarkPlate by itself is not a complete software project. The intended purpose was to create a simple project showing how to use Dar

Stéphane Charette 27 Apr 11, 2022
Training and Evaluating Facial Classification Keras Models using the Tensorflow C API Implemented into a C++ Codebase.

CFace Training and Evaluating Facial Classification Keras Models using the Tensorflow C API Implemented into a C++ Codebase. Dependancies Tensorflow 2

null 8 Nov 23, 2021
Super Mario Remake using C++, SFML, and Image Processing which was a project for Structure Programming Course, 1st Year

Super Mario Remake We use : C++ in OOP concepts SFML for game animations and sound effects. Image processing (Tensorflow and openCV) to add additional

Omar Elshopky 5 Jun 19, 2022
This is a small example project, that showcases the possibility of using a surrogate model to estimate the drag coefficient of arbitrary triangles.

flowAroundTriangles This is a small example project, that showcases the possibility of using a surrogate model to estimate the drag coefficient of arb

null 5 Jun 23, 2022