import pandas as pd from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier import matplotlib.pyplot as plt from sklearn.metrics import roc_curve, roc_auc_score, confusion_matrix from sklearn.metrics import accuracy_score, recall_score, precision_score, f1_score

读取数据

data = pd.read_excel('C:\Users\lenovo\Desktop\数据测试\output_data1.xlsx')

标准化处理

scaler = StandardScaler() X = scaler.fit_transform(data.iloc[:, 1:].values) # 特征矩阵 y = data.iloc[:, 0].values # 标签向量

划分数据集为训练集和测试集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

定义模型

n_neighbors = 3 knn = KNeighborsClassifier(n_neighbors=n_neighbors)

训练模型

knn.fit(X_train, y_train)

存储训练集和测试集的预测结果

train_predicted = knn.predict(X_train) test_predicted = knn.predict(X_test)

计算训练集和测试集的各项指标

train_accuracy = accuracy_score(y_train, train_predicted) train_recall = recall_score(y_train, train_predicted) train_precision = precision_score(y_train, train_predicted) train_f1 = f1_score(y_train, train_predicted) train_cm = confusion_matrix(y_train, train_predicted)

test_accuracy = accuracy_score(y_test, test_predicted) test_recall = recall_score(y_test, test_predicted) test_precision = precision_score(y_test, test_predicted) test_f1 = f1_score(y_test, test_predicted) test_cm = confusion_matrix(y_test, test_predicted)

输出训练集和测试集的结果

print('Train Confusion Matrix:') print(train_cm) print('Train Accuracy: {:.2f}'.format(train_accuracy)) print('Train Recall: {:.2f}'.format(train_recall)) print('Train Precision: {:.2f}'.format(train_precision)) print('Train F1: {:.2f}'.format(train_f1))

print('Test Confusion Matrix:') print(test_cm) print('Test Accuracy: {:.2f}'.format(test_accuracy)) print('Test Recall: {:.2f}'.format(test_recall)) print('Test Precision: {:.2f}'.format(test_precision)) print('Test F1: {:.2f}'.format(test_f1))

绘制 ROC 曲线

train_predicted_prob = knn.predict_proba(X_train)[:, 1] test_predicted_prob = knn.predict_proba(X_test)[:, 1] train_fpr, train_tpr, train_thresholds = roc_curve(y_train, train_predicted_prob) test_fpr, test_tpr, test_thresholds = roc_curve(y_test, test_predicted_prob) train_roc_auc = roc_auc_score(y_train, train_predicted_prob) test_roc_auc = roc_auc_score(y_test, test_predicted_prob)

plt.plot(train_fpr, train_tpr, label='Train ROC curve (area = %0.2f)' % train_roc_auc) plt.plot(test_fpr, test_tpr, label='Test ROC curve (area = %0.2f)' % test_roc_auc) plt.plot([0, 1], [0, 1], 'k--') plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('ROC Curve') plt.legend(loc='lower right') plt.show()

KNN 模型实现分类任务:代码示例及性能评估

原文地址: https://www.cveoy.top/t/topic/nK6P 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录