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

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

Уравнение линейной регрессии:

y : зависимая переменная
X1,X2…Xn являются независимыми переменными.

Логистическая функция:
Логистическая функция также называется сигмоидной функцией. Это S-образная кривая, которая может взять любое действительное число и преобразовать его в значение от 0 до 1, но никогда точно в этих пределах.

e : база естественных алгоритмов (число Эйлера), а значение — фактическое числовое число, которое вы хотите преобразовать.

Типы логистической регрессии

  1. Бинарная логистическая регрессия. Возможны только два результата: да или нет.
  2. Полиномиальная логистическая регрессия. Имеет более двух номинальных категорий.
  3. Обычная логистическая регрессия: имеет более двух номинальных категорий. Кроме того, он имеет дело с целевыми переменными с упорядоченными категориями.

Приступаем к кодированию!!!

Загрузка данных и выбор функций

dataset = pd.read_csv("dataset/social_network_ads.csv")
X = dataset.iloc[:, [2,3]].values
Y = dataset.iloc[:, 4].values

.iloc[] — это функция, которая помогает разделить весь набор данных на основе выбора строки и столбца.

.iloc[‹Выбор строки›, ‹Выбор столбца›]

X - независимая переменная (или переменная признака)

Y - зависимая переменная (или целевая переменная)

Разделение данных

X_train, X_test, y_train, y_test  = train_test_split(X, Y, test_size = 0.20, random_state=0)

sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

Здесь набор данных разбит на две части 80% для обучения и 20% для тестирования
Почему random_state = 0?
Ответ здесь, функция train_test_split разделит массивы или матрицы в случайные тестовые и обучающие подмножества. Это означает, что каждый раз, когда вы запускаете его без указания random_state, вы будете получать разные результаты.

Поэтому, если вы используете random_state = some_number, вы получите вывод Run1, который будет равен выводу Run2.

Использование StandardScaler()?

Идея StandardScaler заключается в том, что он преобразует ваши данные таким образом, что их распределение будет иметь среднее значение 0 и стандартное отклонение 1. Учитывая распределение данных, из каждого значения в наборе данных будет вычтено среднее значение выборки, а затем разделено по стандартному отклонению всего набора данных.

Обучение и прогнозирование моделей

logreg = LogisticRegression(random_state=0)
logreg.fit(X_train, y_train)

y_pred = logreg.predict(X_test)

Оценка модели

Оценка модели — важный шаг для определения точности модели, которую мы обучили. Матрица путаницы — это матрица (таблица), которую можно использовать для измерения производительности алгоритма машинного обучения, обычно контролируемого обучения.
Основой матрицы путаницы является количество правильные и неправильные прогнозы суммируются по классам.

cm = confusion_matrix(y_test, y_pred)
print('Confusion matrix', cm)

class_names = [0, 1]
fig, ax = plt.subplots()
tick_marks = np.arange(len(class_names))
plt.xticks(tick_marks, class_names)
plt.yticks(tick_marks, class_names)

sns.heatmap(pd.DataFrame(cm), annot=True, cmap = "YlGnBu", fmt = 'g')
ax.xaxis.set_label_position("top")
plt.tight_layout()

plt.title('Confusion matrix', y=1.1)
plt.ylabel('Actual Label')
plt.xlabel('Predicted label')
plt.show()

Матрица путаницы имеет два класса: 0 или 1.
Из приведенного выше рисунка 56 и 17 являются точными прогнозами, а 2 и 5 неточными.

Точность = TP + TN / Total
Частота ошибок = FP + FN / Total
Точность = TP/TP+FP
Отзыв = TP/ TP+FN

print("Accuracy: ", metrics.accuracy_score(y_test, y_pred))
report = classification_report(y_test, y_pred)
print("Classification Report: ", report)

отчет о классификации обеспечит точность, отзыв, оценку f1

Точность похожа на точность, но она рассматривает только те данные, которые вы предсказали положительными. Отзыв также похож на точность, но он рассматривает только те данные, которые каким-то образом «актуальны».

Если точность близка к 1, то обученная модель будет идеальной.

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

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

X1, X2 = np.meshgrid(np.arange(start = X_test[:, 0].min() - 1, stop = X_test[:, 0].max() + 1, step = 0.01),
                     (np.arange(start = X_test[:, 1].min() -1, stop = X_test[:, 1].max() + 1, step = 0.01)))
plt.contourf(X1, X2, logreg.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.50, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_test)):
    plt.scatter(X_test[y_test == j, 0], X_test[y_test == j, 1],
                c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('Logistic Regression (Test set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()

Анализируя такие факторы оценки, как точность, матрица путаницы и график, мы можем легко сказать, что наша модель работает очень хорошо.

Полный код доступен на GitHub!!! :)
https://github.com/abinj/machine-learning-algorithms.git

Вы также можете связаться со мной в LinkedIn