scikit-learn учебник
Начало работы с scikit-learn
Поиск…
замечания
scikit-learn
- универсальная библиотека с открытым исходным кодом для анализа данных, написанная на python. Он основан на других библиотеках python: NumPy, SciPy и matplotlib
scikit-learn
содержит ряд реализаций для разных популярных алгоритмов машинного обучения.
Установка scikit-learn
Текущая стабильная версия scikit-learn требует :
- Python (> = 2.6 или> = 3.3),
- NumPy (> = 1,6,1),
- SciPy (> = 0,9).
Для большинства pip
установки python менеджер пакетов может установить python и все его зависимости:
pip install scikit-learn
Однако для Linux-систем рекомендуется использовать диспетчер пакетов conda
, чтобы избежать возможных процессов сборки
conda install scikit-learn
Чтобы проверить, что у вас есть scikit-learn
, выполните в оболочке:
python -c 'import sklearn; print(sklearn.__version__)'
Установка Windows и Mac OSX:
Canopy и Anaconda поставляют новую версию scikit-learn в дополнение к большому набору научной библиотеки python для Windows, Mac OSX (также актуальной для Linux).
Обучить классификатор с перекрестной проверкой
Использование набора диафрагмы:
import sklearn.datasets
iris_dataset = sklearn.datasets.load_iris()
X, y = iris_dataset['data'], iris_dataset['target']
Данные разделяются на поезда и тестовые наборы. Для этого мы используем train_test_split
утилиты train_test_split
для разделения как X
и y
(данных и целевых векторов) случайным образом с опцией train_size=0.75
(учебные наборы содержат 75% данных).
Учебные наборы данных подаются в классификатор k-ближайших соседей . Метод fit
классификатора будет соответствовать модели данным.
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.75)
from sklearn.neighbors import KNeighborsClassifier
clf = KNeighborsClassifier(n_neighbors=3)
clf.fit(X_train, y_train)
Наконец, предсказание качества тестового образца:
clf.score(X_test, y_test) # Output: 0.94736842105263153
Используя одну пару поездов и тестовых наборов, мы можем получить предвзятую оценку качества классификатора из-за произвольного выбора разделения данных. Используя кросс-валидацию, мы можем поместить классификатор на разные поезда / тестовые подмножества данных и составить среднее значение по всем результатам точности. Функция cross_val_score
классификатор входным данным с использованием кросс-валидации. Он может принимать в качестве входного количества различных разделов (сгибов), которые будут использоваться (5 в приведенном ниже примере).
from sklearn.cross_validation import cross_val_score
scores = cross_val_score(clf, X, y, cv=5)
print(scores)
# Output: array([ 0.96666667, 0.96666667, 0.93333333, 0.96666667, 1. ])
print "Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() / 2)
# Output: Accuracy: 0.97 (+/- 0.03)
Создание трубопроводов
Поиск шаблонов в данных часто происходит в цепочке шагов обработки данных, например, при выборе, нормализации и классификации. В sklearn
для этого используется трубопровод этапов.
Например, следующий код показывает конвейер, состоящий из двух этапов. Первый масштабирует функции, а второй обучает классификатор в полученном расширенном наборе данных:
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
pipeline = make_pipeline(StandardScaler(), KNeighborsClassifier(n_neighbors=4))
После создания конвейера вы можете использовать его как обычный этап (в зависимости от его конкретных шагов). Здесь, например, конвейер ведет себя как классификатор. Следовательно, мы можем использовать его следующим образом:
# fitting a classifier
pipeline.fit(X_train, y_train)
# getting predictions for the new data sample
pipeline.predict_proba(X_test)
Интерфейсы и условные обозначения:
Различные операции с данными выполняются с использованием специальных классов.
Большинство классов относятся к одной из следующих групп:
- алгоритмы классификации (полученные из
sklearn.base.ClassifierMixin
) для решения задач классификации - регрессионные алгоритмы (полученные от
sklearn.base.RegressorMixin
) для решения проблемы восстановления непрерывных переменных (проблема регрессии) - преобразование данных (полученное из
sklearn.base.TransformerMixin
), которое препроцессор данных
Данные хранятся в numpy.array
s (но другие pandas.DataFrame
объекты, такие как pandas.DataFrame
s, принимаются, если они конвертируются в numpy.array
s)
Каждый объект в данных описывается набором функций, общее соглашение состоит в том, что образец данных представлен массивом, где первое измерение является идентификатором выборки данных, второе измерение - идентификатором функции.
import numpy
data = numpy.arange(10).reshape(5, 2)
print(data)
Output:
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
В sklearn
выше наборе данных sklearn
содержит 5 объектов, каждый из которых описывается двумя функциями.
Примеры наборов данных
Для удобства тестирования sklearn
предоставляет некоторые встроенные наборы данных в модуле sklearn.datasets
. Например, давайте загрузим набор данных диафрагмы Fisher:
import sklearn.datasets
iris_dataset = sklearn.datasets.load_iris()
iris_dataset.keys()
['target_names', 'data', 'target', 'DESCR', 'feature_names']
Вы можете прочитать полное описание, имена функций и имена классов ( target_names
). Они хранятся в виде строк.
Нам интересны данные и классы, которые хранятся в data
и target
полях. По соглашению они обозначаются как X
и y
X, y = iris_dataset['data'], iris_dataset['target']
X.shape, y.shape
((150, 4), (150,))
numpy.unique(y)
array([0, 1, 2])
Формы X
и y
говорят, что есть 150 образцов с четырьмя функциями. Каждый образец относится к одному из следующих классов: 0, 1 или 2.
Теперь X
и y
можно использовать для обучения классификатора, вызывая метод fit()
классификатора.
Вот полный список наборов данных, предоставляемых модулем sklearn.datasets
с их размером и предполагаемым использованием:
Загрузите | Описание | Размер | использование |
---|---|---|---|
load_boston() | Набор данных о ценах на жилье в Бостоне | 506 | регрессия |
load_breast_cancer() | Рак молочной железы Висконсин | 569 | классификация (двоичная) |
load_diabetes() | Набор данных диабета | 442 | регрессия |
load_digits(n_class) | Цифры данных | 1797 | классификация |
load_iris() | Набор данных Iris | 150 | классификация (многоклассовый) |
load_linnerud() | Набор данных Linnerud | 20 | многомерная регрессия |
Обратите внимание, что (источник: http://scikit-learn.org/stable/datasets/) :
Эти наборы данных полезны, чтобы быстро проиллюстрировать поведение различных алгоритмов, реализованных в scikit. Однако они часто слишком малы, чтобы быть репрезентативными для реальных задач машинного обучения.
В дополнение к этим встроенным наборам данных для образцов игрушек, sklearn.datasets
также предоставляет служебные функции для загрузки внешних наборов данных:
-
load_mlcomp
для загрузки примерных наборов данных из репозитория mlcomp.org (обратите внимание, что наборы данных необходимо загрузить до этого). Вот пример использования. -
fetch_lfw_pairs
иfetch_lfw_people
для загрузки набора данных с маркированными лицами в Wild (LFW) из http://vis-www.cs.umass.edu/lfw/ , которые используются для проверки лица (соответственно распознавания лиц). Этот набор данных больше 200 МБ. Вот пример использования.