Dec 10 2008

Visualizing Machine-Learned Programs – CS 550 Term Project

Screenshot

Screenshot

Background

The purpose of this project is to visually explain a machine learning classifier’s logic to an end user.  Additionally, the user must be able to explain back to the classifier when its logic is faulty and how it should be fixed.

Implementation

This project was designed in C++ using OpenGL.  I used GLUT primitives such as glutSolidCube() to create the basic components, then reshaped and arranged them using OpenGL transformations.  In order to create the translucent regions, I needed to enable lighting and shading.  Blending was then used to create the illusion that each word’s bar is inside one or more of the translucent boxes.  The text was created using glutStrokeCharater() calls; regular bitmap fonts were not an option because I wanted to rotate the text beneath the word boxes.  The resulting words suffered from severe aliasing problems, so I used the OpenGL accumulation buffer to enable 8x anti-aliasing.

Usage

While this project is not actually hooked up to a classifier, the word importance can still be manipulated by dragging the bars up or down into the desired regions.  There are also controls in a secondary window for rotating the view or panning right and left.

Room for Improvement

Ideally, this explanation would be interacting with a classifier; changes made to word importance would then be instantly viewable in the application when it re-classifies based upon the user’s adjustments.  I would also have liked to make it possible to zoom in and out so that the user can fit exactly as many words on-screen as she would like.  Finally, the blending of the word boxes with the translucent boxes isn’t entirely right–the word boxes should slightly change color depending on which region they are.

Downloads

Source code (for Visual Studio 2008)

Windows Binary (Requires OpenGL, GLUT and GLUI libraries)


Dec 4 2008

CS 550 Term Project

Yay!  Thanks to some help from Will, I’ve finally finished my 550 term project, a whole 18 hours before the due date!  Since this was a graphics course, it isn’t actually hooked up to a naive bayes classifier backend (unlike the 2D version we did over the summer).  It is, however, infinitely more enjoyable to use than the previous prototype, mostly because you can rotate the view around and zoom down the list of words. :)

3D naive bayes classifier visualization

3D naive bayes classifier visualization


Dec 1 2008

Less Frustration

After another day of coaxing OpenGL to play nice, I’ve managed to make some progress on my final project.  The goal is to create a 3D version of the 2D visualization my research group designed for the logic underlying a Bayesian classifier.  So far I’ve got it displaying blocks representing the importance of each word to the classifier (only using three words at the moment, but I’d like to scale it up so that you can just zoom down a list of hundreds), and translucent regions denoting whether a word is required, forbidden, or unimportant to the classifier’s decision.  The blending isn’t quite right for that last part, but good enough to move on.  Now I need to make it interactive, so that the user can adjust the importance of each word.

Also, Ted and Judy dropped off an electric oil heater when they passed through town today.  My apartment’s furnace does a great job of heating the family room, but that’s about it.  Now maybe my bedroom won’t be freezing each morning!  Sadly they were just passing through while I was on campus; I want to take them out to dinner sometime before heading back to Detroit for the holidays.


Nov 30 2008

Frustration

I’ve been working on the final project for my OpenGL course since 9am today, and I have absolutely nothing new to show for it*.  Argh!

In happier news, on Friday night a burlesque troupe passed through Corvallis. Tim and I went out and caught the show, which was surprisingly good.  Maybe not in the same league as the Apocalypse in Coney Island show Twinkle and I saw at Bumbershoot (nowhere near the same theatrics), but better than anticipated.  Then I spent yesterday catching up with an old friend from Detroit who recently moved to Portland.  We went out to a bar near his place, then headed over to Rontom’s for Simone’s farewell party.  I’d brought my camera all the way for Corvallis, then forgot it in the trunk of my car when we left his apartment, so one photo from my phone is all I have from the night:

Phil and his roommate Dom

Phil (right) and his roommate Dom

[*: Except for a decreased tolerance for OpenGL in general, and increased respect for the people who use it well.]