Python机器学习之KNN分类算法
KNN(K-Nearest Neighbors)是一种基本的分类算法,它的基本思想是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
KNN算法流程
KNN算法的流程如下:
- 计算测试样本与训练样本之间的距离;
- 选取距离最近的k个训练样本;
- 统计k个训练样本中各个类别出现的次数;
- 将测试样本归为出现次数最多的类别。
KNN算法实现
以下是Python实现KNN算法的示例代码:
import numpy as np
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 = []
for x in X:
distances = np.sqrt(np.sum((self.X_train - x) ** 2, axis=1))
indices = np.argsort(distances)[:self.k]
labels = self.y_train[indices]
y_pred.append(np.bincount(labels).argmax())
return y_pred
上述代码中,定义了一个KNN类,包括k值、训练数据集和训练标签。fit函数接受训练数据集X和训练标签y作为参数,将其保存为类的属性。predict函数接受测试数据集X作为参数,计算测试样本与训练样本之间的距离,选取距离最近的k个训练样本,统计k个训练样本中各个类别出现的次数,将测试样本归为出现次数最多的类别。
示例说明
以下是两个示例,说明如何使用KNN算法进行分类。
示例1
使用KNN算法对鸢尾花数据集进行分类。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from knn import KNN
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 划分训练集和测试集
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(f"准确率:{accuracy}")
输出结果:
准确率:1.0
示例2
使用KNN算法对手写数字数据集进行分类。
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from knn import KNN
# 加载数据集
digits = load_digits()
X = digits.data
y = digits.target
# 划分训练集和测试集
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(f"准确率:{accuracy}")
输出结果:
准确率:0.9833333333333333
总结
本文介绍了Python实现KNN分类算法的示例代码,包括KNN算法的流程和实现。KNN算法是一种基本的分类算法,适用于小型数据集和简单的分类问题。在实际应用中,需要根据实际情况选择合适的k值和距离度量方法,以获得更好的性能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python机器学习之KNN分类算法 - Python技术站