Hi there,
I've got a MySQL table:
pub_prefeences
user_id INTEGER NOT NULL (primary)
pub_id INTEGER NOT NULL (primary)
rate FLOAT NOT NULL
rtime DATETUME NOT NULL
is_favorite BIT(1) NOT NULL
and some simple data in it:
user_id pub_id rate
3 11 2
3 12 2
3 15 3
2 15 5
2 13 5
10 13 5
10 23 5
I call Mahout in the following way:
Integer neighborhoodSize = 1;
MysqlConnectionPoolDataSource dataSource
= new MysqlConnectionPoolDataSource();
dataSource.setUser("root");
dataSource.setPassword("haslo");
dataSource.setServerName("localhost");
dataSource.setPort(3306);
dataSource.setDatabaseName("qadro");
MySQLJDBCDataModel dataModel = new MySQLJDBCDataModel(dataSource,
"pub_preferences", "user_id", "pub_id", "rate", "rtime");
UserSimilarity userSimilarity
= new PearsonCorrelationSimilarity(dataModel);
userSimilarity.setPreferenceInferrer(new
AveragingPreferenceInferrer(dataModel));
UserNeighborhood neighborhood
= new NearestNUserNeighborhood(neighborhoodSize,
userSimilarity, dataModel);
Recommender recommender = new GenericUserBasedRecommender(dataModel,
neighborhood, userSimilarity)
List<RecommendedItem> recommendations = recommender.recommend(forUserId, 1);
dataModel.getNumUsers(), or dataModel.getNumItems() work as expected, so does
dataModel.getPreferencesFromUser().
Unfortunately when asking for recommendation I get:
java.lang.NullPointerException
at com.mysql.jdbc.ResultSetImpl.getLong(ResultSetImpl.java:2843)
at com.mysql.jdbc.ResultSetImpl.getLong(ResultSetImpl.java:2830)
at org.apache.mahout.cf.taste.impl.model.jdbc.AbstractJDBCDataModel.
getLongColumn(AbstractJDBCDataModel.java:721)
at org.apache.mahout.cf.taste.impl.model.jdbc.AbstractJDBCDataModel
$ResultSetIDIterator.nextLong(AbstractJDBCDataModel.java:799)
at org.apache.mahout.cf.taste.impl.model.jdbc.AbstractJDBCDataModel
$ResultSetIDIterator.next(AbstractJDBCDataModel.java:788)
at org.apache.mahout.cf.taste.impl.model.jdbc.AbstractJDBCDataModel
$ResultSetIDIterator.next(AbstractJDBCDataModel.java:742)
at org.apache.mahout.cf.taste.impl.recommender.TopItems
.getTopUsers(TopItems.java:99)
at org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood
.getUserNeighborhood(NearestNUserNeighborhood.java:94)
at org.apache.mahout.cf.taste.impl.recommender
.GenericUserBasedRecommender.recommend(GenericUserBasedRecommender.java:80)
at org.apache.mahout.cf.taste.impl.recommender.AbstractRecommender
.recommend(AbstractRecommender.java:64)
at pl.edu.agh.mobilne.RecommendationEngine
.recommend(RecommendationEngine.java:55)
Someone previously had this issue but it wasn't resolved:
http://web.archiveorange.com/archive/v/wfftaSgxJSE3hnw46y40
Can anyone help? What am I doing wrong? :/
Is my data table sufficient?
Is the neighborhood size sufficient?
Thanks,
Marcin
------------------------------------------------------
Samochody na każdą miarę
http://linkint.pl/f2855