“NameError: name ‘label’ is not defined” with Logistic Regression

huangapple go评论84阅读模式
英文:

"NameError: name 'label' is not defined" with Logistic Regression

问题

I can provide a translation of the content you provided in Chinese:

"我正在完成我的机器学习和数据挖掘课程作业。在尝试使用逻辑回归训练模型时,我遇到以下错误。

这是我的代码:

创建空列表以存储不同分类器的输出

model_name = []
准确率 = []
精确度 = []
召回率 = []
F1分数 = []
从sklearn.linear_model导入LogisticRegression
从sklearn.model_selection导入train_test_split
从sklearn导入指标

拆分训练和测试数据集

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.4,random_state = 5)

logreg = LogisticRegression()#使用逻辑回归
logreg.fit(X_train,y_train)
y_pred = logreg.predict(X_test)
print(metrics.accuracy_score(y_test,y_pred))

对于Our_models中的模型:
model.fit(X_train,y_train)
y_pred = model.predict(X_test)

获取模型的名称

model_name = model.class.name
Print_metrics(y_test,y_pred,model_name)
print(model)

出现以下错误:

模型名称:DecisionTreeClassifier
准确率0.95
召回率0.95
精确度0.9545454545454546
F1分数0.949874686716792
曲线下面积0.95
/usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1396:用户警告:请注意,当average != 'binary'(得到'macro')时,将忽略pos_label(设置为'positive')。您可以使用labels = [pos_label]来指定单个正类。
warnings.warn(
/usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1396:用户警告:当average != 'binary'(得到'macro')时,将忽略pos_label(设置为'positive')。您可以使用labels = [pos_label]来指定单个正类。
warnings.warn(
/usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1396:用户警告:请注意,当average != 'binary'(得到'macro')时,将忽略pos_label(设置为'positive')。您可以使用labels = [pos_label]来指定单个正类。
warnings.warn(
-------------------------------------------------- -------------------------
NameError  ---------
'标签'未定义

如何解决这个问题?"

Is there anything else you would like to know or clarify in Chinese?

英文:

I'm working on my homework for my machine learning & data mining course. I'm getting the following error when trying to train the model using a logistic regression.

Here is my code:

#Creating empty list to store the outputs of the different classifier
model_name = []
Accuracy = []
Precision = []
Recall= []
F1_score = []
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn import metrics
#splitting the training and testing data set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=5)

logreg = LogisticRegression() #using logistic regression
logreg.fit(X_train, y_train) 
y_pred = logreg.predict(X_test)
print(metrics.accuracy_score(y_test, y_pred))

for model in Our_models:
    model.fit(X_train,y_train)
    y_pred = model.predict(X_test)
    # Get the name of the model
    model_name = model.__class__.__name__
    Print_metrics(y_test,y_pred,model_name)
    print(model)

Getting this error:

    Model name:  DecisionTreeClassifier
    accuracy 0.95
    recall 0.95
    precision 0.9545454545454546
    F1_score 0.949874686716792
    Area Under the Curve 0.95
    /usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1396: UserWarning:          Note that pos_label (set to 'positive') is ignored when average != 'binary' (got 'macro'). You     may use labels=[pos_label] to specify a single positive class.
      warnings.warn(
    /usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1396: UserWarning:     Note that pos_label (set to 'positive') is ignored when average != 'binary' (got 'macro'). You     may use labels=[pos_label] to specify a single positive class.
  warnings.warn(
    /usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1396: UserWarning:     Note that pos_label (set to 'positive') is ignored when average != 'binary' (got 'macro'). You     may use labels=[pos_label] to specify a single positive class.
  warnings.warn(
    ---------------------------------------------------------------------------
    NameError                                 Traceback (most recent call last)
    <ipython-input-146-5fd04e4709fc> in <cell line: 1>()
          4     # Get the name of the model
          5     model_name = model.__class__.__name__
    ----> 6     Print_metrics(y_test,y_pred,model_name)
          7     print(model)

    <ipython-input-64-66701b741e6b> in Print_metrics(y_test, y_pred, model_name)
         18 
         19     # Calculate confusion matrix
    ---> 20     print("Confusion Matrix", confusion_matrix(y_test, y_pred,label, average= 'macro'))

    NameError: name 'label' is not defined

How can I resolve this?

答案1

得分: 0

错误消息表明您的代码中存在一个未定义的变量名为“label”。似乎您将“label”作为参数传递给了“confusion_matrix”函数,但它没有被定义。

要解决这个问题,您需要定义“label”变量,或者如果不需要它的话,可以将其删除。

您可以修改您的代码如下:

from sklearn.metrics import confusion_matrix, classification_report

def Print_metrics(y_test, y_pred, model_name):
    # 计算混淆矩阵
    print("混淆矩阵:\n", confusion_matrix(y_test, y_pred))

    # 计算分类报告
    print("分类报告:\n", classification_report(y_test, y_pred))

    # 打印其他指标
    accuracy = metrics.accuracy_score(y_test, y_pred)
    recall = metrics.recall_score(y_test, y_pred, average='macro')
    precision = metrics.precision_score(y_test, y_pred, average='macro')
    f1_score = metrics.f1_score(y_test, y_pred, average='macro')

    print("模型名称:", model_name)
    print("准确度:", accuracy)
    print("召回率:", recall)
    print("精确度:", precision)
    print("F1 分数:", f1_score)
    print("")

# 其余部分的代码...

for model in Our_models:
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)

    # 获取模型的名称
    model_name = model.__class__.__name__

    Print_metrics(y_test, y_pred, model_name)
    print(model)

在上面的代码中,我添加了“classification_report”函数来计算精确度、召回率和F1分数。从“scikit-learn”的“metrics”模块中计算其他指标时,已将“label”参数从“confusion_matrix”函数中移除,因为您想要使用宏平均。如果对您有用,请尝试运行它!

英文:

The error message suggests that there is an undefined variable named label in your code. It seems that you're passing label as an argument to the confusion_matrix function, but it's not defined.

To resolve this issue, you need to define the label variable or remove it if it's not necessary.

you can modify your code as follows:

from sklearn.metrics import confusion_matrix, classification_report

def Print_metrics(y_test, y_pred, model_name):
    # Calculate confusion matrix
    print("Confusion Matrix:\n", confusion_matrix(y_test, y_pred))

    # Calculate classification report
    print("Classification Report:\n", classification_report(y_test, y_pred))

    # Print other metrics
    accuracy = metrics.accuracy_score(y_test, y_pred)
    recall = metrics.recall_score(y_test, y_pred, average='macro')
    precision = metrics.precision_score(y_test, y_pred, average='macro')
    f1_score = metrics.f1_score(y_test, y_pred, average='macro')

    print("Model name:", model_name)
    print("Accuracy:", accuracy)
    print("Recall:", recall)
    print("Precision:", precision)
    print("F1 Score:", f1_score)
    print("")

# Rest of your code...

for model in Our_models:
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)

    # Get the name of the model
    model_name = model.__class__.__name__

    Print_metrics(y_test, y_pred, model_name)
    print(model)

In the code above, I've added the classification_report function to calculate the precision, recall, and F1 score. The label argument is removed from the confusion_matrix function since you want to use the macro average. Additionally, the other metrics are calculated using the metrics module from scikit-learn. Check it if it works for you!!!

huangapple
  • 本文由 发表于 2023年7月13日 11:26:44
  • 转载请务必保留本文链接:https://go.coder-hub.com/76675694.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定