Precision, recall, F1 score all have zero value for the minority class in the classification report

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

Precision, recall, F1 score all have zero value for the minority class in the classification report

问题

我在使用SkLearn包中的SVM和MLP分类器时遇到了错误。错误信息如下:

C:\Users\cse_s\anaconda3\lib\site-packages\sklearn\metrics_classification.py:1327: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use zero_division parameter to control this behavior.
_warn_prf(average, modifier, msg_start, len(result))

分割数据集的代码:

  1. from sklearn.model_selection import train_test_split
  2. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, stratify=y)

SVM分类器的代码:

  1. from sklearn import svm
  2. SVM_classifier = svm.SVC(kernel="rbf", probability=True, random_state=1)
  3. SVM_classifier.fit(X_train, y_train)
  4. SVM_y_pred = SVM_classifier.predict(X_test)
  5. print(classification_report(y_test, SVM_y_pred))

MLP分类器的代码:

  1. from sklearn.neural_network import MLPClassifier
  2. MLP = MLPClassifier(random_state=1, learning_rate="constant", learning_rate_init=0.3, momentum=0.2)
  3. MLP.fit(X_train, y_train)
  4. R_y_pred = MLP.predict(X_test)
  5. target_names = ['No class', 'Yes Class']
  6. print(classification_report(y_test, R_y_pred, target_names=target_names))

这两个分类器都出现了相同的错误。

英文:

I got error while using SVM and MLP classifiers from SkLearn package. The error is C:\Users\cse_s\anaconda3\lib\site-packages\sklearn\metrics_classification.py:1327: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use zero_division parameter to control this behavior.
_warn_prf(average, modifier, msg_start, len(result))

Code for splitting dataset

  1. from sklearn.model_selection import train_test_split
  2. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, stratify=y)

Code for SVM classifier

  1. from sklearn import svm
  2. SVM_classifier = svm.SVC(kernel="rbf", probability = True, random_state=1)
  3. SVM_classifier.fit(X_train, y_train)
  4. SVM_y_pred = SVM_classifier.predict(X_test)
  5. print(classification_report(y_test, SVM_y_pred))

Code for MLP classifier

  1. from sklearn.neural_network import MLPClassifier
  2. MLP = MLPClassifier(random_state=1, learning_rate = "constant", learning_rate_init=0.3, momentum = 0.2 )
  3. MLP.fit(X_train, y_train)
  4. R_y_pred = MLP.predict(X_test)
  5. target_names = ['No class', 'Yes Class']
  6. print(classification_report(y_test, R_y_pred, target_names=target_names))

The error is same for both classifiers

答案1

得分: 2

I hope, it could help.

Classification_report:
设置当发生零除法时要返回的值。您可以提供0或1,如果零除法发生,则由精度或召回率公式计算。

  1. classification_report(y_test, R_y_pred, target_names=target_names, zero_division=0)

I don't know what's your data look like. Here's an example.

Features of cancer dataset:

  1. import pandas as pd
  2. import numpy as np
  3. from sklearn import svm
  4. from sklearn.model_selection import train_test_split
  5. from sklearn.datasets import load_breast_cancer
  6. from sklearn.neural_network import MLPClassifier
  7. from sklearn.metrics import classification_report
  8. cancer = load_breast_cancer()
  9. df_feat = pd.DataFrame(cancer['data'], columns=cancer['feature_names'])
  10. df_feat.head()

Target of dataset:

  1. df_target = pd.DataFrame(cancer['target'], columns=['Cancer'])
  2. np.ravel(df_target) # 转换为一维数组

生成分类报告:

  1. X_train, X_test, y_train, y_test = train_test_split(df_feat, np.ravel(df_target), test_size=0.3, random_state=101)
  2. SVM_classifier = svm.SVC(kernel="rbf", probability=True, random_state=1)
  3. SVM_classifier.fit(X_train, y_train)
  4. SVM_y_pred = SVM_classifier.predict(X_test)
  5. print(classification_report(y_test, SVM_y_pred))

为MLP分类器生成分类报告:

  1. MLP = MLPClassifier(random_state=1, learning_rate="constant", learning_rate_init=0.3, momentum=0.2)
  2. MLP.fit(X_train, y_train)
  3. R_y_pred = MLP.predict(X_test)
  4. target_names = ['No class', 'Yes Class']
  5. print(classification_report(y_test, R_y_pred, target_names=target_names, zero_division=0))
英文:

I hope, it could help.

Classification_report:
Sets the value to return when there is a zero division. You can provide 0 or 1 if zero division occur. by the precision or recall formula

  1. classification_report(y_test, R_y_pred, target_names=target_names, zero_division=0)

I don't know what's your data look like. Here's an example

Features of cancer dataset

  1. import pandas as pd
  2. import numpy as np
  3. from sklearn import svm
  4. from sklearn.model_selection import train_test_split
  5. from sklearn.datasets import load_breast_cancer
  6. from sklearn.neural_network import MLPClassifier
  7. from sklearn.metrics import classification_report
  8. cancer = load_breast_cancer()
  9. df_feat = pd.DataFrame(cancer['data'],columns=cancer['feature_names'])
  10. df_feat.head()

Target of dataset:

  1. df_target = pd.DataFrame(cancer['target'],columns=['Cancer'])
  2. np.ravel(df_target) # convert it into a 1-d array

Generate classification report:

  1. X_train, X_test, y_train, y_test = train_test_split(df_feat, np.ravel(df_target), test_size=0.3, random_state=101)
  2. SVM_classifier = svm.SVC(kernel="rbf", probability = True, random_state=1)
  3. SVM_classifier.fit(X_train, y_train)
  4. SVM_y_pred = SVM_classifier.predict(X_test)
  5. print(classification_report(y_test, SVM_y_pred))

Generate classification report for MLP Classifier:

  1. MLP = MLPClassifier(random_state=1, learning_rate = "constant", learning_rate_init=0.3, momentum = 0.2 )
  2. MLP.fit(X_train, y_train)
  3. R_y_pred = MLP.predict(X_test)
  4. target_names = ['No class', 'Yes Class']
  5. print(classification_report(y_test, R_y_pred, target_names=target_names, zero_division=0))

huangapple
  • 本文由 发表于 2023年2月8日 13:25:29
  • 转载请务必保留本文链接:https://go.coder-hub.com/75381665.html
匿名

发表评论

匿名网友

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

确定