监督学习与无监督学习简介

机器学习领域,经常会遇到两种主要的学习方式:监督学习(Supervised Learning)和无监督学习(Unsupervised Learning)。这两种学习方式在处理数据和解决问题时有着根本的不同。本文将通过一个简单的故事来解释这两种学习方式,并探讨它们在实际应用中的意义。

监督学习

想象一下,即将参加一场考试。为了准备这场考试,向老师询问哪些问题会比较难,以便可以重点准备。老师告诉,所有包含数值的问题都是难题。回家后,翻阅了往年的试卷,将所有包含数值的问题标记为难题,并制作了一个只包含难题的清单。这个过程实际上就是监督学习的过程。

监督学习涉及到从标记过的数据中学习特征,然后对未知数据的特征进行分析,并为其分配一个标签。在小故事中,学习了包含数值的特征,然后在考试中将所有数值问题标记为“难题”。

监督学习包括回归(Regression)和分类(Classification)模型。回归模型处理连续数据,观察所有特征,它们被称为自变量,目标是因变量(依赖于所有自变量)。简单来说,建立特征和目标值之间的关系,然后通过新的特征来获取新的目标值。

例如,假设有以下数据序列:

(x,y)={(5,30),(6,36),(7,42),(8,48)}

其中x代表尝试的问题数量,y代表获得的分数。可以很容易地分析出数据之间存在线性关系,即:

y=5*x

可以很容易地绘制这些数据。让来看第二个场景,其中拥有的特征包括“尝试的问题数量、科目、老师的名字、总问题数等”。将“获得的分数”和“尝试的问题数量”之间的值进行绘制。

注意到尝试问题和获得分数之间存在某种关系,比如说:

y=beta0*x+beta1

然后假设一个线性关系并绘制它(这将是一个理想的线)。下一步是不断改变beta0和beta1的值以获得最佳拟合线。这一步应该最小化理想线和获得线之间的误差。

以下是一段尝试回归分析的代码示例:

# 假设的线性回归代码示例 import numpy as np from sklearn.linear_model import LinearRegression # 假设的数据 X = np.array([[5], [6], [7], [8]]) y = np.array([30, 36, 42, 48]) # 创建线性回归模型 model = LinearRegression() model.fit(X, y) # 预测新数据 new_X = np.array([[9]]) predicted_y = model.predict(new_X) print(predicted_y)

无监督学习

现在轮到老师检查试卷。在检查过程中,她注意到一个模式:5个问题中的2、3和1被所有人尝试,而很少有人尝试第4和第5个问题。她推断出“第4和第5个问题”是数值问题,而1、2、3是非数值问题。

这并没有在任何地方提及,那么老师做了什么呢?她进行了无监督学习。无监督学习只有特征而没有标签。这种学习涉及到潜在特征,意味着从没有直接提及的隐藏特征中学习。在例子中,潜在特征是“问题的尝试次数”。

无监督学习包括聚类算法。聚类将可用数据进行分组,所有具有相似特征的数据都被放入同一组。新数据的特征被分析,并被赋予具有匹配特征的组。

为了深入了解试卷的模式,决定查看所有往年的试卷,而朋友则与所有学长学姐交谈。发现自己擅长理论问题,需要在数值问题上努力。另一方面,朋友意识到他有很强的理解能力,但需要复习。为了理解试卷的难度,采取了不同的方法,但最终都学到了一些东西。

同样,在机器学习算法中,对示例进行分组以理解数据集。为了进行分组,需要计算示例之间的相似性。相似性是通过数据中的特征和计算它们之间的相似性来获得的。

以下代码展示了如何对随机数据应用K-means聚类算法:

# 假设的K-means聚类代码示例 from sklearn.cluster import KMeans import numpy as np # 随机生成数据 X = np.random.rand(100, 2) # 创建K-means模型 kmeans = KMeans(n_clusters=3) kmeans.fit(X) # 预测新数据的聚类 new_X = np.random.rand(1, 2) predicted_cluster = kmeans.predict(new_X) print(predicted_cluster)
  • 聚类是无监督的,没有标签,而在分类中有标签。
  • 分类算法知道类别的数量,而聚类不知道类别。它只是用新特征创建新的类别。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485