Построение модели обучения в Scikit-learn: библиотека машинного обучения Python

Опубликовано: 15 Июля, 2021

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

Важные особенности scikit-learn:

  • Простые и эффективные инструменты для интеллектуального анализа и анализа данных. Он имеет различные алгоритмы классификации, регрессии и кластеризации, включая опорные векторные машины, случайные леса, повышение градиента, k-средних и т. Д.
  • Доступен всем и может использоваться повторно в различных контекстах.
  • Построен на основе NumPy, SciPy и matplotlib.
  • Открытый исходный код, коммерческое использование - лицензия BSD.

В этой статье мы увидим, как легко построить модель машинного обучения с помощью scikit-learn.

Монтаж:

Scikit-learn требует:

  • NumPy
  • SciPy как его зависимости.

Перед установкой scikit-learn убедитесь, что у вас установлены NumPy и SciPy. Когда у вас есть рабочая установка NumPy и SciPy, самый простой способ установить scikit-learn - использовать pip:

 pip install -U scikit-learn

Давайте теперь приступим к процессу моделирования.

Шаг 1. Загрузите набор данных

Набор данных - это не что иное, как набор данных. Набор данных обычно состоит из двух основных компонентов:

  • Особенности : (также известные как предикторы, входные данные или атрибуты) они просто переменные наших данных. Их может быть больше одного, и поэтому они могут быть представлены матрицей признаков («X» - это обычное обозначение для представления матрицы признаков). Список всех имен функций называется именами функций .
  • Ответ : (также известный как цель, метка или выход). Это выходная переменная, зависящая от переменных функции. Обычно у нас есть один столбец ответа, который представлен вектором ответа («y» - это обычное обозначение для представления вектора ответа). Все возможные значения, принимаемые вектором ответа, называются целевыми именами .

Загрузка образца данных: scikit-learn содержит несколько примеров наборов данных, таких как наборы данных iris и digits для классификации и набор данных о ценах на жилье в Бостоне для регрессии.
Ниже приведен пример того, как можно загрузить образец набора данных:




# load the iris dataset as an example
from sklearn.datasets import load_iris
iris = load_iris()
# store the feature matrix (X) and response vector (y)
X = iris.data
y = iris.target
# store the feature and target names
feature_names = iris.feature_names
target_names = iris.target_names
# printing features and target names of our dataset
print ( "Feature names:" , feature_names)
print ( "Target names:" , target_names)
# X and y are numpy arrays
print ( " Type of X is:" , type (X))
# printing first 5 input rows
print ( " First 5 rows of X: " , X[: 5 ])

Выход:

Названия элементов: ['длина чашелистика (см)', 'ширина чашелистника (см)',
                "длина лепестка (см)", "ширина лепестка (см)"]
Имена целей: ['setosa' 'versicolor' 'virginica']

Тип X: 

Первые 5 рядов Х:
 [[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]]

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

Чтобы установить pandas, используйте следующую команду pip:

pip install pandas

В пандах важными типами данных являются:

Series : Series - это одномерный помеченный массив, способный хранить данные любого типа.

DataFrame : это двумерная помеченная структура данных со столбцами потенциально разных типов. Вы можете думать об этом как о электронной таблице или таблице SQL, или как о наборе объектов Series. Обычно это наиболее часто используемый объект pandas.

Примечание. CSV-файл, используемый в приведенном ниже примере, можно загрузить отсюда: weather.csv




import pandas as pd
# reading csv file
data = pd.read_csv( 'weather.csv' )
# shape of dataset
print ( "Shape:" , data.shape)
# column names
print ( " Features:" , data.columns)
# storing the feature matrix (X) and response vector (y)
X = data[data.columns[: - 1 ]]
y = data[data.columns[ - 1 ]]
# printing first 5 rows of feature matrix
print ( " Feature matrix: " , X.head())
# printing first 5 values of response vector
print ( " Response vector: " , y.head())

Выход:

Форма: (14, 5)

Особенности: Индекс ([u'Outlook ', u'Temperature', u'Humidity ', 
                u'Windy ', u'Play'], dtype = 'объект')

Матрица характеристик:
     Прогноз Температура Влажность Ветрено
0 пасмурно жарко высокая ложь
1 пасмурно прохладно нормально Правда
2 пасмурно умеренно высокая истинно
3 пасмурно жарко нормально ложно
4 дождливый умеренно высокий False

Вектор ответа:
0 да
1 да
2 да
3 да
4 да
Имя: Play, dtype: object

Шаг 2. Разделение набора данных

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

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

Лучшим вариантом является разделение наших данных на две части: первая для обучения нашей модели машинного обучения, а вторая для тестирования нашей модели.
Обобщить:

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

Преимущества сплита поезд / тест:

  • Модель можно обучать и тестировать на данных, отличных от данных, используемых для обучения.
  • Значения ответа известны для тестового набора данных, поэтому прогнозы могут быть оценены
  • Точность тестирования - лучшая оценка, чем точность обучения производительности вне выборки.

Рассмотрим пример ниже:




# load the iris dataset as an example
from sklearn.datasets import load_iris
iris = load_iris()
# store the feature matrix (X) and response vector (y)
X = iris.data
y = iris.target
# splitting X and y into training and testing sets
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.4 , random_state = 1 )
# printing the shapes of the new X objects
print (X_train.shape)
print (X_test.shape)
# printing the shapes of the new y objects
print (y_train.shape)
print (y_test.shape)

Выход:

 (90л, 4л)
(60 л, 4 л)
(90л,)
(60л,)

Функция train_test_split принимает несколько аргументов, которые описаны ниже:

  • X, y : это матрица признаков и вектор ответа, которые необходимо разделить.
  • test_size : это отношение тестовых данных к заданным данным. Например, установка test_size = 0,4 для 150 строк X дает тестовые данные размером 150 x 0,4 = 60 строк.
  • random_state : если вы используете random_state = some_number, вы можете гарантировать, что ваше разделение всегда будет одинаковым. Это полезно, если вы хотите получить воспроизводимые результаты, например, при проверке согласованности в документации (чтобы все могли видеть одни и те же числа).

Шаг 3. Обучение модели

Теперь пришло время обучить некоторую модель прогнозирования, используя наш набор данных. Scikit-learn предоставляет широкий спектр алгоритмов машинного обучения, которые имеют унифицированный / согласованный интерфейс для подгонки, прогнозирования точности и т. Д.

В приведенном ниже примере используется классификатор KNN (K ближайших соседей).

Примечание . Мы не будем вдаваться в подробности того, как работает алгоритм, поскольку нам интересно только понимание его реализации.

Теперь рассмотрим пример ниже:




# load the iris dataset as an example
from sklearn.datasets import load_iris
iris = load_iris()
# store the feature matrix (X) and response vector (y)
X = iris.data
y = iris.target
# splitting X and y into training and testing sets
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.4 , random_state = 1 )
# training the model on training set
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors = 3 )
knn.fit(X_train, y_train)
# making predictions on the testing set
y_pred = knn.predict(X_test)
# comparing actual response values (y_test) with predicted response values (y_pred)
from sklearn import metrics
print ( "kNN model accuracy:" , metrics.accuracy_score(y_test, y_pred))
# making prediction for out of sample data
sample = [[ 3 , 5 , 4 , 2 ], [ 2 , 3 , 5 , 4 ]]
preds = knn.predict(sample)
pred_species = [iris.target_names[p] for p in preds]
print ( "Predictions:" , pred_species)
# saving the model
from sklearn.externals import joblib
joblib.dump(knn, 'iris_knn.pkl' )

Выход:

 кНН точность модели: 0,983333333333
Прогнозы: ['versicolor', 'virginica']

Важные моменты, на которые следует обратить внимание из приведенного выше кода:

  • Мы создаем объект классификатора knn, используя:
     knn = KNeighborsClassifier(n_neighbors=3)
  • Классификатор обучается с использованием данных X_train. Процесс называется подгонкой . Мы передаем матрицу признаков и соответствующий вектор ответа.
     knn.fit(X_train, y_train)
  • Теперь нам нужно протестировать наш классификатор на данных X_test. Для этого используется метод knn.predict. Он возвращает прогнозируемый вектор ответа y_pred .
     y_pred = knn.predict(X_test)
  • Теперь нас интересует точность нашей модели, сравнивая y_test и y_pred . Это делается с помощью метода accuracy_score метрик модуля:
     print(metrics.accuracy_score(y_test, y_pred))
  • Рассмотрим случай, когда вы хотите, чтобы ваша модель делала прогноз на основе выборочных данных. Затем входной образец можно просто передать так же, как мы передаем любую матрицу признаков.
     sample = [[3, 5, 4, 2], [2, 3, 5, 4]] preds = knn.predict(sample)
  • Если вы не заинтересованы в том, чтобы снова и снова обучать свой классификатор и использовать предварительно обученный классификатор, можно сохранить их классификатор с помощью joblib . Все, что вам нужно сделать, это:
     joblib.dump(knn, 'iris_knn.pkl')
  • Если вы хотите загрузить уже сохраненный классификатор, используйте следующий метод:
     knn = joblib.load('iris_knn.pkl')

По мере приближения к концу этой статьи, вот некоторые преимущества использования scikit-learn по сравнению с некоторыми другими библиотеками машинного обучения (например, библиотеками R):

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

Рекомендации:

  • http://scikit-learn.org/stable/documentation.html
  • https://github.com/justmarkham/scikit-learn-videos

Эта статья предоставлена Нихилом Кумаром. Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью с помощью provide.geeksforgeeks.org или отправить ее по электронной почте на deposit@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.

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

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.