Построение модели обучения в Scikit-learn: библиотека машинного обучения Python
Предварительное условие: начало работы с машинным обучением
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. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.