第一阶段-第9天-NumPy多变量回归

第一阶段-第9天-NumPy多变量回归
今日目标理解多变量回归与单变量的区别用NumPy实现多变量线性回归理解矩阵形式的梯度下降学习内容1. 多变量 vs 单变量单变量一个输入 → 一个输出y w * x b多变量多个输入 → 一个输出y w1*x1 w2*x2 ... wn*xn b2. 多变量房价预测假设房价由三个因素决定面积平方米楼层房龄年importnumpyasnp# 训练数据[面积, 楼层, 房龄] → 房价(万元)Xnp.array([[100,5,10],# 100平米, 5楼, 10年房龄[120,8,5],# 120平米, 8楼, 5年房龄[80,3,15],# 80平米, 3楼, 15年房龄[150,10,2],# 150平米, 10楼, 2年房龄[90,6,8],# 90平米, 6楼, 8年房龄])ynp.array([200,280,150,350,180])print(输入矩阵形状:,X.shape)# (5, 3) — 5个样本, 3个特征print(输出向量:,y)3. 矩阵形式y X w b其中X输入矩阵 (n_samples, n_features)w权重向量 (n_features,)b偏置标量矩阵乘法4. 用NumPy实现多变量梯度下降importnumpyasnp# 数据Xnp.array([[100,5,10],[120,8,5],[80,3,15],[150,10,2],[90,6,8],])ynp.array([200,280,150,350,180])n_samples,n_featuresX.shapeprint(f样本数:{n_samples}, 特征数:{n_features})# 初始化wnp.zeros(n_features)b0.0learning_rate0.00001# 多变量时需要更小的学习率epochs1000print(\n开始训练...)forepochinrange(epochs):# 前向计算predictionsX wb# 计算损失lossnp.mean((predictions-y)**2)# 计算梯度errorpredictions-y gradient_w(2/n_samples)*(X.T error)gradient_b(2/n_samples)*np.sum(error)# 更新参数ww-learning_rate*gradient_w bb-learning_rate*gradient_bifepoch%2000:print(f 轮次{epoch:4d}: 损失{loss:.2f})print(f\n训练完成!)print(f权重:{w})print(f偏置:{b:.2f})# 预测testnp.array([[110,7,6]])# 新房子predictedtest wbprint(f\n预测: 110平米/7楼/6年房龄 → 房价{predicted[0]:.1f}万元)5. 数据标准化多变量时不同特征的尺度差异很大面积100 vs 楼层5需要标准化# 计算均值和标准差X_meannp.mean(X,axis0)X_stdnp.std(X,axis0)print(均值:,X_mean)print(标准差:,X_std)# 标准化X_normalized(X-X_mean)/X_stdprint(\n标准化后的数据:)print(X_normalized)# 现在所有特征的均值接近0标准差接近1今日练习练习1实现标准化并重新训练importnumpyasnp Xnp.array([[100,5,10],[120,8,5],[80,3,15],[150,10,2],[90,6,8],])ynp.array([200,280,150,350,180])# 标准化meannp.mean(X,axis0)stdnp.std(X,axis0)X_norm(X-mean)/std# 训练wnp.zeros(X.shape[1])b0.0lr0.01forepochinrange(500):predX_norm wb lossnp.mean((pred-y)**2)errorpred-y grad_w(2/len(y))*(X_norm.T error)grad_b(2/len(y))*np.sum(error)w-lr*grad_w b-lr*grad_bprint(fw {w})print(fb {b:.2f})print(f最终损失 {loss:.2f})练习2理解矩阵乘法importnumpyasnp# X是(3, 2)w是(2,)结果是(3,)Xnp.array([[1,2],[3,4],[5,6]])wnp.array([10,20])resultX wprint(X w ,result)# 相当于:# [1*10 2*20, 3*10 4*20, 5*10 6*20]# [50, 110, 170]验收标准能解释多变量回归与单变量的区别能实现标准化的代码能运行多变量梯度下降能理解矩阵乘法的意义