Forum Replies Created

Viewing 15 posts - 361 through 375 (of 414 total)
  • Author
    Posts
  • in reply to: Como converter um resultado do tensor em um percentual? #35029
    Denny Ceccon
    Moderator

      Olá Aislan,

      Este tensor já contém as probabilidades para cada uma das classes. Observe que o valor no index 6 é igual a 0.999, que equivale a 99.9%. Todos os outros são tão baixos que na prática equivalem a zero.

      Se você quiser formatar melhor, pode converser este tensor para numpy array com array = tensor.numpy(), e depois extrair o valor máximo com np.max(array).

      in reply to: Não consigo prever mais classes, AJUDA POR FAVOR! #35013
      Denny Ceccon
      Moderator

        Olá Micael,

        Para prever mais de uma categoria, além de ajustar o parâmetro NB_CLASSES, você precisa transformar seus rótulos usando o LabelEncoder do Sklearn:

        from sklearn.preprocessing import LabelEncoder
        encoder = LabelEncoder()
        data_labels = encoder.fit_transform(data_labels.reshape(-1, 1))

        Aliás, dá pra fazer isto também com duas categorias, ao invés de fazer a transformação manualmente como o professor fez.

        O interessante de usar este método é que dá pra recuperar os rótulos originais no final, usando o método inverse_transform do encoder:

        def get_prediction(sentence):
            tokens = encode_sentence(sentence)
            inputs = tf.expand_dims(tokens, 0)
            output = Dcnn(inputs, training=False).numpy()
            output = np.argmax(output, -1)
            category = encoder.inverse_transform(output)
            return category
        in reply to: sigmoid #34752
        Denny Ceccon
        Moderator

          Se você usar sigmoide, então cada neurônio que tiver valor o acima de 0.5 indica presença da categoria. Por exemplo, se neurônio_mamífero = 0.6, neurônio_aquático = 0.7 e neurônio_escamoso = 0.4, então o registro é mamífero e também aquático, mas não tem escamas.

          Quando o problema só admite uma classe, nós usamos softmax, que aí sim o valor maior indica a presença da única classe permitida.

          in reply to: sigmoid #34703
          Denny Ceccon
          Moderator

            Até consegue, pois você pode por exemplo colocar três neurônios na camada de saída, todos ativados com sigmoide. Neste caso, a rede neural vai determinar se o registro pertence a cada uma das classes, independentemente. É assim que trabalhamos com problemas multi-classe, por exemplo quando um animal pode ser mamífero e aquático ao mesmo tempo. Mas se as classes forem exclusivas, por exemplo mamífero ou réptil ou peixe. a ativação mais adequada é softmax, que limita a resposta a somente uma categoria.

            in reply to: sigmoid #34702
            Denny Ceccon
            Moderator

              Até consegue, pois você pode por exemplo colocar três neurônios na camada de saída, todos ativados com sigmoide. Neste caso, a rede neural vai determinar se o registro pertence a cada uma das classes, independentemente. É assim que trabalhamos com problemas multi-classe, por exemplo quando um animal pode ser mamífero e aquático ao mesmo tempo. Mas se as classes forem exclusivas, por exemplo mamífero ou réptil ou peixe. a ativação mais adequada é softmax, que limita a resposta a somente uma categoria.

              in reply to: sigmoid #34675
              Denny Ceccon
              Moderator

                Olá Caio,

                Cada neurônio de entrada representa uma variável do dataset, e cada neurônio terá pesos diferentes para cada camada oculta.

                A função sigmoide produz resultados no intervalo entre 0 e 1, mas ela força para que os resultados se concentrem mais próximos de 0 ou de 1. Por isso, ela é uma função de ativação adequada para problemas de classificação binária, indicando uma das classes com 0 e a outra com 1.

                in reply to: COnversão Date em Datetime #34674
                Denny Ceccon
                Moderator

                  Olá Felix,

                  Seria interessante converter a coluna Date para datetime se o professor fosse utilizar a data para, por exemplo, plotar um gráfico temporal, mas como ele não fez isso, não faz diferença, o importante é recuperar a informação de interesse.

                  in reply to: Visualizar um dataframe atraves do displaCY #34659
                  Denny Ceccon
                  Moderator

                    É que o displacy renderiza uma frase por vez, e tecnicamente, em uma coluna, você terá várias frases. Mas pode tentar algo deste tipo:

                    for frase in df['coluna']:
                        doc = nlp(frase)
                        displacy.render(doc, style='dep')
                    in reply to: Qui quadrado #34657
                    Denny Ceccon
                    Moderator

                      Depende, neste caso o 1 vai só significar se o registro não está nulo para a categoria “estado civil”. Se você quiser explicitar que a categoria pode ser casado, solteiro, viúvo ou nulo, precisa fazer desta forma:

                      reg1: casado => [1, 0, 0, 0]
                      reg2: solteiro => [0, 1, 0, 0]
                      reg3: viúvo => [0, 0, 1, 0]
                      reg4: nulo => [0, 0, 0, 1]

                      Assim, cada posição da lista indica uma das 4 categorias possíveis para “estado civil”.

                      Esta codificação é tão comum que é chamada de One Hot Encoding, você vai encontrar referências a ela e como realizá-la no curso Machine Learning e Data Science com Python de A à Z, Parte 1 – Classificação, aula Atributos categóricos – OneHotEncoder.

                      in reply to: Qui quadrado #34636
                      Denny Ceccon
                      Moderator

                        Olá Caio,

                        As classes qualitativas devem estar representadas com 0 (para ausência) e 1 (para presença), como acontece com várias colunas do dataset mostrado na aula.

                        in reply to: Teste de hipótese #34635
                        Denny Ceccon
                        Moderator

                          Olá Caio,

                          Você precisa garantir que as duas são amostras representativas da mesma população. Existe uma literatura considerável sobre o que significa uma amostra representativa, mas um dos princípios mais fundamentais é que ela seja aleatória. Não precisa ter o mesmo número de amostras, mas tecnicamente você precisa garantir que o número de amostras seja suficiente para medir o efeito de interesse. Este é outro assunto que tem bastante material de referência, te recomendo este artigo pra te dar uma ideia: https://www.statology.org/minimum-sample-size-for-t-test/

                          in reply to: Visualizar um dataframe atraves do displaCY #34634
                          Denny Ceccon
                          Moderator

                            Olá Shin,

                            Tente adicionar o parâmetro manual=True à chamada do displacy, como sugere o código de erro.

                            in reply to: Padronização e zscore(knn) #34616
                            Denny Ceccon
                            Moderator

                              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 lista accuracy_folds.

                              in reply to: Como encontrar o suporte de cada regra #34602
                              Denny Ceccon
                              Moderator

                                Olá Samara,

                                Se você inspecionar a variável resultados, vai ver que uma das primeiras informações é o suporte:

                                in reply to: Padronização e zscore(knn) #34601
                                Denny Ceccon
                                Moderator

                                  Olá Caio, você pode especificar a qual aula exatamente se refere?

                                Viewing 15 posts - 361 through 375 (of 414 total)