def correctnessVerification(levelMatFileName, inputMatFileName, outputFileName): """Show the variation trend of distance between original output and output after dimention reduction, with the change of k. And write this trend in to file. """ levelMatFile = open(levelMatFileName,'r') inputMatFile = open(inputMatFileName,'r') outputFile = open(outputFileName,'w') levelMat = readLevelMat(levelMatFile) inputMat = readInputMat(inputMatFile) #origial output matrix outputMat = np.dot(levelMat, inputMat.T) U, Sigma, Vt = np.linalg.svd(levelMat) #change the threshold k_v = [] distance_v = [] for k in range(1,101,1): print k reducedDim = svd.getDim(Sigma, k/100.0) if reducedDim: U_r, Sigma_r, Vt_r = svd.dimReduce(U, Sigma, Vt, reducedDim) levelMat_reduce = np.dot(U_r, np.dot(np.diag(Sigma_r),Vt_r) ) outputMat_reduce = np.dot(levelMat_reduce, inputMat.T) else: print 'There is an error!\n' return distanceVector = np.sqrt(np.sum(np.square(outputMat_reduce-outputMat), axis=0)) distance = np.sum(distanceVector)/distanceVector.shape[0] outputFile.write('Distance vector: \n%s\n'%distanceVector) outputFile.write('Distance: %.8f\n\n'%distance) k_v.append(k) distance_v.append(distance) #visualize output data plt.plot(k_v, distance_v, 'r', linewidth=2) plt.axis([0,100,0,300]) plt.title('Distance between original and reduced output\nalong with change of k'); plt.xlabel('k/%');plt.ylabel('distance');plt.grid(True) plt.show()
def outputHistogram(levelMatFileName, inputMatFileName, k=0.99): """Plot output historgram of sublevel, comming from one original level. And compare differences between original and reduced mode. """ k_str = raw_input("Please enter value of k (0.0~1.0 or 'q'): ") if k_str == "q": pass else: k = float(k_str) levelMatFile = open(levelMatFileName, "r") inputMatFile = open(inputMatFileName, "r") levelMat = readLevelMat(levelMatFile) inputMat = readInputMat(inputMatFile) U, Sigma, Vt = np.linalg.svd(levelMat) # original U_org, Sigma_org, Vt_org = svd.dimReduce(U, Sigma, Vt, len(Sigma)) subLevelMat1_org = np.dot(np.diag(Sigma_org), Vt_org) subLevelMat2_org = U_org subLevelOutputMat1_org = np.dot(subLevelMat1_org, inputMat.T) subLevelOutputMat2_org = np.dot(subLevelMat2_org, subLevelOutputMat1_org) # reduced reducedDim = svd.getDim(Sigma, k) if reducedDim: U_r, Sigma_r, Vt_r = svd.dimReduce(U, Sigma, Vt, reducedDim) else: print "There is an error!\n" return subLevelMat1_r = np.dot(np.diag(Sigma_r), Vt_r) subLevelMat2_r = U_r subLevelOutputMat1_r = np.dot(subLevelMat1_r, inputMat.T) subLevelOutputMat2_r = np.dot(subLevelMat2_r, subLevelOutputMat1_r) # plot fig1 = plt.figure("Output histogram of sublevel 1") plt.subplot(2, 1, 1) plt.hist( subLevelOutputMat1_org.reshape((subLevelOutputMat1_org.shape[0] * subLevelOutputMat1_org.shape[1],)), 100, (-150, 150), ) plt.xlabel("output_value") plt.ylabel("amount") plt.title("Original dimention (%d)" % len(Sigma)) plt.xlim(-150, 150) plt.subplot(2, 1, 2) plt.hist( subLevelOutputMat1_r.reshape((subLevelOutputMat1_r.shape[0] * subLevelOutputMat1_r.shape[1],)), 100, (-150, 150) ) plt.xlabel("output_value") plt.ylabel("amount") plt.title("Reduced dimention (%d)" % reducedDim) plt.xlim(-150, 150) fig2 = plt.figure("Output histogram of sublevel 2") plt.subplot(2, 1, 1) plt.hist( subLevelOutputMat2_org.reshape((subLevelOutputMat2_org.shape[0] * subLevelOutputMat2_org.shape[1],)), 100, (-150, 150), ) plt.xlabel("output_value") plt.ylabel("amount") plt.title("Original dimention (%d)" % len(Sigma)) plt.xlim(-150, 150) plt.subplot(2, 1, 2) plt.hist( subLevelOutputMat2_r.reshape((subLevelOutputMat2_r.shape[0] * subLevelOutputMat2_r.shape[1],)), 100, (-150, 150) ) plt.xlabel("output_value") plt.ylabel("amount") plt.title("Reduced dimention (%d)" % reducedDim) plt.xlim(-150, 150) plt.show()