Как создавать приложения с помощью быстрой визуализации для проектов машинного обучения с помощью Streamlit в процессе выбора функций

Проект машинного обучения никогда не будет полным, если у нас нет хорошего способа его продемонстрировать. Раньше для демонстрации проекта по науке о данных было достаточно хорошо сделанной визуализации или небольшой колоды, но с появлением таких инструментов визуализации данных, как Power BI, Tableau, Qlik Sense, хороший специалист по данным должен иметь Достаточно немного знаний о веб-фреймворках, чтобы уживаться.

А веб-фреймворки сложно изучить. Я все еще запутался во всем этом HTML, CSS и Javascript со всеми хитростями и испытаниями, потому что что-то, казалось бы, простое.

Не говоря уже о множестве способов сделать то же самое, что сбивает с толку нас, специалистов в области науки о данных, для которых веб-разработка является второстепенным навыком.

Именно здесь на помощь приходит Streamlit, который выполняет свое обещание создавать веб-приложения только с использованием Python. Здесь важно упомянуть, что Streamlit Web Apps - это не создание веб-приложения с визуальным повествованием для конечного потребления данных только ; но также и в процессе разработки проекта и фазы итераций - насколько хорошо они могут быть использованы командой и менеджерами и даже техническими заинтересованными сторонами клиента - чтобы понять сложный процесс моделирования данных визуально интуитивно понятным способом.

Задача

Сложные вопросы, требующие глубоких знаний предметной области и технических знаний - как сделать это самостоятельно?

Членам команды, менеджерам и заинтересованным сторонам клиентов неизменно становится сложно ответить на такие вопросы, как:

  • Какие функции были выбраны для прогнозной модели?
  • На каком основании эти функции не были выбраны?
  • Вы учли все разные алгоритмы?
  • Какие функции, которые вы выбрали, меняются, когда мы получаем новые данные?

Как специалист по данным - на эти вопросы можно ответить, но что, если мне нужны эти ответы для более самостоятельного исследования самих потребителей?

Ответы на вышеперечисленные вопросы могут потребовать глубокого знания предметной области. Можно автоматически увидеть эти функции в ваших данных, которые являются наиболее полезными или наиболее актуальными для проблемы, над которой вы работаете, с помощью процесса, называемого выбором функций. Но может ли это быть просмотренным или потребленным кем-либо еще?

Мы быстро рассмотрим основные концепции выбора функций, а затем создадим веб-приложение визуализации, как отображать результаты выбора функций

Методы выбора функций

Выбор функций - это процесс, в котором вы автоматически выбираете те функции в ваших данных, которые больше всего влияют на переменную прогноза или выходные данные, которые вас интересуют.

Наличие в ваших данных слишком большого количества нерелевантных функций может снизить точность моделей. Три преимущества выполнения выбора функций перед моделированием данных:

  • Снижает чрезмерную подгонку: меньше избыточных данных означает меньше возможностей для принятия решений на основе шума.
  • Повышает точность: уменьшение количества вводящих в заблуждение данных означает повышение точности моделирования.
  • Сокращает время обучения: меньше данных означает, что алгоритмы обучаются быстрее.

Выбор функции также называется выбором переменной или выбором атрибута. Это автоматический выбор атрибутов в ваших данных (таких как столбцы в табличных данных), которые наиболее актуальны для задачи прогнозного моделирования, над которой вы работаете.

Выбор характеристик отличается от уменьшения размеров. Оба метода стремятся уменьшить количество атрибутов в наборе данных, но метод уменьшения размеров делает это путем создания новых комбинаций атрибутов, тогда как методы выбора функций включают и исключают атрибуты, присутствующие в данных, не изменяя их.

Методы выбора функций помогут вам в вашей миссии по созданию точной прогнозной модели. Они помогают вам, выбирая функции, которые обеспечат вам такую ​​же или лучшую точность, но при этом потребуют меньше данных.

Методы выбора функций могут использоваться для выявления и удаления ненужных, нерелевантных и избыточных атрибутов из данных, которые не влияют на точность прогнозной модели или могут фактически снизить точность модели. Желательно меньшее количество атрибутов, поскольку это снижает сложность модели, а более простую модель легче понять и объяснить.

В этой статье мы рассмотрим один алгоритм Рекурсивное исключение функций, сокращенно RFE, как его можно связать с визуальным веб-приложением для исследования данных и понимания важности выбора функций.

RFE - популярный алгоритм выбора характеристик. Он популярен, потому что его легко настроить и использовать, а также потому, что он эффективен при выборе тех функций (столбцов) в наборе обучающих данных, которые более или наиболее важны для прогнозирования целевой переменной.

При использовании RFE есть два важных параметра конфигурации: выбор количества функций для выбора и выбор алгоритма, используемого для выбора функций. Оба этих гиперпараметра можно изучить, хотя производительность метода не сильно зависит от правильной настройки этих гиперпараметров.

Приложение с самообслуживанием - помогает потребителям изучать данные и понимать, какие функции важны

Использование Streamlit для интерактивных веб-приложений и визуализации для выбора функций

Данные с первого взгляда

  • Здесь используются общедоступные данные stocks_data.csv.
  • Есть 100 независимых переменных, все числовые. Это цены акций в разное время
  • Есть один двоичный выход, который нужно спрогнозировать - продавать да или нет.

Цель здесь - понять, какая переменная / характеристика важна и насколько они важны для принятия решения продавать или не продавать.

Код Импорт

from numpy import mean
from numpy import std
import pandas as pd
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.feature_selection import RFE
from sklearn.tree import DecisionTreeClassifier
from sklearn.pipeline import Pipeline
import streamlit as st
from sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn.metrics import classification_report, confusion_matrix
from matplotlib import pyplot
import altair as alt
import seaborn as sn

Исследование данных

Данные загружаются с помощью pandas и исследуются заголовок с помощью следующего кода

Фрагмент кода для исследования данных

@st.cache
def loadData():
df = pd.read_csv(“stock_data.csv”)
 X = df.iloc[:, 0:100]
 y = df.iloc[:,-1]
 return df,X,y
# Basic splitting required for all the models. 
def split(X,y):
 # 1. Splitting X,y into Train & Test
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=0)
 return X_train, X_test, y_train, y_test
def main():
 st.title(“Using Streamlit Apps — Feature Selection for Classification Problems using various Machine Learning Classification Algorithms”)
 df,X,y = loadData()
page = st.sidebar.selectbox(“Choose a page”,[“Homepage”, “Exploration”])
if page == “Homepage”:
 st.header(“This is your data explorer.”)
 st.write(“Please select a page on the left.”)
 st.subheader(“Showing raw data….”) 
 st.write(df.head())
# Basic splitting required for all the models. 
def split(X,y):
 # 1. Splitting X,y into Train & Test
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=0)
 return X_train, X_test, y_train, y_test
def main():
 st.title(“Using Streamlit Apps — Feature Selection for Classification Problems using various Machine Learning Classification Algorithms”)
 df,X,y = loadData()
page = st.sidebar.selectbox(“Choose a page”,[“Homepage”, “Exploration”])
if page == “Homepage”:
 st.header(“This is your data explorer.”)
 st.write(“Please select a page on the left.”)
 st.subheader(“Showing raw data….”) 
 st.write(df.head())

Фрагмент кода для изучения закономерностей между двумя переменными

def main():
 st.title(“Using Streamlit Apps — Feature Selection for Classification Problems using various Machine Learning Classification Algorithms”)
 df,X,y = loadData()
page = st.sidebar.selectbox(“Choose a page”,[“Homepage”, “Exploration”])
if page == “Homepage”:
 st.header(“This is your data explorer.”)
 st.write(“Please select a page on the left.”)
 st.subheader(“Showing raw data….”) 
 st.write(df.head())
 elif page == “Exploration”:
 st.title(“Data Exploration”)
 x_axis = st.selectbox(“Choose a variable for the x-axis”, df.columns)
 y_axis = st.selectbox(“Choose a variable for the y-axis”, df.columns)
 visualize_data(df, x_axis, y_axis)

Предоставляется опция, в которой пользователь может выбрать алгоритм выбора функции и понять важность различных функций с необходимой визуализацией, на что он отвечает:

Оценка выбора функции

  • Точность выбора RFE с использованием DecisionTreeClassifier
  • Визуализация (коробчатая диаграмма), показывающая то же самое

Конвейер модели RFE в качестве окончательной модели и делает прогнозы для классификации

  • Точность предсказания RFE с использованием DecisionTreeClassifier
  • Отчет RFE с использованием DecisionTreeClassifier

Таким образом, можно легко понять особенности, какие они важны, насколько они важны. Используя этот код, можно расширить другие алгоритмы, такие как SelectKBest и т. Д., И выбрать следующий алгоритм по мере необходимости.

Фрагмент кода для выбора модели для выбора функции, в данном случае RFE, и изучения ее внешнего вида

if(choose_model == “Recursive Feature Elimination”):
 st.subheader(“Which Feature is Important?”)
 X_train, X_test, y_train, y_test = split(X,y)
 models = get_models()
 # evaluate the models and store results
 results, names = list(), list()
 for name, model in models.items():
 scores = evaluate_model(model,X_train,y_train)
 results.append(scores)
 names.append(name)
 model.fit(X_train, y_train)
 ypred = model.predict(X_test)
 predict_score = metrics.accuracy_score(y_test, ypred) * 100
 predict_report = classification_report(y_test, ypred)
 cm = metrics.confusion_matrix(y_test,ypred)
 st.subheader(“Feature Selection Score”)
 st.text(“Accuracy of RFE Selection using DecisionTreeClassifier: “)
 st.write(round(mean(scores),2)*100,”%”)
 pyplot.boxplot(results, labels=names, showmeans=True)
 st.pyplot() 
 st.subheader(“We can also use the RFE model pipeline as a final model and make predictions for classification.”)
 st.text(“Accuracy of Prediction RFE using DecisionTreeClassifier is: “)
 st.write(predict_score,”%”)
 st.text(“Report of RFE using using DecisionTreeClassifier is: “)
 st.write(predict_report)
 sn.heatmap(cm, annot=True, annot_kws={“size”: 16},cbar=False) # font size
 st.pyplot()

Мы также можем использовать конвейер модели RFE в качестве окончательной модели и делать прогнозы для классификации.

Заключение

Специалисты по обработке данных могут использовать этот код для создания веб-приложений с визуализацией, чтобы понять функции и их важность. Кроме того, используйте модель выбора признаков для прогнозирования проблем классификации.

Код репозитория Git

Полный код доступен здесь

Данные доступны здесь