K-近邻算法(二)

海伦约会案例

数据集可以在:Jack-Cherish的GIthub上下载,数据格式是这样的:

刚刚在百度的时候,看见了这本书的英文原文,居然是免费的!!!
地址:《Machine Learning in Action》
在上图中,结果分三类:不喜欢的人、魅力一般的人、极具魅力的人
海伦希望自己的约会对象,周一到周五是魅力一般的人,周末是极具魅力的人。
故而我们的分类软件,就需要根据她收集的这些数据,将相亲对象归类。

K-近邻算法步骤

①收集数据:这里就是上面的文本
②准备数据:使用Python解析我们的文本文件
③分析数据:使用功能Matplotlib画二维扩散图
④训练算法:不适用与k-近邻算法
⑤测试算法:使用上面的数据,部分作为测试样本
⑥使用算法:输入一些特征数据以判断对方是否是自己喜欢的类型

准备数据

也就是将文本文件中的数据,处理成我们需要的格式的数据。
前一个案例中,我们的数据分两个部分:数据样本、数据样本对应标签
这里,我们还是这样分。

下面涉及的Numpy方法
  1. zeros函数,返回来一个给定形状和类型的用0填充的数组
    案例:numpy.zeros
    ①只指定长度
    如:a = np.zeros(5), 创建的是一维数组,数据类型是浮点型
    结果:[ 0. 0. 0. 0. 0.]
    ②指定长度和数据类型
    如:a = np.zeros(5, dtype=int),创建一维数组,数据类型指定为整形
    结果:[0 0 0 0 0]
    ③创建多维数组,不指定数据类型
    如:a = np.zeros([1,3]) # 创建一个一行三列的矩阵,默认数据类型是浮点型
    结果:[[ 0. 0. 0.]]
    ④创建多维数组,指定数据类型int
    如:a = np.zeros([1,3], dtype=int)
    结果:[[0 0 0]]

准备数据的代码如下:

import numpy as np

# 创建数据集
def createDataset(filename):
    # 打开文件
    file = open(filename, mode='r', encoding='utf-8')
    # 读取数据
    datalines = file.readlines()
    # 根据数据的行数,创建对应行数和特征值列数的矩阵
    returnMat = np.zeros((len(datalines), 3)) # 3个特征值,对应三列
    index = 0
    classLabelVector = []
    # 每行读取,填装进矩阵returnMat
    for line in datalines:
        line = line.strip() # 去除首位两端的空格
        listFromLine = line.split('\t')
        returnMat[index:index+1] = listFromLine[0:3] # [index:index+1]只放该index行数据
        classLabelVector.append(listFromLine[-1])  # 我这里存放文本标签
        index = index + 1
    return returnMat, classLabelVector


if __name__ == '__main__':
    filename = "datingTestSet.txt"
    returnMat, classLabelVector = createDataset(filename)
    print(returnMat)
    print(classLabelVector)

测试一下:

分析数据

使用功能Matplotlib画二维扩散图,也即是数据的可视化。
这里简单使用,找到官方文档

Matplotlib

Matplotlib是一个Python 2D绘图库,下面就实用 Matplotlib 创建散点图。


《Machine Learning in Action》


   Reprint policy


《K-近邻算法(二)》 by 无涯明月 is licensed under a Creative Commons Attribution 4.0 International License
 Previous
研究生记事本 研究生记事本
日迹记事本(研二暑假的尾巴) ::selection{background:#000;color:white;font-weight:bolder;} ::-moz-selection{background
Next 
K-近邻算法(一) K-近邻算法(一)
简介作为本博客的第一篇机器学习的博文,还是比较老套的谈谈“什么是机器学习”在回答这个问题之前,不妨看看在使用机器学习算法开发应用程序的流程:①收集数据②准备输入数据(可理解为处理数据格式)③分析输入数据(确保数据集中没有无效数据)④训练算法
  TOC