k-NN 算法可以说是最简单的机器学习算法, 构建模型只需要保存训练数据集即可. 对新数据点做出预测, 算法会在训练数据集中找到最近的数据点, 也就是它的 "最近邻".k-NN 可以用于指纹匹配.
监督机器学习问题主要有 2 种, 即分类 (classification) 和回归(regression).
分类问题的目标是预测类别标签, 这些标签来自预定义的可选列表. 回归任务的目标是预测一个连续值. 区分分类任务和回归任务的一个简单方法就是: 输出是否具有某种连续性.
通过 scikit-learn 应用 k 近邻分类算法步骤如下:
1.1 导入需要使用的库
- import numpy as np
- import pandas as pd
- import mglearn
- import matplotlib.pyplot as plt
- from sklearn.model_selection import train_test_split
1.2 生成数据
X ,y = mglearn.datasets.make_forge()
这里的 X,y 都是 numpy 数组, 其中 X 是一个 26*2 的二维数组, 代表样本点数据, y 是一维数组, 代表对应样本点所属的分类.
image.PNG
1.3 拆分数据集
scikit-learn 中的 train_test_split 函数可以打乱数据集并进行拆分, 这个函数将 75% 的行数据及对应标签作为训练集, 剩下 25% 作为作为测试集.
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
train_test_split 函数先利用伪随机数生成器将数据打乱, 确保测试集中包含所有类别的数据, 为了确保多次运行同一函数能够得到相同的输出, 我们利用 random_state 参数指定随机数生成器种子.
train_test_split 函数的输出为 X_train,X_test,y_train,y_test, 它们都为 numpy 数组.
1.4 构建模型
k 邻近分类算法是在 scikit-learn 的 neighbors 模块的 KNeighborsClassifier 类中实现的, 需要将这个类实例化为一个对象, 然后才能使用这个模型. KNeighborsClassifier 最重要的参数就是邻居的个数 n_neighbors.
- from sklearn.neighbors import KNeighborsClassifier
- clf = KNeighborsClassifier(n_neighbors=3)
想要基于训练集来构建模型, 需要调用 KNeighborsClassifier 实例化的对象的 fit 方法, 输入参数为 X_train 和 y_train, 二者均为 numpy 数组, 前者包含训练数据, 后者包含响应的训练标签.
clf.fit(X_train, y_train)
1.5 做出预测
调用 KNeighborsClassifier 实例化的对象的 predict 方法来进行预测. 对测试集中的每个测试点, 都要计算它在训练集的最邻近, 然后找出其中出现次数最多的类别.
print("Test set predictions:{}".format(clf.predict(X_test)))
1.6 模型评估
为了评估模型泛化能力的好坏, 可以对测试数据和测试标签调用 score 方法:
print("Test set accuracy:{:.2f}".format(clf.score(X_test, y_test)))
2. k 近邻回归
用于回归的 k 近邻算法在 scikit-learn 的 neighbors 模块的 KNeighborsRegressor 类中实现. 其用法与 KNeighborsClassifier 类似:
- import numpy as np
- import pandas as pd
- import mglearn
- import matplotlib.pyplot as plt
- from sklearn.model_selection import train_test_split
- from sklearn.neighbors import KNeighborsRegressor
- X, y = mglearn.datasets.make_wave(n_samples=40)
- # 将 wave 数据集分为数据集和训练集
- X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
- # 模型实例化, 邻居数设置为 3
- reg = KNeighborsRegressor(n_neighbors=3)
- # 利用训练数据和训练目标值来拟合模型
- reg.fit(X_train, y_train)
- # 对测试集数据进行预测
- print("Test set predictions:\n{}".format(reg.predict(X_test)))
- # 对模型进行评估
- print("Test set R^2:{.:2f}".format(reg.score(X_test, y_test)))
来源: http://www.jianshu.com/p/6293d65442d2