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

机器学习之利用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近邻算法时, 注意要分清楚样本集, 样本特征,样本标签

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

相关推荐

钓鱼达人在民间,自制路亚假饵“亮片”
365bet亚洲官网

钓鱼达人在民间,自制路亚假饵“亮片”

08-01 👁️ 581
琵琶 (中国)
365娱乐平台网址

琵琶 (中国)

06-28 👁️ 6594
拉班·扫马
365直播网APP下载

拉班·扫马

06-30 👁️ 9226