From bcc3c772e359e21338951f8ee0dc5d04d7e6fb06 Mon Sep 17 00:00:00 2001 From: chukseey Date: Mon, 30 May 2022 16:51:31 +0100 Subject: [PATCH] [lab done] chuks abel --- your-code/building-features.jpg | Bin 0 -> 39269 bytes your-code/challenge-1.ipynb | 302 +++++ your-code/challenge-2.ipynb | 1655 +++++++++++++++++++++++++++ your-code/data-cleaning-results.png | Bin 0 -> 76856 bytes your-code/lab_boston_housing.ipynb | 298 ----- your-code/lab_overfitting.ipynb | 226 ---- your-code/nb-model-building.jpg | Bin 0 -> 38413 bytes 7 files changed, 1957 insertions(+), 524 deletions(-) create mode 100644 your-code/building-features.jpg create mode 100644 your-code/challenge-1.ipynb create mode 100644 your-code/challenge-2.ipynb create mode 100644 your-code/data-cleaning-results.png delete mode 100644 your-code/lab_boston_housing.ipynb delete mode 100644 your-code/lab_overfitting.ipynb create mode 100644 your-code/nb-model-building.jpg diff --git a/your-code/building-features.jpg b/your-code/building-features.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0dd24d26bdb3c39afc54f704014f4e7221d0ce05 GIT binary patch literal 39269 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 R3cqee{~G;o9nyX@@oyp-AS(a> literal 0 HcmV?d00001 diff --git a/your-code/challenge-1.ipynb b/your-code/challenge-1.ipynb new file mode 100644 index 0000000..e292086 --- /dev/null +++ b/your-code/challenge-1.ipynb @@ -0,0 +1,302 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Challenge 1: Prepare Textual Data for Analysis\n", + "\n", + "In this challenge, we will walk you through how to prepare raw text data for NLP analysis. Due to time limitation, we will cover **text cleaning, tokenization, stemming, lemmatization, and stop words removal** but skip POS tags, named entity recognition, and trunking. The latter 3 steps are more advanced and not required for our next challenge on sentiment analysis. \n", + "\n", + "## Objectives\n", + "\n", + "* Learn how to prepare text data for NLP analysis in Python\n", + "* Write the functions you will use in Challenge 3 for cleaning, tokenizing, stemming, and lemmatizing data." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Text Cleaning\n", + "\n", + "Text cleaning is also called text cleansing. The goal is to clean up the messy real-world textual data in order to improve the text analysis accuracy at later steps. For generic textual data sources, we usually need to fix the following problems:\n", + "\n", + "* Missing values\n", + "* Special characters\n", + "* Numbers\n", + "\n", + "For web data, we need to additinally fix:\n", + "\n", + "* HTML tags\n", + "* JavaScripts\n", + "* CSS\n", + "* URLs\n", + "\n", + "Case by case, there may also be special problems we need to fix for certain types of data. For instance, for Twitter tweets data we need to fix hashtags and the Twitter handler including a *@* sign and Twitter usernames.\n", + "\n", + "In addition, we also need to convert the texts to lower cases so that when we anaylize the words later, NLTK will not think *Ironhack* and *ironhack* mean different things.\n", + "\n", + "Note that the above are the general steps to clean up data for NLP analysis. In specific cases, not all those steps apply. For example, if you are analyzing textual data on history, you probably don't want to remove numbers because numbers (such as years and dates) are important in history. Besides, if you are doing something like network analysis on web data, you may want to retain hyperlinks so that you will be able to extract the outbounding links in the next steps. Sometimes you may also need to do some cleaning first, then extract some features, then do more cleaning, then extract more features. You'll have to make these judgments by yourself case by case. \n", + "\n", + "In this challenge we are keeping things relatively simple so **you only need to clean up special characters, numbers, and URLs**. Let's say you have the following messy string to clean up:\n", + "\n", + "```\n", + "@Ironhack's-#Q website 776-is http://ironhack.com [(2018)]\")\n", + "```\n", + "\n", + "You will write a function, which will be part of you NLP analysis pipeline in the next challenge, to clean up strings like above and output:\n", + "\n", + "```\n", + "ironhack s q website is\n", + "```\n", + "\n", + "**In the cell below, write a function called `clean_up`**. Test your function with the above string and make sure you receive the expected output.\n", + "\n", + "*Notes:*\n", + "\n", + "* Use regular expressions to identify URL patterns and remove URLs.\n", + "\n", + "* You don't want to replace special characters/numbers with an empty string. Because that will join words that shouldn't be joined. For instance, if you replace the `'` in `you're`, you will get `youre` which is undesirable. So instead, replace special characters and numbers with a whitespace.\n", + "\n", + "* The order matters in terms of what to clean before others. For example, if you clean special characters before URLs, it will be difficult to identify the URLs patterns.\n", + "\n", + "* Don't worry about single letters and multiple whitespaces in your returned string. In our next steps those issues will be fixed." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "import re\n", + "import nltk" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'ironhack s q website is'" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def clean_up(s):\n", + " \"\"\"\n", + " Cleans up numbers, URLs, and special characters from a string.\n", + "\n", + " Args:\n", + " s: The string to be cleaned up.\n", + "\n", + " Returns:\n", + " A string that has been cleaned up.\n", + " \"\"\"\n", + " string = re.sub(r'http\\S+', '', s)\n", + " return re.sub('[^A-Za-z]+', ' ', string).lower().strip()\n", + " \n", + "test = \"@Ironhack's-#Q website 776-is http://ironhack.com [(2018)]\"\n", + "\n", + "test_string = clean_up(test)\n", + "test_string" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Tokenization\n", + "\n", + "We have actually discussed the concept of tokenization in the Bag of Words lab before. In that lab, we did both tokenization and calculated the [matrix of document-term frequency](https://en.wikipedia.org/wiki/Document-term_matrix). In this lab, we only need tokenization.\n", + "\n", + "In the cell below, write a function called **`tokenize`** to convert a string to a list of words. We'll use the string we received in the previous step *`ironhack s q website is`* to test your function. Your function shoud return:\n", + "\n", + "```python\n", + "['ironhack', 's', 'q', 'website', 'is']\n", + "```\n", + "\n", + "*Hint: use the `word_tokenize` function in NLTK.*" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['ironhack', 's', 'q', 'website', 'is']" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def tokenize(s):\n", + " \"\"\"\n", + " Tokenize a string.\n", + "\n", + " Args:\n", + " s: String to be tokenized.\n", + "\n", + " Returns:\n", + " A list of words as the result of tokenization.\n", + " \"\"\"\n", + " return nltk.word_tokenize(s)\n", + "\n", + "test_string = tokenize(test_string)\n", + "test_string" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Stemming and Lemmatization\n", + "\n", + "We will do stemming and lemmatization in the same step because otherwise we'll have to loop each token lists twice. You have learned in the previous challenge that stemming and lemmatization are similar but have different purposes for text normalization:\n", + "\n", + "**Stemming reduces words to their root forms (stems) even if the stem itself is not a valid word**. For instance, *token*, *tokenize*, and *tokenization* will be reduced to the same stem - *token*. And *change*, *changed*, *changing* will be reduced to *chang*.\n", + "\n", + "In NLTK, there are three stemming libraries: [*Porter*](https://www.nltk.org/_modules/nltk/stem/porter.html), [*Snowball*](https://www.nltk.org/_modules/nltk/stem/snowball.html), and [*Lancaster*](https://www.nltk.org/_modules/nltk/stem/lancaster.html). The difference among the three is the agressiveness with which they perform stemming. Porter is the most gentle stemmer that preserves the word's original form if it has doubts. In contrast, Lancaster is the most aggressive one that sometimes produces wrong outputs. And Snowball is in between. **In most cases you will use either Porter or Snowball**.\n", + "\n", + "**Lemmatization differs from stemming in that lemmatization cares about whether the reduced form belongs to the target language and it often requires the context (i.e. POS or parts-of-speech) in order to perform the correct transformation**. For example, the [*Word Net lemmatizer* in NLTK](https://www.nltk.org/_modules/nltk/stem/wordnet.html) yields different results with and without being told that *was* is a verb:\n", + "\n", + "```python\n", + ">>> from nltk.stem import WordNetLemmatizer\n", + ">>> lemmatizer = WordNetLemmatizer()\n", + ">>> lemmatizer.lemmatize('was')\n", + "'wa'\n", + ">>> lemmatizer.lemmatize('runs', pos='v')\n", + "'be'\n", + "```\n", + "\n", + "In the cell below, import the necessary libraries and define a function called `stem_and_lemmatize` that performs both stemming and lemmatization on a list of words. Don't worry about the POS part of lemmatization for now." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['ironhack', 's', 'q', 'websit', 'is']\n" + ] + } + ], + "source": [ + "def stem_and_lemmatize(l):\n", + " \n", + " \"\"\"\n", + " Perform stemming and lemmatization on a list of words.\n", + "\n", + " Args:\n", + " l: A list of strings.\n", + "\n", + " Returns:\n", + " A list of strings after being stemmed and lemmatized.\n", + " \"\"\"\n", + " ps = nltk.PorterStemmer()\n", + " lemmatizer = nltk.WordNetLemmatizer()\n", + " l2 = []\n", + " \n", + " for w in l:\n", + " s = ps.stem(w)\n", + " s = lemmatizer.lemmatize(s)\n", + " l2 += [s]\n", + " \n", + " return l2\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Stop Words Removal\n", + "\n", + "Stop Words are the most commonly used words in a language that don't contribute to the main meaning of the texts. Examples of English stop words are `i`, `me`, `is`, `and`, `the`, `but`, and `here`. We want to remove stop words from analysis because otherwise stop words will take the overwhelming portion in our tokenized word list and the NLP algorithms will have problems in identifying the truely important words.\n", + "\n", + "NLTK has a `stopwords` package that allows us to import the most common stop words in over a dozen langauges including English, Spanish, French, German, Dutch, Portuguese, Italian, etc. These are the bare minimum stop words (100-150 words in each language) that can get beginners started. Some other NLP packages such as [*stop-words*](https://pypi.org/project/stop-words/) and [*wordcloud*](https://amueller.github.io/word_cloud/generated/wordcloud.WordCloud.html) provide bigger lists of stop words.\n", + "\n", + "Now in the cell below, create a function called `remove_stopwords` that loop through a list of words that have been stemmed and lemmatized to check and remove stop words. Return a new list where stop words have been removed." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ironhack q website\n" + ] + } + ], + "source": [ + "from nltk.corpus import stopwords\n", + "def remove_stopwords(l):\n", + " \"\"\"\n", + " Remove English stopwords from a list of strings.\n", + "\n", + " Args:\n", + " l: A list of strings.\n", + "\n", + " Returns:\n", + " A list of strings after stop words are removed.\n", + " \"\"\"\n", + " stop_words = stopwords.words('english')\n", + "\n", + " return ' '.join([w for w in l if w not in stop_words])\n", + "\n", + "print(remove_stopwords(test_string))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "In this challenge you have learned several text preparation techniques in more depths including text cleaning, tokenization, stemming, lemmatization, and stopwords removal. You have also written the functions you will be using in the next challenge to prepare texts for NLP analysis. Now we are ready to move on to the next challenge - Sentiment Analysis." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/your-code/challenge-2.ipynb b/your-code/challenge-2.ipynb new file mode 100644 index 0000000..6c11cb8 --- /dev/null +++ b/your-code/challenge-2.ipynb @@ -0,0 +1,1655 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Challenge 2: Sentiment Analysis\n", + "\n", + "In this challenge we will learn sentiment analysis and practice performing sentiment analysis on Twitter tweets. \n", + "\n", + "## Introduction\n", + "\n", + "Sentiment analysis is to *systematically identify, extract, quantify, and study affective states and subjective information* based on texts ([reference](https://en.wikipedia.org/wiki/Sentiment_analysis)). In simple words, it's to understand whether a person is happy or unhappy in producing the piece of text. Why we (or rather, companies) care about sentiment in texts? It's because by understanding the sentiments in texts, we will be able to know if our customers are happy or unhappy about our products and services. If they are unhappy, the subsequent action is to figure out what have caused the unhappiness and make improvements.\n", + "\n", + "Basic sentiment analysis only understands the *positive* or *negative* (sometimes *neutral* too) polarities of the sentiment. More advanced sentiment analysis will also consider dimensions such as agreement, subjectivity, confidence, irony, and so on. In this challenge we will conduct the basic positive vs negative sentiment analysis based on real Twitter tweets.\n", + "\n", + "NLTK comes with a [sentiment analysis package](https://www.nltk.org/api/nltk.sentiment.html). This package is great for dummies to perform sentiment analysis because it requires only the textual data to make predictions. For example:\n", + "\n", + "```python\n", + ">>> from nltk.sentiment.vader import SentimentIntensityAnalyzer\n", + ">>> txt = \"Ironhack is a Global Tech School ranked num 2 worldwide. 
", + "
", + "Our mission is to help people transform their careers and join a thriving community of tech professionals that love what they do.\"\n", + ">>> analyzer = SentimentIntensityAnalyzer()\n", + ">>> analyzer.polarity_scores(txt)\n", + "{'neg': 0.0, 'neu': 0.741, 'pos': 0.259, 'compound': 0.8442}\n", + "```\n", + "\n", + "In this challenge, however, you will not use NLTK's sentiment analysis package because in your Machine Learning training in the past 2 weeks you have learned how to make predictions more accurate than that. The [tweets data](https://www.kaggle.com/kazanova/sentiment140) we will be using today are already coded for the positive/negative sentiment. You will be able to use the Naïve Bayes classifier you learned in the lesson to predict the sentiment of tweets based on the labels." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conducting Sentiment Analysis\n", + "\n", + "### Loading and Exploring Data\n", + "\n", + "The dataset we'll be using today is located in the lab directory named `Sentiment140.csv.zip`. You need to unzip it into a `.csv` file. Then in the cell below, load and explore the data.\n", + "\n", + "*Notes:* \n", + "\n", + "* The dataset was downloaded from [Kaggle](https://www.kaggle.com/kazanova/sentiment140). We made a slight change on the original data so that each column has a label.\n", + "\n", + "* The dataset is huuuuge (1.6m tweets). When you develop your data analysis codes, you can sample a subset of the data (e.g. 20k records) so that you will save a lot of time when you test your codes." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "from nltk.corpus import stopwords\n", + "import re\n", + "import nltk\n", + "from sklearn.feature_extraction.text import CountVectorizer\n", + "from sklearn.feature_extraction.text import TfidfVectorizer\n", + "from nltk.probability import ConditionalFreqDist" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "def clean_up(s):\n", + " \"\"\"\n", + " Cleans up numbers, URLs, and special characters from a string.\n", + "\n", + " Args:\n", + " s: The string to be cleaned up.\n", + "\n", + " Returns:\n", + " A string that has been cleaned up.\n", + " \"\"\"\n", + " string = re.sub(r'http\\S+', '', s)\n", + " return re.sub('[^A-Za-z]+', ' ', string).lower().strip()\n", + "\n", + "def tokenize(s):\n", + " \"\"\"\n", + " Tokenize a string.\n", + "\n", + " Args:\n", + " s: String to be tokenized.\n", + "\n", + " Returns:\n", + " A list of words as the result of tokenization.\n", + " \"\"\"\n", + " return nltk.word_tokenize(s)\n", + "\n", + "def stem_and_lemmatize(l):\n", + " \n", + " \"\"\"\n", + " Perform stemming and lemmatization on a list of words.\n", + "\n", + " Args:\n", + " l: A list of strings.\n", + "\n", + " Returns:\n", + " A list of strings after being stemmed and lemmatized.\n", + " \"\"\"\n", + " ps = nltk.PorterStemmer()\n", + " lemmatizer = nltk.WordNetLemmatizer()\n", + " l2 = []\n", + " \n", + " for w in l:\n", + " s = ps.stem(w)\n", + " s = lemmatizer.lemmatize(s)\n", + " l2 += [s]\n", + " \n", + " return l2\n", + "\n", + "\n", + "def remove_stopwords(l):\n", + " \"\"\"\n", + " Remove English stopwords from a list of strings.\n", + "\n", + " Args:\n", + " l: A list of strings.\n", + "\n", + " Returns:\n", + " A list of strings after stop words are removed.\n", + " \"\"\"\n", + " stop_words = stopwords.words('english')\n", + "\n", + " return [w for w in l if w not in stop_words]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "tweets = pd.read_csv('C:/Users/Zaca/Documents/Datasets/sentiment140.csv')\n", + "sample = tweets.sample(20000)\n", + "sample['target'] = sample['target'].replace(4, 1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Prepare Textual Data for Sentiment Analysis\n", + "\n", + "Now, apply the functions you have written in Challenge 1 to your whole data set. These functions include:\n", + "\n", + "* `clean_up()`\n", + "\n", + "* `tokenize()`\n", + "\n", + "* `stem_and_lemmatize()`\n", + "\n", + "* `remove_stopwords()`\n", + "\n", + "Create a new column called `text_processed` in the dataframe to contain the processed data. At the end, your `text_processed` column should contain lists of word tokens that are cleaned up. Your data should look like below:\n", + "\n", + "![Processed Data](data-cleaning-results.png)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
targetiddateflagusertexttext_processed
47168602176677449Mon Jun 15 04:29:23 PDT 2009NO_QUERYJessicaShireeLast day of classes with my Day 1 kids[last, day, class, day, kid]
156875412188268260Mon Jun 15 21:35:26 PDT 2009NO_QUERYlcmelodyRant over. Now it's time for me to actually ge...[rant, time, actual, get]
151417012175446548Mon Jun 15 01:00:40 PDT 2009NO_QUERYtamzinaki@Tsaksonakis love that song.don't remember it ...[tsaksonaki, love, song, rememb, bit, f, amp, ...
101326911881296235Fri May 22 04:14:15 PDT 2009NO_QUERYEghie_DyI'm so happy[happi]
44361302067603654Sun Jun 07 12:38:14 PDT 2009NO_QUERYicysun23@decorus I DONT KNOW!!![decoru, dont, know]
........................
111039111972049147Sat May 30 08:27:15 PDT 2009NO_QUERYiCasandy@SoulGlowActivtr dat song is da bomb!!![soulglowactivtr, dat, song, da, bomb]
64930602237251942Fri Jun 19 05:28:19 PDT 2009NO_QUERYkakaxoI go to the hairdresser and then to friends ...[go, hairdress, friend, night, lt, ugli, weath...
89419511692177930Sun May 03 19:26:28 PDT 2009NO_QUERYewindsor@aLINEofCOCJIN Ah awesome. Good to hear from ...[alineofcocjin, ah, awesom, good, hear]
5769801685723636Sun May 03 01:45:08 PDT 2009NO_QUERYacaigirl@Avie89 sorry to hear that...[avi, sorri, hear]
131418812013877292Tue Jun 02 23:49:36 PDT 2009NO_QUERYJellie1981waiting for the train! http://yfrog.com/eha8sj[wait, train]
\n", + "

20000 rows × 7 columns

\n", + "
" + ], + "text/plain": [ + " target id date flag \\\n", + "471686 0 2176677449 Mon Jun 15 04:29:23 PDT 2009 NO_QUERY \n", + "1568754 1 2188268260 Mon Jun 15 21:35:26 PDT 2009 NO_QUERY \n", + "1514170 1 2175446548 Mon Jun 15 01:00:40 PDT 2009 NO_QUERY \n", + "1013269 1 1881296235 Fri May 22 04:14:15 PDT 2009 NO_QUERY \n", + "443613 0 2067603654 Sun Jun 07 12:38:14 PDT 2009 NO_QUERY \n", + "... ... ... ... ... \n", + "1110391 1 1972049147 Sat May 30 08:27:15 PDT 2009 NO_QUERY \n", + "649306 0 2237251942 Fri Jun 19 05:28:19 PDT 2009 NO_QUERY \n", + "894195 1 1692177930 Sun May 03 19:26:28 PDT 2009 NO_QUERY \n", + "57698 0 1685723636 Sun May 03 01:45:08 PDT 2009 NO_QUERY \n", + "1314188 1 2013877292 Tue Jun 02 23:49:36 PDT 2009 NO_QUERY \n", + "\n", + " user text \\\n", + "471686 JessicaShiree Last day of classes with my Day 1 kids \n", + "1568754 lcmelody Rant over. Now it's time for me to actually ge... \n", + "1514170 tamzinaki @Tsaksonakis love that song.don't remember it ... \n", + "1013269 Eghie_Dy I'm so happy \n", + "443613 icysun23 @decorus I DONT KNOW!!! \n", + "... ... ... \n", + "1110391 iCasandy @SoulGlowActivtr dat song is da bomb!!! \n", + "649306 kakaxo I go to the hairdresser and then to friends ... \n", + "894195 ewindsor @aLINEofCOCJIN Ah awesome. Good to hear from ... \n", + "57698 acaigirl @Avie89 sorry to hear that... \n", + "1314188 Jellie1981 waiting for the train! http://yfrog.com/eha8sj \n", + "\n", + " text_processed \n", + "471686 [last, day, class, day, kid] \n", + "1568754 [rant, time, actual, get] \n", + "1514170 [tsaksonaki, love, song, rememb, bit, f, amp, ... \n", + "1013269 [happi] \n", + "443613 [decoru, dont, know] \n", + "... ... \n", + "1110391 [soulglowactivtr, dat, song, da, bomb] \n", + "649306 [go, hairdress, friend, night, lt, ugli, weath... \n", + "894195 [alineofcocjin, ah, awesom, good, hear] \n", + "57698 [avi, sorri, hear] \n", + "1314188 [wait, train] \n", + "\n", + "[20000 rows x 7 columns]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sample['text_processed'] = sample['text'].apply(clean_up).apply(tokenize).apply(stem_and_lemmatize).apply(remove_stopwords)\n", + "sample" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Creating Bag of Words\n", + "\n", + "The purpose of this step is to create a [bag of words](https://en.wikipedia.org/wiki/Bag-of-words_model) from the processed data. The bag of words contains all the unique words in your whole text body (a.k.a. *corpus*) with the number of occurrence of each word. It will allow you to understand which words are the most important features across the whole corpus.\n", + "\n", + "Also, you can imagine you will have a massive set of words. The less important words (i.e. those of very low number of occurrence) do not contribute much to the sentiment. Therefore, you only need to use the most important words to build your feature set in the next step. In our case, we will use the top 5,000 words with the highest frequency to build the features.\n", + "\n", + "In the cell below, combine all the words in `text_processed` and calculate the frequency distribution of all words. A convenient library to calculate the term frequency distribution is NLTK's `FreqDist` class ([documentation](https://www.nltk.org/api/nltk.html#module-nltk.probability)). Then select the top 5,000 words from the frequency distribution." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['last',\n", + " 'day',\n", + " 'class',\n", + " 'kid',\n", + " 'rant',\n", + " 'time',\n", + " 'actual',\n", + " 'get',\n", + " 'tsaksonaki',\n", + " 'love',\n", + " 'song',\n", + " 'rememb',\n", + " 'bit',\n", + " 'f',\n", + " 'amp',\n", + " 'l',\n", + " 'saw',\n", + " 'actor',\n", + " 'studio',\n", + " 'happi',\n", + " 'decoru',\n", + " 'dont',\n", + " 'know',\n", + " 'rebeccamezzino',\n", + " 'hello',\n", + " 'bec',\n", + " 'long',\n", + " 'melbourn',\n", + " 'abl',\n", + " 'make',\n", + " 'tweetup',\n", + " 'ugh',\n", + " 'im',\n", + " 'tire',\n", + " 'hardli',\n", + " 'anyth',\n", + " 'play',\n", + " 'niec',\n", + " 'goin',\n", + " 'bed',\n", + " 'goodnight',\n", + " 'eveyon',\n", + " 'lt',\n", + " 'ha',\n", + " 'reject',\n", + " 'back',\n", + " 'amaz',\n", + " 'two',\n", + " 'never',\n", + " 'forget',\n", + " 'feel',\n", + " 'break',\n", + " 'pool',\n", + " 'swim',\n", + " 'middl',\n", + " 'lightn',\n", + " 'storm',\n", + " 'sunni',\n", + " 'xtineismyhero',\n", + " 'happen',\n", + " 'darl',\n", + " 'laffit',\n", + " 'still',\n", + " 'salon',\n", + " 'send',\n", + " 'pic',\n", + " 'eaten',\n", + " 'aliv',\n", + " 'mosquito',\n", + " 'post',\n", + " 'waaaaay',\n", + " 'much',\n", + " 'forgot',\n", + " 'wa',\n", + " 'gon',\n", + " 'na',\n", + " 'say',\n", + " 'mom',\n", + " 'invit',\n", + " 'parti',\n", + " 'go',\n", + " 'though',\n", + " 'veilin',\n", + " 'miss',\n", + " 'see',\n", + " 'like',\n", + " 'month',\n", + " 'alreadi',\n", + " 'think',\n", + " 'look',\n", + " 'xd',\n", + " 'chemistri',\n", + " 'revison',\n", + " 'well',\n", + " 'bore',\n", + " 'hate',\n", + " 'peopl',\n", + " 'finish',\n", + " 'exam',\n", + " 'festivalfan',\n", + " 'u',\n", + " 'start',\n", + " 'eat',\n", + " 'carb',\n", + " 'ur',\n", + " 'bodi',\n", + " 'wont',\n", + " 'weight',\n", + " 'come',\n", + " 'fast',\n", + " 'ive',\n", + " 'clean',\n", + " 'deserv',\n", + " 'recognit',\n", + " 'mother',\n", + " 'caus',\n", + " 'problem',\n", + " 'instead',\n", + " 'montyrul',\n", + " 'pearllow',\n", + " 'andi',\n", + " 'wish',\n", + " 'luck',\n", + " 'gig',\n", + " 'glad',\n", + " 'went',\n", + " 'glasto',\n", + " 'xxxxxx',\n", + " 'got',\n", + " 'ta',\n", + " 'pack',\n", + " 'trip',\n", + " 'daddi',\n", + " 'granni',\n", + " 'poo',\n", + " 'wait',\n", + " 'midnight',\n", + " 'jona',\n", + " 'brother',\n", + " 'new',\n", + " 'album',\n", + " 'tomorrow',\n", + " 'dead',\n", + " 'zoran',\n", + " 'lost',\n", + " 'croatian',\n", + " 'idol',\n", + " 'differ',\n", + " 'le',\n", + " 'vote',\n", + " 'prepar',\n", + " 'univers',\n", + " 'great',\n", + " 'hook',\n", + " 'learn',\n", + " 'read',\n", + " 'yesterday',\n", + " 'hope',\n", + " 'sloan',\n", + " 'download',\n", + " 'trvsdjam',\n", + " 'mixtap',\n", + " 'unzip',\n", + " 'invalid',\n", + " 'corrupt',\n", + " 'krishnakum',\n", + " 'told',\n", + " 'ya',\n", + " 'uber',\n", + " 'cool',\n", + " 'treat',\n", + " 'omen',\n", + " 'yoo',\n", + " 'sittin',\n", + " 'car',\n", + " 'crazi',\n", + " 'ish',\n", + " 'rite',\n", + " 'man',\n", + " 'ima',\n", + " 'nitemar',\n", + " 'tonit',\n", + " 'bryci',\n", + " 'seen',\n", + " 'ure',\n", + " 'stpatrick',\n", + " 'show',\n", + " 'amazin',\n", + " 'person',\n", + " 'take',\n", + " 'earlier',\n", + " 'comment',\n", + " 'b',\n", + " 'superstar',\n", + " 'synwpn',\n", + " 'whi',\n", + " 'wan',\n", + " 'stalk',\n", + " 'anyway',\n", + " 'chelseamoss',\n", + " 'everyth',\n", + " 'summer',\n", + " 'far',\n", + " 'good',\n", + " 'ashleigharsen',\n", + " 'also',\n", + " 'lemonhead',\n", + " 'delici',\n", + " 'plea',\n", + " 'compar',\n", + " 'one',\n", + " 'latinegro',\n", + " 'unfortun',\n", + " 'red',\n", + " 'robin',\n", + " 'famili',\n", + " 'friend',\n", + " 'perfect',\n", + " 'church',\n", + " 'lunch',\n", + " 'lora',\n", + " 'text',\n", + " 'around',\n", + " 'watch',\n", + " 'oc',\n", + " 'ye',\n", + " 'knockin',\n", + " 'night',\n", + " 'pointforwardpro',\n", + " 'omg',\n", + " 'thnk',\n", + " 'remind',\n", + " 'colleg',\n", + " 'right',\n", + " 'everytim',\n", + " 'spend',\n", + " 'front',\n", + " 'comput',\n", + " 'hurt',\n", + " 'home',\n", + " 'put',\n", + " 'bedtim',\n", + " 'becaus',\n", + " 'want',\n", + " 'sleep',\n", + " 'alon',\n", + " 'feliz',\n", + " 'de',\n", + " 'la',\n", + " 'madr',\n", + " 'godmommi',\n", + " 'sign',\n", + " 'contract',\n", + " 'apart',\n", + " 'need',\n", + " 'email',\n", + " 'contact',\n", + " 'check',\n", + " 'emailunlimit',\n", + " 'final',\n", + " 'broke',\n", + " 'hi',\n", + " 'casino',\n", + " 'habit',\n", + " 'lose',\n", + " 'next',\n", + " 'week',\n", + " 'afraid',\n", + " 'nightmar',\n", + " 'chees',\n", + " 'befor',\n", + " 'effect',\n", + " 'ravioli',\n", + " 'grill',\n", + " 'twitter',\n", + " 'product',\n", + " 'velvet',\n", + " 'cake',\n", + " 'speak',\n", + " 'sofiedevil',\n", + " 'left',\n", + " 'phone',\n", + " 'lie',\n", + " 'cough',\n", + " 'wonder',\n", + " 'anyon',\n", + " 'die',\n", + " 'seedi',\n", + " 'motel',\n", + " 'zombi',\n", + " 'shark',\n", + " 'tuesday',\n", + " 'woke',\n", + " 'pm',\n", + " 'fall',\n", + " 'asleep',\n", + " 'suck',\n", + " 'hour',\n", + " 'ie',\n", + " 'greek',\n", + " 'easter',\n", + " 'asian',\n", + " 'twist',\n", + " 'ashalale',\n", + " 'soo',\n", + " 'creativ',\n", + " 'gt',\n", + " 'thi',\n", + " 'must',\n", + " 'find',\n", + " 'someth',\n", + " 'fun',\n", + " 'blkpanther',\n", + " 'way',\n", + " 'seem',\n", + " 'somali',\n", + " 'civil',\n", + " 'war',\n", + " 'roto',\n", + " 'sadli',\n", + " 'espn',\n", + " 'gener',\n", + " 'medium',\n", + " 'kind',\n", + " 'thing',\n", + " 'amournoir',\n", + " 'work',\n", + " 'casualcottag',\n", + " 'big',\n", + " 'smiley',\n", + " 'face',\n", + " 'mybigg',\n", + " 'lolz',\n", + " 'wnba',\n", + " 'wrong',\n", + " 'live',\n", + " 'access',\n", + " 'graphic',\n", + " 'blog',\n", + " 'oprah',\n", + " 'thank',\n", + " 'share',\n", + " 'alexrk',\n", + " 'haha',\n", + " 'true',\n", + " 'alex',\n", + " 'ahhh',\n", + " 'anoth',\n", + " 'soon',\n", + " 'hmmm',\n", + " 'white',\n", + " 'tri',\n", + " 'chase',\n", + " 'couch',\n", + " 'yell',\n", + " 'rm',\n", + " 'poorer',\n", + " 'accident',\n", + " 'gave',\n", + " 'discount',\n", + " 'magazin',\n", + " 'sob',\n", + " 'twit',\n", + " 'juli',\n", + " 'nope',\n", + " 'yet',\n", + " 'scienc',\n", + " 'summ',\n", + " 'today',\n", + " 'jame',\n", + " 'buckley',\n", + " 'would',\n", + " 'end',\n", + " 'till',\n", + " 'weekend',\n", + " 'reschedul',\n", + " 'shower',\n", + " 'water',\n", + " 'frozen',\n", + " 'readi',\n", + " 'alway',\n", + " 'room',\n", + " 'veri',\n", + " 'hot',\n", + " 'sazp',\n", + " 'lush',\n", + " 'realiz',\n", + " 'tune',\n", + " 'thesixtyon',\n", + " 'com',\n", + " 'coupl',\n", + " 'nice',\n", + " 'daniboo',\n", + " 'hous',\n", + " 'woah',\n", + " 'rock',\n", + " 'life',\n", + " 'jesu',\n", + " 'takin',\n", + " 'step',\n", + " 'stuff',\n", + " 'food',\n", + " 'montanaon',\n", + " 'could',\n", + " 'flight',\n", + " 'agentpatgillen',\n", + " 'sure',\n", + " 'feelin',\n", + " 'trulli',\n", + " 'stune',\n", + " 'mr',\n", + " 'david',\n", + " 'carradin',\n", + " 'kungfu',\n", + " 'movi',\n", + " 'lushi',\n", + " 'dread',\n", + " 'deni',\n", + " 'danimarzillo',\n", + " 'ouch',\n", + " 'slice',\n", + " 'top',\n", + " 'finger',\n", + " 'gloriou',\n", + " 'sunshin',\n", + " 'bake',\n", + " 'browni',\n", + " 'sun',\n", + " 'yay',\n", + " 'boyl',\n", + " 'didnt',\n", + " 'win',\n", + " 'listen',\n", + " 'britney',\n", + " 'loveeess',\n", + " 'xoxo',\n", + " 'crush',\n", + " 'hardcor',\n", + " 'busi',\n", + " 'sore',\n", + " 'realli',\n", + " 'school',\n", + " 'ughh',\n", + " 'quot',\n", + " 'bbq',\n", + " 'outsid',\n", + " 'sweat',\n", + " 'smell',\n", + " 'yummi',\n", + " 'follwr',\n", + " 'drop',\n", + " 'hard',\n", + " 'tell',\n", + " 'spambot',\n", + " 'record',\n", + " 'stock',\n", + " 'nake',\n", + " 'ladi',\n", + " 'opportun',\n", + " 'dianhadinoto',\n", + " 'sweet',\n", + " 'sharlynnx',\n", + " 'aww',\n", + " 'naah',\n", + " 'favourit',\n", + " 'nighti',\n", + " 'cours',\n", + " 'delet',\n", + " 'dawson',\n", + " 'creek',\n", + " 'ol',\n", + " 'ruben',\n", + " 'spanish',\n", + " 'gp',\n", + " 'disappoint',\n", + " 'soft',\n", + " 'spot',\n", + " 'jcookonlin',\n", + " 'yeahhh',\n", + " 'mean',\n", + " 'someon',\n", + " 'fairli',\n", + " 'close',\n", + " 'knew',\n", + " 'sad',\n", + " 'camera',\n", + " 'nsenze',\n", + " 'onli',\n", + " 'wors',\n", + " 'suppos',\n", + " 'repli',\n", + " 'lalaitsmaria',\n", + " 'oh',\n", + " 'carliecarrcrash',\n", + " 'panaera',\n", + " 'four',\n", + " 'tonight',\n", + " 'best',\n", + " 'orlando',\n", + " 'girli',\n", + " 'backyard',\n", + " 'later',\n", + " 'afternoon',\n", + " 'real',\n", + " 'forev',\n", + " 'innoc',\n", + " 'word',\n", + " 'yr',\n", + " 'old',\n", + " 'hold',\n", + " 'even',\n", + " 'millionair',\n", + " 'driver',\n", + " 'spin',\n", + " 'crash',\n", + " 'super',\n", + " 'race',\n", + " 'machin',\n", + " 'raini',\n", + " 'shanghai',\n", + " 'simpli',\n", + " 'made',\n", + " 'fail',\n", + " 'darlingnickieb',\n", + " 'daaannnnggg',\n", + " 'porki',\n", + " 'xo',\n", + " 'handli',\n", + " 'mayb',\n", + " 'charlii',\n", + " 'yeah',\n", + " 'felt',\n", + " 'bad',\n", + " 'um',\n", + " 'ate',\n", + " 'rainbow',\n", + " 'paddl',\n", + " 'pop',\n", + " 'xx',\n", + " 'sethu',\n", + " 'j',\n", + " 'thought',\n", + " 'exactli',\n", + " 'fuck',\n", + " 'er',\n", + " 'girl',\n", + " 'enjoy',\n", + " 'wknd',\n", + " 'might',\n", + " 'landd',\n", + " 'foca',\n", + " 'nesslle',\n", + " 'x',\n", + " 'men',\n", + " 'fan',\n", + " 'paola',\n", + " 'total',\n", + " 'hugh',\n", + " 'gif',\n", + " 'cute',\n", + " 'norm',\n", + " 'cant',\n", + " 'tom',\n", + " 'isnt',\n", + " 'n',\n", + " 'fave',\n", + " 'guess',\n", + " 'hahahha',\n", + " 'pretti',\n", + " 'tea',\n", + " 'thigh',\n", + " 'interfac',\n", + " 'nrwi',\n", + " 'throw',\n", + " 'heavi',\n", + " 'object',\n", + " 'snore',\n", + " 'hezmcfli',\n", + " 'definit',\n", + " 'damn',\n", + " 'sick',\n", + " 'studi',\n", + " 'law',\n", + " 'leav',\n", + " 'stra',\n", + " 'doubl',\n", + " 'ea',\n", + " 'bradford',\n", + " 'aw',\n", + " 'shut',\n", + " 'lol',\n", + " 'superbad',\n", + " 'ashkiiwil',\n", + " 'sportsgirlsplay',\n", + " 'coach',\n", + " 'forc',\n", + " 'retir',\n", + " 'year',\n", + " 'ago',\n", + " 'due',\n", + " 'injuri',\n", + " 'terrinixon',\n", + " 'laugh',\n", + " 'oral',\n", + " 'present',\n", + " 'monday',\n", + " 'whole',\n", + " 'johnherman',\n", + " 'congrat',\n", + " 'deliveri',\n", + " 'trust',\n", + " 'theoshu',\n", + " 'oishi',\n", + " 'cheap',\n", + " 'satisfi',\n", + " 'sushi',\n", + " 'soup',\n", + " 'excel',\n", + " 'edward',\n", + " 'dumb',\n", + " 'twin',\n", + " 'rabbitport',\n", + " 'charact',\n", + " 'tuna',\n", + " 'sandwich',\n", + " 'done',\n", + " 'mayson',\n", + " 'youu',\n", + " 'eu',\n", + " 'queria',\n", + " 'que',\n", + " 'era',\n", + " 'rewind',\n", + " 'fo',\n", + " 'pr',\n", + " 'ximo',\n", + " 'singl',\n", + " 'ou',\n", + " 'without',\n", + " 'worst',\n", + " 'ever',\n", + " 'fml',\n", + " 'fashion',\n", + " 'statement',\n", + " 'head',\n", + " 'scarf',\n", + " 'style',\n", + " 'doin',\n", + " 'mama',\n", + " 'yoyoemma',\n", + " 'ceekaigax',\n", + " 'away',\n", + " 'fulli',\n", + " 'woken',\n", + " 'winterchick',\n", + " 'nah',\n", + " 'write',\n", + " 'wrote',\n", + " 'basic',\n", + " 'idea',\n", + " 'breakfast',\n", + " 'sat',\n", + " 'zach',\n", + " 'ashleeeyyyyy',\n", + " 'tushsharma',\n", + " 'uh',\n", + " 'huh',\n", + " 'fellow',\n", + " 'unit',\n", + " 'cooki',\n", + " 'mood',\n", + " 'bos',\n", + " 'bitch',\n", + " 'endlessli',\n", + " 'cre',\n", + " 'tvdirektr',\n", + " 'wow',\n", + " 'nurseju',\n", + " 'earli',\n", + " 'taxi',\n", + " 'worth',\n", + " 'give',\n", + " 'beamer',\n", + " 'washhhh',\n", + " 'mamzellef',\n", + " 'dad',\n", + " 'tallk',\n", + " 'fix',\n", + " 'weareleet',\n", + " 'hungov',\n", + " 'greasi',\n", + " 'noth',\n", + " 'help',\n", + " 'keep',\n", + " 'run',\n", + " 'truth',\n", + " 'hw',\n", + " 'may',\n", + " 'bother',\n", + " 'meraki',\n", + " 'blanket',\n", + " 'san',\n", + " 'fran',\n", + " 'free',\n", + " 'wi',\n", + " 'fi',\n", + " 'news',\n", + " 'sheilafightseb',\n", + " 'sheila',\n", + " 'riddl',\n", + " 'horni',\n", + " 'kitti',\n", + " 'funni',\n", + " 'accur',\n", + " 'pest',\n", + " 'whiteplum',\n", + " 'inde',\n", + " 'bet',\n", + " 'dog',\n", + " 'bun',\n", + " 'sea',\n", + " 'garbag',\n", + " 'truck',\n", + " 'guy',\n", + " 'plenti',\n", + " 'flashbelt',\n", + " 'tue',\n", + " 'wen',\n", + " 'beacus',\n", + " 'ex',\n", + " 'girlfrend',\n", + " 'plussizemommi',\n", + " 'reason',\n", + " 'open',\n", + " 'found',\n", + " 'whew',\n", + " 'collabor',\n", + " 'admit',\n", + " 'aka',\n", + " 'kristin',\n", + " 'daynaroselli',\n", + " 'elev',\n", + " 'favorit',\n", + " 'danddncgirl',\n", + " 'sorri',\n", + " 'hear',\n", + " 'part',\n", + " 'phx',\n", + " 'rel',\n", + " 'dmosley',\n", + " 'goingbto',\n", + " 'ohsailor',\n", + " 'sri',\n", + " 'bb',\n", + " 'chrissyjohnson',\n", + " 'jacki',\n", + " 'fair',\n", + " 'tomm',\n", + " 'sunday',\n", + " 'rachaelxxo',\n", + " 'oooh',\n", + " 'question',\n", + " 'mark',\n", + " 'quit',\n", + " 'pick',\n", + " 'aah',\n", + " 'annoy',\n", + " 'throat',\n", + " 'seandonaho',\n", + " 'ad',\n", + " 'sergverdi',\n", + " 'lesli',\n", + " 'vfcst',\n", + " 'ouchh',\n", + " 'yea',\n", + " 'aim',\n", + " 'talk',\n", + " 'mee',\n", + " 'laptop',\n", + " 'freak',\n", + " 'piss',\n", + " 'jerk',\n", + " 'heart',\n", + " 'yank',\n", + " 'bryanlyt',\n", + " 'certain',\n", + " 'area',\n", + " 'utama',\n", + " 'kota',\n", + " 'dsara',\n", + " 'mayhemmil',\n", + " 'elli',\n", + " 'defin',\n", + " 'faction',\n", + " 'hell',\n", + " 'son',\n", + " 'cat',\n", + " 'unpack',\n", + " 'miklo',\n", + " 'victori',\n", + " 'park',\n", + " 'twilight',\n", + " 'lineup',\n", + " 'bummer',\n", + " 'proud',\n", + " 'kill',\n", + " 'thursday',\n", + " 'aye',\n", + " 'xcspeed',\n", + " 'south',\n", + " 'padr',\n", + " 'island',\n", + " 'tommorow',\n", + " 'schlitterban',\n", + " 'ali',\n", + " 'davi',\n", + " 'lucki',\n", + " 'student',\n", + " 'teach',\n", + " 'point',\n", + " 'ncheck',\n", + " 'servic',\n", + " 'number',\n", + " 'gb',\n", + " 'gorgeou',\n", + " 'weather',\n", + " 'bike',\n", + " 'london',\n", + " 'babi',\n", + " 'refil',\n", + " 'bttle',\n", + " 'gym',\n", + " 'fountain',\n", + " 'spilt',\n", + " 'evrywhr',\n", + " 'embarress',\n", + " 'controversi',\n", + " 'link',\n", + " 'privat',\n", + " 'wahhh',\n", + " 'restart',\n", + " 'heheh',\n", + " 'jonasbroth',\n", + " 'bf',\n", + " 'weird',\n", + " 'let',\n", + " 'updat',\n", + " 'follow',\n", + " 'deathli',\n", + " 'hangov',\n", + " 'morn',\n", + " 'puke',\n", + " 'zorb',\n", + " 'buffet',\n", + " 'swag',\n", + " 'bag',\n", + " 'panten',\n", + " 'shoppen',\n", + " 'toll',\n", + " 'un',\n", + " 'tina',\n", + " 'getroffen',\n", + " 'yez',\n", + " 'pc',\n", + " 'gammeln',\n", + " 'chakatsunstreak',\n", + " 'small',\n", + " 'math',\n", + " 'yes',\n", + " 'horribl',\n", + " 'excit',\n", + " 'microsoft',\n", + " 'confer',\n", + " 'late',\n", + " 'awesom',\n", + " 'afro',\n", + " 'ffxiii',\n", + " 'w',\n", + " 'shelley',\n", + " 'airport',\n", + " 'nephew',\n", + " 'kat',\n", + " 'dentist',\n", + " 'brace',\n", + " 'monicaa',\n", + " 'sengupta',\n", + " 'krist',\n", + " 'ph',\n", + " 'r',\n", + " 'repeat',\n", + " 'parentstud',\n", + " 'marcolaureano',\n", + " 'welcom',\n", + " 'non',\n", + " 'stop',\n", + " 'tweet',\n", + " 'johnkuan',\n", + " 'pronaz',\n", + " 'raj',\n", + " 'lebron',\n", + " 'v',\n", + " 'kobe',\n", + " 'least',\n", + " 'yanke',\n", + " 'gah',\n", + " 'mimic',\n", + " 'ubisoft',\n", + " 'littl',\n", + " 'orient',\n", + " 'eminem',\n", + " 'track',\n", + " 'formula',\n", + " 'seriou',\n", + " 'arf',\n", + " 'guinea',\n", + " 'pig',\n", + " 'dine',\n", + " 'noisi',\n", + " 'doggi',\n", + " 'ryke',\n", + " 'whether',\n", + " 'includ',\n", + " 'straight',\n", + " 'latest',\n", + " 'report',\n", + " 'surviv',\n", + " 'recess',\n", + " 'ask',\n", + " 'www',\n", + " 'bgacceler',\n", + " 'episod',\n", + " 'simpson',\n", + " 'pollinatewildli',\n", + " 'catalyt',\n", + " 'convert',\n", + " 'broken',\n", + " 'cost',\n", + " 'sold',\n", + " 'max',\n", + " 'settin',\n", + " 'websit',\n", + " 'whoa',\n", + " 'ethansuple',\n", + " 'boy',\n", + " 'freakin',\n", + " 'strong',\n", + " 'weakest',\n", + " 'rorzshach',\n", + " 'devon',\n", + " 'hahaha',\n", + " 'freed',\n", + " 'prison',\n", + " 'ah',\n", + " 'freedom',\n", + " 'princesssuperc',\n", + " 'shoot',\n", + " 'delboy',\n", + " 'promot',\n", + " 'doe',\n", + " 'lindasmith',\n", + " 'pharmaci',\n", + " 'dalla',\n", + " 'hawaii',\n", + " 'friday',\n", + " 'cowboyhazel',\n", + " 'ok',\n", + " 'tip',\n", + " 'plurk',\n", + " 'hellasia',\n", + " 'stu',\n", + " 'gg',\n", + " 'young',\n", + " 'world',\n", + " 'foot',\n", + " 'killin',\n", + " 'name',\n", + " 'better',\n", + " 'ahead',\n", + " 'ashleebiscuit',\n", + " 'fell',\n", + " 'fring',\n", + " 'hang',\n", + " 'puppi',\n", + " 'pakc',\n", + " 'texa',\n", + " 'mission',\n", + " 'jessemccartney',\n", + " 'ughhh',\n", + " 'c',\n", + " 'sooo',\n", + " 'longer',\n", + " 'term',\n", + " 'trick',\n", + " 'jennybdesign',\n", + " 'correct',\n", + " 'goe',\n", + " 'public',\n", + " 'lottaburg',\n", + " 'jam',\n", + " 'fireflight',\n", + " ...]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cfdist = nltk.FreqDist()\n", + "\n", + "for tweet in sample['text_processed']:\n", + " for word in tweet:\n", + " cfdist[word] += 1\n", + "\n", + "top_words = list(cfdist.keys())[:5000]\n", + "top_words" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Building Features\n", + "\n", + "Now let's build the features. Using the top 5,000 words, create a 2-dimensional matrix to record whether each of those words is contained in each document (tweet). Then you also have an output column to indicate whether the sentiment in each tweet is positive. For example, assuming your bag of words has 5 items (`['one', 'two', 'three', 'four', 'five']`) out of 4 documents (`['A', 'B', 'C', 'D']`), your feature set is essentially:\n", + "\n", + "| Doc | one | two | three | four | five | is_positive |\n", + "|---|---|---|---|---|---|---|\n", + "| A | True | False | False | True | False | True |\n", + "| B | False | False | False | True | True | False |\n", + "| C | False | True | False | False | False | True |\n", + "| D | True | False | False | False | True | False|\n", + "\n", + "However, because the `nltk.NaiveBayesClassifier.train` class we will use in the next step does not work with Pandas dataframe, the structure of your feature set should be converted to the Python list looking like below:\n", + "\n", + "```python\n", + "[\n", + "\t({\n", + "\t\t'one': True,\n", + "\t\t'two': False,\n", + "\t\t'three': False,\n", + "\t\t'four': True,\n", + "\t\t'five': False\n", + "\t}, True),\n", + "\t({\n", + "\t\t'one': False,\n", + "\t\t'two': False,\n", + "\t\t'three': False,\n", + "\t\t'four': True,\n", + "\t\t'five': True\n", + "\t}, False),\n", + "\t({\n", + "\t\t'one': False,\n", + "\t\t'two': True,\n", + "\t\t'three': False,\n", + "\t\t'four': False,\n", + "\t\t'five': False\n", + "\t}, True),\n", + "\t({\n", + "\t\t'one': True,\n", + "\t\t'two': False,\n", + "\t\t'three': False,\n", + "\t\t'four': False,\n", + "\t\t'five': True\n", + "\t}, False)\n", + "]\n", + "```\n", + "\n", + "To help you in this step, watch the [following video](https://www.youtube.com/watch?v=-vVskDsHcVc) to learn how to build the feature set with Python and NLTK. The source code in this video can be found [here](https://pythonprogramming.net/words-as-features-nltk-tutorial/)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[![Building Features](building-features.jpg)](https://www.youtube.com/watch?v=-vVskDsHcVc)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "20000\n" + ] + } + ], + "source": [ + "def find_features(document):\n", + " words = set(document)\n", + " features = {}\n", + " for w in top_words:\n", + " features[w] = (w in words)\n", + " \n", + " return features\n", + " \n", + "feature_sets = [(find_features(tweet), target) for (tweet, target) in list(zip(sample['text_processed'], sample['target']))]\n", + "print(len(feature_sets))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Building and Traininng Naive Bayes Model\n", + "\n", + "In this step you will split your feature set into a training and a test set. Then you will create a Bayes classifier instance using `nltk.NaiveBayesClassifier.train` ([example](https://www.nltk.org/book/ch06.html)) to train with the training dataset.\n", + "\n", + "After training the model, call `classifier.show_most_informative_features()` to inspect the most important features. The output will look like:\n", + "\n", + "```\n", + "Most Informative Features\n", + "\t snow = True False : True = 34.3 : 1.0\n", + "\t easter = True False : True = 26.2 : 1.0\n", + "\t headach = True False : True = 20.9 : 1.0\n", + "\t argh = True False : True = 17.6 : 1.0\n", + "\tunfortun = True False : True = 16.9 : 1.0\n", + "\t jona = True True : False = 16.2 : 1.0\n", + "\t ach = True False : True = 14.9 : 1.0\n", + "\t sad = True False : True = 13.0 : 1.0\n", + "\t parent = True False : True = 12.9 : 1.0\n", + "\t spring = True False : True = 12.7 : 1.0\n", + "```\n", + "\n", + "The [following video](https://www.youtube.com/watch?v=rISOsUaTrO4) will help you complete this step. The source code in this video can be found [here](https://pythonprogramming.net/naive-bayes-classifier-nltk-tutorial/)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[![Building and Training NB](nb-model-building.jpg)](https://www.youtube.com/watch?v=rISOsUaTrO4)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "train_set, test_set = feature_sets[:10000], feature_sets[10000:]\n", + "classifier = nltk.NaiveBayesClassifier.train(train_set)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Testing Naive Bayes Model\n", + "\n", + "Now we'll test our classifier with the test dataset. This is done by calling `nltk.classify.accuracy(classifier, test)`.\n", + "\n", + "As mentioned in one of the tutorial videos, a Naive Bayes model is considered OK if your accuracy score is over 0.6. If your accuracy score is over 0.7, you've done a great job!" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.7162\n", + "Most Informative Features\n", + " sad = True 0 : 1 = 22.1 : 1.0\n", + " sick = True 0 : 1 = 16.5 : 1.0\n", + " headach = True 0 : 1 = 15.8 : 1.0\n", + " bum = True 0 : 1 = 13.3 : 1.0\n", + " hospit = True 0 : 1 = 12.7 : 1.0\n" + ] + } + ], + "source": [ + "print(nltk.classify.accuracy(classifier, test_set))\n", + "classifier.show_most_informative_features(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Bonus Question 1: Improve Model Performance\n", + "\n", + "If you are still not exhausted so far and want to dig deeper, try to improve your classifier performance. There are many aspects you can dig into, for example:\n", + "\n", + "* Improve stemming and lemmatization. Inspect your bag of words and the most important features. Are there any words you should furuther remove from analysis? You can append these words to further remove to the stop words list.\n", + "\n", + "* Remember we only used the top 5,000 features to build model? Try using different numbers of top features. The bottom line is to use as few features as you can without compromising your model performance. The fewer features you select into your model, the faster your model is trained. Then you can use a larger sample size to improve your model accuracy score." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# your code here" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Bonus Question 2: Machine Learning Pipeline\n", + "\n", + "In a new Jupyter Notebook, combine all your codes into a function (or a class). Your new function will execute the complete machine learning pipeline job by receiving the dataset location and output the classifier. This will allow you to use your function to predict the sentiment of any tweet in real time. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# your code here" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Bonus Question 3: Apache Spark\n", + "\n", + "If you have completed the Apache Spark advanced topic lab, what you can do is to migrate your pipeline from local to a Databricks Notebook. Share your notebook with your instructor and classmates to show off your achievements!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# your code here" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/your-code/data-cleaning-results.png b/your-code/data-cleaning-results.png new file mode 100644 index 0000000000000000000000000000000000000000..59f91c307983ac4c4dbc00fafd678d7edec11733 GIT binary patch literal 76856 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 OeAHpu%4JGcq5lCa(&Eej literal 0 HcmV?d00001 diff --git a/your-code/lab_boston_housing.ipynb b/your-code/lab_boston_housing.ipynb deleted file mode 100644 index 3176602..0000000 --- a/your-code/lab_boston_housing.ipynb +++ /dev/null @@ -1,298 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Understanding Over & Underfitting\n", - "## Predicting Boston Housing Prices" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Getting Started\n", - "In this project, you will use the Boston Housing Prices dataset to build several models to predict the prices of homes with particular qualities from the suburbs of Boston, MA.\n", - "We will build models with several different parameters, which will change the goodness of fit for each. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "---\n", - "## Data Exploration\n", - "Since we want to predict the value of houses, the **target variable**, `'MEDV'`, will be the variable we seek to predict." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Import and explore the data. Clean the data for outliers and missing values. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Next, we want to explore the data. Pick several varibables you think will be ost correlated with the prices of homes in Boston, and create plots that show the data dispersion as well as the regression line of best fit." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your plots here" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### What do these plots tell you about the relationships between these variables and the prices of homes in Boston? Are these the relationships you expected to see in these variables?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your response here" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Make a heatmap of the remaining variables. Are there any variables that you did not consider that have very high correlations? What are they?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your response here" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Calculate Statistics\n", - "Calculate descriptive statistics for housing price. Include the minimum, maximum, mean, median, and standard deviation. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "----\n", - "\n", - "## Developing a Model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Implementation: Define a Performance Metric\n", - "What is the performance meteric with which you will determine the performance of your model? Create a function that calculates this performance metric, and then returns the score. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.metrics import r2_score\n", - "\n", - "def performance_metric(y_true, y_predict):\n", - " \"\"\" Calculates and returns the performance score between \n", - " true and predicted values based on the metric chosen. \"\"\"\n", - " # Your code here:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Implementation: Shuffle and Split Data\n", - "Split the data into the testing and training datasets. Shuffle the data as well to remove any bias in selecting the traing and test. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "----\n", - "\n", - "## Analyzing Model Performance\n", - "Next, we are going to build a Random Forest Regressor, and test its performance with several different parameter settings." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Learning Curves\n", - "Lets build the different models. Set the max_depth parameter to 2, 4, 6, 8, and 10 respectively. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Five separate RFR here with the given max depths" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now, plot the score for each tree on the training set and on the testing set." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "# Produce a plot with the score for the testing and training for the different max depths" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "What do these results tell you about the effect of the depth of the trees on the performance of the model?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your response here" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Bias-Variance Tradeoff\n", - "When the model is trained with a maximum depth of 1, does the model suffer from high bias or from high variance? How about when the model is trained with a maximum depth of 10? Check out this article before answering: https://towardsdatascience.com/understanding-the-bias-variance-tradeoff-165e6942b229" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your response here" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Best-Guess Optimal Model\n", - "What is the max_depth parameter that you think would optimize the model? Run your model and explain its performance." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your response here" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Applicability\n", - "*In a few sentences, discuss whether the constructed model should or should not be used in a real-world setting.* \n", - "**Hint:** Some questions to answering:\n", - "- *How relevant today is data that was collected from 1978?*\n", - "- *Are the features present in the data sufficient to describe a home?*\n", - "- *Is the model robust enough to make consistent predictions?*\n", - "- *Would data collected in an urban city like Boston be applicable in a rural city?*" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your response here" - ] - } - ], - "metadata": { - "anaconda-cloud": {}, - "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.7.2" - } - }, - "nbformat": 4, - "nbformat_minor": 1 -} diff --git a/your-code/lab_overfitting.ipynb b/your-code/lab_overfitting.ipynb deleted file mode 100644 index 3776411..0000000 --- a/your-code/lab_overfitting.ipynb +++ /dev/null @@ -1,226 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Overfitting\n", - "## In this lab, we are going to explore how thoughtfully choosing a model and using test set are important parts of avoiding overfitting. \n", - "\n", - "We are going to apply these concepts to a classification model. We want to develop a decision boundary, on one side of which we have class A and on the other we have class B.\n", - "\n", - "Like we disussed in class, when we have noisy data, if we are not careful, we can end up fitting our model to the noise in the data and not the 'signal'-- the factors that actually determine the outcome. This is called overfitting, and results in good results in training, and in bad results when the model is applied to real data. Similarly, we could have a model that is too simplistic to accurately model the signal. This produces a model that doesnt work well (ever), and sucks only slightly less than overfitting. At least your model performs consistently bad :)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### First, we are going to generate some synthetic data. To make these concepts visual, we are going to generate this data to be concentric circles. Run the code below to do so. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import pandas as pd\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "from IPython.display import display\n", - "\n", - "# Makin' some data\n", - "from sklearn.datasets import make_circles\n", - "X, y = make_circles(noise=0.2, factor=0.5, random_state=1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### As our classification algorithm, we are going to use a type of SVM with a radial basis function. This basically works by mapping each point into a higher dimensional space that can be split by the SVM (gross oversimplificaiton). That looks something like this:\n", - "![RBFSVM.png](../images/RBFSVM.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### We can change thecomplexity of the decision boundaries applied by the SVM by changignt the size of the radial basis function, through the parameter 'gamma'.\n", - "\n", - "Instantiate a list of three SVM classifiers with three different gamma parameters, (.001, 1, and 20)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Now, we are going to plot the boundaries created by each of these classifiers with the points we generated. Run the following code to make three graphs of each SVM classifier." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from matplotlib.colors import ListedColormap\n", - "\n", - "figure = plt.figure(figsize=(12, 6))\n", - "i = 1\n", - "h = .02 # step size in the mesh\n", - "x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5\n", - "y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5\n", - "xx, yy = np.meshgrid(np.arange(x_min, x_max, h),\n", - " np.arange(y_min, y_max, h))\n", - "cm = plt.cm.RdBu\n", - "cm_bright = ListedColormap(['#FF0000', '#0000FF'])\n", - "\n", - "names = ['gamma = 0.001', 'gamma = 1', 'gamma = 20']\n", - "\n", - "# iterate over classifiers\n", - "for name, clf in zip(names, classifiers):\n", - " ax = plt.subplot(1, len(classifiers), i)\n", - " clf.fit(X, y)\n", - "\n", - " # Plot the decision boundary. For that, we will assign a color to each\n", - " # point in the mesh [x_min, x_max]x[y_min, y_max].\n", - " if hasattr(clf, \"decision_function\"):\n", - " Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])\n", - " else:\n", - " Z = clf.predict_proba(np.c_[xx.ravel(), yy.ravel()])[:, 1]\n", - "\n", - " # Put the result into a color plot\n", - " Z = Z.reshape(xx.shape)\n", - " ax.contourf(xx, yy, Z, cmap=cm, alpha=.8)\n", - "\n", - " ax.scatter(X[:, 0], X[:, 1], c=y, cmap=cm_bright)\n", - "\n", - " ax.set_xlim(xx.min(), xx.max())\n", - " ax.set_ylim(yy.min(), yy.max())\n", - " ax.set_xticks(())\n", - " ax.set_yticks(())\n", - " ax.set_title(name)\n", - " i += 1\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Where the contour is red, we will predict red, and same for blue; white means there is a 50/50 chance of either class\n", - "Explain what you see in the plots above.\n", - "\n", - "Which gamma do you think fits the data best? \n", - "\n", - "What would you select as the opitmal gamma?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your response here" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Without having used a training and testing set, lets see what our accuracy score would be for, for example, a gamma of .7. Use the .score() method." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Wow thats good accuracy! But is it generalizable? Make a test/train split and see how the model performs on the SVM with the gamma of 20. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Try with some of the other gammas to see how the accuracy score changes after implementing a test/train split. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Was your previous model overfitting? If so, how would you try to improve this model to prevent this?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your response here" - ] - } - ], - "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.8" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/your-code/nb-model-building.jpg b/your-code/nb-model-building.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f42bbe2e4609f1dc21a3452ec0a3247e614a4e87 GIT binary patch literal 38413 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