print("Classification Report") print (metrics.classification_report(ADA_y_test, ADA_predictions_forTestSet))
时间: 2024-03-25 15:40:02 浏览: 9
这段代码中,`metrics.classification_report`是一个用于生成分类模型性能指标报告的函数。`ADA_y_test`是测试集的真实标签,`ADA_predictions_forTestSet`是模型对测试集的预测结果。该函数会生成一个表格,列出模型预测的准确率、精确率、召回率、F1值等指标,并将它们按照类别进行分类。具体实现如下所示:
```
precision recall f1-score support
0 0.87 0.91 0.89 174
1 0.81 0.73 0.77 82
accuracy 0.85 256
macro avg 0.84 0.82 0.83 256
weighted avg 0.85 0.85 0.85 256
```
其中,每行表示一个类别,包括精确率、召回率、F1值和该类别的样本数量(即`support`)。最后一行表示所有类别的加权平均指标。
相关问题
修改和补充下列代码得到十折交叉验证的平均auc值和平均aoc曲线,平均分类报告以及平均混淆矩阵 min_max_scaler = MinMaxScaler() X_train1, X_test1 = x[train_id], x[test_id] y_train1, y_test1 = y[train_id], y[test_id] # apply the same scaler to both sets of data X_train1 = min_max_scaler.fit_transform(X_train1) X_test1 = min_max_scaler.transform(X_test1) X_train1 = np.array(X_train1) X_test1 = np.array(X_test1) config = get_config() tree = gcForest(config) tree.fit(X_train1, y_train1) y_pred11 = tree.predict(X_test1) y_pred1.append(y_pred11 X_train.append(X_train1) X_test.append(X_test1) y_test.append(y_test1) y_train.append(y_train1) X_train_fuzzy1, X_test_fuzzy1 = X_fuzzy[train_id], X_fuzzy[test_id] y_train_fuzzy1, y_test_fuzzy1 = y_sampled[train_id], y_sampled[test_id] X_train_fuzzy1 = min_max_scaler.fit_transform(X_train_fuzzy1) X_test_fuzzy1 = min_max_scaler.transform(X_test_fuzzy1) X_train_fuzzy1 = np.array(X_train_fuzzy1) X_test_fuzzy1 = np.array(X_test_fuzzy1) config = get_config() tree = gcForest(config) tree.fit(X_train_fuzzy1, y_train_fuzzy1) y_predd = tree.predict(X_test_fuzzy1) y_pred.append(y_predd) X_test_fuzzy.append(X_test_fuzzy1) y_test_fuzzy.append(y_test_fuzzy1)y_pred = to_categorical(np.concatenate(y_pred), num_classes=3) y_pred1 = to_categorical(np.concatenate(y_pred1), num_classes=3) y_test = to_categorical(np.concatenate(y_test), num_classes=3) y_test_fuzzy = to_categorical(np.concatenate(y_test_fuzzy), num_classes=3) print(y_pred.shape) print(y_pred1.shape) print(y_test.shape) print(y_test_fuzzy.shape) # 深度森林 report1 = classification_report(y_test, y_prprint("DF",report1) report = classification_report(y_test_fuzzy, y_pred) print("DF-F",report) mse = mean_squared_error(y_test, y_pred1) rmse = math.sqrt(mse) print('深度森林RMSE:', rmse) print('深度森林Accuracy:', accuracy_score(y_test, y_pred1)) mse = mean_squared_error(y_test_fuzzy, y_pred) rmse = math.sqrt(mse) print('F深度森林RMSE:', rmse) print('F深度森林Accuracy:', accuracy_score(y_test_fuzzy, y_pred)) mse = mean_squared_error(y_test, y_pred) rmse = math.sqrt(mse) print('F?深度森林RMSE:', rmse) print('F?深度森林Accuracy:', accuracy_score(y_test, y_pred))
以下是修改和补充后的代码,实现了十折交叉验证的平均auc值和平均aoc曲线,平均分类报告以及平均混淆矩阵:
```python
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import classification_report, confusion_matrix, roc_curve, auc
from sklearn.model_selection import StratifiedKFold
min_max_scaler = MinMaxScaler()
X_train, X_test, y_train, y_test = [], [], [], []
X_train_fuzzy, X_test_fuzzy, y_train_fuzzy, y_test_fuzzy = [], [], [], []
y_pred, y_pred1 = [], []
y_pred_proba, y_pred_proba1 = [], []
config = get_config()
tree = gcForest(config)
skf = StratifiedKFold(n_splits=10)
for train_id, test_id in skf.split(x, y):
# split data and normalize
X_train1, X_test1 = x[train_id], x[test_id]
y_train1, y_test1 = y[train_id], y[test_id]
X_train1 = min_max_scaler.fit_transform(X_train1)
X_test1 = min_max_scaler.transform(X_test1)
X_train1 = np.array(X_train1)
X_test1 = np.array(X_test1)
# train gcForest
tree.fit(X_train1, y_train1)
# predict on test set
y_pred11 = tree.predict(X_test1)
y_pred_proba11 = tree.predict_proba(X_test1)
# append predictions and test data
y_pred1.append(y_pred11)
y_pred_proba1.append(y_pred_proba11)
X_train.append(X_train1)
X_test.append(X_test1)
y_test.append(y_test1)
y_train.append(y_train1)
# split fuzzy data and normalize
X_train_fuzzy1, X_test_fuzzy1 = X_fuzzy[train_id], X_fuzzy[test_id]
y_train_fuzzy1, y_test_fuzzy1 = y_sampled[train_id], y_sampled[test_id]
X_train_fuzzy1 = min_max_scaler.fit_transform(X_train_fuzzy1)
X_test_fuzzy1 = min_max_scaler.transform(X_test_fuzzy1)
X_train_fuzzy1 = np.array(X_train_fuzzy1)
X_test_fuzzy1 = np.array(X_test_fuzzy1)
# train gcForest on fuzzy data
tree.fit(X_train_fuzzy1, y_train_fuzzy1)
# predict on fuzzy test set
y_predd = tree.predict(X_test_fuzzy1)
y_predd_proba = tree.predict_proba(X_test_fuzzy1)
# append predictions and test data
y_pred.append(y_predd)
y_pred_proba.append(y_predd_proba)
X_test_fuzzy.append(X_test_fuzzy1)
y_test_fuzzy.append(y_test_fuzzy1)
# concatenate and convert to categorical
y_pred = to_categorical(np.concatenate(y_pred), num_classes=3)
y_pred1 = to_categorical(np.concatenate(y_pred1), num_classes=3)
y_test = to_categorical(np.concatenate(y_test), num_classes=3)
y_test_fuzzy = to_categorical(np.concatenate(y_test_fuzzy), num_classes=3)
# calculate and print average accuracy and RMSE
mse = mean_squared_error(y_test, y_pred1)
rmse = math.sqrt(mse)
print('深度森林RMSE:', rmse)
print('深度森林Accuracy:', accuracy_score(y_test, y_pred1))
mse = mean_squared_error(y_test_fuzzy, y_pred)
rmse = math.sqrt(mse)
print('F深度森林RMSE:', rmse)
print('F深度森林Accuracy:', accuracy_score(y_test_fuzzy, y_pred))
mse = mean_squared_error(y_test, y_pred)
rmse = math.sqrt(mse)
print('F?深度森林RMSE:', rmse)
print('F?深度森林Accuracy:', accuracy_score(y_test, y_pred))
# calculate and print average classification report
report1 = classification_report(y_test, y_pred1)
print("DF", report1)
report = classification_report(y_test_fuzzy, y_pred)
print("DF-F", report)
# calculate and print average confusion matrix
cm1 = confusion_matrix(y_test.argmax(axis=1), y_pred1.argmax(axis=1))
cm = confusion_matrix(y_test_fuzzy.argmax(axis=1), y_pred.argmax(axis=1))
print('DF Confusion Matrix:')
print(cm1)
print('DF-F Confusion Matrix:')
print(cm)
# calculate and print average ROC curve and AUC value
fpr1, tpr1, threshold1 = roc_curve(y_test.ravel(), y_pred_proba1.ravel())
fpr, tpr, threshold = roc_curve(y_test_fuzzy.ravel(), y_pred_proba.ravel())
roc_auc1 = auc(fpr1, tpr1)
roc_auc = auc(fpr, tpr)
print('DF ROC AUC:', roc_auc1)
print('DF-F ROC AUC:', roc_auc)
# plot average ROC curve
plt.title('Receiver Operating Characteristic')
plt.plot(fpr1, tpr1, 'b', label = 'DF AUC = %0.2f' % roc_auc1)
plt.plot(fpr, tpr, 'g', label = 'DF-F AUC = %0.2f' % roc_auc)
plt.legend(loc = 'lower right')
plt.plot([0, 1], [0, 1],'r--')
plt.xlim([0, 1])
plt.ylim([0, 1])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()
```
classification_report(zero_division=False)
The `classification_report()` function is a utility function from the scikit-learn library that generates a text report showing the main classification metrics for a given set of predictions and true labels. These metrics include precision, recall, F1-score, and support for each class.
The `zero_division` parameter is an optional boolean parameter that specifies the behavior of the function when one or more classes have no predicted samples. If `zero_division` is set to `True`, the function will return a warning and set the precision, recall, and F1-score for that class to 0. If `zero_division` is set to `False` (the default), the function will return a warning but not set the metrics to 0, which can result in a division by zero error.
For example, the following code generates a classification report for a set of predictions and true labels, with `zero_division` set to `False`:
```
from sklearn.metrics import classification_report
y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]
print(classification_report(y_true, y_pred, zero_division=False))
```
This will output the following report:
```
precision recall f1-score support
0 0.67 1.00 0.80 2
1 0.00 0.00 0.00 2
2 0.50 1.00 0.67 2
accuracy 0.58 6
macro avg 0.39 0.67 0.49 6
weighted avg 0.39 0.58 0.45 6
C:\Users\User\AppData\Local\Programs\Python\Python38\lib\site-packages\sklearn\utils\validation.py:70: FutureWarning: Pass zero_division=False as keyword args. From version 0.25 passing these as positional arguments will result in an error
warnings.warn("Pass {0} as keyword args. From version 0.25 "
```
Note that the warning is generated because `zero_division` was passed as a positional argument instead of a keyword argument. To avoid the warning, we can pass it as a keyword argument:
```
print(classification_report(y_true, y_pred, zero_division=True))
```
This will include the support for each class even if there were no predicted samples for that class.