This graph shows how many times the word ______ has been mentioned throughout the history of the program.
Hola chicos y chicas, bienvenidos a TOD's SU, tu canal sobre inteligencia artificial
que te trae todo lo relacionado con este campo, incluido esto de hoy que es una novedad en
el canal.
Yo creo que es algo que todos estaban pidiendo en el canal, en los comentarios, lo pregunté
el otro día en el vídeo que subí sobre regresión lineal, y es una sección relacionada
con programación, recuerden que la inteligencia artificial es una disciplina que se engloba
dentro del campo de la informática, y por tanto, la programación tiene un peso muy
importante, todos los sistemas de inteligencia artificial que estamos viendo, además de
a nivel teórico, que es como lo hemos visto hasta ahora, pues también tienen una contrapartida
que es la implementación de estos sistemas, cómo se implementan, cómo se programan,
y bueno, yo creo que es importante tener un apartado en el canal que se dedique un poco
a ir viendo en paralelo, según vamos viendo contenidos teóricos, pues que vayamos viendo
también cómo podemos ver estos conceptos también a nivel práctico.
Entonces, pues eso, hace una semana subí un vídeo relacionado con el tema de regresión
lineal, y lo que vamos a hacer hoy es implementar ese algoritmo que vimos, que era el de mínimos
ordinarios cuadrados, pues lo vamos a implementar hoy utilizando las herramientas de código.
En este caso, el tutorial de hoy va a ser un poco introductorio a esta sección, vamos
a ver un poco las herramientas típicas que vamos a utilizar, qué lenguajes, que todo
para que puedan tener vuestro sistema a punto, porque en sí la parte programática, el programarlo
de los mínimos cuadrados ordinarios, es bastante sencillo, recuerden, como vimos en el vídeo,
que nosotros mediante un proceso analítico en el que queríamos minimizar la función
de coste, teníamos una función de coste determinada, pues nosotros hacíamos un proceso analítico
para minimizar esa función de coste y encontrar entonces aquella línea que mejor se ajustara
a nuestra nube de puntos, entonces gracias a eso obteníamos una ecuación, y esa ecuación
básicamente nos decía cómo teníamos que manipular nuestra matriz de entrada, nuestra
matriz de salida para obtener nuestros parámetros, y con esos parámetros ya teníamos la forma
en la que dibujar nuestra recta, que sería nuestro modelo en este caso.
Por tanto, si eso lo pasamos a nivel programático, pues es algo bastante sencillo, es una cosa
que se resuelve en una única línea de código, pero bueno, aún así lo vamos a ver hoy,
y verán que no es nada complicado, y a partir de aquí, según vayamos viendo conceptos
más avanzados, más elaborados, pues los iremos implementando, eso está guay porque próximamente
empezaremos a ver el tema de redes neuronales, y pues también implementaremos estos sistemas
que yo creo que más de uno lo está deseando.
Vamos a meternos ya en harina, no me quiero liar mucho, que si no me pongo a hablar y no
acabamos, y vamos a empezar ya programando, entonces, bueno antes que nada les quiero
contar un poco cuáles son las herramientas que vamos a utilizar, en el mundo de la inteligencia
artificial, machine learning y data science, que son pues tres campos como ya hemos visto
muy interrelacionados, suele ser muy típico utilizar sobre todo Python y R, sobre todo
en el tratamiento de datos, la parte data science, Python y R, ambos lenguajes son muy buenos
y si quieres aprender, pues cualquiera de los dos te sirve, algunos tienen mejores cosas,
otros tienen otras cosas que también son muy positivas, y no sé, yo creo que es un
poco una preferencia personal decidir por cual utilizar, yo en mi caso, por una cuestión
subjetiva encuentro Python mucho más cómodo, mucho más agradable de entender, de programar,
y además un poco más genérico, porque además de utilizarlo para análisis de datos luego
lo podrías utilizar para otras tantas cosas, que a lo mejor R se podría quedar un poco
más corto.
R por el otro lado tiene la ventaja de que hay una comunidad científica que está empujando
por detrás y existen muchas librerías, muchos paquetes para hacer análisis estadístico,
análisis científico de datos, y bueno, pues lo que digo, es una cuestión personal.
En este caso, en los tutoriales, pues vamos a utilizar Python porque yo lo encuentro mucho
más cómodo y yo creo que para ustedes también va a ser mucho más fácil de utilizar.
Lo normal sería que si tú haces un proyecto grande, pues necesitas un entorno de trabajo
donde poder trabajar, y Python, por ejemplo, yo el que utilizo es PyCharm, que es una IDE
de la empresa IntelliJ, si no recuerdo mal.
Este sistema, esta aplicación, pues está muy bueno porque tú puedes programar, puedes
ejecutar tu código, puedes depurarlo, testearlo, conectarte con bases de datos por FTP, puedes
conectarte a GitHub, tiene como muchas funcionalidades que son necesarias en el proceso de desarrollo
de aplicaciones y de código.
Pero para lo que vamos a hacer nosotros hoy, que es el tema de manipular datos, data science,
análisis, hay otra herramienta que suele ser muy común y que también deberían de
conocer y que nos va a servir bastante bien, y son estos que tienen aquí en pantalla que
son los cuadernos Jupyter o Jupyter.
Estos cuadernos en inglés se le llaman notebooks y por eso he llamado esta sección del canal
IA Notebooks, es decir, cuadernos de Inteligencia Artificial.
Y básicamente lo que es, es como un sistema para poder programar de forma ordenada, ¿vale?
Es decir, tú puedes ir añadiendo aquí diferentes celdas donde tú puedes escribir tu código,
por ejemplo, print holamundo, esto seguro que es algo nuevo que nunca habían visto,
y lo pueden ejecutar y entonces cada celda obtienes tu resultado, pero también puedes
utilizar las celdas para escribir texto, entonces puedes decir, estamos aprendiendo las funcionalidades
de Jupyter, ¿vale?
Lo pueden ejecutar y tendríamos aquí el texto que acabamos de escribir.
Estas celdas cuando estás introduciendo texto, pues también te permite añadir etiquetas
html, vamos a ponerlo por ejemplo en negrita, con lo cual le puedes dar formato a tu texto,
también pues tiene diferentes herramientas de formato, puedes crear títulos de esta manera
en plan título 1, e incluso algo que es bastante cómodo, es que también te permite redactar,
puedes utilizar lenguaje latex para crear fórmulas, pues por ejemplo podrías insertar esto y
se te convierte automáticamente en el símbolo beta, o si quieres escribir una fórmula,
puedes ir añadiendo y puedes ir poco a poco construyendo tus fórmulas, entonces esto
está muy bien porque en general la gente lo utiliza para compartir tutoriales, para
compartir conocimientos, de hecho hoy cuando termine este vídeo pues podré coger todo
este cuaderno y subirlo a github, usted lo puede descargar y ejecutar cada una de las
celdas, leer el texto, no sé, es una forma muy ordenada de hacer análisis de datos y
es lo que vamos a estar utilizando mientras sea necesario, si algún día necesitamos
otras herramientas pues ya veremos, que más quería comentaros, vale, los cuadernos jupiter
se lo pueden descargar, es una tecnología que la pueden buscar, es de libre acceso,
buscan en google jupiter y lo pueden encontrar, pero una forma más cómoda de utilizar estas
herramientas es descargándose el entorno anaconda, vale, eso es otra herramienta que
se la instalan y automáticamente anaconda te va a crear un entorno en tu ordenador donde
poder ejecutar todas estas herramientas, te viene con python incluido, te viene con todas
las librerías que vamos a estar utilizando, te viene con jupiter, te viene con RStudio,
es decir, muchas herramientas de data science que posiblemente acabemos utilizando, pues
directamente te vienen incluidas en ese entorno y si quieres instalar más pues también
las puedes incluir de forma muy sencilla, así que se los recomiendo a todos y en cualquier
caso lo que haré será dejar abajo en los comentarios aquí en la descripción de este
vídeo, pues dejaré los enlaces a todas estas tecnologías por si quieren echarles un vistazo,
se las pueden instalar, vale, pues nada más, esto era un poco la parte de introducción
de las herramientas que vamos a utilizar y vamos a empezar un poco a trabajar, como digo,
lo que vamos a hacer hoy es bastante sencillo, pero aún así hay que hacerlo, vamos a empezar
importando alguna de las herramientas que vamos a utilizar, alguna de las librerías,
vale, normalmente en nuestros vídeos y cuando hacemos un proyecto de data science, las librerías
que se suelen utilizar son básicamente, a ver, estas cuatro que estoy poniendo aquí,
vale, es como la triada en el cuarteto, bueno, esta de hecho yo no la suelo utilizar mucho
así que vamos a dejarla en triada, suelen ser estas tres librerías que tenemos aquí
y son bastante importantes porque te proporcionan una serie de funcionalidades muy útiles y
que además sirven de base para otras librerías, con lo cual, pues incluso si quieres utilizar
tensorflow, al final tensorflow está adaptada para trabajar con estas librerías, con lo
cual siempre viene bien conocer el funcionamiento de ellas para que puedas trabajar de forma
más cómoda e interrelacionada. Por ejemplo, esta de aquí, Numpy, sirve para cálculo
numérico, te proporciona todas las funcionalidades para trabajar con arrays, con matrices, operaciones
matriciales como invertir una matriz, triangularizar una matriz, transpuesta, o sea, muchas herramientas
que te van a ahorrar muchas horas de código, sobre todo porque si tú quieres hacer tu
código eficiente, pues por ejemplo, quieres hacer una multiplicación de matrices, no
tienes que estar buscando cuál es la manera más eficiente de multiplicar dos matrices,
que una operación matricial pues suele ser una operación muy costosa y en este caso
pues Numpy ya te ofrece la implementación que más eficiente va a funcionar, vale, entonces
son muchas funcionalidades que nos van a hacer útil en nuestro trabajo y bien implementadas,
con lo cual eso está bastante bien. Cispy o SciPy, no sé cómo se pronuncia en español
pero bueno, SciPy es una librería que hace lo mismo que hace Numpy, lo extiende a mayores
herramientas científicas, vale, es como que lo que hace Numpy bien, Cispy lo expande,
es decir, son dos librerías que trabajan muy bien juntas y además te proporciona además
funcionalidades para otro tipo de cosas, pues por ejemplo tratamiento de imágenes o tratamiento
de otras maneras, etcétera. Finalmente tenemos Matplotlib, que es una librería de visualización
gráfica que también vamos a utilizar, aunque esta no es tan básica porque también existen
otras alternativas, vale, tenemos Seaborn y no recuerdo si hay alguna otra así importante,
pero bueno, esta es la que suelo utilizar yo normalmente, la que vamos a estar utilizando
hoy. Estas tres librerías nos van a hacer falta hoy, bueno de hecho SciPy no nos va
a hacer falta sino la otra que teníamos puesta nos va a servir, vale. Entonces bueno, una
vez introducimos el código, si lo queremos ejecutar pues le damos aquí a run y automáticamente
se nos va a ejecutar, pero una forma más cómoda de trabajar es con el teclado directamente,
les recomiendo que se aprendan los atajos de teclado para usar Jupyter con comodidad
y en este caso pues si quieren ejecutar las celdas lo que tienen que darle es a control
intro, le damos y automáticamente importa las librerías, en este caso el 54 cuando
te sale el número aquí significa que ya se ha ejecutado, te puede salir cualquier número,
o sea básicamente los números son el orden de ejecución, esto significa que yo anteriormente
ya he ejecutado 53 celdas, que esto no lo han visto pero era antes de iniciar el tutorial,
pues he iniciado, esta sería la ejecución número 54, vale. Entonces importo las librerías
y ya podemos trabajar con ellas. Lo primero que vamos a hacer es coger nuestros datos,
vale. Acuérdense que nosotros, acuérdense que nosotros en el vídeo teníamos el ejemplo
de un chico que se iba a Boston porque había encontrado su trabajo y estaba buscando piso
y se ponía a buscar y como que quería encontrar la manera en la que se interrelacionaba la
variable del número de habitaciones con el valor de la vivienda. Bueno, este ejemplo
no con tanta lírica pero el ejemplo de las casas de Boston es un dataset muy famoso dentro
del campo del data science y por eso lo elegí para este vídeo y es con el que vamos a
trabajar hoy. Lo bueno es que hay una librería que es la que enseñé antes que es la SKlearn
que es una librería de machine learning, tiene un montón de modelos y algoritmos de machine
learning. Pues lo bueno es que además de estos modelos también te incluye datasets
por si tú quieres ir probando modelos o si quieres probar tus cosas pues puedes utilizar
los datos directamente sin necesidad de descargarte el dataset de internet y tener que conectarlo
con Python. Entonces en este caso pues ponemos from SKlearn dataset import load Boston creo
que era. Vale, le damos a ejecutar y lo tenemos. Muy bien, ahora que tenemos importado esta
herramienta que es la herramienta que nos va a permitir cargar la librería, vamos a
cargarla, entonces vamos a ir comentando, cargamos la librería. Y nada entonces, esto sería
una función que la vamos a llamar, ejecutamos el código y ahí lo tenemos. Ahora seguramente
si nosotros miramos cuál es el contenido de la variable Boston, pues veremos que hay
un montón de diferentes funciones que podemos llamar referentes a este dataset. Para ver
qué funciones hay la forma de hacerlo sería escribes el punto y le das a tabulador. Con
tabulador pues ya Jupyter te muestra los diferentes elementos que están dentro de esta variable.
Por ejemplo tenemos clear, copy, data, data kit donde van a estar nuestros datos, get,
items, diferentes cosas y en este caso lo que quiero que vean es esta de aquí. Esto
es una descripción de cómo está el dataset montado y le va a dar información interesante
de cómo empezar a trabajar con él. Lo ejecutamos de nuevo y lo vemos aquí. Entonces tenemos
el dataset Boston house price. Perfecto, tenemos número de instancias 506. Este sería el número
de diferentes data points que tenemos en nuestro dataset. Si recuerdan bien, cada data point
hace referencia a una zona de Boston. Tenemos como 506 zonas de las cuales hemos estudiado
cuáles son las diferentes variables de cada una de las casas. ¿Cuáles son esas variables
las que tenemos aquí? Pues por ejemplo podemos ver de cada barrio cuál es el ratio de crimen
per cápita o tenemos una variable binaria que nos indica si ese barrio está cercano
al río Charles o tenemos aquí la variable que utilizamos en el video que era el número
medio de habitaciones por vivienda o finalmente tenemos también aquí el valor medio de la
vivienda que esta es la variable que vamos a estudiar, la variable que queremos predecir.
Entonces bueno, pues está la información y ya con esto pues podemos empezar a trabajar.
Ves que aquí te dice que tenemos 13 atributos, 13 columnas que podríamos utilizar para predecir
y el median value es la variable objetivo. Perfecto, una vez tenemos esto pues podemos
ir directamente a extraer de la variable Boston, pues podemos ir cogiendo las columnas que
nos interesen. En el caso de hoy lo que vamos a hacer simplemente es quedarnos con el ejemplo
que vimos en el video ¿vale? Vamos a intentar, utilizando el número medio de habitaciones,
vamos a intentar predecir el valor medio de la vivienda. Entonces vamos a empezar a crear
nuestras matrices ¿vale? Tenemos la matriz de entrada, es la matriz X y esto sería,
pues a ver, tendríamos que irnos a boston.data y coger la columna pues sería 0, 1, 2, 3,
4, 5, sería la columna 5 ¿vale? Entonces decimos cogemos todas las filas de la columna
pero ok, vamos a ver si tenemos aquí ahora nuestra variable X ¿vale? Efectivamente esta
es nuestra variable y además sabemos que son los datos correctos porque tiene sentido
¿no? Que 6,5, 6,3, 5,8, que sea el número medio de habitaciones por hogares de cada
barrio. Muy bien. Por otro lado también necesitamos la variable
por medio ¿no? Esta variable yo antes estaba mirando y no la encontraba en data y es que
la tienen separada en target. Igual no entiendo muy bien pero bueno, debería estar también
metido dentro de data. Vamos a importarlo, vamos a ver el contenido de esta variable
¿vale? De nuevo podemos ver los valores y efectivamente pues tiene sentido con lo que
tenemos que esperar ¿no? Lo que vamos a hacer inicialmente es, vamos a sacar una gráfica
de nuestra variable ¿vale? Vamos a encontrar esta gráfica donde tenemos en el eje X el
número de habitaciones, en el eje Y tenemos el valor medio y vamos a ver la nube de puntos
con la cual nosotros después intentaremos dibujar la línea de regresión lineal ¿vale?
Para eso nos va a ser conveniente convertir nuestros datos ya en matrices ¿no? Y para
eso vamos a utilizar pues esta función de numpy, que es numpy array y la convertimos
en matrices ¿vale? Ahora tendríamos nuestra matriz X y nuestra matriz Y y lo que vamos
a hacer es graficarlo dentro de un eje de coordenada. Entonces para eso vamos a llamar de la librería
matplotlib ponemos plt.scatter y ponemos como variable X la matriz X y como variable Y la
matriz Y. Le damos y no nos sale nada porque nos ha faltado poner plot show ¿vale? Siempre
que quieran graficar algo pues primero llaman la función para graficar y luego para que
se muestre tienen que llamar a plot show ¿vale? Le damos y lo vemos aquí perfectamente ¿vale?
Mejor en azul. Muy bien, pues aquí tenemos nuestra nube de datos. Podemos ponerle un
poco de alfa, es decir, de transparencia a los puntos para poder ver si a lo mejor aquí
podemos ver cómo se concentran más puntos. Vale, alfa cero con tres. Muy bien. Bueno,
si nos fijamos la nube de puntos es coherente con lo que vimos en el vídeo, es decir, nosotros
tenemos una tendencia que parece que incrementa según se incrementa el número de medios
de habitaciones pues también incrementa el valor medio de las viviendas. Parece que tiene
sentido. Si yo tuviera que dibujar ahora la línea de regresión a mano pues diría
que sería algo así ¿no? Parece que sería esta la línea correcta. Pero no, es la idea,
la idea es encontrarla de forma programática. Entonces lo que vamos a hacer es dibujar nuestra
perdón, dibujarnos. Vamos a implementar, vamos a escribir con código la fórmula que
vimos el otro día. Si no recuerdan cuál era la fórmula la voy a escribir aquí arriba
y recordemos que es la fórmula que obteníamos de minimizar el error cuadrático medio, es
decir, sería la estimación por la técnica de mínimos cuadrados ordinarios. Muy bien.
Entonces esta fórmula la voy a escribir con látex y era algo así como w, bueno pueden
poner w o beta, yo lo voy a llamar beta en este caso. Beta igual a x, x transpuesta por
x, tranquilos que ahora se va a ver bien la fórmula, esto es simplemente para redactarla.
X transpuesta por x, vale de nuevo por, a ver sería inversa de x, es que tengo el teclado
finlandés y no entiendo los símbolos que tengo aquí. X transpuesta de y, a ver esto
tendría que ser una llave, hay que ponerlo como Markdown. Esta sería nuestra fórmula,
beta igual a x transpuesta de x, inversa por x transpuesta de y. Como ven aquí las betas
las obtenemos simplemente manipulando nuestra matriz x y nuestra matriz y, es la magia, la
ciencia del método de mínimos cuadrados ordinarios. Una cosa que quiero recordaros
y fue un error que no mencioné en el vídeo y que me señalaron en los comentarios, es
que acuérdense que nosotros estamos trabajando con, de manera vectorial, eso quiere decir
que en vez de trabajar con todas las ecuaciones de manera iterativa para cada uno de los datos,
pues en este caso lo que tenemos es matrices que representan nuestros datos de entrada,
los datos de salida y que podemos operar con ellos de manera más cómoda y más eficiente
en nuestro ordenador. En un punto del vídeo yo les dije, fíjense en estas ecuaciones de
aquí, fíjense en esta ecuación de aquí abajo y convenceros de que estas ecuaciones
de aquí son iguales a esta ecuación de aquí abajo. Y realmente casi casi lo son, es decir,
si ustedes cogen la ecuación matricial de abajo y la multiplican casi casi les sale
lo mismo, pero falta algo. Y una persona se fijó que no recuerdo ahora cómo era su nombre,
pero sí se fijó y es cierto, nos faltó añadir una modificación a nuestra matriz X para que
nosotros pudiéramos tener el término independiente de nuestras ecuaciones, porque si se fijan
ahora mismo, si nosotros hacemos la multiplicación de X por W, pues lo que vamos a tener es que
para cada X, para cada beta, hay una X asociada, pero es cierto que en nuestras ecuaciones
de arriba tenemos una beta que no está asociada a ninguna X, que es el término independiente
de nuestra ecuación. Entonces, normalmente eso suele ser muy común y lo que se suele
hacer es modificar la matriz X añadiendole una columna de unos en la primera columna,
para que cuando hagas la multiplicación, pues esa columna de unos haga que la primera
beta o la primera W se quede sin ninguna X, con lo cual vamos a tener nuestro término
separado. Entonces, lo que vamos a hacer aquí, lo primero, antes de que se nos olvide esto,
vamos a coger nuestra X, que ya la teníamos especificada, y vamos a añadirle una columna
de unos, y lo vamos a poner aquí con comentarios, añadimos columna de unos para término independiente.
Entonces lo que estamos haciendo en esta línea es coger y decir, vamos a crear una nueva
matriz formada por X y formada por una ristra de unos. ¿Cuántos? Pues lo mismo que tenemos
de filas en la matriz. En este caso, como yo sé cuántos son, pues que son 506, pues
lo ponemos directamente, aunque sería más correcto sacar la forma de esta matriz, sacar
la primera dimensión y ya está. Pero bueno, en este caso no pasa nada. Entonces vamos
a comprobar que nuestra matriz X se ve como queremos, la vamos a imprimir, y la vemos
aquí. Tenemos, exacto, la primera columna de unos y luego tenemos la columna con los
números medios de habitaciones. Muy bien, claro, y ahora nos está dando error al graficar
porque ya nuestra matriz X no solo tiene una dimensión. Entonces esto lo podríamos
poner antes de modificar a la matriz X. Muy bien. Entonces, ahora viene la chicha de todo
este tutorial que realmente no tiene mucha ciencia que es escribir esta fórmula que
tenemos aquí arriba. Vamos a empezar a escribirla y vamos a empezar por el paréntesis. Fíjense
que en este caso como estamos utilizando Numpy para definir nuestra matriz X, tenemos acceso
a muchas funciones de Numpy que nos van a ayudar y nos van a facilitar el trabajo. Todo
esto de aquí son herramientas que Numpy te proporciona para poder trabajar con tu matriz
X. Una de ellas que nos va a venir muy bien es esta de aquí, con esto tú defines la
transpuesta de X, la matriz transpuesta de X. Y es mucho más cómodo que la forma normal
que sería escribir, a ver, sería escribir transpose de X. Esta sería la forma convencional
de trabajar, pero lo bueno es que Numpy, como sabe que esto es una herramienta que se suele
utilizar bastante, pues te da un atajo mucho más sencillo. Entonces vamos a utilizar X
transpuesta multiplicada por X. Si nosotros hiciéramos esto así ahora, pues nos daría
un error porque esta multiplicación es la multiplicación normal escalar y a nosotros
nos interesa la multiplicación matricial. Esto en Python se consigue con el símbolo
arroba. Ahora todo este paréntesis X transpuesta de X lo tenemos que invertir y para eso vamos
a llamar a la función Numpy en el paquete de álgebra lineal int. Y con esto ya tenemos
la inversa de la matriz X transpuesta de X. Esto de nuevo lo tenemos que multiplicar por
la matriz X dt y esto lo multiplicamos por la matriz Y. Muy bien. Vale, fíjense y convénsase
de nuevo de que esta línea de código de aquí es exactamente nuestra estimación de los
parámetros a partir de la ecuación que tenemos aquí utilizando el método de mínimos cuadrados
ordinarios. Es exactamente lo mismo, inversa de X transpuesta de X por X transpuesta por
Y. Con lo cual si nosotros ejecutamos este código, pues nos va a dar un error porque
nunca sale la primera. A ver, nos dice matriz singular matrix. Eso es que tenemos un problema
con las dimensiones de nuestra matriz. Vamos a ver qué dimensiones tiene. Voy a crear una
nueva celda y vamos a poner aquí Xshape y esto nos va a dar la forma de nuestra matriz
X. Y efectivamente, vale, vemos el error y es que X está transpuesta. Es decir, lo normal
sería que tuviéramos 506 filas y dos columnas y tenemos exactamente lo contrario. Nosotros
lo que queremos es esta matriz de aquí. Entonces lo que vamos a hacer fácilmente es aquí
arriba escribir esto. Vale, entonces ya tenemos aquí en X la matriz transpuesta. A ver qué
pasa ahora. Vale, mismo error. Ah, vale, no, esto lo vamos a poner aquí abajo cuando definimos
la matriz con la columna de unos. Perfecto. Ahora ya se lo ha tragado. Entonces nosotros
ahora tendríamos nuestra matriz de parámetros que minimizan el error cuadrático medio de
nuestra nube de puntos. Vale, si queremos asegurarnos de que está bien, pues tendríamos
que encontrarnos ahora con una matriz. Al menos sería un indicador de que está bien
que tuviera dos elementos. Uno tendría que ser el elemento independiente de nuestra línea
y otro tendría que ser la pendiente de nuestra línea. Vamos a verlo. Efectivamente, tenemos
aquí nuestra matriz y los valores parecen correctos. Tenemos menos 34 y menos 34 representa
el punto del eje Y en el que se corta cuando X es igual a 0. Y si vemos nuestra nube de
punto, pues la tendencia hace parecer que cuando llega a 0, que tiene que ser a esta
altura, pues va a estar en un valor negativo que podría ser fácilmente menos 34. Por
otro lado, tenemos también el valor de la pendiente y vemos que es un valor directo
y parece que también tiene sentido porque según nos indica este valor, pues sería
cada incremento en una unidad del número medio de habitaciones, tenemos un incremento
de 9 unidades del valor de la vivienda. Por tanto parece coherente, pero bueno, no hemos
hecho todo esto para no dibujar la famosa línea. Entonces, vamos a dibujar la línea.
Y para eso directamente vamos a utilizar la función plot y vamos a definir los dos puntos
de la línea, el punto inicial y el punto final. Para eso, ¿qué sabemos? Sabemos que
nuestra línea va a empezar, podemos hacer que empiece desde aquí, desde 4 por ejemplo
y que acabe 9 en el eje de aquí. Pues lo ponemos directamente, 4 y 9. Y el eje Y y
los puntos del eje Y tienen que ser los que obtenemos de nuestra ecuación lineal utilizando
los parámetros que acabamos de estimar. Entonces, eso sería, pues por ejemplo, el punto cuando
X es igual a 4, el punto Y sería beta 0, es decir, el término independiente, más
beta 1 por 4, que sería el valor de X. Y por el otro lado tendríamos lo mismo con
el valor de 9, es decir, beta 0 más beta 1 por 9. Y esta línea la vamos a pintar de
color rojo para que se pueda diferenciar de nuestro dato. Vale, entonces vamos a ejecutar
y ¡pum! no sale nada. ¿Por qué? Porque tenemos el plot show aquí arriba y habría que ponerlo
después de la línea que acabamos de dibujar. Vamos ahora y ¡pum! Ahí está efectivamente
¡pum! la línea de regresión lineal estimada por los mínimos cuadrados ordinarios. Efectivamente
aquí está el resultado de lo que estamos esperando. Como ven es muy sencillo, es un
tutorial muy simple lo que estamos haciendo hoy. De hecho, lo normal no sería ni siquiera
que utilices esta ecuación, sino que ya directamente lo que harías sería utilizar librerías
que ya implementen regresión lineal, que son todas, todas las librerías. La que vimos
antes, Escaler, tiene regresión lineal. Numpy o Syspy, no me extrañaría que tuviera regresión
lineal. Excel tiene regresión lineal, es decir, es un algoritmo muy sencillote y no
tiene mucho misterio. Pero bueno, siempre reconforta ver que al menos el código funciona
correctamente. Como ven tenemos aquí ya nuestro modelo y éste sería la línea que estamos
buscando. ¿Vale? Nada, no hay más. Era esto. Como digo, es algo muy básico, pero iríamos
aumentando la complejidad de nuestros algoritmos poco a poco. Lo que quedaría ser, bueno,
fíjense una cosa, recuerden, es importante y para que entiendan lo que va a venir en
el canal. Como dije en el vídeo, esto que tenemos aquí, esta operación, es invertir
una matriz, ¿vale? Y si se dan cuenta, en este caso nuestra matriz, pues si viéramos
cuál es la dimensión de X tras puesta de X, en este caso sería la matriz de X tendría
una dimensión de 506 por 14, si utilizáramos todas las variables. Eso significa que X
tras puesta de X tendría una dimensión 14 por 14 e invertir esa matriz sería invertir
una matriz de 14 por 14. ¿Vale? Sería asequible para un ordenador. Pero imagínense que estamos
trabajando en un problema mucho más complejo y que en vete 14 atributos aquí, pues si
estuvieras trabajando con genética, por ejemplo, que suelen ser problemas con una alta dimensionalidad,
por lo mejor podrías tener 100.000 atributos, ¿vale? Con lo cual tu matriz aquí se convertiría
en una matriz de 100.000 por 100.000. Y eso es una matriz muy grande y a la hora de invertirla
requiere un esfuerzo muy grande por parte del ordenador. Porque si no recuerdo mal creo
que es un algoritmo que tiene un orden de magnitud al cubo, ¿vale? Es decir, N elevado
al cubo. Eso significa que si tú tienes 500.000 elementos en tu matriz, pues sería 500.000
al cubo, operaciones que tiene que realizar el computador, el ordenador, antes de encontrar
el resultado. Con lo cual, eso hace que este sistema sea ineficiente. Y de la misma forma
que expliqué en el vídeo, pues no siempre puedes utilizarlo si quieres utilizar diferentes
modelos o diferentes funciones de coste. Con lo cual, ¿qué vamos a necesitar? Otro método.
Y ese método es el que veremos en próximos vídeos, que es el gradient descent, que es
un método iterativo que poco a poco se va acercando al error mínimo. Es decir, vete
a encontrar exactamente cuál es el mínimo error de nuestra función, va a ir moviéndose
por el espacio de... Como que te tienes que imaginar nuestra función de coste, pues al
igual que nosotros podemos tener en dos dimensiones nuestra función de coste que sea una curva,
pues si tú aumentas las dimensiones puedes encontrarte como una especie de terreno con
montañas y valles y tú vas a estar moviéndote por ese terreno buscando cuál es el punto
mínimo, ¿vale? Y el algoritmo de gradient descent es el que te va a permitir encontrar
ese mínimo, que no siempre va a ser el mínimo óptimo, pero bueno, ya lo iremos viendo.
Y eso lo implementaremos en próximo vídeo, ¿vale? Nada más, eso es todo lo que quería
contar hoy. Creo que me he enrollado con una persiana, pero eso es algo habitual y creo
que va a ser algo muy habitual en estos vídeos, más que en los todaCoffees incluso, porque
lo voy a hacer, pues así, crudo. Me gusta que sea yo sentarme enfrente del ordenador
y explicaros cómo se hace, como si estuviera programando. Poco a poco iré mejorando, tenganme
en cuenta que esta es la primera vez que lo estoy haciendo, que tengo el micro aquí,
estoy grabando la pantalla, a lo mejor se escucha mal, se escucha con ecos, se escuchan
ruidos, no me lo tengan en cuenta. También a lo mejor me he trabado hablando, tampoco
me lo tengan en cuenta, poco a poco iré mejorando. No es sencillo programar, estar concentrado
y a la vez estar hablando, me he dejado la voz por el camino. Pero bueno, yo creo que
era algo que hacía falta en el canal, que muchos lo van a agradecer, no creo que todo
el mundo que está suscrito lo vaya a seguir, porque no todo el mundo está en informática,
hay gente que le apasiona el campo a nivel teórico, a nivel filosófico, pero bueno,
es un espacio que si está yo creo que será bienvenido. Si te gusta házmelo saber abajo
en los comentarios o deja tu like o deja comentarios críticos si no te ha gustado, ¿qué mejorarías?
Si has encontrado algún error en mi código házmelo saber que eso será también muy habitual
y nada más. Como siempre digo, compartan por redes sociales, es muy importante para ayudar
al crecimiento del canal, si conocen a alguien que le pueda interesar o si creen que tienen
seguidores suficientes como para poder promocionarlo sería una ayuda muy grande. Y nada, y lo último
eso que tenemos habilitado un Patreon, actualmente solo hay un Patreon que ha ayudado en el canal
y también tengo que confesar que es un amigo mío, con lo cual no cuenta tampoco, un saludo
Junior. Y bueno, pero bueno, no pasa nada, es más importante que promocionen el canal
o que sean críticos o que ayuden en la sección de comentarios que todo lo demás, ¿vale?
Así que bueno, eso es todo lo que quería comentar hoy, ya esto es un canal de YouTube
oficial porque ya tenemos nuestro vídeo conmigo encerrado aquí en la webcam en una esquina
y espero que lo hayan disfrutado. Un saludo y nos vemos en el próximo vídeo. ¡Adiós!