A high level programming language for quickly prototyping and developing machine learning algorithms. Once the algorithms have been developed, they can be properly implemented in other programming languages such as C++, Java etc.
On Ubuntu, run
sudo apt-get update && sudo apt-get install octave
Documentation can be found here https://octave.org/doc/interpreter/. Some common commands are,
octave starts the interpreterhelp <functionname> displays documentation for a built in function. For example, help plot will bring up help information for plotting.+, -, *, /, ^== - equality operator~= - inequality operator&& - the AND logical operator|| - the OR logical operatorxor(<number>, <number>) - the XOR operator, - chain two commands and carry them out together. Mostly for putting multiple commands on the same line.% - comment; - supress the print output0 means false and all other numbers mean truePS1('>> '); - change the octave prompt
disp() - print the value of a variable, or a string
sprintf('something %0.2f', pi) - print optional arguments under the control of the template string template and returns a string
format or format options such as format long, format short etc. changes the number of characters to be displayed
sqrt()
hist() plot a histogram
size(A) or size(A, DIM) return a row vector with the size (number of elements) of each dimension for the object A. When given a second argument, DIM, return the size of the corresponding dimension.
length() Return the length of the object A. The length is 0 for empty objects, 1 for scalars, and the number of elements for vectors. For matrix or N-dimensional objects, the length is the number of elements along the largest dimension (equivalent to 'max (size (A))').
max(X) - Find maximum values in the array X. For a vector argument, return the maximum value. For a matrix argument, return a row vector with the maximum value of each column. For a multi-dimensional array, 'max' operates along the first non-singleton dimension.
magic(N)
Create an N-by-N magic square.
A magic square is an arrangement of the integers '1:n^2' such that the row sums, column sums, and diagonal sums are all equal to the same value.
Note: N must be a scalar greater than or equal to 3. If you supply N less than 3, magic returns either a nonmagic square, or else the degenerate magic squares 1 and [].
find(N)
flipud(X) - Flip the matrix upside down.
Implementation of bash commands
pwd shows the current working directorycdlsquit or exit exit Octavea = 1, a = pi - define variable a and assign it a numbera = 'hi' - string assignmentDefine a matrix
A = [1, 2; 3 4; 5 6;] defines a 3 x 2 matrixA = [1 2 3;] defines a 1 x 3 matrixA = ones(2, 3) generates a 2 x 3 matrix of all onesA = zeros(2, 3) generates a 2 x 3 matrix of all zerosA = rand(2, 3) generates a 2 x 3 matrix of random numbers drawn uniformly between 0 and 1A = randn(2, 3) generates a 2 x 3 matrix of random numbers drawn from gaussian distribution with mean zero and variance oneeye(4) - generates a 4 x 4 identity matrixDefine a vector
v = [1; 2; 3;] defines a vectorv = 1:0.1:2 defines a row vector (also 1 x 11 matrix), with each number increasing by 0.1v = 1:6 defines a row vector (also 1 x 6 matrix)Load data from file and save data to disk,
load file or load('<filename>.ext') loads a filewho shows the variables in memorywhos shows the variables in memory with more detailsclear or clear <variable_name> to remove all variables or a particular variable from the memory<vector_name>(1:10) takes the first 10 rows of the vectorsave <filename>.mat <variable_name> save values in variable to file on disksave <filename>.txt <variable_name> -asci save values in variable to file on disk that is human readableData indexing,
<matrix_variable>(1, 2) get the value at row 1 and column 2<matrix_variable>(2, :) get the all values in the second row<matrix_variable>(:, 2) get the all values in the second column<matrix_variable>([1, 3], :) from row 1 and row 3, get all columns<matrix_variable>(:, 2) = [1; 2; 3;] replace the second column with the new vectorA = [A, [100; 101; 102]] append a vector to the right of matrix AA(:) put all elements of A into a single column vectorC = [A B] or C = [A, B] concatinating A and B by putting B on the right side of AC = [A : B] concatinating A and B by putting B at the bottom of AA(:) - Turn matrix into a vector.A * BA .* B - element-wise multiplication; multiple each element in A by the corresponding element in BA .^ 2 - element-wise squaring of A; take the sqaure of each element in A1 ./ A - element-wise inverse of A; calculate the inverse of each element in A-X or -1 * X - element-wise negative of XX' - Transpose X.[val, ind] = max(a) - Get the max value and its index from the vector a.a < 3 - Do element-wise comparisonfind(a < 3) - Get the index of the elements in vector a that are smaller than 3max(rand(3), rand(3)) - Take the element-wise of two random 3 x 3 matrices.max(A, [], 1) - Take the max value of each column in matrix A.max(max(A)) - Find the single biggest value in matrix A.sum(A, 1), sum(A, 2), sum(sum(magic(9) .* eye(9))) - Find the sum of each column, row or diagonal of matrix.The period (i.e.
.) is usually used to denote element wise operations in Octave.
log(X) - compute the natural logarithm, ln(x), for each element of X
exp(X) - compute e^x for each element of X
abs(X) - compute the absolute value of each element in X
find(X)
sum(y)
Sum of elements along dimension DIM.
If DIM is omitted, it defaults to the first non-singleton dimension.
prod(y) - Return the product of all elements in y.
floor(y) - Round down the elements of y.
ceil(y) - Round up the elements of y.
pinv(X) - Get the inverse of the matrix X.
check
help plotfor more details
plot(x, y, 'r')
hold on;
Retain plot data and settings so that subsequent plot commands are displayed on a single graph. Line color and line style are advanced for each new plot added.
xlabel('time'), ylabel('value') - Set the labels along x and y axises
legend('sin', 'cos') - Add legends
title('my plot') - Add title to figure
print -dpng 'myPlot.png' - Save the plot.
close - Close the current figure.
axis([0.5 1 -1 1]) - Zoom the x axis to be from 0.5 to 1 and set the y axis to be from -1 to 1
clf - clear a figure
Two figures
figure(1);
plot(x, y1);
figure(2);
plot(x, y2);
subplot()
% divide plot into a 1 x 2 grid, access first element
subplot(1, 2, 1);
plot(x, y1);
% access second element
subplot(1, 2, 2);
plot(x, y2);
imagesc(A)
A = magic(5);
% for visualising a matrix
% running 3 commands at a time: plot matrix, add color bar and color map.
% use comma to chain function calls
imagesc(A), colorbar, colormap gray;
for loop
indicies = 1:10;
for i = indicies,
disp(i);
end;
while loop
v = rand(10, 1);
i = 1;
while i <= 5,
v(i) = 100;
i = i + 1;
end;
v = rand(10, 1)
i = 1;
while true,
v(i) = 999;
i = i + 1;
if i == 6,
break;
end;
end;
if ... else ...
i = 2;
if i == 1,
disp('The value is 1.');
elseif i == 2,
disp('The value is 2.');
else
disp('The value is not one or two');
end;
Functions
% create a file with the function name as the file name such as `squarethisnumber.m`, then inside it,
function y = squarethisnumber(x)
y = x^2;
then the function can be invoked as following in the same directory,
squarethisnumber(5);
use
addpath(<path>);to tell Octave where to look for function files.
A function can return multiple parameters, for example inside the file squareAndCubeThisNumber.m,
function [y1, y2] = squareAndCubeThisNumber(x)
y1 = x^2;
y2 = x^3;
then it can be invoked as,
[a, b] = squareAndCubeThisNumber(5);
As a complete example, assume we have the training set as below,
| x | y |
|---|---|
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
and the form of the hypothesis is h(x) = Θ0 + Θ1x.
Then,
% the design matrix
X = [1 1; 1 2; 1 3;];
% the labels
y = [1; 2; 3;];
% Θ
Θ = [0; 1;];
% then the cost i.e. overall error for all training examples is
J = costFunction(X, y, Θ);
and costFunction will be defined in costFunction.m as,
function J = costFunction(X, y, theta)
% X is the "design matrix" containing our training examples
% y is the class labels
m = size(X, 1); % number of training examples
predictions = X * theta; % predictions of hypothesis on all m examples
squareErrors = (predictions - y) .^ 2; % squared errors
J = 1/(2*m) * sum(squareErrors);