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
目录
相关文章
|
16天前
|
机器学习/深度学习 数据采集 监控
探索机器学习:从数据到决策
【9月更文挑战第18天】在这篇文章中,我们将一起踏上一段激动人心的旅程,穿越机器学习的世界。我们将探讨如何通过收集和处理数据,利用算法的力量来预测未来的趋势,并做出更加明智的决策。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和思考方式。
|
20天前
|
机器学习/深度学习 数据采集 算法
利用未标记数据的半监督学习在模型训练中的效果评估
本文将介绍三种适用于不同类型数据和任务的半监督学习方法。我们还将在一个实际数据集上评估这些方法的性能,并与仅使用标记数据的基准进行比较。
32 8
|
2月前
|
监控 数据安全/隐私保护 异构计算
借助PAI-EAS一键部署ChatGLM,并应用LangChain集成外部数据
【8月更文挑战第8天】借助PAI-EAS一键部署ChatGLM,并应用LangChain集成外部数据
66 1
|
2月前
|
数据采集 机器学习/深度学习 算法
"揭秘数据质量自动化的秘密武器:机器学习模型如何精准捕捉数据中的‘隐形陷阱’,让你的数据分析无懈可击?"
【8月更文挑战第20天】随着大数据成为核心资源,数据质量直接影响机器学习模型的准确性和效果。传统的人工审查方法效率低且易错。本文介绍如何运用机器学习自动化评估数据质量,解决缺失值、异常值等问题,提升模型训练效率和预测准确性。通过Python和scikit-learn示例展示了异常值检测的过程,最后强调在自动化评估的同时结合人工审查的重要性。
57 2
|
2月前
|
机器学习/深度学习 JSON API
【Python奇迹】FastAPI框架大显神通:一键部署机器学习模型,让数据预测飞跃至Web舞台,震撼开启智能服务新纪元!
【8月更文挑战第16天】在数据驱动的时代,高效部署机器学习模型至关重要。FastAPI凭借其高性能与灵活性,成为搭建模型API的理想选择。本文详述了从环境准备、模型训练到使用FastAPI部署的全过程。首先,确保安装了Python及相关库(fastapi、uvicorn、scikit-learn)。接着,以线性回归为例,构建了一个预测房价的模型。通过定义FastAPI端点,实现了基于房屋大小预测价格的功能,并介绍了如何运行服务器及测试API。最终,用户可通过HTTP请求获取预测结果,极大地提升了模型的实用性和集成性。
140 1
|
2月前
|
缓存 开发者 测试技术
跨平台应用开发必备秘籍:运用 Uno Platform 打造高性能与优雅设计兼备的多平台应用,全面解析从代码共享到最佳实践的每一个细节
【8月更文挑战第31天】Uno Platform 是一种强大的工具,允许开发者使用 C# 和 XAML 构建跨平台应用。本文探讨了 Uno Platform 中实现跨平台应用的最佳实践,包括代码共享、平台特定功能、性能优化及测试等方面。通过共享代码、采用 MVVM 模式、使用条件编译指令以及优化性能,开发者可以高效构建高质量应用。Uno Platform 支持多种测试方法,确保应用在各平台上的稳定性和可靠性。这使得 Uno Platform 成为个人项目和企业应用的理想选择。
38 0
|
2月前
|
机器学习/深度学习 缓存 TensorFlow
TensorFlow 数据管道优化超重要!掌握这些关键技巧,大幅提升模型训练效率!
【8月更文挑战第31天】在机器学习领域,高效的数据处理对构建优秀模型至关重要。TensorFlow作为深度学习框架,其数据管道优化能显著提升模型训练效率。数据管道如同模型生命线,负责将原始数据转化为可理解形式。低效的数据管道会限制模型性能,即便模型架构先进。优化方法包括:合理利用数据加载与预处理功能,使用`tf.data.Dataset` API并行读取文件;使用`tf.image`进行图像数据增强;缓存数据避免重复读取,使用`cache`和`prefetch`方法提高效率。通过这些方法,可以大幅提升数据管道效率,加快模型训练速度。
34 0
|
2月前
|
机器学习/深度学习 SQL 数据采集
"解锁机器学习数据预处理新姿势!SQL,你的数据金矿挖掘神器,从清洗到转换,再到特征工程,一网打尽,让数据纯净如金,模型性能飙升!"
【8月更文挑战第31天】在机器学习项目中,数据质量至关重要,而SQL作为数据预处理的强大工具,助力数据科学家高效清洗、转换和分析数据。通过去除重复记录、处理缺失值和异常值,SQL确保数据纯净;利用数据类型转换和字符串操作,SQL重塑数据结构;通过复杂查询生成新特征,SQL提升模型性能。掌握SQL,就如同拥有了开启数据金矿的钥匙,为机器学习项目奠定坚实基础。
27 0
|
2月前
|
机器学习/深度学习 数据可视化 搜索推荐
【python机器学习】python电商数据K-Means聚类分析可视化(源码+数据集+报告)【独一无二】
【python机器学习】python电商数据K-Means聚类分析可视化(源码+数据集+报告)【独一无二】
下一篇
无影云桌面