[{"data":1,"prerenderedAt":332},["ShallowReactive",2],{"lang-switch-post-\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab07-scikit-learn":3,"post-pt-machine-learning-specialization-w3-lab07-scikit-learn":4},"\u002Fen\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab07-scikit-learn",{"id":5,"title":6,"body":7,"cover":316,"date":317,"description":318,"extension":319,"meta":320,"navigation":48,"order":321,"path":322,"playlist":323,"seo":324,"status":325,"stem":326,"tags":327,"__hash__":331},"posts\u002Fpt\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab07-scikit-learn.md","O Que Levou Seis Labs, o Scikit-Learn Faz em Três Linhas",{"type":8,"value":9,"toc":310},"minimark",[10,20,25,62,83,98,111,120,129,137,141,144,153,162,180,184,235,239,250,274,287,306],[11,12,13,14,19],"p",{},"Seis labs pra chegar até aqui: sigmoide, fronteira de decisão, perda logística, custo, gradiente descendente, tudo escrito à mão, fórmula por fórmula. Esse lab é o mais curto da semana, e é assim de propósito: mostrar que tudo isso ",[15,16,18],"a",{"href":17},"\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw2-lab05-scikit-learn","já existe pronto"," numa biblioteca, exatamente como já vimos pro lado da regressão linear.",[21,22,24],"h2",{"id":23},"o-código-inteiro","O código inteiro",[26,27,32],"pre",{"className":28,"code":29,"language":30,"meta":31,"style":31},"language-python shiki shiki-themes github-light github-dark","from sklearn.linear_model import LogisticRegression\n\nlr_model = LogisticRegression()\nlr_model.fit(X, y)\n","python","",[33,34,35,43,50,56],"code",{"__ignoreMap":31},[36,37,40],"span",{"class":38,"line":39},"line",1,[36,41,42],{},"from sklearn.linear_model import LogisticRegression\n",[36,44,46],{"class":38,"line":45},2,[36,47,49],{"emptyLinePlaceholder":48},true,"\n",[36,51,53],{"class":38,"line":52},3,[36,54,55],{},"lr_model = LogisticRegression()\n",[36,57,59],{"class":38,"line":58},4,[36,60,61],{},"lr_model.fit(X, y)\n",[11,63,64,67,68,71,72,75,76,75,79,82],{},[33,65,66],{},"LogisticRegression()"," cria o modelo, ",[33,69,70],{},".fit(X, y)"," treina ele. Sem escrever ",[33,73,74],{},"sigmoid",", sem escrever ",[33,77,78],{},"compute_gradient_logistic",[33,80,81],{},"gradient_descent",". Por baixo do capô, o sklearn faz todo o trabalho que os últimos seis labs destrincharam linha a linha.",[26,84,86],{"className":28,"code":85,"language":30,"meta":31,"style":31},"y_pred = lr_model.predict(X)\nprint(\"Previsão no conjunto de treino:\", y_pred)\n",[33,87,88,93],{"__ignoreMap":31},[36,89,90],{"class":38,"line":39},[36,91,92],{},"y_pred = lr_model.predict(X)\n",[36,94,95],{"class":38,"line":45},[36,96,97],{},"print(\"Previsão no conjunto de treino:\", y_pred)\n",[99,100,101],"blockquote",{},[11,102,103,107,108],{},[104,105,106],"strong",{},"Saída:"," ",[33,109,110],{},"Previsão no conjunto de treino: [0 0 0 1 1 1]",[26,112,114],{"className":28,"code":113,"language":30,"meta":31,"style":31},"print(\"Acurácia no conjunto de treino:\", lr_model.score(X, y))\n",[33,115,116],{"__ignoreMap":31},[36,117,118],{"class":38,"line":39},[36,119,113],{},[99,121,122],{},[11,123,124,107,126],{},[104,125,106],{},[33,127,128],{},"Acurácia no conjunto de treino: 1.0",[11,130,131,132,136],{},"No dataset de seis pacientes de sempre, acerta todo mundo. Nada surpreendente, ",[15,133,135],{"href":134},"\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab06-gradient-descent","a fronteira treinada à mão no lab passado já fazia isso",".",[21,138,140],{"id":139},"o-detalhe-que-o-sklearn-esconde-por-enquanto","O detalhe que o sklearn esconde (por enquanto)",[11,142,143],{},"Se eu espiar os pesos que o sklearn achou:",[26,145,147],{"className":28,"code":146,"language":30,"meta":31,"style":31},"print(\"coeficientes:\", lr_model.coef_, \"intercepto:\", lr_model.intercept_)\n",[33,148,149],{"__ignoreMap":31},[36,150,151],{"class":38,"line":39},[36,152,146],{},[99,154,155],{},[11,156,157,107,159],{},[104,158,106],{},[33,160,161],{},"coeficientes: [[0.9041 0.7359]] intercepto: [-2.3337]",[11,163,164,165,168,169,172,173,175,176,179],{},"Repara que esses números ",[104,166,167],{},"não batem"," com o ",[33,170,171],{},"w=[5.2812, 5.0782], b=-14.2224"," que o gradiente descendente puro achou no lab passado, mesmo os dois acertando os seis pacientes igual. Isso não é bug de ninguém: o ",[33,174,66],{}," do sklearn, por padrão, já vem com um freio embutido que penaliza pesos grandes demais (o assunto que fecha essa semana, regularização). Ele resolve um problema ",[104,177,178],{},"ligeiramente diferente"," do gradiente descendente cru que eu implementei, por isso o resultado é parecido na decisão final mas diferente nos números. Guarda esse estranhamento, ele vai fazer sentido completo daqui a dois labs.",[21,181,183],{"id":182},"fechando","Fechando",[185,186,187,201],"table",{},[188,189,190],"thead",{},[191,192,193,198],"tr",{},[194,195,197],"th",{"align":196},"left","O que eu já sabia",[194,199,200],{"align":196},"O que essa aula assentou",[202,203,204,227],"tbody",{},[191,205,206,210],{},[207,208,209],"td",{"align":196},"Construí sigmoide, custo e gradiente descendente do zero",[207,211,212,213,216,217,216,220,223,224],{"align":196},"O sklearn empacota tudo isso em ",[33,214,215],{},"fit","\u002F",[33,218,219],{},"predict",[33,221,222],{},"score",", ",[15,225,226],{"href":17},"igual já vimos pra regressão linear",[191,228,229,232],{},[207,230,231],{"align":196},"Os pesos que eu treinei à mão resolvem o problema sem penalidade nenhuma",[207,233,234],{"align":196},"Os pesos do sklearn são diferentes por padrão, porque ele já regulariza sem eu pedir",[21,236,238],{"id":237},"aplicação-prática","Aplicação Prática",[11,240,241,242,245,246,249],{},"Mesmo dataset real ",[15,243,244],{"href":134},"do lab passado"," (",[33,247,248],{},"worst concave points",", amostra de 60 pacientes, normalizada por z-score):",[26,251,253],{"className":28,"code":252,"language":30,"meta":31,"style":31},"lr_model = LogisticRegression()\nlr_model.fit(X_train_z, y_train)\nprint(\"coeficiente:\", lr_model.coef_, \"intercepto:\", lr_model.intercept_)\nprint(\"acurácia:\", lr_model.score(X_train_z, y_train))\n",[33,254,255,259,264,269],{"__ignoreMap":31},[36,256,257],{"class":38,"line":39},[36,258,55],{},[36,260,261],{"class":38,"line":45},[36,262,263],{},"lr_model.fit(X_train_z, y_train)\n",[36,265,266],{"class":38,"line":52},[36,267,268],{},"print(\"coeficiente:\", lr_model.coef_, \"intercepto:\", lr_model.intercept_)\n",[36,270,271],{"class":38,"line":58},[36,272,273],{},"print(\"acurácia:\", lr_model.score(X_train_z, y_train))\n",[99,275,276],{},[11,277,278,107,280,283,284],{},[104,279,106],{},[33,281,282],{},"coeficiente: [[2.4562]] intercepto: [-0.8278]"," · ",[33,285,286],{},"acurácia: 0.9",[11,288,289,290,293,294,297,298,301,302,305],{},"Mesma acurácia (",[33,291,292],{},"0.90",") que o gradiente descendente puro achou nesse exato dataset, mas o coeficiente do sklearn (",[33,295,296],{},"2.4562",") é bem menor que o ",[33,299,300],{},"w≈4.175"," que ",[15,303,304],{"href":134},"rodei à mão",". Duas fronteiras diferentes, mesma decisão final nesses 60 pacientes: essa é a cara da regularização em ação, encolhendo o peso sem perder acurácia. Assunto de dois labs a partir daqui.",[307,308,309],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":45,"depth":45,"links":311},[312,313,314,315],{"id":23,"depth":45,"text":24},{"id":139,"depth":45,"text":140},{"id":182,"depth":45,"text":183},{"id":237,"depth":45,"text":238},null,"2026-09-08","Semana 3, Lab 7: sigmoide, fronteira de decisão, perda, custo e gradiente descendente, tudo escrito à mão nos últimos seis labs, vira import, fit, predict. E a comparação com o sklearn de verdade entrega um spoiler do próximo assunto da matéria.","md",{},18,"\u002Fpt\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab07-scikit-learn","machine-learning-specialization",{"title":6,"description":318},"published","pt\u002Fplaylists\u002Fmachine-learning-specialization\u002Fw3-lab07-scikit-learn",[328,329,330],"classificacao","regressao-logistica","scikit-learn","da9CgMI3uM8we53ZWWhxyTTxFKnf7cxRB0_HqCD8hp4",1788965095726]