【问题标题】:Calculating AUC for LogisticRegression model计算 LogisticRegression 模型的 AUC
【发布时间】:2021-03-23 13:17:28
【问题描述】:

我们来获取数据

import numpy as np
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.decomposition import PCA
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn import metrics

data = load_breast_cancer()
X = data.data
y = data.target

我想只使用第一个主成分创建模型并为其计算 AUC。

我目前的工作

scaler = StandardScaler()
scaler.fit(X_train) 
X_scaled = scaler.transform(X)
pca = PCA(n_components=1)
principalComponents = pca.fit_transform(X)
principalDf = pd.DataFrame(data = principalComponents
             , columns = ['principal component 1'])
clf = LogisticRegression()
clf = clf.fit(principalDf, y)
pred = clf.predict_proba(principalDf)

但是当我尝试使用时

fpr, tpr, thresholds = metrics.roc_curve(y, pred, pos_label=2)

出现以下错误:

y 应该是一维数组,取而代之的是一个形状为 (569, 2) 的数组。

我试图重塑我的数据

fpr, tpr, thresholds = metrics.roc_curve(y.reshape(1,-1), pred, pos_label=2)

但它没有解决问题(它输出):

不支持多标签指示符格式

您知道如何对第一个主成分执行 AUC 吗?

【问题讨论】:

  • 在 "y = data.target" 之后使用 print (y, type(y)) 来查看你真正拥有的东西。让我们知道结果

标签: python pandas numpy scikit-learn pca


【解决方案1】:

你不妨试试:

from sklearn.datasets import load_breast_cancer
from sklearn.decomposition import PCA
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn import metrics
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline

X,y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X,y)
scaler = StandardScaler()
pca = PCA(2)
clf = LogisticRegression()
ppl = Pipeline([("scaler",scaler),("pca",pca),("clf",clf)])
ppl.fit(X_train, y_train)
preds = ppl.predict(X_test)

fpr, tpr, thresholds = metrics.roc_curve(y_test, preds, pos_label=1)
metrics.plot_roc_curve(ppl, X_test, y_test)

【讨论】:

    【解决方案2】:

    问题是predict_proba 为每个类返回一列。通常使用二进制分类,你的类是 0 和 1,所以你想要第二类的概率,所以很常见的切片如下(替换代码块中的最后一行):

    pred = clf.predict_proba(principalDf)[:, 1]
    

    【讨论】:

      猜你喜欢
      • 2018-01-22
      • 1970-01-01
      • 2021-04-26
      • 2016-05-20
      • 2019-11-08
      • 2011-06-21
      • 1970-01-01
      • 2015-11-24
      • 2019-12-29
      相关资源
      最近更新 更多