Машинное обучение (3): понимание логистической регрессии и двухклассовой, многоклассовой практики кодирования

машинное обучение искусственный интеллект

Эта статьяСерия машинного обучениятретья часть, считаяСерия предмашинного обученияЭто восьмая глава. Концепции, изложенные в этой статье, относительно просты и сосредоточены в первую очередь на практике написания кода.
предыдущий постГоворя об этом, мы можем использовать линейную регрессию для прогнозирования, но очевидно, что в реальной жизни существуют не только проблемы прогнозирования, но и проблемы классификации. Мы можем просто отличить тип прогнозируемого значения:Прогнозирование непрерывных переменных — это регрессия, а прогнозирование дискретных переменных — это классификация.

1. Логистическая регрессия: бинарная классификация

1.1 Понимание логистической регрессии

Мы определяем непрерывные прогнозы вручную, при этом одна сторона границы определяется как 1, а другая сторона определяется как 0. Таким образом, мы превращаем проблему регрессии в проблему классификации.

Как показано на рисунке выше, мы положили распределение непрерывной переменнойподавлятьпо шкале от 0 до 1, с 0,5 в качестве нашего классификационного решенияграница, вероятность больше 0,5 оценивается как 1, а вероятность меньше 0,5 оценивается как 0.

Мы не можем использовать бесконечность и отрицательную бесконечность для арифметических операций, мы можем ограничить численный расчет между 0-1 с помощью функции логистической регрессии (сигмоидальная функция/сигмоидальная функция/логистическая функция).

о(x)=11+ex\sigma(x) = \frac{1}{1+e^{-x}}

Выше приведено простое объяснение логистической регрессии. Ниже мы применяем случаи с реальными данными, чтобы попрактиковаться в двоичном коде.

1.2 Правила работы с кодом — импорт наборов данных

Добавить цитату:

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

Импортируйте набор данных (вам не нужно заботиться об этом доменном имени):

df = pd.read_csv('https://blog.caiyongji.com/assets/hearing_test.csv')
df.head()
age physical_score test_result
33 40.7 1
50 37.2 1
52 24.7 0
56 31 0
35 42.9 1

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

  • особенность: 1. Возраст 2. Оценка здоровья
  • Этикетка: (1 успешно/0 неудачно)

1.3 Данные наблюдений

sns.scatterplot(x='age',y='physical_score',data=df,hue='test_result')

мы используемseabornПостройте диаграмму рассеяния характеристик возраста и показателей здоровья в зависимости от результатов теста.

sns.pairplot(df,hue='test_result')

мы проходимpairplotМетод рисует соответствие между признаками попарно.

Можно примерно судить о том, что пройти тест сложно, когда возраст старше 60 лет, а общий балл здоровья у прошедших тест выше 30.

1.4 Обучение модели

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score,classification_report,plot_confusion_matrix

#准备数据
X = df.drop('test_result',axis=1)
y = df['test_result']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=50)
scaler = StandardScaler()
scaled_X_train = scaler.fit_transform(X_train)
scaled_X_test = scaler.transform(X_test)

#定义模型
log_model = LogisticRegression()

#训练模型
log_model.fit(scaled_X_train,y_train)

#预测数据
y_pred = log_model.predict(scaled_X_test)
accuracy_score(y_test,y_pred)

После подготовки данных мы определяем модель какLogisticRegressionмодель логистической регрессии, черезfitметод, чтобы соответствовать обучающим данным, и, наконец, передатьpredictметод прогнозирования.
Наконец мы звонимaccuracy_scoreТочность модели, полученной методом, составляет 92,2%.

2. Оценка производительности модели: точность, воспроизводимость, полнота

Как мы добились точности 92,2%? мы называемplot_confusion_matrixметод построения матрицы путаницы.

plot_confusion_matrix(log_model,scaled_X_test,y_test)

Наблюдаем за 500 тестовыми экземплярами и получаем следующую матрицу:

Определим приведенную выше матрицу следующим образом:

  • Истинный класс ТП (Истинно Положительный): Прогноз положительный, фактический результат положительный. Например, 285 в правом нижнем углу картинки выше.
  • True Negative TN (истинно отрицательный): Прогноз отрицательный, фактический результат отрицательный. Например, 176 в верхнем левом углу на картинке выше.
  • Ложноположительный класс FP (ложноположительный): Прогноз положительный, фактический результат отрицательный. Например, 19 в левом нижнем углу картинки выше.
  • Ложноотрицательный класс FN (False Negative): Прогноз отрицательный, фактический результат положительный. Например, 20 в правом верхнем углу картинки выше.

ТочностьФормула выглядит следующим образом:

Accuracy=TP+TNTP+TN+FP+FNAccuracy = \frac{TP+TN}{TP+TN+FP+FN}

Введите этот пример, чтобы получить:

Accuracy=285+176285+176+20+19=0.922Accuracy = \frac{285+176}{285+176+20+19} = 0.922

ТочностьФормула выглядит следующим образом:

Precision=TPTP+FPPrecision = \frac{TP}{TP+FP}

Введите этот пример, чтобы получить:

Precision=285285+19=0.9375Precision = \frac{285}{285+19} = 0.9375

ОтзыватьФормула выглядит следующим образом:

Recall=TPTP+FNRecall = \frac{TP}{TP+FN}

Введите этот пример, чтобы получить:

Recall=285285+20=0.934Recall = \frac{285}{285+20} = 0.934

мы называемclassification_reportспособ проверки результатов.

print(classification_report(y_test,y_pred))

3. Softmax: мультиклассификация

3.1 Понимание множественной логистической регрессии softmax

Логистическая регрессия и регрессия Softmax являются классификационными моделями, основанными на линейной регрессии. Между ними нет существенной разницы. Обе оцениваются по точкам Бернулли в сочетании с максимальным логарифмическим правдоподобием.

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

Термины «вероятность» и «вероятность» часто используются как синонимы в английском языке, но в статистике они имеют совершенно разные значения. Для статистической модели с некоторыми параметрами θ слово «вероятность» описывает правдоподобие будущего результата x (знание значения параметра θ), а слово «вероятность» описывает конкретный набор исходов x после того, как известен исход x , Рациональность значения параметра θ.

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

3.2 Практика кодирования — импорт наборов данных

Импортируйте набор данных (вам не нужно заботиться об этом доменном имени):

df = pd.read_csv('https://blog.caiyongji.com/assets/iris.csv')
df.head()
sepal_length sepal_width petal_length petal_width species
5.1 3.5 1.4 0.2 setosa
4.9 3 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5 3.6 1.4 0.2 setosa

Набор данных содержит данные об образцах ириса 150. Особенности данных включают длину и ширину лепестков, а также длину и ширину чашелистиков.Он содержит три рода ирисов, а именно setosa, versicolor и радужка Virginia iris (virginica).

  • особенность: 1. Длина чашелистика 2. Ширина чашелистика 3. Длина лепестка 4 Ширина чашелистика
  • Этикетка: Виды: setosa, versicolor и virginica

3.3 Данные наблюдений

sns.scatterplot(x='sepal_length',y='sepal_width',data=df,hue='species')

мы используемseabornрисоватьчашечкаХарактеристики длины и ширины соответствуют графикам рассеяния видов ирисов.

sns.scatterplot(x='petal_length',y='petal_width',data=df,hue='species')

мы используемseabornрисоватьлепестокХарактеристики длины и ширины соответствуют графикам рассеяния видов ирисов.

sns.pairplot(df,hue='species')

мы проходимpairplotМетод рисует соответствие между признаками попарно.

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

3.4 Обучение модели

#准备数据
X = df.drop('species',axis=1)
y = df['species']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=50)
scaler = StandardScaler()
scaled_X_train = scaler.fit_transform(X_train)
scaled_X_test = scaler.transform(X_test)

#定义模型
softmax_model = LogisticRegression(multi_class="multinomial",solver="lbfgs", C=10, random_state=50)

#训练模型
softmax_model.fit(scaled_X_train,y_train)

#预测数据
y_pred = softmax_model.predict(scaled_X_test)
accuracy_score(y_test,y_pred)

Подготавливаем данные и определяем модельLogisticRegressionизmulti_class="multinomial"Модель множественной логистической регрессии, установите решатель наlbfgs,пройти черезfitметод, чтобы соответствовать обучающим данным, и, наконец, передатьpredictметод прогнозирования.
Наконец мы звонимaccuracy_scoreТочность модели, полученной методом, составляет 92,1%.

мы называемclassification_reportМетоды просмотра точности, точности и отзыва.

print(classification_report(y_test,y_pred))

3.5 Расширение: классификация лепестков рисунка

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

#提取特征
X = df[['petal_length','petal_width']].to_numpy() 
y = df["species"].factorize(['setosa', 'versicolor','virginica'])[0]

#定义模型
softmax_reg = LogisticRegression(multi_class="multinomial",solver="lbfgs", C=10, random_state=50)

#训练模型
softmax_reg.fit(X, y)

#随机测试数据
x0, x1 = np.meshgrid(
        np.linspace(0, 8, 500).reshape(-1, 1),
        np.linspace(0, 3.5, 200).reshape(-1, 1),
    )
X_new = np.c_[x0.ravel(), x1.ravel()]

#预测
y_proba = softmax_reg.predict_proba(X_new)
y_predict = softmax_reg.predict(X_new)

#绘制图像
zz1 = y_proba[:, 1].reshape(x0.shape)
zz = y_predict.reshape(x0.shape)
plt.figure(figsize=(10, 4))
plt.plot(X[y==2, 0], X[y==2, 1], "g^", label="Iris virginica")
plt.plot(X[y==1, 0], X[y==1, 1], "bs", label="Iris versicolor")
plt.plot(X[y==0, 0], X[y==0, 1], "yo", label="Iris setosa")
from matplotlib.colors import ListedColormap
custom_cmap = ListedColormap(['#fafab0','#9898ff','#a0faa0'])
plt.contourf(x0, x1, zz, cmap=custom_cmap)
contour = plt.contour(x0, x1, zz1, cmap=plt.cm.brg)
plt.clabel(contour, inline=1, fontsize=12)
plt.xlabel("Petal length", fontsize=14)
plt.ylabel("Petal width", fontsize=14)
plt.legend(loc="center left", fontsize=14)
plt.axis([0, 7, 0, 3.5])
plt.show()

Получите изображение радужной оболочки, классифицированное по лепесткам следующим образом:

4. Резюме

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

  1. Классификация машинного обучения
  2. Процесс индустриализации машинного обучения
  3. Концепции функций, меток, экземпляров, моделей
  4. переобучение, недообучивание
  5. Функция потерь, метод наименьших квадратов
  6. Градиентный спуск, скорость обучения

7. Линейная регрессия, логистическая регрессия, полиномиальная регрессия, ступенчатая регрессия, гребневая регрессия, регрессия Лассо, регрессия ElasticNet являются наиболее часто используемыми методами регрессии. 8. Сигмовидная функция, функция Softmax, оценка максимального правдоподобия

Если вам все еще неясно, обратитесь к: