Внутри Ай

Создание методов ансамбля в 3 строчках кода

Объедините возможности классификаторов суммирования и голосования для получения высокоточных прогнозов.

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

Да! это ансамбль с помощью 1.) суммирования и 2.) классификатора голосования.

Я постараюсь быть кратким и простым, сосредоточившись в основном на основной части темы.

Начнем со стекинга.

Что такое стек?

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

Чем стек отличается от бэггинга и бустинга?

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

Стекирование изучает их параллельно и объединяет их путем обучения метамодели для вывода прогноза, основанного на прогнозах различных слабых моделей.

Архитектура модели стекирования.

  • Модели уровня 0 (Базовые модели): модели соответствуют обучающим данным и прогнозы которых компилируются.
  • Модель уровня 1 (мета-модель): модель, которая изучает, как наилучшим образом комбинировать прогнозы базовых моделей.

Давайте посмотрим, как мы можем это сделать.

Мы будем использовать один из наборов данных, доступных в наборе данных кредитных карт Kaggle.

from numpy import mean
from numpy import std
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedKFold
from sklearn.linear_model import LinearRegression
from sklearn.neighbors import KNeighborsRegressor
from sklearn.tree import DecisionTreeRegressor
from sklearn.svm import SVR
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import StackingRegressor
from matplotlib import pyplot
import pandas as pd
#loading dataset
dataset = pd.read_csv("credit_data.csv",sep=",")
dataset.isna().sum()
dataset = dataset.dropna()
from collections import Counter
Counter(dataset)
X = dataset.iloc[:,1:4].values
y = dataset.iloc[:,4].values

Выше приведены наши регулярные загрузки данных и предварительная обработка базовых данных, а также основное внимание уделяется построению модели стека.

#function to build the list of stacking of models
def get_stacking():
    #define base models
    level0 = list()
    level0.append(('knn',KNeighborsRegressor()))
    level0.append(('cart',DecisionTreeRegressor()))
    level0.append(('svm',SVR()))
    level0.append(('random forest',RandomForestRegressor()))
    #define meta leaner model
    level1 = LinearRegression()
    #define the stacking ensemble
    model = StackingRegressor(estimators=level0, final_estimator=level1, cv=5)
    return model
#function to evaluate
def get_models():
    models = dict()
    models['knn'] = KNeighborsRegressor()
    models['cart'] = DecisionTreeRegressor()
    models['svm'] = SVR()
    models['random forest'] = RandomForestRegressor()
    models['stacking'] = get_stacking()
    return models
# evaluate via cross-validation
def evaluate_model(model, X, y):
 cv = RepeatedKFold(n_splits=10, n_repeats=3, random_state=1)
 scores = cross_val_score(model, X, y, scoring='neg_mean_absolute_error', cv=cv, n_jobs=-1, error_score='raise')
 return scores

Что мы получили… кажется, CART (модель дерева решений) работает немного лучше, чем остальные. Да, иногда одна модель работает лучше, чем ансамбль. Но в нашем случае мы сосредоточимся на стекинге моделей.

Теперь давайте заново соберем предыдущий код для прогнозирования невидимых данных с использованием модели стека.

#list of base models
level0 = list()
level0.append(('knn', KNeighborsRegressor()))
level0.append(('cart', DecisionTreeRegressor()))
level0.append(('svm', SVR()))
level0.append(('random forest',RandomForestRegressor()))
# define meta learner model
level1 = LinearRegression()
# define the stacking model
model = StackingRegressor(estimators=level0, final_estimator=level1, cv=5)
#fit the model
model.fit(X, y)
# make a prediction for one example
data = [[0.59332206,-0.56637507,1.34808718]]
yhat = model.predict(data)
print('Predicted Value: %.3f' % (yhat))

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

Позвольте мне собрать все части воедино.

from numpy import mean
from numpy import std
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedKFold
from sklearn.linear_model import LinearRegression
from sklearn.neighbors import KNeighborsRegressor
from sklearn.tree import DecisionTreeRegressor
from sklearn.svm import SVR
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import StackingRegressor
from matplotlib import pyplot
import pandas as pd
#loading dataset
dataset = pd.read_csv("credit_data.csv",sep=",")
dataset.isna().sum()
dataset = dataset.dropna()
from collections import Counter
Counter(dataset)
X = dataset.iloc[:,1:4].values
y = dataset.iloc[:,4].values
#function to build the list of stacking of models
def get_stacking():
    #define base models
    level0 = list()
    level0.append(('knn',KNeighborsRegressor()))
    level0.append(('cart',DecisionTreeRegressor()))
    level0.append(('svm',SVR()))
    level0.append(('random forest',RandomForestRegressor()))
    #define meta leaner model
    level1 = LinearRegression()
    #define the stacking ensemble
    model = StackingRegressor(estimators=level0, final_estimator=level1, cv=5)
    return model
#function to evaluate
def get_models():
    models = dict()
    models['knn'] = KNeighborsRegressor()
    models['cart'] = DecisionTreeRegressor()
    models['svm'] = SVR()
    models['random forest'] = RandomForestRegressor()
    models['stacking'] = get_stacking()
    return models
# evaluate via cross-validation
def evaluate_model(model, X, y):
 cv = RepeatedKFold(n_splits=10, n_repeats=3, random_state=1)
 scores = cross_val_score(model, X, y, scoring='neg_mean_absolute_error', cv=cv, n_jobs=-1, error_score='raise')
 return scores
#---------Prediction------------------------------
#list of base models
level0 = list()
level0.append(('knn', KNeighborsRegressor()))
level0.append(('cart', DecisionTreeRegressor()))
level0.append(('svm', SVR()))
level0.append(('random forest',RandomForestRegressor()))
# define meta learner model
level1 = LinearRegression()
# define the stacking model
model = StackingRegressor(estimators=level0, final_estimator=level1, cv=5)
#fit the model
model.fit(X, y)
# make a prediction for one example
data = [[0.59332206,-0.56637507,1.34808718]]
yhat = model.predict(data)
print('Predicted Value: %.3f' % (yhat))

Далее у нас есть КЛАССИФИКАТОР ГОЛОСОВАНИЯ

Что такое классификатор голосования?

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

Существует два вида голосования:

  1. Жесткое голосование: здесь учитывается прогнозируемый результат с наибольшим большинством голосов. Пример. если прогнозируемый результат трех моделей (svm, knn, rf) равен A, A, B, то класс A является победителем.
  2. Мягкое голосование: здесь прогноз основан на среднем показателе вероятностей классов. Пример: если прогнозируемый результат (показатели вероятности) трех моделей (svm, knn, rf) равен A = (0,40, 0,50, 0,55), B = (0,15, 0,19, 0,23), то среднее значение класса A будет равно 0,48 и В составляет 0,19. Очевидно, что класс А является победителем.

Более или менее влияние использования методов жесткого и мягкого голосования, по моему опыту, одинаково.

Теперь давайте начнем с небольшого практического опыта.

from sklearn.ensemble import VotingClassifier 
from sklearn.linear_model import LogisticRegression 
from sklearn.svm import SVC 
from sklearn.tree import DecisionTreeClassifier 
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris 
from sklearn.metrics import accuracy_score 
from sklearn.model_selection import train_test_split
# loading iris dataset 
iris = load_iris() 
X = iris.data[:, :4] 
Y = iris.target
# train_test_split 
X_train, X_test, y_train, y_test = train_test_split(X, Y, 
             test_size = 0.20,random_state = 42)

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

Теперь мы создадим список моделей

# group / ensemble of models 
estimator = [] 
estimator.append(('LR', LogisticRegression(solver ='lbfgs', 
         multi_class ='multinomial',max_iter = 200))) 
estimator.append(('SVC', SVC(gamma ='auto', probability = True))) 
estimator.append(('DT', DecisionTreeClassifier())) 
estimator.append(('RF',RandomForestClassifier()))

Конечно, мы можем и должны передавать параметры внутри каждого classifiers(), на данный момент мы продолжим базовые (по умолчанию) настройки модели.

1.) Жесткое голосование

# Voting Classifier with hard voting 
vot_hard = VotingClassifier(estimators = estimator, voting ='hard') 
vot_hard.fit(X_train, y_train) 
y_pred = vot_hard.predict(X_test)
#Accuracy Check
score = accuracy_score(y_test, y_pred) 
print("Hard Voting Score % d" % score)

2.) Мягкое голосование

# Voting Classifier with soft voting 
vot_soft = VotingClassifier(estimators = estimator, voting ='soft') 
vot_soft.fit(X_train, y_train) 
y_pred = vot_soft.predict(X_test)
# using accuracy_score 
score = accuracy_score(y_test, y_pred) 
print("Soft Voting Score % d" % score)

Готово!

Я надеюсь, что вы найдете статью полезной.

Представляем вам лучшее из многих миров… наслаждайтесь!

Не стесняйтесь спрашивать, потому что любопытство ведет к совершенству

Некоторые из моих альтернативных сайтов в Интернете: Facebook, Instagram, Udemy, Blogger, Issuu и другие.

Также доступно на Quora @ https://www.quora.com/profile/Rupak-Bob-Roy

Следите за обновлениями.! хорошего дня….

~ Будьте счастливы и наслаждайтесь!