很早之前就完成了,然後突然有個東西感覺沒搞懂,上來重新弄了弄。記錄一下
多元邏輯回歸:
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 ...