以下是关于“Python可视化实现KNN算法”的完整攻略:
简介
K最近邻(K-Nearest Neighbors,KNN)是一种基于实例的学习算法,它可以用于分类和回归任务。在本教程中,我们将介绍如何使用Python实现KNN算法,并使用可视化工具展示算法的分类效果。
KNN算法原理
KNN法的基本思想是:对于一个新的数据点,找到与其最近的K个数据点,然后根据这K个数据点的标签来预测新数据点的标签。KNN算法的步骤如下:
- 计算新数据点与所有训练数据点之间的距离。
- 选择距离最近的K个数据点。
- 根据这K个数据点的标签来预测新数据点的标签。
KNN算法中的距离可以使用欧几里得距离、曼哈顿距离等。
KNN算法Python实现
以下是使用Python实现KNN算法的代码:
import numpy as np
from collections import Counter
class KNN:
def __init__(self, k=5):
self.k = k
def fit(self, X, y):
self.X_train = X
self.y_train = y
def predict(self, X):
y_pred = []
for x in X:
distances = [np.sqrt(np.sum((x - x_train)**2)) for x_train in self.X_train]
k_indices = np.argsort(distances)[:self.k]
k_labels = [self.y_train[i] for i in k_indices]
most_common = Counter(k_labels).most_common(1)
y_pred.append(most_common[0][0])
return y_pred
其中,KNN类实现了KNN算法。在初始化方法中,我们定义了K值。在fit方法中,我们将训练数据集的特征和标签保存在X_train和y_train中。在predict方法中,我们使用欧几里得距离计算新数据点与所有训练数据点之间的距离,选择距离最近的K个数据点,并根据这K个数据点的标签来预测新数据点的标签。
可视化KNN算法
以下是使用Python可视化KNN算法的代码:
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# Generate dataset
X, y = make_classification(n_samples=100, n_features=2, n_redundant=0, n_informative=2, random_state=42)
# Split dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Create KNN classifier
knn = KNN(k=5)
# Train KNN classifier
knn.fit(X_train, y_train)
# Predict labels of the test data
y_pred = knn.predict(X_test)
# Calculate the accuracy of the classifier
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
# Visualize the decision boundary
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1), np.arange(y_min, y_max, 0.1))
Z = knn.predict(np.c_[xx.ravel(), yy.ravel()])
Z = np.array(Z).reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, alpha=0.8)
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('KNN Classifier')
plt.show()
在这个示例中,我们使用make_classification函数生成一个二维分类数据集,将数据集分为训练集和测试集,使用KNN类创建了一个KNN分类器,并使用fit方法来训练KNN分类器。最后,我们使用predict方法来预测测试数据的标签,并使用accuracy_score函数计算分类器准确性。我们还使用matplotlib库可视化了分类器的决策边界。
示例说明
以下是两个示例说明,展示了如何使用Python可视化KNN算法。
示例1
假设我们要使用KNN算法对Iris数据集进行分类:
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# Load Iris dataset
iris = load_iris()
X = iris.data[:, :2]
y = iris.target
# Split dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Create KNN classifier
knn = KNN(k=5)
# Train KNN classifier
knn.fit(X_train, y_train)
# Predict labels of the test data
y_pred = knn.predict(X_test)
# Calculate the accuracy of the classifier
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
# Visualize the decision boundary
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1), np.arange(y_min, y_max, 0.1))
Z = knn.predict(np.c_[xx.ravel(), yy.ravel()])
Z = np.array(Z).reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, alpha=0.8)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('KNN Classifier')
plt.show()
在这个示例中,我们使用load_iris函数加载Iris数据集,将数据集的前两个特征作为输入特征,将数据集分为训练集和测试集,使用KNN类创建了一个KNN分类器,并使用fit方法来训练KNN分类器。最后,我们使用predict方法来预测测试数据的标签,并使用accuracy_score函数计算分类器准确性。我们还使用matplotlib库可视化了分类器的决策边界。
示例2
假设我们要使用KNN算法对digits数据集进行分类:
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# Load digits dataset
digits = load_digits()
X = digits.data[:, :2]
y = digits.target
# Split dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Create KNN classifier
knn = KNN(k=5)
# Train KNN classifier
knn.fit(X_train, y_train)
# Predict labels of the test data
y_pred = knn.predict(X_test)
# Calculate the accuracy of the classifier
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
# Visualize the decision boundary
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1), np.arange(y_min, y_max, 0.1))
Z = knn.predict(np.c_[xx.ravel(), yy.ravel()])
Z = np.array(Z).reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, alpha=0.8)
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('KNN Classifier')
plt.show()
在这个示例中,我们使用load_digits函数加载digits数据集,将数据集的前两个特征作为输入特征,将数据集分为训练集和测试集,使用KNN类创建了一个KNN分类器,并使用fit方法来训练KNN分类器。最后,我们使用predict方法来预测测试数据的标签,并使用accuracy_score函数计算分类器准确性。我们还使用matplotlib库可视化了分类器的决策边界。
结论
本教程介绍了如何使用Python实现KNN算法,并使用可视化工具展示算法的分类效果。我们使用KNN类实现了KNN算法,并在predict方法中使用欧几里得距离计算新数据点与所有训练数据点之间的距离,选择距离最近的K个数据点,并根据这K个数据点的标签来预测新数据点的标签。我们还使用matplotlib库可视化了分类器的决策边界。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python可视化实现KNN算法 - Python技术站