自写一个简单knn

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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值