Python实现KNN邻近算法的完整攻略
KNN算法是一种常用的机器学习算法,用于分类和回归问题。本文将详细讲解Python实现KNN算法的整个攻略,包括算法原理实现过程和示例。
算法原理
KNN算法的基本思想是通过计算待分类样本与训练集中所有样本距离,选取距离近的k样本,根据这k个样本的类别进行投票,将待分类样归票数多的类别。在回归中,KNN算法的基本思想是通过计算待预测样本与训练集中所有样本的距离,选取距离最近的k个样本,根据这k个样本的值进行平均或加权平均,得到待预测样本的测值。
具体来说算法分为以下几个骤:
- 计待分类样本与训练集中所有样本的距离。
- 选取距离最近的k个样本。
- 根据这k个样本的类别进行投票,将待分类样本归为数最多的类别。
- 在回归问题中,根据这k个样本的值进行平均或加权平均,得到待预测样本的预测值。
实现过程
以下是使用Python实现KNN算法的示例代码:
import numpy as np
from collections import Counter
def euclidean_distance(x1, x2):
return np.sqrt(np.sum((x1 - x2)**2))
class KNN:
def __init__(self, k=3):
self.k = k
def fit(self, X, y):
self.X_train = X
self.y_train = y
def predict(self, X):
y_pred = [self._predict(x) for x in X]
return np.array(y_pred)
def _predict(self, x):
distances = [euclidean_distance(x, x_train) for x_train in self.X_train]
k_indices = np.argsort(distances)[:self.k]
k_nearest_labels = [self.y_train[i] for i in k_indices]
most_common = Counter(k_nearest_labels).most_common(1)
return most_common[0][0]
上述代码中,首先定义了一个euclidean_distance函数,用于计算欧几里得距离。然后定义了一个KNN类,包含fit和predict两个方法。在fit中,将训练集和y保存为类属性。在predict方法中,遍历待分类样本X,调用_predict方法进行预测。在_predict方法中,计算待分类样本与训练集中所有样本的距离,选取距离最近的k个样本,根据这k个样本的类别投票,将待分类样本归为票数最多的类别。
示例1
以下是使用KNN算法进行分类的示例代码:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import StandardScaler
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 数据预处理
scaler = StandardScaler()
X = scaler.fit_transform(X)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练模型
knn = KNN(k=3)
knn.fit(X_train, y_train)
# 预测测试集
y_pred = knn.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy:', accuracy)
上述代码中,首先使用load_iris函数加载鸢尾数据集。然后使用StandardScaler对数据进行预处理,将数据进行标准化。接着使用train_test_split函数将数据集划分为训练集和测试集。然后使用KNN类训练模型,并使用predict方法预测测试集。最后使用accuracy_score计算准确率。
示例2
是使用KNN算法进行回归的示例代码:
import as np
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import StandardScaler
# 加载数据集
boston = load_boston()
X = boston.data
y = boston.target
# 数据预处理
scaler = StandardScaler()
X = scaler.fit_transform(X)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练模型
knn = KNN(k=3)
knn.fit(X_train, y_train)
# 预测测试集
y_pred = knn.predict(X_test)
# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print('MSE:', mse)
上述代码中,首先使用load_boston函数加载波士顿房价数据集。然后使用StandardScaler对数据进行预处理,将数据进行标准化。接着使用train_test_split函数将数据集划分为训练集和测试集。然后使用KNN类训练模型,并使用predict方法测测试集。最后使用mean_squared_error函数计算均方差。
总结
本文详细讲解了Python实现KNN算法的整个攻略,包括算法原理、实现过程和示例。KNN算法是一种常用机器学习算法,可以用于分类和回归问题。在Python中,可以使用numpy和collections模块实现KNN算法,实现程上述所示。通过示例看到KNN算法在实际应用中的灵活性和实用性。