using PyPlot using NtToolBox # SetAR = @(ar)set(gca, 'PlotBoxAspectRatio', [1 ar 1], 'FontSize', 10); Xm = X -> X - repeat(mean(X,1), outer=(size(X,1), 1)) Cov = X -> Xm(X)'*Xm(X); A = readdlm("NtToolBox/src/data/boston_house_prices.csv", ','); A = A[randperm(size(A,1)),:]; X = A[:,1:end-1] y = A[:,end]; n,p = size(X); imshow(Cov(X), extent=[0, 1, 0, 1], cmap = get_cmap("jet")); U,D,V = svd(Xm(X),thin=true) Z = Xm(X) * V; figure(figsize=(5,3)) plot(D, ".-", linewidth= 2, markersize= 20); axis("tight"); figure(figsize=(6,4)) plot_multiclasses(X,ones(n,1),disp_dim=3, ms=5); col = ["blue" "green" "red" "cyan" "magenta" "yellow" "black"] for i=1:min(p,3) subplot(3,1,i) plot(Z[:,i], y, ".", c=col[i], ms=10) axis("tight") end tight_layout() n0 = Int(round(.5*n)); n1 = n-n0 X0 = X[1:n0,:]; y0 = y[1:n0] X1 = X[n0+1:end,:]; y1 = y[n0+1:end]; w = (X0'*X0) \ (X0'*y0); E = sqrt( sum( (X1*w-y1).^2 ) / n1 ); lambda = .1; w = (X0'*X0+lambda*eye(p)) \ (X0'*y0); w1 = X0'*( (X0*X0'+lambda*eye(n0)) \ y0 ); @printf "Error (should be 0): %.4f\n" norm(w-w1)/norm(w) include("NtSolutions/ml_2_regression/exo1.jl"); # Insert your code here. include("NtSolutions/ml_2_regression/exo2.jl"); # Insert your code here. include("NtSolutions/ml_2_regression/exo3.jl"); # Insert your code here. B = 3 n = 500; p = 2 # X = 2*B*rand(n,2)-B # rho = .5; # noise level # y = peaks(X[:,1], X[:,2]) + randn(n,1)*rho; X = readdlm("NtToolBox/src/data/peaks_X.csv", ',') y = readdlm("NtToolBox/src/data/peaks_y.csv", ','); scatter(X[:,1], X[:,2], ones(n,1)*20, y, cmap = get_cmap("jet")) axis([-B B -B B]'); box("on"); distmat = (X,Z) -> broadcast(+,sum(X'.*X',1)',sum(Z'.*Z',1))-2*(X*Z'); sigma = .3 kappa = (X,Z) -> exp( -distmat(X,Z)/(2*sigma^2) ); K = kappa(X,X); lambda = 0.01 h = (K+lambda*eye(n))\y; Y = x-> kappa(x,X)*h; q = 101; t = linspace(-B,B,q); v,u = meshgrid(t,t); Xn = [u[:] v[:]]; yn = reshape(Y(Xn),q,q) imshow(yn, extent=[0,1, 0,1], cmap = get_cmap("jet")) axis("image"); axis("off"); include("NtSolutions/ml_2_regression/exo4.jl"); # Insert your code here. include("NtSolutions/ml_2_regression/exo5.jl"); # Insert your code here.