87
1 azevedolab.net

Aprendizado de Máquina. Uma Introdução com a Linguagem … · regressão a mais aplicada, ... necessária para entendermos a regressão linear é simples, ... a partir das equações

  • 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