勾配降下アルゴリズムのC ++リアライズ

いいえデータ標準化されたバージョンでは、効率が非常に高いではない、と訓練の結果は良いものではありません。

#include <入出力ストリーム> 
の#define MAXN 105 
の#include <cstdioを> 
使用して名前空間std。
N INT、M。// N个特征、M个数据
ダブルシータ[MAXN]; //参数集
二重TEMP [MAXN]。
ダブルデータ[MAXN] [MAXN]; //数据集
二重Y [MAXN]; //结果集
二重HX [MAXN]。
constのダブルEPS = 0.37; 
二重アルファ= 0.00001。
ダブルH(INT X)//计算假设函数
{ 
    二重のRES = 0。
    (I 0 = int型、iが<= N; I ++)のために
    { 
        RES + =シータ[I] *データ[X] [I]; 
    } 
    RESを返します。
} 
ダブルJ_theta()//计算コスト関数
{ 
    ダブルRES = 0。
    (I 1 = int型; I <= M; ++ i)について 
    {
        RES + =(H(I)-Y [I])*(H(I)-Y [I])。
    } 
    RES = RES /(2 * M)。
    解像度を返します。
} 
二重F(INT X)//求偏导数
{ 
    二重のRES = 0。
    以下のために(INT I = 1; I <= M; ++ I)
    { 
        RES + = HX [I] *データ[I] [X]。
    } 
    RES / = M。
    解像度を返します。
} 
ボイドGradient_Descent()//梯度下降
{ 
    (INT I = 1; I <= M; ++ i)について
    { 
        DATA [i]が[0] = 1; 
    } 
    ため(; iは= N <; I = 0 int型++ I)
    { 
        シータ[I] = 1; //初始化
    } 
    ダブル今、NEX。
    実行
    { 
        今= J_theta()。
        (; I <= M; ++ iは1 = INT)のために
        { 
            HX [I] = hの(I)-Y [I]。
        } 
        (i = 0、int型++ I; iが<= N)のために
        { 
            TEMP [I] =シータ[I] -アルファ* F(I)。
        } 
        (; iが<= N I ++ i = 0 INT)のために
        { 
            シータ[I] = TEMP [i]は、
        } 
        NEX = J_theta()。
        // coutの<< J_theta()<<てendl; 
    }一方(J_theta()> EPS)。
} 
int型のmain()
{ 
    freopenは( "in.txt"、 "R"、STDIN)。
    CIN >> N >> M。
    (; I <= M + I iは1 = INT)のために
    { 
        ため(INT J = 1; J <= N; ++ j)は
        { 
            CIN >>データ[I] [J]。
        } 
    }
    (I 1 = int型; I <= M; ++ i)について
    { 
        CIN >> Y [i]は、
    } 
    Gradient_Descent()。
    (; iが<= N I ++ i = 0の整数)のための
    { 
        のprintf( "%2LFする\ n"、シータ[I])。
    }
    0を返します。
}

 

おすすめ

転載: www.cnblogs.com/zyf3855923/p/11460864.html
おすすめ