kNN-准备数据
在上一小节,我们大概了解了kNN算法的基本原理,现在我们要进行数据的处理
本小节所用数据集来自[机器学习实战]:Machine Learning in Action (manning.com)
下载数据集后,将datingTestSet2.txt和datingTestSet放在本程序同一文件夹下
首先阅读程序清单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中,这时需要:
- 上述数据是1000*4,所以需要有一个1000*4的ndarray
- 将刚刚得到的content_arr分开,把回车与换行去掉
- 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-准备数据的更多相关文章
- 使用KNN对MNIST数据集进行实验
由于KNN的计算量太大,还没有使用KD-tree进行优化,所以对于60000训练集,10000测试集的数据计算比较慢.这里只是想测试观察一下KNN的效果而已,不调参. K选择之前看过貌似最好不要超过2 ...
- 机器学习(2) - KNN识别MNIST
代码 https://github.com/s055523/MNISTTensorFlowSharp 数据的获得 数据可以由http://yann.lecun.com/exdb/mnist/下载.之后 ...
- K-临近算法(KNN)
K-临近算法(KNN) K nearest neighbour 1.k-近邻算法原理 简单地说,K-近邻算法采用测量不同特征值之间的距离方法进行分类. 优点:精度高.对异常值不敏感.无数据输入假定. ...
- 【转载】K-NN算法 学习总结
声明:作者:会心一击 出处:http://www.cnblogs.com/lijingchn/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接, ...
- Python实现knn
#coding:utf-8 import numpy as np import operator import os def classify0(inX, dataSet, labels, k): d ...
- 机器学习(一)之KNN算法
knn算法原理 ①.计算机将计算所有的点和该点的距离 ②.选出最近的k个点 ③.比较在选择的几个点中那个类的个数多就将该点分到那个类中 KNN算法的特点: knn算法的优点:精度高,对异常值不敏感,无 ...
- 机器学习经典算法具体解释及Python实现--K近邻(KNN)算法
(一)KNN依旧是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习全部算法中理论最简单.最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值 ...
- knn 算法 k个相近邻居
# 一个最基本的例子 #样本数据的封装 feature = [[170,70,42],[166,56,39],[188,90,44],[165,88,40],[170,66,40],[176,80,4 ...
- 机器学习之近邻算法模型(KNN)
1..导引 如何进行电影分类 众所周知,电影可以按照题材分类,然而题材本身是如何定义的?由谁来判定某部电影属于哪 个题材?也就是说同一题材的电影具有哪些公共特征?这些都是在进行电影分类时必须要考虑的问 ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数011,ocr,字符识别
<zw版·Halcon-delphi系列原创教程> Halcon分类函数011,ocr,字符识别 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“p ...
随机推荐
- OGNL(Object-Graph Navigation Language)使用
OGNL表达式:https://www.jianshu.com/p/6bc6752d11f4 Apache OGNL:http://commons.apache.org/proper/commons- ...
- 打败算法 —— 环形链表 II
本文参考 出自LeetCode上的题库 -- 环形链表II,哈希表和快慢指针两种解法都需要O(n)的时间,但快慢指针仅占用O(1)的空间 https://leetcode-cn.com/problem ...
- stm32CubeMX+keil5好用还是stm32CubeID好用
cubemx是图形配置软件, 可以节省往常配置IO口的时间, cubemx主推hal库, 它是生成keil工程的工具 cubemx生成的工程可以用keilv5编程软件来编辑... 用Cube mx定义 ...
- 如何更愉快地使用em —— 别说你懂CSS相对单位
前段时间试译了Keith J.Grant的CSS好书<CSS in Depth>,其中的第二章<Working with relative units>,书中对relative ...
- 细说Web API中的Blob
在一般的Web开发中,很少会用到Blob,但Blob可以满足一些场景下的特殊需求.Blob,Binary Large Object的缩写,代表二进制类型的大对象.Blob的概念在一些数据库中有使用到, ...
- IMWebConf 2017 官网彩蛋解谜
前言 IMWebConf 2017 ←这是官网 然后看到了这个: 所以就试了下,作为一个前端菜鸟,发现通关还挺简单的,不过每个方面的知识都涉及到一点,所以在这里总结一下. 下面进入正题. 第 0 关 ...
- 活字格发布新版本,插件公开,引领Web开发新潮流
日前,活字格Web 应用生成平台发布V4.0版本,首次公开插件机制,强大的扩展性和系统集成能力,引起业内瞩目. 活字格是由西安葡萄城自主研发的 Web 应用生成平台,提供易用的类Excel可视化设计器 ...
- python-图的字典表示
图的字典表示.输入多行字符串,每行表示一个顶点和该顶点相连的边及长度,输出顶点数,边数,边的总长度.比如上图0点表示:{'O':{'A':2,'B':5,'C':4}}.用eval函数处理输入,eva ...
- 用Python爬取斗鱼网站的一个小案例
思路解析: 1.我们需要明确爬取数据的目的:为了按热度查看主播的在线观看人数 2.浏览网页源代码,查看我们需要的数据的定位标签 3.在代码中发送一个http请求,获取到网页返回的html(需要注意的是 ...
- 各种类型的Dialog
下面是几种对话框的效果 图一: 图二: 图三: 图四: 图五: 图六: 图七: 图1效果:该效果是当按返回按钮时弹出一个提示,来确保无误操作,采用常见的对话框样式. 代码: 创建对话框方法dialog ...