机器学习之利用KNN近邻算法预测数据

前半部分是简介, 后半部分是案例



KNN近邻算法: 
简单说就是采用测量不同特征值之间的距离方法进行分类(k-Nearest Neighbor,KNN)

优点: 精度高、对异常值不敏感、无数据输入假定 
缺点:时间复杂度高、空间复杂度高

  • 1、当样本不平衡时,比如一个类的样本容量很大,其他类的样本容量很小,输入一个样本的时候,K个临近值中大多数都是大样本容量的那个类,这时可能就会导致分类错误。改进方法是对K临近点进行加权,也就是距离近的点的权值大,距离远的点权值小。
  • 2、计算量较大,每个待分类的样本都要计算它到全部点的距离,根据距离排序才能求得K个临近点,改进方法是:先对已知样本点进行剪辑,事先去除对分类作用不大的样本。

适用数据范围:

  • 标称型(离散型):标称型目标变量的结果只在有限目标集中取值,如真与假(标称型目标变量主要用于分类)
  • 数值型:数值型目标变量则可以从无限的数值集合中取值,如0.100,42.001等 (数值型目标变量主要用于回归分析)

工作原理:

  • 训练样本集—>存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输人没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前K个最相似的数据,这就是K-近邻算法中K的出处,通常K是不大于20的整数。 最后 ,选择K个最相似数据中出现次数最多的分类,作为新数据的分类。
  • 电影类别KNN分析(图片来源于网络)

  • 欧氏距离(Euclidean Distance,欧几里得度量)

  • 计算过程图

  • 案例 
    代码都是在 jupyter notebook 中写的
 1 import numpy as np
 2 import pandas as pd
 3 from pandas import Series,DataFrame
 4 import matplotlib.pyplot as plt
 5 %matplotlib inline
 6 # 以上导入的包都是自己习惯性导入, 因为随时都可能会用到, 就每次先把这些都导入了
 7
 8 #这儿是我自己写了一个excel表格,方便快速的读取数据, 演示使用, 就不用series或者dataframe写了
 9 film = pd.read_excel(‘films.xlsx‘,sheet_name=1)
10 #输入film后出现表格
11 fil

 1 # 电影的样本特征
 2 train=film[[‘动作镜头‘,‘接吻镜头‘]]
 3 # 样本标签,即要预测的标签,这儿要预测新数据是属于什么类别的电影
 4 target=film[‘电影类别‘]
 5 # 创建机器学习模型,需要导入
 6 from sklearn.neighbors import KNeighborsClassifier
 7 # 创建对象, 这儿的数据因为是离散型, 所以使用KNeighborsClassifier,
 8 knn=KNeighborsClassifier()
 9 #  对knn模型进行训练, 传入样本特征 和 样本标签
10 # 构建函数原型、构建损失函数、求损失函数最优解
11 knn.fit(train,target)
12 knn

当输入knn后出现如下代码, 表示训练完成

1 KNeighborsClassifier(algorithm=‘auto‘, leaf_size=30, metric=‘minkowski‘,
2            metric_params=None, n_jobs=1, n_neighbors=5, p=2,
3            weights=‘uniform‘)
1 # 这儿随意写3个样本数据,需要按照样本数据的维度来写
2 cat=np.array([[5,19],[21,6],[23,24]])
3 # cat=np.array([[21,4]])  也可以写1个
4 # 使用predict函数对数据进行预测
5 knn.predict(cat)

运行会出现下图:

预测完成 ! 成功判断出3个新样本的归属类别 
接下来也可以绘制图, 直观的查看近邻情况

1 # scatter画出来的是散点图, 取数据使用 .values,二维数组中, 一维全部取出, 二维取0,表示出来就是[:,0]
2 plt.scatter(train.values[:,0],train.values[:,1])
3 # scatter可以有一些属性, 下边的color可以自定义显示的颜色
4 plt.scatter(cat[:,0],cat[:,1],color=‘red‘)

效果图为:

在使用KNN近邻算法时, 注意要分清楚样本集, 样本特征,样本标签



技术交流可以留言评论哦 ! 虚心学习, 不忘初心, 共同奋进 !

原文地址:https://www.cnblogs.com/wylycool/p/9275576.html

时间: 2024-08-01 18:24:48

机器学习之利用KNN近邻算法预测数据的相关文章

机器学习-KNN近邻算法

参看文章: <机器学习-周志华> <机器学习实战-Peter Harrington> <统计学习方法-李航> 算法介绍: k近邻学习是一种常用的监督学习方法,其工作机制如下,给定测试样本,基于某种距离度量(曼哈顿距离.欧氏距离.切比雪夫距离.Lp距离.Minkowski距离)找出训练集中与其最靠近的k个训练样本,然后基于这k个“邻居”的信息来进行预测. argmax(f(x))是使得 f(x)取得最大值所对应的变量点x 投票法: 在分类任务中使用,选择k个样本出现最多的

机器学习实战笔记-K近邻算法2(改进约会网站的配对效果)

案例二.:使用K-近邻算法改进约会网站的配对效果 案例分析: 海伦收集的数据集有三类特征,分别是每年获得的飞行常客里程数.玩视频游戏所耗时间百分比. 每周消费的冰淇淋公升数.我们需要将新数据的每个新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签.一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数.最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类. 流程:在约会网站上使用K

机器学习随笔01 - k近邻算法

算法名称: k近邻算法 (kNN: k-Nearest Neighbor) 问题提出: 根据已有对象的归类数据,给新对象(事物)归类. 核心思想: 将对象分解为特征,因为对象的特征决定了事对象的分类. 度量每个特征的程度,将其数字化. 所有特征值构成元组,作为该对象的坐标. 计算待检测对象和所有已知对象的距离,选择距离最接近的k个已知对象 (k近邻中的k来源于此). 这k个对象中出现次数最多的分类就是待检测对象的分类. 重要前提: 需要有一批已经正确归类了的对象存在.也就是通常说的训练数据. 重

机器学习实战笔记-K近邻算法1(分类动作片与爱情片)

K近邻算法采用测量不同特征值之间的距离方法进行分类 K近邻算法特点: 优点:精度高.对异常值不敏感.无数据输入假定. 缺点:计算复杂度高.空间复杂度高. 适用数据范围:数值型和标称型. K近邻算法原理: 存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系.输人没有标签的新数据后,将新数据的每个特征与样本集中数据对应的 特征进行比较,然后算法提取样本集中特征最相似数据(最近 邻)的分类标签.一般来说,我们只选择样本数据集中前k个最

《机器学习实战》-k近邻算法

目录 K-近邻算法 k-近邻算法概述 解析和导入数据 使用 Python 导入数据 实施 kNN 分类算法 测试分类器 使用 k-近邻算法改进约会网站的配对效果 收集数据 准备数据:使用 Python 解析文本文件 分析数据:使用 Matplotlib 画二维散点图 准备数据:归一化数值 测试算法:验证分类器 使用算法:构建完整可用系统 手写识别系统 准备数据 测试算法 使用算法:构建完整可用系统 总结 K-近邻算法 k-近邻分类算法概述 使用 k-近邻算法改进约会网站的配对效果 手写识别系统

机器学习实战笔记--k近邻算法

1 #encoding:utf-8 2 from numpy import * 3 import operator 4 import matplotlib 5 import matplotlib.pyplot as plt 6 7 from os import listdir 8 9 def makePhoto(returnMat,classLabelVector): #创建散点图 10 fig = plt.figure() 11 ax = fig.add_subplot(111) #例如参数为

kNN#约会网站预测数据

1 #约会网站预测数据 2 def classifyPersion(): 3 resultList = ['not at all','in small doses','in large doses'] 4 #input()函数允许用户输入文本行命令并返回用户所输入的命令 5 percentTats = float(input("percentage of time spent playing video games?")) 6 ffMiles = float(input("f

初识分类算法(1)------knn近邻算法

例子:某人想要由以下1000行训练样本数据构建一个分类器,将数据分成3类(喜欢,一般,不喜欢).样本数据的特征有主要有3个, A:每年获得的飞行常客里程数 B:玩视频游戏所耗时间百分比 C:每周消费冰淇淋公升数 1. 数据的读取 1 filename='D://machine_learn//Ch02//datingTestSet2.txt' 2 def file2matrix(filename): 3 fr = open(filename) 4 a=fr.readlines() 5 number

机器学习(利用adaboost元算法提高分类性能)

元算法背后的思路是对其他算法进行组合的一种方式,A from numpy import * def loadSimpData(): datMat = matrix([[ 1. , 2.1], [ 2. , 1.1], [ 1.3, 1. ], [ 1. , 1. ], [ 2. , 1. ]]) classLabels = [1.0, 1.0, -1.0, -1.0, 1.0] return datMat,classLabels def loadDataSet(fileName): #gener