Описание:-

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

Набор данных: -

Набор данных, который мы здесь используем, взят из Репозитория машинного обучения UCI. Этот набор данных общедоступен для исследования. Цель классификации - предсказать, подпишется ли клиент (да / нет) на срочный депозит (переменная y).

Информация об атрибутах:

Входные переменные:

1- возраст (числовой)

2- работа: тип работы (категориальный: «админ.», «Неизвестный», «безработный», «менеджмент», «домработница», «предприниматель», «студент», «рабочий», «самозанятый» , «Пенсионер», «техник», «услуги»)

3- семейное положение: семейное положение (категоричное: «женат», «разведен», «холост»; примечание: «разведен» означает разведенный или вдовец)

4- образование (категориальное: «неизвестно», «среднее», «начальное», «высшее»)

5- дефолт: есть кредит в дефолте? (двоичные: «да», «нет»)

6- жилье: есть жилищный кредит? (двоичные: «да», «нет»)

7- кредит: есть ли личный заем? (двоичные: «да», «нет»)

связанный с последним контактом текущей кампании:
8- контакт: тип связи контакта (категориальный: «неизвестно», «телефон», «сотовый»).

9-день: последний контактный день месяца (числовой)

10- месяц: последний контактный месяц в году (категориальные: «Янв», «Фев», «Мар»,…, «Ноябрь», «Дек»)

11- duration: продолжительность последнего контакта, в секундах (числовое значение)

другие атрибуты:
12- кампания: количество контактов, выполненных во время этой кампании и для этого клиента (числовое значение, включая последний контакт).

13- дней: количество дней, прошедших после того, как с клиентом в последний раз связались из предыдущей кампании (числовое значение -1 означает, что с клиентом ранее не связались)

14- предыдущий: количество контактов, выполненных до этой кампании и для этого клиента (числовое значение)

15- результат: результат предыдущей маркетинговой кампании (категориальный: «неизвестно», «другое», «неудача», «успех»).

16- emp.var.rate: коэффициент вариации занятости - квартальный показатель

17- cons.price.idx: индекс потребительских цен - месячный индикатор (числовой)

18- cons.conf.idx: индекс потребительского доверия - месячный индикатор (числовой)

19- euribor3m: 3-месячная ставка euribor - дневной индикатор (числовой)

20- количество занятых: количество сотрудников - квартальный показатель (числовой)

Выходная переменная (желаемая цель):
21 год - подписался ли клиент на срочный депозит? (двоичные: «да», «нет»)

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

= ›Загружаем данные с помощью панд. у нас есть 20 входных функций во всех 20 функциях, некоторые функции бесполезны для классификации, подпишется ли клиент или нет.

= ›’ Duration ’,’ contact ’,’ month ’,’ day_of_week ’,’ default ’,’ pdays ’, эти функции бесполезны, поэтому лучше отказаться от этих функций

Визуализация:-

После отбрасывания всех бесполезных функций, наконец, у нас есть 6 категориальных функций и 8 функций реальной ценности.

= ›Это сильно несбалансированные данные. Метрики точности не работают очень хорошо, если у нас есть несбалансированный набор данных. Таким образом, оценка AUC используется в качестве показателей. Это очень хорошо работает, если у нас несбалансированные данные.

Кодировщик этикеток: -

= ›Мы разбиваем все данные на поезд, тест и резюме. Мы используем данные поезда для обучения модели, данные резюме для поиска гиперпараметров и тестовые данные для тестирования модели.

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

= ›Нам нужно преобразовать категориальные данные в числовые данные, мы используем Label Encoder. Итак, все, что нам нужно сделать, чтобы пометить кодирование всего категориального столбца, это импортировать Label-encoder из библиотеки sklearn, подогнать данные поезда и преобразовать поезд, тест, cv всех категориальных столбцов данных, а затем заменить существующие текстовые данные с новыми закодированными данными. Посмотрим на код.

from sklearn.preprocessing import LabelEncoder
Le = LabelEncoder ()
x_train = Le.transform (x_train)
x_cv = Le.transform (x_cv)
x_test = Le.transorm (x_test )

После применения LabelEncoder к категориальным данным мы увидим, что все категории в категориальных данных были заменены числами 0, 1 и 2….

Проблема с LabelEncoder в том, что если в одном столбце есть разные числа, модель неправильно поймет, что данные расположены в каком-то порядке, 0 ‹1‹ 2… Но это совсем не так. Чтобы решить эту проблему, мы используем One Hot Encoder.

Кодировщик OneHot: -

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

Код для OneHotEncoder:

from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder ()
ohe.fit (x_train)
x_train = ohe.transform (x_train)
x_test = ohe.transform (x_test) < br /> x_cv = ohe.transform (x_cv)

После выполнения OheHotEncoding данные готовы к применению любой модели. Теперь мы можем применить любую модель

Модели машинного обучения: -

  1. Алгоритм грубой силы KNN:

Приблизительный поиск K-ближайшего соседа (K-NN) с использованием метода грубой силы. Поиск методом грубой силы - это очень общий метод решения проблем, который состоит из систематического перечисления всех возможных кандидатов для решения и проверки того, удовлетворяет ли каждый кандидат формулировке задачи
1. Вычислить все расстояния между точкой запроса и всеми точками в набор данных.
2. Отсортируйте вычисленные расстояния.
3. Выберите k точек окрестности с наименьшими расстояниями.
4. Используется большинство голосов для классификации точки запроса
5. Повторите это для всех точек запроса.

2. KNN kd-Tree: -

k-d дерево - это модификация BST, которая позволяет эффективно обрабатывать многомерные ключи. В K-NN временная сложность составляет O (n), если размерность (d) мала. kd-tree - это один из методов уменьшения временной сложности с O (n) до O (log (n))

= ›Один из способов уменьшить временную сложность O (n) до O (log (n)) - использовать популярные структуры данных kd-tree. Это часто используется в компьютерной графике, а также в прикладной математике и геометрии. Это очень популярная структура данных с 1975 года.

Проблема: для отсортированного массива определить, присутствует ли число в массиве или нет.

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

В 8 элементах мы сделали только 3 сравнения. Чтобы добраться до любого элемента, нам понадобится это множество сравнений, например, у нас есть глубина 3, нам нужно 3 сравнения

Примечание. - Временная сложность поиска BST равна O (log (n)), что является глубиной дерева.

= ›Если данные одномерные, мы строим двоичное дерево поиска, если данные двумерные или более, мы не можем построить двоичное дерево, мы строим для этого kd-tree. Kd-tree аналогично и является простым расширением BST

Построение kd-дерева: -

  1. Сначала мы выбираем ось X и позволяем проецировать каждую точку на ось X, затем вычисляем медианное значение, разбивая данные с использованием медианы, делаем то же самое для оси Y

2. Будем чередовать оси

3. Используя kd-tree, разбивая пространство с помощью параллельных осям линий / плоскостей на прямоугольники / кубоиды / гиперкубоиды.

2D = ›Использование линий, параллельных осям =› получение прямоугольников

3D = ›Использование плоскостей, параллельных оси координат =› получить кубоиды

nD = ›Использование плоскостей, параллельных осям =› получить гиперкубоиды

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

5. Сравнения, чтобы найти 1-NN, лучший случай - O (log (n)), а худший - O (n), n - количество точек данных.

Недостаток K-NN: - Высокая временная сложность. Он не используется в задачах с низкой задержкой. В реальной жизни большинство людей не использовали KNN только из-за временной сложности, за исключением того, что в остальном все в порядке.

3. Логистическая регрессия с регуляризацией L1 и L2: -

Мы строим модель логистической регрессии с использованием логистической регрессии, поскольку классификатор и штраф равны L1 или L2. мы находим AUC поезда, cv AUC и строим график, используя этот график, мы находим правильное значение C. C - гиперпараметр в этой модели

Одним из наиболее важных методов классификации является логистическая регрессия. Его можно интерпретировать тремя способами (i). Геометрия (ii). Вероятность (iii). Потери-функция. Предположение логистической регрессии - классы почти / идеально разделяются

Задача логистической регрессии: - Найдите плоскость, которая лучше всего разделяет два класса.

Формула логистической регрессии W * = arg max ∑ yi «WT» xi. (yi «WT» xi) ›0 при правильной классификации W. Мы хотим, чтобы как можно больше очков имели (yi «WT» xi) ›0

W * = arg max ∑ yi «WT» xi подвержен влиянию выброса очень велико

Наша задача - найти W, которое максимизирует сумму расстояний со знаком. По сравнению с 1 и 𝜋2, расстояние со знаком 2 является высоким, но высокие баллы с пропуском классификации. Один единственный выброс меняет всю модель. На максимальную сумму подписанного dist можно сильно повлиять, она не подвержена выбросам. мы изменили эту технику W * = arg max ∑ yi «WT» xi, используя сжатие. Это означает, что мы добавляем сигмовидную функцию W * = arg max ∑ σ (yi «WT» xi). На это меньше влияет выброс, чем на простую сумму расстояний со знаком. Эта сигма-функция сжимает значение от (- ∞, + ∞) до значения от (0 до 1), так что значения x малы, они почти линейны, но имеют сужающееся поведение при больших x. Мы добавляем функцию журнала, потому что журнал является монотонной функцией

W * = arg min ∑ log (1 / (1 + 𝑒𝑥𝑝− (𝑦𝑖 «𝑊𝑇» 𝑥𝑖)))

L2- Регуляризация: -

Лучшее W * - «0». Это происходит только тогда, когда Z → + ∞, это означает, что все тренировочные точки правильно классифицированы. Все тренировочные точки идеально классифицированы, такой случай называется переобучением. Мы используем регуляризацию, изменяя переоснащение

W * = arg min ∑ log (1 / (1 + 𝑒𝑥𝑝− (𝑦𝑖 “𝑊𝑇” 𝑥𝑖))) + λ ”𝑊𝑇W”

λ - гиперпараметр в логистической регрессии. Если λ = 0 = ›чрезмерная подгонка и λ = большая =› недостаточная подгонка, мы находим наилучшее λ с помощью перекрестной проверки.

L1- Регуляризация: -

Альтернативой L2-регуляризации является L1-регуляризация. Это очень популярно

W * = arg min ∑ log (1 / (1 + 𝑒𝑥𝑝− (𝑦𝑖 «𝑊𝑇» 𝑥𝑖))) + λIWI

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

Мы пробовали как L1, так и L2

= ›В основном мы используем алгоритм логистической регрессии вместо KNN из-за временной сложности. Временная сложность логистической регрессии невысока по сравнению с KNN. В задачах с низкой задержкой мы очень часто используем логистическую регрессию. Нет большой разницы в производительности

4.Линейная SVM: -

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

Мы рисуем две гиперплоскости, параллельные 𝜋, и пересекаем первые + ve точек, назовем их 𝜋 +, а первые -ve точек пересекаем, называем это-. Расстояние между + и 𝜋- называется запасом. Точки, попадающие в символы 𝜋 + или 𝜋-, называются опорными векторами. Расстояние или запас увеличиваются, точки + ve и -ve разделяются слишком высоко. Наша задача - найти 𝜋, который максимизирует маржу.

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

«C» - гиперпараметр в этой модели. Если C ↑ мы собираемся переобучить, а C ↓ есть вероятность переобучения. Мы находим лучший C, используя перекрестную проверку. C - не что иное, как 1 / ƛ. Этот тип SVM называется SVM с мягкими маржами. Он допускает ошибки и минимизирует их, но SVM с жестким запасом не допускает ошибок.

Двойная форма SVM: -

Часто эту SVM с мягкими границами называют первичной SVM. Этот первичный эквивалент другой формы проблемы. Эта другая форма - двойная форма. Это уравнение двойственной формы

Двойная форма SVM - это не что иное, как Linear SVM. Линейный SVM - это почти то же самое, что логистическая регрессия. Это не способ изменить мир в реальном времени. Кернелизация делает SVM популярным. Если данные нелинейно разделяются, простая логистическая регрессия и линейная SVM могут не работать, функции логистической регрессии и преобразования ядра-SVM работают в этом случае. SVM ядра почти аналогичен методу преобразования функции логистической регрессии.

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

= ›Логистическая регрессия и линейная модель SVM - похожие алгоритмы. Это не алгоритм, который меняет мир. Кернелизация делает SVM популярным. Если данные нелинейно разделимы, простая логистическая регрессия и линейная SVM не работают очень хорошо

5. RBF SVM: -

Ядро: -

Самая важная идея SVM - это уловка с ядром. Если мы не заменим (xiTxj) на K (xi, xj), это называется линейной SVM. Если мы заменим (xiTxj) на K (xi, xj), это называется уловкой с ядром

RBF- Kernel: - RBF означает радиальную базисную функцию. В SVM наиболее популярным и универсальным ядром является RBF- Kernel.

‘Σ’ - гиперпараметр в этой модели и llx1 - x2ll = d. Если d ↑, k (x1, x2) ↓ экспоненциально. σ ↑ мы собираемся переобучить и σ ↓ есть шанс переобучить

В данном случае мы используем SVC в качестве классификатора. Мы находим лучший C, настраивая гиперпараметры. Высокая временная сложность по сравнению с линейной SVM

= ›Если данные не разделяются линейно, простая логистическая регрессия и линейная SVM не работают. В таких случаях RBF SVM работает очень хорошо.

6. Дерево решений: -

Дерево решений не что иное, как вложенный классификатор if… else. Это означает, что если у ii было if… else с if… else. Например

Вложенное условие if… else представляет решение, в конечных узлах мы решаем, какую метку класса мы хотим дать этой структуре дерева решений. Дерево решений очень хорошо интерпретируется, потому что у нас есть логический материал.

Построение дерева решений: -

Энтропия: -

Энтропия H (y) = -∑ P (y) log (P (y))

Например, у нас есть 2 класса с 9+ и 5 ve баллами.

P (y + ve) = 9/14 и P (y-ve) = 5/14
H (y) = - ((9/14) log (9/14) + (5/14) log (5/14))
H (y) = 0,94

Если вероятности обоих классов равны, то энтропия максимальна 1. Если один класс полностью доминирует над другим классом, то энтропия минимальна нулевая.

Прирост информации (IG): -

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

Примесь Джини: - Примесь Джини похожа на Энтропию.

Примесь Джини = 1-∑ (P (y)) 2
Если P (y + ve) = 0,5 и P (y-ve) = 0,5 = ›Примесь Джини = 1- (0,25 + 0,25) = 0,5 и H (y) = 1
Если P (y + ve) = 1.0 и P (y-ve) = 0 = ›примесь Джини = 1- (1) = 0 и H (y) = 0

Энтропия и примесь Джини такие же, но мы используем примесь Джини вместо энтропии, потому что в энтропии у нас есть логарифмический член и примесь Джини, у нас нет логарифмического члена, вычисление логарифмического члена занимает больше времени, чем вычисление квадратов, тогда мы используем примесь Джини

Построение схемы принятия решений e: - Например, возьмем играть в теннис.

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

Если я выберу Outlook в качестве корневого узла в Outlook D2, у меня будет только + ve точек, но нет -ve точек. Если прогноз в обучающих данных туманный, все точки положительные, такой узел называется «чистым узлом», потому что он имеет только одну метку класса. Обучающие данные D1 и D3 снова разбиваются на наборы данных, передавая значение прироста информации. Если глубина увеличивается, мы будем переоснащаться, потому что очень мало точек данных и глубина будут недостаточными. Используя перекрестную проверку, мы находим глубину дерева

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

= ›Дерево решений дает лучшую производительность по сравнению с KNN, логистической регрессией, линейной SVM и RBF SVM, но временная сложность высока по сравнению с логистической регрессией и линейной SVM. Если данные имеют ограниченные возможности, дерево решений работает очень хорошо.

7. Случайный лес: -

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

Случайный лес = Дерево решений + Упаковка + Выборка столбца

Упаковка: -

Выборка с заменой случайным образом выбирает точку, помещенную в набор данных, поскольку я выбираю точку, которую не удаляю, из исходных данных. Эта выборка называется выборкой Bootstrap.

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

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

Случайный лес = Дерево решений + Пакетирование + Выборка столбца
Выборка столбца, также называемая сборкой функций

Случайный лес = учащиеся основы дерева решений разумной глубины + выборка строк с заменой + выборка столбцов + агрегирование

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

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

8. XGBOOST: -

Повышение: -

Повышение = низкая дисперсия, высокое смещение + аддитивное сочетание

Один из лучших методов повышения - градиент. Основная идея повышения сокращает срок смещения

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

Повышение градиента: -

Входные данные: - обучающий набор {xi, yi}, дифференцируемая функция потерь L (y, F (x)

Алгоритм: -

1. Инициализируйте модель с постоянным значением.

2. Для n = от 1 до n вычислить так называемую псевдо-невязку.

Как только я получу псевдо-остаток, я создам новый набор обучающих данных. Подгоните базового учащегося h (x) к псевдо-остатку, то есть используя обучающий набор {(xi, τ)}.

3. Обновить модель

GBDT = мелкое дерево решений = ›высокая смещение и низкая дисперсия
случайный лес = глубокое дерево решений =› высокая дисперсия и низкая смещение

В формуле m = количество базовых моделей. Количество базовых моделей увеличивается. Увеличивается вероятность переоборудования. Это означает высокую дисперсию и низкую систематическую ошибку. Количество базовых моделей является гиперпараметром в этом алгоритме. Мы находим правильное "m" с помощью перекрестной проверки

XGboost - одна из лучших реализаций GBDT.
Общие GBDT = Псевдо-остаточный + аддитивный
sklearn GBClassifier = GBDT + Выборка строк
XGboost = GBDT + Выборка строк + выборка столбцов
= › Если мы применим sklean GBClaffier и XGboost Classifier к одним и тем же данным, XGBoost даст немного лучшие результаты, чем sklearn из-за выборки столбцов. Вот почему мы используем XGboost вместо sklearn GB Classifier.

В XGBOOST мы используем XGBClassifier в качестве классификатора. В этом случае у нас есть два гиперпараметра, такие же, как у Random Forest. Выбираем лучшие гиперпараметры, построив тепловую карту

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

Таблица производительности LabelEncoder: -

Таблица производительности OneHotEncoder: -

Вывод: - KNN - это базовая модель, но она дает хорошее значение производительности, но временная сложность очень высока, поэтому мы пробуем логистическую регрессию и линейную SVM. Временная сложность этих двух алгоритмов очень мала по сравнению с KNN, нет большой разницы в производительности. Если данные не разделимы линейно, простая логистическая регрессия и линейная SVM не работают. Работает только логистическая регрессия с преобразованием функций и SVM ядра, поэтому мы связали RBF SVM. Дерево решений, Случайный лес и XGboost дают лучшие результаты производительности, но они будут работать, только если у нас ограниченные возможности. В нашем наборе данных есть ограниченные возможности, поэтому мы попробовали и эти модели. Наконец, по сравнению со всей моделью Decision Tree, Random Forest и XGBoost дали лучшие результаты, но временная сложность высока.

Набор данных можно загрузить из репозитория машинного обучения UCI.

Полный код можно найти здесь: - Github

Спасибо…..

Вы можете увидеть меня по адресу:

Linkedin: - www.linkedin.com/in/venkatesh-dudipalli-9550907550

Github: - https://github.com/venkateshdudipalli

Электронная почта: - [email protected]