[{"data":1,"prerenderedAt":328},["ShallowReactive",2],{"lang-switch-post-\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab08-overfitting":3,"post-pt-machine-learning-specialization-w3-lab08-overfitting":4},"\u002Fen\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab08-overfitting",{"id":5,"title":6,"body":7,"cover":312,"date":313,"description":314,"extension":315,"meta":316,"navigation":317,"order":318,"path":319,"playlist":320,"seo":321,"status":322,"stem":323,"tags":324,"__hash__":327},"posts\u002Fpt\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab08-overfitting.md","Decorou a Prova, Não Aprendeu a Matéria",{"type":8,"value":9,"toc":301},"minimark",[10,20,25,40,44,81,85,88,98,121,141,145,157,161,164,186,190,238,242,253,260,279,282,294],[11,12,13,14,19],"p",{},"O notebook original desse lab é um widget clicável do Jupyter que só roda dentro do ambiente do curso. Sem ele, reconstruí a mesma intuição como dois componentes interativos que rodam direto aqui na página, um pra regressão (você já usou essa peça ",[15,16,18],"a",{"href":17},"\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw2-lab04-feature-engineering","no lab de engenharia de features",") e um novo, pra classificação, que é o assunto de hoje.",[21,22,24],"h2",{"id":23},"uma-palavra-que-já-apareceu-agora-com-nome","Uma palavra que já apareceu, agora com nome",[11,26,27,30,31,35,36,39],{},[15,28,29],{"href":17},"Lá no post de engenharia de features"," você já viu esse fenômeno: um polinômio de grau alto para de aprender a tendência dos dados e passa a decorar cada ponto de treino, ziguezagueando entre eles. Isso tem nome: ",[32,33,34],"strong",{},"overfitting"," (sobreajuste). O oposto, um modelo simples demais que nem consegue captar o padrão óbvio, é ",[32,37,38],{},"underfitting"," (subajuste). Hoje esse mesmo par de problemas aparece de novo, só que do lado da classificação, e a cara dele muda.",[21,41,43],{"id":42},"o-mesmo-truque-de-sempre-mapear-features","O mesmo truque de sempre: mapear features",[11,45,46,47,50,51,55,56,59,60,63,64,63,67,70,71,75,76,55,78,80],{},"Pra fronteira de decisão poder curvar, preciso do mesmo truque ",[15,48,49],{"href":17},"das features polinomiais",", só que agora em duas variáveis ao mesmo tempo: transformo ",[52,53,54],"code",{},"x0"," e ",[52,57,58],{},"x1"," numa porção de termos novos, ",[52,61,62],{},"x0²",", ",[52,65,66],{},"x0·x1",[52,68,69],{},"x1²",", e por aí vai até o grau que eu escolher. Jogo regressão logística de novo em cima desses termos, exatamente ",[15,72,74],{"href":73},"\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab06-gradient-descent","como sempre",". A fronteira continua sendo \"linear\" nesses termos novos, só que, quando eu volto pro espaço original de ",[52,77,54],{},[52,79,58],{},", essa reta virou curva.",[21,82,84],{"id":83},"testando-com-um-dataset-que-não-dá-pra-separar-com-reta-nenhuma","Testando com um dataset que não dá pra separar com reta nenhuma",[11,86,87],{},"Um anel de pacientes de uma classe, cercando um grupo central da outra classe. Nenhuma reta corta um anel ao meio deixando o centro de um lado só, então esse dataset é o teste perfeito pra ver grau baixo falhar e grau alto exagerar:",[89,90],"polynomial-boundary-explorer",{":classes":91,":max-degree":92,":points":93,":x-max":94,":x-min":95,":y-max":94,":y-min":95,"negative-label":96,"positive-label":97},"[0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1]","10","[[1.6,0.0],[1.323,0.962],[0.484,1.49],[-0.461,1.42],[-1.25,0.908],[-1.481,0.0],[-1.3,-0.945],[-0.544,-1.675],[0.476,-1.466],[1.234,-0.897],[0.171,0.125],[0.037,-0.326],[-0.01,0.243],[-0.47,-0.16],[-0.665,-0.451],[-0.645,-0.082],[-0.444,0.095],[0.055,-0.065],[-0.881,-0.189],[-0.017,0.04]]","2","-2","anel","centro",[11,99,100,101,104,105,108,109,112,113,116,117,120],{},"Com ",[32,102,103],{},"grau 1"," (deixa ",[52,106,107],{},"lambda"," em 0), a fronteira só consegue ser uma reta, e uma reta não separa anel de centro de jeito nenhum: acurácia trava em ",[52,110,111],{},"50%",", a cara clássica de underfitting. Sobe pra ",[32,114,115],{},"grau 2"," e a mágica acontece: um círculo já resolve o problema perfeitamente, acurácia vai pra ",[52,118,119],{},"100%",". Até aqui, tudo certo.",[11,122,123,124,127,128,130,131,133,134,137,138,140],{},"Agora sobe até ",[32,125,126],{},"grau 8"," ou ",[32,129,92],{},". Repara: a acurácia continua em ",[52,132,119],{},", ela não piora. Mas olha o ",[32,135,136],{},"formato"," da região colorida: em vez de um círculo limpo, ela fica cheia de dobras e línguas se esticando pra alcançar cada ponto individualmente. Isso é overfitting em classificação: o modelo não aprendeu \"tem um anel em volta de um centro\", ele decorou a posição exata de cada um dos 20 pacientes que eu mostrei pra ele. Um paciente novo, caindo numa dessas dobras esquisitas, provavelmente ia ser classificado errado, mesmo o modelo acertando ",[52,139,119],{}," dos que ele já viu.",[21,142,144],{"id":143},"a-acurácia-de-treino-pode-mentir-pra-você","A acurácia de treino pode mentir pra você",[11,146,147,148,151,152,156],{},"Esse é o ponto mais importante do lab: ",[32,149,150],{},"acurácia de treino em 100% não quer dizer modelo bom",". Ela só diz que o modelo é flexível o bastante pra decorar o que já viu. Pra saber se ele aprendeu de verdade, o teste tem que ser em gente que ele nunca viu, exatamente ",[15,153,155],{"href":154},"\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab03-decision-boundary","a acurácia de teste que venho reportando desde o primeiro lab da fronteira de decisão",".",[21,158,160],{"id":159},"o-que-fazer-quando-isso-acontece","O que fazer quando isso acontece",[11,162,163],{},"O curso lista três saídas, sem entrar em código ainda:",[165,166,167,174,180],"ul",{},[168,169,170,173],"li",{},[32,171,172],{},"Mais dados de treino",": com mais exemplos espalhados pelo anel e pelo centro, fica mais difícil pra uma fronteira maluca \"caber\" perfeitamente em todos.",[168,175,176,179],{},[32,177,178],{},"Menos features",": um grau menor (ou menos variáveis de entrada) tira flexibilidade do modelo, ele não consegue mais dobrar tanto.",[168,181,182,185],{},[32,183,184],{},"Regularização",": em vez de cortar features, você deixa todas, mas força os pesos a ficarem pequenos, sem zerar nenhum. É a saída mais usada na prática, e é o assunto do próximo lab.",[21,187,189],{"id":188},"fechando","Fechando",[191,192,193,207],"table",{},[194,195,196],"thead",{},[197,198,199,204],"tr",{},[200,201,203],"th",{"align":202},"left","O que eu já sabia",[200,205,206],{"align":202},"O que essa aula assentou",[208,209,210,222,230],"tbody",{},[197,211,212,219],{},[213,214,215,216],"td",{"align":202},"Grau alto decora em vez de aprender, ",[15,217,218],{"href":17},"eu já vi isso na regressão",[213,220,221],{"align":202},"O mesmo fenômeno aparece na classificação, só que como fronteira serpenteando em vez de curva ziguezagueando",[197,223,224,227],{},[213,225,226],{"align":202},"Acurácia de treino mede acerto no que já foi visto",[213,228,229],{"align":202},"Acurácia de treino em 100% pode esconder um modelo decorado, não aprendido",[197,231,232,235],{},[213,233,234],{"align":202},"Fronteira reta não separa qualquer dataset",[213,236,237],{"align":202},"Mapear features pra um grau mais alto dá curva à fronteira, com o mesmo custo de ficar exagerada se eu não tomar cuidado",[21,239,241],{"id":240},"aplicação-prática","Aplicação Prática",[11,243,244,245,248,249,252],{},"Volto pro dataset real de câncer de mama (",[52,246,247],{},"worst concave points"," + ",[52,250,251],{},"worst perimeter",", conjunto de treino\u002Fteste completo, 455 pacientes pra treinar e 114 pra testar). Treino regressão logística mapeada em graus crescentes e comparo o custo no treino contra o custo em pacientes nunca vistos:",[254,255],"train-test-curve-chart",{":points":256,"test-label":257,"train-label":258,"y-axis-label":259},"[{\"degree\":1,\"trainRmse\":0.1461,\"testRmse\":0.0764},{\"degree\":2,\"trainRmse\":0.1403,\"testRmse\":0.0769},{\"degree\":3,\"trainRmse\":0.1364,\"testRmse\":0.0785},{\"degree\":4,\"trainRmse\":0.1346,\"testRmse\":0.0799},{\"degree\":5,\"trainRmse\":0.1339,\"testRmse\":0.0807},{\"degree\":6,\"trainRmse\":0.1337,\"testRmse\":0.0812},{\"degree\":7,\"trainRmse\":0.1336,\"testRmse\":0.0813},{\"degree\":8,\"trainRmse\":0.1335,\"testRmse\":0.0814}]","custo de teste","custo de treino","custo",[11,261,262,263,266,267,270,271,274,275,278],{},"O custo de treino cai sem parar conforme o grau sobe (faz sentido, mais flexibilidade sempre ajuda a explicar o que já foi visto). O custo de teste faz o oposto: começa subindo já no grau 2 e não para de piorar. E a acurácia de teste confirma: ",[52,264,265],{},"97.4%"," no grau 1, caindo pra ",[52,268,269],{},"94.7%"," no grau 8, exatamente enquanto a acurácia de treino sobe de ",[52,272,273],{},"93.2%"," pra ",[52,276,277],{},"94.5%",". O modelo mais \"preciso\" no papel (treino) é o pior nos pacientes que ele não viu.",[11,280,281],{},"Pra ver esse mesmo fenômeno no dado real, não só no gráfico de custo:",[89,283],{":classes":284,":max-degree":285,":points":286,":x-max":287,":x-min":95,":y-max":288,":y-min":289,"negative-label":290,"positive-label":291,"x-label":292,"y-label":293},"[1,0,1,0,0,1,1,0,1,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,1,1,0,0,0,1,0,0,1,1,0,1]","8","[[-0.32,-0.452],[-0.488,-0.489],[1.029,0.792],[-1.323,-0.679],[-1.107,-0.354],[0.028,0.285],[1.357,0.6],[-0.482,-0.821],[0.645,1.668],[2.438,2.097],[-0.216,-0.078],[0.423,0.588],[0.592,0.924],[-1.75,-0.661],[-0.581,-0.569],[-0.006,-0.627],[-0.409,-0.708],[2.699,2.082],[0.097,-0.469],[2.365,1.92],[0.635,0.105],[1.917,0.54],[-1.357,-1.215],[-0.144,-0.207],[1.455,1.89],[0.537,0.18],[-1.09,-0.835],[-0.456,-0.646],[-0.343,0.66],[-0.464,-0.522],[-0.231,-1.021],[-1.29,-0.86],[-1.608,-0.568],[-0.191,-0.096],[0.42,-0.569],[-0.617,-0.605],[-0.135,-0.274],[-0.45,-0.075],[-1.015,-0.69],[-0.397,-0.398],[-0.473,-1.081],[1.894,1.305],[0.495,-0.918],[-0.289,-0.543],[2.369,3.41],[-1.004,-1.172],[2.196,-0.247],[-0.095,-0.449],[0.816,1.149],[0.888,1.446],[0.406,-0.171],[-0.785,-0.839],[-0.251,-0.416],[0.497,0.981],[-1.385,-1.149],[-0.185,-0.162],[0.955,1.623],[1.487,1.791],[-0.842,-0.481],[0.986,1.629]]","3","3.5","-1.5","benigno","maligno","worst concave points (normalizado)","worst perimeter (normalizado)",[11,295,296,297,300],{},"Com grau baixo a fronteira é praticamente a mesma reta ",[15,298,299],{"href":154},"dos labs anteriores",". Sobe o grau e repara nas bordas da amostra: a região colorida começa a fazer curvas apertadas em volta de pacientes isolados, tentando \"acertar\" cada um, exatamente o padrão que o gráfico de custo já denunciou como piora, não melhora.",{"title":302,"searchDepth":303,"depth":303,"links":304},"",2,[305,306,307,308,309,310,311],{"id":23,"depth":303,"text":24},{"id":42,"depth":303,"text":43},{"id":83,"depth":303,"text":84},{"id":143,"depth":303,"text":144},{"id":159,"depth":303,"text":160},{"id":188,"depth":303,"text":189},{"id":240,"depth":303,"text":241},null,"2026-09-08","Semana 3, Lab 8: um modelo flexível demais não aprende o padrão, ele decora cada ponto do treino de cor. Pra regressão isso já apareceu antes; aqui a mesma decoreba ganha uma cara nova, uma fronteira de decisão que serpenteia em volta de cada paciente em vez de separar as classes de verdade.","md",{},true,19,"\u002Fpt\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab08-overfitting","machine-learning-specialization",{"title":6,"description":314},"published","pt\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab08-overfitting",[325,34,326],"classificacao","regularizacao","F0SHraYoLGdY03dghwWlmpmSigYHMZgX9GW1L5Y1GaE",1788965097303]