1033 lines
104 KiB
Plaintext
1033 lines
104 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# KMeans issues\n",
|
|
"> - Choose number of clusters *k* \n",
|
|
"> - Choose an **objective function** for selecting *k* \n",
|
|
"> - Try various values of *k* such that the **value of objective function** is maximized or minimized \n",
|
|
"> - **Objective function** is **Sum Squared Distance** \n",
|
|
"> - **Elbow method** is a popular way of choosing *k* \n",
|
|
"#### Reference: https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Wholesale Data\n",
|
|
"### Feature 1: Types of products (Fresh, Milk, Grocery, Frozen, Detergents, Delicassen)\n",
|
|
"### Feature 2: Purchasing behavior (Channel and Region) "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import matplotlib.pyplot as plt\n",
|
|
"%matplotlib inline\n",
|
|
"import pandas as pd\n",
|
|
"wholesale = pd.read_csv(\"Wholesale_customers_data.csv\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>Channel</th>\n",
|
|
" <th>Region</th>\n",
|
|
" <th>Fresh</th>\n",
|
|
" <th>Milk</th>\n",
|
|
" <th>Grocery</th>\n",
|
|
" <th>Frozen</th>\n",
|
|
" <th>Detergents_Paper</th>\n",
|
|
" <th>Delicassen</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>2</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>12669</td>\n",
|
|
" <td>9656</td>\n",
|
|
" <td>7561</td>\n",
|
|
" <td>214</td>\n",
|
|
" <td>2674</td>\n",
|
|
" <td>1338</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>2</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>7057</td>\n",
|
|
" <td>9810</td>\n",
|
|
" <td>9568</td>\n",
|
|
" <td>1762</td>\n",
|
|
" <td>3293</td>\n",
|
|
" <td>1776</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>2</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>6353</td>\n",
|
|
" <td>8808</td>\n",
|
|
" <td>7684</td>\n",
|
|
" <td>2405</td>\n",
|
|
" <td>3516</td>\n",
|
|
" <td>7844</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>1</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>13265</td>\n",
|
|
" <td>1196</td>\n",
|
|
" <td>4221</td>\n",
|
|
" <td>6404</td>\n",
|
|
" <td>507</td>\n",
|
|
" <td>1788</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>2</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>22615</td>\n",
|
|
" <td>5410</td>\n",
|
|
" <td>7198</td>\n",
|
|
" <td>3915</td>\n",
|
|
" <td>1777</td>\n",
|
|
" <td>5185</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" Channel Region Fresh Milk Grocery Frozen Detergents_Paper Delicassen\n",
|
|
"0 2 3 12669 9656 7561 214 2674 1338\n",
|
|
"1 2 3 7057 9810 9568 1762 3293 1776\n",
|
|
"2 2 3 6353 8808 7684 2405 3516 7844\n",
|
|
"3 1 3 13265 1196 4221 6404 507 1788\n",
|
|
"4 2 3 22615 5410 7198 3915 1777 5185"
|
|
]
|
|
},
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"wholesale.head()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"(440, 8)"
|
|
]
|
|
},
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"wholesale.shape"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"categorical_features = ['Channel', 'Region']\n",
|
|
"continuous_features = ['Fresh', 'Milk', 'Grocery', 'Frozen', \n",
|
|
" 'Detergents_Paper', 'Delicassen']"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>Fresh</th>\n",
|
|
" <th>Milk</th>\n",
|
|
" <th>Grocery</th>\n",
|
|
" <th>Frozen</th>\n",
|
|
" <th>Detergents_Paper</th>\n",
|
|
" <th>Delicassen</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>count</th>\n",
|
|
" <td>440.000000</td>\n",
|
|
" <td>440.000000</td>\n",
|
|
" <td>440.000000</td>\n",
|
|
" <td>440.000000</td>\n",
|
|
" <td>440.000000</td>\n",
|
|
" <td>440.000000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>mean</th>\n",
|
|
" <td>12000.297727</td>\n",
|
|
" <td>5796.265909</td>\n",
|
|
" <td>7951.277273</td>\n",
|
|
" <td>3071.931818</td>\n",
|
|
" <td>2881.493182</td>\n",
|
|
" <td>1524.870455</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>std</th>\n",
|
|
" <td>12647.328865</td>\n",
|
|
" <td>7380.377175</td>\n",
|
|
" <td>9503.162829</td>\n",
|
|
" <td>4854.673333</td>\n",
|
|
" <td>4767.854448</td>\n",
|
|
" <td>2820.105937</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>min</th>\n",
|
|
" <td>3.000000</td>\n",
|
|
" <td>55.000000</td>\n",
|
|
" <td>3.000000</td>\n",
|
|
" <td>25.000000</td>\n",
|
|
" <td>3.000000</td>\n",
|
|
" <td>3.000000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>25%</th>\n",
|
|
" <td>3127.750000</td>\n",
|
|
" <td>1533.000000</td>\n",
|
|
" <td>2153.000000</td>\n",
|
|
" <td>742.250000</td>\n",
|
|
" <td>256.750000</td>\n",
|
|
" <td>408.250000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>50%</th>\n",
|
|
" <td>8504.000000</td>\n",
|
|
" <td>3627.000000</td>\n",
|
|
" <td>4755.500000</td>\n",
|
|
" <td>1526.000000</td>\n",
|
|
" <td>816.500000</td>\n",
|
|
" <td>965.500000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>75%</th>\n",
|
|
" <td>16933.750000</td>\n",
|
|
" <td>7190.250000</td>\n",
|
|
" <td>10655.750000</td>\n",
|
|
" <td>3554.250000</td>\n",
|
|
" <td>3922.000000</td>\n",
|
|
" <td>1820.250000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>max</th>\n",
|
|
" <td>112151.000000</td>\n",
|
|
" <td>73498.000000</td>\n",
|
|
" <td>92780.000000</td>\n",
|
|
" <td>60869.000000</td>\n",
|
|
" <td>40827.000000</td>\n",
|
|
" <td>47943.000000</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" Fresh Milk Grocery Frozen \\\n",
|
|
"count 440.000000 440.000000 440.000000 440.000000 \n",
|
|
"mean 12000.297727 5796.265909 7951.277273 3071.931818 \n",
|
|
"std 12647.328865 7380.377175 9503.162829 4854.673333 \n",
|
|
"min 3.000000 55.000000 3.000000 25.000000 \n",
|
|
"25% 3127.750000 1533.000000 2153.000000 742.250000 \n",
|
|
"50% 8504.000000 3627.000000 4755.500000 1526.000000 \n",
|
|
"75% 16933.750000 7190.250000 10655.750000 3554.250000 \n",
|
|
"max 112151.000000 73498.000000 92780.000000 60869.000000 \n",
|
|
"\n",
|
|
" Detergents_Paper Delicassen \n",
|
|
"count 440.000000 440.000000 \n",
|
|
"mean 2881.493182 1524.870455 \n",
|
|
"std 4767.854448 2820.105937 \n",
|
|
"min 3.000000 3.000000 \n",
|
|
"25% 256.750000 408.250000 \n",
|
|
"50% 816.500000 965.500000 \n",
|
|
"75% 3922.000000 1820.250000 \n",
|
|
"max 40827.000000 47943.000000 "
|
|
]
|
|
},
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"wholesale[continuous_features].describe()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"df1 = wholesale[continuous_features]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"> **fit** and **transform** are a pair for transforming the data. \n",
|
|
"> **Kmeans(n_clusters=k)** sets the model framework. \n",
|
|
"> **Kmeans(n_clusters=k).fit(data)** estimates the model. \n",
|
|
"> **Kmeans(n_clusters=k).fit(data).inertia_** provides the sum squared error. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"ename": "NameError",
|
|
"evalue": "name 'df1' is not defined",
|
|
"output_type": "error",
|
|
"traceback": [
|
|
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
|
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
|
|
"Cell \u001b[0;32mIn [1], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msklearn\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mpreprocessing\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m MinMaxScaler \u001b[38;5;66;03m# (Value-Min)/(Max-Min)\u001b[39;00m\n\u001b[1;32m 2\u001b[0m mms \u001b[38;5;241m=\u001b[39m MinMaxScaler()\n\u001b[0;32m----> 3\u001b[0m mms\u001b[38;5;241m.\u001b[39mfit(\u001b[43mdf1\u001b[49m)\n\u001b[1;32m 4\u001b[0m df1 \u001b[38;5;241m=\u001b[39m mms\u001b[38;5;241m.\u001b[39mtransform(df1)\n",
|
|
"\u001b[0;31mNameError\u001b[0m: name 'df1' is not defined"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"from sklearn.preprocessing import MinMaxScaler # (Value-Min)/(Max-Min)\n",
|
|
"mms = MinMaxScaler()\n",
|
|
"mms.fit(df1)\n",
|
|
"df1 = mms.transform(df1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from sklearn.cluster import KMeans\n",
|
|
"kmeans = KMeans(n_clusters=5)\n",
|
|
"kmeans.fit(df1)\n",
|
|
"y_kmeans = kmeans.predict(df1)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>Fresh</th>\n",
|
|
" <th>Milk</th>\n",
|
|
" <th>Grocery</th>\n",
|
|
" <th>Frozen</th>\n",
|
|
" <th>Detergents_Paper</th>\n",
|
|
" <th>Delicassen</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>0.079315</td>\n",
|
|
" <td>0.041126</td>\n",
|
|
" <td>0.041647</td>\n",
|
|
" <td>0.043862</td>\n",
|
|
" <td>0.024727</td>\n",
|
|
" <td>0.021675</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>0.142329</td>\n",
|
|
" <td>0.471842</td>\n",
|
|
" <td>0.523124</td>\n",
|
|
" <td>0.049793</td>\n",
|
|
" <td>0.609254</td>\n",
|
|
" <td>0.061322</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>0.322837</td>\n",
|
|
" <td>0.068403</td>\n",
|
|
" <td>0.061179</td>\n",
|
|
" <td>0.098276</td>\n",
|
|
" <td>0.022222</td>\n",
|
|
" <td>0.045945</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>0.051815</td>\n",
|
|
" <td>0.145674</td>\n",
|
|
" <td>0.183377</td>\n",
|
|
" <td>0.023605</td>\n",
|
|
" <td>0.180126</td>\n",
|
|
" <td>0.038898</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>0.310117</td>\n",
|
|
" <td>0.412728</td>\n",
|
|
" <td>0.182103</td>\n",
|
|
" <td>0.800021</td>\n",
|
|
" <td>0.018433</td>\n",
|
|
" <td>0.558469</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" Fresh Milk Grocery Frozen Detergents_Paper Delicassen\n",
|
|
"1 0.079315 0.041126 0.041647 0.043862 0.024727 0.021675\n",
|
|
"2 0.142329 0.471842 0.523124 0.049793 0.609254 0.061322\n",
|
|
"3 0.322837 0.068403 0.061179 0.098276 0.022222 0.045945\n",
|
|
"4 0.051815 0.145674 0.183377 0.023605 0.180126 0.038898\n",
|
|
"5 0.310117 0.412728 0.182103 0.800021 0.018433 0.558469"
|
|
]
|
|
},
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"centers = kmeans.cluster_centers_\n",
|
|
"pd.DataFrame(centers,columns=continuous_features,index=range(1,6))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Create Dummy for Categorical Attributes\n",
|
|
"> Both **set(data)** and **data.unique()** give unique elements in data. \n",
|
|
"> Suppose $x$ has 3 categories {1,2,3}: \n",
|
|
"> **get_dummies(x, prefix='VAR' )** gives $VAR_1$, $VAR_2$, and $VAR_3$. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"{1, 2}\n",
|
|
"{1, 2, 3}\n",
|
|
"<class 'set'>\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# There are: 3 values of 'Channel'={1,2} & 2 values of 'Region'={1,2,3}\n",
|
|
"print(set(wholesale['Channel']))\n",
|
|
"print(set(wholesale['Region']))\n",
|
|
"print(type(set(wholesale['Channel'])))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[2 1]\n",
|
|
"[3 1 2]\n",
|
|
"<class 'numpy.ndarray'>\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"print(wholesale['Channel'].unique())\n",
|
|
"print(wholesale['Region'].unique())\n",
|
|
"print(type(wholesale['Channel'].unique()))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>Channel_1</th>\n",
|
|
" <th>Channel_2</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" Channel_1 Channel_2\n",
|
|
"0 0 1\n",
|
|
"1 0 1\n",
|
|
"2 0 1\n",
|
|
"3 1 0\n",
|
|
"4 0 1"
|
|
]
|
|
},
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"pd.get_dummies(wholesale['Channel'], prefix='Channel' ).head()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"['Channel', 'Region']\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>Fresh</th>\n",
|
|
" <th>Milk</th>\n",
|
|
" <th>Grocery</th>\n",
|
|
" <th>Frozen</th>\n",
|
|
" <th>Detergents_Paper</th>\n",
|
|
" <th>Delicassen</th>\n",
|
|
" <th>Channel_1</th>\n",
|
|
" <th>Channel_2</th>\n",
|
|
" <th>Region_1</th>\n",
|
|
" <th>Region_2</th>\n",
|
|
" <th>Region_3</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>12669</td>\n",
|
|
" <td>9656</td>\n",
|
|
" <td>7561</td>\n",
|
|
" <td>214</td>\n",
|
|
" <td>2674</td>\n",
|
|
" <td>1338</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>7057</td>\n",
|
|
" <td>9810</td>\n",
|
|
" <td>9568</td>\n",
|
|
" <td>1762</td>\n",
|
|
" <td>3293</td>\n",
|
|
" <td>1776</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>6353</td>\n",
|
|
" <td>8808</td>\n",
|
|
" <td>7684</td>\n",
|
|
" <td>2405</td>\n",
|
|
" <td>3516</td>\n",
|
|
" <td>7844</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>13265</td>\n",
|
|
" <td>1196</td>\n",
|
|
" <td>4221</td>\n",
|
|
" <td>6404</td>\n",
|
|
" <td>507</td>\n",
|
|
" <td>1788</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>22615</td>\n",
|
|
" <td>5410</td>\n",
|
|
" <td>7198</td>\n",
|
|
" <td>3915</td>\n",
|
|
" <td>1777</td>\n",
|
|
" <td>5185</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>0</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" Fresh Milk Grocery Frozen Detergents_Paper Delicassen Channel_1 \\\n",
|
|
"0 12669 9656 7561 214 2674 1338 0 \n",
|
|
"1 7057 9810 9568 1762 3293 1776 0 \n",
|
|
"2 6353 8808 7684 2405 3516 7844 0 \n",
|
|
"3 13265 1196 4221 6404 507 1788 1 \n",
|
|
"4 22615 5410 7198 3915 1777 5185 0 \n",
|
|
"\n",
|
|
" Channel_2 Region_1 Region_2 Region_3 \n",
|
|
"0 1 0 0 1 \n",
|
|
"1 1 0 0 1 \n",
|
|
"2 1 0 0 1 \n",
|
|
"3 0 0 0 1 \n",
|
|
"4 1 0 0 1 "
|
|
]
|
|
},
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# col represents 'Channel' and 'Region'\n",
|
|
"# These 2 words are set as prefix\n",
|
|
"# Combine original data with the 5 new dummies\n",
|
|
"# After creating new dummies, drop them off from the original data\n",
|
|
"print(categorical_features)\n",
|
|
"\n",
|
|
"for i in categorical_features:\n",
|
|
" dummies = pd.get_dummies(wholesale[i], prefix=i)\n",
|
|
" wholesale = pd.concat([wholesale, dummies], axis=1)\n",
|
|
" wholesale.drop(i, axis=1, inplace=True)\n",
|
|
" \n",
|
|
"wholesale.head()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"/anaconda3/lib/python3.7/site-packages/sklearn/preprocessing/data.py:334: DataConversionWarning: Data with input dtype uint8, int64 were all converted to float64 by MinMaxScaler.\n",
|
|
" return self.partial_fit(X, y)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"mms = MinMaxScaler()\n",
|
|
"mms.fit(wholesale)\n",
|
|
"data = mms.transform(wholesale)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Initialize a container for Sum Squared Error\n",
|
|
"\n",
|
|
"sqerror = []\n",
|
|
"K = range(1,15)\n",
|
|
"for k in K:\n",
|
|
" km = KMeans(n_clusters=k) # Specify model options\n",
|
|
" km = km.fit(data) # Fit the data\n",
|
|
" sqerror.append(km.inertia_)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"plt.plot(K, sqerror, 'bx-')\n",
|
|
"plt.xlabel('Number of Clusters (k)')\n",
|
|
"plt.ylabel('Sum Squared Distance')\n",
|
|
"plt.title('Elbow Method')\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Activity 1\n",
|
|
"> Use the following data to estimate the KMeans. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 17,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"(300, 2)\n",
|
|
"(300,)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"from sklearn.datasets.samples_generator import make_blobs\n",
|
|
"X, y_true = make_blobs(n_samples=300, centers=4,\n",
|
|
" cluster_std=0.60, random_state=0)\n",
|
|
"print(X.shape)\n",
|
|
"print(y_true.shape)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 18,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"plt.scatter(X[:, 0], X[:, 1], s=50)\n",
|
|
"plt.xlabel('X0')\n",
|
|
"plt.ylabel('X1');"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 19,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from sklearn.cluster import KMeans\n",
|
|
"kmeans = KMeans(n_clusters=4)\n",
|
|
"kmeans.fit(X)\n",
|
|
"y_kmeans = kmeans.predict(X)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 20,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>X0</th>\n",
|
|
" <th>X1</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>0.949735</td>\n",
|
|
" <td>4.419069</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>1.982583</td>\n",
|
|
" <td>0.867713</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>-1.584385</td>\n",
|
|
" <td>2.830813</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>-1.373244</td>\n",
|
|
" <td>7.753689</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" X0 X1\n",
|
|
"1 0.949735 4.419069\n",
|
|
"2 1.982583 0.867713\n",
|
|
"3 -1.584385 2.830813\n",
|
|
"4 -1.373244 7.753689"
|
|
]
|
|
},
|
|
"execution_count": 20,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"import pandas as pd\n",
|
|
"centers = kmeans.cluster_centers_\n",
|
|
"pd.DataFrame(centers,columns=['X0','X1'], index=range(1,5))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 21,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')\n",
|
|
"\n",
|
|
"plt.scatter(centers[:, 0], centers[:, 1], c='black', s=200, alpha=0.5);"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"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.11.0"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|