Иногда соглашения об именах не имеют смысла! Это один из таких случаев. Хотя это и называется логистической регрессией, это алгоритм классификации. Это используется для оценки вариантов бинарной классификации.
Следовательно, вероятность классификации будет находиться в диапазоне от 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)
Веселье начинается! Каждый алгоритм машинного обучения будет иметь следующие части
- Импортируйте модель, которую хотите использовать
- Сделать экземпляр модели
- Обучите модель с использованием набора данных Обучение. Здесь мы используем метод FIT
- Используйте метод PREDICT для прогнозирования набора данных новых изображений.
- Используйте метод 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)
Теперь делаем следующие шаги
- Определите размер фигуры. В данном случае мы выбрали размер 9x9
- Используйте класс HEATMAP для создания матрицы путаницы
- Запишите метки осей 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
Это требует гораздо большего количества кодирования, чем первое.
- Начнем с создания экземпляра класса матрицы путаницы
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]