KNN(K-Nearest Neighbor)算法是机器学习算法中最基础、最简单的算法之一。它既能用于分类,也能用于回归。KNN通过测量不同特征值之间的距离来进行分类。
下面做一个简单的自写(根据距离的平方和):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
#随机生成数据集
from sklearn.datasets import make_blobs
x, y = data3 = make_blobs(n_samples=100, #100行数据
cluster_std=[0.2,0.4,0.3], #数据集标准差
centers=[[0,0],[-1,2],[1,1]],#中心点
random_state=2) #随机数种子
dataset = pd.DataFrame(x,columns=["x1","x2"])
dataset.insert(2,"y",y)
绘制散点图
dataset.plot.scatter("x1","x2",c="x2",cmap = "spring")
给定一个测试点p(x,y),我们可以计算出p点与图中所有点的距离的平方值,从而判断出y值。
def knn_16_snow(dataset,p,k):
#计算出所有点与测试点距离的平方和
square = np.power(dataset.iloc[:,:-1]-p,2).sum(axis = 1)
y_dsquare = pd.DataFrame({"square":square,"y":dataset.iloc[:,-1]})
#取前k个y值的第一个众数
res = y_dsquare.sort_values(by = "square").iloc[:k,-1].mode().values[0]
return res
以上仅供个人学习和简单参考。需要计算和实现更复杂的功能还需使用sklearn中的KNeighborsClassifier.