机器学习的敲门砖: kNN算法

1. 前言

欢迎来到机器学习的世界!作为一名经验丰富的开发者,我将带你学习一种简单而强大的机器学习算法——kNN(k-Nearest Neighbors)算法。kNN是一种基本的分类和回归算法,它通过比较待预测样本与已知样本的特征相似度,根据最近邻居的标签进行分类或预测。

在本文中,我们将按照以下步骤来学习kNN算法:

  1. 数据准备:收集、清洗和准备用于训练和测试的数据;
  2. 特征提取:从数据中选择最重要的特征;
  3. 特征标准化:对特征进行标准化处理,以消除不同特征之间的量纲差异;
  4. 计算距离:选择合适的距离度量方法,计算待预测样本与已知样本之间的距离;
  5. 选择最近邻居:根据距离排序,选择与待预测样本最相似的k个邻居;
  6. 进行分类或回归:根据最近邻居的标签进行分类或预测。

接下来,我们将逐步讲解每个步骤的具体操作和对应的代码。

2. 数据准备

首先,我们需要收集并准备用于训练和测试的数据。数据应该包含已知样本的特征和对应的标签。一般来说,数据集应该被分为两部分:训练集和测试集。训练集用于构建kNN模型,测试集用于评估模型的性能。

# 代码示例:加载数据集
import pandas as pd

# 从文件中加载数据集
data = pd.read_csv('dataset.csv')

# 分离特征和标签
X = data.iloc[:, :-1]  # 特征
y = data.iloc[:, -1]   # 标签

3. 特征提取

在kNN算法中,选择合适的特征对结果至关重要。良好的特征应该能够准确地描述样本的特点。特征提取可以通过一些统计或算法技术来完成,例如主成分分析(PCA)或信息增益。

# 代码示例:特征提取(以PCA为例)
from sklearn.decomposition import PCA

# 创建PCA对象
pca = PCA(n_components=2)

# 用训练集拟合PCA模型
X_train_pca = pca.fit_transform(X_train)

# 对测试集进行PCA变换
X_test_pca = pca.transform(X_test)

4. 特征标准化

不同特征往往有不同的量纲和分布范围,为了消除这些差异,我们需要对特征进行标准化处理。常见的标准化方法包括Z-score标准化和Min-Max标准化。

# 代码示例:特征标准化(以Z-score标准化为例)
from sklearn.preprocessing import StandardScaler

# 创建标准化对象
scaler = StandardScaler()

# 用训练集拟合标准化模型
X_train_scaled = scaler.fit_transform(X_train)

# 对测试集进行标准化处理
X_test_scaled = scaler.transform(X_test)

5. 计算距离

kNN算法通过计算待预测样本与已知样本之间的距离来判断相似度。常用的距离度量方法包括欧氏距离、曼哈顿距离和余弦相似度。

# 代码示例:计算欧氏距离
import numpy as np

def euclidean_distance(x1, x2):
    return np.sqrt(np.sum((x1 - x2)**2))

# 计算待