请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

学习率 learning_rate(i_iter * m + i) 参数为啥这么大?

随机梯度下降法中的学习率 learning_rate(i_iter * m + i) 方法的参数为什么要传 “ i_iter * m + i ” 这么大的数字

正在回答 回答被采纳积分+3

4回答

liuyubobobo 2018-11-24 18:53:09

理解你的问题了:)


注意:我们所编写的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


加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 慕粉2056486049 #1
    多谢 波波老师 
    彻底理解了, i_iter * m + i   其中i_iter 是从0 开始, 
    今天懵逼了,  认为i_iter 从1开始, 所以想不通    失误失误~
    回复 有任何疑惑可以回复我~ 2018-11-24 19:28:01
  • liuyubobobo 回复 提问者 慕粉2056486049 #2
    继续加油!:)
    回复 有任何疑惑可以回复我~ 2018-11-25 01:51:40
提问者 慕粉2056486049 2018-11-24 18:36:16

https://git.imooc.com/coding-169/coding-169/src/master/06-Gradient-Descent/07-SGD-in-scikit-learn/playML/LinearRegression.py   

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  是负数

0 回复 有任何疑惑可以回复我~
liuyubobobo 2018-11-24 14:49:15

你是用什么数据怎么实验对比得到的这个结论?把你的代码配合简单的注释放上来我看一下?

0 回复 有任何疑惑可以回复我~
  • 提问者 慕粉2056486049 #1
    from sklearn.linear_model import SGDRegressor
    from sklearn import datasets
    from sklearn.preprocessing import StandardScaler
    from sklearn.model_selection import train_test_split
    import numpy as np
    回复 有任何疑惑可以回复我~ 2018-11-24 18:30:04
  • 提问者 慕粉2056486049 #2
    代码贴进去没有没有格式了, 我截图下
    回复 有任何疑惑可以回复我~ 2018-11-24 18:31:11
提问者 慕粉2056486049 2018-11-24 11:07:19


经过测试 对了了下     i_iter * m + i  , i_iter  * i    de 效果  发现学习率必须传   i_iter * m + i  ,  但还是不明白 为啥 t1 需要这么大的数字

随机梯度下降法 得到的结果 也有很大的随机性,  可以增加i_iter 次数来提高准确性

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信