Scikit-Learn - один из лучших инструментов в сообществе машинного обучения, который используют как ученые, так и профессионалы отрасли.
В ODSC West автор Scikit-Learn Андреас Мюллер проведет тренировку, чтобы дать новичкам ускоренный курс. Как один из основных участников Scikit-Learn, Мюллер является одним из самых знающих людей в мире по этому пакету и одним из лучших, кто может получить представление о нем.
Это сложно превзойти, но было бы полезно узнать немного о Scikit-Learn перед посещением конференции. Мы сделаем краткое описание того, как некоторые из основных компонентов SK-L сочетаются друг с другом и как вы можете начать обучение моделей уже сегодня.
Что мы пытаемся узнать?
Самое важное, что нужно понять с самого начала, - это то, чему мы на самом деле пытаемся научиться. Хотим ли мы классифицировать наши данные по разным категориям? Установить линию регрессии? Кластеризовать данные? Это будет определять, с какой моделью вы решите работать.
В нашем примере, чтобы получить представление о взаимосвязи между ценами на вино и отзывами, мы будем использовать модель гребневой регрессии (регуляризованная версия линейной регрессии). Я вытащил собранную коллекцию обзоров от Wine Enthusiast, доступных через Kaggle. Я надеюсь определить, есть ли связь между ценой вина и оценкой, полученной критиками Wine Enthusiast. Давайте разберемся!
Первое, что нам нужно сделать, это извлечь данные и очистить все строки, с которыми мы не заинтересованы работать (например, пустые значения). Затем мы нормализуем наши данные до интервала от 0 до 1 для простоты процесса обучения.
import pandas as pd #Read in data data = pd.concat([ pd.read_csv('data/winemag-data_first150k.csv'), pd.read_csv('data/winemag-data-130k-v2.csv') ], ignore_index=True) #Clean data, pare down data = data.loc[ (~data['price'].isnull()) & (~data['points'].isnull()) ][['price', 'points']] #Normalize data on 0 to 1 interval data['price'] = (data['price'] - data['price'].min() + .001) / (data['price'].max() - data['price'].min()) data['points'] = (data['points'] - data['points'].min() + .001) / (data['points'].max() - data['points'].min())
Разделить наши данные на наборы для обучения и тестирования с помощью Scikit-Learn очень просто. Это все, что вам нужно сделать, чтобы пройти стандартный раздел тренировочных тестов 80–20 со случайным выбором.
from sklearn.model_selection import train_test_split #Train-test split training, test = train_test_split(data, train_size=.8, shuffle=True)
Теперь осталось только обучить и оценить нашу модель.
from sklearn.linear_model import RidgeCV import numpy as np #Instantiate, train model model = RidgeCV(alphas=np.arange(0,10,.2), cv=10) model.fit(np.vstack(training['price'].values), np.vstack(training['points'].values))
Как мы выступили?
print(model.score(np.vstack(test['price']), np.vstack(test['points']))) 0.200493125822
Ужасно! Значение R-квадрата 0,20 - это довольно плохая производительность, и мы не должны использовать ее в реальных условиях.
Хорошая новость в том, что это все! Нам удалось обучить регуляризованную модель с перекрестной проверкой и правильным разделением на обучение и тест в 35 строках Python. Вот и все.
#!/usr/bin/env python3 from sklearn.linear_model import RidgeCV from sklearn.model_selection import train_test_split import numpy as np import pandas as pd def main(): #Read in data data = pd.concat([ pd.read_csv('data/winemag-data_first150k.csv'), pd.read_csv('data/winemag-data-130k-v2.csv') ], ignore_index=True) #Clean data, pare down data = data.loc[ (~data['price'].isnull()) & (~data['points'].isnull()) ][['price', 'points']] #Normalize data on 0 to 1 interval data['price'] = (data['price'] - data['price'].min() + .001) / (data['price'].max() - data['price'].min()) data['points'] = (data['points'] - data['points'].min() + .001) / (data['points'].max() - data['points'].min()) #Train-test split training, test = train_test_split(data, train_size=.8, shuffle=True) #Instantiate, train model model = RidgeCV(alphas=np.arange(0,10,.2), cv=10) model.fit(np.vstack(training['price'].values), np.vstack(training['points'].values)) print(model.score(np.vstack(test['price']), np.vstack(test['points']))) if __name__ == '__main__': main()
Не слишком потрепанный. А это означает, что мы можем быстро выполнить итерацию и перестроить нашу модель, чтобы настроить производительность по мере необходимости. Может быть, в следующий раз мы попробуем регрессию гребня с нелинейным ядром или попробуем посмотреть, есть ли кластеры в соответствии с ценой.
Scikit-Learn - отличный способ для профессионалов ускорить процесс разработки, а для новичков - попробовать себя в машинном обучении. А в ODSC West вы можете узнать прямо у одного из создателей пакета.
— — — — — — — — — — — — — — — — — —
Прочтите больше статей по науке о данных на OpenDataScience.com, включая учебные пособия и руководства от новичка до продвинутого уровня! Подпишитесь на нашу еженедельную рассылку здесь и получайте последние новости каждый четверг.