《机器学习》 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类数据

相关推荐
秦先生在广东几秒前
游戏本跑290B模型
人工智能
孟陬2 分钟前
技术周刊#158:ChatGPT 智能 UI 底层原理、个人智能体协议正式发布、一条 POST 请求即可锁死 Next.js 服务
人工智能·后端·全栈
TMT星球7 分钟前
度小满与香港科技大学联合发布轩辕4.5金融大模型
人工智能·金融
GJGCY8 分钟前
金融AI Agent安全如何评估?数据出站、身份映射、参数绑定与审计追踪机制
人工智能·经验分享·安全·ai·金融·自动化·智能体
甲维斯12 分钟前
Codex,Zcode,KimiCode电脑操作能力对比!
人工智能·游戏开发
ckjr00715 分钟前
手机里的AI功能越来越多,如何让它真正提高日常使用效率?
人工智能·智能手机
美狐美颜SDK开放平台17 分钟前
开发直播APP、电商短视频与视频社交平台时,能否共用一套美颜SDK?
android·图像处理·人工智能·音视频·直播美颜sdk
youzuos17 分钟前
大模型面试别背术语:用一次故障讲清工程能力:工程拆解与验证
人工智能
财迅通Ai23 分钟前
MLCC业务爆发式增长,带动昀冢科技三季度扭亏为盈
大数据·人工智能·科技·昀冢科技
AI日报派送佬24 分钟前
2026年11月02日 AI 行业日报|商汤开源 Loop-9B、Pika 发布 H3 Flex 音视频模型、Meta× 傅利叶推出人形机器人 Max
人工智能·微软·开源·音视频·openai·1024程序员节·ai日报