# # Author: STEPHEN OCONNELL # # CONVERSION OF PETER HARRINGTON'S HOMEWORK cs229-public_hw1_1 SOLUTION FROM MATLAB TO R ############################################################################### # TODO: Add comment #%Newton's method for maximizing likihood of logistic regression # CLEANUP R BEFORE STARTING rm(list = ls()) # SET WORKING DIRECTORY setwd('/Users/oconste/Downloads/MachineLearning/materials/aimlcs229/q2') getwd() # SIGMOID FUNCTION sigmoid <- function(z) { a <-1.0 /(1.0 + exp(-z)); return(a) } ## READ DATA INTO DATAFRAME AND EXPLICLITLY CONVERT TO A MATRIX q1x <- read.table('q1x.dat', header=FALSE) q1x <- matrix(c(q1x$V1, q1x$V2), ncol=2, nrow=length(q1x$V1), byrow=FALSE) q1y <- read.table('q1y.dat', header=FALSE) q1y <- matrix(c(q1y$V1), ncol=1, nrow=length(q1x[,1]), byrow=FALSE) # SET UP SAMPLES x <- matrix(1,length(q1x[,1]),3) x[,2:3] = q1x # SETUP THETA theta = matrix(0,3) # SPIN for(j in 1:20) { # multi-dimensional Newton-Raphson method h <- sigmoid(x %*% theta) gradl <- t(x) %*% as.matrix(q1y - h) hessian <- matrix(-1 * ( t(x)^2 %*% (h*(1-h)) )) theta <- theta - gradl / hessian } # FITTED LINE dbx=seq(0,8, by=.1 ) dby=(-theta[1]-theta[2]*dbx)/theta[3]; # CONVERT TO DATAFRAMES TO EASE PLOTTING data <- data.frame(x=q1x[,1], y=q1x[,2], ans=q1y) names(data) <- c("x","y","ans") data$ans <- as.factor(data$ans) # CREATE PLOT plot(data$x[data$ans == '1'], data$y[data$ans == '1'], pch='O', col=c("red"), ylab="", xlab="") points(data$x[data$ans == '0'], data$y[data$ans == '0'], pch='+', col=c("blue")) lines(dbx, dby, type='l') title(main="CS229 HW1") #dev.off()