Estou para responder ultimas perguntas do projeto, mas o meu código não termina de executar a chamada "treina_e_valida_modelo_de_classificacao(enem_validacao, HeuristicaTop25())", mais precisamente a função "predict" da classe "HeuristicaTop25". Não consigo identificar o problema.
# solução: implemente o código que falta
from sklearn.metrics import accuracy_score
class HeuristicaTop25:
def fit(self, X, y = None):
if(X.shape[1] != 3):
print("Erro!!! Estávamos esperando 3 colunas!")
# some **por coluna**. a função sum recebe um parâmetro para somar por coluna, não linha
parcial = X.sum(axis=1)
self.top_25_quantile = pd.Series(parcial).quantile(0.75)
print("top 25 quantile é %.2f" % self.top_25_quantile)
return self
def predict(self, X, y = None):
parcial = X.sum(axis=1)
#y_pred_true_false = [True if i> pd.Series(parcial).quantile(0.75) else False for i in parcial ]# compare a soma parcial com o self.top25_quantile
y_pred =[1 if i> pd.Series(parcial).quantile(0.75) else 0 for i in parcial ]# 1 se for maior ou igual, 0 caso contrário
return y_pred
def score(self, X, y = None):
return accuracy_score(y, self.predict(X, y))
def get_params(self, deep=True):
return {}
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.pipeline import make_pipeline
def treina_e_valida_modelo_de_classificacao(dados, modelo):
# calcule X e y usando a função anterior
X,y = separa_dados_de_classificacao_para_validacao(dados)
# calcule o cross_val_score
scores = cross_val_score(modelo,X,y)
print(scores)
mean = scores.mean()
std = scores.std()
print("Acurácia entre [%.2f,%.2f]" % (100*mean - 2*std, 100*mean + 2*std))
modelo.fit(X, y)
print_confusion_for(X, y, modelo)