机器学习的敲门砖: kNN算法
1. 前言
欢迎来到机器学习的世界!作为一名经验丰富的开发者,我将带你学习一种简单而强大的机器学习算法——kNN(k-Nearest Neighbors)算法。kNN是一种基本的分类和回归算法,它通过比较待预测样本与已知样本的特征相似度,根据最近邻居的标签进行分类或预测。
在本文中,我们将按照以下步骤来学习kNN算法:
- 数据准备:收集、清洗和准备用于训练和测试的数据;
- 特征提取:从数据中选择最重要的特征;
- 特征标准化:对特征进行标准化处理,以消除不同特征之间的量纲差异;
- 计算距离:选择合适的距离度量方法,计算待预测样本与已知样本之间的距离;
- 选择最近邻居:根据距离排序,选择与待预测样本最相似的k个邻居;
- 进行分类或回归:根据最近邻居的标签进行分类或预测。
接下来,我们将逐步讲解每个步骤的具体操作和对应的代码。
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))
# 计算待