机器学习实战第二章----KNN

  1. tile的使用方法

    tile(A,n)的功能是把A数组重复n次(可以在列方向,也可以在行方向)

  2. argsort()函数

    argsort()函数返回的是数组中值从大到小的索引值

  3. dict.get()函数

    语法:dict.get(key, default=None)

    key----字典中要查找的键

    default----如果指定的简直不存在时,返回该默认值

  4. add_subplot()基础用法
    import matplotlib.pyplot as plt
    from numpy import *
    fig = plt.figure()
    ax = fig.add_subplot(349)
    ax.plot(x,y)

    将画布分成三行四列,在第九个分区画图

from numpy import *
from os import listdir
import operator

def createDataSet():
    group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
    labels = [‘A‘, ‘A‘, ‘B‘, ‘B‘]
    return group, labels

# 对数据进行分类
def classify0(inX, dataSet, labels, k):
    dataSetSize = dataSet.shape[0]          #shape[0]获取第一维的数目
    diffMat = tile(inX, (dataSetSize, 1)) - dataSet       # tile??????
    sqDiffMat = diffMat**2
    # 求差的平方和
    sqDistance = sqDiffMat.sum(axis=1)        #axis=1???????sum函数默认是axis=0列元素相加,axis=1是一行的元素求和
    #  求标准差
    distances = sqDistance**0.5
    # 距离排序
    sortDistIndicies = distances.argsort()    #argsort函数返回的是数组值从小到大的索引值
    # 定义元字典
    classCount = {}
    for i in range(k):
        # 获得前k个元素的标签
        voteIlabel = labels[sortDistIndicies[i]]
        # 计算前k个数据标签出现的次数
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1           #dict.get()???????????
    sortedClassCount = sorted(classCount.items(),key = operator.itemgetter(1), reverse=True)
    return sortedClassCount[0][0]

# 读取文本文件数据
def file2matrix(filename):
    fr = open(filename)
    lines = fr.readlines()
    num_lines = len(lines)
    train_matrix = zeros((num_lines, 3))
    label_vector = []
    index = 0
    for line in lines:
        line = line.strip()
        line_list = line.split(‘\t‘)
        train_matrix[index, :] = line_list[0:3]        # 获取列表的前0,1,2列
        label_vector.append(int(line_list[-1]))       # 获取列表的最后一列
        index += 1
    return train_matrix, label_vector                 # add_subplot????????????????

#归一化函数
def autoNorm(dataSet):
    minVals = dataSet.min(0)
    maxVals = dataSet.max(0)
    ranges = maxVals - minVals
    # normDataSet = zeros(shape(dataSet))
    m = dataSet.shape[0]
    normDataSet = dataSet - tile(minVals, (m, 1))      # minVals在列上重复一次(本身),在行上重复m次,从而形成m*3的向量
    normDataSet = normDataSet/tile(ranges, (m, 1))
    return normDataSet, ranges, minVals       # 归一化后的数据, 极差范围, 最小值

# 分类器测试函数
def datingClassTest():
    hoRatio = 0.10      #测试集比例
    datingDataMat, datingLabels = file2matrix(‘datingTestSet2.txt‘)
    normMat, ranges, minVals = autoNorm(datingDataMat)
    m = normMat.shape[0]
    numTestVecs = int(m*hoRatio)
    errcount = 0.0
    for i in range(numTestVecs):
        classifierResult = classify0(normMat[i, :], normMat[numTestVecs:m, :], datingLabels[numTestVecs:m], 2)
        print("the classifier came back with :%d ,the real answer is :%d" % (classifierResult, datingLabels[i]))
        if(classifierResult != datingLabels[i]):
            errcount += 1.0
        print("the total error rate is: %f" %(errcount/float(numTestVecs)))

# 手写字符文件转换成向量
def img2vector(filename):
    returnVect = zeros((1, 1024))
    fr = open(filename)
    for i in range(32):
        lineStr = fr.readline()
        for j in range(32):
            returnVect[0, 32*i+j] = int(lineStr[j])
    return returnVect

# 手写字符识别测试
def handwritingClassTest():
    hwlabels = []           # 定义手写字符标签
    trainingFileList = listdir(‘digits/trainingDigits‘)
    m = len(trainingFileList)
    trainingMat = zeros((m, 1024))
    for i in range(m):
        fileNameStr = trainingFileList[i]
        fileStr = fileNameStr.split(‘.‘)[0]
        classNumStr = fileStr.split(‘_‘)[0]
        hwlabels.append(classNumStr)
        # 把文件变成向量并赋值到trainingMat
        trainingMat[i, :] = img2vector(‘digits/trainingDigits/%s‘ % fileNameStr)
    testFileList = listdir(‘digits/testDigits‘)
    errcount = 0.0
    mTest = len(testFileList)
    for i in range(mTest):
        fileNameStr = testFileList[i]
        fileStr = fileNameStr.split(‘.‘)[0]
        classNumStr = int(fileStr.split(‘_‘)[0])
        vectorUnderTest = img2vector(‘digits/testDigits/%s‘ % fileNameStr)
        classifierResult = classify0(vectorUnderTest, trainingMat, hwlabels, 3)
        print(‘the classifier came back with : %d, the real answer is %d‘ % (int(classifierResult), classNumStr))
        if(int(classifierResult) != int(classNumStr)):
            errcount += 1
    print(‘\nthe total number of errors is %d‘ % errcount)
    print(‘\nthe total error rate is: %f‘ % float(errcount/mTest))

原文地址:https://www.cnblogs.com/myblog1993/p/8886459.html

时间: 2024-08-27 22:31:49

机器学习实战第二章----KNN的相关文章

机器学习实战-第二章代码+注释-KNN

#-*- coding:utf-8 -*- #https://blog.csdn.net/fenfenmiao/article/details/52165472 from numpy import * #科学计算包 import operator #运算符模块 import matplotlib import matplotlib.pyplot as plt #matplotlib.pyplot是一些命令行风格函数的集合 from os import listdir #列出给定目录的文件名 de

机器学习实战——第二章

k-近邻算法(kNN):测量不同特征值之间的距离方法进行分类. kNN的工作原理:存在一个样本数据集合(训练样本集),并且样本集中每个数据都存在标签,输入没有标签的新数据后,将新数据的每个特征与样本集数据对应的特征进行比较,然后算法提取样本集中特征最相似数据的分类标签.一般来说,只选择样本数据集中前k个最相似的数据. 伪代码: 1)计算已知类别数据集中的点与当前点之间的距离: 2)按照距离递增次序排序: 3)选取与当前点距离最小的k个点: 4)确定前k个点所在类别的出现频率: 5)返回前k个点出

机器学习实战——第二章之改进约会网站的配对效果

三种类型:不喜欢的-1,魅力一般的-2,极具魅力的-3. 样本特征:每年获得的飞行常客里程数,玩视频游戏所耗时间百分比,每周消费的冰淇淋公升数. 1 from numpy import * 2 import matplotlib 3 import matplotlib.pyplot as plt 4 5 ''' 6 输入文本文件名字符串,输出训练样本矩阵和类标签向量 7 ''' 8 def file2matrix(filename): 9 fr = open(filename) 10 array

《The Django Book》实战--第二章--动态网页基础

这章演示了一些最基本的Django开发动态网页的实例,由于版本不一样,我用的是Django 1.,6.3,有些地方按书上的做是不行的,所以又改了一些,写出来让大家参考. 这是一个用python写的一个显示当前时间的网页. 1.开始一个项目. 在命令行中(指定要保存项目代码的盘或文件夹下)输入 python ...\django-admin.py startproject djangobook  (虽然在环境变量Path中加入了django-admin.py的地址,但是在前面还是要加上路径名,不知

.NET Core IdentityServer4实战 第二章-OpenID Connect添加用户认证

原文:.NET Core IdentityServer4实战 第二章-OpenID Connect添加用户认证 内容:本文带大家使用IdentityServer4进行使用OpenID Connect添加用户认证 作者:zara(张子浩) 欢迎分享,但需在文章鲜明处留下原文地址. 在这一篇文章中我们希望使用OpenID Connect这种方式来验证我们的MVC程序(需要有IdentityServer4),我们首先需要干什么呢?那就是搞一个UI,这样非常美观既可以看到我们的身份验证效果,那么Iden

机器学习实战笔记——基于KNN算法的手写识别系统

本文主要利用k-近邻分类器实现手写识别系统,训练数据集大约2000个样本,每个数字大约有200个样本,每个样本保存在一个txt文件中,手写体图像本身是32X32的二值图像,如下图所示: 首先,我们需要将图像格式化处理为一个向量,把一个32X32的二进制图像矩阵通过img2vector()函数转换为1X1024的向量: def img2vector(filename): returnVect = zeros((1,1024)) fr = open(filename) for i in range(

机器学习实战笔记——利用KNN算法改进约会网站的配对效果

一.案例背景 我的朋友海伦一直使用在线约会网站寻找合适自己的约会对象.尽管约会网站会推荐不同的人选,但她并不是喜欢每一个人.经过一番总结,她发现曾交往过三种类型的人: (1)不喜欢的人: (2)魅力一般的人: (3)极具魅力的人: 尽管发现了上述规律,但海伦依然无法将约会网站推荐的匹配对象归入恰当的分类,她觉得可以在周一到周五约会那些魅力一般的人,而周末则更喜欢与那些极具魅力的人为伴.海伦希望我们的分类软件可以更好地帮助她将匹配对象划分到确切的分类中.此外,海伦还收集了一些约会网站未曾记录的数据

《机器学习》第二章 概念学习和一般到特殊序

2.1.简介 布尔函数一般形式:F(b1, b2, ..., bn),其中 bi的定义域为{0,1},F的值域为{0, 1}. 在一般的定 义域上的,取值在 {0, 1} 中的函数也叫做布尔值函数概念学习定义中的布尔函数指定就这个,主要是 规定学习的问题目标是布尔的,反应在上面的样本中,就是Yes或者No.目标函数的形式如下: f: X->{0,1} 概念学习:是指从有关某个布尔函数的输入输出训练样例中推断出该布尔函数.[很明显概念学习属于 监督学习的分类问题] 另外一种定义:给定一样例集合以及

机器学习实战——第一章

分类:将实例数据划分到合适的分类中.目标变量是离散型. 回归:预测数值型数据.目标变量是连续型的数值. 监督学习:必须知道预测什么,即目标变量的分类信息.目标变量是机器学习算法的预测结果. 开发机器学习应用程序的步骤:1)收集数据:2)准备输入数据:3)分析输入数据:4)训练算法:5)测试算法:6)使用算法. 1 from numpy import * #将numpy函数库中的所有模块引入当前命名空间 2 random.rand(4,4) #构造4*4的随机数组array 3 randMat =