import numpy as np #bring in data from training file i = 0 x = [] #inputs x ty = [] #outputs ty f = open("regression.tra") for line in f.readlines(): #every other line in file is 8 input values, 7 output values if i%2 == 0: x.append(list(map(float, line.split()))) else: ty.append(list(map(float, line.split()))) i=i+1 print("TRAINING DATA") print("Length of training set: %d , %d " % (len(x), len(ty))) #print(i) #input("Press Enter to view input data...") #print('x:') #print(x) #input("Press Enter to view output data...") #print('ty:') #print(ty) #x-augmented, copy x add a column of all ones xa = np.append(x,np.ones([len(x),1]),1) print("Shape xa: " + str(np.shape(xa))) print("Shape ty: " + str(np.shape(ty))) Nin = 9 Nout = 7 #bring in data from TEST file i2 = 0 x2 = [] #inputs x ty_test = [] #outputs ty f2 = open("regression.tst") for line in f2.readlines(): #every other line in file is 8 input values, 7 output values if i2%2 == 0: x2.append(list(map(float, line.split()))) else: ty_test.append(list(map(float, line.split()))) i2=i2+1 print("\nTEST DATA") print("Length of test set: %d , %d " % (len(x2), len(ty_test))) #print(i) #input("Press Enter to view input data...") #print('x2:') #print(x2) #input("Press Enter to view output data...") #print('ty_test:') #print(ty_test) #x-augmented, copy x add a column of all ones xa_test = np.append(x2,np.ones([len(x2),1]),1) print("Shape xa_test: " + str(np.shape(xa_test))) print("Shape ty_test: " + str(np.shape(ty_test))) input("\nPress Enter to continue...") print("Calculating auto-correlation...") #auto-correlation xTx R = [[0.0 for j in range(Nin)] for i in range(Nin)] for xarow in xa: for i in range(Nin): for j in range(Nin): R[i][j] = R[i][j] + (xarow[i] * xarow[j]) print("Calculating cross-correlation...") #cross-correlation xTty C = [[0.0 for j in range(Nin)] for i in range(Nout)] for n in range(len(xa)): for i in range(Nout): for j in range(Nin): C[i][j] = C[i][j] + (ty[n][i] * xa[n][j]) #print("Shape R: " + str(np.shape(R)) + " Shape C: " + str(np.shape(C))) print("Normalizing correlations...") #normalize (1/Nv) for i in range(Nin): for j in range(Nin): R[i][j] = R[i][j]/(len(xa)) for i in range(Nout): for j in range(Nin): C[i][j] = C[i][j]/(len(ty)) meanseed = 0.0 stddevseed = 0.5 ##set up W w0 = [[0.0 for j in range(Nin-1)] for i in range(Nout)] W = [[0.0 for j in range(Nin)] for i in range(Nout)] for i in range(Nout): for j in range(Nin-1): #assign random weight for initial value w0[i][j] = np.random.normal(meanseed,stddevseed) #0.1 W[i][j] = w0[i][j] W[i][Nin-1] = np.random.normal(meanseed,stddevseed) #0.1 #conjugate gradient subroutine (this could be called as a function) #input("Press enter to calculate weights...") print("Calculating weights...") for i in range(Nout): #loop around CGrad in sample passiter = 0 XD = 1.0 #copying matrix parts needed w = W[i] r = R c = C[i] Nu = Nin while passiter < 2: #2 passes p = [0.0 for j in range(Nu)] g = [0.0 for j in range(Nu)] for j in range(Nu): #equivalent to "iter" loop in sample code (again, check loop values) for k in range(Nu): #equiv to l loop in sample tempg = 0.0 for m in range(Nu): tempg = tempg + w[m]*r[m][k] g[k] = -2.0*c[k] + 2.0*tempg XN = 0.0 for k in range(Nu): XN = XN + g[k] * g[k] B1 = XN / XD XD = XN for k in range(Nu): p[k] = -g[k] + B1*p[k] ##if j == 1 and k < 2: ## print("k: %d, p[k]: %f, g[k]: %f" % (k,p[k],g[k])) Den = 0.0 Num = Den for k in range(Nu): #numerator of B2 Num = Num + p[k] * g[k] / -2.0 #outputting part of loop for test values ##if j == 1 and k < 2: ## print("k: %d, p[k]: %f, g[k]: %f" % (k,p[k],g[k])) #denominator of B2 for m in range(Nu): Den = Den + p[m] * p[k] * r[m][k] ##if j==1 and k < 2: ## print("j: " + str(j) + ", k: " + str(k) + ", Num: " + str(Num) + ", Den: " + str(Den)) B2 = Num / Den #update weights for k in range(Nu): w[k] = w[k] + B2 * p[k] passiter += 1 #after the two passes, store back in W[i] before next i W[i] = w Error = [0.0 for i in range(Nout)] MSE = 0.0 #input("Press enter to calculate error...") print('\nCalculating Training MSE...') #calculate mean squared error for N in range(len(xa)): for i in range(Nout): y = 0.0 for j in range(Nin): y += xa[N][j]*W[i][j] Error[i] += (ty[N][i]-y)*(ty[N][i]-y) for i in range(Nout): MSE += Error[i]/(len(ty)+1) print('Error at node %d: %f' % (i+1, Error[i]/(len(ty)+1))) print('Total M.S. Error [TRAIN]: %f' % MSE) print('\nCalculating Testing MSE...') #calculate mean squared error for test file Error = [0.0 for i in range(Nout)] MSE = 0.0 for N in range(len(xa_test)): for i in range(Nout): y_test = 0.0 for j in range(Nin): y_test += xa_test[N][j]*W[i][j] #if(i==0 and j==0 and N==0): # print("\nN: %d, xa_test[%d][%d]: %f; W[%d][%d]: %f, y= %f" % (N+1,N,j,xa_test[N][j],i,j,W[i][j],y_test)); Error[i] += (ty_test[N][i]-y_test)*(ty_test[N][i]-y_test) for i in range(Nout): MSE += Error[i]/(len(ty_test)+1) print('Error at node %d: %f' % (i+1, Error[i]/(len(ty_test)+1))) print('Total M.S. Error [TEST]: %f' % MSE) print('\n')