От тази статия ще разберете как да създавате интерактивни резултати за вашите решения за машинно обучение на преносим компютър jupyter с помощта на ipywidgets.
Тази статия първоначално е публикувана в блога Neurotech Africa.
В много отношения това е скучен език, заимстващ солидни стари концепции от много други езици и стилове: скучен синтаксис, неизненадваща семантика, малко автоматична принуда и т.н. Но това е едно от нещата, които харесвам в Python. – Тим Питърс
В повечето случаи не-софтуерни разработчици или ИТ, които се гмуркат в науката за данни, се сблъскват с предизвикателства как могат просто да съобщят своите резултати, но това също е често срещано предизвикателство за начинаещите в машинното обучение. Направата на тествани решения за машинно обучение може да бъде предизвикателство за голяма група, използваща Python рамки като Django и Flask. Това е така, защото те наистина изискват някой да има умения за уеб разработка.
Но в днешно време технологията се развива твърде бързо, има множество платформи, които опростяват работата по правенето на модели живи над облаците, такива платформи са „streamlit“, „gradio“ и „Gooey“.
Днес ще ви преведа през общата среда за разработване на модел за машинно обучение за потребители на python и ще ви покажа как можете да разработите интерактивни резултати на преносим компютър jupyter.
Какво е Jupyter Notebook?
Уеб приложение с отворен код, което можете да използвате за създаване и споделяне на документи, които съдържат код на живо, уравнения, визуализации и текст.
Бележникът Jupyter е интерактивен бележник, който ви позволява да пишете документи с вграден код и да изпълнявате този код в движение. Първоначално е разработен като част от проекта Ipython и по това време може да се използва само за код на Python. В днешно време преносимият компютър Jupyter интегрира множество езици, като R, Julia, Haskell и много други — преносимият компютър поддържа около 50 „езика“.
Той позволява на потребителя да изтегли бележника в различни файлови формати като PDF, HTML, Python, Markdown или .ipynb файл.
Прости интерактивни резултати от ML модели на Jupyter Notebook
Предполагам, че читателите се чувстват добре с концепциите на Python и Machine Learning, нека приемем регресионни предизвикателства, които изискват прогнозиране на разходите за медицинска застраховка на дадено лице въз основа на age
, gender
, Body mass index (kg / m ^ 2)
, smoking behavior
и Number of children covered by health insurance / Number of dependents
. Повече информация за наборите от данни, използвани за изграждане на това решение, можете да намерите тук.
Наборите от данни имат 7 колони, аз избирам да използвам 5 функции (X) и charges
колона като изходна цел
Нека използваме Linear Regression
, за да създадем регресионен модел за прогнозиране на таксите за медицинска застраховка, но имаме обектни характеристики като пол и пушач, за да направим нещата по-лесни, нека да използваме sklearn pipelineкойто ни помага да дефинираме всички необходими процеси за нашия регресионен модел да се учим от наблюденията.
from sklearn.pipeline import make_pipeline
from category_encoders import OneHotEncoder
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error
Ще използваме make_pipeline
за обгръщане на всички процеси, OneHoteEncoder
за предварителна обработка на всички характеристики на обекта[sex
, smoker
] в цифров формат, така че нашият регресор да може да разбере, LinearRegression
за изграждане на модели за прогнозиране и mean_absolute_error
за оценка на ефективността на нашия модел.
Ето как трябва да дефинираме нашия тръбопровод
# building model pipeline
model = make_pipeline( OneHotEncoder(use_cat_names=True), LinearRegression() )
След като дефинираме нашия конвейер, сега трябва да обучим нашия модел чрез монтиране на функции (X) и етикети (цел) в конвейера.
# training model to forecast medical costs
model.fit(X,target)
След това можем да оценим нашия модел, за да видим производителността
# evaluating model
y_pred_training = model.predict(X) print("Training MAE:", mean_absolute_error(target,y_pred_training))
Еха! изградихме нашия прост регресорен модел, сега е време да се съсредоточим върху това как да правим интерактивни резултати с нашия модел?
Нашият модел изисква ли да бъде хостван в облака, за да взаимодейства с него?
Ако отговорът ви е НЕ, имате право, ние можем да създадем интерактивна среда дори в бележника на Jupyter, като използваме библиотека на python, която предлага няколко уиджета на jupyter за интерактивност, известни като ipywidgets.
Ipywidgets, известни също като jupyter-widgets или прости widgets, са интерактивни HTML widgets за преносими компютри Jupyter и ядрото на IPython. Преносимите компютри оживяват, когато се използват интерактивни уиджети. Потребителите получават контрол върху своите данни и могат да визуализират промените в данните.
С ipywidgets ученето се превръща в потапящо, забавно изживяване. Изследователите и разработчиците могат лесно да видят как променящите се входни данни към модела влияят върху резултатите.
След това без допълнително дължимо, нека инсталираме и импортираме всички ipywidgets и след това да ги консумираме, но за най-новата версия на преносими компютри Jupyter няма нужда от инсталиране, можете просто да импортирате и консумирате.
pip install ipywidgets
# import ipywidgests import ipywidgets as widgets
След това нека създадем нашата функция за извършване на прогнози в зависимост от петте функции, които използвахме за обучение на модел.
def make_prediction(age, gender, bmi, children, smoker):
"""
Function to perform predictions of (medical costs)insurance charges depending on:
1. age - age of primary beneficiary
2. sex - insurance contractor gender, female, male
3. bmi - Body mass index (kg / m ^ 2) using the ratio of height to weight, ideally 18.5 to 24.9
4. children - Number of children covered by health insurance / Number of dependents
5. smoker - smoking or not
"""
df = pd.DataFrame({"age":age,"sex":gender,"bmi":bmi,"children":children, "smoker":smoker},index=[0])
prediction = model.predict(df).round(2)[0]
return f"Predicted total insurance cost: ${prediction}"
Нека се опитаме да извикаме нашата make_prediction
функция с очакваните аргументи
make_prediction(39,"male", 20, 3, "yes")
# outputs
# 'Predicted total insurance cost: $29564.47'
Еха! страхотно, време е да вмъкнем нашата функция в ipywidgets
, така че да може да бъде гъвкава за взаимодействие. ipywidgets съдържат множество джаджи, но за нашия случай нека използваме само 4 джаджи.
Първият е interact
джаджа за обвиване на нашата функция и всички необходими входове.
Вторият е IntSlider
джаджа за контролиране на всички входове на цели числа за нашия модел.
Третият е FloatSlider
джаджа за контролиране на всякакви плаващи входове за нашия модел.
Последният е Dropdown
джаджа за контролиране на всякакви входове, които изискват потребителят да избира от множество опции.
widgets.interact( make_prediction, age=IntSlider( min=X["age"].min(), max=X["age"].max(), value=X["age"].mean(), ), gender = widgets.Dropdown(options=sorted(X["sex"].unique())),
bmi= widgets.FloatSlider( min=X["bmi"].min(), max=X["bmi"].max(), step=0.01, value=X["bmi"].mean(), ),
children= widgets.IntSlider( min =X["children"].min(), max =X["children"].max(), value=X["children"].mean(), ),
smoker= widgets.Dropdown(options=sorted(X["smoker"].unique())), );
Можете да видите интерактивните плъзгачи и падащи менюта, които правят гъвкави начини за въвеждане и правене на прогнози.
Това е лесен начин да тествате как моделът, който сте създали, може да извършва прогнози за потребителски входове, преди да бъде внедрен в облака. Освен това, ако обучавате някого за изграждането на решение за машинно обучение, ще бъде лесно да разберете как потребителят може да взаимодейства с крайното решение.
Изглежда просто, но има голямо влияние върху разбирането на машинното обучение, не се колебайте да споделите тази статия с общността.