梯度下降及logistic回歸

2021-07-10 23:35:38 字數 2448 閱讀 4120

批量梯度下降是一種對引數的update進行累積,然後批量更新的一種方式。用於在已知整個訓練集時的一種訓練方式,但對於大規模資料並不合適。

隨機梯度下降是一種對引數隨著樣本訓練,乙個乙個的及時update的方式。常用於大規模訓練集,當往往容易收斂到區域性最優解。

logistics是離散的,必須是分類變數,一般用於分類問題,比如身高高矮;

而線性回歸必須是連續性資料變數,比如告訴你一些身高與體重,得到身高與體重的關係。

這是一開始的程式,後來發現有誤,因為權重的更新應該是在所有樣本在這次的迭代之後.(英文太難理解了,看得一知半解)

#include #include int main()

,,,};//4組資料,每組資料有2個因素(第乙個為1)

double result[4]=;

double theta[3]=;//也就是要求的係數,因為影響的因素有兩個,所以係數有兩個

double loss,sum,error_sum,h;

int t,i,j,k;

loss=10;//loss是為了當精度已經符合要求時提前退出的操作,可省略

for (t=1;t<=100000&&loss>0.01;t++)//迭代1000次

error_sum=result[i]-h;

for (k=0;k<3;k++)

}loss=0;//接下來的部分是評估係數是否合格,如果迭代次數夠多肯定也沒問題

for (j=0;j<4;j++)

loss=loss+(sum-result[j])*(sum-result[j]);//這個差值的評估函式與最小二乘法是一致的}}

printf("%lf,%lf,%lf,%lf\n",theta[0],theta[1],theta[2],loss);

return 0;

}

後來修正權重的更新(寫到後面有點亂,有點亂..語言是硬傷)

#include #include int main()

,,,};//4組資料,每組資料有2個因素(第乙個為1)

double result[4]=;

double theta[2]=;//也就是要求的係數,因為影響的因素有兩個,所以係數有兩個

double loss,sum,h;

int t,i,j,k;

loss=10;//loss是為了當精度已經符合要求時提前退出的操作,可省略

for (t=1;t<=10000&&loss>0.01;t++)//迭代1000次

;//注意更新權重是在所有樣本求和之後進行梯度下降的

for (i=0;i<4;i++)//4組資料

for (k=0;k<2;k++)

}for (k=0;k<2;k++)

loss=0;//接下來的部分是評估係數是否合格,如果迭代次數夠多肯定也沒問題

for (j=0;j<4;j++)

loss=loss+(sum-result[j])*(sum-result[j]);//這個差值的評估函式與最小二乘法是一致的}}

printf("%lf,%lf,%lf\n",theta[0],theta[1],loss);

return 0;

}

**和線性回歸基本一樣,唯一的區別是增加了乙個sigmoid函式,把原來的h(x)變為1/1+e^(-hx) 然後求誤差,梯度下降改引數,同上

另外注意引入sigmoid函式,其實這個函式的目的就是將原來梯度下降求得的y值轉化為0~1區間的乙個值。

/* sigmoid函式是乙個良好的閾值函式,

連續,光滑

嚴格單調

關於(0,0.5)中心對稱

對閾值函式有乙個良好的近似

原函式:f(x) = 1/[1+e^(-x)]

其中,當你寫**的時候,如果f(x)不好寫,你可以寫成f(x)=ex/1+ex的形式,其中ex是pow(2.7182818228,x)的形式,即e的x次冪

*/#include #include double function(double x)

int main()

, ,,,

,,

};double result[6]=;

double theta[4]=;

int i,j,k;

double h,error,sum;

for (i=0;i<100000;i++)

;for (j=0;j<6;j++)

}for (k=0;k<4;k++)

theta[k]=theta[k]-cost[k]*0.01/4;//這裡的正負是與前面的加減法有關的

printf("%.4f %.4f %.4f %.4f\n",theta[0],theta[1],theta[2],theta[3]);

}return 0;

}

logistic回歸 梯度下降演算法

假設現在有一些資料點,我們利用一條直線對這些點進行擬合 該線稱為最佳擬合直線 這個擬合過程就稱作為回歸。我們希望接收所有的輸出,然後 出類別。在兩個類別的情況下,輸出0,1來代表,這種函式是單位階躍函式。sigmoid函式具有該性質 sigmoid函式公式是 si gmoi d z 11 exp z...

logistic回歸的梯度計算

在logistic回歸中,假設我們的訓練集由m個已標記樣本組成 且啟用函式為sigmoid函式 x fracx 損失函式為 j theta frac sum limits m cdot log 1 cdot log 1 則損失函式對引數的梯度的第j個分量為 begin j theta frac su...

線性回歸 梯度下降

線性回歸演算法屬於監督學習的一種,主要用於模型為連續函式的數值 過程總得來說就是初步建模後,通過訓練集合確定模型引數,得到最終 函式,此時輸入自變數即可得到 值。1 初步建模。確定假設函式 h x 最終 用 2 建立價值函式 j 也叫目標函式 損失函式等,求引數 用 3 求引數 對價值函式求偏導 即...