{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 50 POINTS COS 324: Text Classification\n", "\n", "In this exercise, we'll use the **Weighted Majority** algorithm for text classification.\n", "\n", "Before we begin solving the exercise, unzip the provided ```data.zip``` (available [here](http://iml.cs.princeton.edu/PA1/data.zip)) file into a new folder named ```data``` so that the folder contains the files ```released_data``` and ```tokenized_data```. After you're done, this is what the directory structure should look like.\n", "\n", "![img](http://iml.cs.princeton.edu/PA1/file-struct.png)\n", "\n", "The code provided below does it for you. The filesize is large. So this might take a while." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import os.path\n", "\n", "if not os.path.isfile('data/released_data') or not os.path.isfile('data/tokenized_data'):\n", " import urllib.request\n", " url_data = 'http://iml.cs.princeton.edu/PA1/data.zip'\n", " urllib.request.urlretrieve(url_data, \"data.zip\")\n", " \n", " import zipfile\n", " with zipfile.ZipFile(\"data.zip\",\"r\") as zip_ref:\n", " zip_ref.extractall(\".\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 36 POINTS Part A: Got2look's Spam Filtering\n", "\n", "It's 2100 AD. You're an employee at Boongle, a [Mariner](https://mars.jpl.nasa.gov/gallery/atlas/valles-marineris.html) [Valley](https://en.wikipedia.org/wiki/Geography_of_Mars) based web company that offers an email service called Got2look. Got2look, aiming to provide the Martians the best quality of service, has its own share of challenges. One of these is that it must differentiate __spam__ from __not-spam__.\n", "\n", "## 6 POINTS Loading the Dataset" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import pickle\n", "assert(os.path.isfile('data/released_data'))\n", "\n", "email, label = pickle.load(open('data/released_data', 'rb'))\n", "\n", "# The var email is a list of strings -- each string is an email.\n", "# The var label is a list of {-1,+1} -- +1 is indicator for spam." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Unique Labels\n", " [-1. 1.] \n", "\n", "Number of Instances\n", " 2000 \n", "\n", "Number of Spam Instances\n", " 917 \n", "\n", "Number of Not-Spam Instances\n", " 1083 \n", "\n" ] } ], "source": [ "import numpy as np\n", "\n", "# 1 POINT ACT (1) How many instances are there in total? \n", "num_email = len(label)\n", "\n", "# 1 POINT ACT (2) List out all the distinct entries present in the var label.\n", "uniq_label = np.unique(label)\n", "\n", "print('Unique Labels\\n', uniq_label, '\\n')\n", "print('Number of Instances\\n', num_email, '\\n')\n", "\n", "# 1 POINT ACT (3) How many instances are labelled as spam?\n", "num_spam = sum(label == 1)\n", "print('Number of Spam Instances\\n', num_spam, '\\n')\n", "\n", "# 1 POINT ACT (4) How many instances are labelled as not-spam?\n", "num_not_spam = sum(label == -1)\n", "print('Number of Not-Spam Instances\\n', num_not_spam, '\\n')\n", "\n", "# Checks\n", "assert(num_email == num_spam + num_not_spam)\n", "assert(len(uniq_label) == 2)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Example of Spam (First 1000 characters) \n", " Pmy Pmy LLtq nE KdVr JeSig QJXbg rMuLb MW dAsnf qAJK Hwxvf hKYdn it u#fhv r#icI GcOdlP hFJrmV @c bx TL dIjhy Hdfj rTGhRP OKXexeU pobbcO PxGgVVQ KcXhlG JeSig #KgyBV aEKydNR ykYoD hUjUW cTEvEpF UYiyec Pmy h#l nkBzH u#fhv KcXhlG urJJS@w SZklMqH il dAsnf QW MhlYPc YbxnIE Hp#zkmI hDJs dHW UtimR JeSig dUm ynEZej dAsnf Pmy Pmy pZtF A#UOU hDJs SFXfCei ADSwO xQuxG Q@z wDQ nsKFMi dAsnf vX WE#mU UYiyec HfRGEu u#fhv QH JeSig FHVXm@ urJJS@w Pmy yBMRXvO AjKlYGv Pmy Hp#zkmI Pmy Pmy JeSig dyPRm BffQzk MLbbpB hKYdn tzbBHB mEF JeSig #Md aEKydNR Pmy JeSig @O Pmy wBASmD Hd gJhJB urJJS@w JeSig mfERJxP HvepX FbkiUv gIM hUjUW gJhJB llHkOz dAsnf hDJs Kfe wR IYp SFFq JeSig uC@KbJ HkE aEKydNR Pmy nsKFMi w#OBYAP Pmy JeSig ujmZEBx OKXexeU XkWAOZs tzbBHB mysN aEKydNR UYiyec JeSig JeSig dAsnf Pmy QJXbg rMuLb iyaKHZ aEKydNR HkE OKXexeU aEKydNR m@jS zsa urJJS@w OKXexeU KFd dAsnf dWaQ ajra Pmy ZoDko@ IRjede Pmy DhA jh u#fhv ZxlybjA iTHY Pmy gJhJB iTHY gJhJB jdO QSggdRg JeSig ZxhBzm dAsnf aEKydNR mql JeSig UYiyec YZbNK \n", "\n", "The Label of this document \n", " 1.0 \n", "\n" ] } ], "source": [ "# 1 POINT ACT (5) Find the index of the first spam.\n", "first_spam_index = np.argmax(label)\n", "\n", "print('Example of Spam (First 1000 characters) \\n', email[first_spam_index][:1000], '\\n')\n", "print('The Label of this document \\n', label[first_spam_index], '\\n')\n", "\n", "# Checks\n", "assert(label[first_spam_index] == 1)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Example of Not-Spam (First 1000 characters) \n", " aEKydNR OKXexeU nGLM wBASmD dAsnf gJhJB zsa JeSig aEKydNR UYiyec bfSzR Nk QfA#e PmC id Pmy nVU JeSig dWaQ sJw oU hKYdn tp qcmZER dCMuDtC Vms Qa lq BJFWSeg nhVEq Yf# vvBNc aEKydNR rRQju rMuLb J@Y@fLF u#fhv w#OBYAP ZoDko@ iwrA BH UYiyec PWPwr urJJS@w UYiyec lT JeSig OKXexeU Pmy JyNnOsv urJJS@w J@Y@fLF TL SgZoR JeSig JVA mysN @RouL wDQ Ya dAsnf rMQbzT dAsnf JeSig mnZni Awnj dAsnf JeSig nkBzH Pmy iWCcWh AtUlnx EO hUjUW Pmy yo MLbbpB HxdAPn tzbBHB yt dAsnf tBo@e jrSem kUQ Pmy gN# BhNlwV bFgQ qk##Mt vluPO dAsnf dAsnf JeSig JeSig wBASmD wDQ ocD aEKydNR dAsnf JeSig WoWcj UYiyec dAsnf wNuecw caI FqurF Scj UPK#C DidYV QsfDE hUjUW nhVEq Pmy J@Y@fLF Pmy Hp#zkmI Pmy G#GF Kfe Kfe tzbBHB FT BOBqTIP oU eM@KmM dAsnf dWaQ Kph# nsKFMi wBASmD RuWFr Pmy WFGXkOO aEKydNR Hp#zkmI JeSig Pmy dWaQ WoWcj JfBj wNZR eJtcon SgZoR DtHwUhc Ha SgZoR JeSig JeSig pJIQEyt EWh dAsnf Ix QNvXj Pmy Scj jh jh treRYeg Hp#zkmI hKYdn Pmy u#fhv laOiUo dWaQ npnUm OKXexeU AzsuU phjO Kfe WEoK JeSig OKXexeU gIM dAsnf YC yluOa gJhJB UY \n", "\n", "The Label of this document \n", " -1.0 \n", "\n" ] } ], "source": [ "# 1 POINT ACT (6) Find the index of the first not-spam.\n", "first_not_spam_index = np.argmin(label)\n", "\n", "print('Example of Not-Spam (First 1000 characters) \\n', email[first_not_spam_index][:1000], '\\n')\n", "print('The Label of this document \\n', label[first_not_spam_index], '\\n')\n", "\n", "# Checks\n", "assert(label[first_not_spam_index] == -1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 11 POINTS Bag-of-Words Representation\n", "\n", "Dealing with raw text directly can be challenging. First, you'll convert the raw text into the bag-of-words representation" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# 1 POINT ACT (7) Design a function that takes in a text string and converts it to a list of words.\n", "def Tokenize(mail):\n", " return mail.split()\n", "\n", "# Checks\n", "assert(Tokenize('ab de er de') == ['ab', 'de', 'er', 'de'])" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# 2 POINTS ACT (8) Design a function that takes in a list of strings and outputs a list of unique words in this list.\n", "def Dictionary(email):\n", " return list(set(word for mail in email for word in Tokenize(mail)))\n", " \n", "# Checks\n", "assert(set(Dictionary(['ab cd', 'cd cd de'])) == set(['ab', 'cd', 'de']))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of Unique Words\n", " 9561 \n", "\n" ] } ], "source": [ "# 1 POINT ACT (9) Create a list of unique words in the var email.\n", "words_found = Dictionary(email)\n", "num_words = len(words_found)\n", "\n", "print('Number of Unique Words\\n', num_words, '\\n')\n", "\n", "# Checks\n", "assert(num_words == 9561)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# 5 POINTS ACT (10) Design a function that outputs a matrix of dimension -- (num_docs, num_words) -- \n", "# such that matrix(i,j) == 1 if and only if email i contains word words_found[j]\n", "# and -1 otherwise.\n", "def MakeBow():\n", " word_to_index = {w: i for (i, w) in enumerate(words_found)}\n", " data = -1*np.ones((num_email, num_words))\n", " for (i, mail) in enumerate(email):\n", " for w in Tokenize(mail):\n", " data[i, word_to_index[w]] = 1\n", " return data\n", "\n", "data = MakeBow()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(#Docs, #Words)\n", " (2000, 9561) \n", "\n", "The index of the word \"Pmy\"\n", " 3422 \n", "\n", "Checking if it is present in email 0.\n", " 1.0 \n", "\n", "Sample from the Dictionary\n", " ['IpGcSPr', 'AmpmxWW', 'odV', 'krr', 'XDx', 'eE', 'lZ#zUt', 'eyxdMQP', 'NUoX', '@cKRJ'] \n", "\n", "Sample (vector, label)\n", " (array([ 1., 1., -1., ..., 1., 1., -1.]), 1.0) \n", "\n" ] } ], "source": [ "print('(#Docs, #Words)\\n', data.shape, '\\n')\n", "\n", "# 1 POINT ACT (11) Get the first word from the first email.\n", "first_word = Tokenize(email[0])[0]\n", "\n", "# 1 POINT ACT (12) Get the index of first_word in words_found.\n", "index_first = words_found.index(first_word)\n", "\n", "print('The index of the word \"%s\"\\n'%first_word, index_first, '\\n')\n", "print('Checking if it is present in email 0.\\n', data[0, index_first], '\\n')\n", "\n", "# Checks\n", "assert((num_email, num_words) == data.shape)\n", "assert(data[0, index_first] == 1)\n", "\n", "print('Sample from the Dictionary\\n', words_found[0:len(words_found):1000], '\\n')\n", "print('Sample (vector, label)\\n', (data[0,], label[0]), '\\n')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 8 PONITS Weighted Majority\n", "In this section, you'll implement the Weighted Majority algorithm, as described in the [lecture slides](http://www.cs.princeton.edu/courses/archive/fall17/cos324/lectures/lect2.pdf)." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "\n", "# 7 POINTS ACT (13) Implement the Weighted Majority algorithm. The input is -\n", "# (1) Arg 1 - a matrix -- (n, d) shape\n", "# (2) Arg 2 - an array -- (n) dimensional\n", "# (3) Arg 3 - a float -- eta\n", "# WM outputs -\n", "# (1) weight vector -- (d) dimensional\n", "# (2) mistakes -- an list of int containing 1 for rounds on which WM errs and 0 for others.\n", "def WeightedMajority(data, label, eta):\n", " num_docs, num_words = data.shape\n", " weight, mistakes = np.ones(num_words), []\n", " \n", " for (x, y) in zip(data, label):\n", " prediction = np.sign(weight.dot(x))\n", " prediction = np.random.choice([-1, 1]) if prediction == 0 else prediction\n", " mistakes.append(0 if prediction == y else 1)\n", " weight[x!=y] *= (1-eta)\n", " \n", " return weight, mistakes" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "eta_set = [0.01, 0.03, 0.1, 0.3, 0.9, 0.999999, 1.0]\n", "mistake_set = []\n", "for eta in eta_set:\n", " weight, mistakes = WeightedMajority(data, label , eta)\n", " cumsum_mistakes = np.cumsum(mistakes)/range(1,num_email+1)\n", " mistake_set.append(sum(mistakes))\n", " plt.plot(cumsum_mistakes, label=str(eta))\n", "plt.legend()\n", "\n", "plt.ylabel('Number of Mistakes');\n", "plt.xlabel('Number of Rounds')" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(eta_set, mistake_set)\n", "plt.ylabel('Number of Mistakes');\n", "plt.xlabel('Eta')" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of Mistakes\n", " 93 \n", "\n", "Error Rate\n", " 0.0465 \n", "\n" ] } ], "source": [ "# 1 POINT ACT (14) Choose eta.\n", "eta = 0.9\n", "weight, mistakes = WeightedMajority(data, label , eta)\n", "\n", "print('Number of Mistakes\\n', sum(mistakes), '\\n')\n", "print('Error Rate\\n', sum(mistakes)/num_email, '\\n')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 11 POINTS Sanity Check\n", "Now that you've successfully built a classifier, you want to know if this is the maximum mileage one can hope to extract from the WM algorithm." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sum of weights\n", " 1e-84 \n", "\n", "Max weight, Argmax weight, Leading Weight\n", " 1e-84 , 7424 , vWs# \n", "\n", "Min mistake, Argmin mistake, Best Word\n", " 84.0 , 7424 , vWs# \n", "\n" ] } ], "source": [ "# 1 POINT ACT (15) Get the sum of the weight vector.\n", "sum_weight = sum(weight)\n", "\n", "print('Sum of weights\\n', sum_weight, '\\n')\n", "\n", "# 1 POINT ACT (16) List the maximum weight, the coordinate that achieves this maximum, and the word it corresponds to.\n", "max_weight = max(weight)\n", "index_max_weight = np.argmax(weight)\n", "max_word = words_found[index_max_weight]\n", "\n", "print('Max weight, Argmax weight, Leading Weight\\n', \n", " max_weight, ',', index_max_weight, ',', max_word, '\\n')\n", "\n", "# 3 POINTS Does this make sense?\n", "# ACT (17) Create an array that for the i^th coordinate represents \n", "# the number of mistakes made if following the recommendation of word i all through.\n", "mistake_for_words = (num_email-label.dot(data))/2\n", "\n", "# 1 POINT ACT (18) List the minimum value at any coordinate of mistake_for_words, the coordinate that achieves it,\n", "# and the word it corresponds to.\n", "mis_weight = min(mistake_for_words)\n", "index_mis_weight = np.argmin(mistake_for_words)\n", "mis_word = words_found[index_mis_weight]\n", "print('Min mistake, Argmin mistake, Best Word\\n', \n", " mis_weight, ',', index_mis_weight, ',', mis_word, '\\n')\n", "\n", "# Checks\n", "assert(mis_word == max_word)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Words for Spam\n", " ['vWs#' '@OMBQ' 'NJm'] \n", "\n", "Words for Not-Spam\n", " ['kX' 'Frn' 'HX'] \n", "\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "# 2 POINTS ACT (19) Plot a histogram using mistake_for_words -- x axis is the number of mistakes, y is the number of words.\n", "# Preferably, the y axis should have a logarithmic scaling.\n", "plt.hist(mistake_for_words, normed=False, bins=30)\n", "plt.ylabel('Number of Words');\n", "plt.xlabel('Number of Mistakes')\n", "plt.yscale('log', nonposy='clip')\n", "\n", "# 3 POINTS ACT (20) Find the 3 words that make the most mistakes, and the 3 words that make the least number of mistakes.\n", "good_words = np.array(words_found)[np.argsort(mistake_for_words)[:3]]\n", "bad_words = np.array(words_found)[np.argsort(mistake_for_words)[-3:]]\n", "print('Words for Spam\\n', good_words, '\\n')\n", "print('Words for Not-Spam\\n', bad_words, '\\n')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 14 POINTS Part B: Earthly Delights\n", "Encouraged by your successes with machine learning, you decide to return back to the earth, and start your own consultancy. In the first week, you are contacted by a digital archaeologist. She has a collection of valuable documents from 1995 or earlier; remember that this is 2100 AD. Each document is about one of the two old modes of transport -- automobiles and motorcycles. Your job is to classify each document as belonging to exactly one of the two categories.\n", "\n", "This section asks you to repeat the steps in Part A on a different (_arguably_ more interesting) dataset.\n", "\n", "## 6 POINTS Loading the Dataset\n", "First, we load download the dataset, and load it into the memory. Fortunately, [scikit-learn](http://scikit-learn.org/stable/) has modules that automate this process." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.datasets import fetch_20newsgroups\n", "newsgroups = fetch_20newsgroups(subset='all', categories=['rec.autos', 'rec.motorcycles'])\n", "\n", "# The var newsgroups.data is a list of strings -- each string is a document.\n", "# The var newsgroups.target is a list of {0,1} -- +1 is an indicator for motorcycles." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Unique Labels\n", " [0 1] \n", "\n", "Number of Instances\n", " 1986 \n", "\n", "Number of Moto Instances\n", " 996 \n", "\n", "Number of Auto Instances\n", " 990 \n", "\n" ] } ], "source": [ "import numpy as np\n", "\n", "# 1 POINT ACT (1) How many instances are there in total?\n", "num_docs = len(newsgroups.target)\n", "\n", "# 1 POINT ACT (2) List out all the distinct entries present in the var label.\n", "uniq_label = np.unique(newsgroups.target)\n", "\n", "print('Unique Labels\\n', uniq_label, '\\n')\n", "print('Number of Instances\\n', num_docs, '\\n')\n", "\n", "# 1 POINT ACT (3) How many instances are labelled as motorcycles?\n", "num_moto = sum(newsgroups.target == 1)\n", "\n", "print('Number of Moto Instances\\n', num_moto, '\\n')\n", "\n", "# 1 POINT ACT (4) How many instances are labelled as autos?\n", "num_auto = sum(newsgroups.target == 0)\n", "print('Number of Auto Instances\\n', num_auto, '\\n')\n", "\n", "# Checks\n", "assert(num_docs == num_moto + num_auto)\n", "assert(len(uniq_label) == 2)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Example of document on Motorcycles \n", " From: davet@interceptor.cds.tek.com (Dave Tharp CDS)\n", "Subject: Re: Happy Easter!\n", "Organization: Tektronix - Colorado Data Systems, Englewood, CO\n", "Lines: 17\n", "\n", "In article <1993Apr15.171757.10890@i88.isc.com> jeq@lachman.com (Jonathan E. Quist) writes:\n", ">Rolls-Royce owned by a non-British firm?\n", ">\n", ">Ye Gods, that would be the end of civilization as we know it.\n", "\n", " Why not? Ford owns Aston-Martin and Jaguar, General Motors owns Lotus\n", "and Vauxhall. Rover is only owned 20% by Honda.\n", "\n", "-----------------------------------------------------------------------------\n", "| Dave Tharp | DoD #0751 | \"You can't wear out |\n", "| davet@interceptor.CDS.TEK.COM | MRA #151 | an Indian Scout, |\n", "| '88 K75S '48 Indian Chief | AHRMA #751 | Or its brother the Chief.|\n", "| '75 R90S(#151) '72 TR-2B(#751) | AMA #524737 | They're built like rocks |\n", "| '65 R50/2/Velorex '57 NSU Max | | to take the knocks, |\n", "| 1936 BMW R12 | (Compulsive | It's the Harleys that |\n", "| My employer has no idea. | Joiner) | give you grief.\" |\n", "-----------------------------------------------------------------------------\n", " \n", "\n", "The Label of this document \n", " 1 \n", "\n" ] } ], "source": [ "# 1 POINT ACT (5) Find the index of the moto doc.\n", "first_moto_index = np.argmax(newsgroups.target)\n", "\n", "print('Example of document on Motorcycles \\n', newsgroups.data[first_moto_index], '\\n')\n", "print('The Label of this document \\n', newsgroups.target[first_moto_index], '\\n')\n", "\n", "# Checks\n", "assert(newsgroups.target[first_moto_index] == 1)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Example of document on Autos \n", " From: cak3@ns1.cc.lehigh.edu (CHAD ANDREW KAUFFMAN)\n", "Subject: Car alarm info. (UNGO BOX)\n", "Organization: Lehigh University\n", "Lines: 12\n", "\n", "\n", "\n", "\n", " I want to get a car alarm and I am thinking about getting an Ungo Box.\n", " Does anyone out there have any knowledge or experience with any of\n", " these alarms? How about price ranges for the different models?\n", " Are these good car alarms? Please email me any responces.\n", "\n", " cak3@ns3.lehigh.edu\n", "\n", " Chad\n", " Chad\n", " \n", "\n", "The Label of this document \n", " 0 \n", "\n" ] } ], "source": [ "# 1 POINT ACT (6) Find the index of the auto doc.\n", "first_auto_index = np.argmin(newsgroups.target)\n", "\n", "print('Example of document on Autos \\n', newsgroups.data[first_auto_index], '\\n')\n", "print('The Label of this document \\n', newsgroups.target[first_auto_index], '\\n')\n", "\n", "# Checks\n", "assert(newsgroups.target[first_auto_index] == 0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1 POINT Bag-of-Words Representation\n", "\n", "You note that languages on earth seem more complex, and are riddled with punctuations. Dealing with raw text directly can be challenging. Fortunately, your archaeologist friend has already converted these to the bag-of-words representation." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(#Docs, #Words)\n", " (1986, 24135) \n", "\n" ] } ], "source": [ "import pickle\n", "assert(os.path.isfile('data/tokenized_data'))\n", "data, label, words_found = pickle.load(open('data/tokenized_data', 'rb'))\n", "\n", "(num_docs, num_words) = data.shape\n", "print('(#Docs, #Words)\\n', data.shape, '\\n')\n", "# The var data is a matrix of dimension -- (num_docs, num_words) -- such that matrix(i,j) == 1 \n", "# if and only if email i contains word words_found[j] and -1 otherwise.\n", "# The var label is a list of {-1,+1} -- +1 is indicator for motos.\n", "# The var words_found is a list of words." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The index of the word \"lehigh\"\n", " 13676 \n", "\n", "Checking if it is present in doc 0.\n", " 1 \n", "\n", "Sample from the Dictionary\n", " ['00', '19765', '387', '90s', 'anecdotal', 'bennett', 'calculated', 'comp', 'dealership', 'dweeb', 'fernando', 'grabbed', 'hurl', 'jt', 'loose', 'modulator', 'offerings', 'planning', 'rc', 'rwd', 'sliced', 'suit', 'trading', 'vickers', 'yjwon'] \n", "\n", "Sample (vector, label)\n", " (array([-1, -1, -1, ..., -1, -1, -1]), -1) \n", "\n" ] } ], "source": [ "# Sanity Check\n", "# 1 POINT ACT (7) Get the index of 'lehigh' in words_found.\n", "index_lehigh = words_found.index('lehigh')\n", "\n", "print('The index of the word \"lehigh\"\\n', index_lehigh, '\\n')\n", "print('Checking if it is present in doc 0.\\n', data[0, index_lehigh], '\\n')\n", "\n", "# Checks\n", "assert(data[0, index_lehigh] == 1)\n", "\n", "print('Sample from the Dictionary\\n', words_found[0:len(words_found):1000], '\\n')\n", "print('Sample (vector, label)\\n', (data[0,], label[0]), '\\n')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1 POINT Weighted Majority\n", "In this section, you'll implement the Weighted Majority algorithm, as described in the [lecture slides](http://www.cs.princeton.edu/courses/archive/fall17/cos324/lectures/lect2.pdf)." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "eta_set = [0.01, 0.03, 0.1, 0.3, 0.9, 0.999999, 1.0]\n", "mistake_set = []\n", "for eta in eta_set:\n", " weight, mistakes = WeightedMajority(data, label , eta)\n", " cumsum_mistakes = np.cumsum(mistakes)/range(1,num_docs+1)\n", " mistake_set.append(sum(mistakes))\n", " plt.plot(cumsum_mistakes, label=str(eta))\n", "plt.legend()\n", "\n", "plt.ylabel('Number of Mistakes');\n", "plt.xlabel('Number of Rounds')" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nvjeJcncAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(eta_set, mistake_set)\n", "plt.ylabel('Number of Mistakes');\n", "plt.xlabel('Eta')" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# 1 POINT ACT (8) Choose eta.\n", "eta = 0.7\n", "weight, mistakes = WeightedMajority(data, label , eta)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of Mistakes\n", " 505 \n", "\n", "Error Rate\n", " 0.2542799597180262 \n", "\n" ] } ], "source": [ "print('Number of Mistakes\\n', sum(mistakes), '\\n')\n", "print('Error Rate\\n', sum(mistakes)/num_docs, '\\n')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6 PONITS Sanity Check\n", "As before, we want to know if this is the best one can hope to do with WM." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sum of weights\n", " 4.48892491307e-260 \n", "\n", "Max weight, Argmax weight, Leading Weight\n", " 4.48892491307e-260 , 8711 , dod \n", "\n", "Min mistake, Argmin mistake, Best Word\n", " 496.0 , 8711 , dod \n", "\n" ] } ], "source": [ "# 1 POINT ACT (9) Get the sum of the weight vector.\n", "sum_weight = sum(weight)\n", "\n", "print('Sum of weights\\n', sum_weight, '\\n')\n", "\n", "# 1 POINT ACT (10) List the maximum weight, the coordinate that achieves this maximum, and the word it corresponds to.\n", "max_weight = max(weight)\n", "index_max_weight = np.argmax(weight)\n", "max_word = words_found[index_max_weight]\n", "\n", "print('Max weight, Argmax weight, Leading Weight\\n', \n", " max_weight, ',', index_max_weight, ',', max_word, '\\n')\n", "\n", "# Does this make sense?\n", "# 1 POINT ACT (11) Create an array that for the i^th coordinate represents \n", "# the number of mistakes made if following the recommendation of word i all through.\n", "mistake_for_words = (num_docs-label.dot(data))/2\n", "\n", "# 1 POINT ACT (12) List the minimum value at any coordinate of mistake_for_words, the coordinate that achieves it,\n", "# and the word it corresponds to.\n", "mis_weight = min(mistake_for_words)\n", "index_mis_weight = np.argmin(mistake_for_words)\n", "mis_word = words_found[index_mis_weight]\n", "print('Min mistake, Argmin mistake, Best Word\\n', \n", " mis_weight, ',', index_mis_weight, ',', mis_word, '\\n')\n", "\n", "# Checks\n", "assert(mis_word == max_word)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Words for Motorcycles\n", " ['dod' 'bike' 'ride'] \n", "\n", "Words for Autos\n", " ['they' 'cars' 'car'] \n", "\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "# 1 POINT ACT (13) Plot a histogram using mistake_for_words -- x axis is the number of mistakes, y is the number of words.\n", "# Preferably, the y axis should have a logarithmic scaling.\n", "plt.hist(mistake_for_words, normed=False, bins=30)\n", "plt.ylabel('Number of Words');\n", "plt.xlabel('Number of Mistakes')\n", "plt.yscale('log', nonposy='clip')\n", "\n", "# 1 POINT ACT (14) Find the 3 words that make the most mistakes, and the 3 words that make the least number of mistakes.\n", "good_words = np.array(words_found)[np.argsort(mistake_for_words)[:3]]\n", "bad_words = np.array(words_found)[np.argsort(mistake_for_words)[-3:]]\n", "print('Words for Motorcycles\\n', good_words, '\\n')\n", "print('Words for Autos\\n', bad_words, '\\n')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.1" } }, "nbformat": 4, "nbformat_minor": 2 }