《机器学习》 KNN算法、数据可视化 No.1

一、了解机器学习

1、什么是机器学习

机器学习是一种人工智能(AI)的分支,旨在让计算机通过数据自动学习和改进。机器学习算法被设计用于从数据中提取模式和规律,然后利用这些模式和规律来做出预测或做出决策,而无需明确的程序指令。

机器学习的基本原理是利用大量的输入数据进行训练,然后使用这些数据训练出的模型来进行预测和决策。训练过程一般包括以下步骤:数据收集和准备、选择合适的模型、训练模型、评估和优化模型。

2、机器学习的步骤

简单来说就是下图所示流程:

**1) 数据收集和准备:**收集和整理适用于问题的数据集。这可能包括数据清洗、特征选择、处理缺失值和异常值等。

**2) 特征工程:**从原始数据中提取和选择适当的特征。这可以涉及特征转换、降维、组合特征等操作,以提高模型的性能。

**3) 模型选择和训练:**选择适合问题的机器学习模型,并使用训练数据对其进行训练。模型的选择可以基于问题的类型和数据的特征。

**4) 模型评估:**使用测试数据对训练好的模型进行评估,以了解其在未见过的数据上的性能表现。常见的评估指标包括准确率、召回率、精确率、F1分数等。

**5) 模型优化:**根据评估结果对模型进行调整和优化,以提高其性能。这可以涉及参数调整、特征选择、算法调整等操作。

**6) 部署和应用:**将优化后的模型部署到实际应用中,用于进行预测、决策或提供洞见。模型的部署可以采用各种方式,例如将模型集成到应用程序中、使用API进行远程调用等。

**7) 监控和维护:**对部署的模型进行监控和维护,以保持其性能和准确性。这可以包括定期监测模型的性能指标、处理模型的漂移和退化等。

例如下图,对疫情时期的患病率统计,纵坐标表示患病率,横坐标表示日期,其趋势图为通过大量数据统计,然后再经过可视化得到总体趋势图:

通过这个图可以预测第25号当天的患病率所对应的比例大致位置,而不会随机出现在极高的位置,也不会出现在极低的位置,大概在如图所示的0.6左右,这就是这段流程的大致画面。

3、为什么要学习机器学习

  1. **解决复杂问题:**机器学习是一种能够处理大规模和复杂数据的方法,它可以帮助我们解决很多传统算法难以处理的问题,如语音识别、图像分类、自然语言处理等。通过学习机器学习,我们可以利用这些技术来构建智能系统,解决实际问题。

  2. **数据驱动决策:**在当今信息爆炸的时代,我们面临着大量的数据,但如何从海量数据中提取有用的信息并做出决策是一个挑战。机器学习可以帮助我们通过训练模型从数据中发现模式和规律,并利用这些模型做出更加准确的预测和决策。学习机器学习可以使我们更好地理解和利用数据,从而做出更好的决策。

  3. **创造新的技术和创新:**机器学习是推动科技创新的重要驱动力之一。通过学习机器学习,我们可以了解最新的研究成果和技术进展,从而帮助我们开发出创新的解决方案和应用。机器学习在很多领域都有着广泛的应用,包括医疗保健、金融、交通、农业等,学习机器学习可以让我们更好地理解和应用这些技术,从而推动行业的发展。

  4. **提高竞争力和就业前景:**随着机器学习的快速发展,对于掌握机器学习技术的需求也越来越大。学习机器学习可以提高我们在职场上的竞争力,拥有这一技能可以让我们在求职中脱颖而出。很多公司和组织都在积极招聘和培养机器学习专家和工程师,学习机器学习可以给我们带来更多的就业机会和发展空间。

4、机器学习要准备的库

**1)numpy :**它是一个用于进行科学计算的Python库。它提供了一个高效的多维数组对象(ndarray),以及用于对数组进行操作的各种函数和工具。

**2)matplotlib :**它是一个用于绘制数据可视化图表的Python库。它提供了一种类似于MATLAB的绘图接口,可以创建各种类型的图表,包括折线图、散点图、柱状图、饼图、等高线图、热力图等等。Matplotlib可以在Python脚本中生成高质量的图像,支持将图表保存为图片文件或直接显示在窗口中。

**3)pandas :**它是一个用于数据分析和处理的Python库。它提供了灵活且高效的数据结构和数据分析工具,使用户能够轻松地进行数据清洗、转换、聚合、分组和可视化等操作。

**4)sklearn :**scikit-learn(简称sklearn)是一个用于机器学习的Python库。它建立在NumPy、SciPy和Matplotlib等库的基础上,提供了一套完整且易于使用的机器学习工具,适合用于各种机器学习任务,包括分类、回归、聚类等。

二、KNN算法

1、介绍KNN算法

K近邻算法 (K-Nearest Neighbors,简称KNN)是一种常用的监督学习算法,用于解决分类和回归问题。KNN算法是一种基于实例的学习方法,通过查找训练数据集中与目标样本最接近的K个最近邻样本,来进行分类或回归预测。

在KNN算法中,K代表需要考虑的最近邻样本的数量 。当进行分类 问题时,KNN算法将被分类样本分配给K个最近邻样本中所占比例最多的类别 。对于回归 问题,KNN算法计算K个最近邻样本的平均值,并将其作为预测值。

KNN算法的基本原理 是基于样本在特征空间中的距离进行分类或回归 。常用的距离度量方法包括欧氏距离曼哈顿距离、闵可夫斯基距离等。

实例解析1

如下图所示,我有一套房子想卖了,但是却不知道当前行情价格多少,但是附近邻居有几个卖了房子的,他们的房子大小和我的差不太多,所以我就划定一个范围,确定我的最近距离的几个邻居房价的平均值来定我自己房价的多少,如果觉得数据少了,那就多找几个邻居来做平均值,如此即可判断自己房价的多少。

实例解析2

如下图所示,有三组数据,将他们分别标记在坐标轴上得到如图所示状态,现在有一组数据不知道是哪一组的数据,将它标记出来后,划定周围一定范围内的其他数据点的个数,然后去数哪一类数据点最多,那么他就属于这一类数据的。

而这三组数据全部显示在一个坐标系,将他们固定,那么这三组数据就是训练数据 ,而外部不知道的那一组数据就叫测试数据

2、KNN算法---距离公式

1)欧氏距离

也叫坐标系中点到点之间的距离。

距离公式如下:

2)曼哈顿距离

就相当于点到点之间x轴走的距离加y轴走的距离

距离公式如下:

3、KNN算法优缺点

KNN算法的优点:
  1. **简单易懂:**KNN算法的实现非常简单,易于理解和实现。

  2. **非参数化:**KNN算法是一种非参数化的算法,没有对数据分布做出假设,适用于不同类型的数据。

  3. **可扩展性:**KNN算法适用于多类别问题,能够处理具有多个类别的分类任务。

KNN算法的缺点:
  1. **计算复杂度高:**对于大规模数据集,KNN算法需要计算目标样本与所有训练样本的距离,计算复杂度较高,计算时间较长。

  2. 高度依赖数据结构:KNN算法对于样本的分布和密度非常敏感,对于不均匀分布的数据集可能会产生误分类。

  3. **数据不平衡问题:**在KNN算法中,样本数量较多的类别会对分类结果产生更大的影响,而数量较少的类别可能被忽略。

4、scikit-learn 库(简称sklearn)

1)Sklearn是什么?

sklearn是一个Python机器学习库,全称为scikit-learn。它提供了许多用于处理和分析数据的工具和算法,包括数据预处理、特征工程、模型选择和评估等。sklearn内置了多种常用的机器学习算法,如线性回归、逻辑回归、决策树、随机森林、支持向量机、聚类等。同时,sklearn还提供了许多可视化工具,用于帮助用户进行数据探索和结果展示。通过使用sklearn,用户可以快速构建和部署机器学习模型。

2)sklearn安装

在命令提示符中输入下列命令,注意安装版本,不同版本有部分功能不同,可以在下列代码的scikit-learn后面加==x.x.x,x.x.x为版本号

python 复制代码
pip install scikit-learn -i https://pypi.tuna.tsinghua.edu.cn/simple/
3)使用方法

用sklearn官网API:https://scikit-learn.org/

knn算法的介绍 搜索k-nearest neighbors,注意版本1.0和1.2问题

三、数据可视化

现在有很多大学里出现室友矛盾,假如室友可以选择: 大学里面 ,对于校方,把类型相同的学生放在一个寝室,在基于大二大三大四的,现已存在一个数据文件datingTestSet2.txt,为历年大学生的调查问卷表:

第1列:每年旅行的路程

第2列:玩游戏所有时间百分比

第3列:每个礼拜消耗零食的重量

第4列:学生所属的类别,1表示爱学习,2表示一般般,3表示爱玩。

目的为学生在大学中挑选室友的信息,其内部数据部分如下所示

首先确定流程:收集数据 -> 建立模型训练 -> 预测数据

当前已经收集好数据存放在datingTestSet2.txt文件里,

1、可视化查看数据

直接看代码:

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

date = np.loadtxt('datingTestSet2.txt') #导入数据
# 分类 1 2 3,分别取出每个类别的学生信息
date_1 = date[date[:,-1]==1]
date_2 = date[date[:,-1]==2]
date_3 = date[date[:,-1]==3]

a = plt.figure() #创建画布
b = plt.axes(projection='3d') #设置为3d图像
# scatter为散点图,期内参数分别代表x轴y轴z轴数据,c为颜色,marker为散点图形
b.scatter(date_1[:,0],date_1[:,1],date_1[:,2],c='#696969',marker='+') 
b.scatter(date_2[:,0],date_2[:,1],date_2[:,2],c='#FF6A6A',marker='o')
b.scatter(date_3[:,0],date_3[:,1],date_3[:,2],c='#8A2BE2',marker='3')

# 展示中文
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 展示数据
plt.title('学生类别')
b.set(xlabel='里程数',ylabel='游戏时间百分比',zlabel='食品质量')
plt.show()

输出结果如下图,即不同颜色对应不同分类的学生:

2、使用KNN算法预测

代码如下:

python 复制代码
import numpy as np
from sklearn.neighbors import KNeighborsClassifier # 导入包,表示使用分类算法

date = np.loadtxt('datingTestSet2.txt') #导入数据

date_x = date[:,:-1] # 取行为所有行,列为从第一列到最后一列,不包含最后一列数据
date_y = date[:,-1] # 取行为所有行,列为最后一列的数据

knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(date_x,date_y) # 使用fit,对上述数据进行训练
# 测试单条数据
print(knn.predict([[1215, 1.14656, 1.122]]))
# 测试多条数据
a = [[1221,0.12654,12.1522],[4651,1.3256,15.135],[45631,6.23,1.11111]]
print(knn.predict(a))

其运行结果为:

第一行表示输入的一组数据为2类学生,第二行表示输入的多组数据为2,2,3类数据

相关推荐
晨曦_子画3 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
道可云4 分钟前
道可云人工智能&元宇宙每日资讯|2024国际虚拟现实创新大会将在青岛举办
大数据·人工智能·3d·机器人·ar·vr
人工智能培训咨询叶梓14 分钟前
探索开放资源上指令微调语言模型的现状
人工智能·语言模型·自然语言处理·性能优化·调优·大模型微调·指令微调
zzZ_CMing14 分钟前
大语言模型训练的全过程:预训练、微调、RLHF
人工智能·自然语言处理·aigc
newxtc15 分钟前
【旷视科技-注册/登录安全分析报告】
人工智能·科技·安全·ddddocr
成都古河云16 分钟前
智慧场馆:安全、节能与智能化管理的未来
大数据·运维·人工智能·安全·智慧城市
UCloud_TShare18 分钟前
浅谈语言模型推理框架 vLLM 0.6.0性能优化
人工智能
软工菜鸡23 分钟前
预训练语言模型BERT——PaddleNLP中的预训练模型
大数据·人工智能·深度学习·算法·语言模型·自然语言处理·bert
vivid_blog29 分钟前
大语言模型(LLM)入门级选手初学教程 III
人工智能·语言模型·自然语言处理
AI视觉网奇1 小时前
sklearn 安装使用笔记
人工智能·算法·sklearn