K最近邻(KNN)算法

一. 算法介绍

KNN算法中文名称叫做K近邻算法,是众多机器学习算法里面最基础入门的算法。它是一个有监督的机器学习算法,既可以用来做分类任务也可以用来做回归任务。KNN算法的核心思想是未标记的样本的类别,由距离他最近的K个邻居投票来决定。

二. 算法流程

通过理解算法思想,可以将其简化为“找邻居+投票”。K近邻法使用的模型,实际上是特征空间的划分。模型由三个基本要素决定:

  • 距离度量
  • k值
  • 分类决策规则

其中两个实例点之间的距离反映了相似程度。一般来说使用欧氏距离来计算。

梳理kNN算法流程

  1. 计算测试对象到训练集中每个对象的距离
  2. 将训练集样本数据按照距离升序排序
  3. 选取与当前测试对象最近的k的训练对象,作为该测试对象的邻居
  4. 统计这k个邻居的类别频率
  5. k个邻居里频率最高的类别,即为测试对象的类别

三. 分类算法样例

首先我们有组已知的训练数据:其中横轴是肿块大小,纵轴是发现时间。每个病人的肿块大小和发病时间构成了二维平面特征中的一个点。对于每个点,明确是恶性肿瘤、良性肿瘤。现在有一个病例X的肿块大小和发现时间,需要分类该病例是否恶性肿瘤
在这里插入图片描述

代码实现

from sklearn.neighbors import KNeighborsClassifier
import numpy as np
from sklearn.metrics import accuracy_score

# 读取数据 X, y
raw_data_X = [[3.393533211, 2.331273381],
              [3.110073483, 1.781539638],
              [1.343853454, 3.368312451],
              [3.582294121, 4.679917921],
              [2.280362211, 2.866990212],
              [7.423436752, 4.685324231],
              [5.745231231, 3.532131321],
              [9.172112222, 2.511113104],
              [7.927841231, 3.421455345],
              [7.939831414, 0.791631213]
              ]
#0为恶性,1为良性
raw_data_y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]
# 设置训练组
X_train = np.array(raw_data_X)
y_train = np.array(raw_data_y)

# 把数据分成训练数据和测试数据
raw_test_x = [[8.90933607318,3.365731514] ]
raw_test_y = [0]
X_test = np.array(raw_test_x)
y_test = np.array(raw_test_y)

# 构建KNN模型, K值为3、 并做训练
clf = KNeighborsClassifier(n_neighbors=6)
clf.fit(X_train, y_train)
print("预测值:%.3f" % (np.count_nonzero(clf.predict(X_test))))

# 计算准确率
correct = np.count_nonzero((clf.predict(X_test) == y_test) == True)
accuracy_score(y_test, clf.predict(X_test))
print("准确率(Accuracy) is: %.3f" % (correct / len(X_test)))
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值