Повысьте производительность вашей модели с помощью функций, которые больше способствуют прогнозированию.
Вступление
Когда вы говорите, что модель хороша? Когда модель хорошо работает с невидимыми данными, мы говорим, что это хорошая модель. Как специалист по данным, мы выполняем различные операции, чтобы создать хорошую модель машинного обучения. Операции включают в себя предварительную обработку данных (работа с NA и выбросами, преобразование типов столбцов, уменьшение размерности, нормализация и т. Д.), Исследовательский анализ данных (EDA), настройку / оптимизацию гиперпараметров (процесс поиска наилучшего набора гиперпараметров Алгоритм машинного обучения, обеспечивающий наилучшую производительность), выбор функций и т. Д.
«Мусор на входе, мусор на выходе».
Если данные, введенные в модель машинного обучения, имеют низкое качество, модель будет некачественной.
Ниже приведены статьи, связанные с методами настройки гиперпараметров, фреймворками с открытым исходным кодом для настройки гиперпараметров и утечкой данных при настройке гиперпараметров.
Выбор функции
Выбор функций - это процесс выбора лучшего подмножества из существующего набора функций, которые вносят больший вклад в прогнозирование выходных данных. Это помогает улучшить производительность модели (т. Е. Удаляет избыточные и / или нерелевантные функции, которые несут шум и снижают точность модели). Одним из основных преимуществ выбора функций является то, что он избавляет модель от высокого риска переобучения, когда у нас есть наборы данных с высокой размерностью. Уменьшая количество функций, это фактически сокращает время обучения алгоритма машинного обучения, т.е. связанные с ним вычислительные затраты.
Есть 3 основных метода выбора характеристик
- Методы фильтрации
- Встроенные методы
- Методы обертки
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns sns.set(style=”whitegrid”) import warnings warnings.filterwarnings(‘ignore’) # load Iris dataset sklearn.datasets import load_iris # create input and output features feature_names = load_iris().feature_names X_data = pd.DataFrame(load_iris().data, columns=feature_names) y_data = load_iris().target
1. Методы фильтрации
В методах фильтрации используются статистические методы для вычисления взаимосвязи между функциями и целевой переменной. В методах фильтрации обычно используются баллы статистического теста и дисперсии для ранжирования важности отдельных характеристик.
Преимущества:
- Методы фильтрации не зависят от алгоритмов машинного обучения. Таким образом, их можно использовать в качестве входных данных для любых моделей машинного обучения.
- Методы фильтрации очень быстрые.
Три типа методов фильтрации:
1. ANOVA F-значение
F-значение ANOVA оценивает степень линейности между входным признаком (т. Е. Независимыми признаками) и выходным признаком (т. Е. Зависимым признаком). Высокое значение F указывает на высокую степень линейности, а низкое значение F указывает на низкую степень линейности.
Scikit-learn предоставляет две функции для вычисления F-значения:
- sklearn.feature_selection.f_regression для проблем регрессии
- sklearn.feature_selection.f_classif для задач классификации
# import f_classif from sklearn.feature_selection import f_classif # create f_classif object f_value = f_classif(X_data, y_data) # print the name and F-value of each feature for feature in zip(feature_names, f_value[0]): print(feature) OUTPUT: ------ ('sepal length (cm)', 119.26450218449871) ('sepal width (cm)', 49.16004008961098) ('petal length (cm)', 1180.1611822529776) ('petal width (cm)', 960.0071468018025)
Давайте визуализировать то же самое
# Create a bar chart plt.figure(figsize=(4,4)) plt.bar(x=feature_names, height=f_value[0], color=’red’) plt.xticks(rotation=’vertical’) plt.ylabel(‘F-value’) plt.title(‘F-value Comparison’) plt.show()
Недостаток:
Значение F ANOVA фиксирует только линейные отношения между входной и выходной характеристикой.
2. Порог отклонения
Пороговое значение дисперсии удаляет элементы, дисперсия которых ниже предварительно определенного значения порогового значения. По умолчанию он удаляет все функции с нулевой дисперсией, то есть функции, которые имеют одинаковое значение во всех выборках.
# import VarianceThreshold from sklearn.feature_selection import VarianceThreshold # create VarianceThreshold object selector = VarianceThreshold(threshold=0.0) # train and transform selector.fit_transform(X_data) # print the name and variance of each feature for feature in zip(feature_names, selector.variances_): print(feature) OUTPUT: ------ ('sepal length (cm)', 0.6811222222222222) ('sepal width (cm)', 0.1887128888888887) ('petal length (cm)', 3.0955026666666674) ('petal width (cm)', 0.5771328888888888)
Давайте представим то же самое
# create a bar chart plt.figure(figsize=(4,4)) plt.bar(x=feature_names, height=selector.variances_, color=’red’) plt.xticks(rotation=’vertical’) plt.ylabel(‘Variance’) plt.title(‘Variance Comparison’) plt.show()
Преимущество:
Это можно использовать для обучения без учителя.
Недостаток:
Порог отклонения учитывает только отношения между объектами, но не отношения между входными объектами и выходными объектами.
3. Взаимная информация
Взаимная информация (MI) измеряет зависимость одной переменной от другой путем количественной оценки количества информации, полученной об одной функции с помощью другой функции. MI является симметричным и неотрицательным и равен нулю тогда и только тогда, когда две случайные величины независимы, а более высокие значения означают более высокую зависимость.
Scikit-learn предоставляет две функции для вычисления F-значения:
- sklearn.feature_selection.mutual_info_classif для проблем регрессии
- sklearn.feature_selection.mutual_info_regression для проблем классификации
# import mutual_info_classif from sklearn.feature_selection import mutual_info_classif # create mutual_info_classif object MI_score = mutual_info_classif(X_data, y_data, random_state=0) # Print the name and mutual information score of each feature for feature in zip(feature_names, MI_score): print(feature) OUTPUT: ------ ('sepal length (cm)', 0.4738732342805525) ('sepal width (cm)', 0.28607227699171767) ('petal length (cm)', 0.9895851732491787) ('petal width (cm)', 0.9749379656705233)
Давайте представим то же самое
# create a bar chart plt.figure(figsize=(4,4)) plt.bar(x=feature_names, height=MI_score, color=’red’) plt.xticks(rotation=’vertical’) plt.ylabel(‘Mutual Information Score’) plt.title(‘Mutual Information Score Comparison’) plt.show()
Преимущество:
MI может фиксировать нелинейные отношения между входными и выходными характеристиками.
4. SelectKBest от Scikit-learn
SelectKBest выбирает признаки с помощью функции (в данном случае F-значение ANOVA), а затем «удаляет все признаки, кроме k с наивысшей оценкой».
# import SelectKBest from sklearn.feature_selection import SelectKBest # create a SelectKBest object skb = SelectKBest(score_func=f_classif, k=2) # set f_classif as ANOVA F-value # Select top 2 features based on the criteria # train and transform X_data_new = skb.fit_transform(X_data, y_data) # print the name of the selected features for feature_list_index in skb.get_support(indices=True): print(feature_names[feature_list_index]) OUTPUT: ------ petal length (cm) petal width (cm)
В следующей статье я расскажу о методах Embedded и Wrapper.
Спасибо за чтение!
Мы очень ценим любые отзывы и комментарии!
Некоторые из моих других сообщений могут быть вам интересны,