私は Mahout を使用して、Item ベースの Cf レコメンデーション エンジンを構築しています。コンストラクタを持つ MahoutHelper クラスを作成します。
public MahoutHelper(String serverName, String user, String password,
String DatabaseName, String tableName) {
source = new MysqlConnectionPoolDataSource();
source.setServerName(serverName);
source.setUser(user);
source.setPassword(password);
source.setDatabaseName(DatabaseName);
source.setCachePreparedStatements(true);
source.setCachePrepStmts(true);
source.setCacheResultSetMetadata(true);
source.setAlwaysSendSetIsolation(true);
source.setElideSetAutoCommits(true);
DBmodel = new MySQLJDBCDataModel(source, tableName, "userId", "itemId",
"value", null);
similarity = new TanimotoCoefficientSimilarity(DBmodel);
}
推奨される方法は次のとおりです。
public List<RecommendedItem> recommendation() throws TasteException {
Recommender recommender = null;
recommender = new GenericItemBasedRecommender(DBmodel, similarity);
List<RecommendedItem> recommendations = null;
recommendations = recommender.recommend(userId, maxNum);
System.out.println("query completed");
return recommendations;
}
データソースを使用してデータモデルを構築していますが、問題は、mysql に少数のデータ (100 未満) しかない場合、プログラムは正常に動作しますが、スケールが 1,000,000 を超えると、プログラムは推奨を行うことでスタックし、決して先に進みません。 . 私はそれがどのように起こるか分かりません。ちなみに、同じデータを使用して .dat ファイルを使用して FileDataModel を構築したところ、分析が完了するまでに 2 ~ 3 秒しかかかりませんでした。私は混乱しています。