Автор статьи: Рустем Горшенев
В этой статье я рассказываю об использовании машинного обучения в 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/
Добавить комментарий