1
我目前正在使用JAMA lib編寫邏輯迴歸的成本函數。但它不起作用。我不知道爲什麼。它應該返回一個值:0.6743使用JAMA lib進行Logistic迴歸的成本函數
public matrix cost() {
double[][] sigmoid = sigmoidFunction().getArray();
double[][] sigmoid2 = sigmoidFunction().getArray();
int m = sigmoidFunction().getRowdimension();
int n = sigmoidFunction().getColdimension();
for (int i = 0; i<m; i++) {
for (int j =0; j< n; j++) {
sigmoid[i][j] = Math.log(sigmoid[i][j]);
}
}
for (int i = 0; i<m; i++) {
for (int j =0; j< n; j++) {
sigmoid2[i][j] = Math.log(1-sigmoid2[i][j]);
}
}
matrix regularized = theta.transpose().times(theta);
double[][] reg = regularized.getArray();
for(int i = 0; i< regularized.getRowdimension(); i++) {
for (int j = 0; j< regularized.getColdimension(); j++) {
reg[i][j] = lambda/(2*m) * (reg[i][j]);
}
}
regularized = new matrix(reg);
matrix log_hx = new matrix(sigmoid);
matrix log1_hx = new matrix(sigmoid2);
matrix y_1 = Y;
y_1 = y_1.transpose().subtract(1);
Y = Y.uminus();
Y= Y.transpose();
//J = 1/m * (-y' * log(hx) - (1-y)' * log(1-hx))
matrix J = Y.times(log_hx).subtract(y_1.times(log1_hx));
double [][] cost = J.getArray();
for(int i = 0; i< J.getRowdimension(); i++) {
for (int j =0; j< J.getColdimension(); j++) {
cost[i][j]= 1/m * cost[i][j];
}
}
//J = new matrix(cost);
//J.addEquals(regularized);
return J;
}
}
當我返回如上所示的矩陣J時,它返回0.0。但是當我直接返回Y.times(log_hx).subtract(y_1.times(log1_hx))時,它神奇地返回值3.3715。當它不是由1/M相乘,並通過正則化
對於字體,糟糕的英語和糟糕的編碼感到抱歉。 – user3065339