Coding and Engineering Projects
As you will note from the attached resume, I've developed multiple applications, including a Quantitative Trading Strategy with Sentiment Analysis, a Texas Hold-em Xcode App, an algorithm to find a perfect putting line in golf, and a CO2 race car with Autodesk Fusion, which have refined my understanding of programming concepts. At Dartmouth, I've leveraged my course work in Object Oriented Programming, and Software Design and Implementation to develop a Parts of Speech Predictor model and a Tiny Search Engine, respectively. Please let me know if you have any questions about any of my projects, or would like to access my code on my private GitHub portfolio at cameronkeithgolf@gmail.com.
1/16 GT2RS RC Car
I designed, built, and programmed a 1/16 Porsche 911 GT2RS RC car and controller from scratch in about a month in my CS 29: Digital Fabrication Class. I used Autodesk
Fusion 360 to design every component and integrate electronics into the design. I 3D printed all of the parts except for the electronics and the laser-cut acrylic backplate for the controller. I implemented a direct rear wheel drive with two 12v motors, and designed a mounting system to house them securely. For steering, I developed a linear actuator to drive responsive steering with a servo. The wheels were a two piece design. I printed the rim out of rigid PLA filament and the tires out of TPU 95A rubber filament. This allowed the car to drive on slick surfaces and accelerate quicker. To control the car, I programmed a pair of Arduino Pro Minis with 1000m NRF24 transceivers. A 12v battery supplied power to the car, and I used a step down controller to decrease the voltage to 5v for the Arduino, servo, and speed controller. I had a great experience building a RC Car from scratch, and I was glad to step outside my comfort zone of developing software and hone my hardware engineering skills as well. Final Presentation
Do Outliers Matter?
Training sample quality impacts on deep learning model performances. While studies in the literature explored the association of outlier samples to model performance in modalities like text or images in the NLP and computer vision domains, it is relatively underexplored in the domain of video classifications. Researchers focused on anomaly detection or theoretical bounding of outliers towards video classifications. However, explicit, systematic empirical studies of the impacts of these outliers on video classification modeling are still yet to be explored. Therefore, to bridge this gap, in this work, we systematically analyze the impacts of outliers, specifically in-distribution outliers, on video classification performances and show that reducing the outliers from training can improve video classification performances. Website
Video Action Classifier
I built Binary and Multi Class models to classify video actions in my CS 74 class, Machine Learning. First, I leveraged the precomputed features for the project to run a time series and SVM model over 20 frames for each video and train the classifiers. Then, I designed a bayesian hyper-parameter optimizer to tune the model. I achieved the highest test accuracy, 100% and 96.6% in my class, and outperformed 200 CS students in both competitions. I also beat the next best scores in each competition by 10%. Binary Competition Multi-Class Competition Link
Neural Network Digit Classifier
I built a neural network from scratch to classify handwritten digits in my CS 70 class, Foundations of Applied Computer Science and Machine Learning. First, I implemented forward computation and backward propagation for linear and non-linear ReLU layers as well as dropout. I also used gradient descent with Least squares to train the model. Finally, I designed a bayesian hyper-parameter optimizer to tune the model. I also achieved the highest accuracy, 92.5% in my class and won a citation among 150 CS majors at Dartmouth.
Poisson Image Blending
I implemented Poisson Image Blending in my CS 70 class, Foundations of Applied Computer Science and Machine Learning. This assignment explores gradient-domain image processing, a simple technique with a broad set of applications including blending, tone-mapping, and non-photorealistic rendering. The primary goal of this assignment is to seamlessly blend an object or texture from a source image into a target image. The simplest method would be to just copy and paste the pixel values from one image directly into the other. Unfortunately, this will create very noticeable seams, even if the backgrounds are well-matched. The insight is that our visual system is often more sensitive to the gradient of an image (how quickly the pixel values change left-right and up-down) than the overall intensity. We will therefore set up the problem as finding values for the pasted target pixels that maximally preserve the gradient of the source region without changing any of the background pixels. Note that we are making a deliberate decision here to ignore the overall intensity! So a green hat could turn red, but it will still look like a hat. As you can see, my Poisson implementation works well.
Forensic License Plate Recognition
I implemented a license plate forensic algorithm in my CS 70 class, Foundations of Applied Computer Science and Machine Learning. I removed the distortion in an image of a planar surface, and move one's perspective so the license plate appears face on.
We want to deduce the entries of the homography that maps the four corners we clicked above to the four corners of an undistorted rectangular license plate. Our unknowns are the elements of the homography matrix: a, b, c, d, e, f, g, h, while, for a given pair of corresponding points, x, y and x', y' are known. w' is not known per say but can be deduced easily from other unknowns and known quantities. Each pair of points gives you two constraints, and you have four such pairs, giving you 8 constraints on 8 unknowns. After mapping the points from the original image to the new image, we can now read the license plate: 153 7Z03.
Artificial Intelligence and Machine Learning
Course Overview
The eight-week Artificial Intelligence and Machine Learning course guides participants through the mathematical and theoretical background knowledge needed for the machine learning at use in today’s business world. Students will be exposed to fundamental principles in data investigation, exploration, supervised and unsupervised learning, and the functionalities on how to turn big data into intelligent, actionable insights through machine learning.
Learning Goals
Upon completion of this course, participants will be able to:
1. Perform unsupervised and supervised machine learning on large-scale,
unstructured/structured datasets.
2. Understand important pattern discovery concepts, methods, and applications.
3. Design classification and regression models for prediction and reasoning.
4. Develop a comprehensive understanding of model interpretation and evaluation.
Final Project
Real Estate Investment Trusts (REITs) offer attractive investment opportunities in the commercial real estate market. My partner and I developed a quantitative trading strategy that leverages machine learning, sentiment analysis, and time series analysis to identify undervalued REITs within specific sectors and sub-sectors. The strategy uses market data from FactSet, sentiment analysis on REITs, and historical price data to make informed investment decisions. We achieved superior risk-adjusted returns, and I am currently in the process of testing the strategy with realtime data.
Tiny Search Engine
I created a Tiny Search Engine in my CS 50 class at Dartmouth (Software Design and Implementation). I composed the project into three parts: crawler, indexer, and querier. First, I designed the crawler module to crawl the web and retrieve webpages starting from a "seed" URL. It parses the seed webpage, extracts any embedded URLs, then retrieves each of those pages, recursively, but limiting its exploration to a given "depth." Furthermore, the crawler will only crawl pages under the seed domain. Next, indexer reads the document files produced by the crawler, builds an index, and writes that index to a file. Its companion, the index tester, loads an index file produced by the indexer and saves it to another file. Finally, querier reads the index file produced by the indexer, and page files produced by the Querier, and answers search queries submitted via stdin.
Parts of Speech Predictor
I developed a Parts of Speech Model in my CS 10 class at Dartmouth (Object Oriented Programming). I created a Hidden Markov Model from training data files with sentences and tagged sentences. I used two hash maps, observations and transitions to train the data both of type HashMap<String, HashMap<String, Double>>. Observations keeps track of the number of times a String is a certain part of speech. Transitions hold the number of times a part of speech transitioned to another. Then, I converted those occurrences to probabilities. The model calculates the most probable next part of speech and outputs them in a new "tagged" file. (It uses those log probabilities to backtrace from the state with the best score for the last observation and works back to the start state). Ultimately, I achieved over 90% accuracy with my program.
CO2 Race Car Project
During my senior year of high school, I competed in a CO2 car drag race. I leveraged my newly developed skills in Autodesk Fusion 360 to design the fastest car. We had to incorporate a set of guidelines into our car, and accomplished the optimal limits. I made the car as light and as aerodynamic as possible. I optimized the aerodynamics with a virtual wind tunnel in Autodesk CFD.
To start the race, we had an official CO2 starting block. The device uses a firing pin to puncture the CO2 canister and release the force over a short period of time. My car reached speeds over 70 mph and won first place.
Texas Hold-Em App
I created a four-player Texas Hold-Em app for a school project in my sophomore year of high school. I researched Swift and Xcode and developed the app from scratch within two weeks. This project was a great opportunity to learn how to develop an app, and I continue to use those fundamentals in projects that I am working on now.
Currently in Progress:
1. ML Finance Startup
2. Full Stack Multiplatform App
3. Perfect Putt