Forum Replies Created
- AuthorPosts
Bem observado, Caio! Neste caso, você não vai poder usar a função
cross_val_score
, e precisa fazer uma implementação manual. Seria mais ou menos assim:from sklearn.model_selection import StratifiedKFold from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score skf = StratifiedKFold(n_splits=5) z_score_treinamento = StandardScaler() z_score_teste = StandardScaler() accuracy_folds = [] for train_index, test_index in skf.split(X, y): X_treinamento, y_treinamento = X[train_index], y[train_index] X_teste, y_teste = X[test_index], y[test_index] X_treinamento_p = z_score_treinamento.fit_transform(X_treinamento) X_teste_p = z_score_teste.fit_transform(X_teste) knn = KNeighborsClassifier() knn.fit(X_treinamento_p, y_treinamento) previsoes = knn.predict(X_teste_p) accuracy = accuracy_score(y_teste, previsoes) accuracy_folds.append(accuracy)
Ou seja, os splits são produzidos manualmente através da classe
StratifiedKFold
, aí cada split é padronizado, o modelo é treinado, a acurácia é calculada e o resultado é acumulado na listaaccuracy_folds
.Olá Samara,
Se você inspecionar a variável
resultados
, vai ver que uma das primeiras informações é o suporte:Olá Caio, você pode especificar a qual aula exatamente se refere?
Olá Shin,
A classe gramatical (verbo ou substantivo) você pode pegar do atributo
pos_
dos tokens, e se o token for um substantivo, pode verificar no atributodep_
se ele é um objeto; em caso afirmativo, pode associar o substantivo com o verbo que vem antes.Em inglês temos outras opções como o atributo
noun_chunks
do documento, que reconheceria por exemplo que “chefes de departamento” é uma coisa só, mas em português a biblioteca é mais limitada.Olá Marcio,
Não entendi sua pergunta, qual a relevância de empresas com capital aberto? Distribuição de quê? Toda distribuição se refere a uma população ou uma amostra de valores. Modelo de quê? Por favor detalhe melhor sua dúvida.
- This reply was modified 2 years, 11 months ago by
Denny Ceccon.
Olá Arno,
Você pode fazer um loop por cada tupla (chave, valores) do dicionário e imprimir a chave e a média dos valores:
for key, values in dictionary.items(): print(key, values.mean())
11 de May de 2022 at 10:09 in reply to: Medidas de posição e dispersão no contexto do fine-tuning #34576Olá Hagi,
Se o objetivo for avaliar os modelos exaustivamente, seria sim interessante repetir o processo todo a cada fit do grid search, pois em alguns casos a alteração dos hiperparâmetros pode mudar consideravelmente o comportamento do modelo. Entretanto, na prática isto geralmente não ocorre, principalmente com modelos grandes ou muitos dados, que levam muito tempo pra treinar. No final das contas vai da disponibilidade de tempo e de recursos, que você deve balancear com a confiança que quer ter no modelo final. Não existem regras muito fixas sobre isso, o desenvolvedor vai adquirindo uma intuição com a experiência e conforme se familiariza com cada caso. No final das contas, Ciência de Dados é tão arte quanto ciência! 🙂
Olá Caio,
A amplitude é sempre dada pela diferença entre valor máximo e valor mínimo.
Olá Renato,
Sim, na Parte 1 você encontra a sessão Avaliação de algoritmos de classificação, e a aula Validação cruzada.
9 de May de 2022 at 10:52 in reply to: Undersampling e oversampling para classificação multiclasse #34554Olá Hagi,
É possível sim, os mesmos conceitos se aplicam. Inclusive a biblioteca
imblearn
aceita nativamentey
com mais de duas categorias.Olá Shin,
Você nem precisa do spacy, pode fazer uma função como a seguir:
def clean_text(text): text = text.lower() words = text.split() keep = ['.', ',', '!', '?'] # supondo que quer manter alguma pontuação clean_words = [] for word in words: clean_word = ''.join([c for c in word if c.isalpha() or c in keep]) # isalpha retorna True se o caractere for alfabético if clean_word is not '': # algumas palavras vão estar vazias, podemos ignorá-las clean_words.append(clean_word) return ' '.join(clean_words)
Exemplo:
clean_text('Olá, bom dia @Shin! Você tem 1 minuto?') # olá, bom dia shin! você tem minuto?
- This reply was modified 2 years, 11 months ago by
Denny Ceccon.
Olá Shin,
Suponho que você perguntou sobre um parágrafo. Até pode, mas a ideia do tf-idf é reconhecer as palavras mais distintivas de cada texto, e se analisamos o parágrafo inteiro, ele dificilmente vai se repetir em outros textos, o que compromete a ideia que fundamenta o tf-idf.
4 de May de 2022 at 10:03 in reply to: Não consigo acessar o csv da aula sobre as ações da Petrobras. #34528Olá Thiago, você até pode usar o
train_test_split
(depois que as janelas de tempo estão prontas, ou seja, depois de criar a variávelX
), mas se quiser gerar um gráfico no final com dados contínuos, é mais interessante separar alguns registros do final da sua tabela histórica, já que usandotrain_test_split
, o dia em questão vai ser amostrado aleatoriamente.Olá Thiago,
A acurácia é uma medida de desempenho dos modelos de classificação, mas este é um problema de regressão, portanto temos que usar outras métricas. Na aula, nós usamos o mean absolute error, que é o erro absoluto. No final do treinamento, você pode observar que o MAE é de 0.1621; isto significa que a rede está errado 0.1621 no preço escalonado, para cima ou para baixo.
Olá Kayo,
O primeiro passo é converter os rótulos para inteiros, começando com
0
e incrementando1
para nova cada classe. Este processo é chamado de LabelEncoder, e pode ser feito utilizando uma classe do Sklearn. No código da aula, depois de criar data_labels, você poderia fazer essa transformação assim:data_labels = y from sklearn.preprocessing import LabelEncoder le = LabelEncoder() data_labels = le.fit_transform(data_labels) print(data_labels) # array([1, 2, 2, ..., 0, 0, 1])
Aí, depois de treinar o modelo (adaptado para seu número de classes), você continua fazendo a predição o método
predict
. Você veria algo assim (supondo que temos 3 classes):y_pred_test = Dcnn.predict(test_inputs) print(y_pred_test) # array([[0.11550928, 0.195952 , 0.6885387 ], # [0.134687 , 0.340371 , 0.52494204], # ..., # [0.27549207, 0.4443647, 0.28011146], # [0.10340592, 0.2649754, 0.63168657]], dtype=float32)
Este array tem shape
(n_registros, n_classes)
, ou seja, cada linha representa um registro e cada coluna representa uma das 3 classes. Os valores são o resultado da ativação final do modelo, que neste caso ésoftmax
, e indicam a probabilidade de o registro daquela linha pertencer àquela classe. Ou seja, você pode recuperar a predição vendo qual a classe de maior probabilidade para cada registro, e isso pode ser feito com:y_pred_labels = np.argmax(y_pred_test, axis=-1) print(y_pred_labels) # array([2, 2, 0, ..., 1, 2, 2])
Este é o resultado com os rótulos codificados, para recuperar o rótulo original você faz:
y_pred = le.inverse_transform(y_pred_labels.reshape(-1))
Agora,
y_pred
contém seus resultados finais.- This reply was modified 2 years, 11 months ago by
- AuthorPosts