Upload
doandat
View
218
Download
0
Embed Size (px)
Citation preview
1 azevedolabnet
O fluxograma abaixo destaca o uso de uma abordagem computacional para o estudo
de sistemas bioloacutegicos destacado em vermelho Em verde temos a abordagem
experimental Ao final comparamos os resultados para validar a abordagem
computacional
2
Modelagem de Sistemas
Sistema Bioloacutegico
Realiza Simulaccedilotildees
Realiza Experimentos
Resultados
Experimentais Resultados das
Simulaccedilotildees
Compara
Testes dos Modelos
Modelagem
A comparaccedilatildeo eacute necessaacuteria para a validaccedilatildeo da abordagem computacional sem tal
etapa a modelagem fica sem base experimental para o estudo do sistema bioloacutegico a
ser simulado
3
Modelagem de Sistemas
Sistema Bioloacutegico
Realiza Simulaccedilotildees
Realiza Experimentos
Resultados
Experimentais Resultados das
Simulaccedilotildees
Compara
Testes dos Modelos
Modelagem
A abordagem moderna do desenho e
desenvolvimento de faacutermacos eacute resultado
de um processo iterativo Em cada
iteraccedilatildeo (ciclo de desenvolvimento)
espera-se que a atividade farmacoloacutegica
da moleacutecula seja aprimorada de forma
que haja uma evoluccedilatildeo no processo
(otimizaccedilatildeo da atividade farmacoloacutegica)
O diagrama ao lado ilustra o ciclo No
processo iterativo a moleacutecula eacute
desenhada e passa para siacutentese Neste
ponto pode ser necessaacuterio retorno agrave fase
de desenho caso a siacutentese apresente
desafios natildeo previstos na fase de
desenho
Quantitative Structure Activity Relationship
wwwpythonorg
Chegando-se agrave fase de teste a atividade
eacute averiguada e os resultados relacionados
agrave estrutura do faacutermaco em potencial
Neste processo podemos inserir uma fase
de anaacutelise onde elaboramos um modelo
computacional O modelo permite que a
atividade da moleacutecula seja relacionada
com sua estrutura ou seja um estudo da
Relaccedilatildeo Quantitativa-Estrutura-Atividade
(Quantitative Structure-Activity
Relationship QSAR) Neste estudo
descritores moleculares satildeo
relacionados agrave atividade da moleacutecula e
uma anaacutelise estatiacutestica dos descritores
leva a um modelo que pode ser usado
para prever atividade farmacoloacutegica
QSAR
Quantitative Structure Activity Relationship
wwwpythonorg
A abordagem de QSAR foi introduzida
pelo trabalho pioneiro de Corwin Hansch
na deacutecada de 1960 no seu estudo da
atividade bioloacutegica de uma seacuterie de
compostos relacionados estruturalmente
A atividade bioloacutegica pode ser relacionada
com a estrutura molecular a partir de
equaccedilotildees como a descrita abaixo
onde C eacute a concentraccedilatildeo molar de um
composto necessaacuterio para produzir uma
dada atividade bioloacutegica por exemplo
IC50 log P eacute o coeficiente de particcedilatildeo
entre octanol e aacutegua eacute outro descritor
molecular como nuacutemero de doadores de
ligaccedilatildeo de hidrogecircnio da moleacutecula
210 log1
log
P
C Descritores moleculares descrevem propriedade gerais de
uma dada moleacutecula que podem estar relacionadas com a
atividade farmacoloacutegica Por exemplo um logP abaixo de 5
indica que a moleacutecula tem baixa hidrofobicidade
aumentando as chances de disponibilidade oral
Fonte da imagem
httpwwwsciencephotocommedia350656enlarge
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
Hansch C Ruth AS Anderson SM Bentley DL
Parabolic dependence of drug action upon lipophilic
character as revealed by study of hypnotics J Med Chem 11
(1968) 1-11
Vaacuterias metodologias tecircm sido usadas
para elaborar modelos de QSAR sendo
regressatildeo a mais aplicada colocada na
sua forma linear a equaccedilatildeo de regressatildeo
tem o seguinte aspecto y = 0 + 1 x
onde y eacute a variaacutevel dependente (a
propriedade bioloacutegica a ser modelada)
um exemplo de variaacutevel dependente
usada em QSAR eacute log (1IC50) IC50 eacute a
constante inibitoacuteria para que a
atividade bioloacutegica caia 50 O termo x
eacute a variaacutevel independente (descritor
molecular) como exemplos de variaacuteveis
independentes usadas em QSAR temos
o log P nuacutemero de ligaccedilotildees rotaacuteveis
nuacutemero de doadores de ligaccedilatildeo de H etc
O 1 eacute coeficiente angular da reta ou do
ponto de vista de otimizaccedilatildeo o peso da
variaacutevel x e 0 eacute a constante de
regressatildeo
Reta (em vermelho) obtida por regressatildeo linear para um
conjunto de pontos experimentais (pontos azuis)
O graacutefico foi gerado com o programa Mathematica
(httpdemonstrationswolframcomVisualizingrsquareddInSt
atistics)
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
Natildeo eacute objetivo do presente curso ir a fundo em meacutetodos numeacutericos mas a matemaacutetica
necessaacuteria para entendermos a regressatildeo linear eacute simples por isso vamos ver as
equaccedilotildees usadas no meacutetodo Nas equaccedilotildees abaixo os termos entre lt gt indicam
meacutedia aritmeacutetica Na regressatildeo linear os coeficientes rsquos satildeo dados pelas seguintes
equaccedilotildees
As linhas descritas por regressatildeo linear passam pelo ponto meacutedio onde ltxgt
e ltygt satildeo as meacutedias das variaacuteveis independente e dependente respectivamente
como mostrada nas equaccedilotildees abaixo N eacute o nuacutemero de dados disponiacuteveis (pares xy)
N
ii
N
iii
xx
yyxx
1
2
11
)(
))((
xy 10
)( yx
N
iix
Nx
1
1
N
iiy
Ny
1
1
Quantitative Structure Activity Relationship
wwwpythonorg
01 125 02 15 03 4 04 51 05 63 06 5 07 87 08 9 09 11
1 14 11 1375 12 15 13 18 14 175 15 19 16 17 17 21 18 225 19 26
2 251
X Y
N
iix
Nx
1
1
N
iiy
Ny
1
1
N
ii
N
iii
xx
yyxx
1
2
11
)(
))((
xy 10
Vamos considerar um conjunto de 20 pontos mostrados na tabela abaixo Usaremos
estes dados para calcular a melhor reta a partir das equaccedilotildees da regressatildeo linear O
Excel jaacute tem uma funccedilatildeo de regressatildeo usaremos o exemplo abaixo para explicitar os
termos
Quantitative Structure Activity Relationship
wwwpythonorg
Numa abordagem algoriacutetmica para resoluccedilatildeo do
problema temos como primeiro passo o caacutelculo da
meacutedia com as equaccedilotildees abaixo
Em seguida calculamos 1 com a equaccedilatildeo a seguir
Por uacuteltimo calculamos 0
1051
1
N
iix
Nx
035131
1
N
iiy
Ny
x y x- ltxgt y-ltygt (x-ltxgt)(y-ltygt) (x-ltxgt)^2
01 125 -095 -11785 1119575 09025
02 15 -085 -11535 980475 07225
03 4 -075 -9035 677625 05625
04 51 -065 -7935 515775 04225
05 63 -055 -6735 370425 03025
06 5 -045 -8035 361575 02025
07 87 -035 -4335 151725 01225
08 9 -025 -4035 100875 00625
09 11 -015 -2035 030525 00225
1 14 -005 0965 -004825 00025
11 1375 005 0715 003575 00025
12 15 015 1965 029475 00225
13 18 025 4965 124125 00625
14 175 035 4465 156275 01225
15 19 045 5965 268425 02025
16 17 055 3965 218075 03025
17 21 065 7965 517725 04225
18 225 075 9465 709875 05625
19 26 085 12965 1102025 07225
2 251 095 12065 1146175 09025
105 13035 85795 665
90212
656
79585
)(
))((
1
2
11
N
ii
N
iii
xx
yyxx
05120519021203513
10
xy
Temos a seguinte sequencia de
caacutelculos
1) Meacutedias
2) Caacutelculo do 1
3) Caacutelculo do 0
Quantitative Structure Activity Relationship
wwwpythonorg
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
01 125 02 15 03 4 04 51 05 63 06 5 07 87 08 9 09 11
1 14 11 1375 12 15 13 18 14 175 15 19 16 17 17 21 18 225 19 26
2 251
y = 1x + 0
y =12902x ndash 0512 X Y
No final temos a melhor reta (equaccedilatildeo de regressatildeo) indicada abaixo
Na elaboraccedilatildeo de modelos de QSAR normalmente temos mais de uma
variaacutevel independente o que leva ao uso de regressatildeo linear muacuteltipla
Outro niacutevel de abstraccedilatildeo do modelo de QSAR eacute o uso de variaacuteveis
independentes natildeo lineares Tais meacutetodos de aproximaccedilatildeo estatildeo
disponiacuteveis em pacotes como o Mathematica (wwwwolframcom) Aleacutem
disso podemos implementar os meacutetodos de regressatildeo linear a partir
da linguagem de programaccedilatildeo Python
Quantitative Structure Activity Relationship
wwwpythonorg
Tanto nos modelos de QSAR obtidos por regressatildeo linear como para aqueles obtidos
por regressatildeo linear muacuteltipla ou mesmo natildeo linear temos que acessar a qualidade do
modelo de regressatildeo ou seja a qualidade do ajuste da curva (ou reta) modelada
contra os pontos experimentais (yi) Um dos paracircmetros usados eacute o coeficiente de
correlaccedilatildeo quadrado (R2) Considere que ycalci satildeo valores calculados a partir da
equaccedilatildeo de regressatildeo usando observaccedilotildees experimentais xi Assim temos os
seguintes termos soma total dos quadrados (Total Sum of Squares TSS) soma
dos quadrados ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos
quadrados (Residual Sum of Squares)
Que satildeo usados para o caacutelculo de R2 como segue
N
ii yy
1
2TSS
N
iicalc yy
1
2
ESS
N
iicalci yy
1
2RSS
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
x y x-ltxgt y-ltygt ycalci (y-ycalci)^2 (y-ltygt)^2 (ycalci-lty))^2
01 125 -095 -11785 07782 022259524 138886225 1502291462
02 15 -085 -11535 20684 032307856 133056225 1202663156
03 4 -075 -9035 33586 041139396 81631225 9363271696
04 51 -065 -7935 46488 020358144 62964225 7032835044
05 63 -055 -6735 5939 0130321 45360225 50353216
06 5 -045 -8035 72292 496933264 64561225 3370731364
07 87 -035 -4335 85194 003261636 18792225 2039064336
08 9 -025 -4035 98096 065545216 16281225 1040320516
09 11 -015 -2035 110998 000996004 4141225 374499904
1 14 -005 0965 1239 25921 0931225 0416025
11 1375 005 0715 136802 000487204 0511225 041628304
12 15 015 1965 149704 000087616 3861225 374577316
13 18 025 4965 162606 302551236 24651225 1040449536
14 175 035 4465 175508 000258064 19936225 2039244964
15 19 045 5965 18841 0025281 35581225 33709636
16 17 055 3965 201312 980441344 15721225 5035605444
17 21 065 7965 214214 017757796 63441225 7033170496
18 225 075 9465 227116 004477456 89586225 9363658756
19 26 085 12965 240018 399280324 168091225 1202707022
2 251 095 12065 25292 0036864 145564225 150234049
105 13035 266659868 11335505 1106969667
1133551TSS1
2
N
ii yy 2666599RSS
1
2
N
iicalci yy
976505511133
66599261
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
O coeficiente de correlaccedilatildeo quadrado mede a qualidade do ajuste da funccedilatildeo
teoacuterica (equaccedilatildeo de regressatildeo) aos pontos experimentais Esse iacutendice varia de 0
a 1 O valor zero natildeo indica correlaccedilatildeo entre os dados Para R2 igual a 1 ou proacuteximo
desse temos uma equaccedilatildeo de regressatildeo com boa correlaccedilatildeo como os dados
experimentais A equaccedilatildeo de regressatildeo obtida no exemplo apresentado tem
excelente correlaccedilatildeo R2 = 09765 tal concordacircncia pode ser vista na anaacutelise do
graacutefico onde todos os pontos experimentais estatildeo proacuteximos agrave reta de regressatildeo
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
y = 1x + 0
y =12902x ndash 0512
R2 = 09765
Quantitative Structure Activity Relationship
wwwpythonorg
Eacute oacutebvio que sistemas bioloacutegicos
caracterizados por uma dada atividade
raramente podem ser modelados com
funccedilotildees lineares simples A introduccedilatildeo de
variaacuteveis independentes no modelo de
QSAR leva muitas vezes a um modelo
mais robusto onde caracteriacutesticas
quiacutemicas relevantes (descritores) satildeo
considerados Contudo o princiacutepio da
parcimocircnia deve ser adotado ou seja
nem sempre um modelo com mais
variaacuteveis independentes eacute o mais
adequado para modelar a atividade
bioloacutegica Colocaremos como exemplo o
uso do programa Mathematica para
encontrarmos modelos matemaacuteticos para
conjuntos de dados Depois
implementaremos em Python
Polinocircmio de grau 2 (-0634408x2 + 124534x + 00807008)
usado para aproximar os cinco pontos experimentais
mostrados acima
O graacutefico foi gerado com o programa Mathematica
(httpdemonstrationswolframcomCurveFitting)
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
A ideacuteia baacutesica atraacutes da aproximaccedilatildeo de uma
funccedilatildeo eacute usar uma lista de funccedilotildees
matemaacuteticas especificadas antecipadamente
e tentar encontrar uma combinaccedilatildeo linear
dessas funccedilotildees dadas de forma que essa
combinaccedilatildeo linear de funccedilotildees fique o mais
proacuteximo possiacutevel do conjunto de dados
Vamos ilustrar as ideacuteias principais com
exemplos Vamos considerar um conjunto
formado pelos 19 pontos experimentais
indicados na tabela ao lado
Para colocar essas informaccedilotildees no
Mathematica digitamos
x y
73 348105
74 35381
75 358167
76 406048
77 470132
78 424577
79 431319
80 373182
81 336343
82 280988
83 283107
84 299822
85 272542
86 33407
87 354875
88 381126
89 4157
90 421533
91 395108
data=733481057435381753581677640604877 470132
78 42457779 431319 803731828133634382280988
832831078429982285272542863340787354875883811
268941579042153391395108
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar o graacutefico dos pontos experimentais e conectaacute-los Para isto definimos lp1
e lp2 que no Mathematica fica da seguinte forma
lp1=ListPlot[dataPlotStyle-gtPointSize[003]DisplayFunction-gtIdentity]
lp2=ListPlot[dataPlotJoined-gtTrue DisplayFunction-gtIdentity]
Agora preparamos o graacutefico digitando
Show[lp1lp2 DisplayFunction-gt$DisplayFunction]
O resultado eacute mostrado ao lado
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar curvas que ajustem-se ao conjunto de dados experimentais Podemos
testar vaacuterios cenaacuterios esta eacute uma das vantagens de usarmos um pacote poderoso
como o Mathematica ou ainda uma linguagem de programaccedilatildeo como o Python que
veremos adiante Para gerarmos um ajuste por regressatildeo linear e graficarmos os
resultados usamos os seguintes comandos
Clear[p]
p=Fit[data1xx]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 422346 -00695772 x
Vemos pelo graacutefico que o ajuste eacute
insatisfatoacuterio
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos tentar uma nova curva com um polinocircmio com x e x2 para isto basta
mudarmos a linha de comando Fit (indicado em vermelho) o restante eacute mantido
Clear[p]
p=Fit[data1xx^2x]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 549149 -124887 x+00757266 x2
Vemos pelo graacutefico que o ajuste eacute
Insatisfatoacuterio No proacuteximo slide temos
aproximaccedilotildees para polinocircmios ateacute o grau 5
Quantitative Structure Activity Relationship
wwwpythonorg
Nas figuras a seguir temos ajustes para diversas funccedilotildees polinomiais
y = -136156+508522 x-629506 x2+00258975 x3 y = -198884+959783 x-173196 x2+138539 x3-000414481 x4
y = 282867times106-176099 x+4376 x2-542556 x3+0335627 x4-0000828711 x5
A uacuteltima funccedilatildeo (com termos ateacute a quinta potecircncia)
eacute a que melhor se ajusta aos pontos experimentais
Quantitative Structure Activity Relationship
wwwpythonorg
Aproximaccedilatildeo com polinocircmio de grau 3 Aproximaccedilatildeo com polinocircmio de grau 4
Type CSV file name =gt data2csv
Type polynomial equation degree =gt 5
Best fit polynomial equation
5 4 3 2
-00008287 x + 03356 x - 5426 x + 4376 x - 1761e+05 x + 2829e+0
21
Usaremos o programa qsar1py as linhas
de coacutedigo estatildeo no proacuteximo slide O graacutefico
gerado estaacute na figura ao lado O arquivo de
entrada eacute o data2csv A equaccedilatildeo
polinomial estaacute mostrada abaixo Veja que
o resultado estaacute proacuteximo ao obtido com o
Mathematica para o polinocircmio de grau 5
Programa qsar1py
wwwpythonorg
def main()
Call read_csv()
xymy_deg = read_csv()
Call lsq()
p = lsq(xymy_deg)
Call gen_plot()
gen_plot(xyp)
main() 22
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo main() Inicialmente chamamos a funccedilatildeo read_csv() que
retorna as colunas lidas como array e o grau do polinocircmio a ser aproximado aos
pontos experimentais Em seguida eacute chamada a funccedilatildeo lsq() que determina o
polinocircmio Por uacuteltimo eacute chamada a funccedilatildeo gen_plot() que gera o graacutefico
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
O fluxograma abaixo destaca o uso de uma abordagem computacional para o estudo
de sistemas bioloacutegicos destacado em vermelho Em verde temos a abordagem
experimental Ao final comparamos os resultados para validar a abordagem
computacional
2
Modelagem de Sistemas
Sistema Bioloacutegico
Realiza Simulaccedilotildees
Realiza Experimentos
Resultados
Experimentais Resultados das
Simulaccedilotildees
Compara
Testes dos Modelos
Modelagem
A comparaccedilatildeo eacute necessaacuteria para a validaccedilatildeo da abordagem computacional sem tal
etapa a modelagem fica sem base experimental para o estudo do sistema bioloacutegico a
ser simulado
3
Modelagem de Sistemas
Sistema Bioloacutegico
Realiza Simulaccedilotildees
Realiza Experimentos
Resultados
Experimentais Resultados das
Simulaccedilotildees
Compara
Testes dos Modelos
Modelagem
A abordagem moderna do desenho e
desenvolvimento de faacutermacos eacute resultado
de um processo iterativo Em cada
iteraccedilatildeo (ciclo de desenvolvimento)
espera-se que a atividade farmacoloacutegica
da moleacutecula seja aprimorada de forma
que haja uma evoluccedilatildeo no processo
(otimizaccedilatildeo da atividade farmacoloacutegica)
O diagrama ao lado ilustra o ciclo No
processo iterativo a moleacutecula eacute
desenhada e passa para siacutentese Neste
ponto pode ser necessaacuterio retorno agrave fase
de desenho caso a siacutentese apresente
desafios natildeo previstos na fase de
desenho
Quantitative Structure Activity Relationship
wwwpythonorg
Chegando-se agrave fase de teste a atividade
eacute averiguada e os resultados relacionados
agrave estrutura do faacutermaco em potencial
Neste processo podemos inserir uma fase
de anaacutelise onde elaboramos um modelo
computacional O modelo permite que a
atividade da moleacutecula seja relacionada
com sua estrutura ou seja um estudo da
Relaccedilatildeo Quantitativa-Estrutura-Atividade
(Quantitative Structure-Activity
Relationship QSAR) Neste estudo
descritores moleculares satildeo
relacionados agrave atividade da moleacutecula e
uma anaacutelise estatiacutestica dos descritores
leva a um modelo que pode ser usado
para prever atividade farmacoloacutegica
QSAR
Quantitative Structure Activity Relationship
wwwpythonorg
A abordagem de QSAR foi introduzida
pelo trabalho pioneiro de Corwin Hansch
na deacutecada de 1960 no seu estudo da
atividade bioloacutegica de uma seacuterie de
compostos relacionados estruturalmente
A atividade bioloacutegica pode ser relacionada
com a estrutura molecular a partir de
equaccedilotildees como a descrita abaixo
onde C eacute a concentraccedilatildeo molar de um
composto necessaacuterio para produzir uma
dada atividade bioloacutegica por exemplo
IC50 log P eacute o coeficiente de particcedilatildeo
entre octanol e aacutegua eacute outro descritor
molecular como nuacutemero de doadores de
ligaccedilatildeo de hidrogecircnio da moleacutecula
210 log1
log
P
C Descritores moleculares descrevem propriedade gerais de
uma dada moleacutecula que podem estar relacionadas com a
atividade farmacoloacutegica Por exemplo um logP abaixo de 5
indica que a moleacutecula tem baixa hidrofobicidade
aumentando as chances de disponibilidade oral
Fonte da imagem
httpwwwsciencephotocommedia350656enlarge
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
Hansch C Ruth AS Anderson SM Bentley DL
Parabolic dependence of drug action upon lipophilic
character as revealed by study of hypnotics J Med Chem 11
(1968) 1-11
Vaacuterias metodologias tecircm sido usadas
para elaborar modelos de QSAR sendo
regressatildeo a mais aplicada colocada na
sua forma linear a equaccedilatildeo de regressatildeo
tem o seguinte aspecto y = 0 + 1 x
onde y eacute a variaacutevel dependente (a
propriedade bioloacutegica a ser modelada)
um exemplo de variaacutevel dependente
usada em QSAR eacute log (1IC50) IC50 eacute a
constante inibitoacuteria para que a
atividade bioloacutegica caia 50 O termo x
eacute a variaacutevel independente (descritor
molecular) como exemplos de variaacuteveis
independentes usadas em QSAR temos
o log P nuacutemero de ligaccedilotildees rotaacuteveis
nuacutemero de doadores de ligaccedilatildeo de H etc
O 1 eacute coeficiente angular da reta ou do
ponto de vista de otimizaccedilatildeo o peso da
variaacutevel x e 0 eacute a constante de
regressatildeo
Reta (em vermelho) obtida por regressatildeo linear para um
conjunto de pontos experimentais (pontos azuis)
O graacutefico foi gerado com o programa Mathematica
(httpdemonstrationswolframcomVisualizingrsquareddInSt
atistics)
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
Natildeo eacute objetivo do presente curso ir a fundo em meacutetodos numeacutericos mas a matemaacutetica
necessaacuteria para entendermos a regressatildeo linear eacute simples por isso vamos ver as
equaccedilotildees usadas no meacutetodo Nas equaccedilotildees abaixo os termos entre lt gt indicam
meacutedia aritmeacutetica Na regressatildeo linear os coeficientes rsquos satildeo dados pelas seguintes
equaccedilotildees
As linhas descritas por regressatildeo linear passam pelo ponto meacutedio onde ltxgt
e ltygt satildeo as meacutedias das variaacuteveis independente e dependente respectivamente
como mostrada nas equaccedilotildees abaixo N eacute o nuacutemero de dados disponiacuteveis (pares xy)
N
ii
N
iii
xx
yyxx
1
2
11
)(
))((
xy 10
)( yx
N
iix
Nx
1
1
N
iiy
Ny
1
1
Quantitative Structure Activity Relationship
wwwpythonorg
01 125 02 15 03 4 04 51 05 63 06 5 07 87 08 9 09 11
1 14 11 1375 12 15 13 18 14 175 15 19 16 17 17 21 18 225 19 26
2 251
X Y
N
iix
Nx
1
1
N
iiy
Ny
1
1
N
ii
N
iii
xx
yyxx
1
2
11
)(
))((
xy 10
Vamos considerar um conjunto de 20 pontos mostrados na tabela abaixo Usaremos
estes dados para calcular a melhor reta a partir das equaccedilotildees da regressatildeo linear O
Excel jaacute tem uma funccedilatildeo de regressatildeo usaremos o exemplo abaixo para explicitar os
termos
Quantitative Structure Activity Relationship
wwwpythonorg
Numa abordagem algoriacutetmica para resoluccedilatildeo do
problema temos como primeiro passo o caacutelculo da
meacutedia com as equaccedilotildees abaixo
Em seguida calculamos 1 com a equaccedilatildeo a seguir
Por uacuteltimo calculamos 0
1051
1
N
iix
Nx
035131
1
N
iiy
Ny
x y x- ltxgt y-ltygt (x-ltxgt)(y-ltygt) (x-ltxgt)^2
01 125 -095 -11785 1119575 09025
02 15 -085 -11535 980475 07225
03 4 -075 -9035 677625 05625
04 51 -065 -7935 515775 04225
05 63 -055 -6735 370425 03025
06 5 -045 -8035 361575 02025
07 87 -035 -4335 151725 01225
08 9 -025 -4035 100875 00625
09 11 -015 -2035 030525 00225
1 14 -005 0965 -004825 00025
11 1375 005 0715 003575 00025
12 15 015 1965 029475 00225
13 18 025 4965 124125 00625
14 175 035 4465 156275 01225
15 19 045 5965 268425 02025
16 17 055 3965 218075 03025
17 21 065 7965 517725 04225
18 225 075 9465 709875 05625
19 26 085 12965 1102025 07225
2 251 095 12065 1146175 09025
105 13035 85795 665
90212
656
79585
)(
))((
1
2
11
N
ii
N
iii
xx
yyxx
05120519021203513
10
xy
Temos a seguinte sequencia de
caacutelculos
1) Meacutedias
2) Caacutelculo do 1
3) Caacutelculo do 0
Quantitative Structure Activity Relationship
wwwpythonorg
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
01 125 02 15 03 4 04 51 05 63 06 5 07 87 08 9 09 11
1 14 11 1375 12 15 13 18 14 175 15 19 16 17 17 21 18 225 19 26
2 251
y = 1x + 0
y =12902x ndash 0512 X Y
No final temos a melhor reta (equaccedilatildeo de regressatildeo) indicada abaixo
Na elaboraccedilatildeo de modelos de QSAR normalmente temos mais de uma
variaacutevel independente o que leva ao uso de regressatildeo linear muacuteltipla
Outro niacutevel de abstraccedilatildeo do modelo de QSAR eacute o uso de variaacuteveis
independentes natildeo lineares Tais meacutetodos de aproximaccedilatildeo estatildeo
disponiacuteveis em pacotes como o Mathematica (wwwwolframcom) Aleacutem
disso podemos implementar os meacutetodos de regressatildeo linear a partir
da linguagem de programaccedilatildeo Python
Quantitative Structure Activity Relationship
wwwpythonorg
Tanto nos modelos de QSAR obtidos por regressatildeo linear como para aqueles obtidos
por regressatildeo linear muacuteltipla ou mesmo natildeo linear temos que acessar a qualidade do
modelo de regressatildeo ou seja a qualidade do ajuste da curva (ou reta) modelada
contra os pontos experimentais (yi) Um dos paracircmetros usados eacute o coeficiente de
correlaccedilatildeo quadrado (R2) Considere que ycalci satildeo valores calculados a partir da
equaccedilatildeo de regressatildeo usando observaccedilotildees experimentais xi Assim temos os
seguintes termos soma total dos quadrados (Total Sum of Squares TSS) soma
dos quadrados ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos
quadrados (Residual Sum of Squares)
Que satildeo usados para o caacutelculo de R2 como segue
N
ii yy
1
2TSS
N
iicalc yy
1
2
ESS
N
iicalci yy
1
2RSS
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
x y x-ltxgt y-ltygt ycalci (y-ycalci)^2 (y-ltygt)^2 (ycalci-lty))^2
01 125 -095 -11785 07782 022259524 138886225 1502291462
02 15 -085 -11535 20684 032307856 133056225 1202663156
03 4 -075 -9035 33586 041139396 81631225 9363271696
04 51 -065 -7935 46488 020358144 62964225 7032835044
05 63 -055 -6735 5939 0130321 45360225 50353216
06 5 -045 -8035 72292 496933264 64561225 3370731364
07 87 -035 -4335 85194 003261636 18792225 2039064336
08 9 -025 -4035 98096 065545216 16281225 1040320516
09 11 -015 -2035 110998 000996004 4141225 374499904
1 14 -005 0965 1239 25921 0931225 0416025
11 1375 005 0715 136802 000487204 0511225 041628304
12 15 015 1965 149704 000087616 3861225 374577316
13 18 025 4965 162606 302551236 24651225 1040449536
14 175 035 4465 175508 000258064 19936225 2039244964
15 19 045 5965 18841 0025281 35581225 33709636
16 17 055 3965 201312 980441344 15721225 5035605444
17 21 065 7965 214214 017757796 63441225 7033170496
18 225 075 9465 227116 004477456 89586225 9363658756
19 26 085 12965 240018 399280324 168091225 1202707022
2 251 095 12065 25292 0036864 145564225 150234049
105 13035 266659868 11335505 1106969667
1133551TSS1
2
N
ii yy 2666599RSS
1
2
N
iicalci yy
976505511133
66599261
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
O coeficiente de correlaccedilatildeo quadrado mede a qualidade do ajuste da funccedilatildeo
teoacuterica (equaccedilatildeo de regressatildeo) aos pontos experimentais Esse iacutendice varia de 0
a 1 O valor zero natildeo indica correlaccedilatildeo entre os dados Para R2 igual a 1 ou proacuteximo
desse temos uma equaccedilatildeo de regressatildeo com boa correlaccedilatildeo como os dados
experimentais A equaccedilatildeo de regressatildeo obtida no exemplo apresentado tem
excelente correlaccedilatildeo R2 = 09765 tal concordacircncia pode ser vista na anaacutelise do
graacutefico onde todos os pontos experimentais estatildeo proacuteximos agrave reta de regressatildeo
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
y = 1x + 0
y =12902x ndash 0512
R2 = 09765
Quantitative Structure Activity Relationship
wwwpythonorg
Eacute oacutebvio que sistemas bioloacutegicos
caracterizados por uma dada atividade
raramente podem ser modelados com
funccedilotildees lineares simples A introduccedilatildeo de
variaacuteveis independentes no modelo de
QSAR leva muitas vezes a um modelo
mais robusto onde caracteriacutesticas
quiacutemicas relevantes (descritores) satildeo
considerados Contudo o princiacutepio da
parcimocircnia deve ser adotado ou seja
nem sempre um modelo com mais
variaacuteveis independentes eacute o mais
adequado para modelar a atividade
bioloacutegica Colocaremos como exemplo o
uso do programa Mathematica para
encontrarmos modelos matemaacuteticos para
conjuntos de dados Depois
implementaremos em Python
Polinocircmio de grau 2 (-0634408x2 + 124534x + 00807008)
usado para aproximar os cinco pontos experimentais
mostrados acima
O graacutefico foi gerado com o programa Mathematica
(httpdemonstrationswolframcomCurveFitting)
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
A ideacuteia baacutesica atraacutes da aproximaccedilatildeo de uma
funccedilatildeo eacute usar uma lista de funccedilotildees
matemaacuteticas especificadas antecipadamente
e tentar encontrar uma combinaccedilatildeo linear
dessas funccedilotildees dadas de forma que essa
combinaccedilatildeo linear de funccedilotildees fique o mais
proacuteximo possiacutevel do conjunto de dados
Vamos ilustrar as ideacuteias principais com
exemplos Vamos considerar um conjunto
formado pelos 19 pontos experimentais
indicados na tabela ao lado
Para colocar essas informaccedilotildees no
Mathematica digitamos
x y
73 348105
74 35381
75 358167
76 406048
77 470132
78 424577
79 431319
80 373182
81 336343
82 280988
83 283107
84 299822
85 272542
86 33407
87 354875
88 381126
89 4157
90 421533
91 395108
data=733481057435381753581677640604877 470132
78 42457779 431319 803731828133634382280988
832831078429982285272542863340787354875883811
268941579042153391395108
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar o graacutefico dos pontos experimentais e conectaacute-los Para isto definimos lp1
e lp2 que no Mathematica fica da seguinte forma
lp1=ListPlot[dataPlotStyle-gtPointSize[003]DisplayFunction-gtIdentity]
lp2=ListPlot[dataPlotJoined-gtTrue DisplayFunction-gtIdentity]
Agora preparamos o graacutefico digitando
Show[lp1lp2 DisplayFunction-gt$DisplayFunction]
O resultado eacute mostrado ao lado
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar curvas que ajustem-se ao conjunto de dados experimentais Podemos
testar vaacuterios cenaacuterios esta eacute uma das vantagens de usarmos um pacote poderoso
como o Mathematica ou ainda uma linguagem de programaccedilatildeo como o Python que
veremos adiante Para gerarmos um ajuste por regressatildeo linear e graficarmos os
resultados usamos os seguintes comandos
Clear[p]
p=Fit[data1xx]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 422346 -00695772 x
Vemos pelo graacutefico que o ajuste eacute
insatisfatoacuterio
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos tentar uma nova curva com um polinocircmio com x e x2 para isto basta
mudarmos a linha de comando Fit (indicado em vermelho) o restante eacute mantido
Clear[p]
p=Fit[data1xx^2x]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 549149 -124887 x+00757266 x2
Vemos pelo graacutefico que o ajuste eacute
Insatisfatoacuterio No proacuteximo slide temos
aproximaccedilotildees para polinocircmios ateacute o grau 5
Quantitative Structure Activity Relationship
wwwpythonorg
Nas figuras a seguir temos ajustes para diversas funccedilotildees polinomiais
y = -136156+508522 x-629506 x2+00258975 x3 y = -198884+959783 x-173196 x2+138539 x3-000414481 x4
y = 282867times106-176099 x+4376 x2-542556 x3+0335627 x4-0000828711 x5
A uacuteltima funccedilatildeo (com termos ateacute a quinta potecircncia)
eacute a que melhor se ajusta aos pontos experimentais
Quantitative Structure Activity Relationship
wwwpythonorg
Aproximaccedilatildeo com polinocircmio de grau 3 Aproximaccedilatildeo com polinocircmio de grau 4
Type CSV file name =gt data2csv
Type polynomial equation degree =gt 5
Best fit polynomial equation
5 4 3 2
-00008287 x + 03356 x - 5426 x + 4376 x - 1761e+05 x + 2829e+0
21
Usaremos o programa qsar1py as linhas
de coacutedigo estatildeo no proacuteximo slide O graacutefico
gerado estaacute na figura ao lado O arquivo de
entrada eacute o data2csv A equaccedilatildeo
polinomial estaacute mostrada abaixo Veja que
o resultado estaacute proacuteximo ao obtido com o
Mathematica para o polinocircmio de grau 5
Programa qsar1py
wwwpythonorg
def main()
Call read_csv()
xymy_deg = read_csv()
Call lsq()
p = lsq(xymy_deg)
Call gen_plot()
gen_plot(xyp)
main() 22
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo main() Inicialmente chamamos a funccedilatildeo read_csv() que
retorna as colunas lidas como array e o grau do polinocircmio a ser aproximado aos
pontos experimentais Em seguida eacute chamada a funccedilatildeo lsq() que determina o
polinocircmio Por uacuteltimo eacute chamada a funccedilatildeo gen_plot() que gera o graacutefico
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
A comparaccedilatildeo eacute necessaacuteria para a validaccedilatildeo da abordagem computacional sem tal
etapa a modelagem fica sem base experimental para o estudo do sistema bioloacutegico a
ser simulado
3
Modelagem de Sistemas
Sistema Bioloacutegico
Realiza Simulaccedilotildees
Realiza Experimentos
Resultados
Experimentais Resultados das
Simulaccedilotildees
Compara
Testes dos Modelos
Modelagem
A abordagem moderna do desenho e
desenvolvimento de faacutermacos eacute resultado
de um processo iterativo Em cada
iteraccedilatildeo (ciclo de desenvolvimento)
espera-se que a atividade farmacoloacutegica
da moleacutecula seja aprimorada de forma
que haja uma evoluccedilatildeo no processo
(otimizaccedilatildeo da atividade farmacoloacutegica)
O diagrama ao lado ilustra o ciclo No
processo iterativo a moleacutecula eacute
desenhada e passa para siacutentese Neste
ponto pode ser necessaacuterio retorno agrave fase
de desenho caso a siacutentese apresente
desafios natildeo previstos na fase de
desenho
Quantitative Structure Activity Relationship
wwwpythonorg
Chegando-se agrave fase de teste a atividade
eacute averiguada e os resultados relacionados
agrave estrutura do faacutermaco em potencial
Neste processo podemos inserir uma fase
de anaacutelise onde elaboramos um modelo
computacional O modelo permite que a
atividade da moleacutecula seja relacionada
com sua estrutura ou seja um estudo da
Relaccedilatildeo Quantitativa-Estrutura-Atividade
(Quantitative Structure-Activity
Relationship QSAR) Neste estudo
descritores moleculares satildeo
relacionados agrave atividade da moleacutecula e
uma anaacutelise estatiacutestica dos descritores
leva a um modelo que pode ser usado
para prever atividade farmacoloacutegica
QSAR
Quantitative Structure Activity Relationship
wwwpythonorg
A abordagem de QSAR foi introduzida
pelo trabalho pioneiro de Corwin Hansch
na deacutecada de 1960 no seu estudo da
atividade bioloacutegica de uma seacuterie de
compostos relacionados estruturalmente
A atividade bioloacutegica pode ser relacionada
com a estrutura molecular a partir de
equaccedilotildees como a descrita abaixo
onde C eacute a concentraccedilatildeo molar de um
composto necessaacuterio para produzir uma
dada atividade bioloacutegica por exemplo
IC50 log P eacute o coeficiente de particcedilatildeo
entre octanol e aacutegua eacute outro descritor
molecular como nuacutemero de doadores de
ligaccedilatildeo de hidrogecircnio da moleacutecula
210 log1
log
P
C Descritores moleculares descrevem propriedade gerais de
uma dada moleacutecula que podem estar relacionadas com a
atividade farmacoloacutegica Por exemplo um logP abaixo de 5
indica que a moleacutecula tem baixa hidrofobicidade
aumentando as chances de disponibilidade oral
Fonte da imagem
httpwwwsciencephotocommedia350656enlarge
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
Hansch C Ruth AS Anderson SM Bentley DL
Parabolic dependence of drug action upon lipophilic
character as revealed by study of hypnotics J Med Chem 11
(1968) 1-11
Vaacuterias metodologias tecircm sido usadas
para elaborar modelos de QSAR sendo
regressatildeo a mais aplicada colocada na
sua forma linear a equaccedilatildeo de regressatildeo
tem o seguinte aspecto y = 0 + 1 x
onde y eacute a variaacutevel dependente (a
propriedade bioloacutegica a ser modelada)
um exemplo de variaacutevel dependente
usada em QSAR eacute log (1IC50) IC50 eacute a
constante inibitoacuteria para que a
atividade bioloacutegica caia 50 O termo x
eacute a variaacutevel independente (descritor
molecular) como exemplos de variaacuteveis
independentes usadas em QSAR temos
o log P nuacutemero de ligaccedilotildees rotaacuteveis
nuacutemero de doadores de ligaccedilatildeo de H etc
O 1 eacute coeficiente angular da reta ou do
ponto de vista de otimizaccedilatildeo o peso da
variaacutevel x e 0 eacute a constante de
regressatildeo
Reta (em vermelho) obtida por regressatildeo linear para um
conjunto de pontos experimentais (pontos azuis)
O graacutefico foi gerado com o programa Mathematica
(httpdemonstrationswolframcomVisualizingrsquareddInSt
atistics)
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
Natildeo eacute objetivo do presente curso ir a fundo em meacutetodos numeacutericos mas a matemaacutetica
necessaacuteria para entendermos a regressatildeo linear eacute simples por isso vamos ver as
equaccedilotildees usadas no meacutetodo Nas equaccedilotildees abaixo os termos entre lt gt indicam
meacutedia aritmeacutetica Na regressatildeo linear os coeficientes rsquos satildeo dados pelas seguintes
equaccedilotildees
As linhas descritas por regressatildeo linear passam pelo ponto meacutedio onde ltxgt
e ltygt satildeo as meacutedias das variaacuteveis independente e dependente respectivamente
como mostrada nas equaccedilotildees abaixo N eacute o nuacutemero de dados disponiacuteveis (pares xy)
N
ii
N
iii
xx
yyxx
1
2
11
)(
))((
xy 10
)( yx
N
iix
Nx
1
1
N
iiy
Ny
1
1
Quantitative Structure Activity Relationship
wwwpythonorg
01 125 02 15 03 4 04 51 05 63 06 5 07 87 08 9 09 11
1 14 11 1375 12 15 13 18 14 175 15 19 16 17 17 21 18 225 19 26
2 251
X Y
N
iix
Nx
1
1
N
iiy
Ny
1
1
N
ii
N
iii
xx
yyxx
1
2
11
)(
))((
xy 10
Vamos considerar um conjunto de 20 pontos mostrados na tabela abaixo Usaremos
estes dados para calcular a melhor reta a partir das equaccedilotildees da regressatildeo linear O
Excel jaacute tem uma funccedilatildeo de regressatildeo usaremos o exemplo abaixo para explicitar os
termos
Quantitative Structure Activity Relationship
wwwpythonorg
Numa abordagem algoriacutetmica para resoluccedilatildeo do
problema temos como primeiro passo o caacutelculo da
meacutedia com as equaccedilotildees abaixo
Em seguida calculamos 1 com a equaccedilatildeo a seguir
Por uacuteltimo calculamos 0
1051
1
N
iix
Nx
035131
1
N
iiy
Ny
x y x- ltxgt y-ltygt (x-ltxgt)(y-ltygt) (x-ltxgt)^2
01 125 -095 -11785 1119575 09025
02 15 -085 -11535 980475 07225
03 4 -075 -9035 677625 05625
04 51 -065 -7935 515775 04225
05 63 -055 -6735 370425 03025
06 5 -045 -8035 361575 02025
07 87 -035 -4335 151725 01225
08 9 -025 -4035 100875 00625
09 11 -015 -2035 030525 00225
1 14 -005 0965 -004825 00025
11 1375 005 0715 003575 00025
12 15 015 1965 029475 00225
13 18 025 4965 124125 00625
14 175 035 4465 156275 01225
15 19 045 5965 268425 02025
16 17 055 3965 218075 03025
17 21 065 7965 517725 04225
18 225 075 9465 709875 05625
19 26 085 12965 1102025 07225
2 251 095 12065 1146175 09025
105 13035 85795 665
90212
656
79585
)(
))((
1
2
11
N
ii
N
iii
xx
yyxx
05120519021203513
10
xy
Temos a seguinte sequencia de
caacutelculos
1) Meacutedias
2) Caacutelculo do 1
3) Caacutelculo do 0
Quantitative Structure Activity Relationship
wwwpythonorg
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
01 125 02 15 03 4 04 51 05 63 06 5 07 87 08 9 09 11
1 14 11 1375 12 15 13 18 14 175 15 19 16 17 17 21 18 225 19 26
2 251
y = 1x + 0
y =12902x ndash 0512 X Y
No final temos a melhor reta (equaccedilatildeo de regressatildeo) indicada abaixo
Na elaboraccedilatildeo de modelos de QSAR normalmente temos mais de uma
variaacutevel independente o que leva ao uso de regressatildeo linear muacuteltipla
Outro niacutevel de abstraccedilatildeo do modelo de QSAR eacute o uso de variaacuteveis
independentes natildeo lineares Tais meacutetodos de aproximaccedilatildeo estatildeo
disponiacuteveis em pacotes como o Mathematica (wwwwolframcom) Aleacutem
disso podemos implementar os meacutetodos de regressatildeo linear a partir
da linguagem de programaccedilatildeo Python
Quantitative Structure Activity Relationship
wwwpythonorg
Tanto nos modelos de QSAR obtidos por regressatildeo linear como para aqueles obtidos
por regressatildeo linear muacuteltipla ou mesmo natildeo linear temos que acessar a qualidade do
modelo de regressatildeo ou seja a qualidade do ajuste da curva (ou reta) modelada
contra os pontos experimentais (yi) Um dos paracircmetros usados eacute o coeficiente de
correlaccedilatildeo quadrado (R2) Considere que ycalci satildeo valores calculados a partir da
equaccedilatildeo de regressatildeo usando observaccedilotildees experimentais xi Assim temos os
seguintes termos soma total dos quadrados (Total Sum of Squares TSS) soma
dos quadrados ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos
quadrados (Residual Sum of Squares)
Que satildeo usados para o caacutelculo de R2 como segue
N
ii yy
1
2TSS
N
iicalc yy
1
2
ESS
N
iicalci yy
1
2RSS
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
x y x-ltxgt y-ltygt ycalci (y-ycalci)^2 (y-ltygt)^2 (ycalci-lty))^2
01 125 -095 -11785 07782 022259524 138886225 1502291462
02 15 -085 -11535 20684 032307856 133056225 1202663156
03 4 -075 -9035 33586 041139396 81631225 9363271696
04 51 -065 -7935 46488 020358144 62964225 7032835044
05 63 -055 -6735 5939 0130321 45360225 50353216
06 5 -045 -8035 72292 496933264 64561225 3370731364
07 87 -035 -4335 85194 003261636 18792225 2039064336
08 9 -025 -4035 98096 065545216 16281225 1040320516
09 11 -015 -2035 110998 000996004 4141225 374499904
1 14 -005 0965 1239 25921 0931225 0416025
11 1375 005 0715 136802 000487204 0511225 041628304
12 15 015 1965 149704 000087616 3861225 374577316
13 18 025 4965 162606 302551236 24651225 1040449536
14 175 035 4465 175508 000258064 19936225 2039244964
15 19 045 5965 18841 0025281 35581225 33709636
16 17 055 3965 201312 980441344 15721225 5035605444
17 21 065 7965 214214 017757796 63441225 7033170496
18 225 075 9465 227116 004477456 89586225 9363658756
19 26 085 12965 240018 399280324 168091225 1202707022
2 251 095 12065 25292 0036864 145564225 150234049
105 13035 266659868 11335505 1106969667
1133551TSS1
2
N
ii yy 2666599RSS
1
2
N
iicalci yy
976505511133
66599261
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
O coeficiente de correlaccedilatildeo quadrado mede a qualidade do ajuste da funccedilatildeo
teoacuterica (equaccedilatildeo de regressatildeo) aos pontos experimentais Esse iacutendice varia de 0
a 1 O valor zero natildeo indica correlaccedilatildeo entre os dados Para R2 igual a 1 ou proacuteximo
desse temos uma equaccedilatildeo de regressatildeo com boa correlaccedilatildeo como os dados
experimentais A equaccedilatildeo de regressatildeo obtida no exemplo apresentado tem
excelente correlaccedilatildeo R2 = 09765 tal concordacircncia pode ser vista na anaacutelise do
graacutefico onde todos os pontos experimentais estatildeo proacuteximos agrave reta de regressatildeo
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
y = 1x + 0
y =12902x ndash 0512
R2 = 09765
Quantitative Structure Activity Relationship
wwwpythonorg
Eacute oacutebvio que sistemas bioloacutegicos
caracterizados por uma dada atividade
raramente podem ser modelados com
funccedilotildees lineares simples A introduccedilatildeo de
variaacuteveis independentes no modelo de
QSAR leva muitas vezes a um modelo
mais robusto onde caracteriacutesticas
quiacutemicas relevantes (descritores) satildeo
considerados Contudo o princiacutepio da
parcimocircnia deve ser adotado ou seja
nem sempre um modelo com mais
variaacuteveis independentes eacute o mais
adequado para modelar a atividade
bioloacutegica Colocaremos como exemplo o
uso do programa Mathematica para
encontrarmos modelos matemaacuteticos para
conjuntos de dados Depois
implementaremos em Python
Polinocircmio de grau 2 (-0634408x2 + 124534x + 00807008)
usado para aproximar os cinco pontos experimentais
mostrados acima
O graacutefico foi gerado com o programa Mathematica
(httpdemonstrationswolframcomCurveFitting)
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
A ideacuteia baacutesica atraacutes da aproximaccedilatildeo de uma
funccedilatildeo eacute usar uma lista de funccedilotildees
matemaacuteticas especificadas antecipadamente
e tentar encontrar uma combinaccedilatildeo linear
dessas funccedilotildees dadas de forma que essa
combinaccedilatildeo linear de funccedilotildees fique o mais
proacuteximo possiacutevel do conjunto de dados
Vamos ilustrar as ideacuteias principais com
exemplos Vamos considerar um conjunto
formado pelos 19 pontos experimentais
indicados na tabela ao lado
Para colocar essas informaccedilotildees no
Mathematica digitamos
x y
73 348105
74 35381
75 358167
76 406048
77 470132
78 424577
79 431319
80 373182
81 336343
82 280988
83 283107
84 299822
85 272542
86 33407
87 354875
88 381126
89 4157
90 421533
91 395108
data=733481057435381753581677640604877 470132
78 42457779 431319 803731828133634382280988
832831078429982285272542863340787354875883811
268941579042153391395108
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar o graacutefico dos pontos experimentais e conectaacute-los Para isto definimos lp1
e lp2 que no Mathematica fica da seguinte forma
lp1=ListPlot[dataPlotStyle-gtPointSize[003]DisplayFunction-gtIdentity]
lp2=ListPlot[dataPlotJoined-gtTrue DisplayFunction-gtIdentity]
Agora preparamos o graacutefico digitando
Show[lp1lp2 DisplayFunction-gt$DisplayFunction]
O resultado eacute mostrado ao lado
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar curvas que ajustem-se ao conjunto de dados experimentais Podemos
testar vaacuterios cenaacuterios esta eacute uma das vantagens de usarmos um pacote poderoso
como o Mathematica ou ainda uma linguagem de programaccedilatildeo como o Python que
veremos adiante Para gerarmos um ajuste por regressatildeo linear e graficarmos os
resultados usamos os seguintes comandos
Clear[p]
p=Fit[data1xx]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 422346 -00695772 x
Vemos pelo graacutefico que o ajuste eacute
insatisfatoacuterio
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos tentar uma nova curva com um polinocircmio com x e x2 para isto basta
mudarmos a linha de comando Fit (indicado em vermelho) o restante eacute mantido
Clear[p]
p=Fit[data1xx^2x]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 549149 -124887 x+00757266 x2
Vemos pelo graacutefico que o ajuste eacute
Insatisfatoacuterio No proacuteximo slide temos
aproximaccedilotildees para polinocircmios ateacute o grau 5
Quantitative Structure Activity Relationship
wwwpythonorg
Nas figuras a seguir temos ajustes para diversas funccedilotildees polinomiais
y = -136156+508522 x-629506 x2+00258975 x3 y = -198884+959783 x-173196 x2+138539 x3-000414481 x4
y = 282867times106-176099 x+4376 x2-542556 x3+0335627 x4-0000828711 x5
A uacuteltima funccedilatildeo (com termos ateacute a quinta potecircncia)
eacute a que melhor se ajusta aos pontos experimentais
Quantitative Structure Activity Relationship
wwwpythonorg
Aproximaccedilatildeo com polinocircmio de grau 3 Aproximaccedilatildeo com polinocircmio de grau 4
Type CSV file name =gt data2csv
Type polynomial equation degree =gt 5
Best fit polynomial equation
5 4 3 2
-00008287 x + 03356 x - 5426 x + 4376 x - 1761e+05 x + 2829e+0
21
Usaremos o programa qsar1py as linhas
de coacutedigo estatildeo no proacuteximo slide O graacutefico
gerado estaacute na figura ao lado O arquivo de
entrada eacute o data2csv A equaccedilatildeo
polinomial estaacute mostrada abaixo Veja que
o resultado estaacute proacuteximo ao obtido com o
Mathematica para o polinocircmio de grau 5
Programa qsar1py
wwwpythonorg
def main()
Call read_csv()
xymy_deg = read_csv()
Call lsq()
p = lsq(xymy_deg)
Call gen_plot()
gen_plot(xyp)
main() 22
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo main() Inicialmente chamamos a funccedilatildeo read_csv() que
retorna as colunas lidas como array e o grau do polinocircmio a ser aproximado aos
pontos experimentais Em seguida eacute chamada a funccedilatildeo lsq() que determina o
polinocircmio Por uacuteltimo eacute chamada a funccedilatildeo gen_plot() que gera o graacutefico
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
A abordagem moderna do desenho e
desenvolvimento de faacutermacos eacute resultado
de um processo iterativo Em cada
iteraccedilatildeo (ciclo de desenvolvimento)
espera-se que a atividade farmacoloacutegica
da moleacutecula seja aprimorada de forma
que haja uma evoluccedilatildeo no processo
(otimizaccedilatildeo da atividade farmacoloacutegica)
O diagrama ao lado ilustra o ciclo No
processo iterativo a moleacutecula eacute
desenhada e passa para siacutentese Neste
ponto pode ser necessaacuterio retorno agrave fase
de desenho caso a siacutentese apresente
desafios natildeo previstos na fase de
desenho
Quantitative Structure Activity Relationship
wwwpythonorg
Chegando-se agrave fase de teste a atividade
eacute averiguada e os resultados relacionados
agrave estrutura do faacutermaco em potencial
Neste processo podemos inserir uma fase
de anaacutelise onde elaboramos um modelo
computacional O modelo permite que a
atividade da moleacutecula seja relacionada
com sua estrutura ou seja um estudo da
Relaccedilatildeo Quantitativa-Estrutura-Atividade
(Quantitative Structure-Activity
Relationship QSAR) Neste estudo
descritores moleculares satildeo
relacionados agrave atividade da moleacutecula e
uma anaacutelise estatiacutestica dos descritores
leva a um modelo que pode ser usado
para prever atividade farmacoloacutegica
QSAR
Quantitative Structure Activity Relationship
wwwpythonorg
A abordagem de QSAR foi introduzida
pelo trabalho pioneiro de Corwin Hansch
na deacutecada de 1960 no seu estudo da
atividade bioloacutegica de uma seacuterie de
compostos relacionados estruturalmente
A atividade bioloacutegica pode ser relacionada
com a estrutura molecular a partir de
equaccedilotildees como a descrita abaixo
onde C eacute a concentraccedilatildeo molar de um
composto necessaacuterio para produzir uma
dada atividade bioloacutegica por exemplo
IC50 log P eacute o coeficiente de particcedilatildeo
entre octanol e aacutegua eacute outro descritor
molecular como nuacutemero de doadores de
ligaccedilatildeo de hidrogecircnio da moleacutecula
210 log1
log
P
C Descritores moleculares descrevem propriedade gerais de
uma dada moleacutecula que podem estar relacionadas com a
atividade farmacoloacutegica Por exemplo um logP abaixo de 5
indica que a moleacutecula tem baixa hidrofobicidade
aumentando as chances de disponibilidade oral
Fonte da imagem
httpwwwsciencephotocommedia350656enlarge
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
Hansch C Ruth AS Anderson SM Bentley DL
Parabolic dependence of drug action upon lipophilic
character as revealed by study of hypnotics J Med Chem 11
(1968) 1-11
Vaacuterias metodologias tecircm sido usadas
para elaborar modelos de QSAR sendo
regressatildeo a mais aplicada colocada na
sua forma linear a equaccedilatildeo de regressatildeo
tem o seguinte aspecto y = 0 + 1 x
onde y eacute a variaacutevel dependente (a
propriedade bioloacutegica a ser modelada)
um exemplo de variaacutevel dependente
usada em QSAR eacute log (1IC50) IC50 eacute a
constante inibitoacuteria para que a
atividade bioloacutegica caia 50 O termo x
eacute a variaacutevel independente (descritor
molecular) como exemplos de variaacuteveis
independentes usadas em QSAR temos
o log P nuacutemero de ligaccedilotildees rotaacuteveis
nuacutemero de doadores de ligaccedilatildeo de H etc
O 1 eacute coeficiente angular da reta ou do
ponto de vista de otimizaccedilatildeo o peso da
variaacutevel x e 0 eacute a constante de
regressatildeo
Reta (em vermelho) obtida por regressatildeo linear para um
conjunto de pontos experimentais (pontos azuis)
O graacutefico foi gerado com o programa Mathematica
(httpdemonstrationswolframcomVisualizingrsquareddInSt
atistics)
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
Natildeo eacute objetivo do presente curso ir a fundo em meacutetodos numeacutericos mas a matemaacutetica
necessaacuteria para entendermos a regressatildeo linear eacute simples por isso vamos ver as
equaccedilotildees usadas no meacutetodo Nas equaccedilotildees abaixo os termos entre lt gt indicam
meacutedia aritmeacutetica Na regressatildeo linear os coeficientes rsquos satildeo dados pelas seguintes
equaccedilotildees
As linhas descritas por regressatildeo linear passam pelo ponto meacutedio onde ltxgt
e ltygt satildeo as meacutedias das variaacuteveis independente e dependente respectivamente
como mostrada nas equaccedilotildees abaixo N eacute o nuacutemero de dados disponiacuteveis (pares xy)
N
ii
N
iii
xx
yyxx
1
2
11
)(
))((
xy 10
)( yx
N
iix
Nx
1
1
N
iiy
Ny
1
1
Quantitative Structure Activity Relationship
wwwpythonorg
01 125 02 15 03 4 04 51 05 63 06 5 07 87 08 9 09 11
1 14 11 1375 12 15 13 18 14 175 15 19 16 17 17 21 18 225 19 26
2 251
X Y
N
iix
Nx
1
1
N
iiy
Ny
1
1
N
ii
N
iii
xx
yyxx
1
2
11
)(
))((
xy 10
Vamos considerar um conjunto de 20 pontos mostrados na tabela abaixo Usaremos
estes dados para calcular a melhor reta a partir das equaccedilotildees da regressatildeo linear O
Excel jaacute tem uma funccedilatildeo de regressatildeo usaremos o exemplo abaixo para explicitar os
termos
Quantitative Structure Activity Relationship
wwwpythonorg
Numa abordagem algoriacutetmica para resoluccedilatildeo do
problema temos como primeiro passo o caacutelculo da
meacutedia com as equaccedilotildees abaixo
Em seguida calculamos 1 com a equaccedilatildeo a seguir
Por uacuteltimo calculamos 0
1051
1
N
iix
Nx
035131
1
N
iiy
Ny
x y x- ltxgt y-ltygt (x-ltxgt)(y-ltygt) (x-ltxgt)^2
01 125 -095 -11785 1119575 09025
02 15 -085 -11535 980475 07225
03 4 -075 -9035 677625 05625
04 51 -065 -7935 515775 04225
05 63 -055 -6735 370425 03025
06 5 -045 -8035 361575 02025
07 87 -035 -4335 151725 01225
08 9 -025 -4035 100875 00625
09 11 -015 -2035 030525 00225
1 14 -005 0965 -004825 00025
11 1375 005 0715 003575 00025
12 15 015 1965 029475 00225
13 18 025 4965 124125 00625
14 175 035 4465 156275 01225
15 19 045 5965 268425 02025
16 17 055 3965 218075 03025
17 21 065 7965 517725 04225
18 225 075 9465 709875 05625
19 26 085 12965 1102025 07225
2 251 095 12065 1146175 09025
105 13035 85795 665
90212
656
79585
)(
))((
1
2
11
N
ii
N
iii
xx
yyxx
05120519021203513
10
xy
Temos a seguinte sequencia de
caacutelculos
1) Meacutedias
2) Caacutelculo do 1
3) Caacutelculo do 0
Quantitative Structure Activity Relationship
wwwpythonorg
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
01 125 02 15 03 4 04 51 05 63 06 5 07 87 08 9 09 11
1 14 11 1375 12 15 13 18 14 175 15 19 16 17 17 21 18 225 19 26
2 251
y = 1x + 0
y =12902x ndash 0512 X Y
No final temos a melhor reta (equaccedilatildeo de regressatildeo) indicada abaixo
Na elaboraccedilatildeo de modelos de QSAR normalmente temos mais de uma
variaacutevel independente o que leva ao uso de regressatildeo linear muacuteltipla
Outro niacutevel de abstraccedilatildeo do modelo de QSAR eacute o uso de variaacuteveis
independentes natildeo lineares Tais meacutetodos de aproximaccedilatildeo estatildeo
disponiacuteveis em pacotes como o Mathematica (wwwwolframcom) Aleacutem
disso podemos implementar os meacutetodos de regressatildeo linear a partir
da linguagem de programaccedilatildeo Python
Quantitative Structure Activity Relationship
wwwpythonorg
Tanto nos modelos de QSAR obtidos por regressatildeo linear como para aqueles obtidos
por regressatildeo linear muacuteltipla ou mesmo natildeo linear temos que acessar a qualidade do
modelo de regressatildeo ou seja a qualidade do ajuste da curva (ou reta) modelada
contra os pontos experimentais (yi) Um dos paracircmetros usados eacute o coeficiente de
correlaccedilatildeo quadrado (R2) Considere que ycalci satildeo valores calculados a partir da
equaccedilatildeo de regressatildeo usando observaccedilotildees experimentais xi Assim temos os
seguintes termos soma total dos quadrados (Total Sum of Squares TSS) soma
dos quadrados ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos
quadrados (Residual Sum of Squares)
Que satildeo usados para o caacutelculo de R2 como segue
N
ii yy
1
2TSS
N
iicalc yy
1
2
ESS
N
iicalci yy
1
2RSS
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
x y x-ltxgt y-ltygt ycalci (y-ycalci)^2 (y-ltygt)^2 (ycalci-lty))^2
01 125 -095 -11785 07782 022259524 138886225 1502291462
02 15 -085 -11535 20684 032307856 133056225 1202663156
03 4 -075 -9035 33586 041139396 81631225 9363271696
04 51 -065 -7935 46488 020358144 62964225 7032835044
05 63 -055 -6735 5939 0130321 45360225 50353216
06 5 -045 -8035 72292 496933264 64561225 3370731364
07 87 -035 -4335 85194 003261636 18792225 2039064336
08 9 -025 -4035 98096 065545216 16281225 1040320516
09 11 -015 -2035 110998 000996004 4141225 374499904
1 14 -005 0965 1239 25921 0931225 0416025
11 1375 005 0715 136802 000487204 0511225 041628304
12 15 015 1965 149704 000087616 3861225 374577316
13 18 025 4965 162606 302551236 24651225 1040449536
14 175 035 4465 175508 000258064 19936225 2039244964
15 19 045 5965 18841 0025281 35581225 33709636
16 17 055 3965 201312 980441344 15721225 5035605444
17 21 065 7965 214214 017757796 63441225 7033170496
18 225 075 9465 227116 004477456 89586225 9363658756
19 26 085 12965 240018 399280324 168091225 1202707022
2 251 095 12065 25292 0036864 145564225 150234049
105 13035 266659868 11335505 1106969667
1133551TSS1
2
N
ii yy 2666599RSS
1
2
N
iicalci yy
976505511133
66599261
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
O coeficiente de correlaccedilatildeo quadrado mede a qualidade do ajuste da funccedilatildeo
teoacuterica (equaccedilatildeo de regressatildeo) aos pontos experimentais Esse iacutendice varia de 0
a 1 O valor zero natildeo indica correlaccedilatildeo entre os dados Para R2 igual a 1 ou proacuteximo
desse temos uma equaccedilatildeo de regressatildeo com boa correlaccedilatildeo como os dados
experimentais A equaccedilatildeo de regressatildeo obtida no exemplo apresentado tem
excelente correlaccedilatildeo R2 = 09765 tal concordacircncia pode ser vista na anaacutelise do
graacutefico onde todos os pontos experimentais estatildeo proacuteximos agrave reta de regressatildeo
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
y = 1x + 0
y =12902x ndash 0512
R2 = 09765
Quantitative Structure Activity Relationship
wwwpythonorg
Eacute oacutebvio que sistemas bioloacutegicos
caracterizados por uma dada atividade
raramente podem ser modelados com
funccedilotildees lineares simples A introduccedilatildeo de
variaacuteveis independentes no modelo de
QSAR leva muitas vezes a um modelo
mais robusto onde caracteriacutesticas
quiacutemicas relevantes (descritores) satildeo
considerados Contudo o princiacutepio da
parcimocircnia deve ser adotado ou seja
nem sempre um modelo com mais
variaacuteveis independentes eacute o mais
adequado para modelar a atividade
bioloacutegica Colocaremos como exemplo o
uso do programa Mathematica para
encontrarmos modelos matemaacuteticos para
conjuntos de dados Depois
implementaremos em Python
Polinocircmio de grau 2 (-0634408x2 + 124534x + 00807008)
usado para aproximar os cinco pontos experimentais
mostrados acima
O graacutefico foi gerado com o programa Mathematica
(httpdemonstrationswolframcomCurveFitting)
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
A ideacuteia baacutesica atraacutes da aproximaccedilatildeo de uma
funccedilatildeo eacute usar uma lista de funccedilotildees
matemaacuteticas especificadas antecipadamente
e tentar encontrar uma combinaccedilatildeo linear
dessas funccedilotildees dadas de forma que essa
combinaccedilatildeo linear de funccedilotildees fique o mais
proacuteximo possiacutevel do conjunto de dados
Vamos ilustrar as ideacuteias principais com
exemplos Vamos considerar um conjunto
formado pelos 19 pontos experimentais
indicados na tabela ao lado
Para colocar essas informaccedilotildees no
Mathematica digitamos
x y
73 348105
74 35381
75 358167
76 406048
77 470132
78 424577
79 431319
80 373182
81 336343
82 280988
83 283107
84 299822
85 272542
86 33407
87 354875
88 381126
89 4157
90 421533
91 395108
data=733481057435381753581677640604877 470132
78 42457779 431319 803731828133634382280988
832831078429982285272542863340787354875883811
268941579042153391395108
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar o graacutefico dos pontos experimentais e conectaacute-los Para isto definimos lp1
e lp2 que no Mathematica fica da seguinte forma
lp1=ListPlot[dataPlotStyle-gtPointSize[003]DisplayFunction-gtIdentity]
lp2=ListPlot[dataPlotJoined-gtTrue DisplayFunction-gtIdentity]
Agora preparamos o graacutefico digitando
Show[lp1lp2 DisplayFunction-gt$DisplayFunction]
O resultado eacute mostrado ao lado
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar curvas que ajustem-se ao conjunto de dados experimentais Podemos
testar vaacuterios cenaacuterios esta eacute uma das vantagens de usarmos um pacote poderoso
como o Mathematica ou ainda uma linguagem de programaccedilatildeo como o Python que
veremos adiante Para gerarmos um ajuste por regressatildeo linear e graficarmos os
resultados usamos os seguintes comandos
Clear[p]
p=Fit[data1xx]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 422346 -00695772 x
Vemos pelo graacutefico que o ajuste eacute
insatisfatoacuterio
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos tentar uma nova curva com um polinocircmio com x e x2 para isto basta
mudarmos a linha de comando Fit (indicado em vermelho) o restante eacute mantido
Clear[p]
p=Fit[data1xx^2x]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 549149 -124887 x+00757266 x2
Vemos pelo graacutefico que o ajuste eacute
Insatisfatoacuterio No proacuteximo slide temos
aproximaccedilotildees para polinocircmios ateacute o grau 5
Quantitative Structure Activity Relationship
wwwpythonorg
Nas figuras a seguir temos ajustes para diversas funccedilotildees polinomiais
y = -136156+508522 x-629506 x2+00258975 x3 y = -198884+959783 x-173196 x2+138539 x3-000414481 x4
y = 282867times106-176099 x+4376 x2-542556 x3+0335627 x4-0000828711 x5
A uacuteltima funccedilatildeo (com termos ateacute a quinta potecircncia)
eacute a que melhor se ajusta aos pontos experimentais
Quantitative Structure Activity Relationship
wwwpythonorg
Aproximaccedilatildeo com polinocircmio de grau 3 Aproximaccedilatildeo com polinocircmio de grau 4
Type CSV file name =gt data2csv
Type polynomial equation degree =gt 5
Best fit polynomial equation
5 4 3 2
-00008287 x + 03356 x - 5426 x + 4376 x - 1761e+05 x + 2829e+0
21
Usaremos o programa qsar1py as linhas
de coacutedigo estatildeo no proacuteximo slide O graacutefico
gerado estaacute na figura ao lado O arquivo de
entrada eacute o data2csv A equaccedilatildeo
polinomial estaacute mostrada abaixo Veja que
o resultado estaacute proacuteximo ao obtido com o
Mathematica para o polinocircmio de grau 5
Programa qsar1py
wwwpythonorg
def main()
Call read_csv()
xymy_deg = read_csv()
Call lsq()
p = lsq(xymy_deg)
Call gen_plot()
gen_plot(xyp)
main() 22
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo main() Inicialmente chamamos a funccedilatildeo read_csv() que
retorna as colunas lidas como array e o grau do polinocircmio a ser aproximado aos
pontos experimentais Em seguida eacute chamada a funccedilatildeo lsq() que determina o
polinocircmio Por uacuteltimo eacute chamada a funccedilatildeo gen_plot() que gera o graacutefico
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Chegando-se agrave fase de teste a atividade
eacute averiguada e os resultados relacionados
agrave estrutura do faacutermaco em potencial
Neste processo podemos inserir uma fase
de anaacutelise onde elaboramos um modelo
computacional O modelo permite que a
atividade da moleacutecula seja relacionada
com sua estrutura ou seja um estudo da
Relaccedilatildeo Quantitativa-Estrutura-Atividade
(Quantitative Structure-Activity
Relationship QSAR) Neste estudo
descritores moleculares satildeo
relacionados agrave atividade da moleacutecula e
uma anaacutelise estatiacutestica dos descritores
leva a um modelo que pode ser usado
para prever atividade farmacoloacutegica
QSAR
Quantitative Structure Activity Relationship
wwwpythonorg
A abordagem de QSAR foi introduzida
pelo trabalho pioneiro de Corwin Hansch
na deacutecada de 1960 no seu estudo da
atividade bioloacutegica de uma seacuterie de
compostos relacionados estruturalmente
A atividade bioloacutegica pode ser relacionada
com a estrutura molecular a partir de
equaccedilotildees como a descrita abaixo
onde C eacute a concentraccedilatildeo molar de um
composto necessaacuterio para produzir uma
dada atividade bioloacutegica por exemplo
IC50 log P eacute o coeficiente de particcedilatildeo
entre octanol e aacutegua eacute outro descritor
molecular como nuacutemero de doadores de
ligaccedilatildeo de hidrogecircnio da moleacutecula
210 log1
log
P
C Descritores moleculares descrevem propriedade gerais de
uma dada moleacutecula que podem estar relacionadas com a
atividade farmacoloacutegica Por exemplo um logP abaixo de 5
indica que a moleacutecula tem baixa hidrofobicidade
aumentando as chances de disponibilidade oral
Fonte da imagem
httpwwwsciencephotocommedia350656enlarge
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
Hansch C Ruth AS Anderson SM Bentley DL
Parabolic dependence of drug action upon lipophilic
character as revealed by study of hypnotics J Med Chem 11
(1968) 1-11
Vaacuterias metodologias tecircm sido usadas
para elaborar modelos de QSAR sendo
regressatildeo a mais aplicada colocada na
sua forma linear a equaccedilatildeo de regressatildeo
tem o seguinte aspecto y = 0 + 1 x
onde y eacute a variaacutevel dependente (a
propriedade bioloacutegica a ser modelada)
um exemplo de variaacutevel dependente
usada em QSAR eacute log (1IC50) IC50 eacute a
constante inibitoacuteria para que a
atividade bioloacutegica caia 50 O termo x
eacute a variaacutevel independente (descritor
molecular) como exemplos de variaacuteveis
independentes usadas em QSAR temos
o log P nuacutemero de ligaccedilotildees rotaacuteveis
nuacutemero de doadores de ligaccedilatildeo de H etc
O 1 eacute coeficiente angular da reta ou do
ponto de vista de otimizaccedilatildeo o peso da
variaacutevel x e 0 eacute a constante de
regressatildeo
Reta (em vermelho) obtida por regressatildeo linear para um
conjunto de pontos experimentais (pontos azuis)
O graacutefico foi gerado com o programa Mathematica
(httpdemonstrationswolframcomVisualizingrsquareddInSt
atistics)
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
Natildeo eacute objetivo do presente curso ir a fundo em meacutetodos numeacutericos mas a matemaacutetica
necessaacuteria para entendermos a regressatildeo linear eacute simples por isso vamos ver as
equaccedilotildees usadas no meacutetodo Nas equaccedilotildees abaixo os termos entre lt gt indicam
meacutedia aritmeacutetica Na regressatildeo linear os coeficientes rsquos satildeo dados pelas seguintes
equaccedilotildees
As linhas descritas por regressatildeo linear passam pelo ponto meacutedio onde ltxgt
e ltygt satildeo as meacutedias das variaacuteveis independente e dependente respectivamente
como mostrada nas equaccedilotildees abaixo N eacute o nuacutemero de dados disponiacuteveis (pares xy)
N
ii
N
iii
xx
yyxx
1
2
11
)(
))((
xy 10
)( yx
N
iix
Nx
1
1
N
iiy
Ny
1
1
Quantitative Structure Activity Relationship
wwwpythonorg
01 125 02 15 03 4 04 51 05 63 06 5 07 87 08 9 09 11
1 14 11 1375 12 15 13 18 14 175 15 19 16 17 17 21 18 225 19 26
2 251
X Y
N
iix
Nx
1
1
N
iiy
Ny
1
1
N
ii
N
iii
xx
yyxx
1
2
11
)(
))((
xy 10
Vamos considerar um conjunto de 20 pontos mostrados na tabela abaixo Usaremos
estes dados para calcular a melhor reta a partir das equaccedilotildees da regressatildeo linear O
Excel jaacute tem uma funccedilatildeo de regressatildeo usaremos o exemplo abaixo para explicitar os
termos
Quantitative Structure Activity Relationship
wwwpythonorg
Numa abordagem algoriacutetmica para resoluccedilatildeo do
problema temos como primeiro passo o caacutelculo da
meacutedia com as equaccedilotildees abaixo
Em seguida calculamos 1 com a equaccedilatildeo a seguir
Por uacuteltimo calculamos 0
1051
1
N
iix
Nx
035131
1
N
iiy
Ny
x y x- ltxgt y-ltygt (x-ltxgt)(y-ltygt) (x-ltxgt)^2
01 125 -095 -11785 1119575 09025
02 15 -085 -11535 980475 07225
03 4 -075 -9035 677625 05625
04 51 -065 -7935 515775 04225
05 63 -055 -6735 370425 03025
06 5 -045 -8035 361575 02025
07 87 -035 -4335 151725 01225
08 9 -025 -4035 100875 00625
09 11 -015 -2035 030525 00225
1 14 -005 0965 -004825 00025
11 1375 005 0715 003575 00025
12 15 015 1965 029475 00225
13 18 025 4965 124125 00625
14 175 035 4465 156275 01225
15 19 045 5965 268425 02025
16 17 055 3965 218075 03025
17 21 065 7965 517725 04225
18 225 075 9465 709875 05625
19 26 085 12965 1102025 07225
2 251 095 12065 1146175 09025
105 13035 85795 665
90212
656
79585
)(
))((
1
2
11
N
ii
N
iii
xx
yyxx
05120519021203513
10
xy
Temos a seguinte sequencia de
caacutelculos
1) Meacutedias
2) Caacutelculo do 1
3) Caacutelculo do 0
Quantitative Structure Activity Relationship
wwwpythonorg
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
01 125 02 15 03 4 04 51 05 63 06 5 07 87 08 9 09 11
1 14 11 1375 12 15 13 18 14 175 15 19 16 17 17 21 18 225 19 26
2 251
y = 1x + 0
y =12902x ndash 0512 X Y
No final temos a melhor reta (equaccedilatildeo de regressatildeo) indicada abaixo
Na elaboraccedilatildeo de modelos de QSAR normalmente temos mais de uma
variaacutevel independente o que leva ao uso de regressatildeo linear muacuteltipla
Outro niacutevel de abstraccedilatildeo do modelo de QSAR eacute o uso de variaacuteveis
independentes natildeo lineares Tais meacutetodos de aproximaccedilatildeo estatildeo
disponiacuteveis em pacotes como o Mathematica (wwwwolframcom) Aleacutem
disso podemos implementar os meacutetodos de regressatildeo linear a partir
da linguagem de programaccedilatildeo Python
Quantitative Structure Activity Relationship
wwwpythonorg
Tanto nos modelos de QSAR obtidos por regressatildeo linear como para aqueles obtidos
por regressatildeo linear muacuteltipla ou mesmo natildeo linear temos que acessar a qualidade do
modelo de regressatildeo ou seja a qualidade do ajuste da curva (ou reta) modelada
contra os pontos experimentais (yi) Um dos paracircmetros usados eacute o coeficiente de
correlaccedilatildeo quadrado (R2) Considere que ycalci satildeo valores calculados a partir da
equaccedilatildeo de regressatildeo usando observaccedilotildees experimentais xi Assim temos os
seguintes termos soma total dos quadrados (Total Sum of Squares TSS) soma
dos quadrados ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos
quadrados (Residual Sum of Squares)
Que satildeo usados para o caacutelculo de R2 como segue
N
ii yy
1
2TSS
N
iicalc yy
1
2
ESS
N
iicalci yy
1
2RSS
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
x y x-ltxgt y-ltygt ycalci (y-ycalci)^2 (y-ltygt)^2 (ycalci-lty))^2
01 125 -095 -11785 07782 022259524 138886225 1502291462
02 15 -085 -11535 20684 032307856 133056225 1202663156
03 4 -075 -9035 33586 041139396 81631225 9363271696
04 51 -065 -7935 46488 020358144 62964225 7032835044
05 63 -055 -6735 5939 0130321 45360225 50353216
06 5 -045 -8035 72292 496933264 64561225 3370731364
07 87 -035 -4335 85194 003261636 18792225 2039064336
08 9 -025 -4035 98096 065545216 16281225 1040320516
09 11 -015 -2035 110998 000996004 4141225 374499904
1 14 -005 0965 1239 25921 0931225 0416025
11 1375 005 0715 136802 000487204 0511225 041628304
12 15 015 1965 149704 000087616 3861225 374577316
13 18 025 4965 162606 302551236 24651225 1040449536
14 175 035 4465 175508 000258064 19936225 2039244964
15 19 045 5965 18841 0025281 35581225 33709636
16 17 055 3965 201312 980441344 15721225 5035605444
17 21 065 7965 214214 017757796 63441225 7033170496
18 225 075 9465 227116 004477456 89586225 9363658756
19 26 085 12965 240018 399280324 168091225 1202707022
2 251 095 12065 25292 0036864 145564225 150234049
105 13035 266659868 11335505 1106969667
1133551TSS1
2
N
ii yy 2666599RSS
1
2
N
iicalci yy
976505511133
66599261
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
O coeficiente de correlaccedilatildeo quadrado mede a qualidade do ajuste da funccedilatildeo
teoacuterica (equaccedilatildeo de regressatildeo) aos pontos experimentais Esse iacutendice varia de 0
a 1 O valor zero natildeo indica correlaccedilatildeo entre os dados Para R2 igual a 1 ou proacuteximo
desse temos uma equaccedilatildeo de regressatildeo com boa correlaccedilatildeo como os dados
experimentais A equaccedilatildeo de regressatildeo obtida no exemplo apresentado tem
excelente correlaccedilatildeo R2 = 09765 tal concordacircncia pode ser vista na anaacutelise do
graacutefico onde todos os pontos experimentais estatildeo proacuteximos agrave reta de regressatildeo
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
y = 1x + 0
y =12902x ndash 0512
R2 = 09765
Quantitative Structure Activity Relationship
wwwpythonorg
Eacute oacutebvio que sistemas bioloacutegicos
caracterizados por uma dada atividade
raramente podem ser modelados com
funccedilotildees lineares simples A introduccedilatildeo de
variaacuteveis independentes no modelo de
QSAR leva muitas vezes a um modelo
mais robusto onde caracteriacutesticas
quiacutemicas relevantes (descritores) satildeo
considerados Contudo o princiacutepio da
parcimocircnia deve ser adotado ou seja
nem sempre um modelo com mais
variaacuteveis independentes eacute o mais
adequado para modelar a atividade
bioloacutegica Colocaremos como exemplo o
uso do programa Mathematica para
encontrarmos modelos matemaacuteticos para
conjuntos de dados Depois
implementaremos em Python
Polinocircmio de grau 2 (-0634408x2 + 124534x + 00807008)
usado para aproximar os cinco pontos experimentais
mostrados acima
O graacutefico foi gerado com o programa Mathematica
(httpdemonstrationswolframcomCurveFitting)
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
A ideacuteia baacutesica atraacutes da aproximaccedilatildeo de uma
funccedilatildeo eacute usar uma lista de funccedilotildees
matemaacuteticas especificadas antecipadamente
e tentar encontrar uma combinaccedilatildeo linear
dessas funccedilotildees dadas de forma que essa
combinaccedilatildeo linear de funccedilotildees fique o mais
proacuteximo possiacutevel do conjunto de dados
Vamos ilustrar as ideacuteias principais com
exemplos Vamos considerar um conjunto
formado pelos 19 pontos experimentais
indicados na tabela ao lado
Para colocar essas informaccedilotildees no
Mathematica digitamos
x y
73 348105
74 35381
75 358167
76 406048
77 470132
78 424577
79 431319
80 373182
81 336343
82 280988
83 283107
84 299822
85 272542
86 33407
87 354875
88 381126
89 4157
90 421533
91 395108
data=733481057435381753581677640604877 470132
78 42457779 431319 803731828133634382280988
832831078429982285272542863340787354875883811
268941579042153391395108
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar o graacutefico dos pontos experimentais e conectaacute-los Para isto definimos lp1
e lp2 que no Mathematica fica da seguinte forma
lp1=ListPlot[dataPlotStyle-gtPointSize[003]DisplayFunction-gtIdentity]
lp2=ListPlot[dataPlotJoined-gtTrue DisplayFunction-gtIdentity]
Agora preparamos o graacutefico digitando
Show[lp1lp2 DisplayFunction-gt$DisplayFunction]
O resultado eacute mostrado ao lado
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar curvas que ajustem-se ao conjunto de dados experimentais Podemos
testar vaacuterios cenaacuterios esta eacute uma das vantagens de usarmos um pacote poderoso
como o Mathematica ou ainda uma linguagem de programaccedilatildeo como o Python que
veremos adiante Para gerarmos um ajuste por regressatildeo linear e graficarmos os
resultados usamos os seguintes comandos
Clear[p]
p=Fit[data1xx]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 422346 -00695772 x
Vemos pelo graacutefico que o ajuste eacute
insatisfatoacuterio
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos tentar uma nova curva com um polinocircmio com x e x2 para isto basta
mudarmos a linha de comando Fit (indicado em vermelho) o restante eacute mantido
Clear[p]
p=Fit[data1xx^2x]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 549149 -124887 x+00757266 x2
Vemos pelo graacutefico que o ajuste eacute
Insatisfatoacuterio No proacuteximo slide temos
aproximaccedilotildees para polinocircmios ateacute o grau 5
Quantitative Structure Activity Relationship
wwwpythonorg
Nas figuras a seguir temos ajustes para diversas funccedilotildees polinomiais
y = -136156+508522 x-629506 x2+00258975 x3 y = -198884+959783 x-173196 x2+138539 x3-000414481 x4
y = 282867times106-176099 x+4376 x2-542556 x3+0335627 x4-0000828711 x5
A uacuteltima funccedilatildeo (com termos ateacute a quinta potecircncia)
eacute a que melhor se ajusta aos pontos experimentais
Quantitative Structure Activity Relationship
wwwpythonorg
Aproximaccedilatildeo com polinocircmio de grau 3 Aproximaccedilatildeo com polinocircmio de grau 4
Type CSV file name =gt data2csv
Type polynomial equation degree =gt 5
Best fit polynomial equation
5 4 3 2
-00008287 x + 03356 x - 5426 x + 4376 x - 1761e+05 x + 2829e+0
21
Usaremos o programa qsar1py as linhas
de coacutedigo estatildeo no proacuteximo slide O graacutefico
gerado estaacute na figura ao lado O arquivo de
entrada eacute o data2csv A equaccedilatildeo
polinomial estaacute mostrada abaixo Veja que
o resultado estaacute proacuteximo ao obtido com o
Mathematica para o polinocircmio de grau 5
Programa qsar1py
wwwpythonorg
def main()
Call read_csv()
xymy_deg = read_csv()
Call lsq()
p = lsq(xymy_deg)
Call gen_plot()
gen_plot(xyp)
main() 22
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo main() Inicialmente chamamos a funccedilatildeo read_csv() que
retorna as colunas lidas como array e o grau do polinocircmio a ser aproximado aos
pontos experimentais Em seguida eacute chamada a funccedilatildeo lsq() que determina o
polinocircmio Por uacuteltimo eacute chamada a funccedilatildeo gen_plot() que gera o graacutefico
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
A abordagem de QSAR foi introduzida
pelo trabalho pioneiro de Corwin Hansch
na deacutecada de 1960 no seu estudo da
atividade bioloacutegica de uma seacuterie de
compostos relacionados estruturalmente
A atividade bioloacutegica pode ser relacionada
com a estrutura molecular a partir de
equaccedilotildees como a descrita abaixo
onde C eacute a concentraccedilatildeo molar de um
composto necessaacuterio para produzir uma
dada atividade bioloacutegica por exemplo
IC50 log P eacute o coeficiente de particcedilatildeo
entre octanol e aacutegua eacute outro descritor
molecular como nuacutemero de doadores de
ligaccedilatildeo de hidrogecircnio da moleacutecula
210 log1
log
P
C Descritores moleculares descrevem propriedade gerais de
uma dada moleacutecula que podem estar relacionadas com a
atividade farmacoloacutegica Por exemplo um logP abaixo de 5
indica que a moleacutecula tem baixa hidrofobicidade
aumentando as chances de disponibilidade oral
Fonte da imagem
httpwwwsciencephotocommedia350656enlarge
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
Hansch C Ruth AS Anderson SM Bentley DL
Parabolic dependence of drug action upon lipophilic
character as revealed by study of hypnotics J Med Chem 11
(1968) 1-11
Vaacuterias metodologias tecircm sido usadas
para elaborar modelos de QSAR sendo
regressatildeo a mais aplicada colocada na
sua forma linear a equaccedilatildeo de regressatildeo
tem o seguinte aspecto y = 0 + 1 x
onde y eacute a variaacutevel dependente (a
propriedade bioloacutegica a ser modelada)
um exemplo de variaacutevel dependente
usada em QSAR eacute log (1IC50) IC50 eacute a
constante inibitoacuteria para que a
atividade bioloacutegica caia 50 O termo x
eacute a variaacutevel independente (descritor
molecular) como exemplos de variaacuteveis
independentes usadas em QSAR temos
o log P nuacutemero de ligaccedilotildees rotaacuteveis
nuacutemero de doadores de ligaccedilatildeo de H etc
O 1 eacute coeficiente angular da reta ou do
ponto de vista de otimizaccedilatildeo o peso da
variaacutevel x e 0 eacute a constante de
regressatildeo
Reta (em vermelho) obtida por regressatildeo linear para um
conjunto de pontos experimentais (pontos azuis)
O graacutefico foi gerado com o programa Mathematica
(httpdemonstrationswolframcomVisualizingrsquareddInSt
atistics)
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
Natildeo eacute objetivo do presente curso ir a fundo em meacutetodos numeacutericos mas a matemaacutetica
necessaacuteria para entendermos a regressatildeo linear eacute simples por isso vamos ver as
equaccedilotildees usadas no meacutetodo Nas equaccedilotildees abaixo os termos entre lt gt indicam
meacutedia aritmeacutetica Na regressatildeo linear os coeficientes rsquos satildeo dados pelas seguintes
equaccedilotildees
As linhas descritas por regressatildeo linear passam pelo ponto meacutedio onde ltxgt
e ltygt satildeo as meacutedias das variaacuteveis independente e dependente respectivamente
como mostrada nas equaccedilotildees abaixo N eacute o nuacutemero de dados disponiacuteveis (pares xy)
N
ii
N
iii
xx
yyxx
1
2
11
)(
))((
xy 10
)( yx
N
iix
Nx
1
1
N
iiy
Ny
1
1
Quantitative Structure Activity Relationship
wwwpythonorg
01 125 02 15 03 4 04 51 05 63 06 5 07 87 08 9 09 11
1 14 11 1375 12 15 13 18 14 175 15 19 16 17 17 21 18 225 19 26
2 251
X Y
N
iix
Nx
1
1
N
iiy
Ny
1
1
N
ii
N
iii
xx
yyxx
1
2
11
)(
))((
xy 10
Vamos considerar um conjunto de 20 pontos mostrados na tabela abaixo Usaremos
estes dados para calcular a melhor reta a partir das equaccedilotildees da regressatildeo linear O
Excel jaacute tem uma funccedilatildeo de regressatildeo usaremos o exemplo abaixo para explicitar os
termos
Quantitative Structure Activity Relationship
wwwpythonorg
Numa abordagem algoriacutetmica para resoluccedilatildeo do
problema temos como primeiro passo o caacutelculo da
meacutedia com as equaccedilotildees abaixo
Em seguida calculamos 1 com a equaccedilatildeo a seguir
Por uacuteltimo calculamos 0
1051
1
N
iix
Nx
035131
1
N
iiy
Ny
x y x- ltxgt y-ltygt (x-ltxgt)(y-ltygt) (x-ltxgt)^2
01 125 -095 -11785 1119575 09025
02 15 -085 -11535 980475 07225
03 4 -075 -9035 677625 05625
04 51 -065 -7935 515775 04225
05 63 -055 -6735 370425 03025
06 5 -045 -8035 361575 02025
07 87 -035 -4335 151725 01225
08 9 -025 -4035 100875 00625
09 11 -015 -2035 030525 00225
1 14 -005 0965 -004825 00025
11 1375 005 0715 003575 00025
12 15 015 1965 029475 00225
13 18 025 4965 124125 00625
14 175 035 4465 156275 01225
15 19 045 5965 268425 02025
16 17 055 3965 218075 03025
17 21 065 7965 517725 04225
18 225 075 9465 709875 05625
19 26 085 12965 1102025 07225
2 251 095 12065 1146175 09025
105 13035 85795 665
90212
656
79585
)(
))((
1
2
11
N
ii
N
iii
xx
yyxx
05120519021203513
10
xy
Temos a seguinte sequencia de
caacutelculos
1) Meacutedias
2) Caacutelculo do 1
3) Caacutelculo do 0
Quantitative Structure Activity Relationship
wwwpythonorg
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
01 125 02 15 03 4 04 51 05 63 06 5 07 87 08 9 09 11
1 14 11 1375 12 15 13 18 14 175 15 19 16 17 17 21 18 225 19 26
2 251
y = 1x + 0
y =12902x ndash 0512 X Y
No final temos a melhor reta (equaccedilatildeo de regressatildeo) indicada abaixo
Na elaboraccedilatildeo de modelos de QSAR normalmente temos mais de uma
variaacutevel independente o que leva ao uso de regressatildeo linear muacuteltipla
Outro niacutevel de abstraccedilatildeo do modelo de QSAR eacute o uso de variaacuteveis
independentes natildeo lineares Tais meacutetodos de aproximaccedilatildeo estatildeo
disponiacuteveis em pacotes como o Mathematica (wwwwolframcom) Aleacutem
disso podemos implementar os meacutetodos de regressatildeo linear a partir
da linguagem de programaccedilatildeo Python
Quantitative Structure Activity Relationship
wwwpythonorg
Tanto nos modelos de QSAR obtidos por regressatildeo linear como para aqueles obtidos
por regressatildeo linear muacuteltipla ou mesmo natildeo linear temos que acessar a qualidade do
modelo de regressatildeo ou seja a qualidade do ajuste da curva (ou reta) modelada
contra os pontos experimentais (yi) Um dos paracircmetros usados eacute o coeficiente de
correlaccedilatildeo quadrado (R2) Considere que ycalci satildeo valores calculados a partir da
equaccedilatildeo de regressatildeo usando observaccedilotildees experimentais xi Assim temos os
seguintes termos soma total dos quadrados (Total Sum of Squares TSS) soma
dos quadrados ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos
quadrados (Residual Sum of Squares)
Que satildeo usados para o caacutelculo de R2 como segue
N
ii yy
1
2TSS
N
iicalc yy
1
2
ESS
N
iicalci yy
1
2RSS
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
x y x-ltxgt y-ltygt ycalci (y-ycalci)^2 (y-ltygt)^2 (ycalci-lty))^2
01 125 -095 -11785 07782 022259524 138886225 1502291462
02 15 -085 -11535 20684 032307856 133056225 1202663156
03 4 -075 -9035 33586 041139396 81631225 9363271696
04 51 -065 -7935 46488 020358144 62964225 7032835044
05 63 -055 -6735 5939 0130321 45360225 50353216
06 5 -045 -8035 72292 496933264 64561225 3370731364
07 87 -035 -4335 85194 003261636 18792225 2039064336
08 9 -025 -4035 98096 065545216 16281225 1040320516
09 11 -015 -2035 110998 000996004 4141225 374499904
1 14 -005 0965 1239 25921 0931225 0416025
11 1375 005 0715 136802 000487204 0511225 041628304
12 15 015 1965 149704 000087616 3861225 374577316
13 18 025 4965 162606 302551236 24651225 1040449536
14 175 035 4465 175508 000258064 19936225 2039244964
15 19 045 5965 18841 0025281 35581225 33709636
16 17 055 3965 201312 980441344 15721225 5035605444
17 21 065 7965 214214 017757796 63441225 7033170496
18 225 075 9465 227116 004477456 89586225 9363658756
19 26 085 12965 240018 399280324 168091225 1202707022
2 251 095 12065 25292 0036864 145564225 150234049
105 13035 266659868 11335505 1106969667
1133551TSS1
2
N
ii yy 2666599RSS
1
2
N
iicalci yy
976505511133
66599261
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
O coeficiente de correlaccedilatildeo quadrado mede a qualidade do ajuste da funccedilatildeo
teoacuterica (equaccedilatildeo de regressatildeo) aos pontos experimentais Esse iacutendice varia de 0
a 1 O valor zero natildeo indica correlaccedilatildeo entre os dados Para R2 igual a 1 ou proacuteximo
desse temos uma equaccedilatildeo de regressatildeo com boa correlaccedilatildeo como os dados
experimentais A equaccedilatildeo de regressatildeo obtida no exemplo apresentado tem
excelente correlaccedilatildeo R2 = 09765 tal concordacircncia pode ser vista na anaacutelise do
graacutefico onde todos os pontos experimentais estatildeo proacuteximos agrave reta de regressatildeo
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
y = 1x + 0
y =12902x ndash 0512
R2 = 09765
Quantitative Structure Activity Relationship
wwwpythonorg
Eacute oacutebvio que sistemas bioloacutegicos
caracterizados por uma dada atividade
raramente podem ser modelados com
funccedilotildees lineares simples A introduccedilatildeo de
variaacuteveis independentes no modelo de
QSAR leva muitas vezes a um modelo
mais robusto onde caracteriacutesticas
quiacutemicas relevantes (descritores) satildeo
considerados Contudo o princiacutepio da
parcimocircnia deve ser adotado ou seja
nem sempre um modelo com mais
variaacuteveis independentes eacute o mais
adequado para modelar a atividade
bioloacutegica Colocaremos como exemplo o
uso do programa Mathematica para
encontrarmos modelos matemaacuteticos para
conjuntos de dados Depois
implementaremos em Python
Polinocircmio de grau 2 (-0634408x2 + 124534x + 00807008)
usado para aproximar os cinco pontos experimentais
mostrados acima
O graacutefico foi gerado com o programa Mathematica
(httpdemonstrationswolframcomCurveFitting)
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
A ideacuteia baacutesica atraacutes da aproximaccedilatildeo de uma
funccedilatildeo eacute usar uma lista de funccedilotildees
matemaacuteticas especificadas antecipadamente
e tentar encontrar uma combinaccedilatildeo linear
dessas funccedilotildees dadas de forma que essa
combinaccedilatildeo linear de funccedilotildees fique o mais
proacuteximo possiacutevel do conjunto de dados
Vamos ilustrar as ideacuteias principais com
exemplos Vamos considerar um conjunto
formado pelos 19 pontos experimentais
indicados na tabela ao lado
Para colocar essas informaccedilotildees no
Mathematica digitamos
x y
73 348105
74 35381
75 358167
76 406048
77 470132
78 424577
79 431319
80 373182
81 336343
82 280988
83 283107
84 299822
85 272542
86 33407
87 354875
88 381126
89 4157
90 421533
91 395108
data=733481057435381753581677640604877 470132
78 42457779 431319 803731828133634382280988
832831078429982285272542863340787354875883811
268941579042153391395108
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar o graacutefico dos pontos experimentais e conectaacute-los Para isto definimos lp1
e lp2 que no Mathematica fica da seguinte forma
lp1=ListPlot[dataPlotStyle-gtPointSize[003]DisplayFunction-gtIdentity]
lp2=ListPlot[dataPlotJoined-gtTrue DisplayFunction-gtIdentity]
Agora preparamos o graacutefico digitando
Show[lp1lp2 DisplayFunction-gt$DisplayFunction]
O resultado eacute mostrado ao lado
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar curvas que ajustem-se ao conjunto de dados experimentais Podemos
testar vaacuterios cenaacuterios esta eacute uma das vantagens de usarmos um pacote poderoso
como o Mathematica ou ainda uma linguagem de programaccedilatildeo como o Python que
veremos adiante Para gerarmos um ajuste por regressatildeo linear e graficarmos os
resultados usamos os seguintes comandos
Clear[p]
p=Fit[data1xx]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 422346 -00695772 x
Vemos pelo graacutefico que o ajuste eacute
insatisfatoacuterio
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos tentar uma nova curva com um polinocircmio com x e x2 para isto basta
mudarmos a linha de comando Fit (indicado em vermelho) o restante eacute mantido
Clear[p]
p=Fit[data1xx^2x]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 549149 -124887 x+00757266 x2
Vemos pelo graacutefico que o ajuste eacute
Insatisfatoacuterio No proacuteximo slide temos
aproximaccedilotildees para polinocircmios ateacute o grau 5
Quantitative Structure Activity Relationship
wwwpythonorg
Nas figuras a seguir temos ajustes para diversas funccedilotildees polinomiais
y = -136156+508522 x-629506 x2+00258975 x3 y = -198884+959783 x-173196 x2+138539 x3-000414481 x4
y = 282867times106-176099 x+4376 x2-542556 x3+0335627 x4-0000828711 x5
A uacuteltima funccedilatildeo (com termos ateacute a quinta potecircncia)
eacute a que melhor se ajusta aos pontos experimentais
Quantitative Structure Activity Relationship
wwwpythonorg
Aproximaccedilatildeo com polinocircmio de grau 3 Aproximaccedilatildeo com polinocircmio de grau 4
Type CSV file name =gt data2csv
Type polynomial equation degree =gt 5
Best fit polynomial equation
5 4 3 2
-00008287 x + 03356 x - 5426 x + 4376 x - 1761e+05 x + 2829e+0
21
Usaremos o programa qsar1py as linhas
de coacutedigo estatildeo no proacuteximo slide O graacutefico
gerado estaacute na figura ao lado O arquivo de
entrada eacute o data2csv A equaccedilatildeo
polinomial estaacute mostrada abaixo Veja que
o resultado estaacute proacuteximo ao obtido com o
Mathematica para o polinocircmio de grau 5
Programa qsar1py
wwwpythonorg
def main()
Call read_csv()
xymy_deg = read_csv()
Call lsq()
p = lsq(xymy_deg)
Call gen_plot()
gen_plot(xyp)
main() 22
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo main() Inicialmente chamamos a funccedilatildeo read_csv() que
retorna as colunas lidas como array e o grau do polinocircmio a ser aproximado aos
pontos experimentais Em seguida eacute chamada a funccedilatildeo lsq() que determina o
polinocircmio Por uacuteltimo eacute chamada a funccedilatildeo gen_plot() que gera o graacutefico
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Vaacuterias metodologias tecircm sido usadas
para elaborar modelos de QSAR sendo
regressatildeo a mais aplicada colocada na
sua forma linear a equaccedilatildeo de regressatildeo
tem o seguinte aspecto y = 0 + 1 x
onde y eacute a variaacutevel dependente (a
propriedade bioloacutegica a ser modelada)
um exemplo de variaacutevel dependente
usada em QSAR eacute log (1IC50) IC50 eacute a
constante inibitoacuteria para que a
atividade bioloacutegica caia 50 O termo x
eacute a variaacutevel independente (descritor
molecular) como exemplos de variaacuteveis
independentes usadas em QSAR temos
o log P nuacutemero de ligaccedilotildees rotaacuteveis
nuacutemero de doadores de ligaccedilatildeo de H etc
O 1 eacute coeficiente angular da reta ou do
ponto de vista de otimizaccedilatildeo o peso da
variaacutevel x e 0 eacute a constante de
regressatildeo
Reta (em vermelho) obtida por regressatildeo linear para um
conjunto de pontos experimentais (pontos azuis)
O graacutefico foi gerado com o programa Mathematica
(httpdemonstrationswolframcomVisualizingrsquareddInSt
atistics)
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
Natildeo eacute objetivo do presente curso ir a fundo em meacutetodos numeacutericos mas a matemaacutetica
necessaacuteria para entendermos a regressatildeo linear eacute simples por isso vamos ver as
equaccedilotildees usadas no meacutetodo Nas equaccedilotildees abaixo os termos entre lt gt indicam
meacutedia aritmeacutetica Na regressatildeo linear os coeficientes rsquos satildeo dados pelas seguintes
equaccedilotildees
As linhas descritas por regressatildeo linear passam pelo ponto meacutedio onde ltxgt
e ltygt satildeo as meacutedias das variaacuteveis independente e dependente respectivamente
como mostrada nas equaccedilotildees abaixo N eacute o nuacutemero de dados disponiacuteveis (pares xy)
N
ii
N
iii
xx
yyxx
1
2
11
)(
))((
xy 10
)( yx
N
iix
Nx
1
1
N
iiy
Ny
1
1
Quantitative Structure Activity Relationship
wwwpythonorg
01 125 02 15 03 4 04 51 05 63 06 5 07 87 08 9 09 11
1 14 11 1375 12 15 13 18 14 175 15 19 16 17 17 21 18 225 19 26
2 251
X Y
N
iix
Nx
1
1
N
iiy
Ny
1
1
N
ii
N
iii
xx
yyxx
1
2
11
)(
))((
xy 10
Vamos considerar um conjunto de 20 pontos mostrados na tabela abaixo Usaremos
estes dados para calcular a melhor reta a partir das equaccedilotildees da regressatildeo linear O
Excel jaacute tem uma funccedilatildeo de regressatildeo usaremos o exemplo abaixo para explicitar os
termos
Quantitative Structure Activity Relationship
wwwpythonorg
Numa abordagem algoriacutetmica para resoluccedilatildeo do
problema temos como primeiro passo o caacutelculo da
meacutedia com as equaccedilotildees abaixo
Em seguida calculamos 1 com a equaccedilatildeo a seguir
Por uacuteltimo calculamos 0
1051
1
N
iix
Nx
035131
1
N
iiy
Ny
x y x- ltxgt y-ltygt (x-ltxgt)(y-ltygt) (x-ltxgt)^2
01 125 -095 -11785 1119575 09025
02 15 -085 -11535 980475 07225
03 4 -075 -9035 677625 05625
04 51 -065 -7935 515775 04225
05 63 -055 -6735 370425 03025
06 5 -045 -8035 361575 02025
07 87 -035 -4335 151725 01225
08 9 -025 -4035 100875 00625
09 11 -015 -2035 030525 00225
1 14 -005 0965 -004825 00025
11 1375 005 0715 003575 00025
12 15 015 1965 029475 00225
13 18 025 4965 124125 00625
14 175 035 4465 156275 01225
15 19 045 5965 268425 02025
16 17 055 3965 218075 03025
17 21 065 7965 517725 04225
18 225 075 9465 709875 05625
19 26 085 12965 1102025 07225
2 251 095 12065 1146175 09025
105 13035 85795 665
90212
656
79585
)(
))((
1
2
11
N
ii
N
iii
xx
yyxx
05120519021203513
10
xy
Temos a seguinte sequencia de
caacutelculos
1) Meacutedias
2) Caacutelculo do 1
3) Caacutelculo do 0
Quantitative Structure Activity Relationship
wwwpythonorg
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
01 125 02 15 03 4 04 51 05 63 06 5 07 87 08 9 09 11
1 14 11 1375 12 15 13 18 14 175 15 19 16 17 17 21 18 225 19 26
2 251
y = 1x + 0
y =12902x ndash 0512 X Y
No final temos a melhor reta (equaccedilatildeo de regressatildeo) indicada abaixo
Na elaboraccedilatildeo de modelos de QSAR normalmente temos mais de uma
variaacutevel independente o que leva ao uso de regressatildeo linear muacuteltipla
Outro niacutevel de abstraccedilatildeo do modelo de QSAR eacute o uso de variaacuteveis
independentes natildeo lineares Tais meacutetodos de aproximaccedilatildeo estatildeo
disponiacuteveis em pacotes como o Mathematica (wwwwolframcom) Aleacutem
disso podemos implementar os meacutetodos de regressatildeo linear a partir
da linguagem de programaccedilatildeo Python
Quantitative Structure Activity Relationship
wwwpythonorg
Tanto nos modelos de QSAR obtidos por regressatildeo linear como para aqueles obtidos
por regressatildeo linear muacuteltipla ou mesmo natildeo linear temos que acessar a qualidade do
modelo de regressatildeo ou seja a qualidade do ajuste da curva (ou reta) modelada
contra os pontos experimentais (yi) Um dos paracircmetros usados eacute o coeficiente de
correlaccedilatildeo quadrado (R2) Considere que ycalci satildeo valores calculados a partir da
equaccedilatildeo de regressatildeo usando observaccedilotildees experimentais xi Assim temos os
seguintes termos soma total dos quadrados (Total Sum of Squares TSS) soma
dos quadrados ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos
quadrados (Residual Sum of Squares)
Que satildeo usados para o caacutelculo de R2 como segue
N
ii yy
1
2TSS
N
iicalc yy
1
2
ESS
N
iicalci yy
1
2RSS
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
x y x-ltxgt y-ltygt ycalci (y-ycalci)^2 (y-ltygt)^2 (ycalci-lty))^2
01 125 -095 -11785 07782 022259524 138886225 1502291462
02 15 -085 -11535 20684 032307856 133056225 1202663156
03 4 -075 -9035 33586 041139396 81631225 9363271696
04 51 -065 -7935 46488 020358144 62964225 7032835044
05 63 -055 -6735 5939 0130321 45360225 50353216
06 5 -045 -8035 72292 496933264 64561225 3370731364
07 87 -035 -4335 85194 003261636 18792225 2039064336
08 9 -025 -4035 98096 065545216 16281225 1040320516
09 11 -015 -2035 110998 000996004 4141225 374499904
1 14 -005 0965 1239 25921 0931225 0416025
11 1375 005 0715 136802 000487204 0511225 041628304
12 15 015 1965 149704 000087616 3861225 374577316
13 18 025 4965 162606 302551236 24651225 1040449536
14 175 035 4465 175508 000258064 19936225 2039244964
15 19 045 5965 18841 0025281 35581225 33709636
16 17 055 3965 201312 980441344 15721225 5035605444
17 21 065 7965 214214 017757796 63441225 7033170496
18 225 075 9465 227116 004477456 89586225 9363658756
19 26 085 12965 240018 399280324 168091225 1202707022
2 251 095 12065 25292 0036864 145564225 150234049
105 13035 266659868 11335505 1106969667
1133551TSS1
2
N
ii yy 2666599RSS
1
2
N
iicalci yy
976505511133
66599261
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
O coeficiente de correlaccedilatildeo quadrado mede a qualidade do ajuste da funccedilatildeo
teoacuterica (equaccedilatildeo de regressatildeo) aos pontos experimentais Esse iacutendice varia de 0
a 1 O valor zero natildeo indica correlaccedilatildeo entre os dados Para R2 igual a 1 ou proacuteximo
desse temos uma equaccedilatildeo de regressatildeo com boa correlaccedilatildeo como os dados
experimentais A equaccedilatildeo de regressatildeo obtida no exemplo apresentado tem
excelente correlaccedilatildeo R2 = 09765 tal concordacircncia pode ser vista na anaacutelise do
graacutefico onde todos os pontos experimentais estatildeo proacuteximos agrave reta de regressatildeo
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
y = 1x + 0
y =12902x ndash 0512
R2 = 09765
Quantitative Structure Activity Relationship
wwwpythonorg
Eacute oacutebvio que sistemas bioloacutegicos
caracterizados por uma dada atividade
raramente podem ser modelados com
funccedilotildees lineares simples A introduccedilatildeo de
variaacuteveis independentes no modelo de
QSAR leva muitas vezes a um modelo
mais robusto onde caracteriacutesticas
quiacutemicas relevantes (descritores) satildeo
considerados Contudo o princiacutepio da
parcimocircnia deve ser adotado ou seja
nem sempre um modelo com mais
variaacuteveis independentes eacute o mais
adequado para modelar a atividade
bioloacutegica Colocaremos como exemplo o
uso do programa Mathematica para
encontrarmos modelos matemaacuteticos para
conjuntos de dados Depois
implementaremos em Python
Polinocircmio de grau 2 (-0634408x2 + 124534x + 00807008)
usado para aproximar os cinco pontos experimentais
mostrados acima
O graacutefico foi gerado com o programa Mathematica
(httpdemonstrationswolframcomCurveFitting)
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
A ideacuteia baacutesica atraacutes da aproximaccedilatildeo de uma
funccedilatildeo eacute usar uma lista de funccedilotildees
matemaacuteticas especificadas antecipadamente
e tentar encontrar uma combinaccedilatildeo linear
dessas funccedilotildees dadas de forma que essa
combinaccedilatildeo linear de funccedilotildees fique o mais
proacuteximo possiacutevel do conjunto de dados
Vamos ilustrar as ideacuteias principais com
exemplos Vamos considerar um conjunto
formado pelos 19 pontos experimentais
indicados na tabela ao lado
Para colocar essas informaccedilotildees no
Mathematica digitamos
x y
73 348105
74 35381
75 358167
76 406048
77 470132
78 424577
79 431319
80 373182
81 336343
82 280988
83 283107
84 299822
85 272542
86 33407
87 354875
88 381126
89 4157
90 421533
91 395108
data=733481057435381753581677640604877 470132
78 42457779 431319 803731828133634382280988
832831078429982285272542863340787354875883811
268941579042153391395108
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar o graacutefico dos pontos experimentais e conectaacute-los Para isto definimos lp1
e lp2 que no Mathematica fica da seguinte forma
lp1=ListPlot[dataPlotStyle-gtPointSize[003]DisplayFunction-gtIdentity]
lp2=ListPlot[dataPlotJoined-gtTrue DisplayFunction-gtIdentity]
Agora preparamos o graacutefico digitando
Show[lp1lp2 DisplayFunction-gt$DisplayFunction]
O resultado eacute mostrado ao lado
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar curvas que ajustem-se ao conjunto de dados experimentais Podemos
testar vaacuterios cenaacuterios esta eacute uma das vantagens de usarmos um pacote poderoso
como o Mathematica ou ainda uma linguagem de programaccedilatildeo como o Python que
veremos adiante Para gerarmos um ajuste por regressatildeo linear e graficarmos os
resultados usamos os seguintes comandos
Clear[p]
p=Fit[data1xx]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 422346 -00695772 x
Vemos pelo graacutefico que o ajuste eacute
insatisfatoacuterio
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos tentar uma nova curva com um polinocircmio com x e x2 para isto basta
mudarmos a linha de comando Fit (indicado em vermelho) o restante eacute mantido
Clear[p]
p=Fit[data1xx^2x]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 549149 -124887 x+00757266 x2
Vemos pelo graacutefico que o ajuste eacute
Insatisfatoacuterio No proacuteximo slide temos
aproximaccedilotildees para polinocircmios ateacute o grau 5
Quantitative Structure Activity Relationship
wwwpythonorg
Nas figuras a seguir temos ajustes para diversas funccedilotildees polinomiais
y = -136156+508522 x-629506 x2+00258975 x3 y = -198884+959783 x-173196 x2+138539 x3-000414481 x4
y = 282867times106-176099 x+4376 x2-542556 x3+0335627 x4-0000828711 x5
A uacuteltima funccedilatildeo (com termos ateacute a quinta potecircncia)
eacute a que melhor se ajusta aos pontos experimentais
Quantitative Structure Activity Relationship
wwwpythonorg
Aproximaccedilatildeo com polinocircmio de grau 3 Aproximaccedilatildeo com polinocircmio de grau 4
Type CSV file name =gt data2csv
Type polynomial equation degree =gt 5
Best fit polynomial equation
5 4 3 2
-00008287 x + 03356 x - 5426 x + 4376 x - 1761e+05 x + 2829e+0
21
Usaremos o programa qsar1py as linhas
de coacutedigo estatildeo no proacuteximo slide O graacutefico
gerado estaacute na figura ao lado O arquivo de
entrada eacute o data2csv A equaccedilatildeo
polinomial estaacute mostrada abaixo Veja que
o resultado estaacute proacuteximo ao obtido com o
Mathematica para o polinocircmio de grau 5
Programa qsar1py
wwwpythonorg
def main()
Call read_csv()
xymy_deg = read_csv()
Call lsq()
p = lsq(xymy_deg)
Call gen_plot()
gen_plot(xyp)
main() 22
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo main() Inicialmente chamamos a funccedilatildeo read_csv() que
retorna as colunas lidas como array e o grau do polinocircmio a ser aproximado aos
pontos experimentais Em seguida eacute chamada a funccedilatildeo lsq() que determina o
polinocircmio Por uacuteltimo eacute chamada a funccedilatildeo gen_plot() que gera o graacutefico
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Natildeo eacute objetivo do presente curso ir a fundo em meacutetodos numeacutericos mas a matemaacutetica
necessaacuteria para entendermos a regressatildeo linear eacute simples por isso vamos ver as
equaccedilotildees usadas no meacutetodo Nas equaccedilotildees abaixo os termos entre lt gt indicam
meacutedia aritmeacutetica Na regressatildeo linear os coeficientes rsquos satildeo dados pelas seguintes
equaccedilotildees
As linhas descritas por regressatildeo linear passam pelo ponto meacutedio onde ltxgt
e ltygt satildeo as meacutedias das variaacuteveis independente e dependente respectivamente
como mostrada nas equaccedilotildees abaixo N eacute o nuacutemero de dados disponiacuteveis (pares xy)
N
ii
N
iii
xx
yyxx
1
2
11
)(
))((
xy 10
)( yx
N
iix
Nx
1
1
N
iiy
Ny
1
1
Quantitative Structure Activity Relationship
wwwpythonorg
01 125 02 15 03 4 04 51 05 63 06 5 07 87 08 9 09 11
1 14 11 1375 12 15 13 18 14 175 15 19 16 17 17 21 18 225 19 26
2 251
X Y
N
iix
Nx
1
1
N
iiy
Ny
1
1
N
ii
N
iii
xx
yyxx
1
2
11
)(
))((
xy 10
Vamos considerar um conjunto de 20 pontos mostrados na tabela abaixo Usaremos
estes dados para calcular a melhor reta a partir das equaccedilotildees da regressatildeo linear O
Excel jaacute tem uma funccedilatildeo de regressatildeo usaremos o exemplo abaixo para explicitar os
termos
Quantitative Structure Activity Relationship
wwwpythonorg
Numa abordagem algoriacutetmica para resoluccedilatildeo do
problema temos como primeiro passo o caacutelculo da
meacutedia com as equaccedilotildees abaixo
Em seguida calculamos 1 com a equaccedilatildeo a seguir
Por uacuteltimo calculamos 0
1051
1
N
iix
Nx
035131
1
N
iiy
Ny
x y x- ltxgt y-ltygt (x-ltxgt)(y-ltygt) (x-ltxgt)^2
01 125 -095 -11785 1119575 09025
02 15 -085 -11535 980475 07225
03 4 -075 -9035 677625 05625
04 51 -065 -7935 515775 04225
05 63 -055 -6735 370425 03025
06 5 -045 -8035 361575 02025
07 87 -035 -4335 151725 01225
08 9 -025 -4035 100875 00625
09 11 -015 -2035 030525 00225
1 14 -005 0965 -004825 00025
11 1375 005 0715 003575 00025
12 15 015 1965 029475 00225
13 18 025 4965 124125 00625
14 175 035 4465 156275 01225
15 19 045 5965 268425 02025
16 17 055 3965 218075 03025
17 21 065 7965 517725 04225
18 225 075 9465 709875 05625
19 26 085 12965 1102025 07225
2 251 095 12065 1146175 09025
105 13035 85795 665
90212
656
79585
)(
))((
1
2
11
N
ii
N
iii
xx
yyxx
05120519021203513
10
xy
Temos a seguinte sequencia de
caacutelculos
1) Meacutedias
2) Caacutelculo do 1
3) Caacutelculo do 0
Quantitative Structure Activity Relationship
wwwpythonorg
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
01 125 02 15 03 4 04 51 05 63 06 5 07 87 08 9 09 11
1 14 11 1375 12 15 13 18 14 175 15 19 16 17 17 21 18 225 19 26
2 251
y = 1x + 0
y =12902x ndash 0512 X Y
No final temos a melhor reta (equaccedilatildeo de regressatildeo) indicada abaixo
Na elaboraccedilatildeo de modelos de QSAR normalmente temos mais de uma
variaacutevel independente o que leva ao uso de regressatildeo linear muacuteltipla
Outro niacutevel de abstraccedilatildeo do modelo de QSAR eacute o uso de variaacuteveis
independentes natildeo lineares Tais meacutetodos de aproximaccedilatildeo estatildeo
disponiacuteveis em pacotes como o Mathematica (wwwwolframcom) Aleacutem
disso podemos implementar os meacutetodos de regressatildeo linear a partir
da linguagem de programaccedilatildeo Python
Quantitative Structure Activity Relationship
wwwpythonorg
Tanto nos modelos de QSAR obtidos por regressatildeo linear como para aqueles obtidos
por regressatildeo linear muacuteltipla ou mesmo natildeo linear temos que acessar a qualidade do
modelo de regressatildeo ou seja a qualidade do ajuste da curva (ou reta) modelada
contra os pontos experimentais (yi) Um dos paracircmetros usados eacute o coeficiente de
correlaccedilatildeo quadrado (R2) Considere que ycalci satildeo valores calculados a partir da
equaccedilatildeo de regressatildeo usando observaccedilotildees experimentais xi Assim temos os
seguintes termos soma total dos quadrados (Total Sum of Squares TSS) soma
dos quadrados ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos
quadrados (Residual Sum of Squares)
Que satildeo usados para o caacutelculo de R2 como segue
N
ii yy
1
2TSS
N
iicalc yy
1
2
ESS
N
iicalci yy
1
2RSS
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
x y x-ltxgt y-ltygt ycalci (y-ycalci)^2 (y-ltygt)^2 (ycalci-lty))^2
01 125 -095 -11785 07782 022259524 138886225 1502291462
02 15 -085 -11535 20684 032307856 133056225 1202663156
03 4 -075 -9035 33586 041139396 81631225 9363271696
04 51 -065 -7935 46488 020358144 62964225 7032835044
05 63 -055 -6735 5939 0130321 45360225 50353216
06 5 -045 -8035 72292 496933264 64561225 3370731364
07 87 -035 -4335 85194 003261636 18792225 2039064336
08 9 -025 -4035 98096 065545216 16281225 1040320516
09 11 -015 -2035 110998 000996004 4141225 374499904
1 14 -005 0965 1239 25921 0931225 0416025
11 1375 005 0715 136802 000487204 0511225 041628304
12 15 015 1965 149704 000087616 3861225 374577316
13 18 025 4965 162606 302551236 24651225 1040449536
14 175 035 4465 175508 000258064 19936225 2039244964
15 19 045 5965 18841 0025281 35581225 33709636
16 17 055 3965 201312 980441344 15721225 5035605444
17 21 065 7965 214214 017757796 63441225 7033170496
18 225 075 9465 227116 004477456 89586225 9363658756
19 26 085 12965 240018 399280324 168091225 1202707022
2 251 095 12065 25292 0036864 145564225 150234049
105 13035 266659868 11335505 1106969667
1133551TSS1
2
N
ii yy 2666599RSS
1
2
N
iicalci yy
976505511133
66599261
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
O coeficiente de correlaccedilatildeo quadrado mede a qualidade do ajuste da funccedilatildeo
teoacuterica (equaccedilatildeo de regressatildeo) aos pontos experimentais Esse iacutendice varia de 0
a 1 O valor zero natildeo indica correlaccedilatildeo entre os dados Para R2 igual a 1 ou proacuteximo
desse temos uma equaccedilatildeo de regressatildeo com boa correlaccedilatildeo como os dados
experimentais A equaccedilatildeo de regressatildeo obtida no exemplo apresentado tem
excelente correlaccedilatildeo R2 = 09765 tal concordacircncia pode ser vista na anaacutelise do
graacutefico onde todos os pontos experimentais estatildeo proacuteximos agrave reta de regressatildeo
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
y = 1x + 0
y =12902x ndash 0512
R2 = 09765
Quantitative Structure Activity Relationship
wwwpythonorg
Eacute oacutebvio que sistemas bioloacutegicos
caracterizados por uma dada atividade
raramente podem ser modelados com
funccedilotildees lineares simples A introduccedilatildeo de
variaacuteveis independentes no modelo de
QSAR leva muitas vezes a um modelo
mais robusto onde caracteriacutesticas
quiacutemicas relevantes (descritores) satildeo
considerados Contudo o princiacutepio da
parcimocircnia deve ser adotado ou seja
nem sempre um modelo com mais
variaacuteveis independentes eacute o mais
adequado para modelar a atividade
bioloacutegica Colocaremos como exemplo o
uso do programa Mathematica para
encontrarmos modelos matemaacuteticos para
conjuntos de dados Depois
implementaremos em Python
Polinocircmio de grau 2 (-0634408x2 + 124534x + 00807008)
usado para aproximar os cinco pontos experimentais
mostrados acima
O graacutefico foi gerado com o programa Mathematica
(httpdemonstrationswolframcomCurveFitting)
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
A ideacuteia baacutesica atraacutes da aproximaccedilatildeo de uma
funccedilatildeo eacute usar uma lista de funccedilotildees
matemaacuteticas especificadas antecipadamente
e tentar encontrar uma combinaccedilatildeo linear
dessas funccedilotildees dadas de forma que essa
combinaccedilatildeo linear de funccedilotildees fique o mais
proacuteximo possiacutevel do conjunto de dados
Vamos ilustrar as ideacuteias principais com
exemplos Vamos considerar um conjunto
formado pelos 19 pontos experimentais
indicados na tabela ao lado
Para colocar essas informaccedilotildees no
Mathematica digitamos
x y
73 348105
74 35381
75 358167
76 406048
77 470132
78 424577
79 431319
80 373182
81 336343
82 280988
83 283107
84 299822
85 272542
86 33407
87 354875
88 381126
89 4157
90 421533
91 395108
data=733481057435381753581677640604877 470132
78 42457779 431319 803731828133634382280988
832831078429982285272542863340787354875883811
268941579042153391395108
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar o graacutefico dos pontos experimentais e conectaacute-los Para isto definimos lp1
e lp2 que no Mathematica fica da seguinte forma
lp1=ListPlot[dataPlotStyle-gtPointSize[003]DisplayFunction-gtIdentity]
lp2=ListPlot[dataPlotJoined-gtTrue DisplayFunction-gtIdentity]
Agora preparamos o graacutefico digitando
Show[lp1lp2 DisplayFunction-gt$DisplayFunction]
O resultado eacute mostrado ao lado
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar curvas que ajustem-se ao conjunto de dados experimentais Podemos
testar vaacuterios cenaacuterios esta eacute uma das vantagens de usarmos um pacote poderoso
como o Mathematica ou ainda uma linguagem de programaccedilatildeo como o Python que
veremos adiante Para gerarmos um ajuste por regressatildeo linear e graficarmos os
resultados usamos os seguintes comandos
Clear[p]
p=Fit[data1xx]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 422346 -00695772 x
Vemos pelo graacutefico que o ajuste eacute
insatisfatoacuterio
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos tentar uma nova curva com um polinocircmio com x e x2 para isto basta
mudarmos a linha de comando Fit (indicado em vermelho) o restante eacute mantido
Clear[p]
p=Fit[data1xx^2x]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 549149 -124887 x+00757266 x2
Vemos pelo graacutefico que o ajuste eacute
Insatisfatoacuterio No proacuteximo slide temos
aproximaccedilotildees para polinocircmios ateacute o grau 5
Quantitative Structure Activity Relationship
wwwpythonorg
Nas figuras a seguir temos ajustes para diversas funccedilotildees polinomiais
y = -136156+508522 x-629506 x2+00258975 x3 y = -198884+959783 x-173196 x2+138539 x3-000414481 x4
y = 282867times106-176099 x+4376 x2-542556 x3+0335627 x4-0000828711 x5
A uacuteltima funccedilatildeo (com termos ateacute a quinta potecircncia)
eacute a que melhor se ajusta aos pontos experimentais
Quantitative Structure Activity Relationship
wwwpythonorg
Aproximaccedilatildeo com polinocircmio de grau 3 Aproximaccedilatildeo com polinocircmio de grau 4
Type CSV file name =gt data2csv
Type polynomial equation degree =gt 5
Best fit polynomial equation
5 4 3 2
-00008287 x + 03356 x - 5426 x + 4376 x - 1761e+05 x + 2829e+0
21
Usaremos o programa qsar1py as linhas
de coacutedigo estatildeo no proacuteximo slide O graacutefico
gerado estaacute na figura ao lado O arquivo de
entrada eacute o data2csv A equaccedilatildeo
polinomial estaacute mostrada abaixo Veja que
o resultado estaacute proacuteximo ao obtido com o
Mathematica para o polinocircmio de grau 5
Programa qsar1py
wwwpythonorg
def main()
Call read_csv()
xymy_deg = read_csv()
Call lsq()
p = lsq(xymy_deg)
Call gen_plot()
gen_plot(xyp)
main() 22
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo main() Inicialmente chamamos a funccedilatildeo read_csv() que
retorna as colunas lidas como array e o grau do polinocircmio a ser aproximado aos
pontos experimentais Em seguida eacute chamada a funccedilatildeo lsq() que determina o
polinocircmio Por uacuteltimo eacute chamada a funccedilatildeo gen_plot() que gera o graacutefico
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
01 125 02 15 03 4 04 51 05 63 06 5 07 87 08 9 09 11
1 14 11 1375 12 15 13 18 14 175 15 19 16 17 17 21 18 225 19 26
2 251
X Y
N
iix
Nx
1
1
N
iiy
Ny
1
1
N
ii
N
iii
xx
yyxx
1
2
11
)(
))((
xy 10
Vamos considerar um conjunto de 20 pontos mostrados na tabela abaixo Usaremos
estes dados para calcular a melhor reta a partir das equaccedilotildees da regressatildeo linear O
Excel jaacute tem uma funccedilatildeo de regressatildeo usaremos o exemplo abaixo para explicitar os
termos
Quantitative Structure Activity Relationship
wwwpythonorg
Numa abordagem algoriacutetmica para resoluccedilatildeo do
problema temos como primeiro passo o caacutelculo da
meacutedia com as equaccedilotildees abaixo
Em seguida calculamos 1 com a equaccedilatildeo a seguir
Por uacuteltimo calculamos 0
1051
1
N
iix
Nx
035131
1
N
iiy
Ny
x y x- ltxgt y-ltygt (x-ltxgt)(y-ltygt) (x-ltxgt)^2
01 125 -095 -11785 1119575 09025
02 15 -085 -11535 980475 07225
03 4 -075 -9035 677625 05625
04 51 -065 -7935 515775 04225
05 63 -055 -6735 370425 03025
06 5 -045 -8035 361575 02025
07 87 -035 -4335 151725 01225
08 9 -025 -4035 100875 00625
09 11 -015 -2035 030525 00225
1 14 -005 0965 -004825 00025
11 1375 005 0715 003575 00025
12 15 015 1965 029475 00225
13 18 025 4965 124125 00625
14 175 035 4465 156275 01225
15 19 045 5965 268425 02025
16 17 055 3965 218075 03025
17 21 065 7965 517725 04225
18 225 075 9465 709875 05625
19 26 085 12965 1102025 07225
2 251 095 12065 1146175 09025
105 13035 85795 665
90212
656
79585
)(
))((
1
2
11
N
ii
N
iii
xx
yyxx
05120519021203513
10
xy
Temos a seguinte sequencia de
caacutelculos
1) Meacutedias
2) Caacutelculo do 1
3) Caacutelculo do 0
Quantitative Structure Activity Relationship
wwwpythonorg
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
01 125 02 15 03 4 04 51 05 63 06 5 07 87 08 9 09 11
1 14 11 1375 12 15 13 18 14 175 15 19 16 17 17 21 18 225 19 26
2 251
y = 1x + 0
y =12902x ndash 0512 X Y
No final temos a melhor reta (equaccedilatildeo de regressatildeo) indicada abaixo
Na elaboraccedilatildeo de modelos de QSAR normalmente temos mais de uma
variaacutevel independente o que leva ao uso de regressatildeo linear muacuteltipla
Outro niacutevel de abstraccedilatildeo do modelo de QSAR eacute o uso de variaacuteveis
independentes natildeo lineares Tais meacutetodos de aproximaccedilatildeo estatildeo
disponiacuteveis em pacotes como o Mathematica (wwwwolframcom) Aleacutem
disso podemos implementar os meacutetodos de regressatildeo linear a partir
da linguagem de programaccedilatildeo Python
Quantitative Structure Activity Relationship
wwwpythonorg
Tanto nos modelos de QSAR obtidos por regressatildeo linear como para aqueles obtidos
por regressatildeo linear muacuteltipla ou mesmo natildeo linear temos que acessar a qualidade do
modelo de regressatildeo ou seja a qualidade do ajuste da curva (ou reta) modelada
contra os pontos experimentais (yi) Um dos paracircmetros usados eacute o coeficiente de
correlaccedilatildeo quadrado (R2) Considere que ycalci satildeo valores calculados a partir da
equaccedilatildeo de regressatildeo usando observaccedilotildees experimentais xi Assim temos os
seguintes termos soma total dos quadrados (Total Sum of Squares TSS) soma
dos quadrados ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos
quadrados (Residual Sum of Squares)
Que satildeo usados para o caacutelculo de R2 como segue
N
ii yy
1
2TSS
N
iicalc yy
1
2
ESS
N
iicalci yy
1
2RSS
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
x y x-ltxgt y-ltygt ycalci (y-ycalci)^2 (y-ltygt)^2 (ycalci-lty))^2
01 125 -095 -11785 07782 022259524 138886225 1502291462
02 15 -085 -11535 20684 032307856 133056225 1202663156
03 4 -075 -9035 33586 041139396 81631225 9363271696
04 51 -065 -7935 46488 020358144 62964225 7032835044
05 63 -055 -6735 5939 0130321 45360225 50353216
06 5 -045 -8035 72292 496933264 64561225 3370731364
07 87 -035 -4335 85194 003261636 18792225 2039064336
08 9 -025 -4035 98096 065545216 16281225 1040320516
09 11 -015 -2035 110998 000996004 4141225 374499904
1 14 -005 0965 1239 25921 0931225 0416025
11 1375 005 0715 136802 000487204 0511225 041628304
12 15 015 1965 149704 000087616 3861225 374577316
13 18 025 4965 162606 302551236 24651225 1040449536
14 175 035 4465 175508 000258064 19936225 2039244964
15 19 045 5965 18841 0025281 35581225 33709636
16 17 055 3965 201312 980441344 15721225 5035605444
17 21 065 7965 214214 017757796 63441225 7033170496
18 225 075 9465 227116 004477456 89586225 9363658756
19 26 085 12965 240018 399280324 168091225 1202707022
2 251 095 12065 25292 0036864 145564225 150234049
105 13035 266659868 11335505 1106969667
1133551TSS1
2
N
ii yy 2666599RSS
1
2
N
iicalci yy
976505511133
66599261
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
O coeficiente de correlaccedilatildeo quadrado mede a qualidade do ajuste da funccedilatildeo
teoacuterica (equaccedilatildeo de regressatildeo) aos pontos experimentais Esse iacutendice varia de 0
a 1 O valor zero natildeo indica correlaccedilatildeo entre os dados Para R2 igual a 1 ou proacuteximo
desse temos uma equaccedilatildeo de regressatildeo com boa correlaccedilatildeo como os dados
experimentais A equaccedilatildeo de regressatildeo obtida no exemplo apresentado tem
excelente correlaccedilatildeo R2 = 09765 tal concordacircncia pode ser vista na anaacutelise do
graacutefico onde todos os pontos experimentais estatildeo proacuteximos agrave reta de regressatildeo
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
y = 1x + 0
y =12902x ndash 0512
R2 = 09765
Quantitative Structure Activity Relationship
wwwpythonorg
Eacute oacutebvio que sistemas bioloacutegicos
caracterizados por uma dada atividade
raramente podem ser modelados com
funccedilotildees lineares simples A introduccedilatildeo de
variaacuteveis independentes no modelo de
QSAR leva muitas vezes a um modelo
mais robusto onde caracteriacutesticas
quiacutemicas relevantes (descritores) satildeo
considerados Contudo o princiacutepio da
parcimocircnia deve ser adotado ou seja
nem sempre um modelo com mais
variaacuteveis independentes eacute o mais
adequado para modelar a atividade
bioloacutegica Colocaremos como exemplo o
uso do programa Mathematica para
encontrarmos modelos matemaacuteticos para
conjuntos de dados Depois
implementaremos em Python
Polinocircmio de grau 2 (-0634408x2 + 124534x + 00807008)
usado para aproximar os cinco pontos experimentais
mostrados acima
O graacutefico foi gerado com o programa Mathematica
(httpdemonstrationswolframcomCurveFitting)
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
A ideacuteia baacutesica atraacutes da aproximaccedilatildeo de uma
funccedilatildeo eacute usar uma lista de funccedilotildees
matemaacuteticas especificadas antecipadamente
e tentar encontrar uma combinaccedilatildeo linear
dessas funccedilotildees dadas de forma que essa
combinaccedilatildeo linear de funccedilotildees fique o mais
proacuteximo possiacutevel do conjunto de dados
Vamos ilustrar as ideacuteias principais com
exemplos Vamos considerar um conjunto
formado pelos 19 pontos experimentais
indicados na tabela ao lado
Para colocar essas informaccedilotildees no
Mathematica digitamos
x y
73 348105
74 35381
75 358167
76 406048
77 470132
78 424577
79 431319
80 373182
81 336343
82 280988
83 283107
84 299822
85 272542
86 33407
87 354875
88 381126
89 4157
90 421533
91 395108
data=733481057435381753581677640604877 470132
78 42457779 431319 803731828133634382280988
832831078429982285272542863340787354875883811
268941579042153391395108
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar o graacutefico dos pontos experimentais e conectaacute-los Para isto definimos lp1
e lp2 que no Mathematica fica da seguinte forma
lp1=ListPlot[dataPlotStyle-gtPointSize[003]DisplayFunction-gtIdentity]
lp2=ListPlot[dataPlotJoined-gtTrue DisplayFunction-gtIdentity]
Agora preparamos o graacutefico digitando
Show[lp1lp2 DisplayFunction-gt$DisplayFunction]
O resultado eacute mostrado ao lado
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar curvas que ajustem-se ao conjunto de dados experimentais Podemos
testar vaacuterios cenaacuterios esta eacute uma das vantagens de usarmos um pacote poderoso
como o Mathematica ou ainda uma linguagem de programaccedilatildeo como o Python que
veremos adiante Para gerarmos um ajuste por regressatildeo linear e graficarmos os
resultados usamos os seguintes comandos
Clear[p]
p=Fit[data1xx]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 422346 -00695772 x
Vemos pelo graacutefico que o ajuste eacute
insatisfatoacuterio
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos tentar uma nova curva com um polinocircmio com x e x2 para isto basta
mudarmos a linha de comando Fit (indicado em vermelho) o restante eacute mantido
Clear[p]
p=Fit[data1xx^2x]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 549149 -124887 x+00757266 x2
Vemos pelo graacutefico que o ajuste eacute
Insatisfatoacuterio No proacuteximo slide temos
aproximaccedilotildees para polinocircmios ateacute o grau 5
Quantitative Structure Activity Relationship
wwwpythonorg
Nas figuras a seguir temos ajustes para diversas funccedilotildees polinomiais
y = -136156+508522 x-629506 x2+00258975 x3 y = -198884+959783 x-173196 x2+138539 x3-000414481 x4
y = 282867times106-176099 x+4376 x2-542556 x3+0335627 x4-0000828711 x5
A uacuteltima funccedilatildeo (com termos ateacute a quinta potecircncia)
eacute a que melhor se ajusta aos pontos experimentais
Quantitative Structure Activity Relationship
wwwpythonorg
Aproximaccedilatildeo com polinocircmio de grau 3 Aproximaccedilatildeo com polinocircmio de grau 4
Type CSV file name =gt data2csv
Type polynomial equation degree =gt 5
Best fit polynomial equation
5 4 3 2
-00008287 x + 03356 x - 5426 x + 4376 x - 1761e+05 x + 2829e+0
21
Usaremos o programa qsar1py as linhas
de coacutedigo estatildeo no proacuteximo slide O graacutefico
gerado estaacute na figura ao lado O arquivo de
entrada eacute o data2csv A equaccedilatildeo
polinomial estaacute mostrada abaixo Veja que
o resultado estaacute proacuteximo ao obtido com o
Mathematica para o polinocircmio de grau 5
Programa qsar1py
wwwpythonorg
def main()
Call read_csv()
xymy_deg = read_csv()
Call lsq()
p = lsq(xymy_deg)
Call gen_plot()
gen_plot(xyp)
main() 22
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo main() Inicialmente chamamos a funccedilatildeo read_csv() que
retorna as colunas lidas como array e o grau do polinocircmio a ser aproximado aos
pontos experimentais Em seguida eacute chamada a funccedilatildeo lsq() que determina o
polinocircmio Por uacuteltimo eacute chamada a funccedilatildeo gen_plot() que gera o graacutefico
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
1051
1
N
iix
Nx
035131
1
N
iiy
Ny
x y x- ltxgt y-ltygt (x-ltxgt)(y-ltygt) (x-ltxgt)^2
01 125 -095 -11785 1119575 09025
02 15 -085 -11535 980475 07225
03 4 -075 -9035 677625 05625
04 51 -065 -7935 515775 04225
05 63 -055 -6735 370425 03025
06 5 -045 -8035 361575 02025
07 87 -035 -4335 151725 01225
08 9 -025 -4035 100875 00625
09 11 -015 -2035 030525 00225
1 14 -005 0965 -004825 00025
11 1375 005 0715 003575 00025
12 15 015 1965 029475 00225
13 18 025 4965 124125 00625
14 175 035 4465 156275 01225
15 19 045 5965 268425 02025
16 17 055 3965 218075 03025
17 21 065 7965 517725 04225
18 225 075 9465 709875 05625
19 26 085 12965 1102025 07225
2 251 095 12065 1146175 09025
105 13035 85795 665
90212
656
79585
)(
))((
1
2
11
N
ii
N
iii
xx
yyxx
05120519021203513
10
xy
Temos a seguinte sequencia de
caacutelculos
1) Meacutedias
2) Caacutelculo do 1
3) Caacutelculo do 0
Quantitative Structure Activity Relationship
wwwpythonorg
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
01 125 02 15 03 4 04 51 05 63 06 5 07 87 08 9 09 11
1 14 11 1375 12 15 13 18 14 175 15 19 16 17 17 21 18 225 19 26
2 251
y = 1x + 0
y =12902x ndash 0512 X Y
No final temos a melhor reta (equaccedilatildeo de regressatildeo) indicada abaixo
Na elaboraccedilatildeo de modelos de QSAR normalmente temos mais de uma
variaacutevel independente o que leva ao uso de regressatildeo linear muacuteltipla
Outro niacutevel de abstraccedilatildeo do modelo de QSAR eacute o uso de variaacuteveis
independentes natildeo lineares Tais meacutetodos de aproximaccedilatildeo estatildeo
disponiacuteveis em pacotes como o Mathematica (wwwwolframcom) Aleacutem
disso podemos implementar os meacutetodos de regressatildeo linear a partir
da linguagem de programaccedilatildeo Python
Quantitative Structure Activity Relationship
wwwpythonorg
Tanto nos modelos de QSAR obtidos por regressatildeo linear como para aqueles obtidos
por regressatildeo linear muacuteltipla ou mesmo natildeo linear temos que acessar a qualidade do
modelo de regressatildeo ou seja a qualidade do ajuste da curva (ou reta) modelada
contra os pontos experimentais (yi) Um dos paracircmetros usados eacute o coeficiente de
correlaccedilatildeo quadrado (R2) Considere que ycalci satildeo valores calculados a partir da
equaccedilatildeo de regressatildeo usando observaccedilotildees experimentais xi Assim temos os
seguintes termos soma total dos quadrados (Total Sum of Squares TSS) soma
dos quadrados ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos
quadrados (Residual Sum of Squares)
Que satildeo usados para o caacutelculo de R2 como segue
N
ii yy
1
2TSS
N
iicalc yy
1
2
ESS
N
iicalci yy
1
2RSS
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
x y x-ltxgt y-ltygt ycalci (y-ycalci)^2 (y-ltygt)^2 (ycalci-lty))^2
01 125 -095 -11785 07782 022259524 138886225 1502291462
02 15 -085 -11535 20684 032307856 133056225 1202663156
03 4 -075 -9035 33586 041139396 81631225 9363271696
04 51 -065 -7935 46488 020358144 62964225 7032835044
05 63 -055 -6735 5939 0130321 45360225 50353216
06 5 -045 -8035 72292 496933264 64561225 3370731364
07 87 -035 -4335 85194 003261636 18792225 2039064336
08 9 -025 -4035 98096 065545216 16281225 1040320516
09 11 -015 -2035 110998 000996004 4141225 374499904
1 14 -005 0965 1239 25921 0931225 0416025
11 1375 005 0715 136802 000487204 0511225 041628304
12 15 015 1965 149704 000087616 3861225 374577316
13 18 025 4965 162606 302551236 24651225 1040449536
14 175 035 4465 175508 000258064 19936225 2039244964
15 19 045 5965 18841 0025281 35581225 33709636
16 17 055 3965 201312 980441344 15721225 5035605444
17 21 065 7965 214214 017757796 63441225 7033170496
18 225 075 9465 227116 004477456 89586225 9363658756
19 26 085 12965 240018 399280324 168091225 1202707022
2 251 095 12065 25292 0036864 145564225 150234049
105 13035 266659868 11335505 1106969667
1133551TSS1
2
N
ii yy 2666599RSS
1
2
N
iicalci yy
976505511133
66599261
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
O coeficiente de correlaccedilatildeo quadrado mede a qualidade do ajuste da funccedilatildeo
teoacuterica (equaccedilatildeo de regressatildeo) aos pontos experimentais Esse iacutendice varia de 0
a 1 O valor zero natildeo indica correlaccedilatildeo entre os dados Para R2 igual a 1 ou proacuteximo
desse temos uma equaccedilatildeo de regressatildeo com boa correlaccedilatildeo como os dados
experimentais A equaccedilatildeo de regressatildeo obtida no exemplo apresentado tem
excelente correlaccedilatildeo R2 = 09765 tal concordacircncia pode ser vista na anaacutelise do
graacutefico onde todos os pontos experimentais estatildeo proacuteximos agrave reta de regressatildeo
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
y = 1x + 0
y =12902x ndash 0512
R2 = 09765
Quantitative Structure Activity Relationship
wwwpythonorg
Eacute oacutebvio que sistemas bioloacutegicos
caracterizados por uma dada atividade
raramente podem ser modelados com
funccedilotildees lineares simples A introduccedilatildeo de
variaacuteveis independentes no modelo de
QSAR leva muitas vezes a um modelo
mais robusto onde caracteriacutesticas
quiacutemicas relevantes (descritores) satildeo
considerados Contudo o princiacutepio da
parcimocircnia deve ser adotado ou seja
nem sempre um modelo com mais
variaacuteveis independentes eacute o mais
adequado para modelar a atividade
bioloacutegica Colocaremos como exemplo o
uso do programa Mathematica para
encontrarmos modelos matemaacuteticos para
conjuntos de dados Depois
implementaremos em Python
Polinocircmio de grau 2 (-0634408x2 + 124534x + 00807008)
usado para aproximar os cinco pontos experimentais
mostrados acima
O graacutefico foi gerado com o programa Mathematica
(httpdemonstrationswolframcomCurveFitting)
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
A ideacuteia baacutesica atraacutes da aproximaccedilatildeo de uma
funccedilatildeo eacute usar uma lista de funccedilotildees
matemaacuteticas especificadas antecipadamente
e tentar encontrar uma combinaccedilatildeo linear
dessas funccedilotildees dadas de forma que essa
combinaccedilatildeo linear de funccedilotildees fique o mais
proacuteximo possiacutevel do conjunto de dados
Vamos ilustrar as ideacuteias principais com
exemplos Vamos considerar um conjunto
formado pelos 19 pontos experimentais
indicados na tabela ao lado
Para colocar essas informaccedilotildees no
Mathematica digitamos
x y
73 348105
74 35381
75 358167
76 406048
77 470132
78 424577
79 431319
80 373182
81 336343
82 280988
83 283107
84 299822
85 272542
86 33407
87 354875
88 381126
89 4157
90 421533
91 395108
data=733481057435381753581677640604877 470132
78 42457779 431319 803731828133634382280988
832831078429982285272542863340787354875883811
268941579042153391395108
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar o graacutefico dos pontos experimentais e conectaacute-los Para isto definimos lp1
e lp2 que no Mathematica fica da seguinte forma
lp1=ListPlot[dataPlotStyle-gtPointSize[003]DisplayFunction-gtIdentity]
lp2=ListPlot[dataPlotJoined-gtTrue DisplayFunction-gtIdentity]
Agora preparamos o graacutefico digitando
Show[lp1lp2 DisplayFunction-gt$DisplayFunction]
O resultado eacute mostrado ao lado
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar curvas que ajustem-se ao conjunto de dados experimentais Podemos
testar vaacuterios cenaacuterios esta eacute uma das vantagens de usarmos um pacote poderoso
como o Mathematica ou ainda uma linguagem de programaccedilatildeo como o Python que
veremos adiante Para gerarmos um ajuste por regressatildeo linear e graficarmos os
resultados usamos os seguintes comandos
Clear[p]
p=Fit[data1xx]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 422346 -00695772 x
Vemos pelo graacutefico que o ajuste eacute
insatisfatoacuterio
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos tentar uma nova curva com um polinocircmio com x e x2 para isto basta
mudarmos a linha de comando Fit (indicado em vermelho) o restante eacute mantido
Clear[p]
p=Fit[data1xx^2x]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 549149 -124887 x+00757266 x2
Vemos pelo graacutefico que o ajuste eacute
Insatisfatoacuterio No proacuteximo slide temos
aproximaccedilotildees para polinocircmios ateacute o grau 5
Quantitative Structure Activity Relationship
wwwpythonorg
Nas figuras a seguir temos ajustes para diversas funccedilotildees polinomiais
y = -136156+508522 x-629506 x2+00258975 x3 y = -198884+959783 x-173196 x2+138539 x3-000414481 x4
y = 282867times106-176099 x+4376 x2-542556 x3+0335627 x4-0000828711 x5
A uacuteltima funccedilatildeo (com termos ateacute a quinta potecircncia)
eacute a que melhor se ajusta aos pontos experimentais
Quantitative Structure Activity Relationship
wwwpythonorg
Aproximaccedilatildeo com polinocircmio de grau 3 Aproximaccedilatildeo com polinocircmio de grau 4
Type CSV file name =gt data2csv
Type polynomial equation degree =gt 5
Best fit polynomial equation
5 4 3 2
-00008287 x + 03356 x - 5426 x + 4376 x - 1761e+05 x + 2829e+0
21
Usaremos o programa qsar1py as linhas
de coacutedigo estatildeo no proacuteximo slide O graacutefico
gerado estaacute na figura ao lado O arquivo de
entrada eacute o data2csv A equaccedilatildeo
polinomial estaacute mostrada abaixo Veja que
o resultado estaacute proacuteximo ao obtido com o
Mathematica para o polinocircmio de grau 5
Programa qsar1py
wwwpythonorg
def main()
Call read_csv()
xymy_deg = read_csv()
Call lsq()
p = lsq(xymy_deg)
Call gen_plot()
gen_plot(xyp)
main() 22
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo main() Inicialmente chamamos a funccedilatildeo read_csv() que
retorna as colunas lidas como array e o grau do polinocircmio a ser aproximado aos
pontos experimentais Em seguida eacute chamada a funccedilatildeo lsq() que determina o
polinocircmio Por uacuteltimo eacute chamada a funccedilatildeo gen_plot() que gera o graacutefico
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
01 125 02 15 03 4 04 51 05 63 06 5 07 87 08 9 09 11
1 14 11 1375 12 15 13 18 14 175 15 19 16 17 17 21 18 225 19 26
2 251
y = 1x + 0
y =12902x ndash 0512 X Y
No final temos a melhor reta (equaccedilatildeo de regressatildeo) indicada abaixo
Na elaboraccedilatildeo de modelos de QSAR normalmente temos mais de uma
variaacutevel independente o que leva ao uso de regressatildeo linear muacuteltipla
Outro niacutevel de abstraccedilatildeo do modelo de QSAR eacute o uso de variaacuteveis
independentes natildeo lineares Tais meacutetodos de aproximaccedilatildeo estatildeo
disponiacuteveis em pacotes como o Mathematica (wwwwolframcom) Aleacutem
disso podemos implementar os meacutetodos de regressatildeo linear a partir
da linguagem de programaccedilatildeo Python
Quantitative Structure Activity Relationship
wwwpythonorg
Tanto nos modelos de QSAR obtidos por regressatildeo linear como para aqueles obtidos
por regressatildeo linear muacuteltipla ou mesmo natildeo linear temos que acessar a qualidade do
modelo de regressatildeo ou seja a qualidade do ajuste da curva (ou reta) modelada
contra os pontos experimentais (yi) Um dos paracircmetros usados eacute o coeficiente de
correlaccedilatildeo quadrado (R2) Considere que ycalci satildeo valores calculados a partir da
equaccedilatildeo de regressatildeo usando observaccedilotildees experimentais xi Assim temos os
seguintes termos soma total dos quadrados (Total Sum of Squares TSS) soma
dos quadrados ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos
quadrados (Residual Sum of Squares)
Que satildeo usados para o caacutelculo de R2 como segue
N
ii yy
1
2TSS
N
iicalc yy
1
2
ESS
N
iicalci yy
1
2RSS
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
x y x-ltxgt y-ltygt ycalci (y-ycalci)^2 (y-ltygt)^2 (ycalci-lty))^2
01 125 -095 -11785 07782 022259524 138886225 1502291462
02 15 -085 -11535 20684 032307856 133056225 1202663156
03 4 -075 -9035 33586 041139396 81631225 9363271696
04 51 -065 -7935 46488 020358144 62964225 7032835044
05 63 -055 -6735 5939 0130321 45360225 50353216
06 5 -045 -8035 72292 496933264 64561225 3370731364
07 87 -035 -4335 85194 003261636 18792225 2039064336
08 9 -025 -4035 98096 065545216 16281225 1040320516
09 11 -015 -2035 110998 000996004 4141225 374499904
1 14 -005 0965 1239 25921 0931225 0416025
11 1375 005 0715 136802 000487204 0511225 041628304
12 15 015 1965 149704 000087616 3861225 374577316
13 18 025 4965 162606 302551236 24651225 1040449536
14 175 035 4465 175508 000258064 19936225 2039244964
15 19 045 5965 18841 0025281 35581225 33709636
16 17 055 3965 201312 980441344 15721225 5035605444
17 21 065 7965 214214 017757796 63441225 7033170496
18 225 075 9465 227116 004477456 89586225 9363658756
19 26 085 12965 240018 399280324 168091225 1202707022
2 251 095 12065 25292 0036864 145564225 150234049
105 13035 266659868 11335505 1106969667
1133551TSS1
2
N
ii yy 2666599RSS
1
2
N
iicalci yy
976505511133
66599261
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
O coeficiente de correlaccedilatildeo quadrado mede a qualidade do ajuste da funccedilatildeo
teoacuterica (equaccedilatildeo de regressatildeo) aos pontos experimentais Esse iacutendice varia de 0
a 1 O valor zero natildeo indica correlaccedilatildeo entre os dados Para R2 igual a 1 ou proacuteximo
desse temos uma equaccedilatildeo de regressatildeo com boa correlaccedilatildeo como os dados
experimentais A equaccedilatildeo de regressatildeo obtida no exemplo apresentado tem
excelente correlaccedilatildeo R2 = 09765 tal concordacircncia pode ser vista na anaacutelise do
graacutefico onde todos os pontos experimentais estatildeo proacuteximos agrave reta de regressatildeo
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
y = 1x + 0
y =12902x ndash 0512
R2 = 09765
Quantitative Structure Activity Relationship
wwwpythonorg
Eacute oacutebvio que sistemas bioloacutegicos
caracterizados por uma dada atividade
raramente podem ser modelados com
funccedilotildees lineares simples A introduccedilatildeo de
variaacuteveis independentes no modelo de
QSAR leva muitas vezes a um modelo
mais robusto onde caracteriacutesticas
quiacutemicas relevantes (descritores) satildeo
considerados Contudo o princiacutepio da
parcimocircnia deve ser adotado ou seja
nem sempre um modelo com mais
variaacuteveis independentes eacute o mais
adequado para modelar a atividade
bioloacutegica Colocaremos como exemplo o
uso do programa Mathematica para
encontrarmos modelos matemaacuteticos para
conjuntos de dados Depois
implementaremos em Python
Polinocircmio de grau 2 (-0634408x2 + 124534x + 00807008)
usado para aproximar os cinco pontos experimentais
mostrados acima
O graacutefico foi gerado com o programa Mathematica
(httpdemonstrationswolframcomCurveFitting)
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
A ideacuteia baacutesica atraacutes da aproximaccedilatildeo de uma
funccedilatildeo eacute usar uma lista de funccedilotildees
matemaacuteticas especificadas antecipadamente
e tentar encontrar uma combinaccedilatildeo linear
dessas funccedilotildees dadas de forma que essa
combinaccedilatildeo linear de funccedilotildees fique o mais
proacuteximo possiacutevel do conjunto de dados
Vamos ilustrar as ideacuteias principais com
exemplos Vamos considerar um conjunto
formado pelos 19 pontos experimentais
indicados na tabela ao lado
Para colocar essas informaccedilotildees no
Mathematica digitamos
x y
73 348105
74 35381
75 358167
76 406048
77 470132
78 424577
79 431319
80 373182
81 336343
82 280988
83 283107
84 299822
85 272542
86 33407
87 354875
88 381126
89 4157
90 421533
91 395108
data=733481057435381753581677640604877 470132
78 42457779 431319 803731828133634382280988
832831078429982285272542863340787354875883811
268941579042153391395108
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar o graacutefico dos pontos experimentais e conectaacute-los Para isto definimos lp1
e lp2 que no Mathematica fica da seguinte forma
lp1=ListPlot[dataPlotStyle-gtPointSize[003]DisplayFunction-gtIdentity]
lp2=ListPlot[dataPlotJoined-gtTrue DisplayFunction-gtIdentity]
Agora preparamos o graacutefico digitando
Show[lp1lp2 DisplayFunction-gt$DisplayFunction]
O resultado eacute mostrado ao lado
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar curvas que ajustem-se ao conjunto de dados experimentais Podemos
testar vaacuterios cenaacuterios esta eacute uma das vantagens de usarmos um pacote poderoso
como o Mathematica ou ainda uma linguagem de programaccedilatildeo como o Python que
veremos adiante Para gerarmos um ajuste por regressatildeo linear e graficarmos os
resultados usamos os seguintes comandos
Clear[p]
p=Fit[data1xx]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 422346 -00695772 x
Vemos pelo graacutefico que o ajuste eacute
insatisfatoacuterio
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos tentar uma nova curva com um polinocircmio com x e x2 para isto basta
mudarmos a linha de comando Fit (indicado em vermelho) o restante eacute mantido
Clear[p]
p=Fit[data1xx^2x]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 549149 -124887 x+00757266 x2
Vemos pelo graacutefico que o ajuste eacute
Insatisfatoacuterio No proacuteximo slide temos
aproximaccedilotildees para polinocircmios ateacute o grau 5
Quantitative Structure Activity Relationship
wwwpythonorg
Nas figuras a seguir temos ajustes para diversas funccedilotildees polinomiais
y = -136156+508522 x-629506 x2+00258975 x3 y = -198884+959783 x-173196 x2+138539 x3-000414481 x4
y = 282867times106-176099 x+4376 x2-542556 x3+0335627 x4-0000828711 x5
A uacuteltima funccedilatildeo (com termos ateacute a quinta potecircncia)
eacute a que melhor se ajusta aos pontos experimentais
Quantitative Structure Activity Relationship
wwwpythonorg
Aproximaccedilatildeo com polinocircmio de grau 3 Aproximaccedilatildeo com polinocircmio de grau 4
Type CSV file name =gt data2csv
Type polynomial equation degree =gt 5
Best fit polynomial equation
5 4 3 2
-00008287 x + 03356 x - 5426 x + 4376 x - 1761e+05 x + 2829e+0
21
Usaremos o programa qsar1py as linhas
de coacutedigo estatildeo no proacuteximo slide O graacutefico
gerado estaacute na figura ao lado O arquivo de
entrada eacute o data2csv A equaccedilatildeo
polinomial estaacute mostrada abaixo Veja que
o resultado estaacute proacuteximo ao obtido com o
Mathematica para o polinocircmio de grau 5
Programa qsar1py
wwwpythonorg
def main()
Call read_csv()
xymy_deg = read_csv()
Call lsq()
p = lsq(xymy_deg)
Call gen_plot()
gen_plot(xyp)
main() 22
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo main() Inicialmente chamamos a funccedilatildeo read_csv() que
retorna as colunas lidas como array e o grau do polinocircmio a ser aproximado aos
pontos experimentais Em seguida eacute chamada a funccedilatildeo lsq() que determina o
polinocircmio Por uacuteltimo eacute chamada a funccedilatildeo gen_plot() que gera o graacutefico
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Tanto nos modelos de QSAR obtidos por regressatildeo linear como para aqueles obtidos
por regressatildeo linear muacuteltipla ou mesmo natildeo linear temos que acessar a qualidade do
modelo de regressatildeo ou seja a qualidade do ajuste da curva (ou reta) modelada
contra os pontos experimentais (yi) Um dos paracircmetros usados eacute o coeficiente de
correlaccedilatildeo quadrado (R2) Considere que ycalci satildeo valores calculados a partir da
equaccedilatildeo de regressatildeo usando observaccedilotildees experimentais xi Assim temos os
seguintes termos soma total dos quadrados (Total Sum of Squares TSS) soma
dos quadrados ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos
quadrados (Residual Sum of Squares)
Que satildeo usados para o caacutelculo de R2 como segue
N
ii yy
1
2TSS
N
iicalc yy
1
2
ESS
N
iicalci yy
1
2RSS
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
x y x-ltxgt y-ltygt ycalci (y-ycalci)^2 (y-ltygt)^2 (ycalci-lty))^2
01 125 -095 -11785 07782 022259524 138886225 1502291462
02 15 -085 -11535 20684 032307856 133056225 1202663156
03 4 -075 -9035 33586 041139396 81631225 9363271696
04 51 -065 -7935 46488 020358144 62964225 7032835044
05 63 -055 -6735 5939 0130321 45360225 50353216
06 5 -045 -8035 72292 496933264 64561225 3370731364
07 87 -035 -4335 85194 003261636 18792225 2039064336
08 9 -025 -4035 98096 065545216 16281225 1040320516
09 11 -015 -2035 110998 000996004 4141225 374499904
1 14 -005 0965 1239 25921 0931225 0416025
11 1375 005 0715 136802 000487204 0511225 041628304
12 15 015 1965 149704 000087616 3861225 374577316
13 18 025 4965 162606 302551236 24651225 1040449536
14 175 035 4465 175508 000258064 19936225 2039244964
15 19 045 5965 18841 0025281 35581225 33709636
16 17 055 3965 201312 980441344 15721225 5035605444
17 21 065 7965 214214 017757796 63441225 7033170496
18 225 075 9465 227116 004477456 89586225 9363658756
19 26 085 12965 240018 399280324 168091225 1202707022
2 251 095 12065 25292 0036864 145564225 150234049
105 13035 266659868 11335505 1106969667
1133551TSS1
2
N
ii yy 2666599RSS
1
2
N
iicalci yy
976505511133
66599261
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
O coeficiente de correlaccedilatildeo quadrado mede a qualidade do ajuste da funccedilatildeo
teoacuterica (equaccedilatildeo de regressatildeo) aos pontos experimentais Esse iacutendice varia de 0
a 1 O valor zero natildeo indica correlaccedilatildeo entre os dados Para R2 igual a 1 ou proacuteximo
desse temos uma equaccedilatildeo de regressatildeo com boa correlaccedilatildeo como os dados
experimentais A equaccedilatildeo de regressatildeo obtida no exemplo apresentado tem
excelente correlaccedilatildeo R2 = 09765 tal concordacircncia pode ser vista na anaacutelise do
graacutefico onde todos os pontos experimentais estatildeo proacuteximos agrave reta de regressatildeo
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
y = 1x + 0
y =12902x ndash 0512
R2 = 09765
Quantitative Structure Activity Relationship
wwwpythonorg
Eacute oacutebvio que sistemas bioloacutegicos
caracterizados por uma dada atividade
raramente podem ser modelados com
funccedilotildees lineares simples A introduccedilatildeo de
variaacuteveis independentes no modelo de
QSAR leva muitas vezes a um modelo
mais robusto onde caracteriacutesticas
quiacutemicas relevantes (descritores) satildeo
considerados Contudo o princiacutepio da
parcimocircnia deve ser adotado ou seja
nem sempre um modelo com mais
variaacuteveis independentes eacute o mais
adequado para modelar a atividade
bioloacutegica Colocaremos como exemplo o
uso do programa Mathematica para
encontrarmos modelos matemaacuteticos para
conjuntos de dados Depois
implementaremos em Python
Polinocircmio de grau 2 (-0634408x2 + 124534x + 00807008)
usado para aproximar os cinco pontos experimentais
mostrados acima
O graacutefico foi gerado com o programa Mathematica
(httpdemonstrationswolframcomCurveFitting)
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
A ideacuteia baacutesica atraacutes da aproximaccedilatildeo de uma
funccedilatildeo eacute usar uma lista de funccedilotildees
matemaacuteticas especificadas antecipadamente
e tentar encontrar uma combinaccedilatildeo linear
dessas funccedilotildees dadas de forma que essa
combinaccedilatildeo linear de funccedilotildees fique o mais
proacuteximo possiacutevel do conjunto de dados
Vamos ilustrar as ideacuteias principais com
exemplos Vamos considerar um conjunto
formado pelos 19 pontos experimentais
indicados na tabela ao lado
Para colocar essas informaccedilotildees no
Mathematica digitamos
x y
73 348105
74 35381
75 358167
76 406048
77 470132
78 424577
79 431319
80 373182
81 336343
82 280988
83 283107
84 299822
85 272542
86 33407
87 354875
88 381126
89 4157
90 421533
91 395108
data=733481057435381753581677640604877 470132
78 42457779 431319 803731828133634382280988
832831078429982285272542863340787354875883811
268941579042153391395108
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar o graacutefico dos pontos experimentais e conectaacute-los Para isto definimos lp1
e lp2 que no Mathematica fica da seguinte forma
lp1=ListPlot[dataPlotStyle-gtPointSize[003]DisplayFunction-gtIdentity]
lp2=ListPlot[dataPlotJoined-gtTrue DisplayFunction-gtIdentity]
Agora preparamos o graacutefico digitando
Show[lp1lp2 DisplayFunction-gt$DisplayFunction]
O resultado eacute mostrado ao lado
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar curvas que ajustem-se ao conjunto de dados experimentais Podemos
testar vaacuterios cenaacuterios esta eacute uma das vantagens de usarmos um pacote poderoso
como o Mathematica ou ainda uma linguagem de programaccedilatildeo como o Python que
veremos adiante Para gerarmos um ajuste por regressatildeo linear e graficarmos os
resultados usamos os seguintes comandos
Clear[p]
p=Fit[data1xx]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 422346 -00695772 x
Vemos pelo graacutefico que o ajuste eacute
insatisfatoacuterio
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos tentar uma nova curva com um polinocircmio com x e x2 para isto basta
mudarmos a linha de comando Fit (indicado em vermelho) o restante eacute mantido
Clear[p]
p=Fit[data1xx^2x]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 549149 -124887 x+00757266 x2
Vemos pelo graacutefico que o ajuste eacute
Insatisfatoacuterio No proacuteximo slide temos
aproximaccedilotildees para polinocircmios ateacute o grau 5
Quantitative Structure Activity Relationship
wwwpythonorg
Nas figuras a seguir temos ajustes para diversas funccedilotildees polinomiais
y = -136156+508522 x-629506 x2+00258975 x3 y = -198884+959783 x-173196 x2+138539 x3-000414481 x4
y = 282867times106-176099 x+4376 x2-542556 x3+0335627 x4-0000828711 x5
A uacuteltima funccedilatildeo (com termos ateacute a quinta potecircncia)
eacute a que melhor se ajusta aos pontos experimentais
Quantitative Structure Activity Relationship
wwwpythonorg
Aproximaccedilatildeo com polinocircmio de grau 3 Aproximaccedilatildeo com polinocircmio de grau 4
Type CSV file name =gt data2csv
Type polynomial equation degree =gt 5
Best fit polynomial equation
5 4 3 2
-00008287 x + 03356 x - 5426 x + 4376 x - 1761e+05 x + 2829e+0
21
Usaremos o programa qsar1py as linhas
de coacutedigo estatildeo no proacuteximo slide O graacutefico
gerado estaacute na figura ao lado O arquivo de
entrada eacute o data2csv A equaccedilatildeo
polinomial estaacute mostrada abaixo Veja que
o resultado estaacute proacuteximo ao obtido com o
Mathematica para o polinocircmio de grau 5
Programa qsar1py
wwwpythonorg
def main()
Call read_csv()
xymy_deg = read_csv()
Call lsq()
p = lsq(xymy_deg)
Call gen_plot()
gen_plot(xyp)
main() 22
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo main() Inicialmente chamamos a funccedilatildeo read_csv() que
retorna as colunas lidas como array e o grau do polinocircmio a ser aproximado aos
pontos experimentais Em seguida eacute chamada a funccedilatildeo lsq() que determina o
polinocircmio Por uacuteltimo eacute chamada a funccedilatildeo gen_plot() que gera o graacutefico
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
x y x-ltxgt y-ltygt ycalci (y-ycalci)^2 (y-ltygt)^2 (ycalci-lty))^2
01 125 -095 -11785 07782 022259524 138886225 1502291462
02 15 -085 -11535 20684 032307856 133056225 1202663156
03 4 -075 -9035 33586 041139396 81631225 9363271696
04 51 -065 -7935 46488 020358144 62964225 7032835044
05 63 -055 -6735 5939 0130321 45360225 50353216
06 5 -045 -8035 72292 496933264 64561225 3370731364
07 87 -035 -4335 85194 003261636 18792225 2039064336
08 9 -025 -4035 98096 065545216 16281225 1040320516
09 11 -015 -2035 110998 000996004 4141225 374499904
1 14 -005 0965 1239 25921 0931225 0416025
11 1375 005 0715 136802 000487204 0511225 041628304
12 15 015 1965 149704 000087616 3861225 374577316
13 18 025 4965 162606 302551236 24651225 1040449536
14 175 035 4465 175508 000258064 19936225 2039244964
15 19 045 5965 18841 0025281 35581225 33709636
16 17 055 3965 201312 980441344 15721225 5035605444
17 21 065 7965 214214 017757796 63441225 7033170496
18 225 075 9465 227116 004477456 89586225 9363658756
19 26 085 12965 240018 399280324 168091225 1202707022
2 251 095 12065 25292 0036864 145564225 150234049
105 13035 266659868 11335505 1106969667
1133551TSS1
2
N
ii yy 2666599RSS
1
2
N
iicalci yy
976505511133
66599261
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
O coeficiente de correlaccedilatildeo quadrado mede a qualidade do ajuste da funccedilatildeo
teoacuterica (equaccedilatildeo de regressatildeo) aos pontos experimentais Esse iacutendice varia de 0
a 1 O valor zero natildeo indica correlaccedilatildeo entre os dados Para R2 igual a 1 ou proacuteximo
desse temos uma equaccedilatildeo de regressatildeo com boa correlaccedilatildeo como os dados
experimentais A equaccedilatildeo de regressatildeo obtida no exemplo apresentado tem
excelente correlaccedilatildeo R2 = 09765 tal concordacircncia pode ser vista na anaacutelise do
graacutefico onde todos os pontos experimentais estatildeo proacuteximos agrave reta de regressatildeo
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
y = 1x + 0
y =12902x ndash 0512
R2 = 09765
Quantitative Structure Activity Relationship
wwwpythonorg
Eacute oacutebvio que sistemas bioloacutegicos
caracterizados por uma dada atividade
raramente podem ser modelados com
funccedilotildees lineares simples A introduccedilatildeo de
variaacuteveis independentes no modelo de
QSAR leva muitas vezes a um modelo
mais robusto onde caracteriacutesticas
quiacutemicas relevantes (descritores) satildeo
considerados Contudo o princiacutepio da
parcimocircnia deve ser adotado ou seja
nem sempre um modelo com mais
variaacuteveis independentes eacute o mais
adequado para modelar a atividade
bioloacutegica Colocaremos como exemplo o
uso do programa Mathematica para
encontrarmos modelos matemaacuteticos para
conjuntos de dados Depois
implementaremos em Python
Polinocircmio de grau 2 (-0634408x2 + 124534x + 00807008)
usado para aproximar os cinco pontos experimentais
mostrados acima
O graacutefico foi gerado com o programa Mathematica
(httpdemonstrationswolframcomCurveFitting)
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
A ideacuteia baacutesica atraacutes da aproximaccedilatildeo de uma
funccedilatildeo eacute usar uma lista de funccedilotildees
matemaacuteticas especificadas antecipadamente
e tentar encontrar uma combinaccedilatildeo linear
dessas funccedilotildees dadas de forma que essa
combinaccedilatildeo linear de funccedilotildees fique o mais
proacuteximo possiacutevel do conjunto de dados
Vamos ilustrar as ideacuteias principais com
exemplos Vamos considerar um conjunto
formado pelos 19 pontos experimentais
indicados na tabela ao lado
Para colocar essas informaccedilotildees no
Mathematica digitamos
x y
73 348105
74 35381
75 358167
76 406048
77 470132
78 424577
79 431319
80 373182
81 336343
82 280988
83 283107
84 299822
85 272542
86 33407
87 354875
88 381126
89 4157
90 421533
91 395108
data=733481057435381753581677640604877 470132
78 42457779 431319 803731828133634382280988
832831078429982285272542863340787354875883811
268941579042153391395108
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar o graacutefico dos pontos experimentais e conectaacute-los Para isto definimos lp1
e lp2 que no Mathematica fica da seguinte forma
lp1=ListPlot[dataPlotStyle-gtPointSize[003]DisplayFunction-gtIdentity]
lp2=ListPlot[dataPlotJoined-gtTrue DisplayFunction-gtIdentity]
Agora preparamos o graacutefico digitando
Show[lp1lp2 DisplayFunction-gt$DisplayFunction]
O resultado eacute mostrado ao lado
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar curvas que ajustem-se ao conjunto de dados experimentais Podemos
testar vaacuterios cenaacuterios esta eacute uma das vantagens de usarmos um pacote poderoso
como o Mathematica ou ainda uma linguagem de programaccedilatildeo como o Python que
veremos adiante Para gerarmos um ajuste por regressatildeo linear e graficarmos os
resultados usamos os seguintes comandos
Clear[p]
p=Fit[data1xx]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 422346 -00695772 x
Vemos pelo graacutefico que o ajuste eacute
insatisfatoacuterio
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos tentar uma nova curva com um polinocircmio com x e x2 para isto basta
mudarmos a linha de comando Fit (indicado em vermelho) o restante eacute mantido
Clear[p]
p=Fit[data1xx^2x]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 549149 -124887 x+00757266 x2
Vemos pelo graacutefico que o ajuste eacute
Insatisfatoacuterio No proacuteximo slide temos
aproximaccedilotildees para polinocircmios ateacute o grau 5
Quantitative Structure Activity Relationship
wwwpythonorg
Nas figuras a seguir temos ajustes para diversas funccedilotildees polinomiais
y = -136156+508522 x-629506 x2+00258975 x3 y = -198884+959783 x-173196 x2+138539 x3-000414481 x4
y = 282867times106-176099 x+4376 x2-542556 x3+0335627 x4-0000828711 x5
A uacuteltima funccedilatildeo (com termos ateacute a quinta potecircncia)
eacute a que melhor se ajusta aos pontos experimentais
Quantitative Structure Activity Relationship
wwwpythonorg
Aproximaccedilatildeo com polinocircmio de grau 3 Aproximaccedilatildeo com polinocircmio de grau 4
Type CSV file name =gt data2csv
Type polynomial equation degree =gt 5
Best fit polynomial equation
5 4 3 2
-00008287 x + 03356 x - 5426 x + 4376 x - 1761e+05 x + 2829e+0
21
Usaremos o programa qsar1py as linhas
de coacutedigo estatildeo no proacuteximo slide O graacutefico
gerado estaacute na figura ao lado O arquivo de
entrada eacute o data2csv A equaccedilatildeo
polinomial estaacute mostrada abaixo Veja que
o resultado estaacute proacuteximo ao obtido com o
Mathematica para o polinocircmio de grau 5
Programa qsar1py
wwwpythonorg
def main()
Call read_csv()
xymy_deg = read_csv()
Call lsq()
p = lsq(xymy_deg)
Call gen_plot()
gen_plot(xyp)
main() 22
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo main() Inicialmente chamamos a funccedilatildeo read_csv() que
retorna as colunas lidas como array e o grau do polinocircmio a ser aproximado aos
pontos experimentais Em seguida eacute chamada a funccedilatildeo lsq() que determina o
polinocircmio Por uacuteltimo eacute chamada a funccedilatildeo gen_plot() que gera o graacutefico
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
O coeficiente de correlaccedilatildeo quadrado mede a qualidade do ajuste da funccedilatildeo
teoacuterica (equaccedilatildeo de regressatildeo) aos pontos experimentais Esse iacutendice varia de 0
a 1 O valor zero natildeo indica correlaccedilatildeo entre os dados Para R2 igual a 1 ou proacuteximo
desse temos uma equaccedilatildeo de regressatildeo com boa correlaccedilatildeo como os dados
experimentais A equaccedilatildeo de regressatildeo obtida no exemplo apresentado tem
excelente correlaccedilatildeo R2 = 09765 tal concordacircncia pode ser vista na anaacutelise do
graacutefico onde todos os pontos experimentais estatildeo proacuteximos agrave reta de regressatildeo
0
5
10
15
20
25
30
0 05 1 15 2 25
Var
iaacuteve
l de
pe
nd
en
te
Variaacutevel independente
y = 1x + 0
y =12902x ndash 0512
R2 = 09765
Quantitative Structure Activity Relationship
wwwpythonorg
Eacute oacutebvio que sistemas bioloacutegicos
caracterizados por uma dada atividade
raramente podem ser modelados com
funccedilotildees lineares simples A introduccedilatildeo de
variaacuteveis independentes no modelo de
QSAR leva muitas vezes a um modelo
mais robusto onde caracteriacutesticas
quiacutemicas relevantes (descritores) satildeo
considerados Contudo o princiacutepio da
parcimocircnia deve ser adotado ou seja
nem sempre um modelo com mais
variaacuteveis independentes eacute o mais
adequado para modelar a atividade
bioloacutegica Colocaremos como exemplo o
uso do programa Mathematica para
encontrarmos modelos matemaacuteticos para
conjuntos de dados Depois
implementaremos em Python
Polinocircmio de grau 2 (-0634408x2 + 124534x + 00807008)
usado para aproximar os cinco pontos experimentais
mostrados acima
O graacutefico foi gerado com o programa Mathematica
(httpdemonstrationswolframcomCurveFitting)
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
A ideacuteia baacutesica atraacutes da aproximaccedilatildeo de uma
funccedilatildeo eacute usar uma lista de funccedilotildees
matemaacuteticas especificadas antecipadamente
e tentar encontrar uma combinaccedilatildeo linear
dessas funccedilotildees dadas de forma que essa
combinaccedilatildeo linear de funccedilotildees fique o mais
proacuteximo possiacutevel do conjunto de dados
Vamos ilustrar as ideacuteias principais com
exemplos Vamos considerar um conjunto
formado pelos 19 pontos experimentais
indicados na tabela ao lado
Para colocar essas informaccedilotildees no
Mathematica digitamos
x y
73 348105
74 35381
75 358167
76 406048
77 470132
78 424577
79 431319
80 373182
81 336343
82 280988
83 283107
84 299822
85 272542
86 33407
87 354875
88 381126
89 4157
90 421533
91 395108
data=733481057435381753581677640604877 470132
78 42457779 431319 803731828133634382280988
832831078429982285272542863340787354875883811
268941579042153391395108
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar o graacutefico dos pontos experimentais e conectaacute-los Para isto definimos lp1
e lp2 que no Mathematica fica da seguinte forma
lp1=ListPlot[dataPlotStyle-gtPointSize[003]DisplayFunction-gtIdentity]
lp2=ListPlot[dataPlotJoined-gtTrue DisplayFunction-gtIdentity]
Agora preparamos o graacutefico digitando
Show[lp1lp2 DisplayFunction-gt$DisplayFunction]
O resultado eacute mostrado ao lado
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar curvas que ajustem-se ao conjunto de dados experimentais Podemos
testar vaacuterios cenaacuterios esta eacute uma das vantagens de usarmos um pacote poderoso
como o Mathematica ou ainda uma linguagem de programaccedilatildeo como o Python que
veremos adiante Para gerarmos um ajuste por regressatildeo linear e graficarmos os
resultados usamos os seguintes comandos
Clear[p]
p=Fit[data1xx]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 422346 -00695772 x
Vemos pelo graacutefico que o ajuste eacute
insatisfatoacuterio
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos tentar uma nova curva com um polinocircmio com x e x2 para isto basta
mudarmos a linha de comando Fit (indicado em vermelho) o restante eacute mantido
Clear[p]
p=Fit[data1xx^2x]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 549149 -124887 x+00757266 x2
Vemos pelo graacutefico que o ajuste eacute
Insatisfatoacuterio No proacuteximo slide temos
aproximaccedilotildees para polinocircmios ateacute o grau 5
Quantitative Structure Activity Relationship
wwwpythonorg
Nas figuras a seguir temos ajustes para diversas funccedilotildees polinomiais
y = -136156+508522 x-629506 x2+00258975 x3 y = -198884+959783 x-173196 x2+138539 x3-000414481 x4
y = 282867times106-176099 x+4376 x2-542556 x3+0335627 x4-0000828711 x5
A uacuteltima funccedilatildeo (com termos ateacute a quinta potecircncia)
eacute a que melhor se ajusta aos pontos experimentais
Quantitative Structure Activity Relationship
wwwpythonorg
Aproximaccedilatildeo com polinocircmio de grau 3 Aproximaccedilatildeo com polinocircmio de grau 4
Type CSV file name =gt data2csv
Type polynomial equation degree =gt 5
Best fit polynomial equation
5 4 3 2
-00008287 x + 03356 x - 5426 x + 4376 x - 1761e+05 x + 2829e+0
21
Usaremos o programa qsar1py as linhas
de coacutedigo estatildeo no proacuteximo slide O graacutefico
gerado estaacute na figura ao lado O arquivo de
entrada eacute o data2csv A equaccedilatildeo
polinomial estaacute mostrada abaixo Veja que
o resultado estaacute proacuteximo ao obtido com o
Mathematica para o polinocircmio de grau 5
Programa qsar1py
wwwpythonorg
def main()
Call read_csv()
xymy_deg = read_csv()
Call lsq()
p = lsq(xymy_deg)
Call gen_plot()
gen_plot(xyp)
main() 22
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo main() Inicialmente chamamos a funccedilatildeo read_csv() que
retorna as colunas lidas como array e o grau do polinocircmio a ser aproximado aos
pontos experimentais Em seguida eacute chamada a funccedilatildeo lsq() que determina o
polinocircmio Por uacuteltimo eacute chamada a funccedilatildeo gen_plot() que gera o graacutefico
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Eacute oacutebvio que sistemas bioloacutegicos
caracterizados por uma dada atividade
raramente podem ser modelados com
funccedilotildees lineares simples A introduccedilatildeo de
variaacuteveis independentes no modelo de
QSAR leva muitas vezes a um modelo
mais robusto onde caracteriacutesticas
quiacutemicas relevantes (descritores) satildeo
considerados Contudo o princiacutepio da
parcimocircnia deve ser adotado ou seja
nem sempre um modelo com mais
variaacuteveis independentes eacute o mais
adequado para modelar a atividade
bioloacutegica Colocaremos como exemplo o
uso do programa Mathematica para
encontrarmos modelos matemaacuteticos para
conjuntos de dados Depois
implementaremos em Python
Polinocircmio de grau 2 (-0634408x2 + 124534x + 00807008)
usado para aproximar os cinco pontos experimentais
mostrados acima
O graacutefico foi gerado com o programa Mathematica
(httpdemonstrationswolframcomCurveFitting)
Acesso em 25 de novembro de 2016
Quantitative Structure Activity Relationship
wwwpythonorg
A ideacuteia baacutesica atraacutes da aproximaccedilatildeo de uma
funccedilatildeo eacute usar uma lista de funccedilotildees
matemaacuteticas especificadas antecipadamente
e tentar encontrar uma combinaccedilatildeo linear
dessas funccedilotildees dadas de forma que essa
combinaccedilatildeo linear de funccedilotildees fique o mais
proacuteximo possiacutevel do conjunto de dados
Vamos ilustrar as ideacuteias principais com
exemplos Vamos considerar um conjunto
formado pelos 19 pontos experimentais
indicados na tabela ao lado
Para colocar essas informaccedilotildees no
Mathematica digitamos
x y
73 348105
74 35381
75 358167
76 406048
77 470132
78 424577
79 431319
80 373182
81 336343
82 280988
83 283107
84 299822
85 272542
86 33407
87 354875
88 381126
89 4157
90 421533
91 395108
data=733481057435381753581677640604877 470132
78 42457779 431319 803731828133634382280988
832831078429982285272542863340787354875883811
268941579042153391395108
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar o graacutefico dos pontos experimentais e conectaacute-los Para isto definimos lp1
e lp2 que no Mathematica fica da seguinte forma
lp1=ListPlot[dataPlotStyle-gtPointSize[003]DisplayFunction-gtIdentity]
lp2=ListPlot[dataPlotJoined-gtTrue DisplayFunction-gtIdentity]
Agora preparamos o graacutefico digitando
Show[lp1lp2 DisplayFunction-gt$DisplayFunction]
O resultado eacute mostrado ao lado
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar curvas que ajustem-se ao conjunto de dados experimentais Podemos
testar vaacuterios cenaacuterios esta eacute uma das vantagens de usarmos um pacote poderoso
como o Mathematica ou ainda uma linguagem de programaccedilatildeo como o Python que
veremos adiante Para gerarmos um ajuste por regressatildeo linear e graficarmos os
resultados usamos os seguintes comandos
Clear[p]
p=Fit[data1xx]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 422346 -00695772 x
Vemos pelo graacutefico que o ajuste eacute
insatisfatoacuterio
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos tentar uma nova curva com um polinocircmio com x e x2 para isto basta
mudarmos a linha de comando Fit (indicado em vermelho) o restante eacute mantido
Clear[p]
p=Fit[data1xx^2x]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 549149 -124887 x+00757266 x2
Vemos pelo graacutefico que o ajuste eacute
Insatisfatoacuterio No proacuteximo slide temos
aproximaccedilotildees para polinocircmios ateacute o grau 5
Quantitative Structure Activity Relationship
wwwpythonorg
Nas figuras a seguir temos ajustes para diversas funccedilotildees polinomiais
y = -136156+508522 x-629506 x2+00258975 x3 y = -198884+959783 x-173196 x2+138539 x3-000414481 x4
y = 282867times106-176099 x+4376 x2-542556 x3+0335627 x4-0000828711 x5
A uacuteltima funccedilatildeo (com termos ateacute a quinta potecircncia)
eacute a que melhor se ajusta aos pontos experimentais
Quantitative Structure Activity Relationship
wwwpythonorg
Aproximaccedilatildeo com polinocircmio de grau 3 Aproximaccedilatildeo com polinocircmio de grau 4
Type CSV file name =gt data2csv
Type polynomial equation degree =gt 5
Best fit polynomial equation
5 4 3 2
-00008287 x + 03356 x - 5426 x + 4376 x - 1761e+05 x + 2829e+0
21
Usaremos o programa qsar1py as linhas
de coacutedigo estatildeo no proacuteximo slide O graacutefico
gerado estaacute na figura ao lado O arquivo de
entrada eacute o data2csv A equaccedilatildeo
polinomial estaacute mostrada abaixo Veja que
o resultado estaacute proacuteximo ao obtido com o
Mathematica para o polinocircmio de grau 5
Programa qsar1py
wwwpythonorg
def main()
Call read_csv()
xymy_deg = read_csv()
Call lsq()
p = lsq(xymy_deg)
Call gen_plot()
gen_plot(xyp)
main() 22
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo main() Inicialmente chamamos a funccedilatildeo read_csv() que
retorna as colunas lidas como array e o grau do polinocircmio a ser aproximado aos
pontos experimentais Em seguida eacute chamada a funccedilatildeo lsq() que determina o
polinocircmio Por uacuteltimo eacute chamada a funccedilatildeo gen_plot() que gera o graacutefico
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
A ideacuteia baacutesica atraacutes da aproximaccedilatildeo de uma
funccedilatildeo eacute usar uma lista de funccedilotildees
matemaacuteticas especificadas antecipadamente
e tentar encontrar uma combinaccedilatildeo linear
dessas funccedilotildees dadas de forma que essa
combinaccedilatildeo linear de funccedilotildees fique o mais
proacuteximo possiacutevel do conjunto de dados
Vamos ilustrar as ideacuteias principais com
exemplos Vamos considerar um conjunto
formado pelos 19 pontos experimentais
indicados na tabela ao lado
Para colocar essas informaccedilotildees no
Mathematica digitamos
x y
73 348105
74 35381
75 358167
76 406048
77 470132
78 424577
79 431319
80 373182
81 336343
82 280988
83 283107
84 299822
85 272542
86 33407
87 354875
88 381126
89 4157
90 421533
91 395108
data=733481057435381753581677640604877 470132
78 42457779 431319 803731828133634382280988
832831078429982285272542863340787354875883811
268941579042153391395108
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar o graacutefico dos pontos experimentais e conectaacute-los Para isto definimos lp1
e lp2 que no Mathematica fica da seguinte forma
lp1=ListPlot[dataPlotStyle-gtPointSize[003]DisplayFunction-gtIdentity]
lp2=ListPlot[dataPlotJoined-gtTrue DisplayFunction-gtIdentity]
Agora preparamos o graacutefico digitando
Show[lp1lp2 DisplayFunction-gt$DisplayFunction]
O resultado eacute mostrado ao lado
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar curvas que ajustem-se ao conjunto de dados experimentais Podemos
testar vaacuterios cenaacuterios esta eacute uma das vantagens de usarmos um pacote poderoso
como o Mathematica ou ainda uma linguagem de programaccedilatildeo como o Python que
veremos adiante Para gerarmos um ajuste por regressatildeo linear e graficarmos os
resultados usamos os seguintes comandos
Clear[p]
p=Fit[data1xx]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 422346 -00695772 x
Vemos pelo graacutefico que o ajuste eacute
insatisfatoacuterio
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos tentar uma nova curva com um polinocircmio com x e x2 para isto basta
mudarmos a linha de comando Fit (indicado em vermelho) o restante eacute mantido
Clear[p]
p=Fit[data1xx^2x]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 549149 -124887 x+00757266 x2
Vemos pelo graacutefico que o ajuste eacute
Insatisfatoacuterio No proacuteximo slide temos
aproximaccedilotildees para polinocircmios ateacute o grau 5
Quantitative Structure Activity Relationship
wwwpythonorg
Nas figuras a seguir temos ajustes para diversas funccedilotildees polinomiais
y = -136156+508522 x-629506 x2+00258975 x3 y = -198884+959783 x-173196 x2+138539 x3-000414481 x4
y = 282867times106-176099 x+4376 x2-542556 x3+0335627 x4-0000828711 x5
A uacuteltima funccedilatildeo (com termos ateacute a quinta potecircncia)
eacute a que melhor se ajusta aos pontos experimentais
Quantitative Structure Activity Relationship
wwwpythonorg
Aproximaccedilatildeo com polinocircmio de grau 3 Aproximaccedilatildeo com polinocircmio de grau 4
Type CSV file name =gt data2csv
Type polynomial equation degree =gt 5
Best fit polynomial equation
5 4 3 2
-00008287 x + 03356 x - 5426 x + 4376 x - 1761e+05 x + 2829e+0
21
Usaremos o programa qsar1py as linhas
de coacutedigo estatildeo no proacuteximo slide O graacutefico
gerado estaacute na figura ao lado O arquivo de
entrada eacute o data2csv A equaccedilatildeo
polinomial estaacute mostrada abaixo Veja que
o resultado estaacute proacuteximo ao obtido com o
Mathematica para o polinocircmio de grau 5
Programa qsar1py
wwwpythonorg
def main()
Call read_csv()
xymy_deg = read_csv()
Call lsq()
p = lsq(xymy_deg)
Call gen_plot()
gen_plot(xyp)
main() 22
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo main() Inicialmente chamamos a funccedilatildeo read_csv() que
retorna as colunas lidas como array e o grau do polinocircmio a ser aproximado aos
pontos experimentais Em seguida eacute chamada a funccedilatildeo lsq() que determina o
polinocircmio Por uacuteltimo eacute chamada a funccedilatildeo gen_plot() que gera o graacutefico
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Vamos gerar o graacutefico dos pontos experimentais e conectaacute-los Para isto definimos lp1
e lp2 que no Mathematica fica da seguinte forma
lp1=ListPlot[dataPlotStyle-gtPointSize[003]DisplayFunction-gtIdentity]
lp2=ListPlot[dataPlotJoined-gtTrue DisplayFunction-gtIdentity]
Agora preparamos o graacutefico digitando
Show[lp1lp2 DisplayFunction-gt$DisplayFunction]
O resultado eacute mostrado ao lado
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos gerar curvas que ajustem-se ao conjunto de dados experimentais Podemos
testar vaacuterios cenaacuterios esta eacute uma das vantagens de usarmos um pacote poderoso
como o Mathematica ou ainda uma linguagem de programaccedilatildeo como o Python que
veremos adiante Para gerarmos um ajuste por regressatildeo linear e graficarmos os
resultados usamos os seguintes comandos
Clear[p]
p=Fit[data1xx]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 422346 -00695772 x
Vemos pelo graacutefico que o ajuste eacute
insatisfatoacuterio
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos tentar uma nova curva com um polinocircmio com x e x2 para isto basta
mudarmos a linha de comando Fit (indicado em vermelho) o restante eacute mantido
Clear[p]
p=Fit[data1xx^2x]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 549149 -124887 x+00757266 x2
Vemos pelo graacutefico que o ajuste eacute
Insatisfatoacuterio No proacuteximo slide temos
aproximaccedilotildees para polinocircmios ateacute o grau 5
Quantitative Structure Activity Relationship
wwwpythonorg
Nas figuras a seguir temos ajustes para diversas funccedilotildees polinomiais
y = -136156+508522 x-629506 x2+00258975 x3 y = -198884+959783 x-173196 x2+138539 x3-000414481 x4
y = 282867times106-176099 x+4376 x2-542556 x3+0335627 x4-0000828711 x5
A uacuteltima funccedilatildeo (com termos ateacute a quinta potecircncia)
eacute a que melhor se ajusta aos pontos experimentais
Quantitative Structure Activity Relationship
wwwpythonorg
Aproximaccedilatildeo com polinocircmio de grau 3 Aproximaccedilatildeo com polinocircmio de grau 4
Type CSV file name =gt data2csv
Type polynomial equation degree =gt 5
Best fit polynomial equation
5 4 3 2
-00008287 x + 03356 x - 5426 x + 4376 x - 1761e+05 x + 2829e+0
21
Usaremos o programa qsar1py as linhas
de coacutedigo estatildeo no proacuteximo slide O graacutefico
gerado estaacute na figura ao lado O arquivo de
entrada eacute o data2csv A equaccedilatildeo
polinomial estaacute mostrada abaixo Veja que
o resultado estaacute proacuteximo ao obtido com o
Mathematica para o polinocircmio de grau 5
Programa qsar1py
wwwpythonorg
def main()
Call read_csv()
xymy_deg = read_csv()
Call lsq()
p = lsq(xymy_deg)
Call gen_plot()
gen_plot(xyp)
main() 22
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo main() Inicialmente chamamos a funccedilatildeo read_csv() que
retorna as colunas lidas como array e o grau do polinocircmio a ser aproximado aos
pontos experimentais Em seguida eacute chamada a funccedilatildeo lsq() que determina o
polinocircmio Por uacuteltimo eacute chamada a funccedilatildeo gen_plot() que gera o graacutefico
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Vamos gerar curvas que ajustem-se ao conjunto de dados experimentais Podemos
testar vaacuterios cenaacuterios esta eacute uma das vantagens de usarmos um pacote poderoso
como o Mathematica ou ainda uma linguagem de programaccedilatildeo como o Python que
veremos adiante Para gerarmos um ajuste por regressatildeo linear e graficarmos os
resultados usamos os seguintes comandos
Clear[p]
p=Fit[data1xx]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 422346 -00695772 x
Vemos pelo graacutefico que o ajuste eacute
insatisfatoacuterio
Quantitative Structure Activity Relationship
wwwpythonorg
Vamos tentar uma nova curva com um polinocircmio com x e x2 para isto basta
mudarmos a linha de comando Fit (indicado em vermelho) o restante eacute mantido
Clear[p]
p=Fit[data1xx^2x]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 549149 -124887 x+00757266 x2
Vemos pelo graacutefico que o ajuste eacute
Insatisfatoacuterio No proacuteximo slide temos
aproximaccedilotildees para polinocircmios ateacute o grau 5
Quantitative Structure Activity Relationship
wwwpythonorg
Nas figuras a seguir temos ajustes para diversas funccedilotildees polinomiais
y = -136156+508522 x-629506 x2+00258975 x3 y = -198884+959783 x-173196 x2+138539 x3-000414481 x4
y = 282867times106-176099 x+4376 x2-542556 x3+0335627 x4-0000828711 x5
A uacuteltima funccedilatildeo (com termos ateacute a quinta potecircncia)
eacute a que melhor se ajusta aos pontos experimentais
Quantitative Structure Activity Relationship
wwwpythonorg
Aproximaccedilatildeo com polinocircmio de grau 3 Aproximaccedilatildeo com polinocircmio de grau 4
Type CSV file name =gt data2csv
Type polynomial equation degree =gt 5
Best fit polynomial equation
5 4 3 2
-00008287 x + 03356 x - 5426 x + 4376 x - 1761e+05 x + 2829e+0
21
Usaremos o programa qsar1py as linhas
de coacutedigo estatildeo no proacuteximo slide O graacutefico
gerado estaacute na figura ao lado O arquivo de
entrada eacute o data2csv A equaccedilatildeo
polinomial estaacute mostrada abaixo Veja que
o resultado estaacute proacuteximo ao obtido com o
Mathematica para o polinocircmio de grau 5
Programa qsar1py
wwwpythonorg
def main()
Call read_csv()
xymy_deg = read_csv()
Call lsq()
p = lsq(xymy_deg)
Call gen_plot()
gen_plot(xyp)
main() 22
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo main() Inicialmente chamamos a funccedilatildeo read_csv() que
retorna as colunas lidas como array e o grau do polinocircmio a ser aproximado aos
pontos experimentais Em seguida eacute chamada a funccedilatildeo lsq() que determina o
polinocircmio Por uacuteltimo eacute chamada a funccedilatildeo gen_plot() que gera o graacutefico
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Vamos tentar uma nova curva com um polinocircmio com x e x2 para isto basta
mudarmos a linha de comando Fit (indicado em vermelho) o restante eacute mantido
Clear[p]
p=Fit[data1xx^2x]
plotp=Plot[px7193DisplayFunction-gtIdentity]
Show[plotplp1PlotRange-gt050DisplayFunction-gt$DisplayFunction]
Os resultados satildeo mostrados no graacutefico
A equaccedilatildeo de regressatildeo eacute
Y= 549149 -124887 x+00757266 x2
Vemos pelo graacutefico que o ajuste eacute
Insatisfatoacuterio No proacuteximo slide temos
aproximaccedilotildees para polinocircmios ateacute o grau 5
Quantitative Structure Activity Relationship
wwwpythonorg
Nas figuras a seguir temos ajustes para diversas funccedilotildees polinomiais
y = -136156+508522 x-629506 x2+00258975 x3 y = -198884+959783 x-173196 x2+138539 x3-000414481 x4
y = 282867times106-176099 x+4376 x2-542556 x3+0335627 x4-0000828711 x5
A uacuteltima funccedilatildeo (com termos ateacute a quinta potecircncia)
eacute a que melhor se ajusta aos pontos experimentais
Quantitative Structure Activity Relationship
wwwpythonorg
Aproximaccedilatildeo com polinocircmio de grau 3 Aproximaccedilatildeo com polinocircmio de grau 4
Type CSV file name =gt data2csv
Type polynomial equation degree =gt 5
Best fit polynomial equation
5 4 3 2
-00008287 x + 03356 x - 5426 x + 4376 x - 1761e+05 x + 2829e+0
21
Usaremos o programa qsar1py as linhas
de coacutedigo estatildeo no proacuteximo slide O graacutefico
gerado estaacute na figura ao lado O arquivo de
entrada eacute o data2csv A equaccedilatildeo
polinomial estaacute mostrada abaixo Veja que
o resultado estaacute proacuteximo ao obtido com o
Mathematica para o polinocircmio de grau 5
Programa qsar1py
wwwpythonorg
def main()
Call read_csv()
xymy_deg = read_csv()
Call lsq()
p = lsq(xymy_deg)
Call gen_plot()
gen_plot(xyp)
main() 22
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo main() Inicialmente chamamos a funccedilatildeo read_csv() que
retorna as colunas lidas como array e o grau do polinocircmio a ser aproximado aos
pontos experimentais Em seguida eacute chamada a funccedilatildeo lsq() que determina o
polinocircmio Por uacuteltimo eacute chamada a funccedilatildeo gen_plot() que gera o graacutefico
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Nas figuras a seguir temos ajustes para diversas funccedilotildees polinomiais
y = -136156+508522 x-629506 x2+00258975 x3 y = -198884+959783 x-173196 x2+138539 x3-000414481 x4
y = 282867times106-176099 x+4376 x2-542556 x3+0335627 x4-0000828711 x5
A uacuteltima funccedilatildeo (com termos ateacute a quinta potecircncia)
eacute a que melhor se ajusta aos pontos experimentais
Quantitative Structure Activity Relationship
wwwpythonorg
Aproximaccedilatildeo com polinocircmio de grau 3 Aproximaccedilatildeo com polinocircmio de grau 4
Type CSV file name =gt data2csv
Type polynomial equation degree =gt 5
Best fit polynomial equation
5 4 3 2
-00008287 x + 03356 x - 5426 x + 4376 x - 1761e+05 x + 2829e+0
21
Usaremos o programa qsar1py as linhas
de coacutedigo estatildeo no proacuteximo slide O graacutefico
gerado estaacute na figura ao lado O arquivo de
entrada eacute o data2csv A equaccedilatildeo
polinomial estaacute mostrada abaixo Veja que
o resultado estaacute proacuteximo ao obtido com o
Mathematica para o polinocircmio de grau 5
Programa qsar1py
wwwpythonorg
def main()
Call read_csv()
xymy_deg = read_csv()
Call lsq()
p = lsq(xymy_deg)
Call gen_plot()
gen_plot(xyp)
main() 22
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo main() Inicialmente chamamos a funccedilatildeo read_csv() que
retorna as colunas lidas como array e o grau do polinocircmio a ser aproximado aos
pontos experimentais Em seguida eacute chamada a funccedilatildeo lsq() que determina o
polinocircmio Por uacuteltimo eacute chamada a funccedilatildeo gen_plot() que gera o graacutefico
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Type CSV file name =gt data2csv
Type polynomial equation degree =gt 5
Best fit polynomial equation
5 4 3 2
-00008287 x + 03356 x - 5426 x + 4376 x - 1761e+05 x + 2829e+0
21
Usaremos o programa qsar1py as linhas
de coacutedigo estatildeo no proacuteximo slide O graacutefico
gerado estaacute na figura ao lado O arquivo de
entrada eacute o data2csv A equaccedilatildeo
polinomial estaacute mostrada abaixo Veja que
o resultado estaacute proacuteximo ao obtido com o
Mathematica para o polinocircmio de grau 5
Programa qsar1py
wwwpythonorg
def main()
Call read_csv()
xymy_deg = read_csv()
Call lsq()
p = lsq(xymy_deg)
Call gen_plot()
gen_plot(xyp)
main() 22
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo main() Inicialmente chamamos a funccedilatildeo read_csv() que
retorna as colunas lidas como array e o grau do polinocircmio a ser aproximado aos
pontos experimentais Em seguida eacute chamada a funccedilatildeo lsq() que determina o
polinocircmio Por uacuteltimo eacute chamada a funccedilatildeo gen_plot() que gera o graacutefico
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def main()
Call read_csv()
xymy_deg = read_csv()
Call lsq()
p = lsq(xymy_deg)
Call gen_plot()
gen_plot(xyp)
main() 22
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo main() Inicialmente chamamos a funccedilatildeo read_csv() que
retorna as colunas lidas como array e o grau do polinocircmio a ser aproximado aos
pontos experimentais Em seguida eacute chamada a funccedilatildeo lsq() que determina o
polinocircmio Por uacuteltimo eacute chamada a funccedilatildeo gen_plot() que gera o graacutefico
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def read_csv()
Function to read csv
import numpy as np
Reads input file name and polynomial equation degree
my_input_file = input(Type CSV file name =gt )
my_deg = int(input(Type polynomial equation degree =gt ))
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xymy_deg 23
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo read_csv() que retorna as duas colunas lidas do arquivo csv
como arrays Aleacutem do grau do polinocircmio
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
print(nBest fit polynomial equation p)
return p
24
Programa qsar1py
wwwpythonorg
Abaixo temos a funccedilatildeo lsq() que determina os coeficientes do polinocircmio por meio do
meacutetodo de regressatildeo
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
ddef gen_plot(xyp)
Function to generate plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(qsar1png) 25
Programa qsar1py
wwwpythonorg
Por uacuteltimo a funccedilatildeo gen_plot() gera o graacutefico da funccedilatildeo
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Type CSV file name =gt data1csv
Type polynomial equation degree =gt 1
Best fit polynomial equation
129 x - 05116 R^2 = 0976475697411
26
Vimos que o coeficiente de correlaccedilatildeo ao
quadrado (R2) eacute usado para atestar a
qualidade de um modelo obtido por
regressatildeo A biblioteca NumPy tem a
funccedilatildeo npcorrcoef(xy)[01] para o caacutelculo
do coeficiente de correlaccedilatildeo (R) entre os
arrays x e y A partir deste valor basta
elevarmos ao quadrado para obtermos R2
O coacutedigo qsar2py traz esta funccedilatildeo Se
usarmos o programa qsar2py com o
arquivo data1csv podemos conferir com os
resultados anteriormente determinados O
graacutefico estaacute ao lado Os resultados estatildeo
no quadro abaixo O coacutedigo estaacute no
proacuteximo slide com as linhas em vermelho
indicando as modificaccedilotildees com relaccedilatildeo ao
qsar1py
Programa qsar2py
wwwpythonorg
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def lsq(xymy_deg)
Function to generate regression model
import numpy as np
Least-squares polynomial fitting
z = nppolyfit(xy my_deg)
p = nppoly1d(z)
rsquare = (npcorrcoef(yp(x))[01] )2
print(nBest fit polynomial equation p R^2 = rsquare)
return p 27
Programa qsar2py
wwwpythonorg
A uacutenica modificaccedilatildeo no programa qsar2py eacute na funccedilatildeo lsq() que agora calcula o R2
como destacado abaixo
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
28
Jaacute vimos programas que faziam uso de funccedilotildees preacute-definidas das bibliotecas NumPy
e Matplotlib Agora continuaremos a expandir nosso arsenal de bibliotecas com
alguns programas que usam recursos da biblioteca scikit-learn Esta biblioteca eacute
dedicada a disponibilizar para comunidade de programadores em Python
ferramentas de aprendizado de maacutequina Usaremos scikit-learn para resolver um
problema simples e depois aplicaremos o que aprendemos para um problema para a
previsatildeo de atividade de uma seacuterie de faacutermacos contra cacircncer
SciKit-Learn
wwwpythonorg
Paacutegina de entrada do site scikit-learnorg
Acesso em 25 de novembro de 2016
ldquoMachine Learning is the study
and design of programs that
improve the performance of a task
by learning from experience It is
the study of programs that learn
from datardquo
HACKELING G Mastering
Machine Learning with scikit-
learn Birmingham Packt
Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
29
Vamos supor que vocecirc quer usar meacutetodos de aprendizado de maacutequina para prever o
preccedilo de uma pizza Vocecirc foi recentemente 5 vezes ao Blondiersquos Pizza e comprou
pizzas de diferentes diacircmetros como detalhado na tabela abaixo
SciKit-Learn
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
30
Abaixo temos a funccedilatildeo main() que evoca as funccedilotildees read_CSV() e
gen_scatter_plot1() Veja que a primeira funccedilatildeo a ser evocada eacute a read_CSV() que
retorna os arrays x e y que satildeo passados como argumentos da funccedilatildeo
gen_scatter_plot1()
SciKit-Learn (pizza1py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call gen_scatter_plot1()
gen_scatter_plot1(xyDiameter (cm)R$Pizza Price vs
Diameterpizza1png)
main()
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
31
Iremos gerar um graacutefico de dispersatildeo para os dados da tabela anterior (arquivo
pizza1csv) com os recursos da biblioteca Matplotlib O programa pizza1py tem duas
funccedilotildees uma para leitura de um arquivo no formato CSV (read_CSV()) e outra para
o graacutefico de dispersatildeo dos pontos Abaixo temos a funccedilatildeo read_CSV() Nesta funccedilatildeo
importamos a biblioteca NumPy em seguida lemos o nome do arquivo de entrada
Depois usamos o genfromtxt() para realizarmos a leitura de um arquivo no formato
CSV As colunas satildeo atribuiacutedas como arrays agraves variaacuteveis x e y Estes arrays retornam
ao trecho onde a funccedilatildeo foi evocada
SciKit-Learn (pizza1py)
wwwpythonorg
def read_CSV()
Function to read a CSV file and return two columns
import numpy as np
Reads input file name
my_input_file = input(Type CSV file name =gt )
Reads CSV file
my_csv = npgenfromtxt (my_input_file delimiter= skip_header = 1)
Gets each column from CSV file
x = my_csv[0]
y = my_csv[1]
return xy
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
32
Abaixo temos a funccedilatildeo gen_scatter_plot1() que gera o graacutefico de dispersatildeo Nesta
funccedilatildeo temos os recursos do Matplotlib vistos anteriormente
SciKit-Learn (pizza1py)
wwwpythonorg
def gen_scatter_plot1(xyx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file)
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
33
Abaixo temos a execuccedilatildeo do coacutedigo pizza1py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza1png tambeacutem mostrado abaixo
SciKit-Learn (pizza1py)
wwwpythonorg
Type CSV file name =gt pizza1csv
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
34
Retornamos agrave tabela do arquivo pizza1csv Vamos supor que vocecirc queira saber
baseado nas informaccedilotildees da tabela abaixo o preccedilo de uma pizza com diacircmetro de
30 cm
Veja natildeo temos na tabela o diacircmetro de 30 cm mas podemos usar a informaccedilatildeo
conhecida chamada de observaccedilotildees passadas no jargatildeo de aprendizado da
maacutequina para prever o preccedilo de uma pizza com 30 cm de diacircmetro Para esta
previsatildeo usaremos o meacutetodo de regressatildeo linear simples onde as observaccedilotildees
passadas seratildeo usadas para elaborarmos um modelo (equaccedilatildeo) para a previsatildeo do
preccedilo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
35
Para nos familiarizarmos com a notaccedilatildeo dos meacutetodos de aprendizado de maacutequina
vamos definir os termos necessaacuterios para a elaboraccedilatildeo do modelo de regressatildeo
linear
A variaacutevel diacircmetro eacute chamada variaacutevel explanatoacuteria e o preccedilo correspondente eacute a
variaacutevel resposta os valores conhecidos destas variaacuteveis compotildeem o conjunto
treino (training data) O meacutetodo de regressatildeo eacute chamado de meacutetodo de
aprendizado supervisionado visto que usamos as observaccedilotildees passadas para
obter um modelo contiacutenuo entre variaacutevel resposta e a variaacutevel explanatoacuteria
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Preccedilo (R$)
1 150 2450
2 200 3150
3 250 4550
4 350 6125
5 450 6300
Variaacutevel explanatoacuteria
Variaacutevel resposta
Conjunto treino
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
36
Vimos a funccedilatildeo polyfit() da biblioteca NumPy para realizar a regressatildeo linear Na
biblioteca SciKit-learn temos o meacutetodo linear_modelLinearRegression() Vamos
ilustrar seu uso no programa pizza2py Mas antes de iniciarmos o coacutedigo devemos
fazer algumas consideraccedilotildees sobre o uso de meacutetodos das bibliotecas do Python
Essas bibliotecas facilitam a vida do programador pois disponibilizam meacutetodos
sofisticados prontos para uso Por outro lado temos que estar atentos agrave estrutura
dos dados que satildeo inseridos nos meacutetodos No nosso exemplo do preccedilo da pizza se
colocarmos um print() para os arrays x e y que retornam da funccedilatildeo read_CSV()
teremos o seguinte resultado
O que funcionou bem quando foram passados para a funccedilatildeo gen_scatter_plot1() Por
outro lado para usarmos o meacutetodo linear_modelLinearRegression() temos que ter
os arrays na seguinte estrutura
Assim temos que converter os arrays para a estrutura acima caso contraacuterio teremos
uma mensagem de erro ao executar o coacutedigo
SciKit-Learn (Regressatildeo Linear Simples)
wwwpythonorg
[ 15 20 25 35 45] [ 245 315 455 6125 63 ]
[[150] [200] [250] [350] [450]] [[245] [315] [455] [6125] [630]]
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def convert2scikit(x)
Function to convert array to scikit-learn format
Set up empty lists
X = []
list0 = []
Looping through x
for line in x
Converts element to list
list0append(line)
Append list to list
Xappend(list0)
list0 = []
Return new array
return X 37
O programa pizza2py tem uma funccedilatildeo para converter os arrays chamada
convert2scikit() O coacutedigo estaacute mostrado abaixo O que a funccedilatildeo faz eacute basicamente
receber um array x e convertecirc-lo num array de arrays Para isto a funccedilatildeo varre o
array de entrada e atribui o elemento do array a uma lista (list0) que entatildeo eacute passada
para o array de arrays (X) A funccedilatildeo retorna o array modificado
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 38
Para geramos o modelo usamos a funccedilatildeo simple_linear_regression1() Os arrays
x_in e y_in satildeo os paracircmetros da funccedilatildeo Explicaremos cada linha Inicialmente
importamos o meacutetodo linear_model da biblioteca simple_linear_regression1 Tambeacutem
importamos a biblioteca NumPy ambas indicadas em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
A classe sklearn import linear_model eacute
um ldquoestimadorrdquo que eacute usado para
prever um valor baseado em dados
observados
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 39
Para criarmos o modelo de regressatildeo linear (model) usamos o comando model =
linear_modelLinearRegression() que permite que usemos o meacutetodo para regressatildeo
linear chamado fit() como indicado abaixo O meacutetodo fit() ajusta uma reta com
equaccedilatildeo y = const + alpha1x aos pontos do conjunto treino
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 40
A constante da reta pode ser obtida a partir do comando const =
float(modelintercept_) e o coeficiente angular pode ser determinado a partir do
comando alpha1 = float(modelcoef_) como indicado abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def simple_linear_regression1(x_iny_in)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
print(nBest fit linear regression model p)
return p 41
A seguir montamos um array com a constante e coeficiente angular com o comando
z = nparray([alpha1const]) O array z eacute usado para gerar a equaccedilatildeo da reta com o
comando p = nppoly1d(z) Por uacuteltimo a equaccedilatildeo da reta de regressatildeo linear eacute
mostrada na tela e retornamos o p para o programa principal
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def gen_scatter_plot2(xypx_labely_labeltitleoutput_file)
Function to generate scatter plot
import matplotlibpyplot as plt
Generates plot
pltscatter(xy)
Title
plttitle(title)
X-axis label
pltxlabel(x_label)
Y-axis label
pltylabel(y_label)
Grid
pltgrid(True)
Generates plot
pltplot(x p(x) -)
Shows plot
pltshow()
Saves plot on png file
pltsavefig(output_file) 42
A funccedilatildeo gen_scatter_plot2() traz como novidade a inclusatildeo da equaccedilatildeo da reta p
como paracircmetro e uma linha de coacutedigo para incluir a reta no graacutefico destacada em
vermelho no coacutedigo abaixo O restante do coacutedigo eacute o mesmo da funccedilatildeo
gen_scatter_plot1() vista no programa pizza1py
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
Gera o graacutefico da reta
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 43
A funccedilatildeo main() evoca duas vezes a funccedilatildeo convert2scikit() em seguida evocamos a
funccedilatildeo simple_linear_regression1() Depois mostramos o valor previsto para preccedilo
da pizza de 30 cm e por ultimo chamamos a funccedilatildeo gen_scatter_plot2() para
gerarmos o graacutefico
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def main()
Call read_CSV() function
xy = read_CSV()
Call convert2scikit(x)
xs = convert2scikit(x)
ys = convert2scikit(y)
Call simple_linear_regression1()
p = simple_linear_regression1(xsys)
Predict the price for 30 cm pizza
pred = p(30)
print(Predicted price for 30 cm pizza (R$) 2fpred)
Call gen_scatter_plot2()
gen_scatter_plot2(xypDiameter (cm)R$Pizza Price vs
Diameterpizza2pngldquo
main() 44
Vejam que ao usarmos a linha de comando pred = p(30) colocamos como argumento
da equaccedilatildeo p o valor 30 A equaccedilatildeo p eacute a equaccedilatildeo obtida por regressatildeo linear
quando evocamos a funccedilatildeo simple_linear_regression1()
SciKit-Learn (Regressatildeo Linear Simples) (pizza2py)
wwwpythonorg
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
45
Abaixo temos a execuccedilatildeo do coacutedigo pizza2py onde usamos o arquivo pizza1csv
como entrada O programa gera o graacutefico pizza2png tambeacutem mostrado abaixo A
linha azul do graacutefico eacute a equaccedilatildeo obtida por regressatildeo linear
SciKit-Learn (pizza2py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Best fit linear regression model
1367 x + 6879
Predicted price for 30 cm pizza (R$) 4788
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
46
De forma resumida podemos dizer que a melhor reta eacute aquela que minimiza a
distacircncia dos pontos experimentais (dados do conjunto treino) para a reta
Matematicamente a equaccedilatildeo da reta (p) tem a seguinte forma
Onde p tem o valor estimado (teoacuterico) para o preccedilo da pizza e x1 recebe o valor do
diacircmetro da pizza( variaacutevel explanatoacuteria) Os coeficientes (0 e 1) satildeo determinados
de forma minimizar a diferenccedila entre p e os valores experimentais do preccedilo da pizza
(yi) ou seja minimizam a soma do quadrado dos resiacuteduos (Residual Sum of
Squares)
A somatoacuteria eacute feita para todos os pontos do conjunto treino
SciKit-Learn (pizza2py)
wwwpythonorg
110 xp
N
i
ii pyRSS1
2
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
47
Muito bem temos um modelo para previsatildeo do preccedilo da pizza mas o quatildeo confiaacutevel
eacute nosso modelo Vamos supor que vimos um anuncio da Blondiersquos pizza com a
seguinte tabela de preccedilos (pizza2csv) Esta informaccedilatildeo natildeo foi usada para obtermos
o modelo de regressatildeo tal conjunto de dados eacute chamado de conjunto teste (test
set) Adicionamos uma coluna com os valores previstos pelo nosso modelo O
conjunto teste pode ser usado para avaliar o poder de previsatildeo do nosso modelo
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Para acessar a qualidade do modelo de regressatildeo ou seja a qualidade do ajuste da
curva (ou reta) modelada contra os pontos experimentais (yi) podemos calcular o
coeficiente r2 Considere que pi satildeo valores calculados a partir da equaccedilatildeo de
regressatildeo usando observaccedilotildees experimentais xi Assim temos os seguintes termos
soma total dos quadrados (Total Sum of Squares TSS) soma dos quadrados
ldquoexplicadardquo (Explained Sum of Squares ESS) e soma residual dos quadrados
(Residual Sum of Squares)
O termo ltpgt representa o valor meacutedio do preccedilo da pizza estimado pela equaccedilatildeo de
regressatildeo linear (p) O termo yi representa o valor do preccedilo (experimental) da pizza
para os diferentes diacircmetros
Os termos acima satildeo usados para o caacutelculo de R2 como segue
N
i
i pyTSS1
2
N
i
i ppESS1
2
TSS
RSS1R2
Quantitative Structure Activity Relationship
wwwpythonorg
N
i
ii pyRSS1
2
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
49
Modificaremos a funccedilatildeo simple_linear_regression1() para que esta calcule o R2 no
programa pizza3py O programa pizza3py leraacute os dados dos conjuntos treino
(pizza1csv) e teste (pizza2csv)
Iacutendice do Dado do Conjunto Test
Diacircmetro da Pizza (cm)
Preccedilo (R$) Preccedilo Previsto pelo Modelo (R$)
1 200 3850 3422
2 225 2975 3763
3 275 5250 4447
4 400 6300 6155
5 300 3850 4788
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 50
A funccedilatildeo simple_linear_regression2() tem quatro paracircmetros aleacutem dos dois
anteriores (x_iny_in) com os dados do conjunto treino temos dois novos arrays
para os dados do conjunto teste (paracircmetros x_test e y_test)
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def simple_linear_regression2(x_iny_inx_testy_test)
Function to generate a linear regression model for one explanatory variable
and their response variable This function uses
sklearnlinear_modelLinearRegression method
Import library
from sklearn import linear_model
import numpy as np
Create and fit the model
model = linear_modelLinearRegression()
modelfit(x_in y_in)
Get Linear Model
alpha1 = float(modelcoef_)
const = float(modelintercept_)
z = nparray([alpha1const])
p = nppoly1d(z)
r_square = modelscore(x_test y_test)
print(nBest fit linear regression model p)
print(R-squared 4f r_square)
return p 51
A outra novidade eacute o meacutetodo score() que eacute usado para calcular o R2 que eacute atribuiacutedo
agrave variaacutevel r_square O resultado eacute mostrado na tela
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def main()
Call read_CSV() function
x1y1 = read_CSV()
Call convert2scikit()
xs1 = convert2scikit(x1)
ys1 = convert2scikit(y1)
Call read_CSV() function again
x2y2 = read_CSV()
Call convert2scikit(x) again
xs2 = convert2scikit(x2)
ys2 = convert2scikit(y2)
Call simple_linear_regression2()
p = simple_linear_regression2(xs1ys1xs2ys2)
Call gen_scatter_plot2()
gen_scatter_plot2(xs1ys1pDiameter (cm)R$Pizza Price vs
Diameterpizza3png)
main() 52
No programa principal (funccedilatildeo main()) temos que evocar duas vezes a leitura dos
arquivos CSV (funccedilatildeo read_CSV()) aleacutem das respectivas conversotildees como
destacado em vermelho abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
53
Abaixo temos o resultado de rodar o programa pizza3py veja que temos dois
arquivos de entrada
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza1csv
Type CSV file name =gt pizza2csv
Best fit linear regression model
1367 x + 6879
R-squared 06620
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
54
Muito bem evoluiacutemos com nosso modelo para previsatildeo do preccedilo das pizzas Mas se
refletimos sobre a qualidade do nosso modelo podemos imaginar que temos como
melhoras Qualquer apreciador de pizza sabe que um dos determinantes do preccedilo da
pizza eacute o nuacutemero de coberturas Assim podemos adicionar esta nova variaacutevel
explanatoacuteria ao nosso modelo Assim a equaccedilatildeo de regressatildeo passa a ter muacuteltiplas
varaacuteveis um caso geral a equaccedilatildeo tem a seguinte forma
Onde M eacute o nuacutemero de variaacuteveis explanatoacuterias Quando usamos a equaccedilatildeo acima
para obtermos um modelo estamos usando o meacutetodo de regressatildeo linear muacuteltipla
No nosso novo modelo para previsatildeo do preccedilo das pizzas adicionamos uma variaacutevel
explanatoacuteria assim a equaccedilatildeo tem a seguinte forma
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
MM xxxxp 3322110
22110 xxp
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
55
Retornamos agraves tabelas de preccedilo soacute que agora temos uma informaccedilatildeo adicional com
o nuacutemero de coberturas para o conjunto treino
A nova coluna eacute a variaacutevel explanatoacuteria x2
Iacutendice do Dado do Conjunto Treino
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas Preccedilo (R$)
1 150 2 2450
2 200 1 3150
3 250 0 4550
4 350 2 6125
5 450 0 6300
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
56
Abaixo temos a tabela para o conjunto teste
A nova coluna eacute a variaacutevel explanatoacuteria x2
SciKit-Learn (Regressatildeo Linear Muacuteltipla)
wwwpythonorg
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 57
Para simplificar a apresentaccedilatildeo vamos elaborar um coacutedigo para gerar o modelo de
regressatildeo muacuteltipla e prever o preccedilo da pizza de 40 cm O coacutedigo da funccedilatildeo main()
segue abaixo
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 58
A principal novidade eacute que temos que converter as duas colunas com as variaacuteveis
explanatoacuterias (diacircmetro e nuacutemero de coberturas) num array bidimensional ou seja
uma matriz Usaremos a funccedilatildeo make_2d_array()
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 59
Inicialmente eacute evocada a funccedilatildeo read_CSV_3cols() que eacute similar agrave read_CSV() soacute
que agora retornamos trecircs arrays que satildeo atribuiacutedos agraves variaacuteveis x1x2 y1
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 60
Em seguida convertermos a variaacutevel resposta para que possa ser lida pelo scikit-
learn
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 61
A funccedilatildeo make_2d_array() tem como argumentos os array lidos e converte estes
numa matriz que eacute atribuiacuteda agrave variaacutevel Xtr Ateacute entatildeo soacute lemos os dados do conjunto
treino (ytr e Xtr)
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 62
As linhas seguintes fazem a leitura e conversatildeo dos dados do conjunto treino Em
seguida eacute chamada a funccedilatildeo multiple_linear_regression() que recebe as matrizes Xtr
e Xte
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def main()
Call read_CSV_3cols() function
x1x2y1 = read_CSV_3cols()
Call convert2scikit()
ytr = convert2scikit(y1)
Call make_2d_array()
Xtr = make_2d_array(x1x2)
Call read_CSV_3cols() function again
x1x2y2 = read_CSV_3cols()
Call convert2scikit(x) again
yte = convert2scikit(y2)
Call make_2d_array()
Xte = make_2d_array(x1x2)
Call multiple_linear_regression()
p = multiple_linear_regression(XtrytrXteyte)
Prediction of the price for 40 cm pizza
y = p[0] + p[1]20 + p[2]400
print(nPredicted price for 40 cm pizza 62fy)
main() 63
Por uacuteltimo usamos o polinocircmio determinado para obtermos uma estimativa do preccedilo
da pizza de 40 cm com duas coberturas
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
def make_2d_array(x1x2)
Function to make 2-d array
import numpy as np
Set up number of columns and rows
number_columns = 2
number_rows = len(x1)
Set up zero matrix
X= [[0]number_columns for i in range(number_rows)]
Get matrix
for i in range(number_rows)
X[i][0] = x1[i]
X[i][1] = x2[i]
return X
64
A uacutenica funccedilatildeo nova eacute a make_2d_array() mostrada abaixo A novidade aqui eacute que
geramos uma matriz de zeros Em seguida temos um loop for que atribui os
elementos dos vetores aos elementos da matrix
SciKit-Learn (Regressatildeo Linear Simples) (pizza4py)
wwwpythonorg
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
65
Abaixo temos o resultado de rodar o programa pizza4py veja que temos dois
arquivos de entrada
Veja que houve uma melhora no modelo o R2 foi de 066 para 077
SciKit-Learn (Regressatildeo Linear Simples) (pizza3py)
wwwpythonorg
Type CSV file name =gt pizza3csv
Type CSV file name =gt pizza4csv
Best fit linear regression model 2
1415 x + 1385 x + 4156
R-squared 07702
Predicted price for 40 cm pizza 6351
Iacutendice do Dado do Conjunto Teste
Diacircmetro da Pizza (cm) Nuacutemero de Coberturas
Preccedilo (R$)
1 200 2 3850
2 225 0 2975
3 275 2 5250
4 400 2 6300
5 300 0 3850
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
66
P
j
j
N
i
P
j
jicalci yyRSS1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Meacutetodos de Aprendizado de Maacutequina Supervisionado
wwwpythonorg
Vimos a aplicaccedilatildeo do meacutetodo de regressatildeo linear para a elaboraccedilatildeo de um modelo
a partir dos dados do conjunto treino A biblioteca scikit-learn tem um arsenal de
meacutetodos de aprendizado de maacutequina supervisionado aleacutem da regressatildeo linear
Abaixo temos seis meacutetodos disponiacuteveis no scikit-learn Esses meacutetodos adicionais
visam reduzir o nuacutemero de variaacuteveis explanatoacuterias no modelo de regressatildeo A tabela
verdade abaixo traz a identificaccedilatildeo de cada termo com o respectivo peso do termo
adicional somado ao RSS
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Para discutirmos os principais meacutetodos para melhora de funccedilotildees escores com
meacutetodos de aprendizado de maacutequina supervisionado iremos considerar como sistema
bioloacutegico uma proteiacutena chamada quinase dependente de ciclina (CDKs) com
informaccedilatildeo de Ki (constante de inibiccedilatildeo) Moleacuteculas que se ligam agrave CDK tem o
potencial de serem usadas como drogas contra o cacircncer
67
Modelagem de Sistemas (CDKs com Ki)
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Abaixo temos uma tabela com informaccedilotildees para 30 estruturas de CDKs para as quais
haacute informaccedilatildeo de Ki Iremos considerar somente trecircs variaacuteveis explanatoacuterias Protein
Score Water Score e Electro Long Score A variaacutevel log(Ki) eacute a variaacutevel resposta
68
Modelagem de Sistemas (CDKs com Ki)
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Usaremos um programa que eacute parte integrante do SAnDReS (Xavier et al 2016) O
programa chamado sml15py chama um moacutedulo
(scikit_regression_methods_v001z_workspy) Nos concentraremos no seu uso
Abaixo temos o trecho do programa principal que faz a leitura do arquivo CSV e indica
o meacutetodo de regressatildeo linear
69
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Na funccedilatildeo main() inicialmente definimos o nome do arquivo CSV que tem as variaacuteveis
explanatoacuterias e a variaacutevel resposta (log(Ki)) indicada em vermelho
70
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Em seguida eacute chamada a funccedilatildeo get_number_of_cols() que determina o nuacutemero de
colunas do arquivo CSV
71
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Depois eacute chamada a funccedilatildeo generate_LOO_files() que gera arquivos CSV auxiliares
com uma estrutura deixada fora (leave one out)(loo) Tal abordagem visa verificar a
consistecircncia interna do modelo de regressatildeo linear gerado onde uma linha de dado eacute
deixada de fora para cada iteraccedilatildeo da determinaccedilatildeo dos pesos das variaacuteveis
explanatoacuterias
72
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ElasticNetCV)
main()
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
A uacuteltima funccedilatildeo chamada eacute a SF() que determina o modelo de regressatildeo linear Um
dos argumentos passado eacute o meacutetodo de regressatildeo a ser usado no caso abaixo
ldquoLinearRegressionrdquo Aleacutem deste o programa pode testar Lasso LassoCV Ridge
RidgeCV ElasticNet e ElasticNetCV
73
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Como jaacute vimos o meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel
explanatoacuteria onde x1 eacute o Protein Score x2 o Water Score e x3 o Electro Long Score
74
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
3322110 )log( xxxKi
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
O meacutetodo ldquoLinearRegressionrdquo determina os pesos de cada variaacutevel explanatoacuteria de
forma que a funccedilatildeo RSS seja minimizada
RSS representa o resiacuteduo yi o valor experimental de log(Ki) para cada
estrutura do conjunto treino Os termos xi satildeo as variaacuteveis explanatoacuterias e ω um vetor
com o peso de cada variaacutevel explanatoacuteria
75
CDKs com Ki (Regressatildeo Linear)
def main()
Get the CSV file name we the following file to be used as imput
Verma_Hansch_EJMC_2010_Table1csv
Verma_Hansch_EJMC_2010_Table2csv
Verma_Hansch_EJMC_2010_Table3csv
cdk_kicsv
data01_19colcsv
csv_file = cdk_kicsv
Call get_number_of_cols()
n_columns = get_number_of_cols(csv_file)
Call generate_LOO_files()
generate_LOO_files(csv_filen_columns)
Call SF()
SF(csv_filen_columns-1ldquoLinearRegression)
main()
N
i
Tii xyRSS
1
2
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Ao rodarmos o programa obtemos os seguintes resultados (arquivo SFlog)
MODEL GENERATOR
File cdk_kicsv
Regression equation
Pred Log(Ki) = - 4571716 + 0017517(Protein) - 0141223(Water) - 0511956(ElectroLong)
Error for c(0) 2166260
Error for Protein 0015999
Error for Water 0142385
Error for ElectroLong 0536931
Best fit equation between observed and predicted information
02755 x - 4834
N 30
Standard deviation 1209319
R 0524853
R-squared 0275470
p-value 2903439e-03
Adjusted R-square 0191871
Spearman correlation 0567138
p-value 1082796e-03
Quality factor (Q) 0434007
q-squared for LOO 0278364
F-stat 3295116
Chi-squared 5764193
RMSE 0125592
76
CDKs com Ki (Regressatildeo Linear)
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Vamos analisar um modelo de QSAR
publicado para fixarmos os conceitos de
regressatildeo Selecionei um artigo do
criador do meacutetodo Dr C Hansch
(Verma amp Hansch QSAR modeling of
taxane analogues against colon cancer
European Journal of Medicinal
Chemistry 45 (2010) 1470ndash1477) Nesse
artigo satildeo elaborados modelos de
QSAR para uma seacuterie de compostos
anti-canceriacutegenos anaacutelogos do taxol
(CID 36314) mostrado na figura ao
lado O taxol apresenta atividade
anticanceriacutegena e eacute extraiacutedo da casca
da aacutervore Taxus brevefolia Os
substituintes para gerar os anaacutelogos
foram montados pela adiccedilatildeo de
diferentes grupos quiacutemicos na posiccedilatildeo
X indicada na figura ao lado
Estrutura do taxol (CID 36314)
Modelos de QSAR (Taxol)
wwwpythonorg
Verma RP amp Hansch C QSAR modeling of taxane
analogues against colon cancer European Journal of
Medicinal Chemistry 45 (2010) 1470ndash1477 77
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781
A tabela usada para obter um dos modelos de QSAR estaacute mostrada abaixo Nela
temos os seguintes descritores moleculares X MRX e ICYALK A atividade eacute a inibiccedilatildeo
de ceacutelulas cancerosas de HCT-116 (cacircncer de coacutelon) Descreveremos brevemente os
descritores moleculares
Modelos de QSAR (Taxol)
wwwpythonorg
78
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
O descritor X eacute a diferenccedila entre o log P para o composto (no caso taxol) e os
anaacutelogos deste (log PX ) como definido pela equaccedilatildeo abaixo
Este descritor eacute uma medida da hidrofobicidade
O descritor MRX eacute a refractividade molar dada pela equaccedilatildeo a seguir
onde n eacute o iacutendice de refraccedilatildeo d a densidade e MW a massa molecular Normalmente
esse descritor eacute usado para descrever o volume da moleacutecula
P log - P log XX
d
MW
2 n
1 - n MR
2
2
X
Modelos de QSAR (Taxol)
wwwpythonorg
79
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
O termo e ICYALK eacute um indicador da atividade incomum dos substituintes que
apresentam cicloaquila (cycloalkyl) O termo assume o valor ldquo1rdquo se apresenta o grupo
cicloaquila caso contraacuterio o valor eacute ldquo0rdquo Eacute o que podemos chamar de um descritor
binaacuterio que assume somente valores ldquo0rdquo e ldquo1rdquo
Modelos de QSAR (Taxol)
wwwpythonorg
Molecule piX MRX ICYALK Observed log 1IC50
CH3 07 046 0 862
C6H5 191 251 0 639
4-F-C6H4 205 253 0 61
CH2F 037 048 0 815
CCl3 258 194 0 84
C2H5 123 093 0 87
CH]CH2 085 098 0 822
(CH2)2CH3 176 139 0 896
CH(CH3)2 154 139 0 83
C(CH3) =CH2 116 144 0 835
trans-CH = CHCH3 138 144 0 864
Cy-C3H5 128 125 1 9
(CH2)3CH3 228 186 0 87
Cy-C4H7 161 168 1 882
(CH2)4CH3 281 232 0 822
Cy-C5H9 217 214 1 87
OCH3 068 062 0 87
OCH2CH3 121 108 0 9
O(CH2)2CH3 174 154 0 859
NH-Cy-C4H7 155 205 1 804
Imidazole 018 173 0 61
Aziridine 087 112 0 781 80
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
A abordagem claacutessica da modelagem de QSAR parte da tabela de atividades e
descritores para alimentarmos o programa de regressatildeo A atividade bioloacutegica a ser
relacionada com a estrutura molecular eacute o IC50 assim nossa equaccedilatildeo de regressatildeo
teraacute a seguinte forma geral (sem a determinaccedilatildeo dos coeficientes )
A equaccedilatildeo acima tem 3 variaacuteveis explanatoacuterias (X MRX e ICYALK ) e a variaacutevel
resposta eacute log (1IC50)
CYALK3X21050
I MRIC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
81
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
A equaccedilatildeo de regressatildeo obtida eacute a seguinte
log (1IC50) = 904307 +0887579 icy-196693 mrx+133766 pix
Onde
0 = 904307
1 = 133766
2 = -196693
3 = 0887579
Assim temos a seguinte equaccedilatildeo de regressatildeo
A presenccedila de um positivo para o termo ICYALK sugere que a presenccedila do grupo eacute
favoraacutevel agrave atividade dos anaacutelogos de taxol
Veja que seguimos a ordem X MRX ICYALK e log (1IC50)
CYALKX50
I 089 MR 197- 134904IC
1 log
X
Modelos de QSAR (Taxol)
wwwpythonorg
82
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Vamos realizar uma anaacutelise estatiacutestica dos resultados Para isto precisamos calcular o
Predicted log (1IC50) (ycalc) para todos os pontos experimentais A coluna indicada em
vermelho foi obtida a partir da inserccedilatildeo da equaccedilatildeo de regressatildeo obtida com o
Mathematica na planilha do Excel
Molecule piX MRX ICYALK Observed log 1IC50 Predicted log 1IC50 delta^2 (log 1IC50(Exp)-ltlog 1IC50(Exp)gt)^2 (log 1IC50(Teor)-ltlog 1IC50(Exp)gt)^2 CH3 07 046 0 862 90746442 0206701 0172225 0756281035
C6H5 191 251 0 639 66610063 0073444 3294225 2383916546 4-F-C6H4 205 253 0 61 68089401 0502596 4431025 1948983244 CH2F 037 048 0 815 85938778 0197028 0003025 0151225943 CCl3 258 194 0 84 86783886 00775 0038025 0224096767 C2H5 123 093 0 87 88591469 0025328 0245025 0427908167
CH]CH2 085 098 0 822 82524896 0001056 0000225 0002255262
(CH2)2CH3 176 139 0 896 86633189 008802 0570025 0210056214 CH(CH3)2 154 139 0 83 83690337 0004766 0009025 0026907055 C(CH3) =CH2 116 144 0 835 77623764 0345301 0021025 0195915651
trans-CH = CHCH3 138 144 0 864 80566616 0340284 0189225 0022004281 Cy-C3H5 128 125 1 9 91841913 0033926 0632025 0958815602
(CH2)3CH3 228 186 0 87 8434445 0070519 0245025 0052645008 Cy-C4H7 161 168 1 882 87798392 0001613 0378225 0330440106 (CH2)4CH3 281 232 0 822 8238617 0000347 0000225 0001130103 Cy-C5H9 217 214 1 87 8624141 0005755 0245025 0175679178 OCH3 068 062 0 87 87331822 0001101 0245025 0278976436
OCH2CH3 121 108 0 9 85373542 0214041 0632025 0110459314
O(CH2)2CH3 174 154 0 859 83415262 0061739 0148225 0018639403 NH-Cy-C4H7 155 205 1 804 79718155 0004649 0027225 0054375011
Imidazole 018 173 0 61 58810599 0047935 4431025 5400697588
Aziridine 087 112 0 781 80038726 0037587 0156025 0040452231
Modelos de QSAR (Taxol)
wwwpythonorg
83
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
Entradas ltlog 1IC50(gt 8205
N 22 RSS 2341235229 p 3
TSS 1611315
ESS 1377186015
R^2 0854700339
sd 0360650279
F 3529383115
Os valores para r2 sd e F satildeo mostrados abaixo
Modelos de QSAR (Taxol)
wwwpythonorg
84
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
A partir do graacutefico de dispersatildeo entre os valores calculados (log (1IC50)(teor) e os
valores experimentais Observed (log (1IC50) podemos verificar a boa concordacircncia
do modelo de QSAR com os dados experimentais
6
65
7
75
8
85
9
95
6 65 7 75 8 85 9 95
log
(1I
C5
0)(
teo
r)
Observed log (1IC50)
Modelos de QSAR (Taxol)
wwwpythonorg
85
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
86
P
j
j
N
i
P
j
jTii xyRSS
1
222
1 1
11
2
Meacutetodo α1 α2
Linear Regression 0 0
Ridge 0 1
Ridge CV 0 1
Lasso 1 0
Lasso CV 1 0
Elastic Net 1 1
Elastic Net CV 1 1
Trabalho 1
Considere os resultados da atividade anticacircncer de uma famiacutelia de moleacuteculas
disponiacuteveis nas tabela
Verma_Hansch_EJMC_2010_Table1csv
Aplique os meacutetodos de aprendizado de maacutequina supervisionado indicados na tabela
abaixo e identifique o melhor modelo considerando como criteacuterio o valor de R2
Entrega 29 de novembro de 2016
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p
-BRESSERT Eli SciPy and NumPy Sebastopol OrsquoReilly Media Inc 2013 56 p
-DAWSON Michael Python Programming for the absolute beginner 3ed Boston Course Technology 2010 455 p
-HACKELING G Mastering Machine Learning with scikit-learn Birmingham Packt Publishing Ltd 2014 221 p
-HETLAND Magnus Lie Python Algorithms Mastering Basic Algorithms in the Python Language Nova York Springer
Science+Business Media LLC 2010 316 p
-IDRIS Ivan NumPy 15 An action-packed guide dor the easy-to-use high performance Python based free open source
NumPy mathematical library using real-world examples Beginnerrsquos Guide Birmingham Packt Publishing Ltd 2011 212 p
-LUTZ Mark Programming Python 4ed Sebastopol OrsquoReilly Media Inc 2010 1584 p
-MODEL Mitchell L Bioinformatics Programming Using Python Sebastopol OrsquoReilly Media Inc 2011 1584 p
-TOSI Sandro Matplotlib for Python Developers Birmingham Packt Publishing Ltd 2009 293 p
Uacuteltima atualizaccedilatildeo 25 de novembro de 2016
87
Referecircncias
wwwpythonorg
HACKELING G Mastering Machine Learning with scikit-learn
Birmingham Packt Publishing Ltd 2014 221 p