Создавать модели машинного обучения — это КРУТО! Ваша первая модель не должна быть сложной и причудливой. Нет! Это ваша первая попытка; получайте удовольствие, делая это!
Моей первой моделью была модель линейной регрессии для прогнозирования цен на жилье в зависимости от размера квартиры. Мой второй? Я предсказал цены на жилье в зависимости от местоположения. Затем третий — прогнозирование цен на жилье в зависимости от размера, местоположения и типа района. Я наконец научился обучать модели на основе наборов данных временных рядов; они были немного продвинутыми. Тем не менее, все это были увлекательные занятия.
Занимаясь этим, я понял, что построение простой модели машинного обучения обычно требует определенного набора шагов.
Я расскажу о них ниже.
ПОКАЗАТЕЛЬНЫЙ ПРИМЕР: В этой статье я построю модель линейной регрессии для прогнозирования цен на жилье («house_price_usd») с учетом размера («house_size_m2») и местоположения («широта», «лон»).
Этап №1: Подготовка данных
Прежде всего, аналитики данных должны иметь доступ к соответствующим данным. Обычно его не подают на серебряной тарелке. Частью работы аналитика данных является преобразование НЕОБЫЧНЫХ ДАННЫХ в «чистый» набор данных, который должен предоставить значимую информацию.
Выберите свои любимые инструменты — Python, R, MS Excel, SPSS и т. д. — и погрузитесь в эти три вида деятельности:
Импортировать данные
Мой любимый подход к очистке и изучению характера моего набора данных — использование его исходного формата. Например, я часто использую Microsoft Excel для изучения данных, хранящихся в файлах или форматах CSV и XLSX, перед их импортом в Python — это считается хорошей практикой.
Далее, испачкайте руки!
#importing CSV files into Python df = pd.read_csv(filepath)
Изучите данные
Исследование данных похоже на искусство: у каждого может быть свой уникальный стиль исследования данных. Однако ваши исследовательские вопросы ВСЕГДА должны быть вашим путеводным компасом.
Сначала изучите нулевые значения (NaN) и то, как они повлияют на ваш анализ — отбросьте/заполните их, если они незначительны/значительны.
#identify columns with more than 50% NaN values df.isnull().sum() / len(df) #drop columns with more than 50% NaN values df.drop(columns=[ "column1", "column2" ], inplace=True)
Другие вопросы, которые следует рассмотреть, прежде чем переходить к следующему этапу:
Высокая и низкая кардинальность.Высокая кардинальность относится к ситуации, когда набор данных или столбец содержит большое количество уникальных значений. Например, столбец с URL-ссылками практически не содержит информации о вашей модели; тебе следует бросить это.
Низкая мощность? Это происходит, когда столбец содержит относительно небольшое количество уникальных значений. Примеры значений столбцов с низкой мощностью включают логические значения, пол и другие основные классификации. В большинстве случаев эти столбцы нам не понадобятся для построения модели линейной регрессии.
Утечки в вашем наборе данных.Утечки могут возникнуть, когда ваша модель имеет доступ к «будущей информации» — информации, которая, как ожидается, не будет доступна во время прогнозирования. Думайте об этом как о получении ответов на экзамен перед сдачей экзаменов. Или ваша модель знает некоторую часть тестовых данных после обучения. Например, если цены на жилье указаны в долларах США, то любой столбец, отражающий цены на жилье в местной валюте (обмен валюты), должен быть удален.
То есть любые данные, относящиеся к целевой функции, не должны использоваться для обучения модели.
Мультиколлинеарность:Это ситуация, когда функции сильно коррелируют. Если две функции сильно коррелируют, отбросьте одну. Особенно тот, у которого меньше записей (строк).
Отличный способ проверить мультиколлинеарность — использовать тепловую карту.
#import necessary library import seaborn as sns #create a correlation matrix and convert it to a heatmap corr_matrix = df.select_dtypes("numbers").corr() sns.heatmap(corr)
**Список не является исчерпывающим. Изучите другие характеристики ваших данных, исходя из потребностей и ожиданий вашего анализа.
Разделить данные
Определите свой «целевой вектор» и «матрицу признаков». В нашем случае целью являются цены на жилье, а характеристиками — размер и местоположение (широта и долгота).
#define your target: price in USD target = "house_price_usd" y_train = df[target] #use y for dependent variables #define your features: size, and location of the house features = ["house_size_m2", "lat", "lon"] X_train = df[features] #use X for independent variables
Обратите внимание, что целевая переменная не имеет квадратных скобок []. Это потому, что нам нужна целевая переменная в одном измерении (ВЕКТОР — одна строка, ноль столбцов), а не в многомерном (МАТРИЦА — несколько строк и столбцов). Противоположное верно для переменной «функции».
В некоторых случаях вам придется разделить данные на набор обучающих данных и набор тестовых данных — если только у вас нет двух разных наборов данных для целей тестирования и обучения.
В любом случае на данный момент у вас есть чистый и пригодный к использованию набор данных. И вы готовы построить свою модель линейной регрессии.
Этап № 2: Построение модели
Этот этап включает в себя извлечение информации и знаний из вашего набора данных и установление связей между переменными. Модель подчеркнет степень связи (коэффициент) между зависимыми и независимыми переменными. Этот этап можно разбить на ТРИ этапа:
Базовый уровень
Чтобы построить надежную модель, вам необходимо установить определенные стандарты. Это включает в себя создание простой модели, которая предоставит вам базовый стандарт для использования на протяжении всего вашего проекта.
Для простой модели линейной регрессии базовая метрика получается из СРЕДНЕГО целевого значения и СРЕДНЕЙ АБСОЛЮТНОЙ ОШИБКИ вашей простой модели. Давайте посмотрим, как это можно сделать:
#find the mean of your target (house_prices) y_mean = y_train.mean() #create you predicrion baseline from the mean value above y_prediction_baseline = [y_mean] * len(y_train) #use the two results to calculate the mean absolute error (MAE) baseline from sklearn.metrics import mean_absolute_error #import MAE from scikit-learn library MAE_baseline = mean_absolute_error(y_train, y_prediction_baseline) #print the mean house price and the baseline MAE print("Mean house price:" round(y_mean, 2)) print("Baseline MAE:" MAE_baseline.round(2))
Итерировать
Итерация означает использование определенных методов или инструментов циклами или частями для уточнения и улучшения вашей модели. То есть подогнать модель, содержащую один или несколько счетчиков и предиктор из библиотеки Scikit-learn.
Простая модель будет работать с одним предиктором следующим образом:
#instantiate the LinearRegression model from sklearn.linear_model import LinearRegression model = LinearRegression() #fit the model to the data, X_train and y_train model.fit(X_train, y_train)
Интересно, что Scikit-learn позволяет аналитикам данных определить набор шагов для обработки данных, прежде чем делать какие-либо прогнозы. Вы можете сделать это, создав конвейер — конвейер состоит из одного или нескольких преобразователей (импутеров) и заканчивается предиктором, как показано в примере ниже.
Примеры импутеров или преобразователей в Scikit-learn включают SimpleImputer, MinMaxScaler, Ordinal Encoder, One Hot Encoder и Power Transformer.
Например, если в вашем большом наборе данных мало неполных или пропущенных значений, Scikit-learn может вменитьпропущенные значения в соответствующих строках или столбцах. Один из способов сделать это — использовать Scikit-learn Simple Imputer.
#instantiate the LinearRegression model from sklearn.linear_model import LinearRegression from sklearn.pipeline import make_pipeline model = make_pipeline( SimpleImputer(), #SimpleImputer is a transformer LinearRegression() #LinearRegression is a predictor ) #fit the model to the data, X_train and y_train model.fit(X_train, y_train)
Оценивать
Вы обучили свою модель. Теперь, как он работает в соответствии с установленными стандартами? Вам нужно будет сравнить MAE_baseline и MAE_pred_training. См. ниже:
#check code for MAE_baseline above #perform house prices prediction using your model y_predictions = model.predict(X_train) #calculate the MAE_pred_training MAE = mean_absolute_error(y_train, y_predictions) #print the results print("Training MAE:" MAE.round(2))
Критерии оценки:Значение MAE_pred_training должно быть намного меньше, чем MAE_baseline.
Этап №3: Обнародование результатов
Функция прогнозирования
Что ваша модель говорит о переменных? Обычно это можно определить путем анализа коэффициентов каждой переменной. Глядя на простую функцию линейной регрессии, «m» — это коэффициент переменной «x», тогда как «y» — это цель, а «c» — это точка пересечения.
y = mx + c
Ту же функцию можно расширить при наличии нескольких переменных следующим образом:
y = β1 + β2(x2) + β3(x3)
Сначала давайте найдем коэффициент, связанный с переменными “house_size_m2”, “lot” и “lon”.
#coefficient of a model without a transformer coefficient = round(model.coef_[0],2) #first coefficient #coefficienct of a model with a transformer/pipeline coefficient = model.named_steps["linearregression"].coef_.round(2)
Затем вам нужно будет найти перехват:
#intercept of a model without a transformer intercept = round(model.intercept_, 2) #intercept of a model with a transformer intercept = model.named_steps["linearregression"].intercept_.round(2)
Наконец, у нас есть модель линейной регрессии вида:
#print the linear regression equation determined by your model print( "house price USD = {} + ({}* house size) + ({}*lat) + ({}*lon)" .format(intercept, coefficient[0], coefficient[1], coefficient[2]) )
Размер коэффициентов будет определять степень влияния характеристики на цель (цены на жилье в долларах США).
Интерактивная панель диаграммы
Визуальное представление данных имеет решающее значение для коммуникации, поскольку позволяет передавать сложную информацию быстро, четко и эффективно. Использование визуальных эффектов в вашем общении упрощает сложные данные, повышает ясность, облегчает запоминаемость и привлекает аудиторию.
Хорошей практикой при работе с моделями линейной регрессии является сопоставление их с соответствующими наборами данных.
То есть постройте двухмерную или трехмерную диаграмму рассеяния на основе вашей линейной модели в зависимости от количества независимых переменных в вашей модели.