IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 机器学习实验二——k-近邻算法实例(书上) -> 正文阅读

[人工智能]机器学习实验二——k-近邻算法实例(书上)

一.k-近邻算法电影类别分类

参照:博客一

实现代码

import numpy as np
import operator


def knn(trainData, testData, labels, k):
    # 计算训练样本的行数
    rowSize = trainData.shape[0]
    # 计算训练样本和测试样本的差值
    diff = np.tile(testData, (rowSize, 1)) - trainData
    # 计算差值的平方和
    sqrDiff = diff ** 2
    sqrDiffSum = sqrDiff.sum(axis=1)
    # 计算距离
    distances = sqrDiffSum ** 0.5
    # 对所得的距离从低到高进行排序
    sortDistance = distances.argsort()

    count = {}

    for i in range(k):
        vote = labels[sortDistance[i]]
        count[vote] = count.get(vote, 0) + 1
    # 对类别出现的频数从高到低进行排序
    sortCount = sorted(count.items(), key=operator.itemgetter(1), reverse=True)

    # 返回出现频数最高的类别
    return sortCount[0][0]
trainData = np.array([[5, 8], [4, 1], [3, 3], [4, 4]])
labels = ['动作片', '动作片', '爱情片', '爱情片']
testData = [4, 2]
X = knn(trainData, testData, labels, 3)
print(X)

实验结果

二.手写识别系统

首先得有两个数据文件夹测试集和训练集(testDigits和trainingDigits里的数据要不一样),里面存放不同写法的数字。训练集中的数据作为训练样本 ,之后在测试集中检验?

需要识别的数字已经用图像处理软件处理过。如下图所示,具有相同的像素和形状:都是32像素×32像素的黑白图像。黑白像素分别由0和1表示. 然后再转换成文本存储形式存储。例如,如下三张图是直接从TEXT文档中截取的数字0,1,2

?

?代码

import numpy as np
from os import listdir
import knn as k

def classify0(inX,dataSet,labels,k):
    dist=(((dataSet-inX)**2).sum(1))**0.5
    sortedDist=dist.argsort()
    classCount={}
    for i in range(k):
        voteLabel = labels[sortedDist[i]]
        classCount[voteLabel]=classCount.get(voteLabel,0)+1
    maxType=0
    maxCount=-1
    for key,value in classCount.items():
        if value > maxCount:
            maxType = key
            maxCount = value
    return maxType

def img2vector(filename):
    returnVect = np.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


# load the training set
hwLabels = []
trainingFileList = listdir('D:/phycharm/test/trainingDigits')

m = len(trainingFileList)
trainingMat = np.zeros((m, 1024))
for i in range(m):
    fileNameStr = trainingFileList[i]
    fileStr = fileNameStr.split('.')[0]
    classNumStr = int(fileStr.split('_')[0])
    hwLabels.append(classNumStr)
    trainingMat[i, :] = img2vector('D:/phycharm/test/trainingDigits/%s' % fileNameStr)

# iterate through the test set
testFileList = listdir('D:/phycharm/test/testDigits')
errorCount = 0.0
mTest = len(testFileList)
for i in range(mTest):
    fileNameStr = testFileList[i]
    fileStr = fileNameStr.split('.')[0]
    classNumStr = int(fileStr.split('_')[0])
    vectorUnderTest = img2vector('D:/phycharm/test/testDigits/%s' % fileNameStr)
    classifierResult = k.knn(vectorUnderTest, trainingMat, hwLabels, 3)
    print("辨识结果是: %d, 实际值是: %d" % (classifierResult, classNumStr))
    if (classifierResult != classNumStr): errorCount += 1.0
print("\n辨识错误数量为: %d" % errorCount)
print("\n辨识率为: %f %" % ((1 - errorCount / float(mTest)) * 100))

实验结果

?参考视频学习:机器学习-分类算法及应用实践(四)手写字识别实战_哔哩哔哩_bilibili

三.KNN——约会网站的配对效果

(1)收集数据:提供文本文件。
(2)准备数据: python解析文本文件。
(3)分析数据:使用Matplotlib化画二维扩散图。
(4)训练算法:此步驟不适用于K-近邻算法。
(5)测试算法:使用提供的部分数据作为测试样本。测试样本和非测试样本的区别在于:测试样本是已经完成分类的数据,如果预测分类
与实际类别不同,则标记为一个错误。
(6)使用算法:产生简单的命令行程序,然后海伦可以输入一些特征数据以判断对方是否 为自己喜欢的类型
?

1.从文本文件中解析数据源码:?

def file2matrix(filename):
    fr = open(filename)
    numberOfLines = len(fr.readlines())
    returnMat = np.zeros((numberOfLines,3))
    classLabelVector = []
    fr = open(filename)
    index = 0
    for line in fr.readlines():
        line = line.strip()
        listFromLine = line.split('\t')
        returnMat[index,:] = listFromLine[0:3]
        if listFromLine[-1] == 'didntLike':
            classLabelVector.append(1)
        elif listFromLine[-1] == 'smallDoses':
            classLabelVector.append(2)
        elif listFromLine[-1] == 'largeDoses':
            classLabelVector.append(3)
        index += 1
    return returnMat,classLabelVector

datingDataMat,datingLabels=file2matrix('D:/phycharm/test/Date/datingTestSet.txt')
print(datingDataMat)
print(datingLabels)

实验结果:

?2.使用Matplolib制作原始数据的散点图

fig=plt.figure()
ax = fig.add_subplot(111)
ax.scatter(datingDataMat[:,1],datingDataMat[:,2])
plt.show()

散点图使用datingDataMat矩阵的第二、第三列数据,分别表示特征值“玩视频游戏所耗时间百分比” 和“每周所消费的冰淇淋公升数”

?3.归一化数值

源码:

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))
    normDataSet=normDataSet/tile(ranges,(m,1))
    return normDataSet,ranges,minVals

实验结果:

?分类器:

def datingClassTest():
    hoRatio = 0.10
    datingDataMat,datingLabels = file2matrix('D:/phycharm/test/Date/datingTestSet.txt')
    normMat,ranges,minVals=autoNorm(datingDataMat)
    m=normMat.shape[0]
    numTestVecs = int(m*hoRatio)
    errorCount=0.0
    for i in range(numTestVecs):
        classifierResult = k.knn(normMat[i,:],normMat[numTestVecs:m,:],\
                                 datingLabels[numTestVecs:m],3)
        print("the classifier came back with: %d, the real answer is : %d"\
              %(classifierResult,datingLabels[i]))
        if(classifierResult != datingLabels[i]):errorCount+=1.0
        print("the total error rate is : %f" % (errorCount/float(numTestVecs)))

学习视频:【宅着宅着就学习惯了】机器学习——人工智能系列课程_哔哩哔哩_bilibili

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-11 17:31:30  更:2021-10-11 17:33:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 10:33:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码