Машинное обучение с помощью 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *