Fab*_*res 6 python machine-learning roc scikit-learn
我需要的是:
为此,我的方法是使用这个非常好的教程:
根据他的想法和方法,我只是简单地更改了如何获取原始数据的方式,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
他们我只是运行代码。如果我尝试运行类似的指标,accuracy或者
balanced_accuracy一切正常(即使使用许多其他指标)。我的问题是,当我尝试使用指标运行时,roc_auc出现错误:
“ ValueError:y_true中仅存在一个类。在这种情况下,未定义ROC AUC分数。”
这个错误已经被讨论here1,here2,here3和here4。但是,我无法使用他们提供的任何“解决方案” /解决方法来解决我的问题。
我的整个代码是:
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()
Run Code Online (Sandbox Code Playgroud)
虹膜数据集通常相对于类进行排序。因此,在不进行改组的情况下进行拆分时,测试数据集可能只会得到一个类。
一种简单的解决方案是使用shuffle参数。
kfold = model_selection.KFold(n_splits=10, shuffle=True, random_state=seed)
Run Code Online (Sandbox Code Playgroud)
即使那样roc_auc,也不直接支持多类格式(iris-数据集具有三个类)。
通过此链接可以了解有关如何roc_auc用于多类情况的更多信息。
| 归档时间: |
|
| 查看次数: |
208 次 |
| 最近记录: |