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

Следовательно, вероятность классификации будет находиться в диапазоне от 0 до 1. Классический пример: является ли электронное письмо спамом или не спамом. Для этого мы снова воспользуемся библиотекой Python scikit-learn. Он содержит класс LogisticRegression.

Набор данных

Мы будем использовать хорошо известный набор данных MNIST.

Процесс кодирования в этом руководстве также будет применяться к другим классификаторам в Sklearn (Дерево решений, K-ближайшие соседи и т. д.). Набор данных MNIST содержит метки от 0 до 9 цифр. После обучения модели с помощью логистической регрессии ее можно использовать для прогнозирования метки изображения по заданному изображению.

Давайте сначала загрузим необходимые библиотеки и набор данных.

import numpy as np
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt
%matplotlib inline
#lets load the dataset
digits = load_digits()

Давайте попробуем увидеть размеры нашего набора данных

# now that we have loaded the dataset, lets see the images
# there are 1797 images of 8x8 pixels size
print("Image data shape",digits.data.shape)

# lets see how many data labels are there!
print("Image labels shape",digits.target.shape)
Image data shape (1797, 64)
Image labels shape (1797,)

Теперь мы разделим наш набор данных на две части: тестирование и обучение.

# Splitting the Dataset into Training and Testing
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(digits.data, digits.target,test_size=0.25,random_state=0)

Веселье начинается! Каждый алгоритм машинного обучения будет иметь следующие части

  1. Импортируйте модель, которую хотите использовать
  2. Сделать экземпляр модели
  3. Обучите модель с использованием набора данных Обучение. Здесь мы используем метод FIT
  4. Используйте метод PREDICT для прогнозирования набора данных новых изображений.
  5. Используйте метод SCORE для проверки точности модели.

Шаг 1 :

# Step 1 : Import the model that you want to use
from sklearn.linear_model import LogisticRegression

Шаг 2 :

# Step 2 : Make an instance of the model
lr = LogisticRegression()

Шаг 3 :

# Step 3 : Training the model on the data, storing the information learned from the data
# Here model is learning the relationship between x(digits) and y(labels)
# FIT the model
lr.fit(x_train,y_train)

Шаг 4:

# Step 4 : Predict the labels of new data (new images)
# Uses the information the model during the model training process
# This will return a numpy array
# PREDICT for One observation (image)
lr.predict(x_test[0].reshape(1,-1))

Шаг 5:

# Predict for Multiple Observations 
lr.predict(x_test[0:10])
# Predict for the entire dataset
predictions  = lr.predict(x_test)

Шаг 6:

# Measuring the model's peformance
# While there are many ways of doing this, we are going to keep this simple.
# We will calculate accuracy as correction predictions/total number of data points
# use SCORE method to get accuracy of the model
score =  lr.score(x_test,y_test)
print(score)

Дополнительный :

Мы используем матрицу путаницы для визуализации результатов.

# Confusion Matrix
# A confusion matrix is a table that is often used to describe the peformance of a classification model (or classifier)
# on a set of test data for which the values are known. There are two python packages for making Confusion Matrix
# Seaborn and Matplotlib

Начнем с импорта библиотек

import numpy as np
import seaborn as sns
from sklearn import metrics

Затем мы создаем экземпляр класса матрицы путаницы.

# Method 1 : Seaborn
cm = metrics.confusion_matrix(y_test,predictions)

Теперь делаем следующие шаги

  1. Определите размер фигуры. В данном случае мы выбрали размер 9x9
  2. Используйте класс HEATMAP для создания матрицы путаницы
  3. Запишите метки осей x и y и подставьте оценку.
plt.figure(figsize=(9,9))
sns.heatmap(cm,annot=True,fmt=".3f",square=True)
plt.ylabel("Actual label")
plt.xlabel("Predicted label")
plt.title("Accuracy Score is {0} ".format(score),size=15)
plt.savefig('Confusion Matrix.png')

Способ 2: использование Matplotlib

Это требует гораздо большего количества кодирования, чем первое.

  1. Начнем с создания экземпляра класса матрицы путаницы
cm = metrics.confusion_matrix(y_test,predictions)

2. Затем мы определяем размер риса. Мы выбрали (9x9) в этом случае

plt.figure(figsize=(9,9))

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

plt.imshow(cm,interpolation='nearest',cmap='Pastel1')

4. Настройте заголовок диаграммы, покажите цветовую полосу

plt.title('Confusion matrix',size=15)
plt.colorbar()

5. Установите 10 делений на оси, обозначьте оси x и y.

plt.xticks(tick_marks,["0","1","2","3","4","5","6","7","8","9"])
plt.yticks(tick_marks,["0","1","2","3","4","5","6","7","8","9"])
plt.tight_layout()
plt.ylabel('Actual Label',size = 15)
plt.xlabel('Predicted Label',size = 15)

6. Сохраните переменные ширины и высоты, используя форму матрицы путаницы.

width,height = cm.shape

7. Используйте цикл for для отображения прогнозируемых и фактических меток.

for x in range(width):
    for y in range(height):
        plt.annotate(str(cm[x][y]),xy=(y,x),horizontalalignment = "center",verticalalignment="center")
plt.savefig("Confusion Matrix Matplotlib.png")

На следующем уроке мы рассмотрим деревья решений.

Вы можете получить доступ к коду для этой главы здесь:

https://github.com/procupine/MLbasics/blob/master/Chapter%202%20-%20Logistic%20Regression.ipynb

Вы можете просмотреть мой предыдущий урок по линейной регрессии здесь :



Не стесняйтесь обращаться по адресу [email protected]