# Linear Regression

Given a dataset of 40 items attached (Data_assignment1.csv bellow), where the left column is the independent variable (x) and the right column is the dependent variable (y). Question 1 (5 mark)Use the gradient descent method to fit a linear regression function (i.e., f(x)=?0+?1×1) to the data, where the learning rate is set to 0.01, and the number of iterations is 10,000. Here you need to report the estimated function (i.e., ?0 and ?1 ) and its corresponding mean squared error on the dataset.Question 2 (5 marks)Use the gradient descent method to fit a 3-order polynomial regression function (i.e., f(x)=?0+?1x+?2×2+?3×3) to the data. You are free to choose learning rate and the number of iterations as long as it achieves a reasonable fit. Here you need to report the estimated function and its corresponding mean squared error, along with the learning rate and the number of iterations you used.Question 3 (15 marks)Let us say that you want to select a model based on the dataset for prediction of new data in future. Answer the two questions below.3.1 (10 marks) Which model (from linear to 5-order polynomial) is the fittest for the dataset? Here you need to give steps of your model selection procedure.3.2 (5 marks) What is your predicted regression function. Here you need to explain briefly how you estimate the function after the model is determined, and to report the estimated function and its corresponding mean squared error, along with the learning rate and the number of iterations you used.You may refer to the following Python code on dividing a dataset into folds for the k-folder cross validation.——————————————————————————–np.random.shuffle(data) # Shuffle all rowsfolds = np.array_split(data, k) # split the data into k foldsfor i in range(k): x_cv = folds[i][:, 0] # Set ith fold for testing y_cv = folds[i][:, 1] new_folds = np.row_stack(np.delete(folds, i, 0)) # Remove ith fold for training x_train = new_folds[:, 0] # Set the remaining folds for trainingy_train = new_folds[:, 1]