Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Utilização de np.random.seed e de np.random.permutation

Olá, estou com dúvidas acerca da utilização dessas duas funções nesta aula.

Primeiramente, gostaria de confirmar algumas informações que li sobre as funções, para ver se seria isso mesmo.

Ao procurar informações sobre a função random.seed, li que a maior finalidade dela é criar números pseudo-aleatórios com base na semente, ou seja, sempre gerar o mesmo conjunto de números aleatórios para determinada semente, estou certo? Enquanto isso, já para a função random.permutation, ela permuta aleatoriamente uma sequência que damos a ela (ou então cria um range de 0 até o número que informamos a ela, como é o caso da aula, com o número 400, e permuta esses valores).

Gostaria de entender, então, qual seria a relação entre essas duas funções neste código feito pelo professor? Porque a união é necessária? Na minha cabeça, ao utilizar primeiramente o random.seed e posteriormente o permutation, eu teria Ids de cada aluno iguais aos encontrados pelo professor, porém não foi isso que ocorreu. Porque utilizar nesse caso o random.seed então? Não consigo enxergar no o que ele implica e, caso não implique em nada, porque não utilizar somente o random.permutation, que já faz o trabalho de "embaralhar" 400 números, como precisamos?

4 respostas

Olá Lucas, tudo bem? Espero que sim!

O random.permutation é uma função que irá embaralhar os valores de forma aleatória com base nos elementos que são passados a ele, que no caso foi o número 400, portanto será gerada uma sequência de 400 valores distintos entre si.

A função seed é utilizada para gerar o mesmo resultado todas as vezes que for executada uma tarefa aleatória, para que o mesmo resultado seja gerado em momentos diferentes. Portanto ao escolher o seed 123, ele pode utilizar o permutation inúmeras vezes que o resultado será o mesmo para a permutação dos ids.

O resultado obtido por você e por ele será o mesmo utilizando o mesmo seed. O que pode ter acontecido é que o instrutor utilizou logo depois um sample, que é uma amostra aleatória que não está mais atrelada ao seed, mostrando nomes diferentes na tela.

Bons estudos!

Oi João, muito obrigado pela resposta! Ficou bem mais claro essa relação entre as duas funções.

Porém fui comparar o resultado obtido pelo professor com o meu, e percebi que os Ids realmente são diferentes. Como ele utilizou o sample(), vi que em uma dessas aplicações, o sample retornou o valor (index = 166, nome = Kelly, id_aluno = 45). Então, fui buscar esse index no meu dataframe através da função .iloc[166] e achei o os valores (index = 166, nome = Kelly, id_aluno = 109), id diferente do encontrado pelo professor. Para outros casos, fiz o mesmo raciocínio e o valor dos ids também era diferente. Por mais que eu rode o código novamente, esse valor não muda (creio que seja por conta do seed). Queria saber possíveis motivos para ter encontrado essa diferença. Fiz exatamente tudo como o professor, a única diferença que percebi é que estou fazendo pelo Jupyter Notebook, enquanto ele está usando o Collab. Isso poderia ter causado essa diferença de valores no id, mesmo com o random.seed igual? Ou então uma possível diferença de versão do NumPy entre a dele e a minha?

Uma outra dúvida que surgiu ao analisar esse caso é que, diferentemente do random.permutation(), há uma mudança de escolhas se eu recompilo o código na parte da função random.choice(), onde são escolhidos os domínios de cada aluno. Por que, nesse caso, o random.permutation() não varia, respeitando o random.seed(), enquanto o random.choice() muda sua escolha cada vez que rodo o código novamente?

solução!

Olá,

Pode ser que seja devido a versão diferente da biblioteca mesmo.

O random.seed() irá funcionar somente para a próxima execução, portanto é recomendado utilizar o random.seed() na mesma célula que será executado o código. E caso vá utilizar outra função, escreva novamente o random.seed() para executar essa segunda função.

Muito obrigado, João!