Numpy 多元线性回归的学习率太低
我正在尝试为scikit学习中的Numpy 多元线性回归的学习率太低,numpy,machine-learning,linear-regression,learning-rate,Numpy,Machine Learning,Linear Regression,Learning Rate,我正在尝试为scikit学习中的boston数据集构建一个多元线性回归模型 我使用随机梯度下降(SGD)来优化模型。似乎我必须使用非常小的学习率(0.000000001)来进行模型学习。如果我使用更大的学习率,模型将无法学习,并偏离NaN或inf 下面是我的问题: 使用这样小的学习率可以吗?或者我下面的代码有问题吗 验证数据集的丢失似乎减少了,增加了一段时间,然后又减少了。这种情况下,我的模型陷入过度拟合问题,但幸运地逃脱了由于SGD的不稳定性的力量相比,批梯度下降法 这是我的密码: 从skle
boston
数据集构建一个多元线性回归模型
我使用随机梯度下降(SGD)来优化模型。似乎我必须使用非常小的学习率(0.000000001)来进行模型学习。如果我使用更大的学习率,模型将无法学习,并偏离NaN或inf
下面是我的问题:
从sklearn导入数据集
将numpy作为np导入
将matplotlib.pyplot作为plt导入
def损失(x、y、w):
预测y=x@w
返回np.sqrt(np.mean(np.square((y-predict_y)))
def状态(w):
w=np.挤压(w)
打印(“w=[”,end=”“)
对于范围(14)内的i:
如果(i==13):
打印(w_[i],end=“]”)
其他:
打印(w_[i],end=“,”)
打印()
培训损失=损失(培训x、培训y、培训w)
验证损失=损失(验证x、验证y、w)
打印(“培训损失=”+str(培训损失))
打印(“验证丢失=“+str(验证丢失))
培训_预测_y=培训_x@w
验证\预测\ y=验证\ x@w
打印({:^40s}{:^40s})。格式(“培训”、“验证”)
打印({:^20s}{:^20s}{:^20s}{:^20s})。格式(“预测y”、“真实y”、“预测y”、“真实y”))
对于范围(10)内的i:
打印(“{:^20f}{:^20f}{:^20f}{:^20f}”)。格式(float(training_predict_y[i])、float(training_y[i])、float(validation_predict_y[i])、float(validation_y[i]))
打印()
def绘图(标题、数据):
标题(标题)
plt.绘图(范围(长度(数据)),数据)
plt.savefig(标题+“.png”,dpi=300)
plt.show()
np.random.seed(2020)#用于一致性
#资料
dataset=datasets.load_boston()
x=dataset.data
y=dataset.target
#重新格式化数据
x=np.连接((np.ones((x.shape[0],1)),x),轴=1)#x0=1인 열 추가
y轴=np。展开尺寸(y轴=1)
#将数据分为训练集和验证集
训练x=x[0:406,:]
培训y=y[0:406,:]
验证x=x[406:506,:]
验证_y=y_[406:506,:]
#初始化w
w=np.random.rand(x_uu.shape[1],1)
打印(“培训前…”)
现状(w)
#超参数
纪元=100000
lr=0.000000001
培训损失=[]
验证损失=[]
数据数量=训练形状[0]
对于范围内的历元(历元):
对于范围内的i(数据数量):
样本=训练x[i:i+1,:]
真y=训练y[i:i+1,:]
预测y=样本@w
#计算梯度
梯度=-(2/sample.shape[0])*sample.T@(真y-预测y)
#更新w
w=w-lr*梯度
培训损失=损失(培训x、培训y、培训w)
验证损失=损失(验证x、验证y、w)
培训损失。追加(培训损失)
验证损失。追加(验证损失)
打印(“培训后…”)
现状(w)
情节图(“培训损失-新加坡元”,培训损失)
图(“验证损失-新加坡元”,验证损失)
下面是验证数据集的损失曲线。
之所以学习率如此之低,是因为我没有规范化输入数据。如果要素的比例不同,则必须规范化数据。我规范化了数据,并且我可以以合理的学习率(0.001)学习模型