Мне нужно:
- Применить классификатор логистической регрессии
- Сообщить о ROC для каждого класса с помощью AUC.
- Используйте оценочные вероятности логистической регрессии для руководства построением РПЦ.
- 5-кратная перекрестная проверка для обучения вашей модели.
Для этого мой подход заключался в использовании этого действительно хорошего учебника:
ИзЕго идею и метод я просто изменил, как я получаю необработанные данные, которые я получаю так:
df = pd.read_csv(
filepath_or_buffer='https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data',
header=None,
sep=',')
df.columns=['sepal_len', 'sepal_wid', 'petal_len', 'petal_wid', 'class']
df.dropna(how="all", inplace=True) # drops the empty line at file-end
df.tail()
# split data table into data X and class labels y
X = df.iloc[:,0:4].values
Y = df.iloc[:,4].values
Их я просто запускаю код.Если я пытаюсь запустить для метрик, таких как accuracy
или
balanced_accuracy
, все работает нормально (даже со многими другими метриками).Моя проблема в том, что когда я пытаюсь запустить с метрикой roc_auc
, я получаю сообщение об ошибке:
«ValueError: в y_true присутствует только один класс. В этом случае не определен счет ROC AUC».
Эта ошибка обсуждалась здесь1 , здесь2 , здесь3 и здесь4 .Однако я не смог использовать ни одно из предоставленных ими «решений» / обходных путей, чтобы решить мою проблему.
Весь мой код:
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
import pandas as pd
import numpy as np
import plotly.graph_objs as go
from plotly.offline import init_notebook_mode
from sklearn.preprocessing import StandardScaler
from IPython import get_ipython
get_ipython().run_line_magic('matplotlib', 'qt')
import matplotlib.pyplot as plt
import pandas as pd
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
df = pd.read_csv(
filepath_or_buffer='https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data',
header=None,
sep=',')
df.columns=['sepal_len', 'sepal_wid', 'petal_len', 'petal_wid', 'class']
df.dropna(how="all", inplace=True) # drops the empty line at file-end
df.tail()
# split data table into data X and class labels y
X = df.iloc[:,0:4].values
Y = df.iloc[:,4].values
#print(X)
#print(Y)
seed = 7
# prepare models
models = []
models.append(('LR', LogisticRegression()))
# evaluate each model in turn
results = []
names = []
scoring = 'roc_auc'
for name, model in models:
kfold = model_selection.KFold(n_splits=5, random_state=seed)
cv_results = model_selection.cross_val_score(model, X, Y, cv=kfold, scoring=scoring)
results.append(cv_results)
names.append(name)
msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
print(msg)
# boxplot algorithm comparison
fig = plt.figure()
fig.suptitle('Algorithm Comparison')
ax = fig.add_subplot(111)
plt.boxplot(results)
ax.set_xticklabels(names)
plt.show()