栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

机器学习实验一

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

机器学习实验一

机器学习实验一

配置python+numpy环境

  • python下载安装

    在https://www.python.org/downloads/下载安装Python 3.9.7(由于本人在此之前已安装,便不再重复。)

  • numpy下载安装

    在 https://pypi.org/project/numpy/#files下载安装numpy,并选择对应的版本。如python版本为3.9,则选择numpy版本含“cp39”,并根据自身电脑的系统和配置做出相应的选择,我这里是Windows系统,64位,故选择了numpy-1.21.2-cp39-cp39-win_amd64.whl 。

    之后将下载好的文件复制到python安装目录下的scripts目录中。

    然后打开命令行窗口,进入python安装目录,输入以下命令:pip install numpy-1.21.2-cp39-cp39-win_amd64.whl

    若安装成功则会在下图蓝色箭头处显示Successfully installed numpy-1.21.2。(我此前安装过,故会显示numpy is already installed with the same version as the provided wheel. 即Numpy已经安装了与所提供的相同版本。)

    进入python shell开发环境输入命令:from numpy import *

    该命令将Numpy函数库中的所有模块引入当前的命名空间。输入结果如下图:

  • 测试是否正确地安装了NumPy函数库

    在Python shell 开发环境中输入命令:random.rand(4,4)
    该命令构造了一个4*4的随机数组。
    调用mat()函数可将数组转化为矩阵,输入命令:

    randMat = mat(random.rand(4,4))
    randMat.I
    

    .I操作符实现了矩阵求逆的运算,便可得到矩阵:

    接着执行命令invRandMat = randMat.I 存储逆矩阵
    之后执行命令randMat*invRandMat实现矩阵乘法,得到矩阵与其逆矩阵相乘的结果:

输入命令

myEye = randMat*invRandMat
myEye - eye(4)

得到误差值:

顺利完成上述例子,就说明已经正确地安装了NumPy函数库。

KNN算法(K-近邻算法)

简单地说,k-近邻算法采用测量不同特征值之间的距离方法进行分类。

  • 工作原理
    工作原理是:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每一特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最邻近)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数。最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。

  • KNN 开发流程
    收集数据:任何方法
    准备数据:距离计算所需要的数值,最好是结构化的数据格式
    分析数据:任何方法
    训练算法:此步骤不适用于 k-近邻算法
    测试算法:计算错误率
    使用算法:输入样本数据和结构化的输出结果,然后运行 k-近邻算法判断输入数据分类属于哪个分类,最后对计算出的分类执行后续处理

  • KNN 算法特点
    优点:精度高、对异常值不敏感、无数据输入假定
    缺点:计算复杂度高、空间复杂度高
    适用数据范围:数值型和标称型

实现手写数字识别

将下列代码输入到kNN.py文件中

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

然后在Python命令行中输入下列命令测试img2vector函数,然后与文本编辑器打开的文件进行比较:

>>> testVector = kNN.img2vector('testDigits/0_13.txt')
>>> testVector[0,0:31]
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
>>> testVector[0,31:63]
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])

导入训练数据和测试数据

def handwritingClassTest():
    hwLabels = []
    trainingFileList = listdir('trainingDigits')           #load the training set
    m = len(trainingFileList)
    trainingMat = zeros((m,1024))
    for i in range(m):
        fileNameStr = trainingFileList[i]
        fileStr = fileNameStr.split('.')[0]     #take off .txt
        classNumStr = int(fileStr.split('_')[0])
        hwLabels.append(classNumStr)
        trainingMat[i,:] = img2vector('trainingDigits/%s' % fileNameStr)
    testFileList = listdir('testDigits')        #iterate through the test set
    errorCount = 0.0
    mTest = len(testFileList)
    for i in range(mTest):
        fileNameStr = testFileList[i]
        fileStr = fileNameStr.split('.')[0]     #take off .txt
        classNumStr = int(fileStr.split('_')[0])
        vectorUnderTest = img2vector('testDigits/%s' % fileNameStr)
        classifierResult = classify0(vectorUnderTest, trainingMat, hwLabels, 3)
        print "the classifier came back with: %d, the real answer is: %d" % (classifierResult, classNumStr)
        if (classifierResult != classNumStr): errorCount += 1.0
    print "nthe total number of errors is: %d" % errorCount
    print "nthe total error rate is: %f" % (errorCount/float(mTest))

最后输入命令kNN.handwritingClassTest()测试结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/286144.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号