Noções básicas de regressão linear

Olá, Habr!



O objetivo deste artigo é falar sobre regressão linear, nomeadamente, recolher e mostrar as formulações e interpretações do problema de regressão em termos de análise matemática, estatística, álgebra linear e teoria da probabilidade. Embora os livros-texto estabeleçam esse tópico de maneira estrita e exaustiva, outro artigo de ciência popular não fará mal.



! Cuidado com o trânsito! O artigo contém um número notável de imagens para ilustrações, algumas em formato gif.



Conteúdo







Introdução



Existem três conceitos semelhantes, três irmãs: interpolação, aproximação e regressão.

Eles têm um objetivo comum: de uma família de funções, escolha aquela que possui uma determinada propriedade.





Interpolação- uma forma de selecionar de uma família de funções aquela que passa por determinados pontos A função é geralmente usada para calcular em pontos intermediários. Por exemplo, definimos manualmente a cor de vários pontos e queremos que as cores dos pontos restantes formem transições suaves entre os dados fornecidos. Ou definimos quadros-chave para a animação e queremos transições suaves entre eles. Exemplos clássicos: interpolação polinomial de Lagrange, interpolação spline, interpolação multidimensional (bilinear, trilinear, vizinho mais próximo, etc.). Existe também um conceito relacionado de extrapolação - prever o comportamento de uma função fora de um intervalo. Por exemplo, prever a taxa do dólar com base nas flutuações anteriores é uma extrapolação.



Aproximação- uma forma de escolher de uma família de funções "simples" uma aproximação para uma função "complexa" em um segmento, enquanto o erro não deve exceder um certo limite. A aproximação é usada quando você precisa obter uma função semelhante a uma dada, mas mais conveniente para cálculos e manipulações (diferenciação, integração, etc.). Ao otimizar seções críticas do código, uma aproximação é frequentemente usada: se o valor de uma função é calculado muitas vezes por segundo e a precisão absoluta não é necessária, então um aproximador mais simples com um "custo" de cálculo menor pode ser dispensado. Exemplos clássicos incluem séries de Taylor em um segmento, aproximação polinomial ortogonal, aproximação de Padé, aproximação de seno de Bhaskar, etc.



Regressão- uma forma de escolher de uma família de funções aquela que minimiza a função perda. Este último caracteriza o quanto a função de teste se desvia dos valores nos pontos dados. Se pontos são obtidos em um experimento, eles inevitavelmente contêm erro de medição, ruído, então é mais razoável exigir que a função transmita a tendência geral e não passe exatamente por todos os pontos. Em certo sentido, a regressão é um “ajuste de interpolação”: queremos desenhar a curva o mais próximo possível dos pontos e ainda mantê-la o mais simples possível para capturar a tendência geral. A função de perda (na literatura inglesa “função perda” ou “função custo”) é responsável pelo equilíbrio entre esses desejos conflitantes.



Neste artigo, veremos a regressão linear. Isso significa que a família de funções que escolhemos é uma combinação linear de funções de base predeterminadasf eu

f = i w i f i .

O objetivo da regressão é encontrar os coeficientes desta combinação linear e, assim, determinar a função de regressão f (também chamado demodelo). Observe que a regressão linear é chamada de linear precisamente por causa da combinação linear das funções básicas - isso não está relacionado às funções mais básicas (elas podem ser lineares ou não).



A regressão está conosco há muito tempo: o método foi publicado pela primeira vez por Legendre em 1805, embora Gauss o tenha abordado antes e usado com sucesso para prever a órbita do "cometa" (na verdade, um planeta anão) Ceres. Existem muitas variações e generalizações de regressão linear: LAD, Least Squares, Ridge Regression, Lasso Regression, ElasticNet e muitos outros.



GIF
. — .



GoogleColab.

GitHub





Método dos mínimos quadrados



Vamos começar com o caso bidimensional mais simples. Vamos receber pontos no avião{ ( x 1 , y 1 ) , , ( x N , y N ) } e estamos procurando por uma função afim

f ( x ) = a + b x ,



para que seu gráfico fique mais próximo dos pontos. Assim, nossa base consiste em uma função constante e uma linear( 1 , x ) .



Como você pode ver na ilustração, a distância de um ponto a uma linha reta pode ser entendida de diferentes maneiras, por exemplo, geometricamente - é o comprimento de uma perpendicular. No entanto, no contexto da nossa tarefa, precisamos de uma distância funcional, não geométrica. Estamos interessados ​​na diferença entre o valor experimental e a previsão do modelo para cadax i , então você precisa medir ao longo do eixoy .



A primeira coisa que vem à mente é tentar uma expressão que dependa dos valores absolutos das diferenças como uma função de perda| f ( x i ) - y i | ... A opção mais simples é a soma dos módulos de desvioi | f ( x i ) - y i | resulta na regressão da Distância Mínima Absoluta (LAD).



No entanto, a função de perda mais popular é a soma dos quadrados dos desvios do regressante do modelo. Na literatura inglesa, é denominado Soma dos Erros Quadrados (SSE)

SSE(a,b)=SSres[iduals]=Ni=1i2=Ni=1(yif(xi))2=Ni=1(yiabxi)2,

Mínimos Quadrados (OLS) - Regressão Linear com SSE ( a , b ) como uma função de perda.



Essa escolha é principalmente conveniente: a derivada de uma função quadrática é uma função linear e as equações lineares são facilmente resolvidas. No entanto, indicarei ainda outras considerações em favor deSSE ( a , b ) .

GIF
() (). .



GoogleColab.

GitHub





Analise matemática



A maneira mais simples de encontrar argmin a , bSSE ( a , b ) - calcular derivadas parciais em relação aum eb , iguale-os a zero e resolva o sistema de equações lineares

um SSE(a,b)= - 2 N i = 1 ( y i - a - b x i ) , b SSE(a,b)= - 2 N i = 1 ( y i - a - b x i ) x i .

Os valores dos parâmetros que minimizam a função de perda satisfazem as equações

0=-2NEu=1(yEu-ˆuma-ˆbxEu),0=-2NEu=1(yEu-ˆuma-ˆbxEu)xEu,

que são fáceis de resolver

ˆuma=EuyEuN-ˆbEuxEuN,ˆb=EuxEuyEuN-EuxEuEuyEuN2Eux2EuN-(Eux2EuN)2...

Temos expressões pesadas e desestruturadas. Agora vamos enobrecê-los e dar-lhes significado.



Estatisticas



As fórmulas resultantes podem ser escritas de forma compacta usando estimadores estatísticos: média , variações σ (desvio padrão), covariância σ(,) e correlações ρ(,)

ˆuma=y-ˆbx,ˆb=xy-xyx2-x2...

Vamos reescrever ˆb Como

ˆb=σ(x,y)σ2x,

Onde σx é o desvio padrão da amostra não corrigido (enviesado), e σ(x,y)- covariância. Agora lembre-se de que o coeficiente de correlação (coeficiente de correlação de Pearson)

ρ(x,y)=σ(x,y)σxσy

e escrever

ˆb=ρ(x,y)σyσx...





Agora podemos apreciar toda a elegância das estatísticas descritivas escrevendo a equação da linha de regressão como esta



y-y=ρ(x,y)σyσx(x-x)...

Primeiro, esta equação indica imediatamente duas propriedades da linha de regressão:

  • a linha reta passa pelo centro de massa (x,y);
  • se ao longo do eixo x por unidade de comprimento escolha σx, e ao longo do eixo y - σy, então o ângulo de inclinação da linha reta será de -45 antes 45... Isso se deve ao fato de que-1ρ(x,y)1...


Em segundo lugar, agora fica claro por que o método de regressão é chamado assim. Em unidades de desvio padrãoy desvia de sua média por menos de x, Porque |ρ(x,y)|1... Isso é chamado de regressão (do latim regressus - "retorno") em relação à média. Este fenômeno foi descrito por Sir Francis Galton no final do século 19 em seu artigo "Regressão à Mediocridade na Herança do Crescimento". O artigo mostra que as características (como altura) que se desviam muito da média raramente são herdadas. As características da prole parecem tender para a média - a natureza repousa sobre os filhos de gênios.



Ao elevar o coeficiente de correlação ao quadrado, obtemos o coeficiente de determinaçãoR=ρ2... O quadrado desta medida estatística mostra o quão bem o modelo de regressão se ajusta aos dados.R2igual a 1, significa que a função se ajusta perfeitamente a todos os pontos - os dados estão perfeitamente correlacionados. Pode ser provado queR2mostra quanto da variância nos dados é devido ao melhor modelo linear. Para entender o que isso significa, apresentamos as definições

Vardumatuma=1NEu(yEu-y)2,Varres=1NEu(yEu-modelo(xEu))2,Varreg=1NEu(modelo(xEu)-y)2...

Vardumatuma - variação dos dados iniciais (variação de pontos yEu)



Varres - variação de resíduos, ou seja, variação de desvios do modelo de regressão - de yEu você precisa subtrair a previsão do modelo e encontrar a variação.



Varreg - variação da regressão, ou seja, variação das previsões do modelo de regressão em pontos xEu (observe que a média das previsões do modelo corresponde y)



A questão é que a variação nos dados originais é decomposta na soma de duas outras variações: a variação que é explicada pelo modelo e a variação do ruído aleatório (resíduos)

Vardumatuma=Varres+Varreg...

ou

σ2dumatuma=σ2res+σ2reg...

Como você pode ver, os desvios padrão formam um triângulo retângulo.





Nós nos esforçamos para nos livrar da variabilidade associada ao ruído e deixar apenas a variabilidade que é explicada pelo modelo - queremos separar o joio do trigo. A extensão em que o melhor dos modelos lineares teve sucesso é evidenciada porR2igual a um menos a fração de variação do erro na variação total

R2=Vardumatuma-VarresVardumatuma=1-VarresVardumatuma

ou a proporção da variação explicada (proporção da variação da regressão na variação total)

R2=VarregVardumatuma...

R igual ao cosseno de um ângulo em um triângulo retângulo (σdumatuma,σreg,σres)... A propósito, às vezes uma fração da variação inexplicada é introduzida FvocêV=1-R2e é igual ao quadrado do seno neste triângulo. Se o coeficiente de determinação for pequeno, talvez tenhamos escolhido funções de base malsucedidas, a regressão linear não é aplicável de todo, etc.



Teoria da probabilidade



Anteriormente, falamos da função de perda SSE(uma,b)por razões de conveniência, mas também pode ser alcançado usando a teoria da probabilidade e o método da máxima verossimilhança (MLM). Deixe-me relembrar brevemente sua essência. Suponha que temosNvariáveis ​​aleatórias independentes distribuídas de forma idêntica (em nosso caso, resultados de medição). Conhecemos a forma da função de distribuição (por exemplo, a distribuição normal), mas queremos determinar os parâmetros que estão incluídos nela (por exemploµ e σ) Para fazer isso, você precisa calcular a probabilidade de obterNpontos de dados sob a suposição de parâmetros constantes, mas desconhecidos. Devido à independência das medidas, obtemos o produto das probabilidades de realização de cada dimensão. Se pensarmos no valor resultante como uma função de parâmetros (função de verossimilhança) e encontrarmos seu máximo, obteremos uma estimativa dos parâmetros. Freqüentemente, em vez da função de verossimilhança, eles usam seu logaritmo - é mais fácil diferenciá-lo, mas o resultado é o mesmo.



Voltemos ao problema de regressão simples. Digamos que os valoresx sabemos exatamente, mas em medição yhá ruído aleatório (propriedade exógena fraca ). Além disso, assumimos que todos os desvios da linha reta (propriedade de linearidade ) são causados ​​por ruído com uma distribuição constante ( distribuição constante ). Então

y=uma+bx+ϵ,

Onde ϵ - variável aleatória normalmente distribuída

ϵN(0,σ2),p(ϵ)=12πσ2e-ϵ22σ2...







Com base nas premissas acima, escrevemos a função de probabilidade

eu(uma,b|y)=P(y|uma,b)=EuP(yEu|uma,b)=Eup(yEu-uma-bx|uma,b)==Eu12πσ2e-(yEu-uma-bx)22σ2=12πσ2e-Eu(yEu-uma-bx)22σ2==12πσ2e-SSE(uma,b)2σ2

e seu logaritmo

eu(uma,b|y)=registroeu(uma,b|y)=-SSE(uma,b)+const...

Assim, a probabilidade máxima é alcançada em um mínimo SSE

(ˆuma,ˆb)=argmaxuma,beu(uma,b|y)=argminuma,bSSE(uma,b),

o que dá razão para aceitá-lo como uma função de perda. A propósito, se

ϵLaplace(0,α),peu(ϵ;µ,α)=α2e-α|ϵ-µ|

obtemos a função de perda de regressão LAD

EeuUMAD(uma,b)=Eu|yEu-uma-bxEu|,

que mencionamos anteriormente.



A abordagem que usamos nesta seção é possível. É possível obter o mesmo resultado usando propriedades mais gerais. Em particular, a propriedade de distribuição constante pode ser enfraquecida substituindo-a pelas propriedades de independência, constância de variação (homocedasticidade) e ausência de multicolinearidade. Além disso, em vez da estimativa MMP, você pode usar outros métodos, por exemplo, estimativa MMSE linear.



Regressão multilinear



Até agora, consideramos o problema de regressão para um recurso escalar x, no entanto geralmente o regressor é nvetor dimensional x... Em outras palavras, para cada dimensão, registramosnrecursos, combinando-os em um vetor. Neste caso, é lógico aceitar o modelo comn+1 funções de base independentes do argumento do vetor - n graus de liberdade correspondem n recursos e mais um - regressante y... A escolha mais simples são funções de base linear(1,x1,,xn)... Quandon=1 nós temos a base já familiar (1,x)...



Então, queremos encontrar esse vetor (conjunto de coeficientes)W, o que

nj=0Wjx(Eu)j=Wx(Eu)yEu,Eu=1...N...

Placa ""significa que estamos procurando uma solução que minimize a soma dos quadrados dos erros

ˆW=argminWNEu=1(yEu-Wx(Eu))2

A última equação pode ser reescrita de uma maneira mais conveniente. Para isso colocamosx(Eu) nas linhas da matriz (matriz de informação)

X=(-x(1)--x(N)-)=(|||x0x1xn|||)=(1x(1)1x(1)n1x(N)1x(N)n)...

Então as colunas da matriz xEu encontrar medidas Eu-ésimo recurso. É importante não se confundir aqui:N - o número de medições, n- o número de sinais (características) que registramos. O sistema pode ser escrito como

XWy...

O quadrado da norma da diferença entre os vetores nos lados direito e esquerdo da equação forma a função de perda

SSE(W)=y-XW2,WRn+1;yRN,

que pretendemos minimizar

ˆW=argminWSSE(W)=argminW(y-XW)(y-XW)==argminW(yy-2WXy+WXXW)...

Vamos diferenciar a expressão final por W(se você esqueceu como fazer, dê uma olhada no livro de receitas Matrix )

SSE(W)W=-2Xy+2XXW,

nós igualamos a derivada a 0e temos o assim chamado. equações normais

XXˆW=Xy...

Se as colunas da matriz de informação X são linearmente independentes (não há recursos perfeitamente correlacionados), então a matriz XXtem o oposto (a prova pode ser vista, por exemplo, no vídeo da academia de Khan ). Então podemos escrever

ˆW=(XX)-1Xy=X+y,

Onde

X+=(XX)-1X



pseudo-inverso a X... O conceito de matriz pseudoinversa foi introduzido em 1903 por Fredholm e desempenhou um papel importante nas obras de Moore e Penrose.



Deixe-me lembrá-lo do que virarXX e encontra X+ só é possível se as colunas Xsão linearmente independentes. No entanto, se as colunasX perto da dependência linear, cálculo (XX)-1já está se tornando numericamente instável. O grau de dependência linear de recursos emXou, como se costuma dizer, a multicolinearidade da matrizXX, pode ser medido pelo número de condicionalidade - a razão entre o valor próprio máximo e o mínimo. Quanto maior for, mais pertoXX para degenerar e computação instável do pseudoinverso.





Álgebra Linear



A solução para o problema da regressão multilinear pode ser alcançada de forma bastante natural com o auxílio da álgebra linear e da geometria, pois mesmo o fato de a norma do vetor de erro aparecer na função de perda já sugere que o problema tem um lado geométrico. Vimos que uma tentativa de encontrar um modelo linear que descreva os pontos experimentais leva à equação

XWy...

Se o número de variáveis ​​for igual ao número de incógnitas e as equações forem linearmente independentes, o sistema terá uma solução única. Porém, se o número de dimensões exceder o número de feições, ou seja, houver mais equações do que incógnitas, o sistema torna-se inconsistente, sobredeterminado. Neste caso, o melhor que podemos fazer é escolher o vetorWcuja imagem XW o mais próximo de y... Deixe-me lembrá-lo de que muitas imagens ou espaço de colunaC(X) É uma combinação linear dos vetores de coluna da matriz X

(|||x0x1xn|||)W=W0x0+W1x1+Wnxn...

C(X) - n+1subespaço linear dimensional (consideramos recursos linearmente independentes), extensão linear de vetores de coluna X... Então sey pertence C(X), então podemos encontrar uma solução, caso contrário, buscaremos, por assim dizer, o melhor das não soluções.



Se além de vetoresC(X) consideramos todos os vetores perpendiculares a eles, então obtemos mais um subespaço e podemos qualquer vetor de RNdecompõe-se em dois componentes, cada um dos quais vive em seu próprio subespaço. O segundo espaço perpendicular pode ser caracterizado como segue (precisaremos disso mais tarde). Deixe irvRNentão

Xv=(-x0--xn-)v=(x0vxnv)

é zero se e somente se v perpendicular a todos xEue, portanto, todo C(X)... Assim, encontramos dois subespaços lineares perpendiculares, combinações lineares de vetores dos quais completamente, sem buracos, "cobrem" todosRN... Isso às vezes é denotado pelo símbolo de soma direta ortogonal





Onde ker(X)={v|Xv=0}... Cada um dos subespaços pode ser alcançado usando o operador de projeção correspondente, mas mais sobre isso a seguir.



Agora vamos imaginar y decomposição

y=yproj+y,yprojC(X),yker(X)...





Se estamos procurando uma solução ˆW, então é natural exigir que ||y-XW||era mínimo, porque esse é o comprimento do vetor restante. Considerando a perpendicularidade dos subespaços e o teorema de Pitágoras

argminW||y-XW||=argminW||y+yproj-XW||=argminW||y||2+||yproj-XW||2,

mas desde a escolha de um adequado W, Posso obter qualquer vetor de espaço de coluna, então o problema é reduzido a

XˆW=yproj,

e ypermanecerá como um erro fatal. Qualquer outra escolhaˆW só cometerá mais erros.



Se agora nos lembrarmos disso Xy=0então é fácil de ver

XXW=Xyproj=Xyproj+Xy=Xy,

o que é muito conveniente, uma vez que yproj nós não temos, mas y- Há sim. Lembre-se da seção anterior queXX tem o inverso sob a condição de independência linear dos recursos e escreve a solução

W=(XX)-1Xy=X+y,

Onde X+a já familiar matriz pseudoinversa. Se estivermos interessados ​​na projeçãoyproj, então podemos escrever

yproj=XW=XX+y=ProjXy,

Onde ProjX- operador de projeção no espaço da coluna.



Vamos esclarecer o significado geométrico do coeficiente de determinação.



Observe que o vetor roxo ˉy1=ˉy(1,1,...,1) proporcional à primeira coluna da matriz de informação X, que consiste em uma unidade de acordo com nossa escolha de funções básicas. No triângulo RGB

y-ˆy1=y-ˉy+ˆy-ˉy1...

Uma vez que este triângulo é retangular, então pelo teorema de Pitágoras

y-ˆy12=y-ˉy2+ˆy-ˉy12...

Esta é uma interpretação geométrica do fato já conhecido de que

Vardumatuma=Varres+Varreg...

Nós sabemos isso

R2=VarregVardumatuma,

que significa

R=cosθ...

Legal, não é?





Base arbitrária



Como sabemos, a regressão é realizada em funções básicas fEu e seu resultado é o modelo

f=EuWEufEu,

mas até agora temos usado o mais simples fEuque simplesmente transmitia os recursos originais sem alterações, bem, talvez complementando-os com recursos constantes f0(x)=1... Como você pode ver, na verdade, nenhum tipofEu, nem seu número é limitado por nada - o principal é que as funções na base são linearmente independentes. Normalmente, a escolha é feita com base em suposições sobre a natureza do processo que estamos modelando. Se tivermos motivos para acreditar que os pontos{(x1,y1),,(xN,yN)} cair em uma parábola, e não em uma linha reta, então vale a pena escolher uma base (1,x,x2)... O número de funções básicas pode ser menor ou maior que o número de recursos originais.

GIF
. scikit-learn , — .



GoogleColab.

GitHub



Se tivermos decidido com base, procederemos da seguinte forma. Formamos uma matriz de informações

Φ=(-f(1)--f(N)-)=(f0(x(1))f1(x(1))fn(x(1))f0(x(N))f1(x(N))fn(x(N))),

escreva a função de perda

E(W)=ϵ(W)2=y-ΦW2

e encontrar seu mínimo, por exemplo, usando a matriz pseudoinversa

ˆW=argminWE(W)=(ΦΦ)-1Φy=Φ+y

ou outro método.





Considerações finais



Problema de seleção de dimensão



Na prática, muitas vezes é necessário construir de forma independente um modelo do fenômeno, ou seja, determinar quantas e quais funções básicas devem ser desempenhadas. O primeiro impulso de "conseguir mais" pode ser uma piada cruel: o modelo será muito sensível a ruídos nos dados (overfitting). Por outro lado, se você restringir excessivamente o modelo, ele ficará muito grosso (ajuste insuficiente).



Existem duas maneiras de sair dessa situação. A primeira é aumentar consistentemente o número de funções básicas, verificar a qualidade da regressão e parar a tempo. Ou a segunda: escolha uma função de perda que determinará o número de graus de liberdade automaticamente. Como critério para o sucesso da regressão, pode-se usar o coeficiente de determinação, que já foi mencionado acima, porém, o problema é queR2aumenta monotonicamente com o crescimento da dimensão da base. Portanto, o coeficiente ajustado é introduzido

ˉR2=1-(1-R2)[N-1N-(n+1)],

Onde N - tamanho da amostra, n- o número de variáveis ​​independentes. Seguindo oˉR2, podemos parar a tempo e parar de adicionar outros graus de liberdade.



O segundo grupo de abordagens é a regularização, a mais famosa das quais é Ridge (eu2/ ridge / regularização Tikhonov), Lasso (eu1regularização) e Rede Elástica (Ridge + Lasso). A ideia principal desses métodos é modificar a função de perda com termos adicionais que não permitirão o vetor de coeficientesW crescer indefinidamente e, assim, evitar a reciclagem

ECume(W)=SSE(W)+αEu|WEu|2=SSE(W)+αW2eu2,ELaço(W)=SSE(W)+βEu|WEu|=SSE(W)+βWeu1,ERU(W)=SSE(W)+αW2eu2+βWeu1,

Onde α e β- parâmetros que controlam a "força" da regularização. Este é um tópico vasto com bela geometria que merece uma discussão separada. A propósito, mencionarei que para o caso de duas variáveis, usando interpretação probabilística, pode-se obter regressões de Ridge e Lasso escolhendo com sucesso a distribuição anterior para o coeficiente.b

y=uma+bx+ϵ,ϵN(0,σ2),{bN(0,τ2)Cume,bLaplace(0,α)Laço...









Métodos numéricos



Deixe-me dizer algumas palavras sobre como minimizar a função de perda na prática. SSE é uma função quadrática comum que é parametrizada pelos dados de entrada, portanto, em princípio, pode ser minimizada pelo método de descida mais íngreme ou outros métodos de otimização. Claro, os melhores resultados são mostrados por algoritmos que levam em consideração a forma da função SSE, por exemplo, o método de descida gradiente estocástico. A implementação de regressão do Lasso no scikit-learn usa o método de descida por coordenadas.



Você também pode resolver equações normais usando métodos de álgebra linear numérica. Um método eficiente que o scikit-learn usa para OLS é encontrar o pseudoinverso usando decomposição de valor singular. Os campos deste artigo são muito restritos para tocar neste tópico, para detalhes, eu o aconselho a consultar o curso de palestras de K.V. Vorontsov.



Publicidade e conclusão



Este artigo é uma releitura resumida de um dos capítulos de um curso sobre aprendizado de máquina clássico na Universidade Acadêmica de Kiev (sucessor da filial de Kiev do Instituto de Física e Tecnologia de Moscou, KO MIPT). O autor do artigo ajudou a criar este curso. O curso é feito tecnicamente na plataforma Google Colab, que permite combinar fórmulas formatadas em LaTeX, código executável Python e demonstrações interativas em Python + JavaScript, para que os alunos possam trabalhar com os materiais do curso e executar o código em qualquer computador que tenha um navegador. A página inicial contém links para resumos, pastas de trabalho práticas e recursos adicionais. O curso é baseado nos seguintes princípios:



  • todos os materiais devem estar disponíveis para os alunos da primeira dupla;
  • a aula é necessária para a compreensão, não para fazer anotações (as anotações já estão prontas, não adianta escrevê-las se não quiser);
  • uma palestra é mais do que uma palestra (há mais material nas notas do que foi anunciado na palestra; na verdade, as notas são um livro-texto completo);
  • visibilidade e interatividade (ilustrações, fotos, demos, gifs, código, vídeos do youtube).


Se você quiser ver o resultado, dê uma olhada na página do curso no GitHub .



Espero que esteja interessado, obrigado pela atenção.



All Articles