From e9a0b13c09c18fdf01eb8d095d87d69a64331d4b Mon Sep 17 00:00:00 2001 From: Michael Zhang Date: Fri, 8 Dec 2023 05:22:31 -0600 Subject: [PATCH] p1 --- assignments/hwk04/HW4_Q1.m | 61 ++++++++++++++++++++++++++ assignments/hwk04/HW4_sol.typ | 19 ++++++++ assignments/hwk04/kernel_perceptron.m | 37 ++++++++++++++++ assignments/hwk04/kp_predict.m | 30 +++++++++++++ assignments/hwk04/prob1.png | Bin 0 -> 37787 bytes 5 files changed, 147 insertions(+) create mode 100644 assignments/hwk04/HW4_Q1.m create mode 100644 assignments/hwk04/HW4_sol.typ create mode 100644 assignments/hwk04/kernel_perceptron.m create mode 100644 assignments/hwk04/kp_predict.m create mode 100644 assignments/hwk04/prob1.png diff --git a/assignments/hwk04/HW4_Q1.m b/assignments/hwk04/HW4_Q1.m new file mode 100644 index 0000000..8f99ed0 --- /dev/null +++ b/assignments/hwk04/HW4_Q1.m @@ -0,0 +1,61 @@ +%generate two-class data +rng(1); % For reproducibility +N = 20; +r = sqrt(1*rand(N,1)); % Radius +t = 2*pi*rand(N,1); % Angle +data1 = [r.*cos(t), r.*sin(t)]; % Points + +r2 = sqrt(8*rand(N,1)+1); % Radius +t2 = 2*pi*rand(N,1); % Angle +data2 = [r2.*cos(t2), r2.*sin(t2)]; % points + +%combine the two class data +data3 = [data1;data2]; +theclass = ones(2*N,1); +theclass(1:N) = -1; +figure; + +for degree = [1 2 4] + %TO DO: replace fitcsvm with kernel_perceptron + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %SVM classification demo; + % alphas = fitcsvm(data3,theclass,'KernelFunction','polynomial','PolynomialOrder',degree);%tune the sigma parameter here, 1, 3, 0.1 + [alphas, b] = kernel_perceptron(data3, theclass, degree); + + %[alphas,b] = kernel_perceptron(data3,theclass,degree); + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + d = 0.02; + [x1Grid,x2Grid] = meshgrid(min(data3(:,1)):d:max(data3(:,1)),... + min(data3(:,2)):d:max(data3(:,2))); + xGrid = [x1Grid(:),x2Grid(:)]; + + %TO DO: replace predict with kp_predict + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %SVM prediction demo; replace with kernel perceptron + + % [~,scores1] = predict(alphas,data3); %replace it with mypredict(...) + % [~,scores2] = predict(alphas,xGrid); %replace it with mypredict(...) + + % scores1 = kp_predict(alphas, b, degree, data3, theclass, data3) + + % scores2 = scores2(:,2); + % training_error = CalculateErrorRate(theclass,sign(scores1(:,2))); + + scores1 = kp_predict(alphas,b,degree,data3,theclass,data3); %return the prediction scores + scores2 = kp_predict(alphas,b,degree,data3,theclass,xGrid); %return the prediction scores + training_error = CalculateErrorRate(theclass,sign(scores1)); + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + subplot(5,1,degree); + h(1:2) = gscatter(data3(:,1),data3(:,2),theclass,'rb','.'); + hold on + contour(x1Grid,x2Grid,reshape(scores2,size(x1Grid)),[0 0],'k'); + plottitle = sprintf("Degree = %d; Training Error = %f",degree,training_error); + title(plottitle); +end + +function error_rate = CalculateErrorRate(y_pred,y_label) + N = length(y_label); + error_rate = sum(y_pred ~= y_label)/N; +end \ No newline at end of file diff --git a/assignments/hwk04/HW4_sol.typ b/assignments/hwk04/HW4_sol.typ new file mode 100644 index 0000000..8a42f61 --- /dev/null +++ b/assignments/hwk04/HW4_sol.typ @@ -0,0 +1,19 @@ +== Problem 1 + +Results: + +#image("prob1.png") + +== Problem 2 + +Original: + +$ + frac(1, 2) w^T S w - nu rho + sum_t C^t xi^t +$ + +Find the Lagrangian first: + +$ + frac(1, 2) w^T S w - nu rho + sum_t C^t xi^t +$ \ No newline at end of file diff --git a/assignments/hwk04/kernel_perceptron.m b/assignments/hwk04/kernel_perceptron.m new file mode 100644 index 0000000..bbd4b46 --- /dev/null +++ b/assignments/hwk04/kernel_perceptron.m @@ -0,0 +1,37 @@ + +function [alphas, b] = kernel_perceptron(X,Y,d); + +N = size(X,1); +err = 1; %error rate +max_iter = 10000; %maximum number of iterations +alphas = zeros(N,1); +b = 0; +t = 1; + +while t<=max_iter && err>0 + for ii = 1 : N %cycle through training set + %TO DO: update alpha and b + xt = X(ii, :); + yt = Y(ii, :); + + sum = 0; + for i = 1 : N + ai = alphas(i); + yi = Y(i); + xi = X(i, :); + sum = sum + ai * yi * dot(xi, xt) ^ d; + end + sum = sum + b; + + if sum * yt <= 0 + alphas(ii) = alphas(ii) + 1; + b = b + yt; + end + + %******************************* + end + t = t+1; + %TO DO: calculate the error rate + + %******************************* +end \ No newline at end of file diff --git a/assignments/hwk04/kp_predict.m b/assignments/hwk04/kp_predict.m new file mode 100644 index 0000000..c1d3d25 --- /dev/null +++ b/assignments/hwk04/kp_predict.m @@ -0,0 +1,30 @@ +function scores = kp_predict(alphas, b, d, X, Y, tst_data) +% alphas, b: sample weights and bias term for classification +% d: degree of polynomial kernel ^d +% X,Y: training data and label +% tst_data: test data for prediction +% scores: the perdiction scores. + +N = size(X,1); +%TO DO: calculate the predictions + +[tst_size, ~] = size(tst_data); +scores = zeros(tst_size, 1); +for t = 1 : tst_size + xt = tst_data(t, :); + + sum = 0; + for i = 1 : N + ai = alphas(i); + yi = Y(i); + xi = X(i, :); + sum = sum + ai * yi * dot(xi, xt) ^ d; + end + sum = sum + b; + + scores(t) = sign(sum); + +end + + +%******************************** \ No newline at end of file diff --git a/assignments/hwk04/prob1.png b/assignments/hwk04/prob1.png new file mode 100644 index 0000000000000000000000000000000000000000..bebc5ba6ec378600684753d61915320d4ad54a82 GIT binary patch literal 37787 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 literal 0 HcmV?d00001