Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

Como implementar o modelo de regressão conhecido como Ridge Regression (RR) em python? (MMST - Ex. 5.10)

0 votos
31 visitas
perguntada Jul 6 em Ciência da Computação por Pedro Campelo (31 pontos)  

Considere a questão 5.10 do livro Modern multivariate
statistical techniques - Alan Julian Izenman que versa sobre o uso
da base de dados "detergent" e PCR, PLSR e RR implementando
explicitamente esses modelos de regressão. Interprete os resultados
e documente cuidadosamente o seu material e implementacão.

Consider data on the composition of a liquid detergent. The datafile
detergent can be downloaded from the book’s website. There are five Y
output variables, representing four compounds in an aqueous solution
(the fifth Y variable is the amount of water in the solution), and
they sum to unity. The X input variables consist of mid-infrared
spectrum values recorded as the absorbances at r = 1168 equally spaced
frequencies in the range 3100–759 cm−1. The data consist of n = 12
sample preparations of the detergent. Graph the 12 absorbance spectra
and apply PCR, PLSR, and RR to the data using each of the first four Y
variables in separate regressions.

(c) Como implementar o modelo de regress~ao conhecido como
RR em python? Exemplique o uso do seu modelo considerando os
dados descritos acima.

Compartilhe

1 Resposta

0 votos
respondida Jul 6 por Pedro Campelo (31 pontos)  

Um simples algoritmo para implementar o Ridge Regression deve ser usado importando o Ridge do sklearn.linear_model, e assim, basta determinar os parâmetros do modelo.

import matplotlib.pyplot as plt
from sklearn.linear_model import Ridge

def ridge_regression(data, predictors, alpha, models_to_plot={}):
    RidgeReg = Ridge(alpha=alpha,normalize=True)
    RidgeReg.fit(dados[X],dados['y'])
    y_pred = ridgereg.predict(dados[X])

if alpha in ridplot:
    plt.subplot(ridplot[alpha])
    plt.tight_layout()
    plt.plot(dados['x'],y_pred)
    plt.plot(dados['x'],data['y'],'.')
    plt.title('Plot for alpha: %.3g'%alpha)

resid2 = sum((y_pred-data['y'])**2)
ret = [resid2]
ret.extend([RidgeReg.intercept_])
ret.extend(RidgeReg.coef_)
return ret
comentou Jul 6 por Pedro Campelo (31 pontos)  
Professor Cajueiro,  não consegui de forma alguma achar a base de dados "detergent" para resolver o exercício de forma empírica e obter os resultados do modelo. Por isso a questão ficou desta forma generalizada.

Tentei no site do livro:
https://astro.temple.edu/~alan/MMST/datasets.html

No StatLib:
http://lib.stat.cmu.edu/datasets/

Nos exercícios passados dos alunos:
http://prorum.com/?qa=2560/implementar-regressao-conhecido-principal-components-regression?show=2561#a2561

http://prorum.com/?qa=2543/implementar-modelo-regressao-conhecido-partial-squares-python

E no google, porém sem sucesso.
comentou Jul 7 por Victor Candido (21 pontos)  
Pedro, excelente resolução.

Realmente, o Sckit quebra um galhão para esse tipo de modelagem.

Seria legal plotar um gráfico com o fitted do modelo.

Att.
...