File size: 4,803 Bytes
9e24c29 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# -*- coding: utf-8 -*-
"""MMK-Informservice_project_DP-10.ipynb
Automatically generated by Colab.
Original file is located at
https://colab.research.google.com/drive/1wmkVhN6rkUnZhbwxxXnVsRP7A-7PC_1p
"""
import gradio as gr
import pandas as pd
import numpy as np
import pickle
# Загрузка датасетов
chugun_df = pd.read_csv("chugun.csv")
coke_df = pd.read_csv("coke.csv")
# Загрузка моделей
with open("gb_model_chugun.pkl", "rb") as f:
gb_model_chugun = pickle.load(f)
with open("gb_model_coke.pkl", "rb") as f:
gb_model_coke = pickle.load(f)
import gradio as gr
import pandas as pd
import numpy as np
import pickle
# Загрузка датасетов
chugun_df = pd.read_csv("chugun.csv")
coke_df = pd.read_csv("coke.csv")
# Загрузка моделей
with open("gb_model_chugun.pkl", "rb") as f:
gb_model_chugun = pickle.load(f)
with open("gb_model_coke.pkl", "rb") as f:
gb_model_coke = pickle.load(f)
# Функция для получения случайной строки из датасета
def get_random_sample(dataset):
return dataset.sample(1)
# Функция для форматирования признаков с учетом ожидаемых признаков модели
def format_features(sample, target_column, model):
# Удаляем целевую переменную из признаков
features = sample.drop(columns=[target_column])
feature_names = list(features.columns)
# Проверяем, совпадают ли признаки с ожидаемыми моделью
expected_features = model.feature_names_in_ if hasattr(model, 'feature_names_in_') else feature_names
if set(feature_names) != set(expected_features):
missing_features = set(expected_features) - set(feature_names)
extra_features = set(feature_names) - set(expected_features)
if missing_features:
raise ValueError(f"Датасет не содержит ожидаемые признаки: {missing_features}")
if extra_features:
# Удаляем лишние признаки
features = features[expected_features]
feature_names = expected_features
feature_values = features.values[0]
return feature_names, feature_values
# Основная функция для предсказания
def predict(model_choice):
if model_choice == "Производство чугуна":
dataset = chugun_df
target_column = "Количество чугуна (т)"
model = gb_model_chugun
else:
dataset = coke_df
target_column = "Удельный расход кокса (кг/т)"
model = gb_model_coke
# Получаем случайную строку
sample = get_random_sample(dataset)
feature_names, feature_values = format_features(sample, target_column, model)
actual_value = sample[target_column].values[0]
# Преобразуем входные данные в массив
input_data = np.array([feature_values])
# Предсказание
prediction = model.predict(input_data)[0]
# Расчет процентной ошибки
error_percent = abs((prediction - actual_value) / actual_value) * 100
# Формирование результата
result = f"Предсказанное значение: {prediction:.2f}\n"
result += f"Реальное значение: {actual_value:.2f}\n"
result += f"Процент ошибки: {error_percent:.2f}%"
return (
gr.Dataframe(headers=["Признак"], value=[[name] for name in feature_names]),
gr.Dataframe(headers=["Значение"], value=[[value] for value in feature_values]),
result
)
# Создание интерфейса Gradio
with gr.Blocks() as demo:
# Выбор модели
model_choice = gr.Dropdown(
choices=["Производство чугуна", "Удельный расход кокса"],
label="Выберите модель",
value="Производство чугуна"
)
# Вывод признаков
with gr.Row():
feature_display = gr.Dataframe(headers=["Признак"], value=[])
value_display = gr.Dataframe(headers=["Значение"], value=[])
# Кнопка предсказания
predict_button = gr.Button("Предсказать")
# Вывод результата
output = gr.Textbox(label="Результат предсказания")
# Логика предсказания
predict_button.click(
fn=predict,
inputs=model_choice,
outputs=[feature_display, value_display, output]
)
# Запуск приложения
demo.launch() |