在上一小节,我们大概了解了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. Google Translate寻找之旅

    须知 网站:https://translate.google.de/ TK对应入口函数:teanslate_m_zh_CN文件/vu函数 TKK对应文件:/index页面,直接搜索TKK值即可 Goo ...

  2. 打败算法 —— 删除链表的倒数第n个结点

    本文参考 出自LeetCode上的题库 -- 删除链表的倒数第n个结点,官方的双指针解法没有完全符合"只遍历一遍链表"的要求,本文给出另一种双指针解法 https://leetco ...

  3. 什么是arduino及.arduino分类

    关于什么是arduino没有什么可说的,想要接触arduino多多少少的都会对arduino有一定的理解,我认为,arduino应该算是一个连接硬件与软件的平台,通过他,你可以将你的想法以代码的形式呈 ...

  4. C++ | 动多态的发生时机

    探究动多态的发生时机 有了虚函数和虚函数表为动多态提供支持,从而可以实现C++语言的动多态.那么,问题又来了. 动多态的发生时机是什么? 或者说,动多态发生有哪些条件与限制呢? 下面让我们一起来探究动 ...

  5. Anaconda 怎么安装cv2

    Anaconda run python程序的时候,如果有import cv2, 但是遇到报错的时候, 可以考虑在anaconda 中安装opencv, 安装过程非常简单. 什么是opencv , op ...

  6. C# Tutorial for Frontend Developer

    1.Basic Hello World Console output -> console.log Console.WriteLine("Hello World!"); Va ...

  7. Web存储之LocalStorage初探

    Web存储之LocalStorage初探 HTML5的发布和定稿为前端界带来巨大的变化,新增的API和特性给业务带来了更多可能性,让用户体验拥有了更可能的丰富. · HTML Geolocation ...

  8. 移动端城市定位,城市区域代码adcode

    使用高德定位API : AMap.Map('iCenter') AMap.CitySearch() 先在高德开放平台注册申请定位权限的key. 网站:高德开放平台 在需要定位的页面引入有定位key的s ...

  9. H5新增API

    H5新增API 选择器 querySelector()和querySelectorAll(),参数都是css选择器,前者返回符合条件的第一个匹配的元素,如果没有则返回Null,后者返回符合筛选条件的所 ...

  10. 【uniapp 开发】手绘签名组件

    代码如下: <template> <view class="content"> <button type="primary" @t ...