合工大-人工智能原理实验报告

简介: 合工大-人工智能原理实验报告

人工智能原理实验报告

实验报告是关于实验教学内容、过程及效果的记录和总结,因此,应注意以下事项和要求:

1.实验报告要求:格式规范,语言表达清楚,数据和程序真实。并能够理论联系实际,认真分析实验中出现的问题与现象,总结经验。

2.实验报告的撰写应独立完成,严禁抄袭或拷贝,否则,一经查实,按作弊论取,并取消理论课考试资格。

3. 可根据实际需要调整每个单元格的篇幅。

4. 请按照要求填写实验报告。算法源代码请放置在附录中。

题目序号_1___   作业名称:     基于knn算法                    

                       实验时间∶  2022  10 29  日  

实验内容

一、题目内容和要求:

使用提供的几种算法训练分类器

  • 问题背景和相关工作介绍

Knn介绍

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

实验数据介绍

  实验数据为老师提供的数据,这里使用

diabetes_discrete.data

这个数据集

分类模型介绍

  分类模型使用knn模型

三、解题思路

  将数据集分为测试集和训练集。向训练好的模型输入测试集的内容,将得到的结果与真实情况对比,最后检测得到模型的准确率为70%左右

四、算法伪代码

数据预处理:

# 数据预处理

group=[]

label=[]

for i in range(len(data)):

    temp=[]

    for j in range(len(data[0])):

        if data[i][j]>=0:

            temp.append(int(data[i][j]))

    label.append(temp[-1])

    group.append(temp[:-1])


test=group

group=np.array(group)

Knn分类

def classify0(inX, dataSet, labels, k):

    #numpy函数shape[0]返回dataSet的行数

    dataSetSize = dataSet.shape[0]

    #在列向量方向上重复inX共1次(横向),行向量方向上重复inX共dataSetSize次(纵向)

    diffMat = np.tile(inX, (dataSetSize, 1)) - dataSet

    #二维特征相减后平方

    sqDiffMat = diffMat**2

    #sum()所有元素相加,sum(0)列相加,sum(1)行相加

    sqDistances = sqDiffMat.sum(axis=1)

    #开方,计算出距离

    distances = sqDistances**0.5

    #返回distances中元素从小到大排序后的索引值

    sortedDistIndices = distances.argsort()

    #定一个记录类别次数的字典

    classCount = {}

    for i in range(k):

        #取出前k个元素的类别

        voteIlabel = labels[sortedDistIndices[i]]

        #dict.get(key,default=None),字典的get()方法,返回指定键的值,如果值不在字典中返回默认值。

        #计算类别次数

        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1

    #python3中用items()替换python2中的iteritems()

    #key=operator.itemgetter(1)根据字典的值进行排序

    #key=operator.itemgetter(0)根据字典的键进行排序

    #reverse降序排序字典

    sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)

    #返回次数最多的类别,即所要分类的类别

    return sortedClassCount[0][0]

五、实验设置

实验工具:

Pycharm,python

实验配置:

windows系统

六、实验结果

要求:

(1)请以表格或图片的方式给出实验结果。

(2)图片、表格应符合规范:应有标题、并分别编号。

(3)结果内容可包括:测试用例、预计输出结果、实际输出结果、运行时间对比等。鼓励学有余力的同学提供与其他算法的实验结果对比。

当训练集为1:500 测试集为501:768,k=5时

七、实验结果分析

要求:请通过实验结果分析是否已完成实验要求、正确得到预计的实验结果。可分析所采用算法的实际性能以及后续改进空间。以及给出实验过程中遇到的问题及解决方案。鼓励学有余力的同学通过实验结果分析不同算法的性能对比。

根据我们的实验结果,已经可以分别测试集的的类别,准确率达到70%,我们看到训练集的大小和k的取值不同对最后的结果有影响,但在本次实验中影响并不大

八、总结

通过此次实验,学习到了knn算法,对该算法的原理有了更深入的了解,而且通过这个算法训练了模型,准确率在70%以上,希望以后可以在编程的路上越走越远。

附录算法源代码(要求:小五号字体、行距12磅)

# -*- coding: UTF-8 -*-


import operator

import numpy as np

import pandas as pd


data = pd.read_csv('课程报告数据集/diabetes_discrete.data', sep=' ', names=[i for i in range(590)])

data = np.array(data)


"""

    group - 数据集

    labels - 分类标签

"""


# 数据预处理

group=[]

label=[]

for i in range(len(data)):

    temp=[]

    for j in range(len(data[0])):

        if data[i][j]>=0:

            temp.append(int(data[i][j]))

    label.append(temp[-1])

    group.append(temp[:-1])


test=group

group=np.array(group)



"""

函数说明:kNN算法,分类器


Parameters:

    inX - 用于分类的数据(测试集)

    dataSet - 用于训练的数据(训练集)

    labes - 分类标签

    k - kNN算法参数,选择距离最小的k个点

Returns:

    sortedClassCount[0][0] - 分类结果


Modify:

    2017-07-13

"""

def classify0(inX, dataSet, labels, k):

    #numpy函数shape[0]返回dataSet的行数

    dataSetSize = dataSet.shape[0]

    #在列向量方向上重复inX共1次(横向),行向量方向上重复inX共dataSetSize次(纵向)

    diffMat = np.tile(inX, (dataSetSize, 1)) - dataSet

    #二维特征相减后平方

    sqDiffMat = diffMat**2

    #sum()所有元素相加,sum(0)列相加,sum(1)行相加

    sqDistances = sqDiffMat.sum(axis=1)

    #开方,计算出距离

    distances = sqDistances**0.5

    #返回distances中元素从小到大排序后的索引值

    sortedDistIndices = distances.argsort()

    #定一个记录类别次数的字典

    classCount = {}

    for i in range(k):

        #取出前k个元素的类别

        voteIlabel = labels[sortedDistIndices[i]]

        #dict.get(key,default=None),字典的get()方法,返回指定键的值,如果值不在字典中返回默认值。

        #计算类别次数

        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1

    #python3中用items()替换python2中的iteritems()

    #key=operator.itemgetter(1)根据字典的值进行排序

    #key=operator.itemgetter(0)根据字典的键进行排序

    #reverse降序排序字典

    sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)

    #返回次数最多的类别,即所要分类的类别

    return sortedClassCount[0][0]


# 训练集大小

l=500

#训练数据集

group, labels = group[0:l],label[0:l]


#测试集

group_test=test[l:]

label_test=label[l:]


#kNN分类

cnt=0

for i in range(len(group_test)):

    test_class = classify0(group_test[i], group, labels, 5)

    if test_class==label_test[i]:

        cnt+=1

# 输出

print(cnt/len(group_test))

  1. 感想、体会、建议∶

  

希望以后可以在编程的路上越走越远。

上机报告成绩评语

指导教师签名:

年    月   日

目录
相关文章
|
2月前
|
机器学习/深度学习 人工智能 算法
探索人工智能中的强化学习:原理、算法与应用
探索人工智能中的强化学习:原理、算法与应用
|
2月前
|
机器学习/深度学习 人工智能 算法
探索人工智能中的强化学习:原理、算法及应用
探索人工智能中的强化学习:原理、算法及应用
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
人工智能:原理、应用与Python代码示例
人工智能:原理、应用与Python代码示例
|
3月前
|
机器学习/深度学习 算法 数据建模
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
45 0
|
3月前
|
机器学习/深度学习 人工智能 算法
人工智能-大语言模型-微调技术-LoRA及背后原理简介
人工智能-大语言模型-微调技术-LoRA及背后原理简介
68 0
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
探索人工智能:从原理到实践
【10月更文挑战第6天】在这篇文章中,我们将深入探讨人工智能的基本原理,并展示如何将这些理论应用到实际编程中。无论你是AI新手还是有经验的开发者,这篇文章都将为你提供有价值的信息和启示。我们将从基础概念开始,逐步深入到复杂的编程示例,最后总结出一些关于人工智能未来发展的思考。让我们一起踏上这段探索之旅吧!
|
8月前
|
机器学习/深度学习 人工智能 并行计算
人工智能平台PAI产品使用合集之机器学习PAI中特征重要性的原理不知道如何解决
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
8月前
|
机器学习/深度学习 人工智能 自动驾驶
人工智能:原理、应用与Python代码实现
人工智能:原理、应用与Python代码实现
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
【人工智能】深度解读 ChatGPT基本原理
ChatGPT是OpenAI开发的一种基于人工智能技术的自然语言处理工具,它代表了自然语言处理(NLP)技术的前沿进展。ChatGPT的基本原理建立在一系列先进技术和方法之上,主要包括GPT(Generative Pre-trained Transformer)模型架构、预训练与微调技术、以及可能采用的RLHF(Reinforcement Learning from Human Feedback)等高级训练策略。下面将详细解读ChatGPT的基本原理和关键技术:
114 1
|
4月前
|
机器学习/深度学习 人工智能 算法
探索人工智能:机器学习的基本原理与Python代码实践
【9月更文挑战第6天】本文深入探讨了人工智能领域中的机器学习技术,旨在通过简明的语言和实际的编码示例,为初学者提供一条清晰的学习路径。文章不仅阐述了机器学习的基本概念、主要算法及其应用场景,还通过Python语言展示了如何实现一个简单的线性回归模型。此外,本文还讨论了机器学习面临的挑战和未来发展趋势,以期激发读者对这一前沿技术的兴趣和思考。