KMedoids visualization
This commit is contained in:
parent
b0decebad3
commit
8aca985483
@ -797,7 +797,7 @@
|
|||||||
],
|
],
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"kernelspec": {
|
"kernelspec": {
|
||||||
"display_name": "Python 3 (ipykernel)",
|
"display_name": "Python 3.8.13 ('pytorch_m1')",
|
||||||
"language": "python",
|
"language": "python",
|
||||||
"name": "python3"
|
"name": "python3"
|
||||||
},
|
},
|
||||||
@ -811,7 +811,12 @@
|
|||||||
"name": "python",
|
"name": "python",
|
||||||
"nbconvert_exporter": "python",
|
"nbconvert_exporter": "python",
|
||||||
"pygments_lexer": "ipython3",
|
"pygments_lexer": "ipython3",
|
||||||
"version": "3.8.9"
|
"version": "3.8.13"
|
||||||
|
},
|
||||||
|
"vscode": {
|
||||||
|
"interpreter": {
|
||||||
|
"hash": "8a8c11200ab875bf4be543ce12265edee0c7e0345ae0b6d9e205fdf23b03e663"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nbformat": 4,
|
"nbformat": 4,
|
||||||
|
163
kMedoids.py
Normal file
163
kMedoids.py
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
import random
|
||||||
|
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import numpy as np
|
||||||
|
import pandas as pd
|
||||||
|
import seaborn as sns
|
||||||
|
from sklearn.metrics import silhouette_score
|
||||||
|
from sklearn.preprocessing import MinMaxScaler
|
||||||
|
|
||||||
|
|
||||||
|
class TrainModel:
|
||||||
|
def __init__(self, data, k_value):
|
||||||
|
self.data = data
|
||||||
|
scaler = MinMaxScaler()
|
||||||
|
# self.data = scaler.fit_transform(self.data)
|
||||||
|
self.k_value = k_value
|
||||||
|
self.kmedoids(self.data)
|
||||||
|
|
||||||
|
def get_random_medoids(self, data):
|
||||||
|
points = random.sample(range(0, len(data)), self.k_value)
|
||||||
|
medoids = []
|
||||||
|
for i in range(self.k_value):
|
||||||
|
medoids.append(data[i])
|
||||||
|
return medoids
|
||||||
|
|
||||||
|
def get_closest_medoids(self, sample_point, medoids):
|
||||||
|
min_distance = float('inf')
|
||||||
|
closest_medoid = None
|
||||||
|
for i in range(len(medoids)):
|
||||||
|
distance = self.calculateDistance(sample_point, medoids[i])
|
||||||
|
if distance < min_distance:
|
||||||
|
min_distance = distance
|
||||||
|
closest_medoid = i
|
||||||
|
return closest_medoid
|
||||||
|
|
||||||
|
def get_clusters(self, data_points, medoids):
|
||||||
|
clusters = [[] for _ in range(self.k_value)]
|
||||||
|
for i in range(len(data_points)):
|
||||||
|
x = self.get_closest_medoids(data_points[i], medoids)
|
||||||
|
clusters[x].append(data_points[i])
|
||||||
|
return clusters
|
||||||
|
|
||||||
|
def calculate_cost(self, data_points, clusters, medoids):
|
||||||
|
cost = 0
|
||||||
|
for i in range(len(clusters)):
|
||||||
|
for j in range(len(clusters[i])):
|
||||||
|
cost += self.calculateDistance(medoids[i], clusters[i][j])
|
||||||
|
return cost
|
||||||
|
|
||||||
|
def get_non_medoids(self, data_points, medoids):
|
||||||
|
non_medoids = []
|
||||||
|
for sample in data_points:
|
||||||
|
flag = False
|
||||||
|
for m in medoids:
|
||||||
|
if (sample == m).all():
|
||||||
|
flag = True
|
||||||
|
if flag == False:
|
||||||
|
non_medoids.append(sample)
|
||||||
|
return non_medoids
|
||||||
|
|
||||||
|
def get_clusters_label(self, data_points, clusters):
|
||||||
|
labels = []
|
||||||
|
for i in range(len(data_points)):
|
||||||
|
labels.append(0)
|
||||||
|
for i in range(len(clusters)):
|
||||||
|
cluster = clusters[i]
|
||||||
|
for j in range(len(cluster)):
|
||||||
|
for k in range(len(data_points)):
|
||||||
|
if (cluster[j] == data_points[k]).all():
|
||||||
|
labels[k] = i
|
||||||
|
break
|
||||||
|
return labels
|
||||||
|
|
||||||
|
def kmedoids(self, data):
|
||||||
|
medoids = self.get_random_medoids(data)
|
||||||
|
clusters = self.get_clusters(data, medoids)
|
||||||
|
initial_cost = self.calculate_cost(data, clusters, medoids)
|
||||||
|
while True:
|
||||||
|
best_medoids = medoids
|
||||||
|
lowest_cost = initial_cost
|
||||||
|
for i in range(len(medoids)):
|
||||||
|
non_medoids = self.get_non_medoids(data, medoids)
|
||||||
|
for j in range(len(non_medoids)):
|
||||||
|
new_medoids = medoids.copy()
|
||||||
|
for k in range(len(new_medoids)):
|
||||||
|
if (new_medoids[k] == medoids[i]).all():
|
||||||
|
new_medoids[k] = non_medoids[j]
|
||||||
|
new_clusters = self.get_clusters(data, new_medoids)
|
||||||
|
new_cost = self.calculate_cost(data, new_clusters, new_medoids)
|
||||||
|
if new_cost < lowest_cost:
|
||||||
|
lowest_cost = new_cost
|
||||||
|
best_medoids = new_medoids
|
||||||
|
if lowest_cost < initial_cost:
|
||||||
|
initial_cost = lowest_cost
|
||||||
|
medoids = best_medoids
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
final_clusters = self.get_clusters(data, medoids)
|
||||||
|
cluster_labels = self.get_clusters_label(data, final_clusters)
|
||||||
|
silhouette_avg = silhouette_score(data, cluster_labels)
|
||||||
|
|
||||||
|
# First cluster
|
||||||
|
x0 = np.squeeze(final_clusters[0])[:, 0]
|
||||||
|
y0 = np.squeeze(final_clusters[0])[:, 1]
|
||||||
|
|
||||||
|
# Second cluster
|
||||||
|
x1 = np.squeeze(final_clusters[1])[:, 0]
|
||||||
|
y1 = np.squeeze(final_clusters[1])[:, 1]
|
||||||
|
|
||||||
|
plt.scatter(x0, y0, c='red')
|
||||||
|
plt.scatter(x1, y1, c='green')
|
||||||
|
|
||||||
|
# Draw medoids
|
||||||
|
mx = []
|
||||||
|
my = []
|
||||||
|
for m in medoids:
|
||||||
|
mx.append(m[0])
|
||||||
|
my.append(m[1])
|
||||||
|
plt.scatter(mx, my, c='yellow', marker='*')
|
||||||
|
|
||||||
|
plt.xlabel("X")
|
||||||
|
plt.ylabel("Y")
|
||||||
|
plt.title("K-medoids clusters")
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
|
print('Sylwetka (ang. Silhouette) dla algorytmu k-medoid dla k =', self.k_value, 10 * '-', silhouette_avg)
|
||||||
|
|
||||||
|
def calculateDistance(self, x, y):
|
||||||
|
return np.linalg.norm(x - y)
|
||||||
|
|
||||||
|
|
||||||
|
# Prepare dataset
|
||||||
|
dataset = np.array([
|
||||||
|
[5, 6],
|
||||||
|
[4, 7],
|
||||||
|
[4, 8],
|
||||||
|
[4, 6],
|
||||||
|
[5, 7],
|
||||||
|
[5, 8],
|
||||||
|
[7, 6],
|
||||||
|
[8, 8],
|
||||||
|
[7, 7],
|
||||||
|
[7, 8]]
|
||||||
|
)
|
||||||
|
column_values = ['x', 'y']
|
||||||
|
df = pd.DataFrame(data=dataset, columns=column_values, index=None)
|
||||||
|
|
||||||
|
# Draw data distribution
|
||||||
|
sns.set_theme(style='darkgrid')
|
||||||
|
sns.scatterplot(data=df, x='x', y='y')
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
# Run K-Medoids algorithm
|
||||||
|
model = TrainModel(dataset, 2)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# dataset = pd.read_csv('iris.csv')
|
||||||
|
# dataset = dataset.iloc[:,:-1]
|
||||||
|
# dataset = dataset.iloc[: , 1:]
|
||||||
|
# dataset = dataset.values
|
145
kmedoids.ipynb
145
kmedoids.ipynb
@ -3,7 +3,11 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"id": "e1e5a2b7",
|
"id": "e1e5a2b7",
|
||||||
"metadata": {},
|
"metadata": {
|
||||||
|
"pycharm": {
|
||||||
|
"name": "#%% md\n"
|
||||||
|
}
|
||||||
|
},
|
||||||
"source": [
|
"source": [
|
||||||
"# Analiza skupień metodą k-medoids (PAM) "
|
"# Analiza skupień metodą k-medoids (PAM) "
|
||||||
]
|
]
|
||||||
@ -11,7 +15,11 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"id": "80d5deaf",
|
"id": "80d5deaf",
|
||||||
"metadata": {},
|
"metadata": {
|
||||||
|
"pycharm": {
|
||||||
|
"name": "#%% md\n"
|
||||||
|
}
|
||||||
|
},
|
||||||
"source": [
|
"source": [
|
||||||
"### Co to jest klasteryzacja? "
|
"### Co to jest klasteryzacja? "
|
||||||
]
|
]
|
||||||
@ -19,7 +27,11 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"id": "4040df16",
|
"id": "4040df16",
|
||||||
"metadata": {},
|
"metadata": {
|
||||||
|
"pycharm": {
|
||||||
|
"name": "#%% md\n"
|
||||||
|
}
|
||||||
|
},
|
||||||
"source": [
|
"source": [
|
||||||
"Analiza skupień lub klasteryzacja to zadanie polegające na grupowaniu zbioru obiektów w taki sposób, aby obiekty w tej samej grupie lub klastrze były do siebie bardziej podobne niż obiekty w innych grupach lub klastrach. Sama analiza skupień nie jest jednym konkretnym algorytmem, lecz ogólnym zadaniem do rozwiązania. Można je zrealizować za pomocą różnych algorytmów (algorytm k-średnich, algorytm k-medoid), które różnią się znacznie w rozumieniu tego, czym jest klaster i jak skutecznie je znaleźć. Popularne pojęcia klastrów obejmują grupy o małych odległościach między elementami klastra. Klastrowanie można zatem sformułować jako wieloprzedmiotowy problem optymalizacyjny. Wybór odpowiedniego algorytmu grupowania i ustawień parametrów zależy od indywidualnego zbioru danych i przeznaczenia wyników. Analiza skupień jako taka nie jest zadaniem automatycznym, lecz iteracyjnym procesem odkrywania wiedzy lub interaktywnej optymalizacji wieloprzedmiotowej, który wymaga prób i błędów. Często konieczne jest modyfikowanie wstępnego przetwarzania danych i parametrów modelu, aż do uzyskania pożądanych właściwości."
|
"Analiza skupień lub klasteryzacja to zadanie polegające na grupowaniu zbioru obiektów w taki sposób, aby obiekty w tej samej grupie lub klastrze były do siebie bardziej podobne niż obiekty w innych grupach lub klastrach. Sama analiza skupień nie jest jednym konkretnym algorytmem, lecz ogólnym zadaniem do rozwiązania. Można je zrealizować za pomocą różnych algorytmów (algorytm k-średnich, algorytm k-medoid), które różnią się znacznie w rozumieniu tego, czym jest klaster i jak skutecznie je znaleźć. Popularne pojęcia klastrów obejmują grupy o małych odległościach między elementami klastra. Klastrowanie można zatem sformułować jako wieloprzedmiotowy problem optymalizacyjny. Wybór odpowiedniego algorytmu grupowania i ustawień parametrów zależy od indywidualnego zbioru danych i przeznaczenia wyników. Analiza skupień jako taka nie jest zadaniem automatycznym, lecz iteracyjnym procesem odkrywania wiedzy lub interaktywnej optymalizacji wieloprzedmiotowej, który wymaga prób i błędów. Często konieczne jest modyfikowanie wstępnego przetwarzania danych i parametrów modelu, aż do uzyskania pożądanych właściwości."
|
||||||
]
|
]
|
||||||
@ -27,7 +39,11 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"id": "3dc57d21",
|
"id": "3dc57d21",
|
||||||
"metadata": {},
|
"metadata": {
|
||||||
|
"pycharm": {
|
||||||
|
"name": "#%% md\n"
|
||||||
|
}
|
||||||
|
},
|
||||||
"source": [
|
"source": [
|
||||||
"W naszym projekcie przedstawimy metodę k-medoid i porównamy ją z metodą k-średnich."
|
"W naszym projekcie przedstawimy metodę k-medoid i porównamy ją z metodą k-średnich."
|
||||||
]
|
]
|
||||||
@ -35,7 +51,11 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"id": "f7c684c9",
|
"id": "f7c684c9",
|
||||||
"metadata": {},
|
"metadata": {
|
||||||
|
"pycharm": {
|
||||||
|
"name": "#%% md\n"
|
||||||
|
}
|
||||||
|
},
|
||||||
"source": [
|
"source": [
|
||||||
"### Algorytm k-medoid"
|
"### Algorytm k-medoid"
|
||||||
]
|
]
|
||||||
@ -43,7 +63,11 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"id": "af45d7c7",
|
"id": "af45d7c7",
|
||||||
"metadata": {},
|
"metadata": {
|
||||||
|
"pycharm": {
|
||||||
|
"name": "#%% md\n"
|
||||||
|
}
|
||||||
|
},
|
||||||
"source": [
|
"source": [
|
||||||
"1. Inicjalizacja: wybierz k losowych punktów spośród n punktów danych jako medoidy.\n",
|
"1. Inicjalizacja: wybierz k losowych punktów spośród n punktów danych jako medoidy.\n",
|
||||||
"2. Przyporządkuj każdy punkt danych do najbliższego medoidu, używając dowolnych popularnych metod metryki odległości.\n",
|
"2. Przyporządkuj każdy punkt danych do najbliższego medoidu, używając dowolnych popularnych metod metryki odległości.\n",
|
||||||
@ -56,7 +80,11 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"id": "d8f6dd1e",
|
"id": "d8f6dd1e",
|
||||||
"metadata": {},
|
"metadata": {
|
||||||
|
"pycharm": {
|
||||||
|
"name": "#%% md\n"
|
||||||
|
}
|
||||||
|
},
|
||||||
"source": [
|
"source": [
|
||||||
"**Rozwiązanie**: Implementacja algorytmu k-medoid w Pythonie. Do wykonania algorytmu k-medoidy potrzebne jest wstępne przetworzenie danych. W naszym rozwiązaniu przeprowadziliśmy wstępne przetwarzanie danych w celu zaimplementowania algorytmu k-medoid. Dodatkowo oceniliśmy jaka jest jakość naszego grupowania. Posłużyliśmy się tzw. sylwetką (ang. silhouette) $s(x_i)$ obliczaną dla każdego obiektu $x_i$. Najpierw dla $x_i$ znajduje się jego średnią odległość $a(x_i)$ od pozostałych obiektów grupy, do której został przydzielony, a następnie wybiera się minimalną wartość $b(x_i)$ spośród obliczonych odległości od $x_i$ do każdej spośród pozostałych grup osobno. Odległość $x_i$ od danej grupy oblicza się jako średnią odległość od $x_i$ do wszystkich elementów tej grupy. Obie wielkości zestawia się we wzorze: "
|
"**Rozwiązanie**: Implementacja algorytmu k-medoid w Pythonie. Do wykonania algorytmu k-medoidy potrzebne jest wstępne przetworzenie danych. W naszym rozwiązaniu przeprowadziliśmy wstępne przetwarzanie danych w celu zaimplementowania algorytmu k-medoid. Dodatkowo oceniliśmy jaka jest jakość naszego grupowania. Posłużyliśmy się tzw. sylwetką (ang. silhouette) $s(x_i)$ obliczaną dla każdego obiektu $x_i$. Najpierw dla $x_i$ znajduje się jego średnią odległość $a(x_i)$ od pozostałych obiektów grupy, do której został przydzielony, a następnie wybiera się minimalną wartość $b(x_i)$ spośród obliczonych odległości od $x_i$ do każdej spośród pozostałych grup osobno. Odległość $x_i$ od danej grupy oblicza się jako średnią odległość od $x_i$ do wszystkich elementów tej grupy. Obie wielkości zestawia się we wzorze: "
|
||||||
]
|
]
|
||||||
@ -64,7 +92,11 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"id": "ab825d40",
|
"id": "ab825d40",
|
||||||
"metadata": {},
|
"metadata": {
|
||||||
|
"pycharm": {
|
||||||
|
"name": "#%% md\n"
|
||||||
|
}
|
||||||
|
},
|
||||||
"source": [
|
"source": [
|
||||||
"<h1><center>$s(x_i) = \\frac{b(x_i)-a(x_i)}{max(a(x_i),b(x_i))}$</center></h1>\n"
|
"<h1><center>$s(x_i) = \\frac{b(x_i)-a(x_i)}{max(a(x_i),b(x_i))}$</center></h1>\n"
|
||||||
]
|
]
|
||||||
@ -72,7 +104,11 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"id": "f6d344cf",
|
"id": "f6d344cf",
|
||||||
"metadata": {},
|
"metadata": {
|
||||||
|
"pycharm": {
|
||||||
|
"name": "#%% md\n"
|
||||||
|
}
|
||||||
|
},
|
||||||
"source": [
|
"source": [
|
||||||
"otrzymując wartość sylwetki dla danego obiektu $x_i$. Ma ona prostą interpretację: obiekty, dla których wskaźnik jest bliski 1, zostały trafnie zgrupowane, pozostałe (o wartości ok. 0 i ujemnej) prawdopodobnie trafiły do złych grup."
|
"otrzymując wartość sylwetki dla danego obiektu $x_i$. Ma ona prostą interpretację: obiekty, dla których wskaźnik jest bliski 1, zostały trafnie zgrupowane, pozostałe (o wartości ok. 0 i ujemnej) prawdopodobnie trafiły do złych grup."
|
||||||
]
|
]
|
||||||
@ -81,56 +117,12 @@
|
|||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 1,
|
"execution_count": 1,
|
||||||
"id": "73cffc81",
|
"id": "73cffc81",
|
||||||
"metadata": {},
|
"metadata": {
|
||||||
"outputs": [
|
"pycharm": {
|
||||||
{
|
"name": "#%%\n"
|
||||||
"name": "stdout",
|
|
||||||
"output_type": "stream",
|
|
||||||
"text": [
|
|
||||||
" Długość kielicha Szerokość kielicha Długość płatka Szerokość płatka \\\n",
|
|
||||||
"0 0.222222 0.625000 0.067797 0.041667 \n",
|
|
||||||
"1 0.166667 0.416667 0.067797 0.041667 \n",
|
|
||||||
"2 0.111111 0.500000 0.050847 0.041667 \n",
|
|
||||||
"3 0.083333 0.458333 0.084746 0.041667 \n",
|
|
||||||
"4 0.194444 0.666667 0.067797 0.041667 \n",
|
|
||||||
".. ... ... ... ... \n",
|
|
||||||
"145 0.666667 0.416667 0.711864 0.916667 \n",
|
|
||||||
"146 0.555556 0.208333 0.677966 0.750000 \n",
|
|
||||||
"147 0.611111 0.416667 0.711864 0.791667 \n",
|
|
||||||
"148 0.527778 0.583333 0.745763 0.916667 \n",
|
|
||||||
"149 0.444444 0.416667 0.694915 0.708333 \n",
|
|
||||||
"\n",
|
|
||||||
" Wartość medoidu 0 \\\n",
|
|
||||||
"0 [0.19444444444444442, 0.5833333333333333, 0.08... \n",
|
|
||||||
"1 [0.19444444444444442, 0.5833333333333333, 0.08... \n",
|
|
||||||
"2 [0.19444444444444442, 0.5833333333333333, 0.08... \n",
|
|
||||||
"3 [0.19444444444444442, 0.5833333333333333, 0.08... \n",
|
|
||||||
"4 [0.19444444444444442, 0.5833333333333333, 0.08... \n",
|
|
||||||
".. ... \n",
|
|
||||||
"145 [0.19444444444444442, 0.5833333333333333, 0.08... \n",
|
|
||||||
"146 [0.19444444444444442, 0.5833333333333333, 0.08... \n",
|
|
||||||
"147 [0.19444444444444442, 0.5833333333333333, 0.08... \n",
|
|
||||||
"148 [0.19444444444444442, 0.5833333333333333, 0.08... \n",
|
|
||||||
"149 [0.19444444444444442, 0.5833333333333333, 0.08... \n",
|
|
||||||
"\n",
|
|
||||||
" Wartość medoidu 1 Medoid \n",
|
|
||||||
"0 [0.5277777777777779, 0.33333333333333326, 0.64... 0 \n",
|
|
||||||
"1 [0.5277777777777779, 0.33333333333333326, 0.64... 0 \n",
|
|
||||||
"2 [0.5277777777777779, 0.33333333333333326, 0.64... 0 \n",
|
|
||||||
"3 [0.5277777777777779, 0.33333333333333326, 0.64... 0 \n",
|
|
||||||
"4 [0.5277777777777779, 0.33333333333333326, 0.64... 0 \n",
|
|
||||||
".. ... ... \n",
|
|
||||||
"145 [0.5277777777777779, 0.33333333333333326, 0.64... 1 \n",
|
|
||||||
"146 [0.5277777777777779, 0.33333333333333326, 0.64... 1 \n",
|
|
||||||
"147 [0.5277777777777779, 0.33333333333333326, 0.64... 1 \n",
|
|
||||||
"148 [0.5277777777777779, 0.33333333333333326, 0.64... 1 \n",
|
|
||||||
"149 [0.5277777777777779, 0.33333333333333326, 0.64... 1 \n",
|
|
||||||
"\n",
|
|
||||||
"[150 rows x 7 columns]\n",
|
|
||||||
"Sylwetka (ang. Silhouette) dla algorytmu k-medoid dla k = 2 ---------- 0.6114567207221335\n"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
],
|
},
|
||||||
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"import numpy as np\n",
|
"import numpy as np\n",
|
||||||
"import pandas as pd\n",
|
"import pandas as pd\n",
|
||||||
@ -259,11 +251,40 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": 2,
|
||||||
"id": "3a8a592f",
|
"id": "3a8a592f",
|
||||||
"metadata": {},
|
"metadata": {
|
||||||
"outputs": [],
|
"pycharm": {
|
||||||
"source": []
|
"name": "#%%\n"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"ename": "KeyboardInterrupt",
|
||||||
|
"evalue": "",
|
||||||
|
"output_type": "error",
|
||||||
|
"traceback": [
|
||||||
|
"\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
|
||||||
|
"\u001B[0;31mKeyboardInterrupt\u001B[0m Traceback (most recent call last)",
|
||||||
|
"Input \u001B[0;32mIn [2]\u001B[0m, in \u001B[0;36m<cell line: 5>\u001B[0;34m()\u001B[0m\n\u001B[1;32m 3\u001B[0m dataset \u001B[38;5;241m=\u001B[39m pd\u001B[38;5;241m.\u001B[39mread_csv(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124miris.csv\u001B[39m\u001B[38;5;124m'\u001B[39m)\n\u001B[1;32m 4\u001B[0m dataset \u001B[38;5;241m=\u001B[39m dataset\u001B[38;5;241m.\u001B[39miloc[:,:\u001B[38;5;241m-\u001B[39m\u001B[38;5;241m1\u001B[39m]\n\u001B[0;32m----> 5\u001B[0m dataset \u001B[38;5;241m=\u001B[39m \u001B[43mdataset\u001B[49m\u001B[38;5;241m.\u001B[39miloc[: , \u001B[38;5;241m1\u001B[39m:]\n\u001B[1;32m 6\u001B[0m dataset \u001B[38;5;241m=\u001B[39m dataset\u001B[38;5;241m.\u001B[39mvalues\n\u001B[1;32m 7\u001B[0m model \u001B[38;5;241m=\u001B[39m TrainModel(dataset, \u001B[38;5;241m2\u001B[39m)\n",
|
||||||
|
"Input \u001B[0;32mIn [2]\u001B[0m, in \u001B[0;36m<cell line: 5>\u001B[0;34m()\u001B[0m\n\u001B[1;32m 3\u001B[0m dataset \u001B[38;5;241m=\u001B[39m pd\u001B[38;5;241m.\u001B[39mread_csv(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124miris.csv\u001B[39m\u001B[38;5;124m'\u001B[39m)\n\u001B[1;32m 4\u001B[0m dataset \u001B[38;5;241m=\u001B[39m dataset\u001B[38;5;241m.\u001B[39miloc[:,:\u001B[38;5;241m-\u001B[39m\u001B[38;5;241m1\u001B[39m]\n\u001B[0;32m----> 5\u001B[0m dataset \u001B[38;5;241m=\u001B[39m \u001B[43mdataset\u001B[49m\u001B[38;5;241m.\u001B[39miloc[: , \u001B[38;5;241m1\u001B[39m:]\n\u001B[1;32m 6\u001B[0m dataset \u001B[38;5;241m=\u001B[39m dataset\u001B[38;5;241m.\u001B[39mvalues\n\u001B[1;32m 7\u001B[0m model \u001B[38;5;241m=\u001B[39m TrainModel(dataset, \u001B[38;5;241m2\u001B[39m)\n",
|
||||||
|
"File \u001B[0;32m/Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/_pydevd_bundle/pydevd_frame.py:747\u001B[0m, in \u001B[0;36mPyDBFrame.trace_dispatch\u001B[0;34m(self, frame, event, arg)\u001B[0m\n\u001B[1;32m 745\u001B[0m \u001B[38;5;66;03m# if thread has a suspend flag, we suspend with a busy wait\u001B[39;00m\n\u001B[1;32m 746\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m info\u001B[38;5;241m.\u001B[39mpydev_state \u001B[38;5;241m==\u001B[39m STATE_SUSPEND:\n\u001B[0;32m--> 747\u001B[0m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mdo_wait_suspend\u001B[49m\u001B[43m(\u001B[49m\u001B[43mthread\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mframe\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mevent\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43marg\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 748\u001B[0m \u001B[38;5;66;03m# No need to reset frame.f_trace to keep the same trace function.\u001B[39;00m\n\u001B[1;32m 749\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mtrace_dispatch\n",
|
||||||
|
"File \u001B[0;32m/Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/_pydevd_bundle/pydevd_frame.py:144\u001B[0m, in \u001B[0;36mPyDBFrame.do_wait_suspend\u001B[0;34m(self, *args, **kwargs)\u001B[0m\n\u001B[1;32m 143\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21mdo_wait_suspend\u001B[39m(\u001B[38;5;28mself\u001B[39m, \u001B[38;5;241m*\u001B[39margs, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs):\n\u001B[0;32m--> 144\u001B[0m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_args\u001B[49m\u001B[43m[\u001B[49m\u001B[38;5;241;43m0\u001B[39;49m\u001B[43m]\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mdo_wait_suspend\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n",
|
||||||
|
"File \u001B[0;32m/Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/pydevd.py:1155\u001B[0m, in \u001B[0;36mPyDB.do_wait_suspend\u001B[0;34m(self, thread, frame, event, arg, send_suspend_message, is_unhandled_exception)\u001B[0m\n\u001B[1;32m 1152\u001B[0m from_this_thread\u001B[38;5;241m.\u001B[39mappend(frame_id)\n\u001B[1;32m 1154\u001B[0m \u001B[38;5;28;01mwith\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_threads_suspended_single_notification\u001B[38;5;241m.\u001B[39mnotify_thread_suspended(thread_id, stop_reason):\n\u001B[0;32m-> 1155\u001B[0m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_do_wait_suspend\u001B[49m\u001B[43m(\u001B[49m\u001B[43mthread\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mframe\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mevent\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43marg\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43msuspend_type\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mfrom_this_thread\u001B[49m\u001B[43m)\u001B[49m\n",
|
||||||
|
"File \u001B[0;32m/Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/pydevd.py:1170\u001B[0m, in \u001B[0;36mPyDB._do_wait_suspend\u001B[0;34m(self, thread, frame, event, arg, suspend_type, from_this_thread)\u001B[0m\n\u001B[1;32m 1167\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_call_mpl_hook()\n\u001B[1;32m 1169\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mprocess_internal_commands()\n\u001B[0;32m-> 1170\u001B[0m \u001B[43mtime\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43msleep\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;241;43m0.01\u001B[39;49m\u001B[43m)\u001B[49m\n\u001B[1;32m 1172\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mcancel_async_evaluation(get_current_thread_id(thread), \u001B[38;5;28mstr\u001B[39m(\u001B[38;5;28mid\u001B[39m(frame)))\n\u001B[1;32m 1174\u001B[0m \u001B[38;5;66;03m# process any stepping instructions\u001B[39;00m\n",
|
||||||
|
"\u001B[0;31mKeyboardInterrupt\u001B[0m: "
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"import pandas as pd\n",
|
||||||
|
"\n",
|
||||||
|
"dataset = pd.read_csv('iris.csv')\n",
|
||||||
|
"dataset = dataset.iloc[:,:-1]\n",
|
||||||
|
"dataset = dataset.iloc[: , 1:]\n",
|
||||||
|
"dataset = dataset.values\n",
|
||||||
|
"model = TrainModel(dataset, 2)"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"metadata": {
|
"metadata": {
|
||||||
|
Loading…
Reference in New Issue
Block a user