いいえデータ標準化されたバージョンでは、効率が非常に高いではない、と訓練の結果は良いものではありません。
#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を返します。 }