Math-Preference-SVD

 view release on metacpan or  search on metacpan

SVD.xs  view on Meta::CPAN

double PredictRating(short movieId, int custId)
{
    double sum = 1; //Movies[movieId].PseudoAvg;
    int f;

    for (f=0; f<MAX_FEATURES; f++) 
    {
        sum += MovieFeatures[f][movieId] * CustFeatures[f][custId];
    }

    if (sum > 5) sum = 5;
    if (sum < 1) sum = 1;

    return sum;
}


/* 
###############################################################################
#
# SVD Sample Code
#
# Copyright (C) 2007 Timely Development (www.timelydevelopment.com)
#
# Special thanks to Simon Funk and others from the Netflix Prize contest 
# for providing pseudo-code and tuning hints.
#
# Feel free to use this code as you wish as long as you include 
# these notices and attribution. 
#
# Also, if you have alternative types of algorithms for accomplishing 
# the same goal and would like to contribute, please share them as well :)
#
# STANDARD DISCLAIMER:
#
# - THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
# - OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
# - LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND#OR
# - FITNESS FOR A PARTICULAR PURPOSE.
#
###############################################################################

Copyright © 2008 by Timely Development, LLC.

 */

MODULE = Math::Preference::SVD	PACKAGE = Math::Preference::SVD	

INCLUDE: const-xs.inc

PROTOTYPES: DISABLE


void
set_Movies (movieId, count, sum)
	int	movieId
	int	count
	int	sum
	PREINIT:
	I32* temp;
	PPCODE:
	temp = PL_markstack_ptr++;
	set_Movies(movieId, count, sum);
	if (PL_markstack_ptr != temp) {
          /* truly void, because dXSARGS not invoked */
	  PL_markstack_ptr = temp;
	  XSRETURN_EMPTY; /* return empty stack */
        }
        /* must have used dXSARGS; list context implied */
	return; /* assume stack size is correct */

void
set_Ratings (movieId, custId, rating)
	int	movieId
	int	custId
	int	rating
	PREINIT:
	I32* temp;
	PPCODE:
	temp = PL_markstack_ptr++;
	set_Ratings(movieId, custId, rating);
	if (PL_markstack_ptr != temp) {
          /* truly void, because dXSARGS not invoked */
	  PL_markstack_ptr = temp;
	  XSRETURN_EMPTY; /* return empty stack */
        }
        /* must have used dXSARGS; list context implied */
	return; /* assume stack size is correct */

void
Engine (x_num_customers, x_num_ratings, x_num_movies)
	int	x_num_customers
	int	x_num_ratings
	int	x_num_movies
	PREINIT:
	I32* temp;
	PPCODE:
	temp = PL_markstack_ptr++;
	Engine(x_num_customers, x_num_ratings, x_num_movies);
	if (PL_markstack_ptr != temp) {
          /* truly void, because dXSARGS not invoked */
	  PL_markstack_ptr = temp;
	  XSRETURN_EMPTY; /* return empty stack */
        }
        /* must have used dXSARGS; list context implied */
	return; /* assume stack size is correct */

void
DestroyEngine ()
	PREINIT:
	I32* temp;
	PPCODE:
	temp = PL_markstack_ptr++;
	DestroyEngine();
	if (PL_markstack_ptr != temp) {
          /* truly void, because dXSARGS not invoked */
	  PL_markstack_ptr = temp;
	  XSRETURN_EMPTY; /* return empty stack */
        }
        /* must have used dXSARGS; list context implied */
	return; /* assume stack size is correct */

void
CalcMetrics ()
	PREINIT:
	I32* temp;
	PPCODE:
	temp = PL_markstack_ptr++;
	CalcMetrics();
	if (PL_markstack_ptr != temp) {
          /* truly void, because dXSARGS not invoked */
	  PL_markstack_ptr = temp;
	  XSRETURN_EMPTY; /* return empty stack */
        }
        /* must have used dXSARGS; list context implied */
	return; /* assume stack size is correct */

void
CalcFeatures ()
	PREINIT:
	I32* temp;
	PPCODE:
	temp = PL_markstack_ptr++;
	CalcFeatures();
	if (PL_markstack_ptr != temp) {
          /* truly void, because dXSARGS not invoked */
	  PL_markstack_ptr = temp;
	  XSRETURN_EMPTY; /* return empty stack */
        }
        /* must have used dXSARGS; list context implied */
	return; /* assume stack size is correct */

double
PredictRating2 (movieId, custId, feature, cache, bTrailing)
	short	movieId
	int	custId
	int	feature
	float	cache
	bool	bTrailing

double
PredictRating (movieId, custId)
	short	movieId
	int	custId



( run in 0.926 second using v1.01-cache-2.11-cpan-5511b514fd6 )