trainy = y[:int(n_sample * 0.6)] validX = X[int(n_sample * 0.6):int(n_sample * 0.8)] validy = y[int(n_sample * 0.6):int(n_sample * 0.8)] testX = X[int(n_sample * 0.8):] testy = y[int(n_sample * 0.8):] # expand feature (特征工程) mu, std, trainX = utils.expand_feature1(trainX) _, _, validX = utils.expand_feature1(validX, mu, std) _, _, testX = utils.expand_feature1(testX, mu, std) #%% 任务1:实现 LinearRegression 的 get_grad 方法,向量化梯度的计算。 # 梯度检验。如果输出值较大,请检查梯度的计算过程。 model = LinearRegression(n_feature, lr) print('梯度数值计算结果与实际值的 Error Sum of Squares(SSE): {0}'.format( model.check_grad(trainX, trainy))) #%% 训练模型 # 创建模型对象 model = LinearRegression(n_feature, lr) # 用梯度下降方法进行迭代优化 for i in range(n_iter): model.update(trainX, trainy) model.evaluate(validX, validy) # 通过观察 learning curve 检视学习过程 utils.plot_loss(model, n_iter) #%% 查看训练结果 n = 100
trainX = X[:int(n_sample * 0.8)] trainy = y[:int(n_sample * 0.8)] testX = X[int(n_sample * 0.8):] testy = y[int(n_sample * 0.8):] #%% 特征归一化 (feature normalization) mu = trainX.mean() std = trainX.std() trainX = (trainX - mu) / std testX = (testX - mu) / std #%% 任务3. 实现 LinearRegression 的 get_grad 方法 # 通过观察下列语句的输出值检查梯度实现的正误 # 梯度检查的输出值应非常小,如果不是请检查梯度计算的代码 print(model.check_grad(trainX, trainy)) #%% 任务4. 实现 LinearRegression 的 update 方法 #%% 实现了 update 方法(梯度下降算法)后再进行以下迭代 model = LinearRegression(lr) for i in range(n_iter): model.update(trainX, trainy) model.evaluate(testX, testy) # 分别解除下列语句的注释,从不同角度观察模型的优化过程 utils.plot_loss(model, n_iter) #utils.show_data_model(model, trainX, trainy) #utils.show_contour_model(model, trainX, trainy) #%% 任务5. 输入你手的尺寸,观察模型预测的身高值 best_idx = np.argmin(model.testloss)