In [29]:
from sklearn import datasets
iris = datasets.load_iris()
print("Набор данных для обучения (2D NumPy Array): \n", iris.data[:15], '\n')
print("Заголовки столбцов: \n", iris.feature_names, '\n')
print("Набор целей для данных (1D NumPy Array): \n", iris.target)


Набор данных для обучения (2D NumPy Array): 
 [[ 5.1  3.5  1.4  0.2]
 [ 4.9  3.   1.4  0.2]
 [ 4.7  3.2  1.3  0.2]
 [ 4.6  3.1  1.5  0.2]
 [ 5.   3.6  1.4  0.2]
 [ 5.4  3.9  1.7  0.4]
 [ 4.6  3.4  1.4  0.3]
 [ 5.   3.4  1.5  0.2]
 [ 4.4  2.9  1.4  0.2]
 [ 4.9  3.1  1.5  0.1]
 [ 5.4  3.7  1.5  0.2]
 [ 4.8  3.4  1.6  0.2]
 [ 4.8  3.   1.4  0.1]
 [ 4.3  3.   1.1  0.1]
 [ 5.8  4.   1.2  0.2]] 

Заголовки столбцов: 
 ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'] 

Набор целей для данных (1D NumPy Array): 
 [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]

In [4]:
print("Форма массива данных для обучения: \n", iris.data.shape)
print("Форма массива целей: \n", iris.target.shape)


Форма массива данных для обучения: 
 (150, 4)
Форма массива целей: 
 (150,)

Возьмем один из методов прошлой лекции для задачи классификации. Например, метод кластеризации $k$-средних.


In [5]:
from sklearn.cluster import KMeans

Зададим предполагаемое количество кластеров равным количеству классу.


In [30]:
cls = KMeans(n_clusters=3, random_state=42)

Запустим процесс кластеризации.


In [31]:
cls.fit(iris.data)


Out[31]:
KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,
    n_clusters=3, n_init=10, n_jobs=1, precompute_distances='auto',
    random_state=42, tol=0.0001, verbose=0)

Продемонстрируем результат кластеризации.


In [32]:
%matplotlib inline
import matplotlib.pyplot as plt

plt.figure(figsize=(12, 12))
for i in range(4):
    for j in range(4):
        if i != j:
            plt.subplot(4, 4, (i+1) + j * 4)
            plt.scatter(iris.data[:, i], iris.data[:, j], c=cls.labels_ / max(cls.labels_), cmap='rainbow')
            plt.xlabel(iris.feature_names[i])
            plt.ylabel(iris.feature_names[j])
plt.tight_layout()


Классы исходных данных образуют явно различимые на большинстве систем координат кластеры.