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 sign(zi) as new column to the right end of Z. Remember that zi is a vector and so sign(zi) is the sign of each value in zi. 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. How does the error compare to liblinear on original data X and X? 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/f16/cs/675/001/. For example if your ucid is abc12 then copy your programs into /afs/cad/courses/ccs/f16/cs/675/001/abc12. Your completed program is due Monday 10am on Dec 19th 2016. Usman