{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Hierarchical Clustering:\n",
"* Agglomerative: Bottom-up approach. Initially, each point is a cluster, then merged later.\n",
"* Divisive: Top-bottom approach. Initially, there is only one cluster, then separated later.\n",
"#### Agglomertive Clustering
\n",
"* Make each point a single cluster\n",
"* Take two closest points and merge them in one cluster.\n",
"* Repeat step 2 till only one cluster left.\n",
"* While choosing the closest points, there are multiple ways to g
\n",
"\n",
"Take the distance of two closest point in clusters\n",
"* Average distance\n",
"* Centroid distance\n",
"* Farthest points etc."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"df = pd.read_csv('my_machine-learning/datasets/iris.csv')\n",
"\n",
"X = df.iloc[:, [3, 4]].values"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"