Здравствуйте друзья ,
Добро пожаловать в мой первый графический интерфейс, созданный с использованием библиотеки gradio, совместимой с Python. Прежде чем я проведу вас через это путешествие, позвольте мне сначала ответить на следующие вопросы:
1. Что такое графический интерфейс?
2. Что делает графический интерфейс?
3. Зачем использовать графический интерфейс?< br /> 4. Что такое Gradio?
5. Кто может использовать Gradio?
NB: наша статья в первую очередь будет посвящена моделям машинного обучения.
Q1. Что такое GUI?
GUI (Graphical User Interface) — это визуальный интерфейс, который позволяет пользователям взаимодействовать с программными приложениями.
В контексте моделей машинного обучения и их взаимодействия графический интерфейс – это удобный интерфейс для работы с моделями машинного обучения и их визуализации.
В2. Что делает графический интерфейс?
- Ввод данных: пользователи могут вводить данные посредством загрузки файлов, ввода вручную или из внешних источников. GUI обрабатывает задачи предварительной обработки.
- Обучение и оценка: графический интерфейс позволяет проводить обучение, отслеживать прогресс и просматривать показатели/визуализации.
- Прогнозы и выводы: графический интерфейс позволяет вводить новые данные и отображает прогнозы с показателями достоверности.
- Визуализации: графический интерфейс включает в себя визуализацию модели, важность функций, интерактивные графики и границы решений.
- Показатели производительности: графический интерфейс отображает точность, воспроизводимость, полноту, F1-оценку, AUC и сравнительный анализ.
По сути, в нашем непосредственном контексте графический интерфейс будет загружать наше обученное машинное обучение с помощью joblib или pickle, принимать пользовательские входные данные, которые будут соответствовать данным обучения (например, X_features), делать прогнозы и возвращать обратную связь пользователю. > В некоторых сложных случаях наш графический интерфейс может визуализировать на основе входных данных и сделанных прогнозов.
Вопрос 3. Зачем использовать графический интерфейс?
Из приведенного выше обсуждения Q2 в нашем непосредственном контексте графический интерфейс в основном используется по двум основным причинам.
1. Разрешить взаимодействие модели с нетехническими пользователями
Поскольку приложение создано на серверной части техническим персоналом, то, чтобы позволить пользователям взаимодействовать с моделями несложным образом, конечные пользователи, т. е. бизнес-аналитики, продавцы и т. д., используют графический интерфейс. осуществить это
2. Совместная работа и документация
Графические интерфейсы облегчают совместную работу групп обработки данных и машинного обучения. Несколько членов команды могут работать над одними и теми же моделями, совместно использовать визуальные представления конвейеров моделей и документировать шаги, связанные с обучением, оценкой и развертыванием моделей.
Q4. Что такое Gradio ?
Gradio — этовеб-интерфейс для обмена приложениями с графическим интерфейсом с другими пользователями, позволяющий им взаимодействовать с моделями без необходимости локальной установки какого-либо программного обеспечения.
Gradio также поддерживает развертывание графических интерфейсов в производственных средах.
В5. Кто может использовать Gradio?
Вы аналитик данных, работающий над серверной частью? Вы создаете модели машинного обучения и хотите, чтобы пользователи взаимодействовали с вашими моделями? Есть ли у вас графический интерфейс, который вы хотите развернуть?
Также
Пользователи, не являющиеся техническими специалистами: Gradio также полезен для пользователей, не являющихся техническими специалистами, которые хотят изучить или использовать модели машинного обучения, не имея опыта программирования.
МОЙ ПРОЦЕСС СОЗДАНИЯ ПРИЛОЖЕНИЯ GRADIO
Предположения
1. Вы понимаете код Python,
2. Вы понимаете конвейеры Python и преобразователь столбцов
Введение
Я работал с некоторыми данными и построил модели машинного обучения на этих данных, проверили на точность и нашли лучшую модель, которая была моделью XGBOOST. Ниже приведено изображение и код используемого конвейера Python.
# Load your dataframe df = pd.read_csv('/content/drive/MyDrive/LP3 PROJECT /Telco-Customer-Churn.csv') # 1. Drop specified columns drop_columns = ['customerID', 'gender', 'PaymentMethod', 'StreamingMovies'] df = df.drop(drop_columns, axis=1) # 2. Convert TotalCharges columns to numeric df['TotalCharges'] = pd.to_numeric(df['TotalCharges'], errors='coerce') # 3. Scale numeric columns numeric_features = ['SeniorCitizen', 'MonthlyCharges', 'TotalCharges'] numeric_transformer = StandardScaler() # 4. Encode categorical columns categorical_features = ['Dependents', 'PhoneService', 'MultipleLines', 'InternetService', 'OnlineSecurity', 'OnlineBackup', 'DeviceProtection', 'TechSupport', 'StreamingTV', 'Contract', 'PaperlessBilling'] categorical_transformer = OneHotEncoder(sparse=False) # 5. Encode the target column target_column = 'Churn' target_encoder = LabelEncoder() # 6. Split into X and y X = df.drop(target_column, axis=1) y = target_encoder.fit_transform(df[target_column]) # 7. Create the pipeline preprocessor = ColumnTransformer( transformers=[ ('num', numeric_transformer, numeric_features), ('cat', categorical_transformer, categorical_features) ]) # 8. Split data pipeline = Pipeline([ ('preprocessor', preprocessor), ('classifier', XGBClassifier()) ]) # Split into train and test sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # Fit the pipeline pipeline.fit(X_train, y_train) y_pred = pipeline.predict(X_test)
Набор данных предоставлен в CSV-файле компании Vodaphone. Я изучил данные, создал модель машинного обучения, которая будет прогнозировать, будет ли отток клиентов или нет.
Подробнее о наборе данных можно найти в ссылка на github в конце этой статьи.
Этапы создания приложения
- Импорт необходимых библиотек
import gradio as gr #Our primary library import pandas as pd #To convert our inputs into a dataframe from sklearn.pipeline import Pipeline #Make the pipeline from sklearn.compose import ColumnTransformer #Used in making the pipeline from sklearn.preprocessing import StandardScaler, LabelEncoder, OneHotEncoder #Apply preprocessors from sklearn.model_selection import train_test_split #This is the splitting module from xgboost import XGBClassifier #Our ML model from joblib import load #Used to load in and use our model
2. Загрузите и проверьте, правильно ли работает наша модель.
y_pred = pipeline.predict(X_test) y_pred
Так как наша модель работает нормально, нам нужно перейти к следующему шагу,
Но подождите, так как мы использовали кодировщик меток, мы получаем вывод либо как единицу, либо как 0, поэтому нашим следующим шагом будет определение небольшого функция классификатора для изменения двух
3. Определите функцию мини-вывода
Не читайте этот шаг, если вы не поняли шаг 2 выше.
# since the output is a 0 or a 1 , we will have a classifier function to def classifier_1(result): if result== o: return "Customer will churn" else: return "Customer will not churn"
4. Получите входные данные, которые принимает наша функция
Поскольку модель построена на определенных данных, и при обучении на X_test модель работает нормально, мы будем использовать следующую простую функцию цикла for для вывода всех входных данных, которые ожидает наша модель.
# Get the inputs our model will accept for column in X_test.columns: print (column) # This are the inputs our model accepts ['SeniorCitizen', 'Partner', 'Dependents', 'tenure', 'PhoneService', 'MultipleLines', 'InternetService', 'OnlineSecurity', 'OnlineBackup', 'DeviceProtection', 'TechSupport', 'StreamingTV', 'Contract', 'PaperlessBilling', 'MonthlyCharges', 'TotalCharges']
5. Создайте основную функцию
ВНИМАТЕЛЬНО ПРОЧИТАЙТЕ ЗДЕСЬ!!
Определите функцию и укажите входные данные, которые наша модель принимает в качестве доступных входных данных, которые будут принимать функции и
сохраните входные данные в списке под названием input, как показано ниже.
i.e ;
def main_function(SeniorCitizen, Partner, Dependents, tenure, PhoneService, MultipleLines, InternetService, OnlineSecurity, OnlineBackup, DeviceProtection, TechSupport, StreamingTV, Contract, PaperlessBilling, MonthlyCharges, TotalCharges): inputs = [SeniorCitizen, Partner, Dependents, tenure, PhoneService, MultipleLines, InternetService, OnlineSecurity, OnlineBackup, DeviceProtection, TechSupport, StreamingTV, Contract, PaperlessBilling, MonthlyCharges, TotalCharges]
Для этого следующего шага внутри нашей основной функции создайте фрейм данных, сопоставив ключи (входные данные) с их соответствующими индексами (то, что хранится в переменных), создайте из него df, а затем подгоните к нему нашу модель.
input_df = pd.DataFrame([inputs], columns=['SeniorCitizen', 'Partner', 'Dependents', 'tenure', 'PhoneService', 'MultipleLines', 'InternetService', 'OnlineSecurity', 'OnlineBackup', 'DeviceProtection', 'TechSupport', 'StreamingTV', 'Contract', 'PaperlessBilling', 'MonthlyCharges', 'TotalCharges']) model22 = pipeline.fit(X_train, y_train) pred = model22.predict(input_df) output = classifier_1(pred[0])
Помните нашу первую функцию? Хорошо, мы будем использовать его здесь, поскольку мы встраиваем его в нашу основную функцию, а затем применяем некоторые стили к выходным данным.
if output == "Customer will churn": return [(0, output)] else: return [(1, output)] # Define your outputs output = gr.outputs.HighlightedText(color_map={ "Customer will churn": "green", "Customer will not churn": "red" })
6. Определяем и пишем нашу основную функцию градиента
# Create the Gradio interface interface = gr.Interface( fn=main_function, inputs=[ gr.inputs.Dropdown([0, 1], label="Is the customer a senior citizen? Select 1 for YES and 0 for NO"), gr.inputs.Dropdown(['No', 'Yes'], label='Partner'), gr.inputs.Dropdown(['No', 'Yes'], label='Dependents'), gr.inputs.Slider(label="Tenure: How long have you been using Vodafone?"), gr.inputs.Dropdown(['No', 'Yes'], label='Phone Service'), gr.inputs.Radio(['Yes', 'No', 'No Phone service'], label="Multiple Lines"), gr.inputs.Dropdown(['DSL', 'Fiber optic', 'No'], label='Internet Service'), gr.inputs.Radio(['Yes', 'No', 'No Online Security'], label="Online Security"), gr.inputs.Radio(['Yes', 'No', 'Online Backup'], label="Online Backup"), gr.inputs.Radio(['Yes', 'No', 'No Device Protection'], label="Device Protection"), gr.inputs.Radio(['Yes', 'No', 'Tech Support'], label="Tech Support"), gr.inputs.Radio(['Yes', 'No', 'No TV streaming'], label="TV Streaming"), gr.inputs.Dropdown(['Month-to-month', 'One year', 'Two year'], label='Contract'), gr.inputs.Dropdown(['No', 'Yes'], label='Paperless Billing'), gr.inputs.Slider(minimum=18, maximum=120, label="Monthly Charges"), gr.inputs.Slider(minimum=18, maximum=8675, label="Total Charges") ], outputs= output, title="Team Paris Customer Churn Prediction App", description="Let's Get Started With Some Predictions!" ) interface.launch()
Выше приведен скриншот приложения в действии.
Подпишитесь на другие, чтобы увидеть, как приложение выглядит при размещении в пространствах Huggy.