Questão nº 25
Questão de Tecnologia da Informação · FCC TRT20 2024 (nº 25)
Considere o código em Python abaixo que será executado em condições ideais.
```python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
iris = load_iris()
X = iris.data
y = iris.target
I
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Acurácia do modelo: {accuracy * 100:.2f}%")
```
Para que o programa divida o conjunto de dados em treino e teste na proporção de 80% treino e 20% teste, a lacuna I deve ser corretamente preenchida por:
- A`X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)` (alternativa correta)
- B`X_train, X_test, y_train, y_test = test_train_split(X, y, train_size=0.8, random_state=42)`
- C`x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state(42))`
- D`Y_train, Y_test, x_train, x_test = train_test_split(Y, x, train_size=0.8)`
- E`x_train, x_test, y_train, y_test = test_train_split(x, y, train_size=0.8, random_state(0))`
Resposta comentada
Gabarito Alternativa A
A função `train_test_split` do Scikit-learn é uma ferramenta fundamental para dividir seus dados em um conjunto de treino (usado para o modelo aprender) e um conjunto de teste (usado para avaliar o quão bem o modelo generaliza para dados novos e não vistos).
(A) Correta: Esta alternativa utiliza a função `train_test_split` corretamente, passando as features `X` e os rótulos `y`. O parâmetro `test_size=0.2` indica que 20% dos dados serão usados para teste (consequentemente, 80% para treino), atendendo à proporção desejada. O `random_state=42` garante que a divisão seja a mesma toda vez que o código for executado, o que é crucial para a reprodutibilidade dos resultados. As variáveis de retorno (`X_train`, `X_test`, `y_train`, `y_test`) estão na ordem correta esperada pela função.
(B) Incorreta: A principal armadilha aqui é o nome da função: `test_train_split` está incorreto. O nome correto da função é `train_test_split`. Embora `train_size=0.8` seja uma forma válida de especificar a proporção, o erro no nome da função impede a execução.
(C) Incorreta: Esta alternativa contém duas falhas. Primeiro, o uso de `random_state(42)` está incorreto; `random_state` deve receber um valor inteiro diretamente (ex: `random_state=42`), não uma chamada de função. Segundo, as variáveis `x` (minúscula) não correspondem à variável `X` (maiúscula) definida no código original, o que causaria um erro de "variável não definida" em Python, que é case-sensitive.
(D) Incorreta: A ordem das variáveis de retorno está incorreta. A função `train_test_split` sempre retorna na ordem `X_train, X_test, y_train, y_test`. Aqui, `Y_train, Y_test` vêm antes de `x_train, x_test`, o que atribuiria os dados de features aos rótulos e vice-versa. Além disso, as variáveis de entrada `Y` e `x` não correspondem às definidas (`X` e `y`).
(E) Incorreta: Esta alternativa combina múltiplos erros já vistos. O nome da função `test_train_split` está incorreto, o uso de `random_state(0)` está incorreto (deve ser `random_state=0`), e as variáveis `x` e `y` (minúsculas) não correspondem às definidas (`X` e `y`).
Fonte: FCC TRT20 2024 Analista Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 003). Reproduzida para fins de estudo.