分析K近邻算法的错误率
数据: UCI数据库1中sonar和Iris数据
一、原代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris, load_breast_cancer # 注意:load_sonar_data不是sklearn的一部分,这里用load_breast_cancer作为示例
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

def load_iris_data():
iris = load_iris()
X = iris.data
y = iris.target
return train_test_split(X, y, test_size=0.3, random_state=42)

def load_sonar_data():
sonar = load_breast_cancer()
X = sonar.data
y = sonar.target
return train_test_split(X, y, test_size=0.3, random_state=42)

分析KNN分类器的错误率

def analyze_knn_error_rate(X_train, X_test, y_train, y_test, k):
knn = KNeighborsClassifier(n_neighbors=k)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
error_rate = 1 - accuracy_score(y_test, y_pred)
return error_rate

计算准确率

def calculate_accuracy(X_train, X_test, y_train, y_test, k):
knn = KNeighborsClassifier(n_neighbors=k)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
return accuracy

if name == “main”:
# 加载数据集
X_train_iris, X_test_iris, y_train_iris, y_test_iris = load_iris_data()
X_train_sonar, X_test_sonar, y_train_sonar, y_test_sonar = load_sonar_data()

# K值范围
k_values = range(1, 21)

# Iris数据集
error_rates_iris = [analyze_knn_error_rate(X_train_iris, X_test_iris, y_train_iris, y_test_iris, k) for k in
                    k_values]
accuracies_iris = [calculate_accuracy(X_train_iris, X_test_iris, y_train_iris, y_test_iris, k) for k in k_values]

# Sonar数据集
error_rates_sonar = [analyze_knn_error_rate(X_train_sonar, X_test_sonar, y_train_sonar, y_test_sonar, k) for k in
                     k_values]
accuracies_sonar = [calculate_accuracy(X_train_sonar, X_test_sonar, y_train_sonar, y_test_sonar, k) for k in
                    k_values]

# 绘制Iris数据集的错误率和准确率曲线
plt.figure(figsize=(12, 6))
plt.subpl

ot(1, 2, 2)
plt.plot(k_values, error_rates_sonar, label=‘Error Rate’)
plt.plot(k_values, accuracies_sonar, label=‘Accuracy’)
plt.xlabel(‘K Value’)
plt.ylabel(‘Rate’)
plt.title(‘Sonar (Breast Cancer) Dataset: Error Rate and Accuracy vs K Value’)
plt.legend()
plt.grid(True)

plt.tight_layout()
plt.show()

二、结果展示
在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐