Scikit-learn — это популярная библиотека машинного обучения для Python, которая предоставляет набор примеров наборов данных для тестирования и оценки алгоритмов машинного обучения. Наборы данных являются важным аспектом машинного обучения, поскольку они позволяют нам оценивать производительность различных алгоритмов и точно настраивать их параметры. В этом посте мы обсудим философию использования наборов данных в scikit-learn и более подробно рассмотрим некоторые из наиболее часто используемых наборов данных.

Философия использования наборов данных в scikit-learn заключается в предоставлении стандартной и простой в использовании коллекции наборов данных, которые можно использовать для тестирования и оценки алгоритмов машинного обучения. Это помогает нам, как специалистам по машинному обучению, быстро приступить к работе и экспериментировать с различными алгоритмами и методами без необходимости собирать и обрабатывать собственные данные.

Наборы данных в scikit-learn просты в использовании, имеют стандартные атрибуты и методы для доступа к данным и целевым значениям. Наборы данных также позволяют вам экспериментировать с различными методами разработки функций и настройкой гиперпараметров без необходимости собирать собственные данные.

🦊Я также приглашаю вас ознакомиться с моими сообщениями о контролируемом и неконтролируемом обучении, которые можно найти в следующих списках тем: Темы о контролируемом обучении, Темы о неконтролируемом обучении.

🦊 Давайте погрузимся в это!

В scikit-learn наборы данных можно разделить на три категории: игровые наборы данных, наборы реальных данных и сгенерированные наборы данных.

📌 Игрушечные наборы данных. Наборы игрушечных данных — это небольшие и простые наборы данных, которые часто используются для демонстрации или тестирования. Как правило, они малоразмерны (ограниченные возможности) и содержат ограниченное количество выборок (ограниченное количество записей). Примеры игрушечных наборов данных в scikit-learn включают наборы данных по радужной оболочке, цифрам и раку молочной железы. Эти наборы данных хороши для начала работы с алгоритмами машинного обучения и тестирования, поскольку с ними легко работать и их легко понять.

📌 Реальные наборы данных. Реальные наборы данных — это более крупные и сложные наборы данных, которые обычно используются для более сложных задач машинного обучения. Они часто берутся из реальных приложений и содержат большое количество примеров и функций. Примеры реальных наборов данных в scikit-learn включают набор данных Boston Housing и набор данных о диабете. Эти наборы данных полезны для тестирования и оценки более сложных алгоритмов машинного обучения, поскольку они лучше отражают сложность и изменчивость реальных данных.

📌 Сгенерированные наборы данных. Сгенерированные наборы данных — это искусственно созданные наборы данных, которые используются для определенной цели или для проверки определенной гипотезы. Они могут быть созданы с использованием различных методов, включая моделирование, случайную выборку и другие. Примеры сгенерированных наборов данных в scikit-learn включают в себя make_classification и make_regression. Эти наборы данных полезны для тестирования конкретных алгоритмов или сравнения производительности различных алгоритмов в контролируемых условиях.

🦊 Пока все хорошо?

Теперь давайте подробнее рассмотрим некоторые из наиболее часто используемых наборов данных в scikit-learn.

  • Набор данных ириса. Этот набор данных содержит 150 образцов цветков ириса, по 4 признака для каждого образца, включая длину чашелистиков, ширину чашелистиков, длину и ширину лепестков. Целевыми значениями являются виды цветов ириса с 3 возможными классами. Набор данных радужной оболочки глаза часто используется как простой и хорошо известный пример задачи классификации.

  • Набор данных Digits: этот набор данных содержит 1797 изображений рукописных цифр с 64 функциями для каждого изображения. Целевыми значениями являются классы цифр от 0 до 9. Набор данных digits часто используется как простой и хорошо известный пример задачи классификации нескольких классов.

  • Набор данных Boston Housing: этот набор данных содержит 506 выборок цен на жилье в районе Бостона с 13 признаками для каждой выборки, включая уровень преступности, среднее количество комнат в жилище и другие. Целевыми значениями являются средняя стоимость домов, занимаемых владельцами, в 1000 долларов. Набор данных Boston Housing часто используется как хорошо известный пример проблемы регрессии.

  • Набор данных о диабете. Этот набор данных содержит 442 образца пациентов с диабетом, по 10 характеристик для каждого образца, включая возраст, артериальное давление и ИМТ. Целевые значения являются количественной мерой прогрессирования заболевания через год после исходного уровня. Набор данных о диабете часто используется в качестве примера проблемы регрессии.

  • Набор данных по раку молочной железы, штат Висконсин (диагностика). Этот набор данных содержит 569 образцов ткани молочной железы с 30 характеристиками для каждого образца, включая средний радиус, среднюю текстуру и другие. Целевыми значениями являются диагноз рака молочной железы с двумя возможными классами. Набор данных рака молочной железы часто используется в качестве примера проблемы бинарной классификации.

  • Набор данных о вине. Этот набор данных содержит 178 образцов вина, по 13 характеристик для каждого образца, включая алкоголь, яблочную кислоту и зольность. Целевыми значениями являются классы вин с 3 возможными классами. Набор данных о вине часто используется в качестве примера задачи классификации нескольких классов.

  • Набор данных Linnerud: этот набор данных содержит 20 образцов людей и их физической подготовки, по 3 признака для каждого образца, включая тяжелую атлетику, подтягивания и прыжковые способности. Целевыми значениями являются частоты пульса людей. Набор данных Linnerud часто используется в качестве примера проблемы регрессии.

  • Набор данных Make Moons. Этот набор данных содержит 1000 образцов двух чередующихся полукругов, по 2 функции для каждого образца. Целевыми значениями являются классы образцов с двумя возможными классами. Набор данных Make Moons часто используется в качестве примера задачи бинарной классификации.

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

🦊 Общие атрибуты и методы баз данных scikit-learn

Библиотека scikit-learn предоставляет несколько классов для загрузки наборов данных и управления ими, включая load_iris, load_digits, load_boston, load_diabetes и другие. Эти классы используются для загрузки выборочных наборов данных в память и предоставления данных в стандартном формате для использования в алгоритмах машинного обучения.

Каждый класс имеет общие атрибуты и методы, которые используются для доступа к данным и управления ими.

Некоторые общие атрибуты:

  • data: двумерный массив формы (n_samples, n_features), содержащий характеристики каждого образца.
  • target: одномерный массив формы (n_samples,), содержащий целевые значения каждого образца.
  • feature_names: список названий каждой функции.
  • DESCR: строка, содержащая описание набора данных.

Некоторые распространенные методы:

  • keys(): возвращает список атрибутов класса.
  • shape: возвращает форму атрибута data.
  • head(): возвращает первые несколько строк атрибута data.

Вот пример кода, который демонстрирует, как загрузить набор данных iris с помощью класса load_iris:

from sklearn.datasets import load_iris

iris = load_iris()

print("Keys: ", iris.keys())
print("Shape: ", iris.data.shape)
print("Feature Names: ", iris.feature_names)
print("Target Names: ", iris.target_names)
print("Description: ", iris.DESCR)
Keys:  dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module'])
Shape:  (150, 4)
Feature Names:  ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
Target Names:  ['setosa' 'versicolor' 'virginica']
Description:  .. _iris_dataset:

Iris plants dataset
--------------------

**Data Set Characteristics:**

    :Number of Instances: 150 (50 in each of three classes)
    :Number of Attributes: 4 numeric, predictive attributes and the class
    :Attribute Information:
        - sepal length in cm
        - sepal width in cm
        - petal length in cm
        - petal width in cm
        - class:
                - Iris-Setosa
                - Iris-Versicolour
                - Iris-Virginica
                
    :Summary Statistics:

    ============== ==== ==== ======= ===== ====================
                    Min  Max   Mean    SD   Class Correlation
    ============== ==== ==== ======= ===== ====================
    sepal length:   4.3  7.9   5.84   0.83    0.7826
    sepal width:    2.0  4.4   3.05   0.43   -0.4194
    petal length:   1.0  6.9   3.76   1.76    0.9490  (high!)
    petal width:    0.1  2.5   1.20   0.76    0.9565  (high!)
    ============== ==== ==== ======= ===== ====================

    :Missing Attribute Values: None
    :Class Distribution: 33.3% for each of 3 classes.
    :Creator: R.A. Fisher
    :Donor: Michael Marshall (MARSHALL%[email protected])
    :Date: July, 1988

The famous Iris database, first used by Sir R.A. Fisher. The dataset is taken
from Fisher's paper. Note that it's the same as in R, but not as in the UCI
Machine Learning Repository, which has two wrong data points.

This is perhaps the best known database to be found in the
pattern recognition literature.  Fisher's paper is a classic in the field and
is referenced frequently to this day.  (See Duda & Hart, for example.)  The
data set contains 3 classes of 50 instances each, where each class refers to a
type of iris plant.  One class is linearly separable from the other 2; the
latter are NOT linearly separable from each other.

.. topic:: References

   - Fisher, R.A. "The use of multiple measurements in taxonomic problems"
     Annual Eugenics, 7, Part II, 179-188 (1936); also in "Contributions to
     Mathematical Statistics" (John Wiley, NY, 1950).
   - Duda, R.O., & Hart, P.E. (1973) Pattern Classification and Scene Analysis.
     (Q327.D83) John Wiley & Sons.  ISBN 0-471-22361-1.  See page 218.
   - Dasarathy, B.V. (1980) "Nosing Around the Neighborhood: A New System
     Structure and Classification Rule for Recognition in Partially Exposed
     Environments".  IEEE Transactions on Pattern Analysis and Machine
     Intelligence, Vol. PAMI-2, No. 1, 67-71.
   - Gates, G.W. (1972) "The Reduced Nearest Neighbor Rule".  IEEE Transactions
     on Information Theory, May 1972, 431-433.
   - See also: 1988 MLC Proceedings, 54-64.  Cheeseman et al"s AUTOCLASS II
     conceptual clustering system finds 3 classes in the data.
   - Many, many more ...

🦊 Мы почти закончили! Теперь давайте сделаем небольшое упражнение

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

  1. Во-первых, мы создаем набор данных с 1000 выборками, 20 функциями и 15 функциями, несущими информативные сигналы о цели. Цель состоит из двух классов, представляющих, купит ли клиент продукт (класс 1) или нет (класс 0).
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_classes=2, random_state=0)

2. Теперь давайте разделим сгенерированный набор данных на наборы данных для обучения и тестирования.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)

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

from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(random_state=0)
clf.fit(X_train, y_train)

4. Оцените производительность модели на тестовом наборе данных.

y_pred = clf.predict(X_test)
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

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