11 机器学习 - KNN简单数据分类实现

简介: 11 机器学习 - KNN简单数据分类实现

本文讲解KNN来对简单数据进行分类,数据虽然是抽象的,但其实可以映射到任意具体业务上,常见的例子:

1.根据已毕业学生各科成绩及其就业数据来预测或引导应届毕业生生就业方向


2.根据客户各属性及其购买行为,来预测新客户的购买行为

需求

计算地理位置的相似度

有以下先验数据,使用knn算法对未知类别数据分类:

属性1 属性2 类别
1.0 0.9 A
1.0 1.0 A
0.1 0.2 B
0.0 0.1 B

未知类别数据

属性1 属性2 类别
1.2 1.0 ?
0.1 0.3 ?

Python实现

首先,我们新建一个kNN.py脚本文件,文件里面包含两个函数,一个用来生成小数据集,一个实现kNN分类算法。代码如下:

#########################################
# kNN: k Nearest Neighbors
# 输入:      newInput:  (1xN)的待分类向量
#             dataSet:   (NxM)的训练数据集
#             labels:   训练数据集的类别标签向量
#             k:    近邻数 
# 输出:     可能性最大的分类标签
#########################################
from numpy import *
import operator
#创建一个数据集,包含2个类别共4个样本
def createDataSet():
  # 生成一个矩阵,每行表示一个样本
  group = array([[1.0, 0.9], [1.0, 1.0], [0.1, 0.2], [0.0, 0.1]])
  # 4个样本分别所属的类别
  labels = ['A', 'A', 'B', 'B']
  return group, labels
# KNN分类算法函数定义
def kNNClassify(newInput, dataSet, labels, k):
  numSamples = dataSet.shape[0]   # shape[0]表示行数
  ## step 1: 计算距离[
假如:
Newinput:[1,0,2]
Dataset:
[1,0,1]
[2,1,3]
[1,0,2]
计算过程即为:
1、求差
[1,0,1]       [1,0,2]
[2,1,3]   --   [1,0,2]
[1,0,2]       [1,0,2]
=
[0,0,-1]
[1,1,1]
[0,0,-1]
2、对差值平方
[0,0,1]
[1,1,1]
[0,0,1]
3、将平方后的差值累加
[1]
[3]
[1]
4、将上一步骤的值求开方,即得距离
[1]
[1.73]
[1]
]
  # tile(A, reps): 构造一个矩阵,通过A重复reps次得到
  # the following copy numSamples rows for dataSet
  diff = tile(newInput, (numSamples, 1)) - dataSet  # 按元素求差值
  squaredDiff = diff ** 2  #将差值平方
  squaredDist = sum(squaredDiff, axis = 1)   # 按行累加
  distance = squaredDist ** 0.5  #将差值平方和求开方,即得距离
  ## step 2: 对距离排序
  # argsort() 返回排序后的索引值
  sortedDistIndices = argsort(distance)
  classCount = {} # define a dictionary (can be append element)
  for i in xrange(k):
    ## step 3: 选择k个最近邻
    voteLabel = labels[sortedDistIndices[i]]
    ## step 4: 计算k个最近邻中各类别出现的次数
    # when the key voteLabel is not in dictionary classCount, get()
    # will return 0
    classCount[voteLabel] = classCount.get(voteLabel, 0) + 1
  ## step 5: 返回出现次数最多的类别标签
  maxCount = 0
  for key, value in classCount.items():
    if value > maxCount:
      maxCount = value
      maxIndex = key
  return maxIndex 

然后调用算法进行测试:

import kNN
from numpy import * 
#生成数据集和类别标签
dataSet, labels = kNN.createDataSet()
#定义一个未知类别的数据
testX = array([1.2, 1.0])
k = 3
#调用分类函数对未知数据分类
outputLabel = kNN.kNNClassify(testX, dataSet, labels, 3)
print "Your input is:", testX, "and classified to class: ", outputLabel
testX = array([0.1, 0.3])
outputLabel = kNN.kNNClassify(testX, dataSet, labels, 3)
print "Your input is:", testX, "and classified to class: ", outputLabel

这时候会输出

Your input is: [ 1.2  1.0] and classified to class:  A
Your input is: [ 0.1  0.3] and classified to class:  B
目录
相关文章
|
3月前
|
机器学习/深度学习 算法 数据挖掘
PyTabKit:比sklearn更强大的表格数据机器学习框架
PyTabKit是一个专为表格数据设计的新兴机器学习框架,集成了RealMLP等先进深度学习技术与优化的GBDT超参数配置。相比传统Scikit-Learn,PyTabKit通过元级调优的默认参数设置,在无需复杂超参调整的情况下,显著提升中大型数据集的性能表现。其简化API设计、高效训练速度和多模型集成能力,使其成为企业决策与竞赛建模的理想工具。
120 12
PyTabKit:比sklearn更强大的表格数据机器学习框架
|
6月前
|
机器学习/深度学习 数据采集 JSON
Pandas数据应用:机器学习预处理
本文介绍如何使用Pandas进行机器学习数据预处理,涵盖数据加载、缺失值处理、类型转换、标准化与归一化及分类变量编码等内容。常见问题包括文件路径错误、编码不正确、数据类型不符、缺失值处理不当等。通过代码案例详细解释每一步骤,并提供解决方案,确保数据质量,提升模型性能。
257 88
|
6月前
|
机器学习/深度学习 数据采集 算法
机器学习在生物信息学中的创新应用:解锁生物数据的奥秘
机器学习在生物信息学中的创新应用:解锁生物数据的奥秘
675 36
|
6月前
|
机器学习/深度学习 人工智能
Diff-Instruct:指导任意生成模型训练的通用框架,无需额外训练数据即可提升生成质量
Diff-Instruct 是一种从预训练扩散模型中迁移知识的通用框架,通过最小化积分Kullback-Leibler散度,指导其他生成模型的训练,提升生成性能。
193 11
Diff-Instruct:指导任意生成模型训练的通用框架,无需额外训练数据即可提升生成质量
|
4月前
|
机器学习/深度学习 传感器 数据采集
基于机器学习的数据分析:PLC采集的生产数据预测设备故障模型
本文介绍如何利用Python和Scikit-learn构建基于PLC数据的设备故障预测模型。通过实时采集温度、振动、电流等参数,进行数据预处理和特征提取,选择合适的机器学习模型(如随机森林、XGBoost),并优化模型性能。文章还分享了边缘计算部署方案及常见问题排查,强调模型预测应结合定期维护,确保系统稳定运行。
503 0
|
6月前
|
人工智能 Kubernetes Cloud Native
跨越鸿沟:PAI-DSW 支持动态数据挂载新体验
本文讲述了如何在 PAI-DSW 中集成和利用 Fluid 框架,以及通过动态挂载技术实现 OSS 等存储介质上数据集的快速接入和管理。通过案例演示,进一步展示了动态挂载功能的实际应用效果和优势。
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
模型训练数据-MinerU一款Pdf转Markdown软件
MinerU是由上海人工智能实验室OpenDataLab团队开发的开源智能数据提取工具,专长于复杂PDF文档的高效解析与提取。它能够将含有图片、公式、表格等多模态内容的PDF文档转化为Markdown格式,同时支持从网页和电子书中提取内容,显著提升了AI语料准备的效率。MinerU具备高精度的PDF模型解析工具链,能自动识别乱码,保留文档结构,并将公式转换为LaTeX格式,广泛适用于学术、财务、法律等领域。
879 4
|
8月前
|
机器学习/深度学习 数据采集 数据处理
谷歌提出视觉记忆方法,让大模型训练数据更灵活
谷歌研究人员提出了一种名为“视觉记忆”的方法,结合了深度神经网络的表示能力和数据库的灵活性。该方法将图像分类任务分为图像相似性和搜索两部分,支持灵活添加和删除数据、可解释的决策机制以及大规模数据处理能力。实验结果显示,该方法在多个数据集上取得了优异的性能,如在ImageNet上实现88.5%的top-1准确率。尽管有依赖预训练模型等限制,但视觉记忆为深度学习提供了新的思路。
139 2
|
9月前
|
机器学习/深度学习 存储 人工智能
揭秘机器学习背后的神秘力量:如何高效收集数据,让AI更懂你?
【10月更文挑战第12天】在数据驱动的时代,机器学习广泛应用,从智能推荐到自动驾驶。本文以电商平台个性化推荐系统为例,探讨数据收集方法,包括明确数据需求、选择数据来源、编写代码自动化收集、数据清洗与预处理及特征工程,最终完成数据的训练集和测试集划分,为模型训练奠定基础。
231 3
|
9月前
|
机器学习/深度学习 算法 Python
“探秘机器学习的幕后英雄:梯度下降——如何在数据的海洋中寻找那枚失落的钥匙?”
【10月更文挑战第11天】梯度下降是机器学习和深度学习中的核心优化算法,用于最小化损失函数,找到最优参数。通过计算损失函数的梯度,算法沿着负梯度方向更新参数,逐步逼近最小值。常见的变种包括批量梯度下降、随机梯度下降和小批量梯度下降,各有优缺点。示例代码展示了如何用Python和NumPy实现简单的线性回归模型训练。掌握梯度下降有助于深入理解模型优化机制。
118 2