A multivariate Gaussian mixture model is the unsupervised clustering of data into multiple multivariate gaussian curves. The algorithm utilizes randomness, probability, and iteration to produce the gaussians that best represent the provided data, and inefficient coding of this algorithm can increase the runtime by a factor of 100 or more. This particular implementation of the process uses K-means++ initialization, a preprocessing step that increases the accuracy of the models produced. The pictures on the left show an image where the pixels (based on RGB values) are clustered into 2, 3, and 5 gaussians and normalized to that gaussian's mean.
Using stock data from 2003-present for a huge variety of symbols, this simulator can evaluate the performance of a trading strategy given statistical indicators. The simulator only looks backward, so it's an honest 'no cheating' evaluator. The image on the left is comparing the results of a 'hold long' strategy for JPM stock, and the results of trading based on the stochastic oscillator statistical symbol, described here . The simulator can evaluate performance for many indicators, such as momentum or bollinger bands, over any period of time between 2003 and 2018.
Brailler is a Braille printing system designed to be easily used by the blind and non-impaired. The integrated microphone uses Google Speech API to recognize voice, produce a text translation, and send this data to a Raspberry Pi controller. The Pi is wired to a repurposed CNC machine, and using PyCNC libraries it can convert text into motor controls that allow the CNC to print Braille on paper. Additionally, the on-board interface allows for selection of image, PDF, and text files. PyTesseract libraries allow for image-to-text translation, and can feed its output into the Pi as well. Created as part of my senior capstone project at Texas A&M.
BerrySafe is a home security system using a Raspberry Pi, Arduino sensors, and an integrated Android application. After setting up motion sensors, cameras, and door sensors around a house, the Raspberry Pi can constantly read sensor data and relay it to the user via the mobile application. The user can 'lock' or 'unlock' the system from anywhere, and when the system is locked the Pi will trigger an alarm if motion is sensed or a door is opened. Additionally, the Pi captures and stores photos constantly to record a timeframe of activity in a room, and a user can request the most recently photo be displayed on their phone at any time.
This was a really fun project created with my little brother at Texas A&M's 2018 Hackathon, which was a great experience. MyMuseum is a content-sharing website that was intended as a place to share data about your experiences and sentimental posessions. The user can customize a page dedicated to a certain memory or object, and upload text, audio, video, or images related to it. The site then generates a QR code linking to your page, and you can share it with anyone that has the code. However, the site can be used generally to share content through a QR code for any reason. The backend was created using the EC2 service on AWS, and having a mySQL database that interacted through the webpage with PHP. Some challenges were securely storing user information and making sure that you could access a user's page only through a certain url with PHP arguments coded in the QR code.
This game was an implementation of a simple perceptron unit accompanied by a game that would allow the program to predict a user's input patterns. Utilized online learning and a learning phase, followed by a testing phase. Users 'train' a perceptron by choosing 1 or 2 repeatedly, and then is challenged to 'beat' the program. Relatively simple in the scope of machine learning, but includes a lot of key concepts central to the field.
This project was an implementation of a buddy memory allocator in C. As shown in the image, the memory allocator uses a binary tree approach to allocate the most ideal amount of memory to a user. This project utilized malloc() and free() functions to separate and coalesce memory blocks.
This was a two-person project to implement a multi-room chat application in C. The application involved connecting to a server process and choosing to CREATE, JOIN, or DELETE a chatroom. Within a room, you're free to chat with any other users within. Spawning a new chatroom with p_threads was a great insight into multithreading and sockets in C. My role was handling technical implementation, while my partner handled documentation and presentation elements.
This project was an implementation of a single-cycle CPU in Verilog. Each module was constructed and created from scratch, and the connected final product could read 32-bit MIPS instructions and complete basic R and I type instructions.