You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by mb...@apache.org on 2017/10/23 04:36:37 UTC
systemml git commit: [SYSTEMML-1648] Making SVM scripts work with
MLContext
Repository: systemml
Updated Branches:
refs/heads/master a51f8e819 -> 596005a80
[SYSTEMML-1648] Making SVM scripts work with MLContext
Closes #687.
Project: http://git-wip-us.apache.org/repos/asf/systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/596005a8
Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/596005a8
Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/596005a8
Branch: refs/heads/master
Commit: 596005a80d0b39fef9b33b55145ffda043a4573d
Parents: a51f8e8
Author: j143 <j1...@protonmail.com>
Authored: Sun Oct 22 21:35:08 2017 -0700
Committer: Matthias Boehm <mb...@gmail.com>
Committed: Sun Oct 22 21:35:08 2017 -0700
----------------------------------------------------------------------
scripts/algorithms/l2-svm-predict.dml | 82 ++++++-------
scripts/algorithms/l2-svm.dml | 118 +++++++++---------
scripts/algorithms/m-svm-predict.dml | 45 +++----
scripts/algorithms/m-svm.dml | 186 ++++++++++++++++-------------
4 files changed, 222 insertions(+), 209 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/systemml/blob/596005a8/scripts/algorithms/l2-svm-predict.dml
----------------------------------------------------------------------
diff --git a/scripts/algorithms/l2-svm-predict.dml b/scripts/algorithms/l2-svm-predict.dml
index 9052265..73e28b4 100644
--- a/scripts/algorithms/l2-svm-predict.dml
+++ b/scripts/algorithms/l2-svm-predict.dml
@@ -51,6 +51,7 @@ cmdLine_Y = ifdef($Y, " ")
cmdLine_confusion = ifdef($confusion, " ")
cmdLine_accuracy = ifdef($accuracy, " ")
cmdLine_scores = ifdef($scores, " ")
+cmdLine_scoring_only = ifdef($scoring_only, FALSE)
cmdLine_fmt = ifdef($fmt, "text")
X = read($X)
@@ -59,7 +60,7 @@ w = read($model)
dimensions = as.scalar(w[nrow(w),1])
if(dimensions != ncol(X))
- stop("Stopping due to invalid input: Model dimensions do not seem to match input data dimensions")
+ stop("Stopping due to invalid input: Model dimensions do not seem to match input data dimensions")
intercept = as.scalar(w[nrow(w)-1,1])
negative_label = as.scalar(w[nrow(w)-2,1])
@@ -68,56 +69,51 @@ w = w[1:(nrow(w)-4),]
b = 0.0
if(intercept == 1)
- b = as.scalar(w[nrow(w),1])
+ b = as.scalar(w[nrow(w),1])
scores = b + (X %*% w[1:ncol(X),])
if(cmdLine_scores != " ")
- write(scores, cmdLine_scores, format=cmdLine_fmt)
+ write(scores, cmdLine_scores, format=cmdLine_fmt)
-if(cmdLine_Y != " "){
- y = read(cmdLine_Y)
+if(!cmdLine_scoring_only){
+ Y = read(cmdLine_Y)
- pred = (scores >= 0)
- pred_labels = pred*positive_label + (1-pred)*negative_label
- num_correct = sum(pred_labels == y)
- acc = 100*num_correct/nrow(X)
+ pred = (scores >= 0)
+ pred_labels = pred*positive_label + (1-pred)*negative_label
+ num_correct = sum(pred_labels == Y)
+ acc = 100*num_correct/nrow(X)
- acc_str = "Accuracy (%): " + acc
- print(acc_str)
- if(cmdLine_accuracy != " ")
- write(acc_str, cmdLine_accuracy)
+ acc_str = "Accuracy (%): " + acc
+ print(acc_str)
+
+ if(cmdLine_accuracy != " ")
+ write(acc_str, cmdLine_accuracy)
- if(cmdLine_confusion != " "){
- pred = 2*pred - 1
- if(negative_label != -1 | positive_label != +1)
- y = 2/(positive_label - negative_label)*y - (negative_label + positive_label)/(positive_label - negative_label)
-
- pred_is_minus = (pred == -1)
- pred_is_plus = 1 - pred_is_minus
- y_is_minus = (y == -1)
- y_is_plus = 1 - y_is_minus
-
- check_min_y_minus = sum(pred_is_minus*y_is_minus)
- check_min_y_plus = sum(pred_is_minus*y_is_plus)
- check_max_y_minus = sum(pred_is_plus*y_is_minus)
- check_max_y_plus = sum(pred_is_plus*y_is_plus)
+ if(cmdLine_confusion != " "){
+
+ pred = 2*pred - 1
+
+ if(negative_label != -1 | positive_label != +1)
+ Y = 2/(positive_label - negative_label)*Y - (negative_label + positive_label)/(positive_label - negative_label)
+
+ pred_is_minus = (pred == -1)
+ pred_is_plus = 1 - pred_is_minus
+ y_is_minus = (Y == -1)
+ y_is_plus = 1 - y_is_minus
- #s = check_min_y_minus + "," + check_min_y_plus
- #s = append(s, check_max_y_minus + "," + check_max_y_plus)
- #s = append(s, "")
- #write(s, cmdLine_confusion)
+ check_min_y_minus = sum(pred_is_minus*y_is_minus)
+ check_min_y_plus = sum(pred_is_minus*y_is_plus)
+ check_max_y_minus = sum(pred_is_plus*y_is_minus)
+ check_max_y_plus = sum(pred_is_plus*y_is_plus)
- confusion_mat = matrix(0, rows=3, cols=3)
- confusion_mat[1,2] = negative_label
- confusion_mat[1,3] = positive_label
- confusion_mat[2,1] = negative_label
- confusion_mat[3,1] = positive_label
- confusion_mat[2,2] = check_min_y_minus
- confusion_mat[2,3] = check_max_y_minus
- confusion_mat[3,2] = check_min_y_plus
- confusion_mat[3,3] = check_max_y_plus
-
- write(confusion_mat, cmdLine_confusion, format="csv")
- }
+ confusion_mat = matrix(0, rows=2, cols=2)
+ confusion_mat[1,1] = check_min_y_minus
+ confusion_mat[1,2] = check_min_y_plus
+ confusion_mat[2,1] = check_max_y_minus
+ confusion_mat[2,2] = check_max_y_plus
+
+ write(confusion_mat, cmdLine_confusion, format="csv")
+ }
}
+
http://git-wip-us.apache.org/repos/asf/systemml/blob/596005a8/scripts/algorithms/l2-svm.dml
----------------------------------------------------------------------
diff --git a/scripts/algorithms/l2-svm.dml b/scripts/algorithms/l2-svm.dml
index d5c7e02..141ef82 100644
--- a/scripts/algorithms/l2-svm.dml
+++ b/scripts/algorithms/l2-svm.dml
@@ -61,7 +61,7 @@ X = read($X)
Y = read($Y)
if(nrow(X) < 2)
- stop("Stopping due to invalid inputs: Not possible to learn a binary class classifier without at least 2 rows")
+ stop("Stopping due to invalid inputs: Not possible to learn a binary class classifier without at least 2 rows")
check_min = min(Y)
check_max = max(Y)
@@ -69,46 +69,44 @@ num_min = sum(Y == check_min)
num_max = sum(Y == check_max)
if(check_min == check_max)
- stop("Stopping due to invalid inputs: Y seems to contain exactly one label")
+ stop("Stopping due to invalid inputs: Y seems to contain exactly one label")
if(num_min + num_max != nrow(Y))
- stop("Stopping due to invalid inputs: Y seems to contain more than 2 labels")
+ stop("Stopping due to invalid inputs: Y seems to contain more than 2 labels")
if(check_min != -1 | check_max != +1)
- Y = 2/(check_max - check_min)*Y - (check_min + check_max)/(check_max - check_min)
+ Y = 2/(check_max - check_min)*Y - (check_min + check_max)/(check_max - check_min)
positive_label = check_max
negative_label = check_min
-continue = 1
-
intercept = cmdLine_icpt
if(intercept != 0 & intercept != 1)
- stop("Stopping due to invalid argument: Currently supported intercept options are 0 and 1")
+ stop("Stopping due to invalid argument: Currently supported intercept options are 0 and 1")
epsilon = cmdLine_tol
if(epsilon < 0)
- stop("Stopping due to invalid argument: Tolerance (tol) must be non-negative")
+ stop("Stopping due to invalid argument: Tolerance (tol) must be non-negative")
lambda = cmdLine_reg
if(lambda < 0)
- stop("Stopping due to invalid argument: Regularization constant (reg) must be non-negative")
+ stop("Stopping due to invalid argument: Regularization constant (reg) must be non-negative")
maxiterations = cmdLine_maxiter
if(maxiterations < 1)
- stop("Stopping due to invalid argument: Maximum iterations should be a positive integer")
+ stop("Stopping due to invalid argument: Maximum iterations should be a positive integer")
num_samples = nrow(X)
dimensions = ncol(X)
if (intercept == 1) {
- ones = matrix(1, rows=num_samples, cols=1)
- X = cbind(X, ones);
+ ones = matrix(1, rows=num_samples, cols=1)
+ X = cbind(X, ones);
}
num_rows_in_w = dimensions
if(intercept == 1){
- num_rows_in_w = num_rows_in_w + 1
+ num_rows_in_w = num_rows_in_w + 1
}
w = matrix(0, rows=num_rows_in_w, cols=1)
@@ -118,54 +116,49 @@ s = g_old
Xw = matrix(0, rows=nrow(X), cols=1)
debug_str = "# Iter, Obj"
iter = 0
-while(continue == 1 & iter < maxiterations) {
- # minimizing primal obj along direction s
- step_sz = 0
- Xd = X %*% s
- wd = lambda * sum(w * s)
- dd = lambda * sum(s * s)
- continue1 = 1
- while(continue1 == 1){
- tmp_Xw = Xw + step_sz*Xd
- out = 1 - Y * (tmp_Xw)
- sv = (out > 0)
- out = out * sv
- g = wd + step_sz*dd - sum(out * Y * Xd)
- h = dd + sum(Xd * sv * Xd)
- step_sz = step_sz - g/h
- if (g*g/h < 0.0000000001){
- continue1 = 0
- }
- }
-
- #update weights
- w = w + step_sz*s
- Xw = Xw + step_sz*Xd
-
- out = 1 - Y * Xw
+continue = TRUE
+while(continue & iter < maxiterations) {
+ # minimizing primal obj along direction s
+ step_sz = 0
+ Xd = X %*% s
+ wd = lambda * sum(w * s)
+ dd = lambda * sum(s * s)
+
+ continue1 = TRUE
+ while(continue1){
+ tmp_Xw = Xw + step_sz*Xd
+ out = 1 - Y * (tmp_Xw)
sv = (out > 0)
- out = sv * out
- obj = 0.5 * sum(out * out) + lambda/2 * sum(w * w)
- g_new = t(X) %*% (out * Y) - lambda * w
-
- print("ITER " + iter + ": OBJ=" + obj)
- debug_str = append(debug_str, iter + "," + obj)
+ out = out * sv
+ g = wd + step_sz*dd - sum(out * Y * Xd)
+ h = dd + sum(Xd * sv * Xd)
+ step_sz = step_sz - g/h
+
+ continue1 = (gg/h >= 0.0000000001);
+ }
+
+ #update weights
+ w = w + step_sz*s
+ Xw = Xw + step_sz*Xd
- tmp = sum(s * g_old)
- if(step_sz*tmp < epsilon*obj){
- continue = 0
- }
-
- #non-linear CG step
- be = sum(g_new * g_new)/sum(g_old * g_old)
- s = be * s + g_new
- g_old = g_new
-
- if(sum(s^2) == 0){
- continue = 0
- }
-
- iter = iter + 1
+ out = 1 - Y * Xw
+ sv = (out > 0)
+ out = sv * out
+ obj = 0.5 * sum(out * out) + lambda/2 * sum(w * w)
+ g_new = t(X) %*% (out * Y) - lambda * w
+
+ print("ITER " + iter + ": OBJ=" + obj)
+ debug_str = append(debug_str, iter + "," + obj)
+
+ tmp = sum(s * g_old)
+ continue = (step_sz*tmp >= epsilon*obj & sum(s^2) != 0);
+
+ #non-linear CG step
+ be = sum(g_new * g_new)/sum(g_old * g_old)
+ s = be * s + g_new
+ g_old = g_new
+
+ iter = iter + 1
}
extra_model_params = matrix(0, rows=4, cols=1)
@@ -174,10 +167,13 @@ extra_model_params[2,1] = negative_label
extra_model_params[3,1] = intercept
extra_model_params[4,1] = dimensions
+weights = w
w = t(cbind(t(w), t(extra_model_params)))
write(w, $model, format=cmdLine_fmt)
+# write(extra_model_params, " ", format=cmdLine_fmt)
+# write(weights, " ", format=cmdLine_fmt)
logFile = $Log
if(logFile != " ") {
- write(debug_str, logFile)
-}
\ No newline at end of file
+ write(debug_str, logFile)
+}
http://git-wip-us.apache.org/repos/asf/systemml/blob/596005a8/scripts/algorithms/m-svm-predict.dml
----------------------------------------------------------------------
diff --git a/scripts/algorithms/m-svm-predict.dml b/scripts/algorithms/m-svm-predict.dml
index a959836..8ad8bf0 100644
--- a/scripts/algorithms/m-svm-predict.dml
+++ b/scripts/algorithms/m-svm-predict.dml
@@ -26,13 +26,14 @@
# accuracy (%) for the predictions
#
# Example Usage:
-# hadoop jar SystemML.jar -f m-svm-predict.dml -nvargs X=data Y=labels model=model scores=scores accuracy=accuracy confusion=confusion fmt="text"
+# hadoop jar SystemML.jar -f m-svm-predict.dml -nvargs X=data Y=labels scoring_only=FALSE model=model scores=scores accuracy=accuracy confusion=confusion fmt="text"
#
cmdLine_Y = ifdef($Y, " ")
cmdLine_confusion = ifdef($confusion, " ")
cmdLine_accuracy = ifdef($accuracy, " ")
cmdLine_scores = ifdef($scores, " ")
+cmdLine_scoring_only = ifdef($scoring_only, FALSE)
cmdLine_fmt = ifdef($fmt, "text")
X = read($X);
@@ -40,7 +41,7 @@ W = read($model);
dimensions = as.scalar(W[nrow(W),1])
if(dimensions != ncol(X))
- stop("Stopping due to invalid input: Model dimensions do not seem to match input data dimensions")
+ stop("Stopping due to invalid input: Model dimensions do not seem to match input data dimensions")
intercept = as.scalar(W[nrow(W)-1,1])
W = W[1:(nrow(W)-2),]
@@ -51,34 +52,34 @@ m=ncol(X);
b = matrix(0, rows=1, cols=num_classes)
if (intercept == 1)
- b = W[m+1,]
+ b = W[m+1,]
ones = matrix(1, rows=N, cols=1)
scores = X %*% W[1:m,] + ones %*% b;
if(cmdLine_scores != " ")
- write(scores, cmdLine_scores, format=cmdLine_fmt);
+ write(scores, cmdLine_scores, format=cmdLine_fmt);
-if(cmdLine_Y != " "){
- y = read(cmdLine_Y);
+if(!cmdLine_scoring_only){
+ Y = read(cmdLine_Y);
- if(min(y) < 1)
- stop("Stopping due to invalid argument: Label vector (Y) must be recoded")
+ if(min(Y) < 1)
+ stop("Stopping due to invalid argument: Label vector (Y) must be recoded")
- pred = rowIndexMax(scores);
- correct_percentage = sum((pred - y) == 0) / N * 100;
-
- acc_str = "Accuracy (%): " + correct_percentage
- print(acc_str)
- if(cmdLine_accuracy != " ")
- write(acc_str, cmdLine_accuracy)
+ pred = rowIndexMax(scores);
+ correct_percentage = sum((pred - Y) == 0) / N * 100;
+
+ acc_str = "Accuracy (%): " + correct_percentage
+ print(acc_str)
+ if(cmdLine_accuracy != " ")
+ write(acc_str, cmdLine_accuracy)
- num_classes_ground_truth = max(y)
- if(num_classes < num_classes_ground_truth)
- num_classes = num_classes_ground_truth
+ num_classes_ground_truth = max(Y)
+ if(num_classes < num_classes_ground_truth)
+ num_classes = num_classes_ground_truth
- if(cmdLine_confusion != " "){
- confusion_mat = table(y, pred, num_classes, num_classes)
- write(confusion_mat, cmdLine_confusion, format="csv")
- }
+ if(cmdLine_confusion != " "){
+ confusion_mat = table(Y, pred, num_classes, num_classes)
+ write(confusion_mat, cmdLine_confusion, format="csv")
+ }
}
http://git-wip-us.apache.org/repos/asf/systemml/blob/596005a8/scripts/algorithms/m-svm.dml
----------------------------------------------------------------------
diff --git a/scripts/algorithms/m-svm.dml b/scripts/algorithms/m-svm.dml
index 8d3d5f3..6c11811 100644
--- a/scripts/algorithms/m-svm.dml
+++ b/scripts/algorithms/m-svm.dml
@@ -26,6 +26,23 @@
# Assume SVM_HOME is set to the home of the dml script
# Assume input and output directories are on hdfs as INPUT_DIR and OUTPUT_DIR
# Assume epsilon = 0.001, lambda=1.0, max_iterations = 100
+#
+# INPUT PARAMETERS:
+# ---------------------------------------------------------------------------------------------
+# NAME TYPE DEFAULT MEANING
+# ---------------------------------------------------------------------------------------------
+# X String --- Location to read the matrix X of feature vectors
+# Y String --- Location to read response matrix Y
+# icpt Int 0 Intercept presence
+# 0 = no intercept
+# 1 = add intercept;
+# tol Double 0.001 Tolerance (epsilon);
+# reg Double 1.0 Regularization parameter
+# maxiter Int 100 Maximum number of conjugate gradient iterations
+# model String --- Location to write model
+# fmt String "text" The output format of the output, such as "text" or "csv"
+# Log String --- [OPTIONAL] Location to write the log file
+# ---------------------------------------------------------------------------------------------
#
# hadoop jar SystemML.jar -f $SVM_HOME/m-svm.dml -nvargs X=$INPUT_DIR/X Y=$INPUT_DIR/y icpt=intercept tol=.001 reg=1.0 maxiter=100 model=$OUTPUT_DIR/w Log=$OUTPUT_DIR/Log fmt="text"
#
@@ -41,141 +58,144 @@ print("icpt=" + cmdLine_icpt + " tol=" + cmdLine_tol + " reg=" + cmdLine_reg + "
X = read($X)
if(nrow(X) < 2)
- stop("Stopping due to invalid inputs: Not possible to learn a classifier without at least 2 rows")
+ stop("Stopping due to invalid inputs: Not possible to learn a classifier without at least 2 rows")
dimensions = ncol(X)
Y = read($Y)
if(nrow(X) != nrow(Y))
- stop("Stopping due to invalid argument: Numbers of rows in X and Y must match")
+ stop("Stopping due to invalid argument: Numbers of rows in X and Y must match")
intercept = cmdLine_icpt
if(intercept != 0 & intercept != 1)
- stop("Stopping due to invalid argument: Currently supported intercept options are 0 and 1")
+ stop("Stopping due to invalid argument: Currently supported intercept options are 0 and 1")
min_y = min(Y)
if(min_y < 1)
- stop("Stopping due to invalid argument: Label vector (Y) must be recoded")
+ stop("Stopping due to invalid argument: Label vector (Y) must be recoded")
+
num_classes = max(Y)
if(num_classes == 1)
- stop("Stopping due to invalid argument: Maximum label value is 1, need more than one class to learn a multi-class classifier")
+ stop("Stopping due to invalid argument: Maximum label value is 1, need more than one class to learn a multi-class classifier")
+
mod1 = Y %% 1
mod1_should_be_nrow = sum(abs(mod1 == 0))
if(mod1_should_be_nrow != nrow(Y))
- stop("Stopping due to invalid argument: Please ensure that Y contains (positive) integral labels")
+ stop("Stopping due to invalid argument: Please ensure that Y contains (positive) integral labels")
epsilon = cmdLine_tol
if(epsilon < 0)
- stop("Stopping due to invalid argument: Tolerance (tol) must be non-negative")
+ stop("Stopping due to invalid argument: Tolerance (tol) must be non-negative")
lambda = cmdLine_reg
if(lambda < 0)
- stop("Stopping due to invalid argument: Regularization constant (reg) must be non-negative")
+ stop("Stopping due to invalid argument: Regularization constant (reg) must be non-negative")
max_iterations = cmdLine_maxiter
if(max_iterations < 1)
- stop("Stopping due to invalid argument: Maximum iterations should be a positive integer")
+ stop("Stopping due to invalid argument: Maximum iterations should be a positive integer")
num_samples = nrow(X)
num_features = ncol(X)
if (intercept == 1) {
- ones = matrix(1, rows=num_samples, cols=1);
- X = cbind(X, ones);
+ ones = matrix(1, rows=num_samples, cols=1);
+ X = cbind(X, ones);
}
num_rows_in_w = num_features
if(intercept == 1){
- num_rows_in_w = num_rows_in_w + 1
+ num_rows_in_w = num_rows_in_w + 1
}
w = matrix(0, rows=num_rows_in_w, cols=num_classes)
debug_mat = matrix(-1, rows=max_iterations, cols=num_classes)
+
parfor(iter_class in 1:num_classes){
- Y_local = 2 * (Y == iter_class) - 1
- w_class = matrix(0, rows=num_features, cols=1)
- if (intercept == 1) {
- zero_matrix = matrix(0, rows=1, cols=1);
- w_class = t(cbind(t(w_class), zero_matrix));
- }
-
- g_old = t(X) %*% Y_local
- s = g_old
-
- Xw = matrix(0, rows=nrow(X), cols=1)
- iter = 0
- continue = 1
- while(continue == 1) {
- # minimizing primal obj along direction s
- step_sz = 0
- Xd = X %*% s
- wd = lambda * sum(w_class * s)
- dd = lambda * sum(s * s)
- continue1 = 1
- while(continue1 == 1){
- tmp_Xw = Xw + step_sz*Xd
- out = 1 - Y_local * (tmp_Xw)
- sv = (out > 0)
- out = out * sv
- g = wd + step_sz*dd - sum(out * Y_local * Xd)
- h = dd + sum(Xd * sv * Xd)
- step_sz = step_sz - g/h
- if (g*g/h < 0.0000000001){
- continue1 = 0
- }
- }
-
- #update weights
- w_class = w_class + step_sz*s
- Xw = Xw + step_sz*Xd
+ Y_local = 2 * (Y == iter_class) - 1
+ w_class = matrix(0, rows=num_features, cols=1)
+
+ if (intercept == 1) {
+ zero_matrix = matrix(0, rows=1, cols=1);
+ w_class = t(cbind(t(w_class), zero_matrix));
+ }
+
+ g_old = t(X) %*% Y_local
+ s = g_old
+
+ Xw = matrix(0, rows=nrow(X), cols=1)
+ iter = 0
+ continue = TRUE
+ while(continue & iter < maxiterations) {
+ # minimizing primal obj along direction s
+ step_sz = 0
+ Xd = X %*% s
+ wd = lambda * sum(w_class * s)
+ dd = lambda * sum(s * s)
+
+ continue1 = TRUE
+ while(continue1){
+ tmp_Xw = Xw + step_sz*Xd
+ out = 1 - Y_local * (tmp_Xw)
+ sv = (out > 0)
+ out = out * sv
+ g = wd + step_sz*dd - sum(out * Y_local * Xd)
+ h = dd + sum(Xd * sv * Xd)
+ step_sz = step_sz - g/h
+
+ continue1 = (g*g/h >= 0.0000000001)
+
+ }
+
+ #update weights
+ w_class = w_class + step_sz*s
+ Xw = Xw + step_sz*Xd
- out = 1 - Y_local * Xw
- sv = (out > 0)
- out = sv * out
- obj = 0.5 * sum(out * out) + lambda/2 * sum(w_class * w_class)
- g_new = t(X) %*% (out * Y_local) - lambda * w_class
+ out = 1 - Y_local * Xw
+ sv = (out > 0)
+ out = sv * out
+ obj = 0.5 * sum(out * out) + lambda/2 * sum(w_class * w_class)
+ g_new = t(X) %*% (out * Y_local) - lambda * w_class
- tmp = sum(s * g_old)
+ tmp = sum(s * g_old)
- train_acc = sum(Y_local*(X%*%w_class) >= 0)/num_samples*100
- print("For class " + iter_class + " iteration " + iter + " training accuracy: " + train_acc)
- debug_mat[iter+1,iter_class] = obj
+ train_acc = sum(Y_local*(X%*%w_class) >= 0)/num_samples*100
+ print("For class " + iter_class + " iteration " + iter + " training accuracy: " + train_acc)
+ debug_mat[iter+1,iter_class] = obj
- if((step_sz*tmp < epsilon*obj) | (iter >= max_iterations-1)){
- continue = 0
- }
-
- #non-linear CG step
- be = sum(g_new * g_new)/sum(g_old * g_old)
- s = be * s + g_new
- g_old = g_new
-
- if(sum(s^2) == 0){
- continue = 0
- }
-
- iter = iter + 1
- }
-
- w[,iter_class] = w_class
-}
+ continue = (step_sz*tmp >= epsilon*obj & sum(s^2) != 0);
+
+ #non-linear CG step
+ be = sum(g_new * g_new)/sum(g_old * g_old)
+ s = be * s + g_new
+ g_old = g_new
+
+ iter = iter + 1
+ }
+
+ w[,iter_class] = w_class
+} # parfor loop
extra_model_params = matrix(0, rows=2, cols=ncol(w))
extra_model_params[1, 1] = intercept
extra_model_params[2, 1] = dimensions
+weights = w
w = t(cbind(t(w), t(extra_model_params)))
write(w, $model, format=cmdLine_fmt)
+# write(extra_model_params, " ", format=cmdLine_fmt)
+# write(weights, " ", format=cmdLine_fmt)
debug_str = "# Class, Iter, Obj"
for(iter_class in 1:ncol(debug_mat)){
- for(iter in 1:nrow(debug_mat)){
- obj = as.scalar(debug_mat[iter, iter_class])
- if(obj != -1)
- debug_str = append(debug_str, iter_class + "," + iter + "," + obj)
- }
+ for(iter in 1:nrow(debug_mat)){
+ obj = as.scalar(debug_mat[iter, iter_class])
+ if(obj != -1)
+ debug_str = append(debug_str, iter_class + "," + iter + "," + obj)
+ }
}
+
logFile = $Log
-if(logFile != " ") {
- write(debug_str, logFile)
-}
\ No newline at end of file
+if(logFile != " ")
+ write(debug_str, logFile)
+