You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by sr...@apache.org on 2008/12/24 00:32:36 UTC
svn commit: r729175 [2/5] - in /lucene/mahout/trunk:
core/src/main/java/org/apache/mahout/cf/taste/common/
core/src/main/java/org/apache/mahout/cf/taste/hadoop/
core/src/main/java/org/apache/mahout/cf/taste/impl/common/
core/src/main/java/org/apache/ma...
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/CachingRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/CachingRecommender.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/CachingRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/CachingRecommender.java Tue Dec 23 15:32:31 2008
@@ -67,6 +67,7 @@
this.estimatedPrefCache =
new Cache<Pair<?, ?>, Double>(new EstimatedPrefRetriever(this.recommender), numUsers);
this.refreshHelper = new RefreshHelper(new Callable<Object>() {
+ @Override
public Object call() {
clear();
return null;
@@ -89,10 +90,12 @@
}
}
+ @Override
public List<RecommendedItem> recommend(Object userID, int howMany) throws TasteException {
return recommend(userID, howMany, null);
}
+ @Override
public List<RecommendedItem> recommend(Object userID, int howMany, Rescorer<Item> rescorer)
throws TasteException {
if (userID == null) {
@@ -111,37 +114,43 @@
setCurrentRescorer(rescorer);
Recommendations recommendations = recommendationCache.get(userID);
- if (recommendations.getItems().size() < howMany && !recommendations.noMoreRecommendableItems) {
+ if (recommendations.getItems().size() < howMany && !recommendations.isNoMoreRecommendableItems()) {
clear(userID);
recommendations = recommendationCache.get(userID);
if (recommendations.getItems().size() < howMany) {
- recommendations.noMoreRecommendableItems = true;
+ recommendations.setNoMoreRecommendableItems(true);
}
}
- return recommendations.getItems().size() > howMany ?
- recommendations.getItems().subList(0, howMany) :
- recommendations.getItems();
+ List<RecommendedItem> recommendedItems = recommendations.getItems();
+ return recommendedItems.size() > howMany ?
+ recommendedItems.subList(0, howMany) :
+ recommendedItems;
}
+ @Override
public double estimatePreference(Object userID, Object itemID) throws TasteException {
return estimatedPrefCache.get(new Pair<Object, Object>(userID, itemID));
}
+ @Override
public void setPreference(Object userID, Object itemID, double value) throws TasteException {
recommender.setPreference(userID, itemID, value);
clear(userID);
}
+ @Override
public void removePreference(Object userID, Object itemID) throws TasteException {
recommender.removePreference(userID, itemID);
clear(userID);
}
+ @Override
public DataModel getDataModel() {
return recommender.getDataModel();
}
+ @Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
refreshHelper.refresh(alreadyRefreshed);
}
@@ -177,13 +186,15 @@
this.recommender = recommender;
}
+ @Override
public Recommendations get(Object key) throws TasteException {
log.debug("Retrieving new recommendations for user ID '{}'", key);
List<RecommendedItem> recommendations;
+ int howMany = maxHowMany.get();
if (currentRescorer == null) {
- recommendations = recommender.recommend(key, maxHowMany.get());
+ recommendations = recommender.recommend(key, howMany);
} else {
- recommendations = recommender.recommend(key, maxHowMany.get(), currentRescorer);
+ recommendations = recommender.recommend(key, howMany, currentRescorer);
}
return new Recommendations(Collections.unmodifiableList(recommendations));
}
@@ -197,6 +208,7 @@
this.recommender = recommender;
}
+ @Override
public Double get(Pair<?, ?> key) throws TasteException {
Object userID = key.getFirst();
Object itemID = key.getSecond();
@@ -212,12 +224,19 @@
private Recommendations(List<RecommendedItem> items) {
this.items = items;
- this.noMoreRecommendableItems = false;
}
- private List<RecommendedItem> getItems() {
+ List<RecommendedItem> getItems() {
return items;
}
+
+ boolean isNoMoreRecommendableItems() {
+ return noMoreRecommendableItems;
+ }
+
+ void setNoMoreRecommendableItems(boolean noMoreRecommendableItems) {
+ this.noMoreRecommendableItems = noMoreRecommendableItems;
+ }
}
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/FarthestNeighborClusterSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/FarthestNeighborClusterSimilarity.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/FarthestNeighborClusterSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/FarthestNeighborClusterSimilarity.java Tue Dec 23 15:32:31 2008
@@ -64,6 +64,7 @@
this.samplingPercentage = samplingPercentage;
}
+ @Override
public double getSimilarity(Collection<User> cluster1,
Collection<User> cluster2) throws TasteException {
if (cluster1.isEmpty() || cluster2.isEmpty()) {
@@ -87,6 +88,7 @@
return leastSimilarity;
}
+ @Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
alreadyRefreshed = RefreshHelper.buildRefreshed(alreadyRefreshed);
RefreshHelper.maybeRefresh(alreadyRefreshed, similarity);
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericItemBasedRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericItemBasedRecommender.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericItemBasedRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericItemBasedRecommender.java Tue Dec 23 15:32:31 2008
@@ -76,6 +76,7 @@
refreshHelper.addDependency(similarity);
}
+ @Override
public List<RecommendedItem> recommend(Object userID, int howMany, Rescorer<Item> rescorer)
throws TasteException {
@@ -103,6 +104,7 @@
return topItems;
}
+ @Override
public double estimatePreference(Object userID, Object itemID) throws TasteException {
DataModel model = getDataModel();
User theUser = model.getUser(userID);
@@ -114,10 +116,12 @@
return doEstimatePreference(theUser, item);
}
+ @Override
public List<RecommendedItem> mostSimilarItems(Object itemID, int howMany) throws TasteException {
return mostSimilarItems(itemID, howMany, null);
}
+ @Override
public List<RecommendedItem> mostSimilarItems(Object itemID,
int howMany,
Rescorer<Pair<Item, Item>> rescorer) throws TasteException {
@@ -126,10 +130,12 @@
return doMostSimilarItems(itemID, howMany, estimator);
}
+ @Override
public List<RecommendedItem> mostSimilarItems(List<Object> itemIDs, int howMany) throws TasteException {
return mostSimilarItems(itemIDs, howMany, null);
}
+ @Override
public List<RecommendedItem> mostSimilarItems(List<Object> itemIDs,
int howMany,
Rescorer<Pair<Item, Item>> rescorer) throws TasteException {
@@ -149,6 +155,7 @@
return TopItems.getTopItems(howMany, allItems, null, estimator);
}
+ @Override
public List<RecommendedItem> recommendedBecause(Object userID,
Object itemID,
int howMany) throws TasteException {
@@ -213,6 +220,7 @@
return theUser.getPreferencesAsArray().length;
}
+ @Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
refreshHelper.refresh(alreadyRefreshed);
}
@@ -236,6 +244,7 @@
this.rescorer = rescorer;
}
+ @Override
public double estimate(Item item) throws TasteException {
Pair<Item, Item> pair = new Pair<Item, Item>(toItem, item);
if (rescorer != null && rescorer.isFiltered(pair)) {
@@ -254,6 +263,7 @@
this.theUser = theUser;
}
+ @Override
public double estimate(Item item) throws TasteException {
return doEstimatePreference(theUser, item);
}
@@ -273,6 +283,7 @@
this.rescorer = rescorer;
}
+ @Override
public double estimate(Item item) throws TasteException {
RunningAverage average = new FullRunningAverage();
for (Item toItem : toItems) {
@@ -304,6 +315,7 @@
this.similarity = similarity;
}
+ @Override
public double estimate(Item item) throws TasteException {
Preference pref = user.getPreferenceFor(item.getID());
if (pref == null) {
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericRecommendedItem.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericRecommendedItem.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericRecommendedItem.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericRecommendedItem.java Tue Dec 23 15:32:31 2008
@@ -47,10 +47,12 @@
this.value = value;
}
+ @Override
public Item getItem() {
return item;
}
+ @Override
public double getValue() {
return value;
}
@@ -80,6 +82,7 @@
* @param other
* @return 1, -1, 0 as this value is less than, greater than or equal to the other's value
*/
+ @Override
public int compareTo(RecommendedItem other) {
double otherValue = other.getValue();
return value > otherValue ? -1 : value < otherValue ? 1 : 0;
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericUserBasedRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericUserBasedRecommender.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericUserBasedRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericUserBasedRecommender.java Tue Dec 23 15:32:31 2008
@@ -67,6 +67,7 @@
refreshHelper.addDependency(neighborhood);
}
+ @Override
public List<RecommendedItem> recommend(Object userID, int howMany, Rescorer<Item> rescorer)
throws TasteException {
if (userID == null) {
@@ -97,6 +98,7 @@
return topItems;
}
+ @Override
public double estimatePreference(Object userID, Object itemID) throws TasteException {
DataModel model = getDataModel();
User theUser = model.getUser(userID);
@@ -109,10 +111,12 @@
return doEstimatePreference(theUser, theNeighborhood, item);
}
+ @Override
public List<User> mostSimilarUsers(Object userID, int howMany) throws TasteException {
return mostSimilarUsers(userID, howMany, null);
}
+ @Override
public List<User> mostSimilarUsers(Object userID,
int howMany,
Rescorer<Pair<User, User>> rescorer) throws TasteException {
@@ -165,6 +169,7 @@
return allItems;
}
+ @Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
refreshHelper.refresh(alreadyRefreshed);
}
@@ -188,6 +193,7 @@
this.rescorer = rescorer;
}
+ @Override
public double estimate(User user) throws TasteException {
// Don't consider the user itself as a possible most similar user
if (user.equals(toUser)) {
@@ -212,6 +218,7 @@
this.theNeighborhood = theNeighborhood;
}
+ @Override
public double estimate(Item item) throws TasteException {
return doEstimatePreference(theUser, theNeighborhood, item);
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemAverageRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemAverageRecommender.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemAverageRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemAverageRecommender.java Tue Dec 23 15:32:31 2008
@@ -61,6 +61,7 @@
this.itemAverages = new FastMap<Object, RunningAverage>();
this.buildAveragesLock = new ReentrantReadWriteLock();
this.refreshHelper = new RefreshHelper(new Callable<Object>() {
+ @Override
public Object call() throws TasteException {
buildAverageDiffs();
return null;
@@ -69,6 +70,7 @@
refreshHelper.addDependency(dataModel);
}
+ @Override
public List<RecommendedItem> recommend(Object userID, int howMany, Rescorer<Item> rescorer)
throws TasteException {
if (userID == null) {
@@ -91,6 +93,7 @@
return topItems;
}
+ @Override
public double estimatePreference(Object userID, Object itemID) throws TasteException {
DataModel model = getDataModel();
User theUser = model.getUser(userID);
@@ -189,6 +192,7 @@
}
}
+ @Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
refreshHelper.refresh(alreadyRefreshed);
}
@@ -200,6 +204,7 @@
private final class Estimator implements TopItems.Estimator<Item> {
+ @Override
public double estimate(Item item) {
return doEstimatePreference(item.getID());
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemUserAverageRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemUserAverageRecommender.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemUserAverageRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemUserAverageRecommender.java Tue Dec 23 15:32:31 2008
@@ -66,6 +66,7 @@
this.overallAveragePrefValue = new FullRunningAverage();
this.buildAveragesLock = new ReentrantReadWriteLock();
this.refreshHelper = new RefreshHelper(new Callable<Object>() {
+ @Override
public Object call() throws TasteException {
buildAverageDiffs();
return null;
@@ -74,6 +75,7 @@
refreshHelper.addDependency(dataModel);
}
+ @Override
public List<RecommendedItem> recommend(Object userID, int howMany, Rescorer<Item> rescorer)
throws TasteException {
if (userID == null) {
@@ -96,6 +98,7 @@
return topItems;
}
+ @Override
public double estimatePreference(Object userID, Object itemID) throws TasteException {
DataModel model = getDataModel();
User theUser = model.getUser(userID);
@@ -227,6 +230,7 @@
}
}
+ @Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
refreshHelper.refresh(alreadyRefreshed);
}
@@ -244,6 +248,7 @@
this.userID = userID;
}
+ @Override
public double estimate(Item item) {
return doEstimatePreference(userID, item.getID());
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/NearestNeighborClusterSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/NearestNeighborClusterSimilarity.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/NearestNeighborClusterSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/NearestNeighborClusterSimilarity.java Tue Dec 23 15:32:31 2008
@@ -64,6 +64,7 @@
this.samplingPercentage = samplingPercentage;
}
+ @Override
public double getSimilarity(Collection<User> cluster1,
Collection<User> cluster2) throws TasteException {
if (cluster1.isEmpty() || cluster2.isEmpty()) {
@@ -87,6 +88,7 @@
return greatestSimilarity;
}
+ @Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
alreadyRefreshed = RefreshHelper.buildRefreshed(alreadyRefreshed);
RefreshHelper.maybeRefresh(alreadyRefreshed, similarity);
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/NullRescorer.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/NullRescorer.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/NullRescorer.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/NullRescorer.java Tue Dec 23 15:32:31 2008
@@ -57,10 +57,12 @@
* @param originalScore current score for {@link Item}
* @return same originalScore as new score, always
*/
+ @Override
public double rescore(T thing, double originalScore) {
return originalScore;
}
+ @Override
public boolean isFiltered(T thing) {
return false;
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/SimilarUser.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/SimilarUser.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/SimilarUser.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/SimilarUser.java Tue Dec 23 15:32:31 2008
@@ -63,6 +63,7 @@
/**
* Defines an ordering from most similar to least similar.
*/
+ @Override
public int compareTo(SimilarUser other) {
double otherSimilarity = other.similarity;
return similarity > otherSimilarity ? -1 : similarity < otherSimilarity ? 1 : 0;
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TopItems.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TopItems.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TopItems.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TopItems.java Tue Dec 23 15:32:31 2008
@@ -137,7 +137,7 @@
return result;
}
- public static interface Estimator<T> {
+ public interface Estimator<T> {
double estimate(T thing) throws TasteException;
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java Tue Dec 23 15:32:31 2008
@@ -118,6 +118,7 @@
this.samplingPercentage = samplingPercentage;
this.buildClustersLock = new ReentrantLock();
this.refreshHelper = new RefreshHelper(new Callable<Object>() {
+ @Override
public Object call() throws TasteException {
buildClusters();
return null;
@@ -173,6 +174,7 @@
this.samplingPercentage = samplingPercentage;
this.buildClustersLock = new ReentrantLock();
this.refreshHelper = new RefreshHelper(new Callable<Object>() {
+ @Override
public Object call() throws TasteException {
buildClusters();
return null;
@@ -182,6 +184,7 @@
refreshHelper.addDependency(clusterSimilarity);
}
+ @Override
public List<RecommendedItem> recommend(Object userID, int howMany, Rescorer<Item> rescorer)
throws TasteException {
if (userID == null) {
@@ -218,6 +221,7 @@
return rescored;
}
+ @Override
public double estimatePreference(Object userID, Object itemID) throws TasteException {
if (userID == null || itemID == null) {
throw new IllegalArgumentException("userID or itemID is null");
@@ -241,6 +245,7 @@
return Double.NaN;
}
+ @Override
public Collection<User> getCluster(Object userID) throws TasteException {
if (userID == null) {
throw new IllegalArgumentException("userID is null");
@@ -254,6 +259,7 @@
}
}
+ @Override
public Collection<Collection<User>> getClusters() throws TasteException {
checkClustersBuilt();
return allClusters;
@@ -266,8 +272,8 @@
}
private void buildClusters() throws TasteException {
+ buildClustersLock.lock();
try {
- buildClustersLock.lock();
DataModel model = getDataModel();
int numUsers = model.getNumUsers();
if (numUsers > 0) {
@@ -402,6 +408,7 @@
return clustersPerUser;
}
+ @Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
refreshHelper.refresh(alreadyRefreshed);
}
@@ -419,6 +426,7 @@
this.cluster = cluster;
}
+ @Override
public double estimate(Item item) {
RunningAverage average = new FullRunningAverage();
for (User user : cluster) {
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender2.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender2.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender2.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender2.java Tue Dec 23 15:32:31 2008
@@ -105,6 +105,7 @@
this.clusteringByThreshold = false;
this.buildClustersLock = new ReentrantLock();
this.refreshHelper = new RefreshHelper(new Callable<Object>() {
+ @Override
public Object call() throws TasteException {
buildClusters();
return null;
@@ -139,6 +140,7 @@
this.clusteringByThreshold = true;
this.buildClustersLock = new ReentrantLock();
this.refreshHelper = new RefreshHelper(new Callable<Object>() {
+ @Override
public Object call() throws TasteException {
buildClusters();
return null;
@@ -148,6 +150,7 @@
refreshHelper.addDependency(clusterSimilarity);
}
+ @Override
public List<RecommendedItem> recommend(Object userID, int howMany, Rescorer<Item> rescorer)
throws TasteException {
if (userID == null) {
@@ -184,6 +187,7 @@
return rescored;
}
+ @Override
public double estimatePreference(Object userID, Object itemID) throws TasteException {
if (userID == null || itemID == null) {
throw new IllegalArgumentException("userID or itemID is null");
@@ -207,6 +211,7 @@
return Double.NaN;
}
+ @Override
public Collection<User> getCluster(Object userID) throws TasteException {
if (userID == null) {
throw new IllegalArgumentException("userID is null");
@@ -220,6 +225,7 @@
}
}
+ @Override
public Collection<Collection<User>> getClusters() throws TasteException {
checkClustersBuilt();
return allClusters;
@@ -273,6 +279,7 @@
similarity == other.similarity;
}
+ @Override
public int compareTo(ClusterClusterPair other) {
double otherSimilarity = other.similarity;
if (similarity > otherSimilarity) {
@@ -287,9 +294,8 @@
}
private void buildClusters() throws TasteException {
+ buildClustersLock.lock();
try {
- buildClustersLock.lock();
-
DataModel model = getDataModel();
int numUsers = model.getNumUsers();
@@ -485,6 +491,7 @@
return clustersPerUser;
}
+ @Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
refreshHelper.refresh(alreadyRefreshed);
}
@@ -502,6 +509,7 @@
this.cluster = cluster;
}
+ @Override
public double estimate(Item item) {
RunningAverage average = new FullRunningAverage();
for (User user : cluster) {
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/InvertedRunningAverage.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/InvertedRunningAverage.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/InvertedRunningAverage.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/InvertedRunningAverage.java Tue Dec 23 15:32:31 2008
@@ -27,22 +27,27 @@
this.delegate = delegate;
}
+ @Override
public void addDatum(double datum) {
throw new UnsupportedOperationException();
}
+ @Override
public void removeDatum(double datum) {
throw new UnsupportedOperationException();
}
+ @Override
public void changeDatum(double delta) {
throw new UnsupportedOperationException();
}
+ @Override
public int getCount() {
return delegate.getCount();
}
+ @Override
public double getAverage() {
return -delegate.getAverage();
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/InvertedRunningAverageAndStdDev.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/InvertedRunningAverageAndStdDev.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/InvertedRunningAverageAndStdDev.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/InvertedRunningAverageAndStdDev.java Tue Dec 23 15:32:31 2008
@@ -27,26 +27,32 @@
this.delegate = delegate;
}
+ @Override
public void addDatum(double datum) {
throw new UnsupportedOperationException();
}
+ @Override
public void removeDatum(double datum) {
throw new UnsupportedOperationException();
}
+ @Override
public void changeDatum(double delta) {
throw new UnsupportedOperationException();
}
+ @Override
public int getCount() {
return delegate.getCount();
}
+ @Override
public double getAverage() {
return -delegate.getAverage();
}
+ @Override
public double getStandardDeviation() {
return delegate.getStandardDeviation();
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorage.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorage.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorage.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorage.java Tue Dec 23 15:32:31 2008
@@ -107,6 +107,7 @@
this.averageItemPref = new FastMap<Object, RunningAverage>();
this.buildAverageDiffsLock = new ReentrantReadWriteLock();
this.refreshHelper = new RefreshHelper(new Callable<Object>() {
+ @Override
public Object call() throws TasteException {
buildAverageDiffs();
return null;
@@ -116,6 +117,7 @@
buildAverageDiffs();
}
+ @Override
public RunningAverage getDiff(Object itemID1, Object itemID2) {
Map<Object, RunningAverage> level2Map = averageDiffs.get(itemID1);
RunningAverage average = null;
@@ -142,6 +144,7 @@
}
}
+ @Override
public RunningAverage[] getDiffs(Object userID, Object itemID, Preference[] prefs) {
try {
buildAverageDiffsLock.readLock().lock();
@@ -156,10 +159,12 @@
}
}
+ @Override
public RunningAverage getAverageItemPref(Object itemID) {
return averageItemPref.get(itemID);
}
+ @Override
public void updateItemPref(Object itemID, double prefDelta, boolean remove) {
if (!remove && stdDevWeighted) {
throw new UnsupportedOperationException("Can't update only when stdDevWeighted is set");
@@ -194,6 +199,7 @@
}
}
+ @Override
public Set<Item> getRecommendableItems(Object userID) throws TasteException {
User user = dataModel.getUser(userID);
Set<Item> result = new FastSet<Item>(dataModel.getNumItems());
@@ -285,6 +291,7 @@
}
}
+ @Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
refreshHelper.refresh(alreadyRefreshed);
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/SlopeOneRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/SlopeOneRecommender.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/SlopeOneRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/SlopeOneRecommender.java Tue Dec 23 15:32:31 2008
@@ -97,6 +97,7 @@
this.diffStorage = diffStorage;
}
+ @Override
public List<RecommendedItem> recommend(Object userID, int howMany, Rescorer<Item> rescorer)
throws TasteException {
if (userID == null) {
@@ -119,6 +120,7 @@
return topItems;
}
+ @Override
public double estimatePreference(Object userID, Object itemID) throws TasteException {
DataModel model = getDataModel();
User theUser = model.getUser(userID);
@@ -194,6 +196,7 @@
}
}
+ @Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
alreadyRefreshed = RefreshHelper.buildRefreshed(alreadyRefreshed);
RefreshHelper.maybeRefresh(alreadyRefreshed, diffStorage);
@@ -213,6 +216,7 @@
this.theUser = theUser;
}
+ @Override
public double estimate(Item item) throws TasteException {
return doEstimatePreference(theUser, item.getID());
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/AbstractJDBCDiffStorage.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/AbstractJDBCDiffStorage.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/AbstractJDBCDiffStorage.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/AbstractJDBCDiffStorage.java Tue Dec 23 15:32:31 2008
@@ -99,6 +99,7 @@
this.diffsExistSQL = diffsExistSQL;
this.minDiffCount = minDiffCount;
this.refreshHelper = new RefreshHelper(new Callable<Object>() {
+ @Override
public Object call() throws TasteException {
buildAverageDiffs();
return null;
@@ -113,6 +114,7 @@
}
}
+ @Override
public RunningAverage getDiff(Object itemID1, Object itemID2) throws TasteException {
Connection conn = null;
PreparedStatement stmt = null;
@@ -139,6 +141,7 @@
}
}
+ @Override
public RunningAverage[] getDiffs(Object userID, Object itemID, Preference[] prefs)
throws TasteException {
int size = prefs.length;
@@ -175,6 +178,7 @@
return result;
}
+ @Override
public RunningAverage getAverageItemPref(Object itemID) throws TasteException {
Connection conn = null;
PreparedStatement stmt = null;
@@ -200,6 +204,7 @@
}
}
+ @Override
public void updateItemPref(Object itemID, double prefDelta, boolean remove)
throws TasteException {
Connection conn = null;
@@ -237,6 +242,7 @@
return stmt;
}
+ @Override
public Set<Item> getRecommendableItems(Object userID) throws TasteException {
Connection conn = null;
PreparedStatement stmt = null;
@@ -309,6 +315,7 @@
}
}
+ @Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
refreshHelper.refresh(alreadyRefreshed);
}
@@ -323,22 +330,27 @@
this.average = average;
}
+ @Override
public void addDatum(double datum) {
throw new UnsupportedOperationException();
}
+ @Override
public void removeDatum(double datum) {
throw new UnsupportedOperationException();
}
+ @Override
public void changeDatum(double delta) {
throw new UnsupportedOperationException();
}
+ @Override
public int getCount() {
return count;
}
+ @Override
public double getAverage() {
return average;
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/AbstractSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/AbstractSimilarity.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/AbstractSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/AbstractSimilarity.java Tue Dec 23 15:32:31 2008
@@ -72,6 +72,7 @@
this.cachedNumItems = dataModel.getNumItems();
this.cachedNumUsers = dataModel.getNumUsers();
this.refreshHelper = new RefreshHelper(new Callable<Object>() {
+ @Override
public Object call() throws TasteException {
cachedNumItems = AbstractSimilarity.this.dataModel.getNumItems();
cachedNumUsers = AbstractSimilarity.this.dataModel.getNumUsers();
@@ -92,6 +93,7 @@
return inferrer;
}
+ @Override
public final void setPreferenceInferrer(PreferenceInferrer inferrer) {
if (inferrer == null) {
throw new IllegalArgumentException("inferrer is null");
@@ -138,6 +140,7 @@
*/
abstract double computeResult(int n, double sumXY, double sumX2, double sumY2, double sumXYdiff2);
+ @Override
public double userSimilarity(User user1, User user2) throws TasteException {
if (user1 == null || user2 == null) {
@@ -257,6 +260,7 @@
return result;
}
+ @Override
public final double itemSimilarity(Item item1, Item item2) throws TasteException {
if (item1 == null || item2 == null) {
@@ -363,6 +367,7 @@
return result;
}
+ @Override
public final void refresh(Collection<Refreshable> alreadyRefreshed) {
refreshHelper.refresh(alreadyRefreshed);
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/AveragingPreferenceInferrer.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/AveragingPreferenceInferrer.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/AveragingPreferenceInferrer.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/AveragingPreferenceInferrer.java Tue Dec 23 15:32:31 2008
@@ -48,6 +48,7 @@
refresh(null);
}
+ @Override
public double inferPreference(User user, Item item) throws TasteException {
if (user == null || item == null) {
throw new IllegalArgumentException("user or item is null");
@@ -55,12 +56,14 @@
return averagePreferenceValue.get(user);
}
+ @Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
averagePreferenceValue.clear();
}
private static final class PrefRetriever implements Retriever<User, Double> {
+ @Override
public Double get(User key) {
RunningAverage average = new FullRunningAverage();
Preference[] prefs = key.getPreferencesAsArray();
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingItemSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingItemSimilarity.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingItemSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingItemSimilarity.java Tue Dec 23 15:32:31 2008
@@ -46,6 +46,7 @@
this.similarityCache = new Cache<Pair<Item, Item>, Double>(new SimilarityRetriever(similarity), maxCacheSize);
}
+ @Override
public double itemSimilarity(Item item1, Item item2) throws TasteException {
Pair<Item, Item> key;
if (item1.compareTo(item2) < 0) {
@@ -56,6 +57,7 @@
return similarityCache.get(key);
}
+ @Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
similarityCache.clear();
alreadyRefreshed = RefreshHelper.buildRefreshed(alreadyRefreshed);
@@ -69,6 +71,7 @@
this.similarity = similarity;
}
+ @Override
public Double get(Pair<Item, Item> key) throws TasteException {
return similarity.itemSimilarity(key.getFirst(), key.getSecond());
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingUserSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingUserSimilarity.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingUserSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingUserSimilarity.java Tue Dec 23 15:32:31 2008
@@ -47,6 +47,7 @@
this.similarityCache = new Cache<Pair<User, User>, Double>(new SimilarityRetriever(similarity), maxCacheSize);
}
+ @Override
public double userSimilarity(User user1, User user2) throws TasteException {
Pair<User, User> key;
if (user1.compareTo(user2) < 0) {
@@ -57,11 +58,13 @@
return similarityCache.get(key);
}
+ @Override
public void setPreferenceInferrer(PreferenceInferrer inferrer) {
similarityCache.clear();
similarity.setPreferenceInferrer(inferrer);
}
+ @Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
similarityCache.clear();
alreadyRefreshed = RefreshHelper.buildRefreshed(alreadyRefreshed);
@@ -75,6 +78,7 @@
this.similarity = similarity;
}
+ @Override
public Double get(Pair<User, User> key) throws TasteException {
return similarity.userSimilarity(key.getFirst(), key.getSecond());
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/EuclideanDistanceSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/EuclideanDistanceSimilarity.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/EuclideanDistanceSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/EuclideanDistanceSimilarity.java Tue Dec 23 15:32:31 2008
@@ -40,6 +40,7 @@
super(dataModel, weighting);
}
+ @Override
double computeResult(int n, double sumXY, double sumX2, double sumY2, double sumXYdiff2) {
if (n == 0) {
return Double.NaN;
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/GenericItemSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/GenericItemSimilarity.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/GenericItemSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/GenericItemSimilarity.java Tue Dec 23 15:32:31 2008
@@ -23,6 +23,7 @@
import org.apache.mahout.cf.taste.impl.common.FastMap;
import org.apache.mahout.cf.taste.impl.common.IteratorIterable;
import org.apache.mahout.cf.taste.impl.common.IteratorUtils;
+import org.apache.mahout.cf.taste.impl.common.RandomUtils;
import org.apache.mahout.cf.taste.impl.recommender.TopItems;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.model.Item;
@@ -49,7 +50,7 @@
/**
* <p>Creates a {@link GenericItemSimilarity} from a precomputed list of
- * {@link org.apache.mahout.cf.taste.impl.similarity.GenericItemSimilarity.ItemItemSimilarity}s. Each
+ * {@link ItemItemSimilarity}s. Each
* represents the similarity between two distinct items. Since similarity is assumed to be symmetric,
* it is not necessary to specify similarity between item1 and item2, and item2 and item1. Both are the same.
* It is also not necessary to specify a similarity between any item and itself; these are assumed to be 1.0.</p>
@@ -58,7 +59,7 @@
* win.</p>
*
* @param similarities set of
- * {@link org.apache.mahout.cf.taste.impl.similarity.GenericItemSimilarity.ItemItemSimilarity}s
+ * {@link ItemItemSimilarity}s
* on which to base this instance
*/
public GenericItemSimilarity(Iterable<ItemItemSimilarity> similarities) {
@@ -73,7 +74,7 @@
* <p>Thanks to tsmorton for suggesting this and providing part of the implementation.</p>
*
* @param similarities set of
- * {@link org.apache.mahout.cf.taste.impl.similarity.GenericItemSimilarity.ItemItemSimilarity}s
+ * {@link ItemItemSimilarity}s
* on which to base this instance
* @param maxToKeep maximum number of similarities to keep
*/
@@ -85,7 +86,7 @@
/**
* <p>Builds a list of item-item similarities given an {@link ItemSimilarity} implementation and a
* {@link DataModel}, rather than a list of
- * {@link org.apache.mahout.cf.taste.impl.similarity.GenericItemSimilarity.ItemItemSimilarity}s.</p>
+ * {@link ItemItemSimilarity}s.</p>
*
* <p>It's valid to build a {@link GenericItemSimilarity} this way, but perhaps missing some of the point
* of an item-based recommender. Item-based recommenders use the assumption that item-item similarities
@@ -159,6 +160,7 @@
* @param item2 second item
* @return similarity between the two
*/
+ @Override
public double itemSimilarity(Item item1, Item item2) {
int compare = item1.compareTo(item2);
if (compare == 0) {
@@ -181,6 +183,7 @@
return similarity == null ? Double.NaN : similarity;
}
+ @Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
// Do nothing
}
@@ -232,11 +235,26 @@
/**
* Defines an ordering from highest similarity to lowest.
*/
+ @Override
public int compareTo(ItemItemSimilarity other) {
double otherValue = other.value;
return value > otherValue ? -1 : value < otherValue ? 1 : 0;
}
+ @Override
+ public boolean equals(Object other) {
+ if (!(other instanceof ItemItemSimilarity)) {
+ return false;
+ }
+ ItemItemSimilarity otherSimilarity = (ItemItemSimilarity) other;
+ return otherSimilarity.item1.equals(item1) && otherSimilarity.item2.equals(item2) && otherSimilarity.value == value;
+ }
+
+ @Override
+ public int hashCode() {
+ return item1.hashCode() ^ item2.hashCode() ^ RandomUtils.hashDouble(value);
+ }
+
}
private static final class DataModelSimilaritiesIterator implements Iterator<ItemItemSimilarity> {
@@ -257,10 +275,12 @@
j = 1;
}
+ @Override
public boolean hasNext() {
return i < size - 1;
}
+ @Override
public ItemItemSimilarity next() {
if (!hasNext()) {
throw new NoSuchElementException();
@@ -283,6 +303,7 @@
return result;
}
+ @Override
public void remove() {
throw new UnsupportedOperationException();
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/LogLikelihoodSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/LogLikelihoodSimilarity.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/LogLikelihoodSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/LogLikelihoodSimilarity.java Tue Dec 23 15:32:31 2008
@@ -37,7 +37,8 @@
this.dataModel = dataModel;
}
- public final double itemSimilarity(Item item1, Item item2) throws TasteException {
+ @Override
+ public double itemSimilarity(Item item1, Item item2) throws TasteException {
if (item1 == null || item2 == null) {
throw new IllegalArgumentException("item1 or item2 is null");
}
@@ -63,13 +64,14 @@
return d <= 0.0 ? 0 : Math.log(d);
}
+ @Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
alreadyRefreshed = RefreshHelper.buildRefreshed(alreadyRefreshed);
RefreshHelper.maybeRefresh(alreadyRefreshed, dataModel);
}
@Override
- public final String toString() {
+ public String toString() {
return "LogLikelihoodSimilarity[dataModel:" + dataModel + ']';
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/PearsonCorrelationSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/PearsonCorrelationSimilarity.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/PearsonCorrelationSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/PearsonCorrelationSimilarity.java Tue Dec 23 15:32:31 2008
@@ -54,6 +54,7 @@
super(dataModel, weighting);
}
+ @Override
double computeResult(int n, double sumXY, double sumX2, double sumY2, double sumXYdiff2) {
if (n == 0) {
return Double.NaN;
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/SpearmanCorrelationSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/SpearmanCorrelationSimilarity.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/SpearmanCorrelationSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/SpearmanCorrelationSimilarity.java Tue Dec 23 15:32:31 2008
@@ -56,6 +56,7 @@
this.rankingUserSimilarity = rankingUserSimilarity;
}
+ @Override
public double userSimilarity(User user1, User user2) throws TasteException {
if (user1 == null || user2 == null) {
throw new IllegalArgumentException("user1 or user2 is null");
@@ -64,10 +65,12 @@
new RankedPreferenceUser(user2));
}
+ @Override
public void setPreferenceInferrer(PreferenceInferrer inferrer) {
rankingUserSimilarity.setPreferenceInferrer(inferrer);
}
+ @Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
alreadyRefreshed = RefreshHelper.buildRefreshed(alreadyRefreshed);
RefreshHelper.maybeRefresh(alreadyRefreshed, rankingUserSimilarity);
@@ -86,18 +89,22 @@
this.delegate = delegate;
}
+ @Override
public Object getID() {
return delegate.getID();
}
+ @Override
public Preference getPreferenceFor(Object itemID) {
throw new UnsupportedOperationException();
}
+ @Override
public Iterable<Preference> getPreferences() {
return Arrays.asList(getPreferencesAsArray());
}
+ @Override
public Preference[] getPreferencesAsArray() {
Preference[] source = delegate.getPreferencesAsArray();
int length = source.length;
@@ -121,6 +128,7 @@
return o instanceof RankedPreferenceUser && delegate.equals(((RankedPreferenceUser) o).delegate);
}
+ @Override
public int compareTo(User user) {
return delegate.compareTo(user);
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/TanimotoCoefficientSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/TanimotoCoefficientSimilarity.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/TanimotoCoefficientSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/TanimotoCoefficientSimilarity.java Tue Dec 23 15:32:31 2008
@@ -57,11 +57,13 @@
/**
* @throws UnsupportedOperationException
*/
+ @Override
public void setPreferenceInferrer(PreferenceInferrer inferrer) {
throw new UnsupportedOperationException();
}
- public final double userSimilarity(User user1, User user2) throws TasteException {
+ @Override
+ public double userSimilarity(User user1, User user2) {
if (user1 == null || user2 == null) {
throw new IllegalArgumentException("user1 or user2 is null");
@@ -116,7 +118,8 @@
return result;
}
- public final double itemSimilarity(Item item1, Item item2) throws TasteException {
+ @Override
+ public double itemSimilarity(Item item1, Item item2) throws TasteException {
if (item1 == null || item2 == null) {
throw new IllegalArgumentException("item1 or item2 is null");
@@ -171,13 +174,14 @@
return result;
}
+ @Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
alreadyRefreshed = RefreshHelper.buildRefreshed(alreadyRefreshed);
RefreshHelper.maybeRefresh(alreadyRefreshed, dataModel);
}
@Override
- public final String toString() {
+ public String toString() {
return "TanimotoCoefficientSimilarity[dataModel:" + dataModel + ']';
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/CaseAmplification.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/CaseAmplification.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/CaseAmplification.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/CaseAmplification.java Tue Dec 23 15:32:31 2008
@@ -54,10 +54,12 @@
* @return <code>value<sup>factor</sup></code> if value is nonnegative;
* <code>-value<sup>-factor</sup></code> otherwise
*/
+ @Override
public double transformSimilarity(Object thing1, Object thing2, double value) {
return value < 0.0 ? -Math.pow(-value, factor) : Math.pow(value, factor);
}
+ @Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
// do nothing
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/InverseUserFrequency.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/InverseUserFrequency.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/InverseUserFrequency.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/InverseUserFrequency.java Tue Dec 23 15:32:31 2008
@@ -82,6 +82,7 @@
return logBase;
}
+ @Override
public double getTransformedValue(Preference pref) {
Double factor = iufFactors.get().get(pref.getItem());
if (factor != null) {
@@ -90,6 +91,7 @@
return pref.getValue();
}
+ @Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
try {
recompute();
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/ZScore.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/ZScore.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/ZScore.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/ZScore.java Tue Dec 23 15:32:31 2008
@@ -49,6 +49,7 @@
refresh(null);
}
+ @Override
public double getTransformedValue(Preference pref) throws TasteException {
RunningAverageAndStdDev meanAndStdev = meanAndStdevs.get(pref.getUser());
if (meanAndStdev.getCount() > 1) {
@@ -60,6 +61,7 @@
return 0.0;
}
+ @Override
public void refresh(Collection<Refreshable> alreadyRefreshed) {
// do nothing
}
@@ -71,6 +73,7 @@
private static class MeanStdevRetriever implements Retriever<User, RunningAverageAndStdDev> {
+ @Override
public RunningAverageAndStdDev get(User user) throws TasteException {
RunningAverageAndStdDev running = new FullRunningAverageAndStdDev();
Preference[] prefs = user.getPreferencesAsArray();
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/web/RecommenderServlet.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/web/RecommenderServlet.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/web/RecommenderServlet.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/web/RecommenderServlet.java Tue Dec 23 15:32:31 2008
@@ -115,7 +115,7 @@
}
- private void writeXML(HttpServletResponse response, Iterable<RecommendedItem> items) throws IOException {
+ private static void writeXML(HttpServletResponse response, Iterable<RecommendedItem> items) throws IOException {
response.setContentType("text/xml");
response.setCharacterEncoding("UTF-8");
response.setHeader("Cache-Control", "no-cache");
@@ -131,7 +131,7 @@
writer.println("</recommendedItems>");
}
- private void writeJSON(HttpServletResponse response, Iterable<RecommendedItem> items) throws IOException {
+ private static void writeJSON(HttpServletResponse response, Iterable<RecommendedItem> items) throws IOException {
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
response.setHeader("Cache-Control", "no-cache");
@@ -162,7 +162,7 @@
}
}
- private void writeRecommendations(Iterable<RecommendedItem> items, PrintWriter writer) {
+ private static void writeRecommendations(Iterable<RecommendedItem> items, PrintWriter writer) {
for (RecommendedItem recommendedItem : items) {
writer.print(recommendedItem.getValue());
writer.print('\t');
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/BayesFileFormatter.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/BayesFileFormatter.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/BayesFileFormatter.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/BayesFileFormatter.java Tue Dec 23 15:32:31 2008
@@ -57,6 +57,9 @@
private static final String LINE_SEP = System.getProperty("line.separator");
+ private BayesFileFormatter() {
+ }
+
/**
* Collapse all the files in the inputDir into a single file in the proper
* Bayes format, 1 document per line
@@ -153,6 +156,7 @@
this.outputDir = outputDir;
}
+ @Override
public boolean accept(File file) {
if (file.isFile()) {
Writer theWriter = null;
@@ -258,9 +262,9 @@
@SuppressWarnings("static-access")
public static void main(String[] args) throws ClassNotFoundException,
IllegalAccessException, InstantiationException, IOException {
- final DefaultOptionBuilder obuilder = new DefaultOptionBuilder();
- final ArgumentBuilder abuilder = new ArgumentBuilder();
- final GroupBuilder gbuilder = new GroupBuilder();
+ DefaultOptionBuilder obuilder = new DefaultOptionBuilder();
+ ArgumentBuilder abuilder = new ArgumentBuilder();
+ GroupBuilder gbuilder = new GroupBuilder();
Option inputOpt = obuilder.withLongName("input").withRequired(true).withArgument(
abuilder.withName("input").withMinimum(1).withMaximum(1).create()).
@@ -289,11 +293,10 @@
Option helpOpt = obuilder.withLongName("help").withRequired(true).
withDescription("Print out help").withShortName("h").create();
Group group = gbuilder.withName("Options").withOption(inputOpt).withOption(outputOpt).withOption(labelOpt).withOption(analyzerOpt).withOption(charsetOpt).withOption(collapseOpt).withOption(helpOpt).create();
- CommandLine cmdLine;
try {
Parser parser = new Parser();
parser.setGroup(group);
- cmdLine = parser.parse(args);
+ CommandLine cmdLine = parser.parse(args);
if (cmdLine.hasOption(helpOpt)) {
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ClassifierResult.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ClassifierResult.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ClassifierResult.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ClassifierResult.java Tue Dec 23 15:32:31 2008
@@ -52,6 +52,7 @@
this.score = score;
}
+ @Override
public String toString() {
return "ClassifierResult{" +
"category='" + label + '\'' +
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/Classify.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/Classify.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/Classify.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/Classify.java Tue Dec 23 15:32:31 2008
@@ -53,12 +53,15 @@
private static final Logger log = LoggerFactory.getLogger(Classify.class);
+ private Classify() {
+ }
+
@SuppressWarnings({ "static-access" })
public static void main(String[] args)
throws IOException, ClassNotFoundException, IllegalAccessException, InstantiationException, OptionException {
- final DefaultOptionBuilder obuilder = new DefaultOptionBuilder();
- final ArgumentBuilder abuilder = new ArgumentBuilder();
- final GroupBuilder gbuilder = new GroupBuilder();
+ DefaultOptionBuilder obuilder = new DefaultOptionBuilder();
+ ArgumentBuilder abuilder = new ArgumentBuilder();
+ GroupBuilder gbuilder = new GroupBuilder();
Option pathOpt = obuilder.withLongName("path").withRequired(true).withArgument(
abuilder.withName("path").withMinimum(1).withMaximum(1).create()).withDescription("The local file system path").withShortName("p").create();
@@ -109,7 +112,6 @@
log.info("Loading model from: {}", modelPaths);
Model model;
- Classifier classifier;
String classifierType = (String) cmdLine.getValue(typeOpt);
@@ -122,9 +124,9 @@
} else {
throw new IllegalArgumentException("Unrecognized classifier type: " + classifierType);
}
- classifier = new BayesClassifier();
+ Classifier classifier = new BayesClassifier();
- model = reader.loadModel(model, fs, modelPaths, conf);
+ reader.loadModel(model, fs, modelPaths, conf);
log.info("Done loading model: # labels: {}", model.getLabels().size());
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ConfusionMatrix.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ConfusionMatrix.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ConfusionMatrix.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ConfusionMatrix.java Tue Dec 23 15:32:31 2008
@@ -20,7 +20,6 @@
import org.apache.commons.lang.StringUtils;
import org.apache.mahout.common.Summarizable;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
@@ -32,7 +31,7 @@
*/
public class ConfusionMatrix implements Summarizable {
- private Collection<String> labels;
+ private final Collection<String> labels;
private final Map<String, Integer> labelMap = new HashMap<String, Integer>();
@@ -63,8 +62,9 @@
int correct = 0;
for(int i = 0 ;i < labels.size() ;i++){
labelTotal += confusionMatrix[labelId][i];
- if(i == labelId)
+ if (i == labelId) {
correct = confusionMatrix[labelId][i];
+ }
}
return 100.0 * correct / labelTotal;
}
@@ -95,7 +95,7 @@
public int getCount(String correctLabel, String classifiedLabel) {
if (labels.contains(correctLabel)
&& labels.contains(classifiedLabel) == false && defaultLabel.equals(classifiedLabel) == false) {
- throw new IllegalArgumentException("Label not found " +correctLabel + " " +classifiedLabel );
+ throw new IllegalArgumentException("Label not found " +correctLabel + ' ' +classifiedLabel );
}
int correctId = labelMap.get(correctLabel);
int classifiedId = labelMap.get(classifiedLabel);
@@ -137,6 +137,7 @@
return this;
}
+ @Override
public String summarize() {
String lineSep = System.getProperty("line.separator");
StringBuilder returnString = new StringBuilder();
@@ -168,7 +169,7 @@
return returnString.toString();
}
- String getSmallLabel(int i) {
+ static String getSmallLabel(int i) {
int val = i;
StringBuilder returnString = new StringBuilder();
do{
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ResultAnalyzer.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ResultAnalyzer.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ResultAnalyzer.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ResultAnalyzer.java Tue Dec 23 15:32:31 2008
@@ -54,10 +54,12 @@
confusionMatrix.addInstance(correctLabel, classifiedResult);
}
+ @Override
public String toString() {
return "";
}
+ @Override
public String summarize() {
StringBuilder returnString = new StringBuilder();
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesClassifier.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesClassifier.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesClassifier.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesClassifier.java Tue Dec 23 15:32:31 2008
@@ -44,6 +44,7 @@
* Ties are broken by comparing the category
* @return A Collection of {@link org.apache.mahout.classifier.ClassifierResult}s.
*/
+ @Override
public Collection<ClassifierResult> classify(Model model, String[] document, String defaultCategory, int numResults) {
Collection<String> categories = model.getLabels();
@@ -75,6 +76,7 @@
* @param defaultCategory The default category to assign if one cannot be determined
* @return The single best category
*/
+ @Override
public ClassifierResult classify(Model model, String[] document, String defaultCategory) {
ClassifierResult result = new ClassifierResult(defaultCategory);
double max = Double.MAX_VALUE;
@@ -101,8 +103,8 @@
* @return The probability
* @see Model# featureWeight (String, String)
*/
+ @Override
public double documentWeight(Model model, String label, String[] document) {
- double result = 0.0;
Map<String, Integer[]> wordList = new HashMap<String, Integer[]>(1000);
for (String word : document) {
Integer [] count = wordList.get(word);
@@ -113,6 +115,7 @@
}
count[0]++;
}
+ double result = 0.0;
for (Map.Entry<String, Integer[]> entry : wordList.entrySet()) {
String word = entry.getKey();
int count = entry.getValue()[0];
@@ -128,6 +131,7 @@
initialize(numResults);
}
+ @Override
protected boolean lessThan(Object a, Object b) {
ClassifierResult cr1 = (ClassifierResult) a;
ClassifierResult cr2 = (ClassifierResult) b;
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesDriver.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesDriver.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesDriver.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesDriver.java Tue Dec 23 15:32:31 2008
@@ -35,6 +35,9 @@
private static final Logger log = LoggerFactory.getLogger(BayesDriver.class);
+ private BayesDriver() {
+ }
+
/**
* Takes in two arguments:
* <ol>
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesModel.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesModel.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesModel.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesModel.java Tue Dec 23 15:32:31 2008
@@ -65,19 +65,19 @@
@Override
public void initializeNormalizer() {
- double perLabelWeightSumNormalisationFactor = Double.MAX_VALUE;
log.info("{}", thetaNormalizer);
- for (Integer label : thetaNormalizer.keySet()) {
- double Sigma_W_ij = thetaNormalizer.get(label);
+ double perLabelWeightSumNormalisationFactor = Double.MAX_VALUE;
+ for (Map.Entry<Integer, Double> integerDoubleEntry1 : thetaNormalizer.entrySet()) {
+ double Sigma_W_ij = integerDoubleEntry1.getValue();
if (perLabelWeightSumNormalisationFactor > Math.abs(Sigma_W_ij)) {
perLabelWeightSumNormalisationFactor = Math.abs(Sigma_W_ij);
}
}
- for (Integer label : thetaNormalizer.keySet()) {
- double Sigma_W_ij = thetaNormalizer.get(label);
- thetaNormalizer.put(label, Sigma_W_ij
+ for (Map.Entry<Integer, Double> integerDoubleEntry : thetaNormalizer.entrySet()) {
+ double Sigma_W_ij = integerDoubleEntry.getValue();
+ thetaNormalizer.put(integerDoubleEntry.getKey(), Sigma_W_ij
/ perLabelWeightSumNormalisationFactor);
}
log.info("{}", thetaNormalizer);
@@ -89,9 +89,7 @@
double[] perLabelThetaNormalizer = new double[labelList.size()];
- double perLabelWeightSumNormalisationFactor = Double.MAX_VALUE;
-
- for (int feature = 0, maxFeatures = featureList.size(); feature < maxFeatures; feature++) {
+ for (int feature = 0, maxFeatures = featureList.size(); feature < maxFeatures; feature++) {
Integer featureInt = feature;
for (int label = 0, maxLabels = labelList.size(); label < maxLabels; label++) {
@@ -113,7 +111,8 @@
}
}
log.info("Normalizing Weights");
- for (int label = 0, maxLabels = labelList.size(); label < maxLabels; label++) {
+ double perLabelWeightSumNormalisationFactor = Double.MAX_VALUE;
+ for (int label = 0, maxLabels = labelList.size(); label < maxLabels; label++) {
double Sigma_W_ij = perLabelThetaNormalizer[label];
if (perLabelWeightSumNormalisationFactor > Math.abs(Sigma_W_ij)) {
perLabelWeightSumNormalisationFactor = Math.abs(Sigma_W_ij);
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerDriver.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerDriver.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerDriver.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerDriver.java Tue Dec 23 15:32:31 2008
@@ -26,6 +26,8 @@
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.SequenceFileInputFormat;
import org.apache.hadoop.mapred.SequenceFileOutputFormat;
+import org.apache.hadoop.mapred.FileOutputFormat;
+import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.util.GenericsUtil;
import org.apache.mahout.classifier.bayes.io.SequenceFileModelReader;
import org.slf4j.Logger;
@@ -41,6 +43,9 @@
private static final Logger log = LoggerFactory.getLogger(BayesThetaNormalizerDriver.class);
+ private BayesThetaNormalizerDriver() {
+ }
+
/**
* Takes in two arguments:
* <ol>
@@ -70,9 +75,9 @@
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(DoubleWritable.class);
- SequenceFileInputFormat.addInputPath(conf, new Path(output + "/trainer-tfIdf/trainer-tfIdf"));
+ FileInputFormat.addInputPath(conf, new Path(output + "/trainer-tfIdf/trainer-tfIdf"));
Path outPath = new Path(output + "/trainer-thetaNormalizer");
- SequenceFileOutputFormat.setOutputPath(conf, outPath);
+ FileOutputFormat.setOutputPath(conf, outPath);
conf.setNumMapTasks(100);
//conf.setNumReduceTasks(1);
conf.setMapperClass(BayesThetaNormalizerMapper.class);
@@ -91,7 +96,7 @@
SequenceFileModelReader reader = new SequenceFileModelReader();
Path Sigma_kFiles = new Path(output+"/trainer-weights/Sigma_k/*");
- Map<String,Double> labelWeightSum = reader.readLabelSums(dfs, Sigma_kFiles, conf);
+ Map<String,Double> labelWeightSum = SequenceFileModelReader.readLabelSums(dfs, Sigma_kFiles, conf);
DefaultStringifier<Map<String,Double>> mapStringifier =
new DefaultStringifier<Map<String,Double>>(conf, GenericsUtil.getClass(labelWeightSum));
String labelWeightSumString = mapStringifier.toString(labelWeightSum);
@@ -103,7 +108,7 @@
Path sigma_kSigma_jFile = new Path(output+"/trainer-weights/Sigma_kSigma_j/*");
- double sigma_jSigma_k = reader.readSigma_jSigma_k(dfs, sigma_kSigma_jFile, conf);
+ double sigma_jSigma_k = SequenceFileModelReader.readSigma_jSigma_k(dfs, sigma_kSigma_jFile, conf);
DefaultStringifier<Double> stringifier = new DefaultStringifier<Double>(conf, Double.class);
String sigma_jSigma_kString = stringifier.toString(sigma_jSigma_k);
@@ -113,7 +118,7 @@
conf.set("cnaivebayes.sigma_jSigma_k", sigma_jSigma_kString);
Path vocabCountFile = new Path(output+"/trainer-tfIdf/trainer-vocabCount/*");
- double vocabCount = reader.readVocabCount(dfs, vocabCountFile, conf);
+ double vocabCount = SequenceFileModelReader.readVocabCount(dfs, vocabCountFile, conf);
String vocabCountString = stringifier.toString(vocabCount);
log.info("Vocabulary Count");
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerMapper.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerMapper.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerMapper.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerMapper.java Tue Dec 23 15:32:31 2008
@@ -51,6 +51,7 @@
* @param reporter
* @throws IOException
*/
+ @Override
public void map(Text key, DoubleWritable value,
OutputCollector<Text, DoubleWritable> output, Reporter reporter)
throws IOException {
@@ -60,7 +61,7 @@
String label = labelFeaturePair.split(",")[0];
double weight = Math.log((value.get() + alpha_i) / (labelWeightSum.get(label) + vocabCount));
- output.collect(new Text(("_" + label).trim()), new DoubleWritable(weight));
+ output.collect(new Text(('_' + label).trim()), new DoubleWritable(weight));
}
@Override
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerReducer.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerReducer.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerReducer.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerReducer.java Tue Dec 23 15:32:31 2008
@@ -34,6 +34,7 @@
public class BayesThetaNormalizerReducer extends MapReduceBase implements
Reducer<Text, DoubleWritable, Text, DoubleWritable> {
+ @Override
public void reduce(Text key, Iterator<DoubleWritable> values,
OutputCollector<Text, DoubleWritable> output, Reporter reporter)
throws IOException {
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureDriver.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureDriver.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureDriver.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureDriver.java Tue Dec 23 15:32:31 2008
@@ -37,7 +37,10 @@
*/
public class BayesFeatureDriver {
- private static final Logger log = LoggerFactory.getLogger(BayesFeatureDriver.class);
+ private static final Logger log = LoggerFactory.getLogger(BayesFeatureDriver.class);
+
+ private BayesFeatureDriver() {
+ }
/**
* Takes in two arguments:
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureMapper.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureMapper.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureMapper.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureMapper.java Tue Dec 23 15:32:31 2008
@@ -63,6 +63,7 @@
* @param reporter Not used
* @throws IOException
*/
+ @Override
public void map(Text key, Text value,
OutputCollector<Text, DoubleWritable> output, Reporter reporter)
throws IOException {
@@ -106,7 +107,7 @@
}
// Output Document Frequency per Word per Class
- String dflabel = "-" + label;
+ String dflabel = '-' + label;
int dfKeyLen = dflabel.length();
builder = new StringBuilder(dflabel);
for (String token : wordList.keySet()) {
@@ -114,14 +115,14 @@
builder.append(',').append(token);
labelWord.set(builder.toString());
output.collect(labelWord, one);
- output.collect(new Text("," + token), one);
+ output.collect(new Text(',' + token), one);
builder.setLength(dfKeyLen);// truncate back
}
// output that we have seen the label to calculate the Count of Document per
// class
- output.collect(new Text("_" + label), one);
+ output.collect(new Text('_' + label), one);
}
@Override
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureOutputFormat.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureOutputFormat.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureOutputFormat.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureOutputFormat.java Tue Dec 23 15:32:31 2008
@@ -32,33 +32,32 @@
/**
* This class extends the MultipleOutputFormat, allowing to write the output data to different output files in sequence file output format.
*/
-public class BayesFeatureOutputFormat extends MultipleOutputFormat<WritableComparable,Writable>{
+public class BayesFeatureOutputFormat extends MultipleOutputFormat<WritableComparable<?>,Writable>{
- private SequenceFileOutputFormat<WritableComparable,Writable> theSequenceFileOutputFormat = null;
+ private SequenceFileOutputFormat<WritableComparable<?>,Writable> theSequenceFileOutputFormat = null;
@Override
- protected RecordWriter<WritableComparable, Writable> getBaseRecordWriter(
+ protected RecordWriter<WritableComparable<?>, Writable> getBaseRecordWriter(
FileSystem fs, JobConf job, String name, Progressable arg3)
throws IOException {
if (theSequenceFileOutputFormat == null) {
- theSequenceFileOutputFormat = new SequenceFileOutputFormat<WritableComparable,Writable>();
+ theSequenceFileOutputFormat = new SequenceFileOutputFormat<WritableComparable<?>,Writable>();
}
return theSequenceFileOutputFormat.getRecordWriter(fs, job, name, arg3);
}
@Override
- protected String generateFileNameForKeyValue(WritableComparable k, Writable v,
- String name) {
+ protected String generateFileNameForKeyValue(WritableComparable<?> k, Writable v, String name) {
Text key = (Text) k;
-
- if(key.toString().startsWith("_"))
- return "trainer-docCount/"+name;
- else if(key.toString().startsWith("-"))
- return "trainer-termDocCount/"+name;
- else if(key.toString().startsWith(","))
- return "trainer-featureCount/"+name;
- else
- return "trainer-wordFreq/"+name;
+ char firstChar = key.toString().charAt(0);
+ if (firstChar == '_') {
+ return "trainer-docCount/" + name;
+ } else if (firstChar == '-') {
+ return "trainer-termDocCount/" + name;
+ } else if (firstChar == ',') {
+ return "trainer-featureCount/" + name;
+ }
+ return "trainer-wordFreq/" + name;
}
}
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureReducer.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureReducer.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureReducer.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureReducer.java Tue Dec 23 15:32:31 2008
@@ -33,6 +33,7 @@
public class BayesFeatureReducer extends MapReduceBase
implements Reducer<Text, DoubleWritable, Text, DoubleWritable> {
+ @Override
public void reduce(Text key,
Iterator<DoubleWritable> values,
OutputCollector<Text, DoubleWritable> output,
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesTfIdfDriver.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesTfIdfDriver.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesTfIdfDriver.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesTfIdfDriver.java Tue Dec 23 15:32:31 2008
@@ -25,7 +25,8 @@
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.SequenceFileInputFormat;
-import org.apache.hadoop.mapred.SequenceFileOutputFormat;
+import org.apache.hadoop.mapred.FileOutputFormat;
+import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.util.GenericsUtil;
import org.apache.mahout.classifier.bayes.io.SequenceFileModelReader;
import org.slf4j.Logger;
@@ -41,6 +42,9 @@
private static final Logger log = LoggerFactory.getLogger(BayesTfIdfDriver.class);
+ private BayesTfIdfDriver() {
+ }
+
/**
* Takes in two arguments:
* <ol>
@@ -70,12 +74,12 @@
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(DoubleWritable.class);
-
- SequenceFileInputFormat.addInputPath(conf, new Path(output + "/trainer-termDocCount"));
- SequenceFileInputFormat.addInputPath(conf, new Path(output + "/trainer-wordFreq"));
- SequenceFileInputFormat.addInputPath(conf, new Path(output + "/trainer-featureCount"));
+
+ FileInputFormat.addInputPath(conf, new Path(output + "/trainer-termDocCount"));
+ FileInputFormat.addInputPath(conf, new Path(output + "/trainer-wordFreq"));
+ FileInputFormat.addInputPath(conf, new Path(output + "/trainer-featureCount"));
Path outPath = new Path(output + "/trainer-tfIdf");
- SequenceFileOutputFormat.setOutputPath(conf, outPath);
+ FileOutputFormat.setOutputPath(conf, outPath);
conf.setNumMapTasks(100);
conf.setMapperClass(BayesTfIdfMapper.class);
@@ -95,7 +99,7 @@
Path interimFile = new Path(output+"/trainer-docCount/part-*");
- Map<String,Double> labelDocumentCounts= reader.readLabelDocumentCounts(dfs, interimFile, conf);
+ Map<String,Double> labelDocumentCounts = SequenceFileModelReader.readLabelDocumentCounts(dfs, interimFile, conf);
DefaultStringifier<Map<String,Double>> mapStringifier =
new DefaultStringifier<Map<String,Double>>(conf,GenericsUtil.getClass(labelDocumentCounts));
Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesTfIdfMapper.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesTfIdfMapper.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesTfIdfMapper.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesTfIdfMapper.java Tue Dec 23 15:32:31 2008
@@ -50,13 +50,15 @@
* @param reporter
* @throws IOException
*/
+ @Override
public void map(Text key, DoubleWritable value,
OutputCollector<Text, DoubleWritable> output, Reporter reporter)
throws IOException {
String labelFeaturePair = key.toString();
- if (labelFeaturePair.startsWith("-")) { // if it is the termDocumentCount
+ char firstChar = labelFeaturePair.charAt(0);
+ if (firstChar == '-') { // if it is the termDocumentCount
labelFeaturePair = labelFeaturePair.substring(1);
String label = labelFeaturePair.split(",")[0];
@@ -69,7 +71,7 @@
double logIdf = Math.log(labelDocumentCount / value.get());
output.collect(new Text(labelFeaturePair), new DoubleWritable(logIdf));
- } else if (labelFeaturePair.startsWith(",")) {
+ } else if (firstChar == ',') {
output.collect(new Text("*vocabCount"), new DoubleWritable(1.0));
} else {
output.collect(key, value);