【机器学习】2018暑假学习小组0714

昨天简单的学了一下梯度下降法,今天上手啦hhh
用c++的日子嘤嘤嘤
不过好在今天算出来了,其实真的不难啊,但是需要改进的总有很多。
包括今天很有激情的说:写出来才能吃饭。
写代码时间就过的贼快……


今天,这是一个简单的函数最小值问题
要搞清楚暑假集训目标线性回归,这个一定要会。


函数最小值问题

问题:

给出函数y=x^4+3x^3+2,求区间[0,5]的最小值(question by Core)

其实按照高数的知识,我的解答过程漏洞很多,甚至是不正确的。但是我想表达出今天最近学习到的梯度下降的方法,所以就结合外挂的图像来做了,不严谨的部分请多多包容!欢迎交流!

正确应该是函数连续可导的情况下,先求极小值,再求端点值。最后比较。

看图,本题可以说是在一个区间内梯度下降求极值了!(偷懒)
【机器学习】2018暑假学习小组0714_第1张图片

Talk is cheap,show me the code!

#include 
#include 

using namespace std;
int main() {
    double x = 1.2;
    double y = x * x*x*x - 3 * (x*x*x) + 2;
    double y0 = 0;
    double y1 = 4 * x*x*x - 9 * x*x;
    double alpha = 0.01;
    int i = 0;
    while (i<1000) {

        y0 = y;
        y1 = 4 * x*x*x - 9 * x*x;
        x = x - alpha * y1;
        y = x * x*x*x - 3 * (x*x*x) + 2;

        cout << "[" << i << "]" << y << endl;
        if (abs(y - y0) < 0.0000001) {

            break;
        }
        i = i++;

    }
    cout << i << endl;
    cout << x << endl;
    cout << y << endl;
    system("pause");
    return 0;
}

这个原理昨天已经说的很清楚了,用计算机算十分简单,但是小白梨小菜鸡很愚笨,算了一下午。到底是哪里出问题了呢?

一、参数调节

最开始我做了一件很错误的事,那就是把x的初始值设定为0。
所以我的导数导一下也是0……就很奔溃为啥不循环。
还有alpha的取值太难把控了!

二、收敛性问题

为什么我的控制台什么都没有显示?
(把每一个变化的x打印出来)
为什么我有这么大的数?
(其实主要是自己参数没调好)
为什么我还是不循环?
(继续换参数)
为什么我还是得不到正确结果?
(可能是surface带不动吧……)

停止否定我的surface后,Core教我用了“收敛性”。

就在代码处,开始我一直设定的while(true),所以结果很难撞上正确的。
现在可以清晰明朗的显示啦:
【机器学习】2018暑假学习小组0714_第2张图片

三、绝对值

我开始不会用绝对值的那个函数,所以直接用了小于,以为结果一样。但是我忘了负数也是小于的!

四、升级代码
陈睿 16:32:23
#include 
#include 

using namespace std;
int main() {
    double x = 1.2;
    double y = x*x*x*x - 3 * (x*x*x) + 2;
    double y0 = 0;
    double y1 = 4 * x*x*x - 9 * x*x;
    double alpha = 1.2;
    int i = 0;
    while (i<1000) {

        y0 = y;
        x = x - alpha * y1;
        y = x * x*x*x - 3 * (x*x*x) + 2;
        cout <<"["<"]"<< y << endl;
        if (y - y0 < 0.0000001) {

            break;
        }
        i = i++;

    }
    cout << i << endl;
    cout << x << endl;
    cout << y << endl;
    system("pause");
    return 0;
}

晚上我将会写到梯度下降法的比较,现在可以有饭吃了,嘿嘿!

你可能感兴趣的:(2018summer)