In this optional assignment we will experiment with random hyperplanes for classification. Your program will take a dataset as input and produce new features following the procedure below. The input is in the same format as for previous assignments. Input training data matrix X: n rows, m columns Input training labels Y Input test data X' (n' rows and m columns) For i = 0 to k do: a. Create random vector w where each wi is uniformly sampled between -1 and 1. Set w0 = 0. b. Project training data X (each row is datapoint xj) onto w. Let projection vector zi be Xw (here X has dimensions n by m and w is m by 1). Append (1+sign(zi))/2 as new column to the right end of Z. Remember that zi is a vector and so (1+sign(zi))/2 is 0 if the sign is -1 and 1 otherwise. c. Project test data X' (each row is datapoint xj) onto w. Let projection vector z'i be X'w. Append z'i as new column to the right end of Z'. 1. Run linear SVM on Z and predict on Z' 2. Do values of k=10, 100, 1000, and 10000. 2. How does the error compare to liblinear on original data X and X for each k? Submit a document containing the error of linear SVM (cross-validated C) on the six datasets on the course website. Do this on the original data representation and the new representation for all values of k. Submit your program that creates features and runs liblinear (in Python scikit) on the new training data and predicts on the new test data. Directories: /afs/cad/courses/ccs/f17/cs/675/001/. For example if your ucid is abc12 then copy your programs into /afs/cad/courses/ccs/f17/cs/675/001/abc12. Your completed program is due by 11:30am on Dec 13th 2017. Usman