Skip to content

Commit

Permalink
REFS #21 : Multirecomendacão usando ensemble de cadeia de recomendadores
Browse files Browse the repository at this point in the history
  • Loading branch information
danieljunior committed Oct 4, 2018
1 parent 6d5b30f commit ed580f1
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 21 deletions.
2 changes: 1 addition & 1 deletion main.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@
recommender = MultiRecommendation(data, PCAPartitioner())
# recommender = ClassifierFeatureRecommender(X, y, PCAPartitioner(), classifier=KNeighborsClassifier(n_neighbors=3))
recomendation = recommender.recommend(preferences)
# print("Recomendação por KNN para", feature, 'é', recomendation)
print("MultiRecomendação: ", feature, 'é', recomendation)

# recommender = ClassifierFeatureRecommender(X, y, PCAPartitioner(), classifier=SVC(probability=True))
# recomendation = recommender.recommend(feature, preferences)
Expand Down
46 changes: 26 additions & 20 deletions recommenders/multi_recommendation.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,9 @@
from recommenders.regressor_feature_recommender import RegressorFeatureRecommender
from sklearn.svm import SVR
from sklearn.svm import SVC

from collections import Counter

class MultiRecommendation():

ITERATIONS = 5

def __init__(self, data, partitioner):
Expand Down Expand Up @@ -37,24 +36,31 @@ def recommend(self, preferences):
y = self.data[column]
X = self.data.drop(
list(set(columns_to_recommend) - set(tmp_columns_preferences)), axis=1)
if is_numeric_dtype(y):
recommender = RegressorFeatureRecommender(X, y, self.partitioner,
regressor=SVR())
else:
recommender = ClassifierFeatureRecommender(X, y, self.partitioner,
classifier=SVC())
recommender = self.model_type(X, y)
vote = recommender.recommend(column, tmp_preferences)
#TODO quando o parâmetro que recomendo primeiro é um numeral
# como é feita a regressão, o filtro horizontal provavelmente vai
# ser vazio por não possuir registro com esse valor exato de recomendação
if vote == None:
print('aqui')
votes[column].append(vote[0])
if is_numeric_dtype(y):
tmp_preferences.append(str(column)+" == "+str(vote[0]))
else:
tmp_preferences.append(
str(column)+" == '"+str(vote[0])+"'")
preference = self.preference_to_append(y, column, vote[0])
tmp_preferences.append(preference)
tmp_columns_preferences.append(column)
print(votes)
#TODO votação com todos os parâmetros recomendados
resp = {}
for param, vts in votes.items():
elected = Counter(vts).most_common(1)[0][0]
resp[param] = elected
return resp

def model_type(self, X, y):
if is_numeric_dtype(y):
return RegressorFeatureRecommender(X, y, self.partitioner,
regressor=SVR())
else:
return ClassifierFeatureRecommender(X, y, self.partitioner,
classifier=SVC())

def preference_to_append(self, y, column, vote_value):
if is_numeric_dtype(y):
std = y.std()
return '( '+str(column) + " <= " + str(vote_value + std) + ' ) | ' \
+ '( '+ str(column) + " >= " + str(vote_value - std) + ' )'

else:
return str(column) + " == '" + str(vote_value) + "'"

0 comments on commit ed580f1

Please sign in to comment.