k-nn算法(2)

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split, cross_val_predict
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_curve, auc, precision_recall_curve, confusion_matrix

# 生成模拟的二分类数据集
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)

# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 初始化逻辑回归模型
model = LogisticRegression()

# 使用交叉验证进行预测
y_pred_cv = cross_val_predict(model, X_train, y_train, cv=5)

# 计算评估指标
accuracy_cv = accuracy_score(y_train, y_pred_cv)
precision_cv = precision_score(y_train, y_pred_cv)
recall_cv = recall_score(y_train, y_pred_cv)
f1_cv = f1_score(y_train, y_pred_cv)

print("Cross-Validated Accuracy:", accuracy_cv)
print("Cross-Validated Precision:", precision_cv)
print("Cross-Validated Recall:", recall_cv)
print("Cross-Validated F1 Score:", f1_cv)

# 训练模型
model.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = model.predict(X_test)

# 计算评估指标
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)

print("\nTest Set Accuracy:", accuracy)
print("Test Set Precision:", precision)
print("Test Set Recall:", recall)
print("Test Set F1 Score:", f1)

# 计算 ROC 曲线
y_prob = model.predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = roc_curve(y_test, y_prob)
roc_auc = auc(fpr, tpr)

# 计算 PR 曲线
precision, recall, _ = precision_recall_curve(y_test, y_prob)

# 绘制 ROC 曲线
plt.figure(figsize=(8, 6))
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.legend(loc="lower right")
plt.show()

# 绘制 PR 曲线
plt.figure(figsize=(8, 6))
plt.plot(recall, precision, color='blue', lw=2, label='Precision-Recall curve')
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('Precision-Recall Curve')
plt.legend(loc="lower left")
plt.show()

# 计算并绘制混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(8, 6))
sns.heatmap(conf_matrix, annot=True, fmt="d", cmap="Blues")
plt.title("Confusion Matrix")
plt.xlabel("Predicted Label")
plt.ylabel("True Label")
plt.show()

 

以上实验要求可以分为三个主要部分:

  1. 分类模型评估指标的掌握

    • 了解常见的分类模型评估指标,例如准确率、精确率、召回率、F1值等。
    • 理解这些指标的含义以及如何计算它们,例如准确率为正确分类的样本数与总样本数的比率,精确率为真正例与所有预测为正例的样本数的比率等。
  2. ROC曲线和PR曲线的理解

    • 了解ROC曲线(Receiver Operating Characteristic Curve)和PR曲线(Precision-Recall Curve)的概念和用途。
    • 知道ROC曲线以真正例率(True Positive Rate,TPR)为纵轴,假正例率(False Positive Rate,FPR)为横轴绘制,而PR曲线以精确率(Precision)为纵轴,召回率(Recall)为横轴绘制。
    • 理解ROC曲线和PR曲线之间的差异,以及在不同场景下的适用性。
  3. 绘制不同k值下的ROC曲线并分析

    • 使用不同的k值,例如交叉验证中的不同折数,来训练模型并得到预测结果。
    • 绘制不同k值下的ROC曲线,可能是为了比较不同模型在不同数据子集上的性能。
    • 对绘制的ROC曲线进行分析,可能包括比较不同模型的性能、评估模型的稳定性等方面的内容。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值