2.2 机器学习的研究问题
2.2.1 回归
在前面的情景中,我们所研究的可乐销量与平均气温之间的定量关系,其实是机器学习中的回归问题。
回归问题主要研究两种现象之间的定量关系。
对于回归,机器需要对已有的数据进行拟合,再根据拟合出来的函数,对未来进行预测。
这里形象地说,拟合是寻找一个最优的光滑曲线,从整体上靠近已有的数据。
除了回归,机器学习还研究另外三类常见的问题:分类、聚类,以及降维。
2.2.2 分类
分类问题研究如何判断一个事物属于已知分类中的哪一类。
对于分类,机器需要先找到已知分类的划分规则,再应用该划分规则对新的事物进行分类。
例如现在有两个已知分类——饮料和非饮料。
让机器判断炸薯条是饮料还是非饮料,就是分类问题。
2.2.3 聚类
聚类问题研究如何对未分组的事物进行分组。
对于聚类,机器需要根据事物之间的相似性,将事物划分为若干组,并加上标签。
假设现在有 5 样食物,分别是可乐、汉堡包、橙汁、炸薯条和披萨。
让机器对这 5 样食物进行分组,并贴上标签,就是聚类问题。
2.2.4 降维
降维问题研究如何提取数据中的关键信息。
对于降维,机器需要分析不同维度数据的重要程度,并提取其中的关键信息。
这里举一个形象的例子,让机器找出牛肉芝士汉堡包中的高热量成分,就属于降维问题。
2.3 机器学习的简单分类
我们已经知道,机器学习是从历史数据中学习规律的过程。
如果历史数据既有输入特征,又有输出结果,就称这样的机器学习为监督学习。
如果历史数据仅包含输入特征,就称为无监督学习。
回忆一下,在前面小天的便利店里,我们用到的历史数据是过去一个月每天的平均气温和可乐销量。
这里每天的平均气温是输入特征,每天的可乐销量就是输出结果,所以情景问题用到了监督学习。
而对于另外的三类常见的研究问题,分类属于监督学习,聚类和降维属于无监督学习。
3. 机器学习有什么用?
想象一下这样的场景,在一个炎热的夏天,小图从公司下班。他来到停车场,朝着摄像头眨眨眼,道闸便打开了。
在小图回家的行驶过程中,他对手机说了一句,“今天有哪些热点新闻”,手机屏幕上就弹出了今日的热搜榜。
同时,汽车上的智能导航设备会根据小图的实时位置和路况信息,预测他到家的大致时间,并发送给家里的智能家电——智能空调会提前 5 分钟启动制冷、智能电视会根据小图的历史播放记录,自动搜索他感兴趣的节目并播放……
人工智能的快速发展,推动着机器学习和不同领域的技术相结合,使计算设备的功能越来越强大。
例如图像识别是机器学习和图像处理技术相结合的产物,语音识别则是机器学习和语音处理技术相结合的产物。
除此之外,机器学习还可以与定位技术相结合,实现精准定位,而内容推荐则需要用到数据库技术。
4. 机器学习需要学什么?
4.1 数学知识
在搭建机器学习模型的过程中,为了便于计算,通常以向量或矩阵的形式组织数据,因此学习机器学习需要线性代数的知识。
此外,你还需要了解线性代数中的线性变换、特征值、奇异值等知识。
在研究变量间的相关性时,机器学习需要用到概率论和统计学中的基础知识。
概率论部分涉及贝叶斯定律、伯努利分布、正态分布等知识。
统计学部分涉及方差、协方差、相关系数、参数估计、假设检验等知识。
另外,在学习优化算法时,还需要知道微积分中的导数和偏导数,以及凸优化中的线性规划、二次规划、最小二乘优化、正则化等知识。
4.2 编程知识
工欲善其事,必先利其器。想要开发机器学习项目,编程知识也是不可缺少的。
在编程知识方面,你需要知道 Python 基础语法和 Python 机器学习的常用模块。
在 Python 基础语法中,需要学习基础数据类型、循环和条件判断、函数、类与模块等知识。
而在使用 Python 开发机器学习项目时,需要了解如下 5 个常用的 Python 第三方库:
1)numpy 库:一个强大的数值计算库,提供了向量和矩阵的相关操作。
2)scipy 库:一个为科学和工程设计的库,提供统计、优化等方面的功能。
3)pandas 库:一个强大的分析结构化数据的库,用于高性能的矩阵运算、数据清洗。
4)matplotlib 库:一个集成了多种可视化方法的库,可定制性强、对初学者友好。
5)sklearn 库:一个强大的机器学习算法库,是 scipy 库的扩展,包含许多常用的机器学习算法以及一些数据集。
4.3 算法知识
最后,你还需要了解一些机器学习算法方面的知识。
在监督学习中,用于回归的算法有线性回归、保序回归,用于分类的算法有 K 近邻、支持向量机、决策树和神经网络。
在无监督学习中,用于聚类的算法有 K-Means 聚类、谱聚类,用于降维的算法有主成分分析和线性判别分析。
总地来说,数学知识是学习和理解机器学习算法的基础,编程知识和算法知识帮助你更好地应用机器学习模型。
对于以上三类知识,你只需要有个大概的了解即可。你可以参考以下的思维导图,进行梳理。
5. 机器学习项目体验
在本节,我们来体验一个机器学习项目。
5.1 情景故事
20 世纪 80 年代,生物学家发现了两种蚊子,并把它们分别命名为库蚊和伊蚊,其中伊蚊会传播多种病原体。
他们想,能不能根据这两种蚊子翅长和触角长的数据,对新的未知类别的蚊子进行分类。
从问题的角度看,这是一个分类问题,目标是根据蚊子的特征(翅长、触角长)对蚊子进行分类。
在使用机器学习算法之前,我们可以做一些尝试性的工作。
以蚊子翅长为横坐标,触角长为纵坐标,在平面直角坐标系中绘制散点图。
以下是原始数据,以及绘制得到的散点图。
由散点图,我们可以明显地感觉到——代表库蚊的点集中在图的左侧,而代表伊蚊的点集中在图的右侧。
对于 3 只未知分类的蚊子样本,我们根据散点图预测:前 2 只蚊子分布在图的左侧,最有可能是库蚊,而第 3 只蚊子分布在图的右侧,最有可能是伊蚊。
在这个例子中,蚊子的特征为两个,因此可以用上述方法进行主观猜测。
但是如果特征数量超过两个时,就需要机器学习来帮忙了。
在机器学习算法中,KNN 算法适用于分类问题。接下来,我们来看一下 KNN 算法是如何对蚊子进行分类的。
5.2 算法简介
当你第一次看到 KNN 这几个字,你是否会想 KNN 是什么?
KNN 的全称是 K Nearest Neighbors,字面意思是 K 个最近的邻居。KNN 算法是一种适用于分类问题的监督学习算法。
在蚊子的分类问题中,KNN 算法的计算步骤是这样的:
1)计算未知蚊子与每个已知蚊子特征之间的距离。
2)选取合适的 K 值,找出距离中前 K 个最小值所对应的已知蚊子。
这里,K 值的选取比较灵活,需要根据前面的散点图,选取一个合适的值。
3)根据少数服从多数的原则,对新蚊子的类别进行预测。
5.3 代码体验
在 Python 的第三方库 sklearn 中,提供了 K 近邻分类器 KNeighborsClassifier,使用该分类器可以很方便地帮助我们搭建 KNN 模型。
最后,让我们在沙盒中运行一下 KNN 算法代码,体验一下机器学习的魅力吧。
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier
# Step1 读取数据
df = pd.read_csv("./工作/insect.csv")
x = df[['翅长', '触角长']].values
y = df['类别'].values
# Step2 数据预处理
# 最后 3 个样本为未知样本,其余样本为已知样本
train_X = x[:-3]
train_Y = y[:-3]
pred_X = x[-3:]
# Step3 训练模型
# 在 K 近邻分类器中,K 值通过参数 n_neighbors 设置
model = KNeighborsClassifier(n_neighbors=3)
model.fit(train_X, train_Y)
# Step4 应用模型
# 应用训练出的模型预测未知蚊子的类别
pred_Y = model.predict(pred_X)
print(pred_Y)
看,对于 3 只未知分类的蚊子,KNN 算法预测的结果为:库蚊、库蚊、伊蚊。
这与前面的主观猜测是不是相符合呢。
- 课程总结
以上就是机器学习导论课的全部内容。我们来回忆一下今天学了哪些知识。
首先我们学习了机器学习的概念:机器学习是从历史数据中学习规律,然后应用该规律预测未来的过程。
接着,我们认识了机器学习四类常见的研究问题和机器学习的简单分类。
机器学习四类常见的研究问题分别是回归、分类、聚类和降维。其中,回归和分类属于监督学习,而聚类和降维则属于无监督学习。
然后,我们简单了解了机器学习的应用场景和知识框架。
在生活中,机器学习可以用于图像识别、语音识别、精准定位和内容推荐。
最后,我们还体验了一个使用 KNN 算法的机器学习项目代码。
按照惯例,这里给出了本节课的知识思维导图。