🎈个人主页:豌豆射手^
🎉欢迎 👍点赞✍评论⭐收藏
🤗收录专栏:机器学习
🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步!
【机器学习】走进监督学习:构建智能预测模型的第一步
- 一 初步了解
- 1.1 概念
- 1.2 类比
- 二 步骤
- 2.1 数据收集与准备:
- 2.2 数据标注与划分:
- 2.3 模型选择与构建:
- 2.4 训练模型:
- 2.5 模型验证与评估:
- 2.6 模型使用与部署:
- 三 优缺点及适用场景
- 3.1 优点:
- 3.2 缺点:
- 3.3 适用场景:
- 四 两种监督学习的方式
- 4.1 回归学习
- 4.2 分类学习
- 4.3 回归学习和分类学习的区别
- 五 代码示例与分析
- 5.1 代码步骤
- 5.2 输出结果
- 5.3 完整代码
- 总结:
引言:
在数字化时代的浪潮中,机器学习技术已经深入到了我们生活的方方面面,从智能推荐到自动驾驶,从语音助手到医疗诊断,机器学习的应用无处不在。在众多机器学习的方法中,监督学习凭借其强大的预测能力和广泛的应用场景,成为了最受欢迎的算法之一。
本文旨在通过系统梳理监督学习的基本概念、步骤、优缺点及适用场景,以及两种主要的监督学习方式——回归学习和分类学习,为读者提供一个全面而深入的了解,并通过具体的代码示例帮助读者更好地掌握监督学习的实践应用。
一 初步了解
1.1 概念
监督学习是机器学习中的一种重要方法,其核心概念是利用带有标签(或目标值)的训练数据来训练模型,使模型能够学习从输入到输出的映射关系。
不懂 样本、特征、标签、是什么的,可以看看这篇博客
在监督学习中,训练数据通常由一系列输入(特征向量)和对应的输出(目标值)组成,这些数据通常被称为样本。
例如:
1 房价预测:
输入特征:
房屋面积:120平方米
卧室数量:3个
楼层:5楼(共10层)
房屋年龄:8年
目标值:
房价为500,000元
样本数据:
房屋面积 | 卧室数量 | 楼层 | 房屋年龄 | 房价 |
---|---|---|---|---|
120 | 3 | 5 | 8 | 500,000 |
… | … | … | … | … |
2 垃圾邮件分类:
输入特征:
邮件内容中的词汇:["免费", "赢取", "大奖", "点击", "链接"]
发送者地址:spammer@example.com
邮件主题:"赢取iPhone,点击这里!"
目标值:
分类标签为1(表示垃圾邮件)
样本数据(通常会将文本转换为数值向量):
词汇1 | 词汇2 | … | 发送者地址 | 邮件主题 | 标签 |
---|---|---|---|---|---|
1 | 1 | … | A | B | 1 |
0 | 0 | … | C | D | 0 |
… | … | … | … | … | … |
模型通过对这些样本的学习,提取特征值和映射关系,并试图找到一个函数,将输入数据映射到输出数据。
监督学习的目标是使模型在训练后能够对新的、未见过的数据进行预测。
这种预测可以是对离散型变量的分类,也可以是对连续型变量的回归预测。
例如,在垃圾邮件识别中,监督学习可以通过对已知的垃圾邮件和正常邮件进行标记,并训练模型学习这些邮件的特征,从而实现对新邮件的分类预测。
在回归预测中,监督学习可以通过分析历史数据中的输入和输出关系,建立回归方程,从而预测新的数据点的输出值。
此外,监督学习假设输入与输出的随机变量遵守联合概率分布。
也就是说输入和输出之间存在某种概率关系,对于特定的输入值,有一个与之关联的输出值的概率分布。
概率分布
它是概率论的基本概念之一,是指用于表述随机变量取值的概率规律。事件的概率表示了一次试验中某一个结果发生的可能性大小。若要全面了解试验,则必须知道试验的全部可能结果及各种可能结果发生的概率,即随机试验的概率分布。
但这一联合概率分布的具体定义对学习系统来说是未知的。
这意味着在实际应用中,我们无法直接知道或描述这个联合概率分布的确切形式。但是,我们可以通过观察和分析数据来估计它。
训练数据和测试数据被看作是按照这一联合概率分布独立同分布产生的。
意味着每个数据点(无论是训练数据还是测试数据)都是从这个联合概率分布中独立抽取的,并且所有数据点都遵循相同的分布。
监督学习的模型可以是概率模型或非概率模型,由条件概率分布或决策函数表示,用于对具体的输入进行输出预测。
概率模型:这类模型直接输出输入对应的输出的概率分布。例如,它们可以输出一个类别的概率,而不是直接输出一个类别标签。
非概率模型:这类模型直接输出预测结果,如类别标签或回归值,而不涉及概率。
条件概率分布:在概率模型中,这描述了给定输入时输出的概率分布。
决策函数:在非概率模型中,这描述了如何将输入映射到输出。
总的来说,监督学习是一种利用标记数据进行模型训练的方法,通过学习输入和输出之间的关系,实现对新数据的预测。
它在分类、回归等任务中发挥着重要作用,是机器学习领域的一种基础且重要的学习方法。
1.2 类比
举一个现实中的例子来类比监督学习的概念,我们可以考虑学生学习数学的过程。
在这个类比中,学生相当于机器学习中的模型,而老师则扮演着提供指导和反馈的角色。数学题目和答案则分别对应于监督学习中的输入特征和标签。
想象一下,学生正在学习解决一元线性方程。
老师首先会展示一系列的一元线性方程题目(输入特征),并给出每个方程的答案(标签)。
学生根据老师展示的示例,尝试自己去解这些方程。
起初,学生可能会犯一些错误,但老师会检查学生的解答,并指出其中的错误 (这是监督学习中损失函数的角色)
老师会解释为什么这个答案是错的,以及正确的解法应该是怎样的。这样,学生就能从错误中学习,并逐渐改进自己的解题方法。
随着时间的推移,学生通过不断的练习和老师的反馈,逐渐掌握了解决一元线性方程的技巧。
最终,学生能够在没有老师指导的情况下,独立解决类似的一元线性方程题目。
这个过程与监督学习非常相似。
在监督学习中,模型通过大量的带标签的训练数据来学习输入特征和输出标签之间的关系。
模型会根据预测结果与实际标签之间的差异(损失)来调整其参数,从而改进其预测性能。
模型参数是机器学习模型内部的可调节量,用于优化模型的预测性能,是模型训练过程中的关键组成部分。
最终,经过充分的训练,模型能够对新的、未见过的输入数据进行准确的预测。
通过这个类比,我们可以更好地理解监督学习的概念:利用带有标签的训练数据来指导模型学习输入与输出之间的关系,并通过不断迭代和优化来提高模型的预测能力。
二 步骤
机器学习中监督学习的步骤可以分为以下几个关键部分:
2.1 数据收集与准备:
1 收集数据:
利用网络爬虫从网站抽取数据、从RSS反馈或API获取信息,或从设备发送的实测数据中获取。
这些数据可能包括文本、图像、数值等各种类型。
2 数据预处理:
确保数据格式符合要求,清洗数据,例如处理缺失值、异常值或垃圾数据。
3 特征工程:
包括特征提取和特征选择。
对于原始数据,可能需要通过一些方法(如PCA降维、独热编码等)转换为模型可以处理的形式。尽管在深度学习方法中,卷积神经网络(CNN)等结构可以自动提取特征,但在某些情况下,手动特征工程仍然是有帮助的。
2.2 数据标注与划分:
1 数据标注:
对于监督学习,数据集中的每个样本都需要有一个标签或目标值。
例如,在图像分类任务中,每张图像都需要被标注为对应的类别。
2 数据集划分:
将数据集划分为训练集、验证集和测试集。
训练集用于训练模型,验证集用于选择最佳的超参数或模型,测试集用于评估模型的最终性能。
2.3 模型选择与构建:
1 选择模型:
根据问题的性质和数据的类型,选择合适的模型。
例如,对于图像分类问题,卷积神经网络(CNN)可能是一个好的选择。
2 构建模型:
定义模型的架构,确定输入和输出的格式,以及任何必要的层或组件。
2.4 训练模型:
- 将预处理和标注后的数据输入到模型中。
- 通过优化算法(如梯度下降法及其变种)不断迭代,调整模型的参数,以最小化预测输出与实际标签之间的差异(即损失函数)
- 在训练过程中,可能还需要使用一些正则化技术来防止过拟合。
2.5 模型验证与评估:
使用验证集来评估模型在不同超参数或结构下的性能,并选择最佳模型。
使用测试集来评估最终模型的性能,确保其具有良好的泛化能力。
2.6 模型使用与部署:
一旦模型经过训练和验证,就可以将其部署到实际应用中,对新数据进行预测或分类。
需要注意的是,以上步骤是一个简化的流程,实际的机器学习任务可能涉及更多的细节和复杂性。此外,随着数据量的增长和模型复杂性的提高,可能还需要考虑使用更高级的技术和方法,如迁移学习、集成学习或分布式计算等。
三 优缺点及适用场景
3.1 优点:
1 准确性高:
由于监督学习使用带有标签的数据进行训练,模型能够学习到输入与输出之间的精确关系,因此在预测和分类任务中通常具有较高的准确性。
2 可解释性强:
与某些黑盒模型(如深度学习模型)相比,某些监督学习模型(如线性回归和决策树)的结果更易于解释和理解。
3 灵活性高:
监督学习可以应用于各种类型的数据和任务,包括文本分类、图像识别、推荐系统等。
3.2 缺点:
1 数据标注成本高:
监督学习需要大量的带标签数据进行训练,数据标注工作往往非常耗时和昂贵,特别是对于一些复杂领域或大规模数据集。
2 泛化能力受限:
如果训练数据分布与实际应用场景中的数据分布差异较大,监督学习模型的泛化能力可能会受到限制。
3 对异常值敏感:
监督学习模型可能容易受到训练数据中的异常值或噪声的影响,导致模型性能下降。
3.3 适用场景:
1 文本分类:
根据已有的文本数据集训练分类模型,对新文本进行分类,如垃圾邮件过滤、新闻分类等。
2 图像识别:
通过标注好的图像训练分类模型,从而对未知图片进行分类,如人脸识别、物体识别等。
3 推荐系统:
根据用户历史数据,训练推荐模型,推荐用户可能感兴趣的产品或服务,如电商推荐、视频推荐等。
4 风险评估:
根据历史数据中风险因素的相关信息,训练模型,对新的风险因素进行评估与预测,如信用评分、疾病预测等。
总的来说,监督学习在需要利用已知标签数据进行预测和分类的任务中表现出色,但也需要考虑到数据标注成本、泛化能力以及异常值处理等问题。在实际应用中,需要根据具体任务和数据情况来选择合适的监督学习方法和模型。
四 两种监督学习的方式
监督学习的主要分类包括回归和分类。
回归用于预测连续型变量的数值,如房价或股票价格;而分类则用于将输入数据划分为不同的类别,例如图像识别中的物体分类。
这两种方式都是监督学习在机器学习中的重要应用,它们利用带有标签的数据进行训练,以便模型能够自动地预测新数据的输出或类别。
4.1 回归学习
回归学习是监督学习中的一个重要分支,主要用于预测数值型输出。
其核心思想是通过学习输入变量与输出变量之间的关系,来预测新的数据点的输出值。
数值型输出是指输出的结果为数字类型的数据
例如:
房价预测:
输入:
房屋面积(120平方米)、房间数(3室)、
地理位置(市中心)、建筑年代(2000年)。输出:预测的房价 580,000元。
回归学习广泛应用于各种预测问题,如房价预测、股票价格预测、销售额预测等。
回归学习有多种类型,包括线性回归和非线性回归。
线性回归假设输入变量与输出变量之间存在线性关系,通过拟合一条直线来逼近数据点。
非线性回归则允许更复杂的关系,可以使用多项式回归、决策树回归、神经网络等方法来处理。
回归学习的性能评估通常使用预测误差来衡量,如均方误差(MSE)、均方根误差(RMSE)等。这些指标可以帮助我们了解模型的预测精度和泛化能力。
总的来说,回归学习是一种强大的工具,可以帮助我们理解和预测数值型数据。通过选择合适的回归方法和调整模型参数,我们可以构建出准确且有效的预测模型,为实际应用提供有价值的洞见和决策支持。
4.2 分类学习
分类学习是监督学习中的另一个关键分支,旨在通过训练数据学习一个模型或函数,以便将新的、未见过的数据点正确地划分到预定的类别中。
例如:
文本情感分类:
输入:一条电影评论的文本内容。
输出:预测的类别标签,如“正面”或“负面”。
图像识别:
输入:一张包含物体的图片。
输出:预测的类别标签,如“猫”、“狗”或“汽车”。
这种学习方法广泛应用于图像识别、文本分类、垃圾邮件过滤等多种实际场景中。
分类学习的核心在于学习一个分类器或分类模型,该模型能够根据输入的特征来预测输出类别。分类器的构建通常依赖于各种算法和技术,如决策树、支持向量机、朴素贝叶斯、神经网络等。
这些算法通过不同的方式从训练数据中提取特征和类别之间的关系,并尝试找到能够最小化分类错误的最优模型。
一旦分类器训练完成,它就可以用来对新的、未见过的数据进行分类。通过将新数据的特征输入到分类器中,分类器会输出一个预测的类别标签。
这个预测的标签就是分类器根据已学习的知识对新数据进行的分类结果。
分类学习的性能通常通过准确率、召回率、F1分数等指标来评估。这些指标可以帮助我们了解分类器在不同类别上的表现,以及整体上的分类效果。
总的来说,分类学习是一种强大的监督学习方法,可以帮助我们自动地将数据划分为不同的类别。通过选择合适的算法和调优模型参数,我们可以构建出高效且准确的分类器,为各种实际应用提供有力的支持。
4.3 回归学习和分类学习的区别
回归学习和分类学习是监督学习中的两种主要方法,它们的主要区别在于处理的数据类型和目标的不同。
首先,回归学习的目标是预测一个具体的数值,即输出是连续的。
例如,预测房价、股票价格、销售额等都属于回归问题。回归学习模型通过训练数据学习输入特征与目标变量之间的映射关系,然后利用这个模型对新的、未见过的数据进行预测,得到的是一个具体的数值预测结果。
而分类学习的目标则是将输入数据划分到预定义的类别中,输出是离散的类别标签。
例如,图像识别、垃圾邮件检测、新闻分类等都是分类问题的典型应用。分类学习模型通过学习训练数据中的特征与类别标签之间的关系,来预测新数据的所属类别。
其次,回归学习和分类学习在评估模型性能时使用的指标也有所不同。
回归学习常用的评估指标包括均方误差(MSE)、均方根误差(RMSE)等,这些指标衡量了模型预测值与真实值之间的差异。
而分类学习则常使用准确率、召回率、F1分数等指标来评估模型的分类性能。
此外,从算法的角度来看,回归学习和分类学习也有一些不同的常用方法。
回归学习可以使用线性回归、决策树回归、岭回归等多种算法
而分类学习则常用逻辑回归、支持向量机、决策树分类、随机森林等算法。
需要注意的是,虽然逻辑回归的名字中包含“回归”,但它实际上是一种分类算法,用于处理二分类或多分类问题。
综上所述,回归学习和分类学习在数据类型、目标、评估指标和常用算法等方面都存在明显的区别。
在实际应用中,我们需要根据问题的性质和数据的特点来选择合适的学习方法。
五 代码示例与分析
以下是一个使用Python和scikit-learn库进行简单线性回归(一种监督学习算法)的示例代码。这个例子中,我们将使用虚构的数据集来预测一个目标变量(y)基于一个特征(X)。
首先,确保你已经安装了scikit-learn库。如果没有安装,你可以使用pip来安装:
pip install scikit-learn
5.1 代码步骤
1:导入必要的库
import numpy as np # 导入numpy库,用于数组操作
from sklearn.model_selection import train_test_split # 导入用于数据集拆分的函数
from sklearn.linear_model import LinearRegression # 导入线性回归模型
from sklearn import metrics # 导入用于评估模型性能的指标计算函数
2:创建虚构的数据集
# 假设我们有一些虚构的数据
# 特征X和目标变量y
X = np.array([[1], [2], [3], [4], [5]]) # 创建特征X的数组
y = np.array([2, 4, 6, 8, 10]) # 创建目标变量y的数组
3:拆分数据集为训练集和测试集
# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size=0.2, random_state=0)
这里,train_test_split函数将数据集X和y拆分为训练集和测试集,其中测试集的大小是原始数据集的20%(test_size=0.2),random_state=0确保每次拆分的结果都是相同的。
4:创建线性回归模型对象
# 创建线性回归模型对象
regressor = LinearRegression()
这里,我们创建了一个线性回归模型对象regressor。
5:使用训练数据拟合模型
# 使用训练数据拟合模型
regressor.fit(X_train, y_train)
使用fit方法,我们将训练数据X_train和y_train用于训练线性回归模型。
6:使用测试数据进行预测
# 使用测试数据进行预测
y_pred = regressor.predict(X_test)
使用predict方法,我们根据测试数据X_test进行预测,并将预测结果存储在y_pred中。
7:输出模型的系数和截距
# 输出模型的系数和截距
print('系数: \n', regressor.coef_)
print('截距: \n', regressor.intercept_)
这里,我们打印出线性回归模型的系数(斜率)和截距。
8:评估模型性能
# 评估模型性能
print('均方误差: ', metrics.mean_squared_error(y_test, y_pred))
print('均方根误差: ', np.sqrt(metrics.mean_squared_error(y_test, y_pred)))
我们使用均方误差(MSE)和均方根误差(RMSE)来评估模型的性能。mean_squared_error函数计算了预测值y_pred和实际值y_test之间的均方误差,然后我们计算其平方根得到均方根误差。
在这个例子中,我们首先导入了必要的库,并创建了一些虚构的数据。然后,我们使用train_test_split函数将数据集拆分为训练集和测试集。
接着,我们创建了一个LinearRegression对象,并使用训练数据拟合了这个模型。
最后,我们使用测试数据进行了预测,并打印出了模型的系数、截距以及均方误差和均方根误差来评估模型的性能。
请注意,这个示例非常基础,实际使用中你可能需要处理更复杂的数据集,包括数据清洗、特征工程、模型选择和调优等多个步骤。此外,对于非线性关系或更复杂的问题,你可能需要使用其他类型的回归模型或分类模型
5.2 输出结果
这段代码使用了线性回归模型来拟合虚构的数据集,并评估了模型的性能。
由于数据点之间的关系是线性的(y = 2 * X),线性回归模型应该能够完美地拟合训练数据,并且对于测试数据也能做出准确的预测。
因此,输出模型的系数和截距时,系数应该接近2(因为y是X的两倍),截距应该接近0(因为没有常数项偏移)。均方误差和均方根误差都应该接近0,因为模型应该能完美地预测测试数据点。
所以,可能的输出结果是:
系数: [[2.]]
截距: [0.]
均方误差: 0.0
均方根误差: 0.0
请注意,由于代码使用了随机种子random_state=0,实际输出结果将与上面的结果相同(前提是scikit-learn库的版本和行为没有变化)。如果没有指定随机种子,则每次运行代码时,由于数据集的随机分割,结果可能会有所不同,但在这个特定情况下,由于数据集的简单性,结果仍然很可能接近完美。
5.3 完整代码
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn import metrics # 假设我们有一些虚构的数据
# 特征X和目标变量y
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 6, 8, 10]) # 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) # 创建线性回归模型对象
regressor = LinearRegression() # 使用训练数据拟合模型
regressor.fit(X_train, y_train) # 使用测试数据进行预测
y_pred = regressor.predict(X_test) # 输出模型的系数和截距
print('系数: \n', regressor.coef_)
print('截距: \n', regressor.intercept_) # 评估模型性能
print('均方误差: ', metrics.mean_squared_error(y_test, y_pred))
print('均方根误差: ', np.sqrt(metrics.mean_squared_error(y_test, y_pred)))
总结:
通过本文的详细阐述,我们全面了解了监督学习这一强大的机器学习技术。
从初步的概念引入,到具体的学习步骤,再到优缺点及适用场景的剖析,我们逐步深入,逐渐揭开了监督学习的神秘面纱。
同时,我们也详细探讨了回归学习和分类学习这两种主要的监督学习方式,并通过具体的代码示例,让读者更加直观地感受到监督学习的实际应用。
监督学习以其卓越的预测能力和广泛的应用领域,成为了机器学习领域的重要分支。
在未来的发展中,随着数据量的不断增大和算法的不断优化,监督学习将会在更多领域发挥更大的作用。
希望本文能够为广大机器学习爱好者提供一个入门和深入学习的参考,帮助大家更好地掌握监督学习,为未来的智能时代做好准备。
这篇文章到这里就结束了
谢谢大家的阅读!
如果觉得这篇博客对你有用的话,别忘记三连哦。
我是豌豆射手^,让我们我们下次再见