Я всегда думал о создании сквозной системы машинного обучения, которая может продемонстрировать мощь машинного обучения. В конце концов, я построил ее, следуя курсу, предоставленному Google Cloud на Coursera. Я искренне рекомендую всем ML Enthuest следовать курсу, чтобы построить то, что называется конечным. Конец решения ML.

Конечный продукт будет примерно так

Выглядит восхитительно, следуй за мной и стань хозяином там, где ты сейчас находишься

Этот пост разделен на 5 частей, каждая из которых посвящена каждой задаче.

  1. Изучение набора данных
  2. образец прототипа
  3. Построение модели
  4. обучение на прототипе и фактическом наборе данных
  5. развернитесь и гордитесь тем, что вы что-то сделали

Чтобы следовать примеру кода, я настоятельно рекомендую вам получить один действительный идентификатор облака.

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

Мы будем работать с набором данных natality, предлагаемым в наборе данных Bigquery. Наша первая задача - изучить набор данных, поэтому сначала мы аутентифицируем себя для работы на облачной платформе Google. Итак, перейдите на https://cloud.google.com/, создайте идентификатор проекта, запомните, что он нам понадобится для остальной части курса, затем создайте корзину в облаке Google и из оболочки облачной мощности создайте экземпляр базы данных, который откроется. на порте 8081 до сих пор у вас есть идентификатор проекта, что означает, что вы юридически уполномочены делать то, что вы хотите, и у вас есть учетная запись для хранения данных. Теперь создайте один блокнот и напишите сценарий bash

%%bash
if ! gsutil ls | grep -q gs://${BUCKET}/; then
  gsutil mb -l ${REGION} gs://${BUCKET}
fi

но перед этим сообщите в datalab свою личность

# change these to try this notebook out
BUCKET = 'cloud-training-demos-ml'
PROJECT = 'cloud-training-demos'
REGION = 'us-central1'

Самое интересное в Bigquery заключается в том, что он позволяет запускать не только python, но и sql bash одновременно, как вы можете делать в блокнотах databricks, если вы когда-либо запускали какое-либо искровое задание на модулях данных. Наша цель в этом курсе - предсказать новорожденных вес малышей с учетом некоторых предопределенных параметров.

Теперь мы создадим sql-запрос, используя набор данных natality через 2000 лет.

# Create SQL query using natality data after the year 2000
query = """
SELECT
  weight_pounds,
  is_male,
  mother_age,
  plurality,
  gestation_weeks,
  ABS(FARM_FINGERPRINT(CONCAT(CAST(YEAR AS STRING), CAST(month AS STRING)))) AS hashmonth
FROM
  publicdata.samples.natality
WHERE year > 2000
"""

так что, если вы являетесь поклонником sql, как я, вы можете увидеть, как легко работать с datalab. Теперь здесь происходит несколько вещей, мы выбираем столбцы weight_pounds,
is_male, mother_age, plurality, gestation_weeks из publicdata.samples.natality набор данных с предложением where, что нам нужны все записи, где год больше 2000, но подождите здесь и подумайте на мгновение, что произойдет, если мы будем запускать его каждый раз, поскольку он включает чертовски количество данных, мы будем каждый раз получать разные наборы данных мы запускаем запрос, поэтому для получения тех же данных мы используем здесь функцию Farm_Fingerprint.

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

# Call BigQuery and examine in dataframe
import google.datalab.bigquery as bq
df = bq.Query(query + " LIMIT 100").execute().result().to_dataframe()
df.head()

здесь мы просто говорим, привет, bigquery, я написал запрос, я хочу, чтобы вы его выполнили, сохраните результат как фрейм данных и покажите мне первые 5 строк

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

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

# Create function that finds the number of records and the average weight for each value of the chosen column
def get_distinct_values(column_name):
  sql = """
SELECT
  {0},
  COUNT(1) AS num_babies,
  AVG(weight_pounds) AS avg_wt
FROM
  publicdata.samples.natality
WHERE
  year > 2000
GROUP BY
  {0}
  """.format(column_name)
  return bq.Query(sql).execute().result().to_dataframe()

Теперь, когда мы вызовем эту функцию и передадим другое значение столбца, она будет генерировать различную статистику в соответствии со значением выбранного столбца.

# Bar plot to see is_male with avg_wt linear and num_babies logarithmic
df = get_distinct_values('is_male')
df.plot(x='is_male', y='num_babies', logy=True, kind='bar');
df.plot(x='is_male', y='avg_wt', kind='bar');

теперь мы используем гистограмму для визуализации связи между is_male и avg_wt. Посмотрите, как изменение масштаба по оси Y меняет эстетику графика. Вы можете использовать ту же концепцию журнала, когда делаете график для распределения благосостояния людей.

Здесь мы хотим увидеть, имеет ли mother_age какое-либо отношение к avg_wt младенцев и количеству младенцев

# Line plots to see mother_age with avg_wt linear and num_babies logarithmic
df = get_distinct_values('mother_age')
df = df.sort_values('mother_age')
df.plot(x='mother_age', y='num_babies');
df.plot(x='mother_age', y='avg_wt');

Теперь график Bar, чтобы увидеть множественность (одиночные, близнецы и т. Д.) С avg_wt linear и num_babies

# Bar plot to see plurality(singleton, twins, etc.) with avg_wt linear and num_babies logarithmic
df = get_distinct_values('plurality')
df = df.sort_values('plurality')
df.plot(x='plurality', y='num_babies', logy=True, kind='bar');
df.plot(x='plurality', y='avg_wt', kind='bar');

Теперь мы делаем то же самое, чтобы выяснить ту же связь с gestation_weeks

Все эти факторы влияют на вес ребенка. Младенцы мужского пола в среднем тяжелее, чем младенцы женского пола. Мамы подросткового и старшего возраста, как правило, рожают детей с меньшим весом. Близнецы, тройни и т. Д. Имеют меньший вес, чем одиночные роды. Недоношенные дети весят меньше, как и дети, рожденные от матерей-одиночек. Кроме того, важно проверить, достаточно ли у вас данных (количества младенцев) для каждого входного значения. В противном случае прогноз модели относительно входных значений, для которых недостаточно данных, может быть ненадежным.

Я настоятельно рекомендую вам попробовать это и посмотреть, сможете ли вы придумать лучшую визуализацию, которая представляет сильную связь с нашей целевой переменной

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

Достать блокнот