Questão nº 36
Questão de Tecnologia da Informação · CESGRANRIO BB 01/2022 (nº 36)
Analise o código a seguir, feito em Python com o Scikit-learn.
import numpy as np
import sklearn.linear_model as skl
base = np.array([1, 2, 3, 4, 5, 6])
x = base.reshape((-1, 1))
y = base*2+3
# a fazer
print('a', model.coef_[0])
print('b', model.intercept_)
A partir desse código, um programador quer obter os parâmetros a e b da equação y = ax + b, por meio de uma regressão linear, usando, para isso, os dados nos vetores x e y definidos no programa.
Qual linha de código deve substituir o comentário # a fazer de modo a realizar essa regressão linear?
- A`model = skl.lr(x, y)`
- B`model = skl.lr().fit(x, y)`
- C`model = skl.LinearRegression(x, y)`
- D`model = skl.LinearRegression([x, y])`
- E`model = skl.LinearRegression().fit(x, y)` (alternativa correta)
Resposta comentada
Gabarito Alternativa E
Conceito-chave: O Scikit-learn separa a definição do modelo (criar o objeto LinearRegression) do treinamento (ajustar o modelo aos dados com o método .fit()). Você nunca passa os dados na criação do modelo — eles entram apenas no .fit().
- (A) Incorreta:
skl.lrnão existe; o nome correto da classe éLinearRegression(com maiúsculas), elrnão é um atalho válido. - (B) Incorreta:
skl.lr()também não existe (mesmo erro de nomenclatura), e mesmo que existisse, faltaria o.fit(x, y)para treinar. - (C) Incorreta: A classe
LinearRegressionnão aceitaxeycomo argumentos no construtor — ela só cria o modelo vazio; os dados são passados no.fit(). - (D) Incorreta: Passar
[x, y]como uma lista no construtor não é a API do Scikit-learn; além disso, o construtor não recebe dados, apenas hiperparâmetros. - (E) Correta:
skl.LinearRegression()cria o modelo (objeto) e.fit(x, y)treina a regressão com os dados, ajustando os coeficientes que serão acessados pormodel.coef_emodel.intercept_. Essa é a sequência canônica: instanciar → treinar.
Fonte: CESGRANRIO BB 01/2022 Escriturário - Agente de Tecnologia (Caderno Gabarito 1). Reproduzida para fins de estudo.