0:00

You now know a bunch about machine learning.

In this video, I like to

teach you a programing language,

Octave, in which you'll be

able to very quickly implement

the the learning algorithms we've

seen already, and the learning

algorithms we'll see later in this course.

In the past, I've tried to teach machine learning

using a large variety of different programming languages

including C++ Java,

0:22

Python, NumPy, and also

Octave, and what I

found was that students were able

to learn the most

productively learn the most quickly

and prototype your algorithms most

quickly using a relatively

high level language like octave.

In fact, what I often

see in Silicon Valley is

that if even if you need to build.

If you want to build a large

scale deployment of a learning

algorithm, what people will often do

is prototype and the language is Octave.

Which is a great prototyping language.

So you can sort of get your learning algorithms working quickly.

And then only if you need

to a very large scale deployment of it.

Only then spend your time

re-implementing the algorithm

to C++ Java or some of the language like that.

Because all the lessons we've learned is

that a time or develop a time.

That is your time.

The machine learning's time is incredibly valuable.

And if you can

get your learning algorithms to work more quickly in Octave.

Then overall you have a

huge time savings by first

developing the algorithms in

Octave, and then implementing and

maybe C++ Java, only after we have the ideas working.

The most common prototyping language I

see people use for machine

learning are: Octave, MATLAB,

Python, NumPy, and R.

1:38

Octave is nice because open sourced.

And MATLAB works well

too, but it is expensive for

to many people.

But if you have access to a copy of MATLAB.

You can also use MATLAB with this class.

If you know Python, NumPy,

or if you know R. I do see some people use it.

But, what I see is

that people usually end up

developing somewhat more slowly, and

you know, these languages.

Because the Python, NumPy syntax

is just slightly clunkier than the Octave syntax.

And so because of that, and

because we are releasing starter

code in Octave.

I strongly recommend that you

not try to do the following exercises in this class in NumPy and R.

But that I do recommend that

you instead do the programming exercises

for this class in octave instead.

What I'm going to do in

this video is go through

a list of commands very,

very quickly, and its goal

is to quickly show you the

range of commands and the range of things you can do in Octave.

The course website will have

a transcript of everything I

do, and so after

watching this video you

can refer to the transcript

posted on the course website

when you want find a command.

Concretely, what I recommend

you do is first watch the tutorial videos.

And after watching to the

end, then install Octave on your computer.

And finally, it goes to

the course website, download the transcripts

of the things you see in the

session, and type in

whatever commands seem interesting

to you into Octave, so that it's

running on your own computer, so

you can see it run for yourself.

And with that let's get started.

Here's my Windows desktop, and I'm going to start up Octave.

And I'm now in Octave.

And that's my Octave prompt.

Let me first show the elementary

operations you can do in Octave.

So you type in 5 + 6.

That gives you the answer of 11.

3 - 2.

5 x 8, 1/2, 2^6

3:35

is 64.

So those are the elementary math operations.

You can also do logical operations.

So one equals two.

This evaluates to false.

The percent command here means a comment.

So, one equals two, evaluates to false.

Which is represents by zero.

One not equals to two.

This is true.

So that returns one.

Note that a not equal sign

is this tilde equals symbol.

And not bang equals.

Which is what some other

programming languages use.

Lets see logical operations one and zero

use a double ampersand sign to

the logical AND.

4:18

And that evaluates false.

One or zero is the OR operation.

And that evaluates to true.

And I can XOR one and

zero, and that evaluates to one.

This thing over on the left, this Octave 324.x

equals 11, this is the default Octave prompt.

It shows the, what, the

version in Octave and so on.

If you don't want that prompt,

there's a somewhat cryptic command PF

quote, greater than, greater

than and so on,

that you can use to change the prompt.

And I guess this quote a string in the middle.

Your quote, greater than, greater than, space.

That's what I prefer my Octave prompt to look like.

So if I hit enter.

Oops, excuse me.

Like so.

PS1 like so.

Now my Octave prompt has changed to the greater than, greater than sign.Which,

you know, looks quite a bit better.

Next let's talk about Octave variables.

I can take the variable

A and assign it to 3.

And hit enter.

And now A is equal to 3.

You want to assign a variable, but you don't want to print out the result.

If you put a semicolon, the semicolon

suppresses the print output.

So to do that, enter, it doesn't print anything.

Whereas A equals 3.

mix it, print it out,

where A equals, 3 semicolon doesn't print anything.

I can do string assignment.

B equals hi

Now if I just

enter B it prints out the

variable B. So B is the string hi

C equals 3 greater than colon 1.

So, now C evaluates the true.

5:55

If you want to print

out or display a variable, here's how you go about it.

Let me set A equals Pi.

And if I want to print

A I can just type A like so, and it will print it out.

For more complex printing there is

also the DISP command which stands for Display.

Display A just prints out A like so.

You can also display strings

so: DISP, sprintf, two

decimals, percent 0.2,

F, comma, A. Like so.

And this will print out the string.

Two decimals, colon, 3.14.

This is kind of

an old style C syntax.

For those of you that

have programmed C before, this is

essentially the syntax you use to print screen.

So the Sprintf generates a

string that is less

than the 2 decimals, 3.1 plus string.

This percent 0.2 F means

substitute A into here,

showing the two digits after the decimal points.

And DISP takes the string

DISP generates it by the Sprintf command.

Sprintf.

The Sprintf command.

And DISP actually displays the string.

And to show you another

example, Sprintf six decimals

percent 0.6 F comma A.

And, this should print Pi

with six decimal places.

7:22

Finally, I was saying, a like so, looks like this. There

are useful shortcuts that type type formats long.

It causes strings by default.

Be displayed to a lot more decimal places.

And format short is a

command that restores the default

of just printing a small number of digits.

Okay, that's how you work with variables.

Now let's look at vectors and matrices.

Let's say I want to assign MAT A to the matrix.

Let me show you an example: 1, 2,

semicolon, 3, 4, semicolon, 5, 6.

This generates a three by

two matrix A whose first

row is 1, 2. Second row

3, 4. Third row is 5, 6.

What the semicolon does is

essentially say, go to

the next row of the matrix.

There are other ways to type this in.

Type A 1, 2 semicolon

3, 4, semicolon, 5, 6, like so.

And that's another equivalent way of

assigning A to be

the values of this three by two matrix.

Similarly you can assign vectors.

So V equals 1, 2, 3.

This is actually a row vector.

Or this is a 3 by 1 vector.

Where that is a fat Y vector,

excuse me, not, this is

a 1 by 3 matrix, right.

Not 3 by 1.

If I want to assign

this to a column vector,

what I would do instead is do v 1;2;3.

And this will give me a 3 by 1.

There's a 1 by 3 vector.

So this will be a column vector.

Here's some more useful notation.

V equals 1: 0.1: 2.

What this does is

it sets V to the bunch

of elements that start from 1.

And increments and steps

of 0.1 until you get up to 2.

So if I do this, V is going to be this, you know, row vector.

This is what one by eleven matrix really.

That's 1, 1.1, 1.2, 1.3 and

so on until we

9:31

Now, and I can also

set V equals one colon six,

and that sets V to be these numbers.

1 through 6, okay.

Now here are some other ways to generate matrices.

Ones 2.3 is a command

that generates a matrix that

is a two by three matrix

that is the matrix of all ones.

So if I set that c2

times ones two by

three this generates a

two by three matrix that is all two's.

You can think of this as a

shorter way of writing this and

c2,2,2's and you can

call them 2,2,2, which would also give you the same result.

Let's say W equals one's, one

by three, so this is

going to be a row vector

or a row of

three one's and similarly

you can also say w equals

zeroes, one by

three, and this generates a matrix.

A one by three matrix of all zeros.

Just a couple more ways to generate matrices .

If I do W equals

Rand one by three,

this gives me a one

by three matrix of all random numbers.

If I do Rand

three by three.

This gives me a three by

three matrix of all

random numbers drawn from the

uniform distribution between zero and one.

So every time I do

this, I get a different

set of random numbers drawn

uniformly between zero and one.

For those of you that

know what a Gaussian random variable

is or for those of you that

know what a normal random variable

is, you can also set W

equals Rand N, one by three.

And so these are going

to be three values drawn from

a Gaussian distribution with mean

zero and variance or

standard deviation equal to one.

And you can set more complex

things like W equals minus

six, plus the square root

ten, times, lets say

Rand N, one by ten thousand.

And I'm going to put a semicolon at

the end because I don't really want this printed out.

This is going to be a what?

Well, it's going to

be a vector of, with

a hundred thousand, excuse me, ten thousand elements.

So, well, actually, you know what?

Let's print it out.

So this will generate a matrix like this.

Right?

With 10,000 elements.

So that's what W is.

And if I now

plot a histogram of W

with a hist command, I can

now. And Octave's print hist

command, you know, takes a

couple seconds to bring this up,

but this is a histogram of

my random variable for W.

There was minus 6 plus zero

ten times this Gaussian random variable.

And I can plot a histogram with

more buckets, with more bins, with say, 50 bins.

And this is my

histogram of a Gaussian with mean minus 6.

Because I have a minus

6 there plus square root 10 times this.

So the variance of

this Gaussian random variable

is 10 on the standard deviation is

square root of 10, which is about what?

Three point one.

12:41

Finally, one special command

for generator matrix, which is the I command.

So I stands for this

is maybe a pun on the word identity.

It's server set eye 4.

This is the 4 by 4 identity matrix.

So I equals eye 4.

This gives me a 4 by 4 identity matrix.

And I equals eye 5, eye 6.

That gives me a 6 by

6 identity matrix, i3

is the 3 by 3 identity matrix.

Lastly, to

wrap up this video, there's one more useful command.

Which is the help command.

So you can type help i and

this brings up the help function for the identity matrix.

Hit Q to quit.

And you can also type help rand.

Brings up documentation for the rand or the

random number generation function.

Or even help help, which

shows you, you know help on the help function.

13:36

So, those are the

basic operations in Octave.

And with this you should be

able to generate a few matrices, multiply, add things.

And use the basic operations in Octave.

In the next video, I'd like

to start talking about more

sophisticated commands and how

to use data around and start to process data in Octave.