Ambas serían mi respuesta. MATLAB en realidad se comporta exactamente como cabría esperar desde la perspectiva del álgebra lineal y NumPy no. Entonces, si desea aprender los algoritmos y usar la notación matemática como referencia, el código MATLAB casi se parece a la ecuación matemática.
Usemos algunos ejemplos de un video de la conferencia Stanford Machine Learning.
Modelo de regresión lineal donde [math] x_0 = 1 [/ math]
[matemáticas] h_ \ theta (x ^ {(i)}) = \ sum_ {j = 0} ^ n \ theta_jx_j ^ {(i)} = \ theta ^ Tx [/ matemáticas]
- ¿Es la IA la próxima ola de evolución? ¿Es esto lo que es 'Kali Yuga'?
- ¿Qué modelos diferentes de inteligencia podrían existir?
- ¿Los ingenieros de aprendizaje automático están programando la emoción en IA general? Si no, ¿se deduce que las decisiones de GI y SI serán completamente impredecibles?
- ¿Qué pueden enseñarnos las redes neuronales profundas sobre el pensamiento humano?
- Si se crea una IA fuerte, ¿por qué debería servirnos?
En MATLAB
h = theta'*x;
Aquí hay una función sigmoidea utilizada en el modelo de regresión logística.
[matemáticas] g (z) = \ frac {1} {1 + e ^ {- z}} [/ matemáticas]
En MATLAB
g = 1 ./ (1 + exp(-z));
NumPy usa la transmisión y eso no es parte del álgebra lineal y sus vectores pierden dimensión a menos que use explícitamente una matriz 2D. Siempre y cuando seas consciente de esas peculiaridades, está bien. De hecho, los usé a ambos, según sea necesario. Tiendo a usar MATLAB más si necesito implementar un nuevo algoritmo de un trabajo de investigación, mientras que necesito usar NumPy si estoy trabajando con alguien que no usa MATLAB.
Aquí hay un código NumPy que realiza un producto de puntos simple entre los vectores A y B, que es una transposición de A. Matemáticamente,
[matemáticas] C = AB [/ matemáticas].
Tenga en cuenta que debe especificar A como una matriz 2D; de lo contrario, la transposición no funcionará.
A = np.arange (1,6) # dimensioned 1D array, no puede transponer esto
A = np.arange (1,6) [np.newaxis ,:] # matriz 2D
B = AT # transponiendo A
C = A * B # este resultado en la multiplicación por elementos debido a la transmisión
C = np.dot (A, B) # tienes que hacer esto
Lo mismo en MATLAB
A = 1: 5;
B = A ‘;
C = A * B
Curiosamente, Andew Ng, cofundador de Coursera, dice en uno de sus videos en el curso de Machine Learning, explicando por qué fue con Octave para este curso (un clon de código abierto de MATLAB)
Lo que descubrí fue que los estudiantes podían aprender los algoritmos prototipo más productivos, más rápidos y más rápidos utilizando lenguajes de nivel relativamente alto como Octave
y continúa
Si conoces Python, NumPy, o si conoces R, veo que algunas personas lo usan, pero lo que veo es que la gente terminó desarrollándose algo más lentamente en estos lenguajes porque la sintaxis de Python NumPy es un poco más …
Creo que estaba hablando de que NumPy no seguía las convenciones de álgebra lineal con mayor fidelidad, tal vez para mantener una sintaxis similar a Python.
Solo por diversión, vea este segmento de video de la conferencia de Andrew Ng en Stanford donde habla sobre MATLAB y comparte una anécdota interesante (alrededor de 25 minutos en el video)