{"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\/es\/blog\/administrirovanie\/linejnaya-regressiya-i-metody-eyo-vosstanovleniya","title":{"rendered":"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/60ca67872405e9f15b151e958f04260d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fuente: <noindex><a rel=\"nofollow\" href=\"https:\/\/xkcd.com\/1725\/\">xkcd<\/a><\/noindex><\/i><\/p>\n<p>La regresi\u00f3n lineal es uno de los algoritmos b\u00e1sicos para muchas \u00e1reas relacionadas con el an\u00e1lisis de datos. La raz\u00f3n es obvia. Es un algoritmo muy simple y comprensible, lo que contribuye a su amplia aplicaci\u00f3n durante muchas d\u00e9cadas, si no cientos de a\u00f1os. La idea es que suponemos una dependencia lineal de una variable respecto a un conjunto de otras variables, y luego intentamos recuperar esa dependencia.<\/p>\n<p>Pero en este art\u00edculo no se tratar\u00e1 sobre la aplicaci\u00f3n de la regresi\u00f3n lineal para resolver problemas pr\u00e1cticos. Aqu\u00ed se discutir\u00e1n caracter\u00edsticas interesantes de la implementaci\u00f3n de algoritmos distribuidos para su recuperaci\u00f3n, con las que nos encontramos al escribir el m\u00f3dulo de aprendizaje autom\u00e1tico en <noindex><a rel=\"nofollow\" href=\"https:\/\/ignite.apache.org\/\">Apache Ignite<\/a><\/noindex>. Un poco de matem\u00e1ticas b\u00e1sicas, fundamentos de aprendizaje autom\u00e1tico y computaci\u00f3n distribuida ayudar\u00e1n a entender c\u00f3mo recuperar la regresi\u00f3n lineal, incluso si los datos est\u00e1n distribuidos entre miles de nodos.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>\u00bfDe qu\u00e9 se trata?<\/h3>\n<p>\nSe nos presenta la tarea de recuperar una dependencia lineal. Como datos de entrada se proporciona un conjunto de vectores de variables presuntamente independientes, a cada uno de los cuales se le asigna un cierto valor de variable dependiente. Estos datos se pueden representar en forma de dos matrices:<\/p>\n<p><img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/2ffbdd09fdc5efaf287fbb4935033302.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nAhora, dado que se supone una dependencia, y adem\u00e1s lineal, escribamos nuestra suposici\u00f3n en forma de producto de matrices (para simplificar la notaci\u00f3n, de aqu\u00ed en adelante se supone que el t\u00e9rmino independiente de la ecuaci\u00f3n est\u00e1 oculto detr\u00e1s de <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/21e90cb829e0bc2e12c836f7810c1b1a.png\" style=\"display:block;margin: 0 auto;\" \/>, y la \u00faltima columna de la matriz <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/25c0af2e153ae371e71588efe3bc2ee2.png\" style=\"display:block;margin: 0 auto;\" \/> contiene unos):<\/p>\n<p><img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/b1c3c8d2332ae27eedeef675178dee4f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nSe parece mucho a un sistema de ecuaciones lineales, \u00bfno es as\u00ed? Se parece, pero es probable que no haya soluciones para dicho sistema de ecuaciones. La raz\u00f3n de esto es el ruido que est\u00e1 presente en pr\u00e1cticamente todos los datos reales. Tambi\u00e9n puede ser que no exista una dependencia lineal como tal, con la que se pueda intentar combatir introduciendo variables adicionales que dependan no linealmente de las originales. Consideremos el siguiente ejemplo:<br \/>\n<img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/d449b8f931e91cc7b33634ee8d4a4329.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fuente: <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Linear_regression\">Wikipedia<\/a><\/noindex><\/i><\/p>\n<p>Este es un ejemplo simple de regresi\u00f3n lineal que demuestra la dependencia de una variable (en el eje <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/fdea97dff413fb13444d7fd8ab65ca0b.png\" style=\"display:block;margin: 0 auto;\" \/>) de otra variable (en el eje <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/edf9cb265e4e4655cd84fb8739843952.png\" style=\"display:block;margin: 0 auto;\" \/>). Para que el sistema de ecuaciones lineales correspondiente a este ejemplo tenga soluci\u00f3n, todos los puntos deben estar exactamente en una misma l\u00ednea. Pero no es as\u00ed. Y no est\u00e1n en una misma l\u00ednea precisamente por el ruido (o porque la suposici\u00f3n de la existencia de dependencia lineal fue err\u00f3nea). As\u00ed, para restaurar la dependencia lineal a partir de datos reales, generalmente es necesario introducir otra suposici\u00f3n: los datos de entrada contienen ruido y este ruido tiene <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Normal_distribution\">distribuci\u00f3n normal<\/a><\/noindex>. Se pueden hacer suposiciones sobre otros tipos de distribuci\u00f3n de ruido, pero en la gran mayor\u00eda de los casos se considera precisamente la distribuci\u00f3n normal, de la cual se hablar\u00e1 a continuaci\u00f3n.<\/p>\n<h3>M\u00e9todo de m\u00e1xima verosimilitud<\/h3>\n<p>\nEntonces, hemos supuesto la existencia de un ruido aleatorio normalmente distribuido. \u00bfC\u00f3mo actuar en tal situaci\u00f3n? Para este caso, en matem\u00e1ticas existe y se utiliza ampliamente <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Maximum_likelihood_estimation\">m\u00e9todo de m\u00e1xima verosimilitud<\/a><\/noindex>. En resumen, su esencia radica en la elecci\u00f3n <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Likelihood_function\">la funci\u00f3n de verosimilitud<\/a><\/noindex> y su posterior maximizaci\u00f3n.<\/p>\n<p>Regresamos a la restauraci\u00f3n de la dependencia lineal a partir de datos con ruido normal. Observemos que la dependencia lineal supuesta es la esperanza matem\u00e1tica <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/73cd24a6605bce1a4f38339ee8c61613.png\" style=\"display:block;margin: 0 auto;\" \/> de la distribuci\u00f3n normal existente. Al mismo tiempo, la probabilidad de que <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/caaf32b1af58d748244acbab640bbab8.png\" style=\"display:block;margin: 0 auto;\" \/> tome un determinado valor, dado que hay observables <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/9cda87721bba4812b7cec96f204ff5f6.png\" style=\"display:block;margin: 0 auto;\" \/>, se ve de la siguiente manera:<\/p>\n<p><img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/7acbd6bff263d52773617904d3249a96.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nAhora sustituiremos en lugar de <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/d5a167a87fa416e938678b2a80b353dc.png\" style=\"display:block;margin: 0 auto;\" \/> y <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/330ad17be2629a5159b513ba95a96c72.png\" style=\"display:block;margin: 0 auto;\" \/> las variables que necesitamos:<\/p>\n<p><img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/57531f93ee0d0050b1fbfc64419f44ad.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nSolo queda encontrar el vector <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/801ebcd43ae0bc0cf54bc0f68bdc21da.png\" style=\"display:block;margin: 0 auto;\" \/>, en el que esta probabilidad es m\u00e1xima. Para maximizar tal funci\u00f3n, es conveniente primero logaritmarla (el logaritmo de la funci\u00f3n alcanzar\u00e1 su m\u00e1ximo en el mismo punto que la propia funci\u00f3n):<\/p>\n<p><img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/7485448a44f8ee201254fea4208deb54.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nLo que, a su vez, se reduce a la minimizaci\u00f3n de la siguiente funci\u00f3n:<\/p>\n<p><img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/0957864e5dfbfc1147c24784df67af20.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nPor cierto, esto se llama el m\u00e9todo <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Linear_least_squares\">de los m\u00ednimos cuadrados<\/a><\/noindex>. A menudo, se omiten todas las consideraciones anteriores y simplemente se utiliza este m\u00e9todo.<\/p>\n<h3>Descomposici\u00f3n QR<\/h3>\n<p>\nSe puede encontrar el m\u00ednimo de la funci\u00f3n mencionada anteriormente si se encuentra el punto en el que el gradiente de esta funci\u00f3n es igual a cero. Y el gradiente se escribir\u00e1 de la siguiente manera:<\/p>\n<p><img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" 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\">Descomposici\u00f3n QR<\/a><\/noindex> es un m\u00e9todo matricial para resolver el problema de minimizaci\u00f3n que se utiliza en el m\u00e9todo de los m\u00ednimos cuadrados. En este sentido, reescribimos la ecuaci\u00f3n en forma matricial:<\/p>\n<p><img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/4ee809a96550577df855fbd57049a41c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nEntonces, descomponemos la matriz <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/2fa2b32bef5246132da5b3b9bc713ab5.png\" style=\"display:block;margin: 0 auto;\" \/> en matrices <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/fd8c620c602ae49e8d6e39ef8b551d0b.png\" style=\"display:block;margin: 0 auto;\" \/> y <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/32804631a9a2f8bff35d0bcf7c29bfc6.png\" style=\"display:block;margin: 0 auto;\" \/> y realizamos una serie de transformaciones (el algoritmo QR de descomposici\u00f3n no se discutir\u00e1 aqu\u00ed, solo su uso relativo a la tarea planteada):<\/p>\n<p><img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/56cfb4ed9126e632cba51940c0d9afe6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nMatriz <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/106bb4d6704eb9f42078555c662a8b97.png\" style=\"display:block;margin: 0 auto;\" \/> es ortogonal. Esto nos permite deshacernos del producto <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/618077c012f7b81f23756b9c1e54eb73.png\" style=\"display:block;margin: 0 auto;\" \/>:<\/p>\n<p><img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/1715fb2e77d8be75e68e4791997aaa44.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nY si reemplazamos <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/926c51120ec8608bf81dc8f36fcc3ef4.png\" style=\"display:block;margin: 0 auto;\" \/> en <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/9e578153ea2dc36d0eb86be4eedf4899.png\" style=\"display:block;margin: 0 auto;\" \/>, entonces obtendremos <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/8cd914db7317c01dc5449c70b36dba73.png\" style=\"display:block;margin: 0 auto;\" \/>. Teniendo en cuenta que <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/88fa4e81fc2bedf16e41e90e320a5647.png\" style=\"display:block;margin: 0 auto;\" \/> es una matriz triangular superior, esto se ve de la siguiente manera:<\/p>\n<p><img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/689eaaece2a497c5bd02582e3e672a41.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nEsto se puede resolver mediante el m\u00e9todo de sustituci\u00f3n. El elemento <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/e163597c97a539238731c31ca5ce011b.png\" style=\"display:block;margin: 0 auto;\" \/> se encuentra como <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/211d86418c9a38f164f490b1a7b5fb71.png\" style=\"display:block;margin: 0 auto;\" \/>, el elemento anterior <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/ed3742b3a7cfb14bad801485a8cf01df.png\" style=\"display:block;margin: 0 auto;\" \/> se encuentra como <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/b3e582f565e1060b47af4008a98c3524.png\" style=\"display:block;margin: 0 auto;\" \/> y as\u00ed sucesivamente.<\/p>\n<p>Cabe se\u00f1alar que la complejidad del algoritmo resultante debido al uso de la descomposici\u00f3n QR es igual a <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/c5c20145b7b165120d9979c2e2ca4711.png\" style=\"display:block;margin: 0 auto;\" \/>. Aunque la operaci\u00f3n de multiplicaci\u00f3n de matrices se puede paralelizar bien, no parece posible escribir una versi\u00f3n distribuida efectiva de este algoritmo.<\/p>\n<h3>Descenso por gradiente<\/h3>\n<p>\nAl hablar de la minimizaci\u00f3n de alguna funci\u00f3n, siempre se debe recordar el m\u00e9todo (estoc\u00e1stico) de descenso de gradientes. Este es un m\u00e9todo simple y efectivo de minimizaci\u00f3n, basado en el c\u00e1lculo iterativo del gradiente de la funci\u00f3n en un punto y su posterior desplazamiento en direcci\u00f3n opuesta al gradiente. Cada uno de estos pasos acerca la soluci\u00f3n al m\u00ednimo. El gradiente se ve igual:<\/p>\n<p><img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/d195806787197323312be7c0b9d8b240.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Adem\u00e1s, este m\u00e9todo se puede paralelizar y distribuir bien gracias a las propiedades lineales del operador gradiente. Notemos que en la f\u00f3rmula anterior, bajo el signo de suma, hay t\u00e9rminos independientes. En otras palabras, podemos calcular el gradiente de manera independiente para todos los \u00edndices <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/0c10d574f70b318b6562fb444e460fa7.png\" style=\"display:block;margin: 0 auto;\" \/> desde el primero hasta <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/c9b39d76c5f724af137b5db3053e1a60.png\" style=\"display:block;margin: 0 auto;\" \/>, paralelamente, calcular el gradiente para los \u00edndices desde <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/1a9407fcb4ec67a171463d36dca30a80.png\" style=\"display:block;margin: 0 auto;\" \/> hasta <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/f1e29c5b16d68d6377108f53803a9cd0.png\" style=\"display:block;margin: 0 auto;\" \/>. Luego, sumamos los gradientes obtenidos. El resultado de la suma ser\u00e1 el mismo que si hubi\u00e9ramos calculado el gradiente de una vez para los \u00edndices desde el primero hasta <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/c5ec5004c59a5343f22894ef676606e3.png\" style=\"display:block;margin: 0 auto;\" \/>. As\u00ed, si los datos est\u00e1n distribuidos entre varias partes, el gradiente puede ser calculado independientemente en cada parte, y luego los resultados de estos c\u00e1lculos se pueden sumar para obtener el resultado final:<\/p>\n<p><img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/073ce5e3a6688e3a1ae7774aaff1a843.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Desde el punto de vista de la implementaci\u00f3n, esto se ajusta a la paradigma <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/MapReduce\">MapReduce<\/a><\/noindex>. En cada paso del descenso de gradientes, se env\u00eda una tarea a cada nodo de datos para calcular el gradiente, luego se recolectan los gradientes calculados y el resultado de su suma se utiliza para mejorar el resultado.<\/p>\n<p>A pesar de la simplicidad de implementaci\u00f3n y la posibilidad de ejecuci\u00f3n en la paradi\u0433ma MapReduce, el descenso de gradiente tambi\u00e9n tiene sus desventajas. En particular, el n\u00famero de pasos necesarios para alcanzar la convergencia es significativamente mayor en comparaci\u00f3n con otros m\u00e9todos m\u00e1s 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> es otro m\u00e9todo para resolver el problema planteado, que es adecuado tanto para la recuperaci\u00f3n de la regresi\u00f3n lineal como para la soluci\u00f3n de sistemas de ecuaciones lineales. Su principal caracter\u00edstica es que combina las ventajas de los m\u00e9todos matriciales y el enfoque iterativo. Las implementaciones de este m\u00e9todo se pueden encontrar en la biblioteca <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.scipy.org\/doc\/scipy-0.14.0\/reference\/generated\/scipy.sparse.linalg.lsqr.html\">SciPy<\/a><\/noindex>, as\u00ed como en <noindex><a rel=\"nofollow\" href=\"http:\/\/matlab.izmiran.ru\/help\/techdoc\/ref\/lsqr.html\">MATLAB<\/a><\/noindex>. No se proporcionar\u00e1 una descripci\u00f3n de este m\u00e9todo (se puede encontrar en el art\u00edculo <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>). En su lugar, se demostrar\u00e1 un enfoque que permite adaptar LSQR para su ejecuci\u00f3n en un entorno distribuido.<\/p>\n<p>El m\u00e9todo LSQR se basa en <noindex><a rel=\"nofollow\" href=\"http:\/\/www.netlib.org\/utk\/people\/JackDongarra\/etemplates\/node198.html\">el procedimiento de bidiagonalizaci\u00f3n<\/a><\/noindex>. Es un procedimiento iterativo, donde cada iteraci\u00f3n consta de los siguientes pasos:<br \/>\n<img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/3c2f7b5c6f57830e9b522023a8e72a48.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPero suponiendo que la matriz <img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/e86c3c422629b78bc574f66db8a6139d.png\" style=\"display:block;margin: 0 auto;\" \/> est\u00e1 particionada horizontalmente, cada iteraci\u00f3n se puede representar en forma de dos pasos MapReduce. De esta manera, se logra minimizar la transferencia de datos durante cada iteraci\u00f3n (solo vectores de longitud igual al n\u00famero de inc\u00f3gnitas):<\/p>\n<p><img decoding=\"async\" alt=\"Regresi\u00f3n lineal y sus m\u00e9todos de restauraci\u00f3n\" src=\"\/wp-content\/uploads\/2019\/09\/6b67654b29ed24283c4b04d66c05ea5c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEste enfoque se utiliza en la implementaci\u00f3n de la regresi\u00f3n lineal en <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>Conclusi\u00f3n<\/h3>\n<p>\nExisten muchos algoritmos para la recuperaci\u00f3n de la regresi\u00f3n lineal, pero no todos pueden aplicarse en cualquier situaci\u00f3n. Por ejemplo, la descomposici\u00f3n QR es excelente para resolver con precisi\u00f3n en peque\u00f1os conjuntos de datos. El descenso de gradiente se implementa f\u00e1cilmente y permite encontrar r\u00e1pidamente una soluci\u00f3n aproximada. LSQR, por su parte, combina las mejores propiedades de los dos algoritmos anteriores, ya que puede ser distribuido, converge m\u00e1s r\u00e1pido en comparaci\u00f3n con el descenso de gradiente y tambi\u00e9n permite la detenci\u00f3n temprana del algoritmo, a diferencia de la descomposici\u00f3n QR para la b\u00fasqueda de soluciones aproximadas.<br \/>\n<br \/>Fuente: <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.2 - 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\/es\/blog\/administrirovanie\/linejnaya-regressiya-i-metody-eyo-vosstanovleniya\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/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\udd47Regresi\u00f3n lineal y m\u00e9todos de recuperaci\u00f3n | ProHoster","description":"Fuente:","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/linejnaya-regressiya-i-metody-eyo-vosstanovleniya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/37955","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=37955"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/37955\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/28483"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=37955"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=37955"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=37955"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}