Поиск по сайту:

Анализ дерева решений и кластеризации K-средних с использованием набора данных Iris


Деревья решений и алгоритмы кластеризации K-средних – это популярные методы, используемые в науке о данных и машинном обучении для выявления закономерностей и аналитической информации в больших наборах данных, таких как набор данных радужной оболочки глаза. Как мы все знаем, искусственный интеллект широко используется в нашей повседневной жизни: от чтения новостей на мобильном устройстве до анализа сложных данных на работе. Искусственный интеллект повысил скорость, точность и эффективность человеческой деятельности. Развитие искусственного интеллекта позволило нам делать то, что раньше считалось невозможным.

В этой статье мы узнаем об алгоритме дерева решений, а k означает алгоритм кластеризации, а также о том, как применять алгоритм дерева решений, а k означает алгоритм кластеризации в наборе данных радужной оболочки глаза.

Набор данных радужной оболочки глаза

Набор данных «Ирис Фишера» — это многомерный набор данных, ставший известным благодаря британскому статистику и биологу Рональду Фишеру в его работе 1936 года «Использование многочисленных измерений в таксономических вопросах как пример линейного дискриминантного анализа». Работа Фишера была опубликована в журнале. Эдгар Андерсон собрал данные, чтобы изучить морфологические различия, существующие между цветками трех близкородственных видов ирисов. На полуострове Гаспе два из трех видов были собраны «все с одного и того же пастбища, в один и тот же день, одним и тем же человеком с использованием одного и того же измерительного оборудования».

Набор данных состоит из 50 образцов, собранных от каждого из трех видов ириса (Iris setosa, Iris Virginica и Iris versicolor). Длину и ширину чашелистиков и лепестков измеряли в сантиметрах для каждого отдельного образца. Это две из четырех особенностей, которые были измерены.

Древо решений

Приложения, включающие классификацию и регрессию, часто используют метод, известный как дерево решений, который представляет собой непараметрическую форму обучения с учителем. Он имеет иерархическую структуру, похожую на дерево и состоящую из корневого узла, ветвей, внутренних узлов и конечных узлов.

K-средства кластеризации

Кластеризация k-средних — это метод векторного квантования, корни которого лежат в области обработки сигналов. Его цель — разделить n наблюдений на k кластеров так, чтобы каждое наблюдение принадлежало кластеру с ближайшим средним значением (центрами кластера или центроидом кластера), который действует как прототип кластера. Как следствие, это приводит к разделению пространства данных на ячейки Вороного. Хотя геометрическая медиана является единственной, которая может минимизировать евклидовы расстояния, среднее значение оптимизировано для квадратичных ошибок. Например, можно найти улучшенные евклидовы решения, используя k-медианы и k-медоиды.

Дерево решений и алгоритм кластеризации k-средних в наборе данных радужной оболочки глаза

Пример

import pandas as pdd
from sklearn import datasets
import numpy as npp
import sklearn.metrics as smm
import matplotlib.patches as mpatchess
from sklearn.cluster import KMeans
import matplotlib.pyplot as pltt
from sklearn.metrics import accuracy_score
%matplotlib inline
iris = datasets.load_iris()
print(iris.target_names)
print(iris.target)
x1 = pdd.DataFrame(iris.data, columns=['Sepal Length', 'Sepal Width', 'Petal Length', 'Petal Width'])
y1 = pdd.DataFrame(iris.target, columns=['Target'])
x1.head()

Выход

['setosa' 'versicolor' 'virginica']

 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]

     Sepal Length  Sepal Width  Petal Length Petal Width
0   5.1        3.5                   1.4                0.2
1   4.9        3.0                 1.4                0.2
2   4.7        3.2                   1.3                0.2
3   4.6        3.1                   1.5                0.2
4   5.0        3.6                   1.4                0.2

Распечатайте первые 5 строк целевой переменной, которая равна y —

y1.head()

Выход

   Target
0   0
1   0
2   0
3   0
4   0

На следующем шаге постройте рисунок для набора данных, который показывает разницу между переменными набора данных —

pltt.figure(figsize=(12,3))
colors = npp.array(['red', 'green', 'blue'])
iris_targets_legend = npp.array(iris.target_names)
red_patch = mpatchess.Patch(color='red', label='Setosa')
green_patch = mpatchess.Patch(color='green', label='Versicolor')
blue_patch = mpatchess.Patch(color='blue', label='Virginica')
pltt.subplot(1, 2, 1)
pltt.scatter(x1['Sepal Length'], x1['Sepal Width'], c=colors[y1['Target']])
pltt.title('Sepal Length vs Sepal Width')

pltt.legend(handles=[red_patch, green_patch, blue_patch])

pltt.subplot(1,2,2)

pltt.scatter(x1['Petal Length'], x1['Petal Width'], c= colors[y1['Target']])
pltt.title('Petal Length vs Petal Width')
pltt.legend(handles=[red_patch, green_patch, blue_patch])

Выход

Мы определим кластеры на следующем этапе.

iris_k_mean_model = KMeans(n_clusters=3)
iris_k_mean_model.fit(x1)
print(iris_k_mean_model.labels_)

Выход

KMeans(n_clusters=3)
[[5.9016129  2.7483871  4.39354839 1.43387097]
 [5.006      3.428      1.462      0.246     ]
 [6.85       3.07368421 5.74210526 2.07105263]]

Теперь мы построим рисунок до и после классификации —

pltt.figure(figsize=(12,3))

colors = npp.array(['red', 'green', 'blue'])

predictedY = npp.choose(iris_k_mean_model.labels_, [1, 0, 2]).astype(npp.int64)

pltt.subplot(1, 2, 1)
pltt.scatter(x1['Petal Length'], x1['Petal Width'], c=colors[y1['Target']])
pltt.title('Before classification')
pltt.legend(handles=[red_patch, green_patch, blue_patch])

pltt.subplot(1, 2, 2)
pltt.scatter(x1['Petal Length'], x1['Petal Width'], c=colors[predictedY])
pltt.title("Model's classification")
pltt.legend(handles=[red_patch, green_patch, blue_patch])

Выход

Далее мы напечатаем точность модели –

smm.accuracy_score(predictedY, y1['Target'])

Выход

0.24

Далее мы протестируем модель и распечатаем точность для тестового набора данных и набора данных поезда —

from sklearn.metrics import accuracy_score

X = iris.data

# Extracting Target / Class Labels
y = iris.target

# Import Library for splitting data
from sklearn.model_selection import train_test_split

# Creating Train and Test datasets
X_train, X_test, y_train, y_test = train_test_split(X,y, random_state = 50, test_size = 0.25)

# Creating Decision Tree Classifier
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier()

clf.fit(X_train,y_train)
# Predict Accuracy Score
y_pred = clf.predict(X_test)
print("Train data accuracy:",accuracy_score(y_true = y_train, y_pred=clf.predict(X_train)))
print("Test data accuracy:",accuracy_score(y_true = y_test, y_pred=y_pred))

Выход

Train data accuracy: 1.0
Test data accuracy: 0.9473684210526315

Заключение

В заключение отметим, что набор данных радужной оболочки глаза — это обычный набор данных машинного обучения, который часто используется для тестирования различных алгоритмов. Здесь мы использовали популярный алгоритм дерева решений и алгоритм кластеризации K-средних для анализа данных.

Используя эти методы, мы можем узнать больше о структуре данных и использовать эту структуру для прогнозирования и группировки данных.

Статьи по данной тематике: