《机器学习》 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为版本号

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、可视化查看数据

直接看代码:

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算法预测

代码如下:

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类数据

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜就多练_0828

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值