I am new to machine learning and statistics (well, I've been learning math in my university but that was about 10-12 years ago)
Could you please explain the meaning of following sentence from 4 page (in a book 5 page) from book here ( https://www.researchgate.net/publication/227612766_An_Empirical_Comparison_of_Machine_Learning_Models_for_Time_Series_Forecasting ):
The multilayer perceptron (often simply called neural network) is perhaps the most
popular network architecture in use today both for classification and regression (Bishop
[5]). The MLP is given as follows:
N
H
y ˆ = v0 +
j=1
X
vj g(wj T x′ )
(1)
where x′ is the input vector x, augmented with 1, i.e. x′ = (1, xT )T , wj is the weight
vector for j th hidden node, v0 , v1 , . . . , vN H are the weights for the output node, and y ˆ is
the network output. The function g represents the hidden node output, and it is given
in terms of a squashing function, for example (and that is what we used) the logistic
function: g(u) = 1/(1 + exp(−u)). A related model in the econometrics literature is
For instance, we have a vector x = [0.2, 0.3, 0.4, 0.5]
How do I transform it to get a x′ vector augmented to 1
x′ = (1, x)
This is part of the isomorphism between matrices and systems of equations. What you have at the moment is a row equivalent to a right-hand-side expression, such as
w1 = 0.2*x1 + 0.3*x2 + 0.4*x3 + 0.5*x4
w2 = ...
w3 = ...
w4 = ...
When we want to solve the system, we need to augment the matrix. This requires adding the coefficient of each w[n] variable. They are trivially all ones:
1*w1 = 0.2*x1 + 0.3*x2 + 0.4*x3 + 0.5*x4
1*w2 = ...
1*w3 = ...
1*w4 = ...
... and that's where we get the augmented matrix. When we assume the variables by position -- w by row, x by column -- what remains is the coefficients alone, in a nice matrix.
Related
In Linear Regression, there is a cost function as:
The code in Octave is:
function J = computeCost(X, y, theta)
%COMPUTECOST Compute cost for linear regression
% J = COMPUTECOST(X, y, theta) computes the cost of using theta as the
% parameter for linear regression to fit the data points in X and y
% Initialize some useful values
m = length(y); % number of training examples
% You need to return the following variables correctly
J = 0;
% ====================== YOUR CODE HERE ======================
% Instructions: Compute the cost of a particular choice of theta
% You should set J to the cost.
H = X*theta;
S = (H - y).^2;
J = 1 / (2*m) * sum(S);
% =========================================================================
end
Could someone tell me why sigma(h0(x(i))) is equal to a vectorization X*theta?
Thanks
Could someone tell me why sigma(h0(x(i))) is equal to a vectorization X*theta?
That is not the case. At no point in this code does sigma(h(x_i)) get computed separately. The variable H is not equal to that value but it's a (column) vector that stores the values
`h(x_i)=dot_product(x_i,theta)`
for all examples.
The formula that you give in Latex just says that it wants us to sum the ((h(x_i)-y_i))^2 over all examples. What you want to avoid doing is to compute h(x_i) for all of those examples in a sequential manner, because that would be time consuming. From the definition of h(x), you know that
#I've written a more general case, and the case `n==1` will correspond to your Latex formula)
h(x_i)=[1 x_i1 ... x_in]*[theta_0 theta_1 ... theta_n]'
The matrix X is of size m*n, where m is the number of examples. So each row of the vector
H=X*theta #H is a vector of size m*1
will correspond to a single h(x_i).
Knowing this, you can see that
S=(H-y).^2 #S is a vector of size m*1
is a vector such that each element is one of the (h(x_i)-y_i)^2. So, you just need to sum all of them with sum(S) to get the value of the sigma from your Latex formula.
I have used octave notation and syntax for writing matrices: 'comma' for separating column items, 'semicolon' for separating row items and 'single quote' for Transpose.
The second line of the Latex expression in the question, is valid with just one training example, x is a '(f+1) x 1' matrix or a column vector. Specifically x = [x0; x1; x2; x3; .... xf]
x0 is always '1'. Here 'f' is the number of features.
theta = [theta0; theta1; theta2; theta3; .... thetaf].
'theta' is a column vector or '(f+1) x 1' matrix. theta0 is the intercept term.
In this special case with one training example, the '1 x (f+1)' matrix formed by taking theta' and x could be multiplied to give the correct '1x1' hypothesis matrix or a real number.
h = theta' * x as in the second line of the Latex expression is valid.
But the expression m = length(y) indicates that there are multiple training examples. With 'm' training examples, X is a 'm x (f+1)' matrix.
To simplify, let there be two training examples each with 'f' features.
X = [ x1; x2].
(Please note 1 and 2 inside the brackets are not exponential terms but indexes for the training examples).
Here, x1 = [ x01, x11, x21, x31, .... xf1 ]
and
x2 = [ x02, x12, x22, x32, .... xf2].
So X is a '2 x (f+1)' matrix.
Now to answer the question, theta' is a '1 x (f+1)' matrix and X is a '2 x (f+1)' matrix. With this, the valid expression is X * theta.
The expression in Latex theta' * X becomes invalid.
The expected hypothesis matrix in my example, 'h', should have two predicted values (two real numbers), one for each of the two training examples. 'h' is a '2 x 1' matrix or column vector.
The hypothesis can be obtained by using the expression, X * theta which is valid and algebraically correct. Multiplying a '2 x (f+1)' matrix with a '(f+1) x 1' matrix resulting in a '2 x 1' hypothesis matrix.
While doing MOOC on ML by Andrew Ng, he in theory explains theta'*X gives us hypothesis and while doing coursework we use theta*X. Why it's so?
theta'*X is used to calculate the hypothesis for a single training example when X is a vector. Then you have to calculate theta' to get to the h(x) definition.
In the practice, since you have more than one training example, X is a Matrix (your training set) with "m x n" dimension where m is the number of your training examples and n your number of features.
Now, you want to calculate h(x) for all your training examples with your theta parameter in just one move right?
Here is the trick: theta has to be a n x 1 vector then when you do Matrix-Vector Multiplication (X*theta) you will obtain an m x 1 vector with all your h(x)'s training examples in your training set (X matrix). Matrix multiplication will create the vector h(x) row by row making the corresponding math and this will be equal to the h(x) definition at each training example.
You can do the math by hand, I did it and now is clear. Hope i can help someone. :)
In mathematics, a 'vector' is always defined as a vertically-stacked array, e.g. , and signifies a single point in a 3-dimensional space.
A 'horizontal' vector, typically signifies an array of observations, e.g. is a tuple of 3 scalar observations.
Equally, a matrix can be thought of as a collection of vectors. E.g., the following is a collection of four 3-dimensional vectors:
A scalar can be thought of as a matrix of size 1x1, and therefore its transpose is the same as the original.
More generally, an n-by-m matrix W can also be thought of as a transformation from an m-dimensional vector x to an n-dimensional vector y, since multiplying that matrix with an m-dimensional vector will yield a new n-dimensional one. If your 'matrix' W is '1xn', then this denotes a transformation from an n-dimensional vector to a scalar.
Therefore, notationally, it is customary to introduce the problem from the mathematical notation point of view, e.g. y = Wx.
However, for computational reasons, sometimes it makes more sense to perform the calculation as a "vector times a matrix" rather than "matrix times a vector". Since (Wx)' === x'W', sometimes we solve the problem like that, and treat x' as a horizontal vector. Also, if W is not a matrix, but a scalar, then Wx denotes scalar multiplication, and therefore in this case Wx === xW.
I don't know the exercises you speak of, but my assumption would be that in the course he introduced theta as a proper, vertical vector, but then transposed it to perform proper calculations, i.e. a transformation from a vector of n-dimensions to a scalar (which is your prediction).
Then in the exercises, presumably you were either dealing with a scalar 'theta' so there was no point transposing it, and was left as theta for convenience or, theta was now defined as a horizontal (i.e. transposed) vector to begin with for some reason (e.g. printing convenience), and then was left in that state when performing the necessary transformation.
I don't know what the dimensions for your theta and X are (you haven't provided anything) but actually it all depends on the X, theta and hypothesis dimensions. Let's say m is the number of features and n - the number of examples. Then, if theta is a mx1 vector and X is a nxm matrix then X*theta is a nx1 hypothesis vector.
But you will get the same result if calculate theta'*X. You can also get the same result with theta*X if theta is 1xm and X - mxn
Edit:
As #Tasos Papastylianou pointed out the same result will be obtained if X is mxn then (theta.'*X).' or X.'*theta are answers. If the hypothesis should be a 1xn vector then theta.'*X is an answer. If theta is 1xm, X - mxn and the hypothesis is 1xn then theta*X is also a correct answer.
i had the same problem for me. (ML course, linear regression)
after spending time on it, here is how i see it: there is a confusion between the x(i) vector and the X matrix.
About the hypothesis h(xi) for a xi vector (xi belongs to R3x1), theta belongs to R3x1
theta = [to;t1;t2] #R(3x1)
theta' = [to t1 t2] #R(1x3)
xi = [1 ; xi1 ; xi2] #(R3x1)
theta' * xi => to + t1.xi,1 +t2.xi,2
= h(xi) (which is a R1x1 => a real number)
to the theta'*xi works here
About the vectorization equation
in this case X is not the same thing as x (vector). it is a matrix with m rows and n+1 col (m =number of examples and n number of features on which we add the to term)
therefore from the previous example with n= 2,
the matrix X is a m x 3 matrix
X = [1 xo,1 xo,2 ; 1 x1,1 x1,2 ; .... ; 1 xi,1 xi,2 ; ...; 1 xm,1 xm,2]
if you want to vectorize the equation for the algorithm, you need to consider for that for each row i, you will have the h(xi) (a real number)
so you need to implement X * theta
that will give you for each row i
[ 1 xi,1 xi,2] * [to ; t1 ; t2] = to + t1.xi,1 + t2.xi,2
Hope it helps
I have used octave notation and syntax for writing matrices: 'comma' for separating column items, 'semicolon' for separating row items and 'single quote' for Transpose.
In the course theory under discussion, theta = [theta0; theta1; theta2; theta3; .... thetaf].
'theta' is therefore a column vector or '(f+1) x 1' matrix. Here 'f' is the number of features. theta0 is the intercept term.
With just one training example, x is a '(f+1) x 1' matrix or a column vector. Specifically x = [x0; x1; x2; x3; .... xf]
x0 is always '1'.
In this special case the '1 x (f+1)' matrix formed by taking theta' and x could be multiplied to give the correct '1x1' hypothesis matrix or a real number.
h = theta' * x is a valid expression.
But the coursework deals with multiple training examples. If there are 'm' training examples, X is a 'm x (f+1)' matrix.
To simplify, let there be two training examples each with 'f' features.
X = [ x1; x2].
(Please note 1 and 2 inside the brackets are not exponential terms but indexes for the training examples).
Here, x1 = [ x01, x11, x21, x31, .... xf1 ]
and
x2 = [ x02, x12, x22, x32, .... xf2].
So X is a '2 x (f+1)' matrix.
Now to answer the question, theta' is a '1 x (f+1)' matrix and X is a '2 x (f+1)' matrix. With this, the following expressions are not valid.
theta' * X
theta * X
The expected hypothesis matrix, 'h', should have two predicted values (two real numbers), one for each of the two training examples. 'h' is a '2 x 1' matrix or column vector.
The hypothesis can be obtained only by using the expression, X * theta which is valid and algebraically correct. Multiplying a '2 x (f+1)' matrix with a '(f+1) x 1' matrix resulting in a '2 x 1' hypothesis matrix.
When Andrew Ng first introduced x in the cost function J(theta), x is a column vector
aka
[x0; x1; ... ; xn]
i.e.
x0;
x1;
...;
xn
However, in the first programming assignment, we are given X, which is an (m * n) matrix, (# training examples * features per training example). The discrepancy comes with the fact that from file the individual x vectors(training samples) are stored as horizontal row vectors rather than the vertical column vectors!!
This means the X matrix you see is actually an X' (X Transpose) matrix!!
Since we have X', we need to make our code work given our equation is looking for h(theta) = theta' * X(when the vectors in matrix X are column vectors)
we have the linear algebra identity for matrix and vector multiplication:
(A*B)' == (B') * (A') as shown here Properties of Transposes
let t = theta,
given, h(t) = t' * X
h(t)' = (t' X)'
= X' * t
Now we have our variables in the format they were actually given to us. What I mean is that our input file really holds X' and theta is normal, so multiplying them in the order specified above will give a practically equivilant output to that he taught us to use which was theta' * X. Since we are summing all the elements of h(t)' at the end it doesn't matter that it is transposed for the final calculation. However, if you wanted h(t), not h(t)', you could always take your computed result and transpose it because
(A')' == A
However, for the coursera machine learning programming assignment 1, this is unnecessary.
This is because the computer has the coordinate (0,0) positioned on the top left, while geometry has the coordinate (0,0) positioned on the bottom left.
enter image description here
I'm debugging my constrained stochastic gradient descent algorithm and the paper http://research.microsoft.com/pubs/192769/tricks-2012.pdf suggests to check the gradients using finite differences. I added a penalty function, but the model does not converge anymore, so i want to check my gradient as suggested in the paper.
Pick an example z.
Compute the loss Q(z, w) for the current w.
Compute the gradient g = ∇w Q(z, w).
Apply a slight perturbation w
0 = w +δ. For instance, change a single weight
by a small increment, or use δ = −γg with γ small enough.
Compute the new loss Q(z, w0
) and verify that Q(z, w0
) ≈ Q(z, w) + δg
So I can pick an example and compute the loss of this example, but my weight vector contains of ~4000 features, so i get a vector of that many partial derivatives as my gradient while the loss is an Integer, so it's not possible to compute Q(z, w) + δg. Do i have to compute the loss for a single feature of w only? Is that meant by "the current w"?
The equation in the publication looks weird as it is not carefully described. In order to check the gradient you usually check if the difference between your "guessed" gradient g and
numerical gradient, which ith dimension equals
( Q(z, w + delta*e_i) - Q(z, w) ) / ( delta )
for small enough delta, and e_i being ith canonical vector (with 1 on ith dimension and 0 otherwise) is small enough. In other words if we denote by g_i the ith dimension of your gradient then you need to check if
| ( Q(z, w + delta*e_i) - Q(z, w) ) / ( delta ) - g_i | < eps
| Q(z, w + delta*e_i) - Q(z, w) - delta * g_i | < delta*eps
which boils down to checking
| Q(z, w + delta*e_i) - ( Q(z, w) + delta * g_i ) | < delta*eps
thus check if
Q(z, w + delta*e_i) ≈ ( Q(z, w) + delta * g_i )
which is their equation, simply feature-wise.
I was reading about non-parametric kernel density estimation.
http://en.wikipedia.org/wiki/Kernel_density_estimation
For uni-variate where D = 1, we can write like
For Multivariate Kernel density estimation (KDE), more preciously for d=3 and X = (x,y,z) can we write:
Is this technically correct? Can any one help with this?
This is very difficult to do on your own, and you really should do this through some package. Nevertheless, the definition is:
fH(x)= 1 / n \sum{i=1}n KH (x - xi), where
x = (x1, x2, …, xd)T, xi = (xi1, xi2, …, xid)T, i = 1, 2, …, n are d-vectors;
H is the bandwidth (or smoothing) d×d matrix which is symmetric and positive definite;
K is the kernel function which is a symmetric multivariate density;
KH(x) = |H|−1/n K(H−1/2x).
When I learn Logistic Regression, we use negative log likelihood to optimize the parameters w for us.
SO the loss function(negative log likelihood) is L(w).
There is an assertion that: the magnitude of the optimal w can go to infinity when the training samples are linearly seperable.
I get very confused:
1. what does the magnitude of optimal w mean?
2. Could you explain why w can go infinity?
It is the norm (euclidean, for example) what is usually understood as a magnitude of a vector.
Assume that we do binary classification and classes are linearly separable. That means
that there exists w' such that (x1, w') ≥ 0 for x1 from one class and (x2, w') < 0 otherwise. Then consider z = a w' for some positive a. It's clear that (x1, z) ≥ 0 and (x2, z) < 0 (we can multiply equations for w' by a and use linearity of dot product), so as you can see there are separating hyperplanes (zs) of unbounded norm (magnitude).
That's why one should add regularization term.
Short answer:
This is fundamental characteristic of the log function.
consider:
log(x), where x spans (0,1)
Range of values log(x) can take:
is (-Inf, 0)
More specifically to your question -
Log likelihood is given by: ( see image )
l(w) = y * log( h(x)) + (1 - y) * log (1 - h(x) )
where,
h(x) is a sigmoid function parameters by w:
h(x) = ( 1 + exp{-wx} )^-1
For simplicity consider the case of a training example where y = 1,
the equation becomes :
likelihood (l) :
= y * log ( h(x) );
= log ( h(x) )
h(x) in logistic regression maybe represented by the sigmoid function.
it has a range (0,1)
Hence,
range of (l):
(log (0), log(1) ) = (-Inf, 0)
(l) spans the range (-Inf, 0)
The above simplification only considered the (y = 1) case. If you consider the entire log likelihood function (i.e for y=1 & y=0), you will see a inverted bowl shaped cost function. Hence there is a optimum weight that will maximize log likelihood (l) or minimize negative log likelihood (-l)