Машинное обучение с помощью Streamlit с использованием набора данных от Титаника

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Автор статьи: Рустем Горшенев

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

Здесь мы собираемся объединить мощь Streamlit с процессом машинного обучения.

Первый пример машинного обучения

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

Первые шаги

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

cat << EOF > /root/test.py

import streamlit as st

import pandas as pd

import pickle

EOF

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

cat << EOF >> /root/test.py

filename = '/usr/local/bin/titanic_model.sav'

model = pickle.load(open(filename, 'rb'))

df = pd.read_csv('https://raw.githubusercontent.com/Stijnvhd/Streamlit_Course/main/First Exercise/second.csv')

st.write(df)

EOF

Вы можете запустить дэшборд, выполнив:

streamlit run /root/test.py --server.port 80

Определение ключевых характеристик для использования в нашей модели

Следующая часть панели инструментов состоит из некоторой настройки макета, а также настройки некоторых функций, которые вы можете выбрать для работы с моделью. Основываясь на этих функциях, на последнем этапе мы увидим, как на самом деле работает предсказание.

Мы начнем с лока некоторых переменных, которые мы будем использовать в качестве вариантов на нашей панели инструментов, а также немного стилей. Прежде чем запускать приведенный ниже код, введите Ctrl + C в терминале, чтобы остановить запуск панели управления.

cat << EOF >> /root/test.py
titles = ('Not applicable', 'Dr.', 'Rev.',
          'Miss.', 'Master.', 'Don.', 'Mme.',
          'Major.', 'Lady.', 'Sir.', 'Mlle.', 'Col.', 'Capt.', 'Countess.', 'Jonkheer.')

ports_range = ('Queenstown, Ireland', 'Southampton, U.K.')

Pclass = (1, 2, 3)

st.markdown("""
<style>
.big-font {
    font-size:60px !important;

     color :#C7BACC !important;
               font-family: 'Roboto', sans-serif;
}
.colored-font {
    font-size:50px !important;
    color: grey !important;
    font-weight: bold;
}
</style>
""", unsafe_allow_html=True)

EOF

Теперь мы напишем некоторую информацию о том, что будет делать приборная панель, и продолжим с ключевыми элементами выбора, которые позволяют нам определить значение различных переменных. Вы бы выжили на Титанике? Ну, есть только один способ узнать!

cat << EOF >> /root/test.py

st.markdown('<p class="big-font">Would you make it if you were on the Titanic? Describe yourself using the lefthand menu and find out. </p>', unsafe_allow_html=True)

st.sidebar.title('Describe yourself')

title = st.sidebar.selectbox('Your title', titles)
Title_Unusual = 0 if title == "Not applicable" else 1

gender = st.sidebar.radio('Sex', ('Male', 'Female'))
Sex = 0 if gender == 'Male' else 1

Age = st.sidebar.slider('Age', 0, 90, 1)

Pclass = st.sidebar.radio('Class', Pclass)
fare_range = df.loc[df['Pclass'] == Pclass, 'Fare']

Cabin_Known = st.sidebar.radio('Cabin', (0, 1))

ports = st.sidebar.radio('Port of departure', ports_range)
Embarked_Q = 1 if ports == 'Queenstown, Ireland' else 0
Embarked_S = 1 if ports == "Southampton, U.K." else 0

Fare = st.sidebar.slider('How much was your ticket (£)?', min(fare_range), max(fare_range))
SibSp = st.sidebar.slider("How many siblings are on the Titanic with you?", 0, 10)
Parch = st.sidebar.slider("Parents or children with you?", 0, 10)
prediction_inp = [Pclass] + [Sex] + [Age] + [SibSp] + [Parch] + [Fare] + \
                 [Title_Unusual] + [Cabin_Known] + [Embarked_Q] + [Embarked_S]
EOF

Мы запускаем дэшборд, выполнив

streamlit run /root/test.py --server.port 80

Отображение результата предикции

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

Прежде чем запускать приведенный ниже код, введите Ctrl + C в терминале, чтобы остановить дэшборд.

cat << EOF >> /root/test.py
survial = model.predict_proba([prediction_inp])[0,1]
survial = round(survial,2)

if survial*100 >= 50:

    fate = "Survive"
    st.write(survial)
    st.write('You will likely  '+ fate)
else:
    fate = "Die"
    st.write(survial)
    st.write('You will likely  '+ fate)
EOF

Теперь вы можете видеть весь дэшборд и протестировать

Мне тут не повезло)

Вы смогли увидеть, как мы можем использовать наши модели в практике, чтобы бизнес-пользователи могли легко адаптировать независимые переменные и, таким образом, видеть, что модель дает им в качестве выходных данных!

Полный код

cat << EOF > /root/test.py
import streamlit as st
import pandas as pd
import pickle

filename = '/usr/local/bin/titanic_model.sav'
model = pickle.load(open(filename, 'rb'))

df = pd.read_csv('https://raw.githubusercontent.com/Stijnvhd/Streamlit_Course/main/First%20Exercise/second.csv')

st.write(df)

titles = ('Not applicable', 'Dr.', 'Rev.',
          'Miss.', 'Master.', 'Don.', 'Mme.',
          'Major.', 'Lady.', 'Sir.', 'Mlle.', 'Col.', 'Capt.', 'Countess.', 'Jonkheer.')

ports_range = ('Queenstown, Ireland', 'Southampton, U.K.')

Pclass = (1, 2, 3)

st.markdown("""
<style>
.big-font {
    font-size:60px !important;

     color :#C7BACC !important;
               font-family: 'Roboto', sans-serif;
}
.colored-font {
    font-size:50px !important;
    color: grey !important;
    font-weight: bold;
}
</style>
""", unsafe_allow_html=True)

st.markdown('<p class="big-font">Would you make it if you were on the Titanic? Describe yourself using the lefthand menu and find out. </p>', unsafe_allow_html=True)

st.sidebar.title('Describe yourself')

title = st.sidebar.selectbox('Your title', titles)
Title_Unusual = 0 if title == "Not applicable" else 1

gender = st.sidebar.radio('Sex', ('Male', 'Female'))
Sex = 0 if gender == 'Male' else 1

Age = st.sidebar.slider('Age', 0, 90, 1)

Pclass = st.sidebar.radio('Class', Pclass)
fare_range = df.loc[df['Pclass'] == Pclass, 'Fare']

Cabin_Known = st.sidebar.radio('Cabin', (0, 1))

ports = st.sidebar.radio('Port of departure', ports_range)
Embarked_Q = 1 if ports == 'Queenstown, Ireland' else 0
Embarked_S = 1 if ports == "Southampton, U.K." else 0

Fare = st.sidebar.slider('How much was your ticket (£)?', min(fare_range), max(fare_range))
SibSp = st.sidebar.slider("How many siblings are on the Titanic with you?", 0, 10)
Parch = st.sidebar.slider("Parents or children with you?", 0, 10)
prediction_inp = [Pclass] + [Sex] + [Age] + [SibSp] + [Parch] + [Fare] + \
                 [Title_Unusual] + [Cabin_Known] + [Embarked_Q] + [Embarked_S]

survial = model.predict_proba([prediction_inp])[0,1]
survial = round(survial,2)

if survial*100 >= 50:

    fate = "Survive"
    st.write(survial)
    st.write('You will likely  '+ fate)
else:
    fate = "Die"
    st.write(survial)
    st.write('You will likely  '+ fate)
EOF

В заключение приглашаю посетить открытый урок для новичков в ML на тему «Первичный анализ данных с Pandas», который пройдет послезавтра вечером в Otus. На встрече участники обсудят, зачем нужен первичный анализ данных в машинном обучении, какие существуют инструменты для первичного анализа данных в Python, как визуализировать данные и какая преобработка данных нужна в ML. Записаться можно по ссылке.

Источник: https://habr.com/ru/company/otus/blog/712352/


Интересные статьи

Интересные статьи

Одно из информативных теоретических описаний ядерных реакций представляет эволюцию ядерной системы в виде траекторий в многомерном пространстве деформаций. Нахождение изображений таких траекторий в пр...
Независимо от того, какой вы разработчик, время от времени мы сталкиваемся с API, который возвращает данные таким образом, что нам не нужно тратить много времени на их понимание. Но получение такого ч...
Составить расписание всегда былом делом непростым. Доверить эту задачу компьютеру решались не все, потому что задача NP-полная и алгоритмического решения «в лоб» за обозримое время не имеет. (объяснен...
Недавно автор узнал об инструменте csvquote, который кодирует проблемные символы CSV так, чтобы утилиты unix правильно их обрабатывали. Он меняет кодировку в конце конвейера, восстанавливая исходный в...
В предыдущей статье мы остановились на варианте, который с помощью SWAR-хинта превращает 8 последовательных цифр в одно числовое 32bit-значение. Но что если мы предположи...