Классификация#
Рассмотрим задачу классификации точек на плоскости \(Ox_1x_2\) . Любую точку на плоскости можно охарактеризовать её координатами \(x_1\) и \(x_2\) . Эти координаты и примем за их признаковое описание.
Бинарная классификация#
Для простоты будем считать, что все точки принадлежат одному из двух классов, а также что имеется выборка из \(n\) точек, для которых известен этот самый класс. Назовем первый класс отрицательным, второй класс — положительным. Поставим в соответствие всем точкам отрицательного класса значение \(y_\mathrm
Здесь верхний индекс соответствует номеру точки.
Необходимо на основе этих данных научиться классифицировать произвольную точку на плоскости, т.е. построить отображение \(f\colon \mathbb
Пока не будем уточнять, какой смысл вкладывается в “хорошо классифицировать”.
Случай линейно разделимой выборки#
Один из самых простых случаев — когда можно провести прямую (гиперплоскость в общем случае) таким образом, что все точки первого класса окажутся по одну сторону от неё, а все точки второго класса — по другую.
Ниже приводится пример такой выборки.
| x1 | x2 | y | |
|---|---|---|---|
| 0 | 1.228312 | -0.757178 | -1 |
| 1 | 0.698409 | -1.380295 | -1 |
| 2 | 2.548817 | 2.502258 | 1 |
| 3 | 0.573579 | -1.352979 | -1 |
| 4 | 0.585900 | -1.337457 | -1 |

Из построенной диаграммы рассеяния отчетливо видно, что классы можно отделить друг от друга прямой.
В общем случае прямую можно задать уравнением
а определить с какой стороны от неё находится точка с координатами \((x_1^*, x_2^*)\) можно по знаку величины \(a(x_1^*, x_2^*) = \omega_1 x_1^* + \omega_2 x_2^* + b\) .
Значит можно задать классификатор
Чисто теоретически можно подобрать коэффициенты \(\vec <\omega>= (\omega_1, \omega_2)\) и \(b\) в ручную. В ячейке ниже демонстрируется такой классификатор с \(\omega_1=-1\) , \(\omega_2=1\) и \(b=0.3\) .

Даже такой простой классификатор успешно отделил все точки. Однако если бы это была многомерная задача, то подбирать коэффициенты вручную оказалось бы гораздо сложнее. Хочется каким-то образом обучить эти коэффициенты из данных.
Это можно сделать, опираясь на уже рассмотренную задачу линейной регрессии. Подберем коэффициенты \((\vec\omega, b)\) таким образом, чтобы минимизировать среднее квадратичное отклонение $ \( L(X_\mathrm
Код в ячейке ниже расширяет класс LinearRegression таким образом, чтобы метод predict возвращал не действительное число из \(\mathbb

Видим, что удалось разумно разделить классы на основе линейной регрессии. Тем не менее обычно для решения задач классификации используют другие функции потерь. Одна из самых распространенных функций потерь — перекрестная энтропия, которая в нашей задаче имеет вид
Здесь \(p = \sigma(\omega_1 x_1 + \omega_2 x_2 + b) \in[0, 1]\) интерпретируется в качестве вероятности того, что точка \((x_1, x_2)\) принадлежит положительному классу, а \((1-p)\) — в качестве вероятности того, что эта точка принадлежит отрицательному классу. Функция \(\sigma\) — сигмоида, значение которой в точке \(x\in\mathbb
которая принимает значения в интервале \((0, 1)\) , монотонно растет и при этом
Это и позволяет интерпретировать значения этой функции в качестве вероятности.
Код в ячейке ниже строит графики сигмоиды, перекрестной энтропии и среднеквадратичной функции потерь.

Функция перекрестной энтропии \(L(y, p)\) определена на интервале \((0, 1)\) и в зависимости от значения \(y\) монотонно растёт на этом интервале от 0 до бесконечности ( \(y=0\) ) или монотонно убывает от бесконечности до 0 ( \(y=1\) ).
Значение \(p\) интерпретируется в виде предсказанной вероятности какого-то события (в задаче классификации это вероятность того, что классифицируемый объект принадлежит классу с \(y=1\) ), а \(y\) считается истинной вероятностью. В связи с этим и рядом других факторов обученные с помощью перекрестной энтропии модели считают вероятностными.
Саму модель, использующую такую функцию потерь, называют логистической регрессией, а метод linear_model.LogisticRegression из библиотеки scikit learn её реализует.

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

Классификатор с MSE функцией потерь резко отреагировал на добавление новой точки, хотя она была бы верно классифицирована и до этого.
Чтобы объяснить этот эффект, рассмотрим величину \(a(x_1^*, x_2^*) = \omega_1 x_1^* + \omega_2 x_2^* + b\) , по знаку которой мы оцениваем класс точки \((x_1^*, x_2^*)\) . Вектор \(\vec\omega = (\omega_1, \omega_2)\) задаёт нормаль к прямой \(\omega_1 x_1 + \omega_2 x_2+ b = 0\) , а значит величина \(a\) определяет насколько далеко точка располагается от разделяющей прямой: чем больше абсолютное значение этой величины, тем дальше эта точка от прямой.

Для заданной прямой и для любой точки \((x_1, x_2)\) из выборки можно ввести отступ \(M(x_1, x_2, y_\mathrm
точки с большим положительным значением \(M\) , которые устойчиво классифицируются верно;
точки с небольшим положительным значением \(M\) , которые неустойчиво классифицируются верно;
точки с небольшим отрицательным значением \(M\) , которые неустойчиво классифицируются неверно;
точки с большим отрицательным значением \(M\) , которые устойчиво классифицируются неверно;
Возвращаясь к функцией потерь MSE , заметим, что она штрафует за любое отклонения отступа \(M\) от единицы, т.е. точки первой категории тоже штрафуются. Если же обратить внимание на функцию перекрестной энтропии, то она равна 0, только если \(\sigma(M)=0\) , т.е. \(M=\infty\) . Таким образом с точки зрения этой функции потерь чем выше отступ, тем лучше.
Building Classification Model with Python
![]()
Hi! On this article I will cover the basic of creating your own classification model with Python. I will try to explain and demonstrate to you step-by-step from preparing your data, training your model, optimising the model, and how to save it for later use. This article is the second part of a mini-series I have been working on, if you haven’t read my previous article on ‘Multi-Linear Regression Using Python’ be sure to check it out.
You can try to follow along using the notebook here, good luck and have fun!
Introduction
In machine learning, classification is the problem of identifying to which of a set of categories (sub-populations) a new observation belongs, based on a training set of data containing observations (or instances) whose category membership is known. Couple examples of classification problems are: (a) deciding whether a received email are a spam or an organic e-mail; (b) assigning a diagnosis of a patient based on observed characteristics of the patient (age, blood pressure, presence or absence of certain symptoms, etc.)
In this article we will use the Bank Marketing Dataset from Kaggle to build a model to predict whether someone is going to make a deposit or not depending on some attributes. We will try to build 4 different models using different algorithm Decision Tree, Random Forest, Naive Bayes, and K-Nearest Neighbours. After building each model we will evaluate them and compare which model are the best for our case. We will then try to optimise our model by tuning the hyper parameters of the model by using GridSearch. Lastly, we will save the prediction result from our dataset and then save our model for re-usability.
To start we will load some basic libraries such as Pandas and NumPy and then make some configuration to some of those libraries.
Data Pre-Processing
Before we can begin to create our first model we first need to load and pre-process. This step ensure that our model will receive a good data to learn from, as they said “a model is only as good as it’s data”. The data pre-processing will be divided into few steps as explained below.
Loading Data
In this first step we will load our dataset that has been uploaded on my GitHub for easier process. From the dataset documentation found here we can see below are the list of column we have in our data:
- age (numeric)
- job : type of job (categorical: ‘admin.’, ‘blue-collar’, ‘entrepreneur’, ’housemaid’, ‘management’, ‘retired’, ‘self-employed’, ‘services’, ‘student’, ‘technician’, ‘unemployed’, ‘unknown’)
- marital : marital status (categorical: ‘divorced’, ‘married’, ‘single’, ‘unknown’; note: ‘divorced’ means divorced or widowed)
- education (categorical: ‘basic.4y’, ‘basic.6y’, ‘basic.9y’, ‘high.school’, ‘illiterate’, ‘professional.course’, ‘university.degree’, ‘unknown’)
- default: has credit in default? (categorical: ‘no’, ‘yes’, ‘unknown’)
- housing: has housing loan? (categorical: ‘no’, ‘yes’, ‘unknown’)
- loan: has personal loan? (categorical: ‘no’, ‘yes’, ‘unknown’)
- contact: contact communication type (categorical: ‘cellular’, ‘telephone’)
- month: last contact month of year (categorical: ‘jan’, ‘feb’, ‘mar’, …, ‘nov’, ‘dec’)
- day_of_week: last contact day of the week (categorical: ‘mon’, ‘tue’, ‘wed’, ‘thu’, ’fri’)
- duration: last contact duration, in seconds (numeric). Important note: this attribute highly affects the output target (e.g., if duration=0 then y=’no’). Yet, the duration is not known before a call is performed. Also, after the end of the call y is obviously known. Thus, this input should only be included for benchmark purposes and should be discarded if the intention is to have a realistic predictive model.
- campaign: number of contacts performed during this campaign and for this client (numeric, includes last contact)
- pdays: number of days that passed by after the client was last contacted from a previous campaign (numeric; 999 means client was not previously contacted)
- previous: number of contacts performed before this campaign and for this client (numeric)
- poutcome: outcome of the previous marketing campaign (categorical: ‘failure’, ‘nonexistent’, ‘success’)
Output variable (desired target):
- y: has the client subscribed a term deposit? (binary: ‘yes’, ‘no’)
According to the dataset documentation, we need to remove the ‘duration’ column because in real-case the duration is only known after the label column is known. This problem can be considered to be ‘data leakage’ where predictors include data that will not be available at the time you make predictions.
Class Distribution
Another important thing to make sure before feeding our data into the model is the class distribution of the data. In our case where the expected class are divided into two outcome, ‘yes’ and ‘no’, a class distribution of 50:50 can be considered ideal.
As we can see our class distribution is more or less similar, not exactly 50:50 distribution but still good enough.
Missing Values
Last thing to check before moving on is missing values. In some case our data might have missing values in some column, this can be caused some reasons such as human error. We can use the is_null() function from Pandas to check for any missing data and then use the sum() function to see the total of missing values in each column.
From the result we can be assured that our data have no missing value and are good to go. In the case where you did have missing value in your data you can solve it by doing imputation or just remove the column altogether depending on your case. Here is a link to a good Kaggle course on how to handle missing value in dataset.
Scale Numeric Data
Next up, we will scale our numerical data to avoid outlier presence that can significantly affect our model. Using StandardScaler() function from sklearn we can scale each our columns that contains numerical data. The scaling will be done using the formula below:
3. Binary classification¶
In Chapter 2 , we see the example of ‘classification’, which was performed on the data which was already available in the SciKit. In this chapter, we will read the data from external file. Here the “Hill-Valley ” dataset is used which is available at UCI Repository, which contains 100 input points (i.e. features) in it. Based on these points, the output (i.e. ‘target’) is assigned with one of the two values i.e. “1 for Hill” or “0 for Valley”. Fig. 3.1 shows the graph of these points for the Valley and the hill. Further, we will use “LogisticRegression” model for classification in this chapter. It is a linear model, which finds a line to separate the ‘hill’ from the ‘valley’.
Note that, there are different datasets available on the website i.e. noisy and without noise. In this chapter, we will use the dataset without any noise. Lastly, we can download different data from the website according to our study e.g. data for regression problem, classification problem or mixed problem etc.

Fig. 3.1 Hill and valley according to the input points
3.2. Dataset¶
Lets quickly see the contents of the dataset “Hill_Valley_without_noise_Training.data”, as shown in Listing 3.1 . The Fig. 3.2 shows the plot of the Rows 10 and 11 of the data, which represents the “hill” and “valley” respectively.
In Listing 3.1 , the Lines 12-23 are reading the data, cleaning it (i.e. removing the header line and line-breaks etc.) and changing it into desired format (i.e making list of list and then numpy array). This process is known as Data-cleaning and Data-transformation, which constitute 70%-90% of the work in machine-learning tasks.
Following is the output of the above code,

Fig. 3.2 Plot for data at Rows 10 and 11
3.3. Extract the data i.e. ‘features’ and ‘targets’¶
In Chapter 2 , it is shown that the machine-learning tasks require the ‘features’ and ‘targets’. In the current data, both are available in the dataset in the combined form i.e. ‘target’ is available at the end of each data sample. Now, our task is to extract the ‘features’ and ‘targets’ in separate variables, so that the further code can be written easily. This can be done as shown in Listing 3.2 ,
3.4. Prediction¶
Once data is transformed in the desired format, the prediction task is quite straight forward as shown in Listing 3.3 . Here following steps are performed for prediction,
- Split the data for training and testing (Lines 77-88).
- Select the classifier for modeling, and fit the data (Lines 90-93).
- Check the accuracy of prediction for the training set itself (Lines 95-98).
- Finally check the accuracy of the prediction for the test-data (Lines 100-103).
The ‘accuracy_score’ is used here to calculate the accuracy (see Lines 97 and 102).
Following are the results for the above code,
In Iris-data set in Chapter 2 , the target depends directly on the input features i.e. width and length of petal and sepal. But in Hill-valley problem, the output does not directly depends on the location of the input values, but on the relative-positions of the certain inputs with all other inputs.
LogisticRegression assign a weight to each of the features and then calculate the sum for making decisions e.g. if sum is greater than 0 then ‘hill’ and if less than 0 then ‘valley’. The coefficients which are assigned to each feature can be seen as below,
Also, the KNeighborsClassifier will not work here, as it looks for the features which are nearer to the ‘targets’, and then decide the boundaries. But, in Hill-Valley case, a valley can be at the top of the graph as shown in Fig. 3.1 , or at the bottom of the graph. Similarly a Hill can be at the top of graph or at the bottom location. Therefore it is not possible to find the nearest points for the Hill-Valley problem, which can distinguish a Hill from a Vally. Hence, KNeighborsClassifier will have the accuracy_score = 0.5 (i.e. random guess). We can verify it by importing the “KNeighborsClassifier” and replacing the “LogisticRegression” to “KNeighborsClassifier” in Listing 3.3 .
3.5. Rock vs Mine example¶
The file “sonar.all-data” contains the patterns obtained by bouncing sonar signals off a metal cylinder and the rocks under similar conditions. Last column contains the target names i.e. ‘R’ and ‘M’, where ‘R’ and ‘M’ are rocks and metals respectively.
Remember that, in classification problems the targets must be descrete; and can have the value as ‘string’ or ‘number’ as shown in Table 1.4 .
As oppose to previous section, here the ‘targets’ has the direct relationship with ‘features’, therefore we can use both the classifier i.e. “LogisticRegression” and “KNeighborsClassifier” as shown in Listing 3.4 .
Since, the target is not the numeric value, therefore targets are stored in the list as shown in Line 33 (instead of numpy-array). Select any one of the classifier from Lines 55-56 and run the code to see the prediction accuracy.
AI с Python – контролируемое обучение: классификация
В этой главе мы сосредоточимся на реализации контролируемого обучения – классификации.
Методика или модель классификации пытается получить некоторые выводы из наблюдаемых значений. В задаче классификации у нас есть классифицированные результаты, такие как «Черный» или «Белый» или «Обучающие» и «Необучающие». При построении модели классификации нам нужно иметь обучающий набор данных, который содержит точки данных и соответствующие метки. Например, если мы хотим проверить, является ли изображение автомобиля или нет. Для проверки мы создадим учебный набор данных, имеющий два класса, связанных с «машиной» и «без машины». Затем нам нужно обучить модель, используя обучающие образцы. Модели классификации в основном используются для распознавания лиц, идентификации спама и т. Д.
Шаги для построения классификатора в Python
Для построения классификатора в Python мы будем использовать Python 3 и Scikit-learn, который является инструментом для машинного обучения. Выполните следующие шаги, чтобы построить классификатор в Python –
Шаг 1 – Импорт Scikit-Learn
Это был бы самый первый шаг для создания классификатора в Python. На этом этапе мы установим пакет Python под названием Scikit-learn, который является одним из лучших модулей машинного обучения в Python. Следующая команда поможет нам импортировать пакет –
Шаг 2 – Импорт набора данных Scikit-learn
На этом этапе мы можем начать работать с набором данных для нашей модели машинного обучения. Здесь мы собираемся использовать диагностическую базу данных рака молочной железы в Висконсине. Набор данных включает в себя различную информацию о раковых опухолях молочной железы, а также метки классификации злокачественных или доброкачественных . Набор данных содержит 569 экземпляров или данных о 569 опухолях и содержит информацию о 30 атрибутах или признаках, таких как радиус опухоли, текстура, гладкость и площадь. С помощью следующей команды мы можем импортировать набор данных рака молочной железы Scikit-learn –
Теперь следующая команда загрузит набор данных.
Ниже приведен список важных ключей словаря –
- Имена меток классификации (target_names)
- Фактические метки (цель)
- Имена атрибутов / функций (feature_names)
- Атрибут (данные)
Теперь с помощью следующей команды мы можем создать новые переменные для каждого важного набора информации и назначить данные. Другими словами, мы можем организовать данные с помощью следующих команд –
Теперь, чтобы сделать его более понятным, мы можем напечатать метки классов, метку первого экземпляра данных, имена наших функций и значение функции с помощью следующих команд:
Приведенная выше команда напечатает имена классов, которые являются злокачественными и доброкачественными соответственно. Это показано как результат ниже –
Теперь команда ниже покажет, что они отображаются в двоичные значения 0 и 1. Здесь 0 представляет злокачественный рак, а 1 представляет доброкачественный рак. Вы получите следующий вывод –
Две команды, приведенные ниже, создадут имена и значения функций.
Из вышеприведенного вывода видно, что первый экземпляр данных представляет собой злокачественную опухоль, радиус которой составляет 1.7990000e + 01.
Шаг 3 – Организация данных в наборы
На этом этапе мы разделим наши данные на две части, а именно обучающий набор и тестовый набор. Разделение данных на эти наборы очень важно, потому что мы должны проверить нашу модель на невидимых данных. Чтобы разделить данные на наборы, в sklearn есть функция под названием train_test_split () . С помощью следующих команд мы можем разделить данные в этих наборах:
Приведенная выше команда импортирует функцию train_test_split из sklearn, а приведенная ниже команда разделит данные на данные обучения и тестирования. В приведенном ниже примере мы используем 40% данных для тестирования, а оставшиеся данные будут использованы для обучения модели.
Шаг 4 – Построение модели
На этом этапе мы будем строить нашу модель. Мы собираемся использовать наивный байесовский алгоритм для построения модели. Следующие команды могут быть использованы для построения модели –
Приведенная выше команда импортирует модуль GaussianNB. Теперь следующая команда поможет вам инициализировать модель.
Мы будем обучать модель, подгоняя ее к данным с помощью gnb.fit ().
Шаг 5 – Оценка модели и ее точности
На этом этапе мы собираемся оценить модель, сделав прогнозы на наших тестовых данных. Тогда мы узнаем и его точность. Для прогнозирования мы будем использовать функцию предиката (). Следующая команда поможет вам сделать это –
Приведенные выше серии 0 и 1 являются предсказанными значениями для классов опухолей – злокачественных и доброкачественных.
Теперь, сравнивая два массива, а именно test_labels и preds , мы можем выяснить точность нашей модели. Мы будем использовать функцию precision_score () для определения точности. Рассмотрим следующую команду для этого –
Результат показывает, что классификатор NaïveBayes имеет точность 95,17%.
Таким образом, с помощью описанных выше шагов мы можем построить наш классификатор в Python.
Сборка классификатора в Python
В этом разделе мы узнаем, как построить классификатор в Python.
Наивный байесовский классификатор
Наивный байесовский метод – это метод классификации, используемый для построения классификатора с использованием теоремы Байеса. Предполагается, что предикторы независимы. Проще говоря, это предполагает, что наличие определенной функции в классе не связано с наличием любой другой функции. Для построения наивного байесовского классификатора нам нужно использовать библиотеку python под названием scikit learn. Существует три типа наивных байесовских моделей, названные Gaussian, Multinomial и Bernoulli .
Для построения наивной модели байесовского классификатора машинного обучения нам нужно следующее & минус
Dataset
Мы собираемся использовать набор данных с именем База данных диагностики рака молочной железы в Висконсине. Набор данных включает в себя различную информацию о раковых опухолях молочной железы, а также метки классификации злокачественных или доброкачественных . Набор данных содержит 569 экземпляров или данных о 569 опухолях и содержит информацию о 30 атрибутах или признаках, таких как радиус опухоли, текстура, гладкость и площадь. Мы можем импортировать этот набор данных из пакета sklearn.
Наивная байесовская модель
Для построения наивного байесовского классификатора нам нужна наивная байесовская модель. Как говорилось ранее, существует три типа наивных байесовских моделей: Гауссовская, Многочленовая и Бернуллиевская . Здесь, в следующем примере мы будем использовать гауссовскую наивную байесовскую модель.
Используя вышеизложенное, мы собираемся построить наивную модель машинного обучения Байеса, чтобы использовать информацию о опухоли, чтобы предсказать, является ли опухоль злокачественной или доброкачественной.
Для начала нам нужно установить модуль sklearn. Это можно сделать с помощью следующей команды –
Теперь нам нужно импортировать набор данных с именем База данных диагностики рака молочной железы в Висконсине.
Теперь следующая команда загрузит набор данных.
Данные могут быть организованы следующим образом –
Теперь, чтобы прояснить ситуацию, мы можем напечатать метки классов, метку первого экземпляра данных, имена наших функций и значение функции с помощью следующих команд:
Приведенная выше команда напечатает имена классов, которые являются злокачественными и доброкачественными соответственно. Это показано как результат ниже –
Теперь приведенная ниже команда покажет, что они отображаются в двоичные значения 0 и 1. Здесь 0 представляет злокачественный рак, а 1 представляет доброкачественный рак. Это показано как результат ниже –
Следующие две команды создадут имена и их значения.
Из вышеприведенного вывода видно, что первый экземпляр данных представляет собой злокачественную опухоль, основной радиус которой составляет 1.7990000e + 01.
Для тестирования нашей модели на невидимых данных нам нужно разделить наши данные на данные обучения и тестирования. Это можно сделать с помощью следующего кода –
Приведенная выше команда импортирует функцию train_test_split из sklearn, а приведенная ниже команда разделит данные на данные обучения и тестирования. В приведенном ниже примере мы используем 40% данных для тестирования, а данные напоминания будут использованы для обучения модели.
Теперь мы строим модель с помощью следующих команд:
Приведенная выше команда импортирует модуль GaussianNB . Теперь с помощью команды, приведенной ниже, нам нужно инициализировать модель.
Мы будем обучать модель, подгоняя ее к данным с помощью gnb.fit () .
Теперь оцените модель, сделав прогноз на тестовых данных, и это можно сделать следующим образом:
Вышеуказанные серии 0 и 1 являются предсказанными значениями для классов опухолей, т.е. злокачественных и доброкачественных.
Теперь, сравнивая два массива, а именно test_labels и preds , мы можем выяснить точность нашей модели. Мы будем использовать функцию precision_score () для определения точности. Рассмотрим следующую команду –
Результат показывает, что классификатор NaïveBayes имеет точность 95,17%.
Это был классификатор машинного обучения, основанный на наивной модели Байса-Гаусса.
Машины опорных векторов (SVM)
По сути, машина опорных векторов (SVM) – это контролируемый алгоритм машинного обучения, который может использоваться как для регрессии, так и для классификации. Основная концепция SVM заключается в построении каждого элемента данных в виде точки в n-мерном пространстве, причем значением каждого объекта является значение определенной координаты. Здесь n будет теми функциями, которые у нас были бы. Ниже приводится простое графическое представление, чтобы понять концепцию SVM –

На приведенной выше диаграмме у нас есть две особенности. Следовательно, сначала нам нужно построить эти две переменные в двухмерном пространстве, где каждая точка имеет две координаты, называемые опорными векторами. Линия разбивает данные на две разные классифицированные группы. Эта строка будет классификатором.
Здесь мы собираемся создать классификатор SVM, используя scikit-learn и набор данных iris. Библиотека Scikitlearn имеет модуль sklearn.svm и предоставляет sklearn.svm.svc для классификации. Классификатор SVM для прогнозирования класса растения радужки на основе 4 признаков показан ниже.
Dataset
Мы будем использовать набор данных iris, который содержит 3 класса по 50 экземпляров каждый, где каждый класс относится к типу растения радужной оболочки. Каждый экземпляр имеет четыре особенности, а именно длину чашелистика, ширину чашелистика, длину лепестка и ширину лепестка. Классификатор SVM для прогнозирования класса растения радужки на основе 4 признаков показан ниже.
Это методика, используемая SVM. В основном это функции, которые занимают низкоразмерное пространство ввода и преобразуют его в пространство более высокого измерения. Это превращает неразделимую проблему в отделимую проблему. Функция ядра может быть любой из линейной, полиномиальной, rbf и сигмоидальной. В этом примере мы будем использовать линейное ядро.
Давайте теперь импортируем следующие пакеты –
Теперь загрузите входные данные –
Мы берем первые две функции –
Мы построим границы опорных векторов с исходными данными. Мы создаем меш для построения графика.
Нам нужно дать значение параметра регуляризации.
Нам нужно создать объект классификатора SVM.

Логистическая регрессия
По сути, модель логистической регрессии является одним из членов семейства алгоритмов контролируемой классификации. Логистическая регрессия измеряет взаимосвязь между зависимыми переменными и независимыми переменными путем оценки вероятностей с использованием логистической функции.
Здесь, если мы говорим о зависимых и независимых переменных, то зависимая переменная – это переменная целевого класса, которую мы собираемся прогнозировать, а с другой стороны, независимые переменные – это функции, которые мы собираемся использовать для прогнозирования целевого класса.
В логистической регрессии оценка вероятностей означает прогнозирование вероятности возникновения события. Например, владелец магазина хотел бы предсказать, покупатель, вошедший в магазин, купит игровую приставку (например) или нет. Там будет много особенностей клиента – пол, возраст и т. Д., Которые будет наблюдать продавец магазина, чтобы предсказать вероятность возникновения, то есть, покупка игровой приставки или нет. Логистическая функция – это сигмовидная кривая, которая используется для построения функции с различными параметрами.
Предпосылки
Перед созданием классификатора с использованием логистической регрессии нам необходимо установить пакет Tkinter в нашей системе. Его можно установить по адресу https://docs.python.org/2/library/tkinter.html .
Теперь с помощью приведенного ниже кода мы можем создать классификатор с помощью логистической регрессии –
Сначала мы импортируем несколько пакетов –
Теперь нам нужно определить пример данных, который можно сделать следующим образом:
Далее нам нужно создать классификатор логистической регрессии, что можно сделать следующим образом:
Последнее, но не менее важное, мы должны обучить этот классификатор –
Теперь, как мы можем визуализировать вывод? Это можно сделать, создав функцию с именем Logistic_visualize () –
В приведенной выше строке мы определили минимальное и максимальное значения X и Y, которые будут использоваться в сетке сетки. Кроме того, мы определим размер шага для построения сетки.
Давайте определим сетку сетки значений X и Y следующим образом:
С помощью следующего кода мы можем запустить классификатор на сетке сетки –
Следующая строка кода укажет границы участка
Теперь, после выполнения кода, мы получим следующий вывод, классификатор логистической регрессии –

Классификатор дерева решений
Дерево решений – это, по сути, блок-схема двоичного дерева, где каждый узел разделяет группу наблюдений в соответствии с некоторой характеристической переменной.
Здесь мы строим классификатор дерева решений для прогнозирования мужчин или женщин. Мы возьмем очень маленький набор данных, имеющий 19 образцов. Эти образцы будут состоять из двух признаков – «рост» и «длина волос».
необходимое условие
Для построения следующего классификатора нам нужно установить pydotplus и graphviz . По сути, graphviz – это инструмент для рисования графики с использованием точечных файлов, а pydotplus – это модуль для языка Graphviz’s Dot. Его можно установить с помощью менеджера пакетов или pip.
Теперь мы можем построить классификатор дерева решений с помощью следующего кода Python –
Для начала давайте импортируем некоторые важные библиотеки следующим образом:
Теперь нам нужно предоставить набор данных следующим образом:
После предоставления набора данных нам нужно подобрать модель, что можно сделать следующим образом:
Предсказание может быть сделано с помощью следующего кода Python –
Мы можем визуализировать дерево решений с помощью следующего кода Python –
Это даст прогноз для приведенного выше кода как [‘Woman’] и создаст следующее дерево решений –

Мы можем изменить значения функций в прогнозе, чтобы проверить его.
Случайный лесной классификатор
Как мы знаем, методы ансамбля – это методы, которые объединяют модели машинного обучения в более мощную модель машинного обучения. Случайный лес, коллекция деревьев решений, является одним из них. Это лучше, чем одно дерево решений, потому что, сохраняя предсказательные полномочия, оно может уменьшить чрезмерную подгонку путем усреднения результатов. Здесь мы собираемся внедрить модель случайного леса в наборе данных по обучению рака.
Импортируйте необходимые пакеты –
Теперь нам нужно предоставить набор данных, который можно сделать следующим образом & минус
После предоставления набора данных нам нужно подобрать модель, что можно сделать следующим образом:
Теперь получите точность обучения и подмножества тестирования: если мы увеличим количество оценщиков, точность подмножества тестирования также будет увеличена.
Выход
Теперь, как и дерево решений, случайный лес имеет модуль feature_importance, который обеспечит лучшее представление о весе объекта, чем дерево решений. Это можно построить и визуализировать следующим образом:

Производительность классификатора
После реализации алгоритма машинного обучения нам необходимо выяснить, насколько эффективна модель. Критерии измерения эффективности могут основываться на наборах данных и метрике. Для оценки различных алгоритмов машинного обучения мы можем использовать разные показатели производительности. Например, предположим, что если для различения изображений различных объектов используется классификатор, мы можем использовать метрики эффективности классификации, такие как средняя точность, AUC и т. Д. В том или ином смысле метрика, которую мы выбираем для оценки нашей модели машинного обучения, очень важно, потому что выбор метрик влияет на то, как измеряется и сравнивается производительность алгоритма машинного обучения. Ниже приведены некоторые из показателей –
Матрица путаницы
В основном это используется для задачи классификации, где выходные данные могут быть двух или более типов классов. Это самый простой способ измерить производительность классификатора. Матрица путаницы – это, в основном, таблица с двумя измерениями, а именно: «Фактическое» и «Предсказанное». Оба измерения имеют «Истинные позитивы (TP)», «Истинные негативы (TN)», «Ложные позитивы (FP)», «Ложные негативы (FN)».

В приведенной выше матрице путаницы 1 – для положительного класса, а 0 – для отрицательного.
Ниже приведены термины, связанные с матрицей путаницы.
Истинные плюсы – TP – это случаи, когда фактический класс точки данных равнялся 1, а прогнозируемый – также 1.
True Negatives – TN – это случаи, когда фактический класс точки данных был равен 0, а прогнозируемый также равен 0.
Ложные положительные значения – FP – это случаи, когда фактический класс точки данных был равен 0, а прогнозируемый также равен 1.
False Negatives – FN – это случаи, когда фактический класс точки данных был равен 1, а прогнозируемый также равен 0.
Истинные плюсы – TP – это случаи, когда фактический класс точки данных равнялся 1, а прогнозируемый – также 1.
True Negatives – TN – это случаи, когда фактический класс точки данных был равен 0, а прогнозируемый также равен 0.
Ложные положительные значения – FP – это случаи, когда фактический класс точки данных был равен 0, а прогнозируемый также равен 1.
False Negatives – FN – это случаи, когда фактический класс точки данных был равен 1, а прогнозируемый также равен 0.
точность
Сама матрица путаницы не является показателем эффективности как таковой, но почти все матрицы производительности основаны на матрице путаницы. Одним из них является точность. В задачах классификации это может быть определено как число правильных прогнозов, сделанных моделью для всех видов сделанных прогнозов. Формула для расчета точности выглядит следующим образом:
Т о ч н о с т ь = f r a c T P + T N T P + F P + F N + T N
точность
В основном используется при поиске документов. Это может быть определено как сколько из возвращенных документов является правильным. Ниже приведена формула для расчета точности:
P r e c i s i o n = f r a c T P T P + F P
Напомним или Чувствительность
Это может быть определено как количество положительных результатов, возвращаемых моделью. Ниже приведена формула для расчета отзыва / чувствительности модели.
R e c a l l = f r a c T P T P + F N
специфичность
Это может быть определено как количество негативов, возвращаемых моделью. Это прямо противоположно вспомнить. Ниже приведена формула для расчета специфики модели –
S p e c i f i c i t y = f r a c T N T N + F P
Проблема дисбаланса класса
Классовый дисбаланс – это сценарий, в котором количество наблюдений, принадлежащих одному классу, значительно меньше, чем наблюдения, принадлежащие другим классам. Например, эта проблема видна в сценарии, где нам необходимо выявить редкие заболевания, мошеннические операции в банке и т. Д.
Пример несбалансированных классов
Давайте рассмотрим пример набора данных для обнаружения мошенничества, чтобы понять концепцию несбалансированного класса –
Решение
Балансировка классов действует как решение несбалансированных классов. Основная цель балансирования классов – либо увеличить частоту класса меньшинства, либо уменьшить частоту класса большинства. Ниже приведены подходы к решению проблемы дисбалансов классов –
Re-Sampling
Повторная выборка представляет собой серию методов, используемых для восстановления наборов данных выборки – как обучающих наборов, так и наборов для тестирования. Повторная выборка проводится для повышения точности модели. Ниже приведены некоторые методы повторной выборки –
Случайное занижение выборки – этот метод направлен на то, чтобы сбалансировать распределение классов путем случайного исключения примеров большинства классов. Это делается до тех пор, пока экземпляры большинства и меньшинства не будут сбалансированы.
Случайное занижение выборки – этот метод направлен на то, чтобы сбалансировать распределение классов путем случайного исключения примеров большинства классов. Это делается до тех пор, пока экземпляры большинства и меньшинства не будут сбалансированы.
В этом случае мы берем 10% выборок без замены из случаев не мошенничества, а затем объединяем их с примерами мошенничества –
Не мошеннические наблюдения после случайной выборки = 10% из 4950 = 495
Всего наблюдений после объединения их с мошенническими наблюдениями = 50 + 495 = 545
Следовательно, теперь частота событий для нового набора данных после выборки = 9%
Основным преимуществом этого метода является то, что он может сократить время выполнения и улучшить хранение. Но с другой стороны, он может отбрасывать полезную информацию, уменьшая при этом количество выборок обучающих данных.
Случайная избыточная выборка – этот метод направлен на балансирование распределения классов путем увеличения числа экземпляров в классе меньшинства путем их репликации.
Случайная избыточная выборка – этот метод направлен на балансирование распределения классов путем увеличения числа экземпляров в классе меньшинства путем их репликации.
В случае, если мы повторяем 50 мошеннических наблюдений 30 раз, то мошеннические наблюдения после репликации наблюдений класса меньшинства будут 1500. И тогда общее количество наблюдений в новых данных после передискретизации будет 4950 + 1500 = 6450. Следовательно, частота событий для нового набора данных будет 1500/6450 = 23%.
Основным преимуществом этого метода является то, что не будет потери полезной информации. Но, с другой стороны, у него повышенные шансы переоснащения, потому что он копирует события класса меньшинства.
Техника ансамбля
Эта методология в основном используется для модификации существующих алгоритмов классификации, чтобы сделать их подходящими для несбалансированных наборов данных. При таком подходе мы строим несколько двухступенчатых классификаторов из исходных данных и затем агрегируем их прогнозы. Случайный лесной классификатор является примером ансамблевого классификатора.