{"id":37955,"date":"2019-10-31T22:20:47","date_gmt":"2019-10-31T19:20:47","guid":{"rendered":"https:\/\/prohoster.info\/blog\/linejnaya-regressiya-i-metody-eyo-vosstanovleniya\/"},"modified":"2019-10-31T22:20:47","modified_gmt":"2019-10-31T19:20:47","slug":"linejnaya-regressiya-i-metody-eyo-vosstanovleniya","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/linejnaya-regressiya-i-metody-eyo-vosstanovleniya","title":{"rendered":"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/60ca67872405e9f15b151e958f04260d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fonte: <noindex><a rel=\"nofollow\" href=\"https:\/\/xkcd.com\/1725\/\">xkcd<\/a><\/noindex><\/i><\/p>\n<p>A regress\u00e3o linear \u00e9 um dos algoritmos b\u00e1sicos para muitas \u00e1reas relacionadas \u00e0 an\u00e1lise de dados. A raz\u00e3o \u00e9 evidente. \u00c9 um algoritmo muito simples e compreens\u00edvel, o que contribui para sua ampla aplica\u00e7\u00e3o h\u00e1 muitas d\u00e9cadas, sen\u00e3o centenas de anos. A ideia \u00e9 que supomos uma depend\u00eancia linear de uma vari\u00e1vel em rela\u00e7\u00e3o a um conjunto de outras vari\u00e1veis e, em seguida, tentamos restaurar essa depend\u00eancia.<\/p>\n<p>Mas este artigo n\u00e3o se concentrar\u00e1 na aplica\u00e7\u00e3o da regress\u00e3o linear para resolver problemas pr\u00e1ticos. Aqui ser\u00e3o discutidas caracter\u00edsticas interessantes da implementa\u00e7\u00e3o de algoritmos distribu\u00eddos para sua restaura\u00e7\u00e3o, com as quais nos deparamos ao escrever o m\u00f3dulo de aprendizado de m\u00e1quina em <noindex><a rel=\"nofollow\" href=\"https:\/\/ignite.apache.org\/\">Apache Ignite<\/a><\/noindex>. Um pouco de matem\u00e1tica b\u00e1sica, fundamentos de aprendizado de m\u00e1quina e computa\u00e7\u00e3o distribu\u00edda ajudar\u00e3o a entender como restaurar a regress\u00e3o linear, mesmo que os dados estejam distribu\u00eddos entre milhares de n\u00f3s.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Do que se trata?<\/h3>\n<p>\nTemos a tarefa de restaurar uma depend\u00eancia linear. Como dados de entrada, temos um conjunto de vetores de vari\u00e1veis presumivelmente independentes, a cada um dos quais \u00e9 atribu\u00eddo um determinado valor de vari\u00e1vel dependente. Esses dados podem ser representados na forma de duas matrizes:<\/p>\n<p><img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/2ffbdd09fdc5efaf287fbb4935033302.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nAgora, uma vez que se presume uma depend\u00eancia, e ainda por cima linear, vamos escrever nossa suposi\u00e7\u00e3o na forma de um produto de matrizes (para simplificar a anota\u00e7\u00e3o, aqui e adiante, sup\u00f5e-se que o termo livre da equa\u00e7\u00e3o est\u00e1 oculto atr\u00e1s de <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/21e90cb829e0bc2e12c836f7810c1b1a.png\" style=\"display:block;margin: 0 auto;\" \/>, e a \u00faltima coluna da matriz <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/25c0af2e153ae371e71588efe3bc2ee2.png\" style=\"display:block;margin: 0 auto;\" \/> cont\u00e9m uns):<\/p>\n<p><img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/b1c3c8d2332ae27eedeef675178dee4f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nMuito parecido com um sistema de equa\u00e7\u00f5es lineares, n\u00e3o \u00e9? Parece, mas \u00e9 prov\u00e1vel que essa sistema n\u00e3o tenha solu\u00e7\u00f5es. A raz\u00e3o para isso \u00e9 o ru\u00eddo, que est\u00e1 presente em praticamente todos os dados reais. Tamb\u00e9m pode ser a aus\u00eancia de uma depend\u00eancia linear como tal, pela qual se pode tentar lutar introduzindo vari\u00e1veis adicionais que dependam de forma n\u00e3o linear das vari\u00e1veis originais. Vamos considerar o seguinte exemplo:<br \/>\n<img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/d449b8f931e91cc7b33634ee8d4a4329.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fonte: <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Linear_regression\">Wikipedia<\/a><\/noindex><\/i><\/p>\n<p>Este \u00e9 um exemplo simples de regress\u00e3o linear que demonstra a depend\u00eancia de uma vari\u00e1vel (no eixo <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/fdea97dff413fb13444d7fd8ab65ca0b.png\" style=\"display:block;margin: 0 auto;\" \/>) em rela\u00e7\u00e3o a outra vari\u00e1vel (no eixo <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/edf9cb265e4e4655cd84fb8739843952.png\" style=\"display:block;margin: 0 auto;\" \/>). Para que o sistema de equa\u00e7\u00f5es lineares correspondente a este exemplo tenha uma solu\u00e7\u00e3o, todos os pontos devem estar exatamente em uma \u00fanica linha. Mas isso n\u00e3o acontece. E n\u00e3o est\u00e3o em uma \u00fanica linha exatamente por causa do ru\u00eddo (ou porque a suposi\u00e7\u00e3o de depend\u00eancia linear foi incorreta). Assim, para restaurar a depend\u00eancia linear a partir de dados reais, geralmente \u00e9 necess\u00e1rio introduzir mais uma suposi\u00e7\u00e3o: os dados de entrada cont\u00eam ru\u00eddo e esse ru\u00eddo tem <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Normal_distribution\">distribui\u00e7\u00e3o normal<\/a><\/noindex>. Pode-se fazer suposi\u00e7\u00f5es sobre outros tipos de distribui\u00e7\u00e3o de ru\u00eddo, mas na grande maioria dos casos considera-se exatamente a distribui\u00e7\u00e3o normal, que ser\u00e1 abordada a seguir.<\/p>\n<h3>M\u00e9todo de m\u00e1xima verossimilhan\u00e7a<\/h3>\n<p>\nEnt\u00e3o, supomos a presen\u00e7a de ru\u00eddo aleat\u00f3rio com distribui\u00e7\u00e3o normal. O que fazer nessa situa\u00e7\u00e3o? Para isso, na matem\u00e1tica existe e \u00e9 amplamente utilizado <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Maximum_likelihood_estimation\">o m\u00e9todo da m\u00e1xima verossimilhan\u00e7a<\/a><\/noindex>. Resumindo, sua ess\u00eancia consiste em escolher <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Likelihood_function\">da fun\u00e7\u00e3o de verossimilhan\u00e7a<\/a><\/noindex> e posteriormente maximiz\u00e1-la.<\/p>\n<p>Voltando \u00e0 restaura\u00e7\u00e3o da depend\u00eancia linear a partir de dados com ru\u00eddo normal. Observe que a depend\u00eancia linear suposta \u00e9 o valor esperado <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/73cd24a6605bce1a4f38339ee8c61613.png\" style=\"display:block;margin: 0 auto;\" \/> da distribui\u00e7\u00e3o normal existente. Ao mesmo tempo, a probabilidade de que <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/caaf32b1af58d748244acbab640bbab8.png\" style=\"display:block;margin: 0 auto;\" \/> assuma um determinado valor, dado a presen\u00e7a de observa\u00e7\u00f5es <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/9cda87721bba4812b7cec96f204ff5f6.png\" style=\"display:block;margin: 0 auto;\" \/>, se parece com o seguinte:<\/p>\n<p><img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/7acbd6bff263d52773617904d3249a96.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nAgora, substitu\u00edmos <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/d5a167a87fa416e938678b2a80b353dc.png\" style=\"display:block;margin: 0 auto;\" \/> e <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/330ad17be2629a5159b513ba95a96c72.png\" style=\"display:block;margin: 0 auto;\" \/> as vari\u00e1veis que precisamos:<\/p>\n<p><img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/57531f93ee0d0050b1fbfc64419f44ad.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nResta apenas encontrar o vetor <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/801ebcd43ae0bc0cf54bc0f68bdc21da.png\" style=\"display:block;margin: 0 auto;\" \/>, para o qual essa probabilidade \u00e9 m\u00e1xima. Para maximizar essa fun\u00e7\u00e3o, \u00e9 conveniente primeiro logaritmizar (o logaritmo da fun\u00e7\u00e3o atinge o m\u00e1ximo no mesmo ponto que a pr\u00f3pria fun\u00e7\u00e3o):<\/p>\n<p><img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/7485448a44f8ee201254fea4208deb54.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nO que, por sua vez, se reduz \u00e0 minimiza\u00e7\u00e3o da seguinte fun\u00e7\u00e3o:<\/p>\n<p><img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/0957864e5dfbfc1147c24784df67af20.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nA prop\u00f3sito, isso \u00e9 chamado de m\u00e9todo <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Linear_least_squares\">dos m\u00ednimos quadrados<\/a><\/noindex>. Muitas vezes, todas as considera\u00e7\u00f5es acima s\u00e3o omitidas e este m\u00e9todo \u00e9 simplesmente utilizado.<\/p>\n<h3>Decomposi\u00e7\u00e3o QR<\/h3>\n<p>\nO m\u00ednimo da fun\u00e7\u00e3o mencionada acima pode ser encontrado ao localizarmos um ponto onde o gradiente dessa fun\u00e7\u00e3o \u00e9 igual a zero. O gradiente ser\u00e1 registrado da seguinte forma:<\/p>\n<p><img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/1581c46f8fa625826ae2f76ec561dc3f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/QR_decomposition\">Decomposi\u00e7\u00e3o QR<\/a><\/noindex> \u00e9 um m\u00e9todo matricial para resolver problemas de minimiza\u00e7\u00e3o utilizado no m\u00e9todo dos m\u00ednimos quadrados. Em vista disso, reescrevemos a equa\u00e7\u00e3o na forma matricial:<\/p>\n<p><img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/4ee809a96550577df855fbd57049a41c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nPortanto, estamos decompondo a matriz <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/2fa2b32bef5246132da5b3b9bc713ab5.png\" style=\"display:block;margin: 0 auto;\" \/> em matrizes <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/fd8c620c602ae49e8d6e39ef8b551d0b.png\" style=\"display:block;margin: 0 auto;\" \/> e <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/32804631a9a2f8bff35d0bcf7c29bfc6.png\" style=\"display:block;margin: 0 auto;\" \/> e realizamos uma s\u00e9rie de transforma\u00e7\u00f5es (o algoritmo QR de decomposi\u00e7\u00e3o n\u00e3o ser\u00e1 discutido aqui, apenas seu uso em rela\u00e7\u00e3o \u00e0 tarefa proposta):<\/p>\n<p><img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/56cfb4ed9126e632cba51940c0d9afe6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nMatriz <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/106bb4d6704eb9f42078555c662a8b97.png\" style=\"display:block;margin: 0 auto;\" \/> \u00e9 ortogonal. Isso nos permite nos livrarmos do produto <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/618077c012f7b81f23756b9c1e54eb73.png\" style=\"display:block;margin: 0 auto;\" \/>:<\/p>\n<p><img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/1715fb2e77d8be75e68e4791997aaa44.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nE se substituirmos <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/926c51120ec8608bf81dc8f36fcc3ef4.png\" style=\"display:block;margin: 0 auto;\" \/> para <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/9e578153ea2dc36d0eb86be4eedf4899.png\" style=\"display:block;margin: 0 auto;\" \/>, teremos <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/8cd914db7317c01dc5449c70b36dba73.png\" style=\"display:block;margin: 0 auto;\" \/>. Considerando que <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/88fa4e81fc2bedf16e41e90e320a5647.png\" style=\"display:block;margin: 0 auto;\" \/> \u00e9 uma matriz triangular superior, isso se apresenta da seguinte forma:<\/p>\n<p><img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/689eaaece2a497c5bd02582e3e672a41.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nIsso pode ser resolvido pelo m\u00e9todo da substitui\u00e7\u00e3o. O elemento <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/e163597c97a539238731c31ca5ce011b.png\" style=\"display:block;margin: 0 auto;\" \/> \u00e9 encontrado como <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/211d86418c9a38f164f490b1a7b5fb71.png\" style=\"display:block;margin: 0 auto;\" \/>, o elemento anterior <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/ed3742b3a7cfb14bad801485a8cf01df.png\" style=\"display:block;margin: 0 auto;\" \/> \u00e9 encontrado como <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/b3e582f565e1060b47af4008a98c3524.png\" style=\"display:block;margin: 0 auto;\" \/> e assim por diante.<\/p>\n<p>Aqui cabe destacar que a complexidade do algoritmo resultante devido ao uso da decomposi\u00e7\u00e3o QR \u00e9 igual a <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/c5c20145b7b165120d9979c2e2ca4711.png\" style=\"display:block;margin: 0 auto;\" \/>. Embora a opera\u00e7\u00e3o de multiplica\u00e7\u00e3o de matrizes possa ser bem paralelizada, escrever uma vers\u00e3o distribu\u00edda eficiente deste algoritmo n\u00e3o \u00e9 vi\u00e1vel.<\/p>\n<h3>Descida do gradiente<\/h3>\n<p>\nAo falar sobre a minimiza\u00e7\u00e3o de uma certa fun\u00e7\u00e3o, sempre vale a pena lembrar do m\u00e9todo (estoc\u00e1stico) de descida do gradiente. Este \u00e9 um m\u00e9todo simples e eficaz de minimiza\u00e7\u00e3o, baseado no c\u00e1lculo iterativo do gradiente da fun\u00e7\u00e3o em um ponto e no subsequente deslocamento na dire\u00e7\u00e3o oposta ao gradiente. Cada passo assim aproxima a solu\u00e7\u00e3o do m\u00ednimo. O gradiente continua a ser o mesmo:<\/p>\n<p><img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/d195806787197323312be7c0b9d8b240.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Al\u00e9m disso, esse m\u00e9todo se paraleliza e se distribui bem devido \u00e0s propriedades lineares do operador gradiente. Observemos que na f\u00f3rmula apresentada acima, sob o sinal de soma, est\u00e3o os termos independentes. Em outras palavras, podemos calcular o gradiente de forma independente para todos os \u00edndices <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/0c10d574f70b318b6562fb444e460fa7.png\" style=\"display:block;margin: 0 auto;\" \/> do primeiro at\u00e9 <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/c9b39d76c5f724af137b5db3053e1a60.png\" style=\"display:block;margin: 0 auto;\" \/>, enquanto paralelamente calculamos o gradiente para os \u00edndices de <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/1a9407fcb4ec67a171463d36dca30a80.png\" style=\"display:block;margin: 0 auto;\" \/> at\u00e9 <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/f1e29c5b16d68d6377108f53803a9cd0.png\" style=\"display:block;margin: 0 auto;\" \/>. Ent\u00e3o, somamos os gradientes obtidos. O resultado da soma ser\u00e1 o mesmo como se tiv\u00e9ssemos calculado imediatamente o gradiente para os \u00edndices do primeiro at\u00e9 <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/c5ec5004c59a5343f22894ef676606e3.png\" style=\"display:block;margin: 0 auto;\" \/>. Assim, se os dados estiverem distribu\u00eddos entre v\u00e1rias partes, o gradiente pode ser calculado independentemente em cada parte, e ent\u00e3o os resultados desses c\u00e1lculos podem ser somados para obter o resultado final:<\/p>\n<p><img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/073ce5e3a6688e3a1ae7774aaff1a843.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Do ponto de vista da implementa\u00e7\u00e3o, isso se encaixa na paradigma <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/MapReduce\">MapReduce<\/a><\/noindex>. A cada passo da descida do gradiente, uma tarefa \u00e9 enviada para cada n\u00f3 de dados para calcular o gradiente, em seguida, os gradientes calculados s\u00e3o reunidos, e o resultado de sua soma \u00e9 usado para melhorar o resultado.<\/p>\n<p>Apesar da simplicidade de implementa\u00e7\u00e3o e da possibilidade de execu\u00e7\u00e3o na paradigma MapReduce, o m\u00e9todo do gradiente apresenta suas desvantagens. Em particular, o n\u00famero de passos necess\u00e1rio para alcan\u00e7ar a converg\u00eancia \u00e9 significativamente maior em compara\u00e7\u00e3o a outros m\u00e9todos mais especializados.<\/p>\n<h3>LSQR<\/h3>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/web.stanford.edu\/group\/SOL\/software\/lsqr\/\">LSQR<\/a><\/noindex> \u2014 \u00e9 outro m\u00e9todo de resolu\u00e7\u00e3o do problema proposto, que serve tanto para a recupera\u00e7\u00e3o de regress\u00e3o linear quanto para a resolu\u00e7\u00e3o de sistemas de equa\u00e7\u00f5es lineares. Sua principal caracter\u00edstica \u00e9 que combina as vantagens dos m\u00e9todos matriciais e da abordagem iterativa. Implementa\u00e7\u00f5es deste m\u00e9todo podem ser encontradas nas bibliotecas <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.scipy.org\/doc\/scipy-0.14.0\/reference\/generated\/scipy.sparse.linalg.lsqr.html\">SciPy<\/a><\/noindex>, quanto em <noindex><a rel=\"nofollow\" href=\"http:\/\/matlab.izmiran.ru\/help\/techdoc\/ref\/lsqr.html\">MATLAB<\/a><\/noindex>. A descri\u00e7\u00e3o deste m\u00e9todo n\u00e3o ser\u00e1 apresentada aqui (pode ser encontrada no artigo <noindex><a rel=\"nofollow\" href=\"https:\/\/web.stanford.edu\/group\/SOL\/software\/lsqr\/lsqr-toms82a.pdf\">LSQR: An algorithm for sparse linear equations and sparse least squares<\/a><\/noindex>). Em vez disso, ser\u00e1 demonstrada uma abordagem que permite adaptar o LSQR para execu\u00e7\u00e3o em ambiente distribu\u00eddo.<\/p>\n<p>A base do m\u00e9todo LSQR \u00e9 <noindex><a rel=\"nofollow\" href=\"http:\/\/www.netlib.org\/utk\/people\/JackDongarra\/etemplates\/node198.html\">o procedimento de bidiagonaliza\u00e7\u00e3o<\/a><\/noindex>. Este \u00e9 um procedimento iterativo, em que cada itera\u00e7\u00e3o consiste nos seguintes passos:<br \/>\n<img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/3c2f7b5c6f57830e9b522023a8e72a48.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMas se considerarmos que a matriz <img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/e86c3c422629b78bc574f66db8a6139d.png\" style=\"display:block;margin: 0 auto;\" \/> \u00e9 particionada horizontalmente, cada itera\u00e7\u00e3o pode ser apresentada sob a forma de dois passos MapReduce. Assim, \u00e9 poss\u00edvel minimizar a troca de dados durante cada uma das itera\u00e7\u00f5es (apenas vetores com comprimento igual ao n\u00famero de inc\u00f3gnitas):<\/p>\n<p><img decoding=\"async\" alt=\"Regress\u00e3o linear e m\u00e9todos de sua recupera\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2019\/09\/6b67654b29ed24283c4b04d66c05ea5c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEsta abordagem \u00e9 usada na implementa\u00e7\u00e3o da regress\u00e3o linear em <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/apache\/ignite\/blob\/master\/modules\/ml\/src\/main\/java\/org\/apache\/ignite\/ml\/math\/isolve\/lsqr\/AbstractLSQR.java\">Apache Ignite ML<\/a><\/noindex>.<\/p>\n<h3>Conclus\u00e3o<\/h3>\n<p>\nExistem muitos algoritmos para a recupera\u00e7\u00e3o de regress\u00e3o linear, mas nem todos podem ser aplicados em quaisquer condi\u00e7\u00f5es. O QR fatora\u00e7\u00e3o \u00e9 excelente para solu\u00e7\u00f5es exatas em pequenos conjuntos de dados. O m\u00e9todo do gradiente \u00e9 f\u00e1cil de implementar e permite encontrar rapidamente uma solu\u00e7\u00e3o aproximada. O LSQR combina as melhores propriedades dos dois m\u00e9todos anteriores, pois pode ser distribu\u00eddo, converge mais rapidamente em compara\u00e7\u00e3o ao gradiente, e tamb\u00e9m permite a interrup\u00e7\u00e3o prematura do algoritmo, ao contr\u00e1rio da fatora\u00e7\u00e3o QR para a busca de uma solu\u00e7\u00e3o aproximada.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/465743\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a: xkcd \u041b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0430\u043d\u0430\u043b\u0438\u0437\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u044d\u0442\u043e\u043c\u0443 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u0430. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u0447\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u0435\u0442 \u0435\u0433\u043e \u0448\u0438\u0440\u043e\u043a\u043e\u043c\u0443 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u0443\u0436\u0435 \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0435\u0441\u044f\u0442\u043a\u0438, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0441\u043e\u0442\u043d\u0438, \u043b\u0435\u0442. \u0418\u0434\u0435\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0434\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u0442 \u043d\u0430\u0431\u043e\u0440\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28483,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37955","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a:\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/linejnaya-regressiya-i-metody-eyo-vosstanovleniya\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u044f \u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0435\u0451 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a:\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/linejnaya-regressiya-i-metody-eyo-vosstanovleniya\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:20:47+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:20:47+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Regress\u00e3o Linear e M\u00e9todos de Sua Recupera\u00e7\u00e3o | ProHoster","description":"Fonte:","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/linejnaya-regressiya-i-metody-eyo-vosstanovleniya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u044f \u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0435\u0451 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f | ProHoster","og:description":"\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a:","og:url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/linejnaya-regressiya-i-metody-eyo-vosstanovleniya","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:20:47+00:00","article:modified_time":"2019-10-31T19:20:47+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37955","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 19:55:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:17:23","updated":"2026-01-23 19:55:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/37955","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=37955"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/37955\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/28483"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=37955"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=37955"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=37955"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}