Andrew NG 的ML3 作業紀律

2021-09-20 03:14:51 字數 1745 閱讀 3044

很早之前就完成了,然後突然有個東西感覺沒搞懂,上來重新弄了弄。記錄一下

多元邏輯回歸:

lrcostfunction:

m = length(y); % number of training examples

j = 0;

grad = zeros(size(theta));

temp=[0;theta(2:end)]; % theta(1)不參與正則化

j= -1 * sum( y .* log( sigmoid(x*theta) ) + (1 - y ) .* log( (1 - sigmoid(x*theta)) ) ) / m + lambda/(2*m) * temp' * temp ;

grad = ( x' * (sigmoid(x*theta) - y ) )/ m + lambda/m * temp ;

梯度公式 跟 損失函式的表示式 ,完全沒變。

onevsall:

options = optimset('gradobj', 'on', 'maxiter', 50);

for c = 1:num_labels

initial_theta = zeros(n + 1, 1); % 401 * 10(10是num_labels數目) 即特徵值的數量

%上面的initial_theta 放不放進for 迴圈沒啥區別

[theta]= fmincg (@(t)(lrcostfunction(t, x, (y == c), lambda)), initial_theta, options);

all_theta(c,:) = theta';% theta得出之後 是401*1 把它弄成行 給all_theta的一排

end

fmincg是資料夾中的另乙個函式,比fminunc快,

theta 只是某乙個num_labels的特徵引數,所以用用all_theta把所有theta整合成所有的引數集合,變成乙個10*401的向量。

predictonevsall:

[a,p] = max(sigmoid( x * all_theta'),,2) ; % a 為10個特徵值中最大值,p為**
[a,p]=max (a,,2) 是返回每一列的最大值 ,並且返回他在第幾行(p)

所以p就代表了他在第幾行,一共有10行,最大的行代表著**值。

神經網路:

predict:

z1 = [ones(m,1) x];

z2 = theta1 * z1' ;

z2 = [ones(1,m);sigmoid(z2)];

z3 = theta2 *z2 ;

[a,p] = max(sigmoid(z3),,1) ;

theta1 是25401

theta2 是1026

z1 是 5000*401

所以z2 是25 * 5000

25要作為下一層輸入 ,5000是代表5000個**目標

因而 z2要加一行,並且加個sigmoid, 所以是 [ones(1,m);sigmoid(z2)];

所以z2 更新為 26*5000

z3 就得到了 10 *5000 10代表10個特徵值,每一列 第幾行誰大說明那一列的值**為第幾

所以用的是 max(a,[ ],1) 1代表列, p代表最大的在第幾行

ML筆記(3)線性回歸的正則化

先舉乙個多項式回歸的例子,當我們使用多項式回歸的時候,如果沒有對多項式的係數進行限制,擬合的模型過擬合的概率極高,所以我們需要通過一些方法限制多項式係數的變化。以下的正則化改進從損失函式,減少過擬合概率。簡單來說,正則化是一種為了減小測試誤差的行為 有時候會增加訓練誤差 我們在構造機器學習模型時,最...

GDKOI2014 小紀的作業題

會超時!預處理逆元 但是除以乙個數再 需要用到逆元啊,啊啊啊啊啊 但是預處理每個數對於1000000007的逆元不就好了嗎!呵呵,成功了,ac。include include include include include define fo i,a,b for i a i b i define l...

我的學生作業3

問題與 all rights rwserved.完成日期 2014年11月1日 版本號 v1.0 編乙個程式 輸入三個數a,b,c,根據數值判斷能否組成三角形 若能組成三角形,判斷三角形的性質 直角 等腰 等邊 任意三角形並輸出 class program else if math.pow a,2 ...