机器学习入门-----knn算法简单理解

机器学习

首先介绍一下什么是机器学习,机器学习就是⽤⼤量数据进⾏训练,获取到⼀个数据模型,预测就是应⽤训练的模型,来解决⼀个未知的 问题。就像我们人学习一样,⽤⼤量模拟题作为数据进⾏训练,获得的模型就是解题的⽅法。⾼考就是应⽤你训练获取的模 型,检测你的模型是不是可以解决未知的问题

机器学习的步骤

  1. 确定与问题相关的数据(明确输⼊)
  2. 收集与问题相关的数据 (数据准备,学)
  3. 分析预测结果的类型 (分类,回归,是判断题还是应⽤题)
  4. 根据预测结果的类型,选择⼀个合适的算法,找到输⼊和输出之间的关系
  5. ⽤这个算法(套路)去解决新的问题市⾯上的很多机器学习相关的

feature和label

⾃变量和因变量
feature,⾃变量(输⼊)
label,因变量(输出)
label=f(feature)

分类和回归

  • 分类: classfication, 数据结果往往是离散的,根据你的学习努⼒情况,判断是否能够通过考试;根据email的内容,判断是否是垃圾邮件
  • 回归:regression , 数据结果往往是连续的,基于⻋的品牌,年代,型号,预测⻋的价值(500RMB~500000RMB); 基于每天的卡路⾥摄⼊量和运动量,预测⼀周后的体重(48KG〜80KG);基于树的直径,预测树的年龄(0~500岁)

机器学习步骤注意事项

  1. 输入输出,就是自变量和因变量,对应feature和label
  2. 数据集必须是规范、格式统一的,方便计算机程序处理
  3. 分类的问题答案是有限个,可以理解成选择题和判断题,回归的问题,答案不能用简单的分类来描述
  4. 确定feature和label之间的关系,有无数的算法,每种算法都有自己的优缺点
  5. 根据预测的情况,我们可能需要重新调整算法和生成的模型

knn算法

这里介绍机器学习最简单的算法—knn算法,knn算法全称为k-nearest neighbor,最近k个邻居算法

knn算法的原理就是当预测一个新的数据x时,通过判断距离他最近的k的点是什么类型来判断x是什么类型

距离的计算
这里距离计算用的就是欧式距离

二维平面中两点之间的距离
在这里插入图片描述

三维平面中两点之间的距离在这里插入图片描述
n维平面中两点之间距离
在这里插入图片描述
数据归一化
比如⻢云有100000000元钱,你有1块钱 ,⻢云⾝⾼1⽶6,你⾝⾼1⽶8
数字的单位不同,带来距离的影响需要调整,因此需要数据归一化
在这里插入图片描述

代码表示

def minmax(input): 
	return (input- np.min(input.T,axis=1)) /(np.max(input.T,axis=1)- np.min(input.T,axis=1))

数据标准化
数据均匀分布⽤归⼀化⽐较合适,数据如果是⾮均匀的离散分布,⼀定要⽤标准化。

在这里插入图片描述代码表示:

def standration(input): 
	return (input- np.mean(input.T,axis=1)) /(np.std(input.T,axis=1))

k值的选择

knn算法最重要的也就是k值的选择,k值的不同,影响着最后结果的不同,k值的选取跟数据集的⼤⼩和离散程度有密切的关系, 经验表明,如果数据量⾜够⼤, k的值为数据集⼤⼩开平⽅是⽐较理想的k值
在这里插入图片描述





下面给出一个例子:给出一组数据表示男生的月薪和女生对其是否喜欢,比如8000,0代表男生月薪8000,女生不喜欢;18000,1男生月薪18000,女生喜欢;44000,0,男生月薪44000,女生不喜欢,通过knn算法进行训练,最后给出男生的月薪,预测女生是否喜欢。


下边是完整代码

  • feature就是输入,也就是男生月薪
  • label就是输出,也就是女生是否喜欢
  • 这里预测男生月薪14000,女生是否喜欢
  • 这里距离的计算为feature-predictPerson,输入值和预测值之间的差异
  • 这里k选取3,将feature-predictPerson的差值从小到大排序,通过前三个输出的结果即可预测男生月薪14000,女生喜欢
import numpy as np
#准备数据
data=np.array([
    [8000,0],
    [12000,1],
    [13000,1],
    [15000,1],
    [18000,1],
    [25000,0],
    [40000,0],
    [44000,0],
    [3000,0]
])

#计算要预测的人的薪资 最接近的几个人的情况
#一个人月薪14000,女生是否喜欢
feature=data[:,0:1]
label=data[:,1:2]       #0不喜欢  1喜欢

#创建一个新的候选人  工资14000
predictPerson=np.array([14000])

#计算候选人工资 14000与历史数据工资之间的差异
feature-predictPerson

#对差额数据取绝对值
dis=np.abs(feature-predictPerson)
#[[ 6000]
# [ 2000]
# [ 1000]
# [ 1000]
# [ 4000]
# [11000]
# [26000]
# [30000]
# [11000]]

#对差额绝对值排序,找到差额最小的三个人所在的位置
dis1=np.argsort(dis,axis=0)     #axis=0从上到下排序

#排序后的是二维数组,可以进行降维
dis2=dis1.reshape(1,-1)     #1行  -1不管多少元素
print(dis2)
#[[2 3 1 4 0 5 8 6 7]]

index=dis2[0]
print(index)
#[2 3 1 4 0 5 8 6 7]

#查看最接近的前三个人的情况
print(label[index[0:3]])
#[[1]
# [1]
# [1]]
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值