Data Structures, Algorithms, Deep Learning

I worked in a group of four to develop a program to detect craters on images of the surface of mars. The project consisted of two parts. The first part was to develop a neural network to recognize the craters on the Mars image and for us to become familiar with supervised learning. We were able to achieve 95.8% detection rate on this part. The second part of the project was to develop a Convolution Neural Network(CNN) to do the same task, along with a real time pyramid and scanning window program to detect craters on the image. With the CNN we were able to achieve detection rate of 86.7% but a validation accuracy of up to 99%, and test accuracies between 96% and 97%. The reason we determined the detection rate to be only 86.7% is because this is due to the amount of detail or noise that is visible to the sliding window with large size images. Another issue, was that the network had trouble differentiating small craters and surface features. My contributions included, processing images to create training, validation, and test data, figuring out hyper parameters, and implemented an image pyramid and scanning window program for object recognition.

In this assignment I implemented a 2-D tree. The keys of this tree were 2-dimensional points in the nodes structured in an alternating sequence starting with the x values. The 2-D tree is able to support efficient range search, nearest neighbor, and k-nearest neighbor search.

In this project, I created a set of programs to solve the 8-Puzzle problem. The 8-Puzzle problem is a puzzle played on 3x3 grid with 8 blocks numbered one through 8, and one blank square. When this program was completed, it was able to discover a series a steps that would allow for putting the blocks in order. The program is also able to tell apart solvable and unsolvable board.

The purpose of this project was to reaffirm the atomic nature of matter by tracking the motion of particles undergoing Brownian motion, fit the data to Einstein’s model, and estimate Avogadro’s number. I was provided with image data of polystyrene spheres (“beads”) suspended in water, undergoing Brownian motion. I then created a computer program that analyzed this data by first finding the beads, then figure out how much each bead moved from one frame to the other, and then using this data to fit it into Einstein's modal and estimating Avogadro's number.

In this project I created a computer program that computed the optimal sequence alignment of two DNA strings. To do this, I had to measure the similarity between two genetic sequences by their edit distance. This project focused on dynamic programming to reduce the number of computations necessary. After the edit distance program was created and tested, I then created a program to produce the optimal alignment.

The goal of this project was to create a statistical model from English text, and use the model to generate stylized pseudo-random text and decode noisy messages. This model was built using a dictionary that contained kgrams as keys, and a dictionary with the succeeding letter after the kgram, and how many times it occured. A kgram is group of characters of a certain size. By using the frequency of the number of times the kgram appeared in the text, and the number of times a certain character succeeded it, the probability of the next character being that character can be calculated. This data was then used to decode noisy("~") text by replacing the tilde with the most likely character.

The goal of this project was to implement two methods to find good solutions to the traveling salesperson problem. The goal of the traveling salesperson is to visit all locations (points) provided, while keeping the total distance traveled at a minimal. However, the methods used in this project does not guarantee the minimum distance traveled. One method was the nearest neighbor approach. This involved creating a tour, which is a series of points that have been visited. The next step is to read a point and add the closest point to it to the tour and so on. The other approach was the smallest increase approach. In this approach a point is read and added after a point in the tour where it results in the smallest possible tour length.

This was an extra credit assignment for my Linear Algebra course. It involved using rotational matrices to produce rotation of images. I then created an animation and speed feature for continuous rotation at different rates. The code can be found on my github.