| #------------------------------------------------------------- |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| #------------------------------------------------------------- |
| |
| O = read($1, data_type = "frame", format = "csv") |
| |
| #Create feature matrix to learn parameters (45 samples per class) |
| X = as.matrix(O[1:45, 2:ncol(O)-1]) #setosa |
| X = rbind(X, as.matrix(O[51:95, 2:ncol(O)-1])) #versicolor |
| X = rbind(X, as.matrix(O[101:145, 2:ncol(O)-1])) #virginica |
| |
| y = matrix (1, rows=45, cols=1) |
| y = rbind(y, matrix(2, rows=45, cols=1)) |
| y = rbind(y, matrix(3, rows=45, cols=1)) |
| |
| [prior, means, covs, det] = gaussianClassifier(D=X, C=y, varSmoothing=$2); |
| |
| #Create feature matrix for prediction (5 samples per class) |
| Xp = as.matrix(O[46:50, 2:ncol(O)-1]) #setosa |
| Xp = rbind(Xp, as.matrix(O[96:100, 2:ncol(O)-1])) #versicolor |
| Xp = rbind(Xp, as.matrix(O[146:150, 2:ncol(O)-1])) #virginica |
| |
| #Set the target labels |
| yp = matrix(1, rows=5, cols=1) |
| yp = rbind(yp, matrix(2, rows=5, cols=1)) |
| yp = rbind(yp, matrix(3, rows=5, cols=1)) |
| |
| #Compute the prediction with the learned parameters |
| nSamples = nrow(Xp) |
| nClasses = max(yp) |
| nFeats = ncol(Xp) |
| results = matrix(0, rows=nSamples, cols=nClasses) |
| |
| for (class in 1:nClasses) |
| { |
| for (i in 1:nSamples) |
| { |
| intermediate = 0 |
| meanDiff = (Xp[i,] - means[class,]) |
| intermediate = -1/2 * log((2*pi)^nFeats * det[class,]) |
| intermediate = intermediate - 1/2 * (meanDiff %*% as.matrix(covs[class]) %*% t(meanDiff)) |
| intermediate = log(prior[class,]) + intermediate |
| results[i, class] = intermediate |
| } |
| } |
| |
| #Get the predicted labels from the result matrix |
| predicted = rowIndexMax(results) |
| |
| write(yp, $3); |
| write(predicted, $4); |