Эта статьяСерия машинного обучениятретья часть, считаяСерия предмашинного обученияЭто восьмая глава. Концепции, изложенные в этой статье, относительно просты и сосредоточены в первую очередь на практике написания кода.
предыдущий постГоворя об этом, мы можем использовать линейную регрессию для прогнозирования, но очевидно, что в реальной жизни существуют не только проблемы прогнозирования, но и проблемы классификации. Мы можем просто отличить тип прогнозируемого значения:Прогнозирование непрерывных переменных — это регрессия, а прогнозирование дискретных переменных — это классификация.
1. Логистическая регрессия: бинарная классификация
1.1 Понимание логистической регрессии
Мы определяем непрерывные прогнозы вручную, при этом одна сторона границы определяется как 1, а другая сторона определяется как 0. Таким образом, мы превращаем проблему регрессии в проблему классификации.
Как показано на рисунке выше, мы положили распределение непрерывной переменнойподавлятьпо шкале от 0 до 1, с 0,5 в качестве нашего классификационного решенияграница, вероятность больше 0,5 оценивается как 1, а вероятность меньше 0,5 оценивается как 0.
Мы не можем использовать бесконечность и отрицательную бесконечность для арифметических операций, мы можем ограничить численный расчет между 0-1 с помощью функции логистической регрессии (сигмоидальная функция/сигмоидальная функция/логистическая функция).
Выше приведено простое объяснение логистической регрессии. Ниже мы применяем случаи с реальными данными, чтобы попрактиковаться в двоичном коде.
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 в правом верхнем углу картинки выше.
ТочностьФормула выглядит следующим образом:
Введите этот пример, чтобы получить:
ТочностьФормула выглядит следующим образом:
Введите этот пример, чтобы получить:
ОтзыватьФормула выглядит следующим образом:
Введите этот пример, чтобы получить:
мы называем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. Резюме
По сравнению с концептуальным пониманием, эта статья больше фокусируется на практической практике, благодаря практическому программированию у вас должно появиться ощущение «теплых рук». К концу этой статьи вы должны иметь определенное представление о концепции машинного обучения.Давайте кратко разберемся:
- Классификация машинного обучения
- Процесс индустриализации машинного обучения
- Концепции функций, меток, экземпляров, моделей
- переобучение, недообучивание
- Функция потерь, метод наименьших квадратов
- Градиентный спуск, скорость обучения
7. Линейная регрессия, логистическая регрессия, полиномиальная регрессия, ступенчатая регрессия, гребневая регрессия, регрессия Лассо, регрессия ElasticNet являются наиболее часто используемыми методами регрессии. 8. Сигмовидная функция, функция Softmax, оценка максимального правдоподобия
Если вам все еще неясно, обратитесь к:
- Машинное обучение (2): понимание линейной регрессии и градиентного спуска и создание простых прогнозов
- Машинное обучение (1): 5 минут, чтобы понять машинное обучение и приступить к работе
- Предмашинное обучение (5): освойте использование часто используемой библиотеки Matplotlib за 30 минут.
- Предварительное машинное обучение (4): освойте использование Pandas в одной статье.
- Предварительное машинное обучение (3): освоение стандартного использования NumPy за 30 минут.
- Предварительное машинное обучение (2): освойте использование обычного ноутбука Jupyter за 30 минут.
- Предмашинное обучение (1): математические символы и греческие буквы