Skip to content

Instantly share code, notes, and snippets.

@aparrish
Last active October 23, 2020 10:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save aparrish/541c43d223c3a0f18a73a8ec68d9110d to your computer and use it in GitHub Desktop.
Save aparrish/541c43d223c3a0f18a73a8ec68d9110d to your computer and use it in GitHub Desktop.
a bad idea. code and text released under CC0 https://creativecommons.org/choose/zero/
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Text prediction with linear regression\n",
"\n",
"It's not very effective..."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"pd.set_option('max_rows', 25)\n",
"plt.style.use('ggplot')\n",
"plt.rcParams[\"figure.figsize\"] = (10, 4)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from sklearn.linear_model import LinearRegression"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Read in some sonnets."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"text = open(\"sonnets.txt\").read()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This function maps an incoming character to a value from zero to 26 (inclusive). If the character is an alphanumeric, it maps the character's value to 1-26 (A-Z); any other character is a zero."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"26"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def chr2val(ch):\n",
" ch = ch.lower()\n",
" if ch.isalpha():\n",
" return 1 + (ord(ch) - ord('a'))\n",
" else:\n",
" return 0\n",
"chr2val(\"z\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The inverse:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'h'"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def val2chr(v):\n",
" v = int(round(v))\n",
" if v == 0:\n",
" return ' '\n",
" else:\n",
" return chr(ord('a') + v - 1)\n",
"val2chr(7.8)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We'll make a simple list of all the bigrams in the text, represented as integers."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"bigrams = [(chr2val(a), chr2val(b)) for a, b in zip(text.lower()[:-1], text.lower()[1:])]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"... and then load them into a DataFrame:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df = pd.DataFrame(bigrams, columns=[\"a\", \"b\"])"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>a</th>\n",
" <th>b</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>6</td>\n",
" <td>18</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>18</td>\n",
" <td>15</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>15</td>\n",
" <td>13</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>13</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>0</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>6</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>1</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>9</td>\n",
" <td>18</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>18</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>5</td>\n",
" <td>19</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>19</td>\n",
" <td>20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94721</th>\n",
" <td>19</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94722</th>\n",
" <td>0</td>\n",
" <td>14</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94723</th>\n",
" <td>14</td>\n",
" <td>15</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94724</th>\n",
" <td>15</td>\n",
" <td>20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94725</th>\n",
" <td>20</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94726</th>\n",
" <td>0</td>\n",
" <td>12</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94727</th>\n",
" <td>12</td>\n",
" <td>15</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94728</th>\n",
" <td>15</td>\n",
" <td>22</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94729</th>\n",
" <td>22</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94730</th>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94731</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94732</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>94733 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" a b\n",
"0 0 6\n",
"1 6 18\n",
"2 18 15\n",
"3 15 13\n",
"4 13 0\n",
"5 0 6\n",
"6 6 1\n",
"7 1 9\n",
"8 9 18\n",
"9 18 5\n",
"10 5 19\n",
"11 19 20\n",
"... .. ..\n",
"94721 19 0\n",
"94722 0 14\n",
"94723 14 15\n",
"94724 15 20\n",
"94725 20 0\n",
"94726 0 12\n",
"94727 12 15\n",
"94728 15 22\n",
"94729 22 5\n",
"94730 5 0\n",
"94731 0 0\n",
"94732 0 0\n",
"\n",
"[94733 rows x 2 columns]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here's what the data look like:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x116454400>"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x117a8a128>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df.plot(kind=\"scatter\", x=\"a\", y=\"b\", alpha=0.002)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Given a value in the first column, we should be able to predict the value in the second column. What algorithm will we use? Why not linear regression?"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ols = LinearRegression()\n",
"ols.fit(df[\"a\"].values.reshape(-1, 1), df[\"b\"].values.reshape(-1, 1))"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x117a63f60>]"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nJnziE59g0pYnfX19OH36NG666SaeDw5JHgOfz+fac4EJGRnpiSeeQH19PQYGBvDNb34TixYtwsqV\nK53uVlHzeDzweDxOd6Mobdy4EQ888AAA4Kc//Smee+45fPazn3W4V+4XDoexe/duPPzww6isrEz5\nfzwf8kMeAzefC1yyTFJfX48rV64k4itXrqC+vt7BHhUvcdxramqwZs0anDp1yuEeFaeamhoEg0EA\nQDAY5J4+h9TW1sLr9cLr9WLDhg344x//6HSXXC8SiWD37t1Yt24d7rzzTgA8H/It0xi4+VxgQpbk\nPe95Dy5evIi+vj5EIhEcOXIEd9xxh9PdKjrhcBgjIyOJ/37rrbewZMkSh3tVnO644w4cPnwYAHD4\n8GGsWbPG4R4VJ5EEAMAbb7yBG264wcHeuF88HsfTTz+NxsZGbN68OfE6z4f8mWoM3HwusDCspLOz\nEz/+8Y8Ri8Vw9913Y9u2bU53qehcunQJ3/3udwEA0WgUH/jABzgOefDkk0+iq6sLQ0NDqKmpwcc+\n9jGsWbMGe/bsgd/v523+eZJpHI4fP46enh54PB7MmzcPjzzySGIvE+nn8/mwY8cOLFmyJLEsuX37\ndixfvpznQ55MNQavv/66a88FJmREREREDuOSJREREZHDmJAREREROYwJGREREZHDmJAREREROYwJ\nGREREZHDmJAREREROYwJGREREZHDmJAREREROYwPFyeiotbW1oaDBw9iYGAAc+fOxfbt2/H+97/f\n6W4RUZFhpX4iKmr/8i//ghUrVqC2tha/+93v8IMf/ADf+973XPM4FiIqDFyyJKKi9qd/+qeor6+H\n1+vF2rVrsXDhQpw6dcrpbhFRkeGSJREVtcOHD2P//v24fPkyACAcDmNoaMjhXhFRsWFCRkRF6/Ll\ny3jmmWewY8cO3HzzzfB6vfjSl74E7uQgonzjkiURFa3R0VF4PB5UV1cDAF599VX827/9m8O9IqJi\nxBkyIipaixcvxubNm/HVr34VXq8XH/zgB7FixQqnu0VERYh3WRIRERE5jEuWRERERA5jQkZERETk\nMCZkRERERA5jQkZERETkMCZkRERERA5jQkZERETkMCZkRERERA5jQkZERETkMCZkRERERA77/wGn\nXRXv2OkEFAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x117a63e80>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df.plot(kind=\"scatter\", x=\"a\", y=\"b\", alpha=0.002)\n",
"plt.plot(df[\"a\"].values, ols.predict(df[\"a\"].values.reshape(-1, 1)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Given the character `a`, the linear regression predicts that the next character will be..."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'j'"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"val2chr(ols.predict(chr2val(\"a\"))[0][0])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A `j`. Good enough for me! Let's chain the predictions together and see what comes out!"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"jiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\n",
"ejiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\n",
"bjiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\n",
"fjiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\n",
"jiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\n",
"whjiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\n",
"liiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\n",
"ajiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\n",
"jiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\n",
"oiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\n",
"cjiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\n",
"thiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\n",
"vhjiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\n",
"kiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii\n"
]
}
],
"source": [
"for i in range(14):\n",
" output = [np.array([[np.random.uniform()*27]])]\n",
" for i in range(60):\n",
" nextv = ols.predict(output[-1])\n",
" output.append(nextv)\n",
" print(''.join([val2chr(i[0][0]) for i in output]))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"😚👌 perfect"
]
}
],
"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
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment