在上一小节,我们大概了解了kNN算法的基本原理,现在我们要进行数据的处理

本小节所用数据集来自[机器学习实战]:Machine Learning in Action (manning.com)

下载数据集后,将datingTestSet2.txtdatingTestSet放在本程序同一文件夹下


首先阅读程序清单2-2,知道我们应该将datingTestSet2.txt文件中的内容进行读取,书上虽然写的是datingTestSet,但我们将这两个文件打开之后会发现,2对应的文件是将label进行处理的,而另一个没有。关于数据集处理,博主暂时只会pandas处理,这里用的numpy

读取文件

读取文件程序清单2-2直接用的open,没有close,我这里用with open语句

filename = './datingTestSet2.txt'
with open(filename,'r')as fobj:
content_arr = fobj.readlines()
print(content_arr) ['40920\t8.326976\t0.953952\t3\n', '14488\t7.153469\t1.673904\t2\n', '26052\t1.441871\t0.805124\t1\n',...]

创建空的numpy矩阵

目的是将刚刚得到的文件内容,存储到numpy中,这时需要:

  1. 上述数据是1000*4,所以需要有一个1000*4的ndarray
  2. 将刚刚得到的content_arr分开,把回车与换行去掉
  3. 1000*4并不能满足我们数据集与标记的需求,所以我们细分成1000*3的数据,和1000*1的标记
import numpy as np
filename = "./datingTestSet2.txt"
def file2matrix(filename):
# 'r'的意思是只读,fobj是file_object的缩写
with open(filename,'r')as fobj:
content_arr = fobj.readlines()
# 获取content_arr的长度
arr_len = len(content_arr)
# 构造1000*3的ndarray
dataSet = np.zeros([arr_len,3])
# 标记
labelSet = []
index = 0
for line in content_arr:
# 去掉换行
new_line = line.strip()
# 去掉制表
normal_line = new_line.split('\t')
# 这时我们再将normal_line存储进dataSet,并将最后一列存进labelSet
dataSet[index,:] = normal_line[0:3]
labelSet.append(int(normal_line[-1]))
index += 1
return dataSet,labelSet
dataSet,labelSet = file2matrix(filename)
dataSet array([[4.0920000e+04, 8.3269760e+00, 9.5395200e-01],
[1.4488000e+04, 7.1534690e+00, 1.6739040e+00],
[2.6052000e+04, 1.4418710e+00, 8.0512400e-01],
...,
[2.6575000e+04, 1.0650102e+01, 8.6662700e-01],
[4.8111000e+04, 9.1345280e+00, 7.2804500e-01],
[4.3757000e+04, 7.8826010e+00, 1.3324460e+00]])

这里dataSet[index,:] = normal_line[0:3],这样的语法没见到过,这时numpy中的数据处理方式

见下:

import numpy as np
a = np.zeros((5,6))
b = np.array([1,2,3])
print("a:\n",a)
print("b:\n",b) a:
[[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]]
b:
[1 2 3]
a[2,3:6] = b
print("a:\n",a) a:
[[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 1. 2. 3.]
[0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]]

kNN-准备数据的更多相关文章

  1. 使用KNN对MNIST数据集进行实验

    由于KNN的计算量太大,还没有使用KD-tree进行优化,所以对于60000训练集,10000测试集的数据计算比较慢.这里只是想测试观察一下KNN的效果而已,不调参. K选择之前看过貌似最好不要超过2 ...

  2. 机器学习(2) - KNN识别MNIST

    代码 https://github.com/s055523/MNISTTensorFlowSharp 数据的获得 数据可以由http://yann.lecun.com/exdb/mnist/下载.之后 ...

  3. K-临近算法(KNN)

    K-临近算法(KNN) K nearest neighbour 1.k-近邻算法原理 简单地说,K-近邻算法采用测量不同特征值之间的距离方法进行分类. 优点:精度高.对异常值不敏感.无数据输入假定. ...

  4. 【转载】K-NN算法 学习总结

    声明:作者:会心一击 出处:http://www.cnblogs.com/lijingchn/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接, ...

  5. Python实现knn

    #coding:utf-8 import numpy as np import operator import os def classify0(inX, dataSet, labels, k): d ...

  6. 机器学习(一)之KNN算法

    knn算法原理 ①.计算机将计算所有的点和该点的距离 ②.选出最近的k个点 ③.比较在选择的几个点中那个类的个数多就将该点分到那个类中 KNN算法的特点: knn算法的优点:精度高,对异常值不敏感,无 ...

  7. 机器学习经典算法具体解释及Python实现--K近邻(KNN)算法

    (一)KNN依旧是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习全部算法中理论最简单.最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值 ...

  8. knn 算法 k个相近邻居

    # 一个最基本的例子 #样本数据的封装 feature = [[170,70,42],[166,56,39],[188,90,44],[165,88,40],[170,66,40],[176,80,4 ...

  9. 机器学习之近邻算法模型(KNN)

    1..导引 如何进行电影分类 众所周知,电影可以按照题材分类,然而题材本身是如何定义的?由谁来判定某部电影属于哪 个题材?也就是说同一题材的电影具有哪些公共特征?这些都是在进行电影分类时必须要考虑的问 ...

  10. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数011,ocr,字符识别

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数011,ocr,字符识别 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“p ...

随机推荐

  1. spring-boot 注解集合

    @Configuration 用于定义配置类,可替换XML配置文件,被注解的类内部包含一个或多个@Bean注解方法.可以被AnnotationConfigApplicationContext或者Ann ...

  2. 什么是消费者驱动的合同(CDC)?

    这基本上是用于开发微服务的模式,以便它们可以被外部系统使用.当我们处理 微服务时,有一个特定的提供者构建它,并且有一个或多个使用微服务的消费者. 通常,提供程序在 XML 文档中指定接口.但在消费者驱 ...

  3. 用一个文件,实现迷你 Web 框架

    当下网络就如同空气一样在我们的周围,它以无数种方式改变着我们的生活,但要说网络的核心技术变化甚微. 随着开源文化的蓬勃发展,诞生了诸多优秀的开源 Web 框架,让我们的开发变得轻松.但同时也让我们不敢 ...

  4. CSS3渐变效果工具

    推荐一个css3渐变效果工具,觉得有帮助的可以收藏下. 工具链接 CSS3 渐变(gradients)可以让你在两个或多个指定的颜色之间显示平稳的过渡.CSS3 定义了两种类型的渐变(gradient ...

  5. python-使用函数求余弦函数的近似值

    本题要求实现一个函数,用下列公式求cos(x)近似值,精确到最后一项的绝对值小于eps(绝对值小于eps的项不要加): cos(x)=0!x0​−2!x2​+4!x4​−6!x6​+... 函数接口定 ...

  6. CCF201812-2小明放学

    题目背景 汉东省政法大学附属中学所在的光明区最近实施了名为"智慧光明"的智慧城市项目.具体到交通领域,通过"智慧光明"终端,可以看到光明区所有红绿灯此时此刻的状 ...

  7. MyEclipse如何刷新项目

    第一种:选中项目,点右键Refresh即可, 第二种:选择project->clean,选中所要编译得项目,点ok即可

  8. 移动端input输入框把页面顶起, 收起键盘页面复原不了问题

    我相信大家平时也会遇到这种问题, 移动端 input 或者 textarea获取光标, 整个页面被顶起来, 键盘收起, 页面不复原的问题 ====>>>>  我这边提供两种解决 ...

  9. Exchange统计邮箱数量

    以Exchange管理员身份登录,打开PowerShell控制台. 1.查询Exchange组织邮箱数量 键入以下命令. Get-Mailbox | Measure-Objcet 2.查询某数据库邮箱 ...

  10. Pascal的旅行

    [问题描述] 一块的nxn游戏板上填充着整数,每个方格上为一个非负整数.目标是沿着从左上角到右下角的任何合法路径行进,方格中的整数决定离开该位置的距离有多大,所有步骤必须向右或向下.请注意,0是一个死 ...