学习率 learning_rate(i_iter * m + i) 参数为啥这么大?
来源:6-7 scikit-learn中的随机梯度下降法
慕粉2056486049
2018-11-24
随机梯度下降法中的学习率 learning_rate(i_iter * m + i) 方法的参数为什么要传 “ i_iter * m + i ” 这么大的数字
4回答
-
liuyubobobo
2018-11-24
理解你的问题了:)
注意:我们所编写的sgd算法,其中n_iters的语义,和梯度下降法不同!在梯度下降法中,n_iters就是搜索多少次。而在我们的sgd中,n_iters是指:搜索多少“轮”!而每一轮搜索,需要进行m次。也就是总共进行了 m * n_iters 次搜索!这就是我们的sgd中两层循环的意思:
for i_iter in range(n_iters): # 进行n_iters轮搜索 # ... for i in range(m): # 没轮搜索进行m次 # 这是第 i_iter * m + i 次搜索!!! # ....
而,learning_rate的函数中,传入的参数t,在模拟退火中的意思是:当前是第多少次搜索。所以,要传入 i_iter * m + i :)
我们的sgd为什么设计成要进行n_iters“轮”搜索,每轮m次搜索?可以参考这个问答:https://coding.imooc.com/learn/questiondetail/87119.html
加油!:)
022018-11-25 -
慕粉2056486049
提问者
2018-11-24
line86改成: learning_rate(i_iter * i)
使用波士顿房价数据:
data = datasets.load_boston()
X = data.data
y = data.target
X = X[y<50]
y = y[y<50]
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)
standardScaler = StandardScaler()
standardScaler.fit(X_train)
X_train_standard = standardScaler.transform(X_train)
X_test_standard = standardScaler.transform(X_test)
reg = LineRegressor()
reg.fit_sgd(X_train_standard, y_train)
reg.r2_score(X_test_standard, y_test)
计算出来的 r2_score 是负数
00 -
liuyubobobo
2018-11-24
你是用什么数据怎么实验对比得到的这个结论?把你的代码配合简单的注释放上来我看一下?
022018-11-24 -
慕粉2056486049
提问者
2018-11-24
经过测试 对了了下 i_iter * m + i , i_iter * i de 效果 发现学习率必须传 i_iter * m + i , 但还是不明白 为啥 t1 需要这么大的数字
随机梯度下降法 得到的结果 也有很大的随机性, 可以增加i_iter 次数来提高准确性
00
相似问题
回答 3
回答 1