Skip to content

Instantly share code, notes, and snippets.

@tomrockdsouza
Last active June 25, 2023 18:04
Show Gist options
  • Save tomrockdsouza/3b4b3f744ade13d7c6cd9ad97a6b25f6 to your computer and use it in GitHub Desktop.
Save tomrockdsouza/3b4b3f744ade13d7c6cd9ad97a6b25f6 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "f0b98428-986b-453a-8bd6-80fdd825a5c5",
"metadata": {},
"source": [
"## Question:\r\n",
"\r\n",
"Given a set of two dimensional points P (e.g. [(1.1, 2.5), (3.4,1.9)...]; the size of set can be 100s), write a function that calculates simple K-means. The expected returned value from the function is\r\n",
"\r\n",
"1. a set of cluster id that each point belongs to, and\r\n",
"2. coordinates of centroids at the end of the iterations\r\n",
"\r\n",
"Please use Python with standard libraries like numpy or pandas, but do not use Scikit-learn's k-means or any other k-means library, the idea is for you to implement k-means from scratch. Feel free to research and look up any information you need, but please note plagiarism will not be tolerated. You may spend as much time as needed, but as a frame of reference, an hour would be the maximum time frame. If more time is required, please send over the intermediate code at the one hour mark.\r\n",
"\r\n",
"You may start the assignment whenever you are ready. Once you have completed this task, get back to us along with the code and how long it took you. Please feel free to get in touch with me if you encounter any questions or problems.\r\n",
"\r\n",
"**Requirements**:\r\n",
"\r\n",
"Minimum: implementation of the k-means function/class\r\n",
"\r\n",
"Expected:\r\n",
"\r\n",
"- Implement an interface similar to Sklearn (subset is fine)\r\n",
"- Test code\r\n",
"- Visualisation\r\n",
"\r\n",
"**Deliverable**: Notebook with explanation and HTML output. "
]
},
{
"cell_type": "markdown",
"id": "3765cf32-53d7-45d5-8cd4-d69cc539bbdf",
"metadata": {},
"source": [
"### Installing Libraries"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "65203708-6021-4a47-b31a-3235fc1cbc0f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: pandas in c:\\users\\tomrock\\desktop\\test\\test\\lib\\site-packages (2.0.2)\n",
"Requirement already satisfied: python-dateutil>=2.8.2 in c:\\users\\tomrock\\desktop\\test\\test\\lib\\site-packages (from pandas) (2.8.2)\n",
"Requirement already satisfied: pytz>=2020.1 in c:\\users\\tomrock\\desktop\\test\\test\\lib\\site-packages (from pandas) (2023.3)\n",
"Requirement already satisfied: tzdata>=2022.1 in c:\\users\\tomrock\\desktop\\test\\test\\lib\\site-packages (from pandas) (2023.3)\n",
"Requirement already satisfied: numpy>=1.21.0 in c:\\users\\tomrock\\desktop\\test\\test\\lib\\site-packages (from pandas) (1.24.3)\n",
"Requirement already satisfied: six>=1.5 in c:\\users\\tomrock\\desktop\\test\\test\\lib\\site-packages (from python-dateutil>=2.8.2->pandas) (1.16.0)\n",
"Requirement already satisfied: matplotlib in c:\\users\\tomrock\\desktop\\test\\test\\lib\\site-packages (3.7.1)\n",
"Requirement already satisfied: contourpy>=1.0.1 in c:\\users\\tomrock\\desktop\\test\\test\\lib\\site-packages (from matplotlib) (1.0.7)\n",
"Requirement already satisfied: cycler>=0.10 in c:\\users\\tomrock\\desktop\\test\\test\\lib\\site-packages (from matplotlib) (0.11.0)\n",
"Requirement already satisfied: fonttools>=4.22.0 in c:\\users\\tomrock\\desktop\\test\\test\\lib\\site-packages (from matplotlib) (4.39.4)\n",
"Requirement already satisfied: kiwisolver>=1.0.1 in c:\\users\\tomrock\\desktop\\test\\test\\lib\\site-packages (from matplotlib) (1.4.4)\n",
"Requirement already satisfied: numpy>=1.20 in c:\\users\\tomrock\\desktop\\test\\test\\lib\\site-packages (from matplotlib) (1.24.3)\n",
"Requirement already satisfied: packaging>=20.0 in c:\\users\\tomrock\\desktop\\test\\test\\lib\\site-packages (from matplotlib) (23.1)\n",
"Requirement already satisfied: pillow>=6.2.0 in c:\\users\\tomrock\\desktop\\test\\test\\lib\\site-packages (from matplotlib) (9.5.0)\n",
"Requirement already satisfied: pyparsing>=2.3.1 in c:\\users\\tomrock\\desktop\\test\\test\\lib\\site-packages (from matplotlib) (3.0.9)\n",
"Requirement already satisfied: python-dateutil>=2.7 in c:\\users\\tomrock\\desktop\\test\\test\\lib\\site-packages (from matplotlib) (2.8.2)\n",
"Requirement already satisfied: six>=1.5 in c:\\users\\tomrock\\desktop\\test\\test\\lib\\site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)\n",
"Requirement already satisfied: pydantic in c:\\users\\tomrock\\desktop\\test\\test\\lib\\site-packages (1.10.8)\n",
"Requirement already satisfied: typing-extensions>=4.2.0 in c:\\users\\tomrock\\desktop\\test\\test\\lib\\site-packages (from pydantic) (4.6.3)\n"
]
}
],
"source": [
"!pip install pandas\n",
"!pip install matplotlib\n",
"!pip install pydantic"
]
},
{
"cell_type": "markdown",
"id": "ccd980d7-371d-4e99-9e40-78184e8100fd",
"metadata": {},
"source": [
"### Importing Libraries"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "c1b4ef05-5d42-4748-8eed-0459fd2f1e06",
"metadata": {},
"outputs": [],
"source": [
"import random\n",
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib.cm as cm\n",
"from typing import List, TypeVar, Tuple\n",
"from pydantic import validate_arguments, ValidationError\n",
"\n",
"PandasDataFrame = TypeVar('pandas.core.frame.DataFrame')"
]
},
{
"cell_type": "markdown",
"id": "5aa54ca8-2385-4305-8a71-39ae1e173de2",
"metadata": {},
"source": [
"### Loading Helper Functions"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "14322f2b-29eb-41bb-8f86-8d2ee46a22e8",
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"@validate_arguments\n",
"def generate_random_array(low: int, high: int, size: int) -> List[float]:\n",
" return [random.uniform(low, high) for _ in range(size)]\n",
"\n",
"\n",
"@validate_arguments\n",
"def generate_dataframe(low: int, high: int, size: int):\n",
" return pd.DataFrame(\n",
" {\n",
" 'x': generate_random_array(low, high, size),\n",
" 'y': generate_random_array(low, high, size),\n",
" }\n",
" )\n",
"\n",
"\n",
"@validate_arguments\n",
"def validate_dataframe(df: PandasDataFrame) -> bool:\n",
" try:\n",
" df = df[['x', 'y']]\n",
" except:\n",
" raise Exception('The DataFrame should have 2 columns only x and y')\n",
" try:\n",
" df['x'] = df['x'].astype(float)\n",
" df['y'] = df['y'].astype(float)\n",
" except:\n",
" raise Exception('The DataFrame should have real float numbers as input')\n",
" if len(df[~(df.applymap(np.isreal))]) == 0:\n",
" raise Exception('The DataFrame should have real float numbers as input')\n",
" return True\n",
"\n",
"\n",
"@validate_arguments\n",
"def generate_random_centroids(df: PandasDataFrame, num_centroids: int) -> List[List[float]]:\n",
" x_min = df['x'].min()\n",
" x_max = df['x'].max()\n",
" y_min = df['y'].min()\n",
" y_max = df['y'].max()\n",
" centroids_x = generate_random_array(x_min, x_max, num_centroids)\n",
" centroids_y = generate_random_array(y_min, y_max, num_centroids)\n",
" return [list(row) for row in zip(*[centroids_x, centroids_y])]\n",
"\n",
"\n",
"@validate_arguments\n",
"def get_new_cluster_index(centroids: List[List[float]], df: PandasDataFrame) -> List[int]:\n",
" df = df[['x', 'y']]\n",
" centroid_arrays = []\n",
" for ed_2_centroid in centroids:\n",
" ed_square = np.square(ed_2_centroid[0] - df['x']) + np.square(ed_2_centroid[1] - df['y'])\n",
" centroid_arrays.append(np.sqrt(ed_square))\n",
" np_centroid_arrays = np.array(centroid_arrays)\n",
" return [np.argmin(sub_arr) for sub_arr in np_centroid_arrays.transpose()]\n",
"\n",
"\n",
"@validate_arguments\n",
"def visualize_kmeans(centroids: List[List[float]], df: PandasDataFrame) -> None:\n",
" centroids_x, centroids_y = [list(row) for row in zip(*centroids)]\n",
" # generating color for each cluster\n",
" colors = cm.rainbow(np.linspace(0, 1, len(centroids)))\n",
" # looping over each generated cluster\n",
" for idx in range(len(centroids)):\n",
" plt.scatter(\n",
" df[df['centroid_index'] == idx]['x'].values, df[df['centroid_index'] == idx]['y'].values,\n",
" s=50, c=colors[idx],\n",
" marker='o', edgecolor='black',\n",
" label=f'cluster {idx}'\n",
" )\n",
" # plot the centroids\n",
" plt.scatter(\n",
" centroids_x, centroids_y,\n",
" s=250, marker='*',\n",
" c='yellow', edgecolor='red',\n",
" label='centroids'\n",
" )\n",
" plt.legend(scatterpoints=1, loc='upper left', bbox_to_anchor=(1.01, 1))\n",
" plt.grid()\n",
" plt.show()\n",
"\n",
"\n",
"@validate_arguments\n",
"def fit_predict(\n",
" df: PandasDataFrame = generate_dataframe(0, 500, 150),\n",
" num_centroids: int = 3,\n",
" max_iter: int = 300\n",
") -> Tuple[List[List[float]], PandasDataFrame]:\n",
" validate_dataframe(df)\n",
" centroids = generate_random_centroids(df, num_centroids)\n",
" old_centroid_relation: int = [-1] * num_centroids\n",
" for iter_len in range(max_iter):\n",
" new_centroid_relation = get_new_cluster_index(centroids, df)\n",
" df['centroid_index'] = new_centroid_relation\n",
" # comparing old cluster relations with new\n",
" if new_centroid_relation == old_centroid_relation:\n",
" print(f'Total Iterations ({iter_len})')\n",
" visualize_kmeans(centroids, df)\n",
" return centroids\n",
" else:\n",
" # setting new centroid values\n",
" for idx, centroid in enumerate(centroids):\n",
" new_centroid = [\n",
" np.mean(df[df['centroid_index'] == idx]['x']),\n",
" np.mean(df[df['centroid_index'] == idx]['y']),\n",
" ]\n",
" if not new_centroid == (0, 0):\n",
" centroids[idx] = new_centroid\n",
" old_centroid_relation = new_centroid_relation\n",
" print(f'Max Iteration Reached ({max_iter})!')\n",
" visualize_kmeans(centroids, df)\n",
" return centroids\n",
"\n",
"\n",
"@validate_arguments\n",
"def predict_cluster(\n",
" centroids: List[List[float]],\n",
" x: List[float] = generate_random_array(low=0, high=500, size=2),\n",
" y: List[float] = generate_random_array(low=0, high=500, size=2)\n",
") -> List[int]:\n",
" if len(centroids) == 0:\n",
" raise Exception('Zero Values Present in Centroids')\n",
" return get_new_cluster_index(centroids, pd.DataFrame({'x': x, 'y': y}))\n"
]
},
{
"cell_type": "markdown",
"id": "71175194-94a1-4c7b-b666-ae1566656343",
"metadata": {},
"source": [
"### Testing and Visualizations"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "771c1fc0-12f4-4b8b-85d6-078fb28d50fc",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Total Iterations (11)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\TOMROCK\\AppData\\Local\\Temp\\ipykernel_6120\\3167390455.py:61: UserWarning: *c* argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with *x* & *y*. Please use the *color* keyword-argument or provide a 2D array with a single row if you intend to specify the same RGB or RGBA value for all points.\n",
" plt.scatter(\n"
]
},
{
"data": {
"image/png": "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fIoM1Wt6+p3WyTE3cyx1zF1dXdm5c2eJ9zw6wQrvv/421/uHPsc8Oztbb8eqDE1sb9aV65W2y0q9offY3s6dO2Nvb09cXJxOy/dNmzYlMzOThw8f0uBRmd3yNE7d3d1xd3cnJCSECRMmEB0dja+vLzY2NqhUqhJtPT09UalU3LlzB29v7zLHqi2acMbiTkN9US3D9L///S+vvfYaR44cwc7OTu+dqYglS5aUcBlnZGTQpk0bhg0bVumXqaCggCNHjvDss89ibW1tjK7We8SYG586PebffguzXgHrLPi4sMgrWl2OA1OBP0GtgsXAxzIZhw4dol+/fjXqVp0eczOlLo15bm6utjqZMe+l1cUQY26sOG9NwvL3W/fRZfbYcpfzJbWa1K37GOPrq9fYXjs7OxYtWsTChQuxsbHBy8uLu3fvkpSUxMsvv1ymfd++fXFwcGDp0qXMmzePf//732zbtk27PScnhwULFhAQEICbmxt//PEH586dw9+/KI6pffv2ZGVlERcXR69evXBwcMDd3Z1JkyYRGBjIe++9h6enJ3fv3iUuLo6ePXsyatQona/n4MGD3L59m7/97W84OjqSlJTEggUL8PLyon379rUdrjJUyzA9f/48d+7c4YknntC+p1KpOHHiBB988AHffvst+fn5/PnnnyW8prdv38bV1RUoemo8e/ZsieNqsvY1bUpja2uLra1tmfetra11+rHo2k6gP8SYG586OeajR0Of8/DSRBh2rMiqfBPQ5TILKMrWfxeQAY/yFd8DDltZ8f769bX2JNTJMTdz6sKYW1tb4+TkZOpu6Iw+x9yYn11IcAgxgwZxfkFEmQQoSa3mfJiSPy+mErJpu97P/cYbb2BlZUV4eDg3btygRYsWFep+Nm7cmB07drBgwQI2bdrEkCFDWL58Oa+88goACoWC+/fvExgYyO3bt2nSpAl+fn7aleQBAwYwc+ZMxo0bx/3791m2bBnLly8nOjqat956i/nz53P9+nWaNGlCv379GD16dLWuxd7enk2bNhESEkJeXh5t2rTBz8+PxYsX126QKkKqBhkZGdKFCxdKvP7v//5Pmjx5snThwgXpzz//lKytraU9e/Zo97l48aIESKdPn5YkSZIOHjwoyeVy6fbt29o2H330keTs7Czl5ubq1I/09HQJkNLT0yttl5+fL8XGxkr5+fnVuUxB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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Sample Number:1, Cluster ID: 6\n",
"Sample Number:2, Cluster ID: 1\n",
"Sample Number:3, Cluster ID: 0\n",
"Sample Number:4, Cluster ID: 4\n",
"Sample Number:5, Cluster ID: 6\n"
]
}
],
"source": [
"try:\n",
" # Test Data Seed Values\n",
" lower_bound_number=0\n",
" higher_bound_number=500\n",
" train_size =150\n",
" test_size = 5 \n",
"\n",
" # train and generate centroids/weights\n",
" centroids = fit_predict(\n",
" df=generate_dataframe(low=lower_bound_number, high=higher_bound_number, size=train_size),\n",
" num_centroids=8,\n",
" max_iter=500\n",
" )\n",
"\n",
" # predict cluster index using centroids/weights\n",
" for idx, cluster_index in enumerate(\n",
" predict_cluster(\n",
" centroids=centroids,\n",
" x=generate_random_array(low=lower_bound_number, high=higher_bound_number, size=test_size),\n",
" y=generate_random_array(low=lower_bound_number, high=higher_bound_number, size=test_size)\n",
" )\n",
" ):\n",
" print(f'Sample Number:{idx + 1}, Cluster ID: {cluster_index}')\n",
" \n",
"except ValidationError as exc:\n",
" print(exc)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1eada685-13ce-433a-ac54-ecd38d010851",
"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.1"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment