【机器学习系列】之纯python及sklearn实现kNN

作者:張張張張
github地址:https://github.com/zhanghekai
【转载请注明出处,谢谢!】

【机器学习系列】之k近邻(kNN)
【机器学习系列之】纯python及sklearn实现kNN

一、纯python实现kNN Brute-Force法

kNN项目案例:优化约会网站的配对效果

项目概述
拉克丝使用约会网站寻找约会对象,经过一段时间之后,她发现曾交往过三种类型的人:

  • 不喜欢的人
  • 魅力一般的人
  • 极具魅力的人

她希望:

  1. 工作日与魅力一般的人约会
  2. 周末与极具魅力的人约会
  3. 不喜欢的人则直接排除掉

现在她收集到了一些约会网站未曾记录的数据信息,这更有助于匹配对象的归类。拉克丝约会的对象主要包含以下3种特征:

  • 每年获得的飞行常客里程数
  • 玩视频游戏所耗时间百分比
  • 每周消费的冰淇淋公升数

文本文件数据格式如下,完整数据集可在我的github中找到。
40920 8.326976 0.953952 3 14488 7.153469 1.673904 2 26052 1.441871 0.805124 1 75136 13.147394      0.428964 1 38344 1.669788 0.134296 1 40920 \qquad8.326976\qquad 0.953952\qquad 3\\ 14488\qquad 7.153469\qquad 1.673904\qquad 2\\ 26052\qquad 1.441871\qquad 0.805124\qquad 1\\ 75136\qquad 13.147394\quad\;\; 0.428964\qquad 1\\ 38344\qquad 1.669788\qquad 0.134296\qquad 1 409208.3269760.9539523144887.1534691.6739042260521.4418710.80512417513613.1473940.4289641383441.6697880.1342961

导入需要用到的包

import numpy as np
import matplotlib.pyplot as plt
import operator
from os import listdir
from collections import Counter

数据处理:将文本记录转换为 NumPy 的解析程序
\quad 输入: 数据文件路径

\quad 输出: 数据矩阵 returnMat 和对应的类别 classLabelVector

def file2matrix(filename):
    fr = open(filename)
    # 获得文件中的数据行的行数
    numberOfLines = len(fr.readlines())
    # 生成对应的空矩阵
    # 例如:zeros(2,3)就是生成一个 2*3的矩阵,各个位置上全是 0 
    returnMat = np.zeros((numberOfLines, 3))  
    classLabelVector = []  
    
    fr = open(filename)
    index = 0
    for line in fr.readlines():
        line = line.strip()
        # 以 '\t' 切割字符串
        listFromLine = line.split('\t')
        # 每列的属性数据
        returnMat[index, :] = listFromLine[0:3]
        # 每列的类别数据,就是 label 标签数据
        classLabelVector.append(int(listFromLine[-1]))
        index += 1
    # 返回数据矩阵returnMat和对应的类别classLabelVector
    return returnMat, classLabelVector

将数据归一化
归一化是一个让权重变为统一的过程,归一化特征值,消除特征之间量级不同导致的影响。

归一化定义: 我们是这样认为的,归一化就是要把你需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。首先归一化是为了后面数据处理的方便,其次是保正程序运行时收敛加快。

归一化的几种方法
1.线性函数转换:
y = x − M i n V a l u e M a x V a l u e − M i n V a l u e y=\frac{x-MinValue}{MaxValue-MinValue} y=

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值