基于python的机器学习(一)—— 基础知识(Scikit-learn安装)
目录
一、机器学习基础
1.1 机器学习概述
1.2 监督学习、无监督学习和强化学习
1.3 聚类、分类、回归、标注
1.3.1 聚类
1.3.2 分类
1.3.3 回归
1.3.4 标注
1.4 机器学习、人工智能和数据挖掘
1.5 机器学习的三个要素
二、Scikit-learn 机器学习库
2.1 Scikit-learn 介绍
2.2 Scikit-learn 安装
2.3 Scikit-learn 估计器
三、机器学习的一般过程
3.1 收集相关样本
3.2 特征提取
3.3 构建模型
3.3.1 模型选择
3.3.2 模型训练
3.4 评估模型的有效性
3.5 使用模型预测新样本
四、训练集、验证集和测试集
五、机器学习常见名词
六、机器学习的预处理环节
一、机器学习基础
1.1 机器学习概述
机器学习是一种人工智能的分支,涉及如何通过计算机算法使计算机系统从经验中学习,并根据学习到的知识来自主地进行决策和预测。与传统的程序编程不同,机器学习使用数据和统计分析来训练模型,使计算机能够自动学习和改进其性能。
机器学习可以分为监督学习、无监督学习和强化学习。在监督学习中,计算机通过训练数据和预先定义的目标来学习,目标是将输入数据映射到预测输出。在无监督学习中,计算机从无标签的数据中发现模式和结构。强化学习是一种通过与环境进行交互学习的方法,系统通过尝试和错误来最大化获得奖励的策略。
机器学习在各种领域中都有广泛的应用,如自然语言处理、图像和语音识别、推荐系统、金融预测、医疗诊断等。通过机器学习,计算机可以自动处理和分析大量的数据,提供智能化的解决方案和决策支持。
1.2 监督学习、无监督学习和强化学习
监督学习、无监督学习和强化学习是机器学习中的三种主要学习方式。
-
监督学习(Supervised Learning):在监督学习中,算法接收由输入数据和对应的标签或输出数据组成的训练数据。算法通过学习输入数据和对应的标签之间的关系,来建立一个预测模型,用于预测未知的输入数据的标签或输出。监督学习的目标是使预测模型能够在新数据上具有良好的泛化能力,即能够准确地预测未知数据的标签或输出。
-
无监督学习(Unsupervised Learning):在无监督学习中,算法接收的训练数据只包含输入数据,没有对应的标签或输出数据。算法的任务是从输入数据中发现隐藏的结构、模式或规律,以便对数据进行分类、聚类或降维等操作。无监督学习的目标是探索数据的内在特征,发现数据中的潜在关系,并提供对数据的洞察和理解。
-
强化学习(Reinforcement Learning):在强化学习中,算法通过与环境进行交互,从环境中获得奖励或惩罚的反馈信号来学习行为的最佳策略。算法通过尝试不同的行动,并根据获得的奖励或惩罚信号来调整自己的决策策略,以最大化长期累积的奖励。强化学习的目标是使算法能够在动态、复杂的环境中自主学习和决策,以达到最优的行为策略。
-
半监督学习(Semi-supervised Learning):半监督学习是一种机器学习的方法,它利用了有标签数据和无标签数据来进行模型训练。在半监督学习中,通过使用未标记的数据来学习未标记数据的分布,它可以提高模型的性能和泛化能力,从而提供额外的信息,帮助模型更好地学习。
监督学习常用于分类、回归和预测等任务;无监督学习常用于数据聚类、降维和异常检测等任务;强化学习常用于控制和决策问题,如智能游戏、机器人控制和交通信号优化等;半监督学习常用于图像分类、文本分类、网络分析等。
1.3 聚类、分类、回归、标注
1.3.1 聚类
聚类(clustering):用于将样本数据按照某种相似性划分为多个簇,将相似的样本划分到同一个簇中。聚类属于无监督学习,它的训练数据没有标签,但经预测后的数据会被标记上标签,该标签就是它所属的簇号。
1.3.2 分类
分类:是机器学习中应用最广泛的任务,它用于将某个样本判定为属于预先设定的多个类别中的某一个。分类属于监督学习,数据的标签是预设的类别号,根据预设的类别数目,分类模型可分为二分类和多分类。如果要预测某人人脸识别是否和身份证上的一致,则属于二分类问题;如果要通过人脸识别预测某人是否为逃犯库中的某个逃犯,则属于多分类问题。
机器学习的类型有多种分类方法,最常见的方法是根据学习方式的不同分类,可分为监督学习、无监督学习、半监督学习、强化学习和深度学习。
1.3.3 回归
回归:最初是统计学中的一种方法,回归模型的预测结果不是看它属于哪一类,而看它是什么值,可以看作将分类模型的类别数无限增加,即标签值不再是几个离散值,而是连续的值。例如预测一套二手房的房价,因为房价是一组连续的值,所以这是一个回归问题。回归也属于监督学习。
1.3.4 标注
标注:标注模型用于处理前后有关联关系的序列问题。在预测时,它的输入是一个观察序列,该观察序列中的元素一般具有前后关联关系。它的输出是一个标签序列。也就是说,标注模型的输出是一个向量,该向量的每个元素是一个标签,标签的值是有限的离散值。分类问题的输出是一个值,而标注问题的输出是一个向量,向量的每个值属于一种标记类型。标注模型常用于自然语言处理问题,因为一个文本句子中的词出现的位置是相关联的。可以认为标注模型是分类模型的一个推广,也属于监督学习范畴。标注常用的机器学习方法有隐马尔可夫模型、条件随机场。
1.4 机器学习、人工智能和数据挖掘
机器学习、人工智能和数据挖掘是三个相关但不完全相同的概念。
机器学习是人工智能的一个子领域,它研究如何让计算机通过学习数据和经验,自动地改进其性能和行为。机器学习算法可以通过大量数据进行训练,从而使计算机能够自动发现数据之间的模式和规律,并根据这些模式和规律做出预测或进行决策。
人工智能是一门研究如何使计算机模拟人类智能的学科。它涵盖了机器学习,还包括其他技术,如知识表示、推理、自然语言处理和计算机视觉等。人工智能的目标是让计算机能够具备类似人类的智能,能够理解、学习、推理和解决各种问题。
数据挖掘是从大量数据中发现有价值的信息和模式的过程。它使用各种技术和方法,如机器学习、统计分析和模式识别等,来探索数据中的隐藏模式、趋势和关联性。数据挖掘在实践中经常与机器学习密切相关,因为机器学习算法通常被用于从数据中挖掘模式和建立预测模型。
1.5 机器学习的三个要素
机器学习的三个要素是模型、策略和算法。
-
模型:模型是机器学习的核心组成部分,它是对输入数据和输出数据之间关系的一种数学表达。模型可以是线性模型、非线性模型、决策树、神经网络等,用来描述和预测数据的特征和变化。选择合适的模型对于机器学习的性能和准确性至关重要。
-
策略:策略是机器学习的目标和约束条件,它决定了模型的优化方向和目标函数。常见的策略包括最小化误差、最大化效用、最小化风险等。策略的选择和定义是根据具体的问题和应用,以及数据的特性和要求来确定的。
-
算法:算法是机器学习的计算方法和步骤,用于训练和优化模型。机器学习算法可以分为监督学习、无监督学习和强化学习等不同类型,每种类型的算法都有自己的特点和适用范围。算法的选择和调优对于机器学习的性能和效果至关重要。
这三个要素相互作用,共同构建了机器学习的框架和流程。
二、Scikit-learn 机器学习库
2.1 Scikit-learn 介绍
Scikit-learn是一个用于机器学习的开源Python库。它建立在NumPy、SciPy和matplotlib之上,提供了各种各样的机器学习算法和工具,包括分类、回归、聚类、降维、模型选择、数据预处理等。
Scikit-learn提供了简单而一致的API,使得使用和实验各种机器学习算法变得十分方便。它支持各种常见的机器学习任务,包括监督学习(如分类和回归)、无监督学习(如聚类和降维)和半监督学习。它还提供了用于模型评估和调优的工具,如交叉验证、网格搜索和性能度量等。
Scikit-learn内置了许多经典的机器学习算法,如线性回归、逻辑回归、决策树、随机森林、支持向量机、K均值聚类等。它还提供了一些特征选择方法、特征提取方法和数据预处理方法,帮助用户对数据进行处理和准备。
2.2 Scikit-learn 安装
要安装Scikit-learn,请按照以下步骤进行操作:
-
确保你已经安装了Python和pip。Scikit-learn是一个Python库,所以你需要先安装Python。可以看之前讲过的文章,链接如下:https://love-xin.blog.csdn.net/article/details/132400335https://love-xin.blog.csdn.net/article/details/132400335
-
打开终端或命令提示符,运行以下命令来安装Scikit-learn:
pip install -U scikit-learn
这将从Python Package Index(PyPI)下载并安装最新版本的Scikit-learn。
-
安装完成后,你可以使用以下命令来验证Scikit-learn是否成功安装:
python -c "import sklearn; print(sklearn.__version__)"
如果没有出现任何错误,并且显示了安装的Scikit-learn版本号,那么说明安装成功。
-
安装完成后,可以使用以下代码在 Python 中导入Scikit-learn库:
import Scikit-learn
2.3 Scikit-learn 估计器
估计器是scikit-learn中的机器学习算法的基本建模工具。估计器接受输入数据作为训练集,并根据选择的算法来建立模型。它是一个Python类,实现了fit()和predict()等方法。
Scikit-learn 估计器的常见方法包括:
-
fit(X, y):用于从训练数据中学习模型的参数。接受两个参数,X为特征数据,y为目标变量。
-
predict(X):用于根据学习到的模型进行预测。接受一个参数X,为需要进行预测的特征数据。
-
score(X, y):用于计算模型在给定数据集上的性能指标。接受两个参数,X为特征数据,y为目标变量。
-
transform(X):用于对数据进行转换。接受一个参数X,为需要转换的数据。适用于特征转换器。
-
fit_transform(X):用于训练模型并对数据进行转换。接受一个参数X,为需要转换的数据。适用于特征转换器。
-
predict_proba(X):用于返回分类模型的预测概率。接受一个参数X,为需要进行预测的特征数据。适用于分类模型。
-
set_params(**params):用于设置估计器的参数。接受一个或多个关键字参数,用于设置参数的值。
-
get_params():用于获取估计器的参数。返回一个字典,包含当前估计器的参数设置。
三、机器学习的一般过程
3.1 收集相关样本
收集机器学习相关样本可以通过以下几种方式进行:
-
网络爬虫:使用网络爬虫程序从互联网上的各个网站上收集相关数据。可以选择特定领域的网站,或者利用搜索引擎进行数据搜索。
-
公共数据集:有许多公共数据集可以供机器学习研究使用,例如UCI Machine Learning Repository和Kaggle等网站提供了各种类型的数据集供用户下载使用。
-
传感器数据:使用传感器(如摄像头、声音传感器、加速度计等)收集现实世界中的数据。这种方法通常用于物体识别、人脸识别等任务。
-
人工标注:通过人工的方式对数据进行标注,例如对图像进行分类、对文本进行情感分类等。但是,这种方式需要耗费较多的时间和人力成本。
3.2 特征提取
在机器学习中,特征提取是指从原始数据中提取出有用的特征,以便用于训练模型和进行预测。特征提取可以帮助机器学习算法更好地理解数据,并提高模型的性能和准确率。
以下是一些常见的特征提取方法:
-
数值特征提取:对于数值型的特征,可以直接使用原始数据作为特征。例如,对于身高和体重这样的数值特征,直接使用数值作为特征即可。
-
类别特征提取:对于类别型的特征,可以使用独热编码或标签编码进行特征提取。独热编码将每个类别转换为一个独立的二进制特征,而标签编码将每个类别映射为一个整数。
-
文本特征提取:对于文本型的特征,可以使用词袋模型或TF-IDF模型进行特征提取。词袋模型将文本转换为词汇表中单词的计数向量,而TF-IDF模型则考虑了词频和文档频率,以更好地表示文本特征。
-
图像特征提取:对于图像型的特征,可以使用卷积神经网络(CNN)进行特征提取。CNN可以自动学习图像的特征表示,并提取高层次的语义特征。
-
时间序列特征提取:对于时间序列型的特征,可以使用滑动窗口或时间相关统计量进行特征提取。滑动窗口可以将时间序列切分为固定长度的子序列,并计算每个子序列的统计特征。
3.3 构建模型
选择合适的机器学习算法,根据数据特征和任务需求,使用训练数据对模型进行训练。
3.3.1 模型选择
机器学习的模型选择是指从众多可供选择的机器学习算法中,选择一个最适合解决特定问题的算法。这个选择过程是基于问题的特征、数据集的大小、数据类型、模型的复杂度和训练时间等一系列因素进行的。
以下是一些常见的机器学习模型:
-
线性模型:线性回归、逻辑回归等。适用于线性关系较为明显的问题。
-
决策树:通过一系列的判断条件划分数据集,是一种直观且易解释的模型。
-
支持向量机(SVM):通过寻找一个最优超平面来实现分类或回归。
-
集成方法:如随机森林和梯度提升树等,通过组合多个模型来提高预测性能。
-
神经网络:包括多层感知机、卷积神经网络和循环神经网络等,能够处理复杂的非线性关系。
-
贝叶斯网络:用概率模型描述变量之间的依赖关系。
在选择模型时,需要考虑以下几个因素:
-
数据集的大小和类型:如果数据集较小,简单的模型可能更适合,而对于大型数据集,可以考虑更复杂的模型。
-
模型的复杂度:如果问题的特征较简单,选择一个简单的模型可以避免过拟合。
-
训练时间和计算资源:一些模型需要大量的计算资源和时间来训练,因此需要考虑可用的计算资源和时间限制。
3.3.2 模型训练
使用训练数据集来迭代优化模型的参数和权重。每次迭代,将训练数据传入模型进行预测,并根据损失函数计算预测结果与真实标签之间的差异。然后,使用优化算法(如梯度下降)来调整模型的参数和权重,使损失函数最小化。
3.4 评估模型的有效性
评估模型的有效性是为了确定训练出的模型在真实世界中的表现如何。以下是常见的评估模型有效性的方法:
-
留出法(Hold-Out):将原始数据集划分为训练集和测试集。训练集用于模型的训练和参数调优,测试集用于评估模型的性能。通常,训练集占总数据的70%-80%,测试集占20%-30%。
-
交叉验证(Cross-Validation):将原始数据集划分为K个子集,每次将其中一个子集作为测试集,其余作为训练集,重复K次。最后,将K次的评估结果取平均值作为模型的性能评估。常见的交叉验证方法有K折交叉验证和留一交叉验证。
-
自助法(Bootstrap):从原始数据集中有放回地抽取样本,形成新的训练集。被抽取的样本会在新的训练集和测试集中重复出现。重复这个过程多次,最后将各次评估结果取平均值。
-
混淆矩阵(Confusion Matrix):主要用于分类问题的模型评估。将预测结果与真实标签进行比较,计算出真正例(True Positive)、假正例(False Positive)、真反例(True Negative)和假反例(False Negative)的数量。基于混淆矩阵可以计算出准确率、精确率、召回率和F1分数等指标。
-
ROC曲线(Receiver Operating Characteristic Curve):用于二分类问题的模型评估。ROC曲线以真正例率(True Positive Rate,即召回率)为纵轴,假正例率(False Positive Rate)为横轴绘制。可以通过计算曲线下面积(Area Under the Curve,AUC)来评估模型性能,AUC越大,模型性能越好。
-
均方误差(Mean Squared Error):用于回归问题的模型评估。计算模型预测结果与真实值之间的差异的平方和的均值。
3.5 使用模型预测新样本
使用训练好的模型来预测新样本,可以按照以下步骤进行:
-
数据预处理:对于新样本,首先要进行与训练数据相同的预处理步骤。包括特征缩放、缺失值处理、特征转换等。
-
特征提取:根据模型的需求,对新样本进行特征提取。确保提取的特征与训练数据使用的特征相同。
-
模型应用:将预处理和特征提取后的新样本输入到训练好的模型中,得到预测结果。
-
解释预测结果:根据具体问题,解读模型的预测结果。对于分类问题,可以根据概率预测结果确定类别。对于回归问题,直接获取模型的预测值。
注意:
- 预测新样本时要确保使用与训练数据相同的数据处理和特征提取方法,以及相同的模型配置。否则,可能会导致预测结果不准确。
- 对新样本的特征和数据进行归一化、标准化等预处理操作,确保数据的一致性和可比性。
四、训练集、验证集和测试集
在模型训练过程中,通常会将原始数据集划分为训练集、验证集和测试集,以评估模型的有效性和泛化能力。
通常的划分比例是将数据集的大部分(如70%~80%)作为训练集,一小部分(如10%~15%)作为验证集,剩余的一小部分(如10%~15%)作为测试集。这样的划分可以确保训练集足够用于模型的学习,同时也可以提供验证集和测试集来评估模型的性能。
下面对这三个数据集的作用进行详细介绍:
-
训练集(Training set):用于训练模型的数据集。模型通过对训练集的样本进行学习和参数调整来获取知识和模式。训练集的样本数量越多,模型的训练效果通常越好。
-
验证集(Validation set):用于调整模型的超参数(如学习率、正则化参数等)和进行模型选择。在训练过程中,通过在验证集上评估模型的性能,可以根据验证集上的表现选择最好的模型,并调整模型的超参数以获得更好的性能。验证集的目的是帮助选择最佳模型,但不用于模型的训练。
-
测试集(Test set):用于评估模型的泛化能力和预测性能。在模型训练完成后,使用测试集来评估模型在未见过的数据上的性能。通过测试集的评估结果,可以直观地了解模型在实际应用中的表现,并对模型的性能进行评估和比较。
注意:
- 划分数据集时要确保数据的随机性和代表性,以避免样本分布的偏差影响模型的训练和评估结果。
- 在使用验证集进行模型选择和超参数调整时,要注意避免过度拟合验证集,以确保模型的泛化能力。
五、机器学习常见名词
机器学习领域常见的名词:
-
特征(Feature):在机器学习中,特征是指从数据中提取的用于描述样本的属性或指标。特征有助于模型学习样本之间的关系和模式。
-
标签(Label):也称为目标变量,标签是指机器学习模型要预测或分类的变量。标签可以是连续值(回归问题)或离散值(分类或聚类问题)。
-
模型(Model):机器学习模型是通过对训练数据进行学习和拟合来预测新数据的算法。模型由参数和学习算法组成,并可以根据数据进行调整和优化。
-
监督学习(Supervised Learning):监督学习是一种机器学习方法,其中模型使用有标签的训练样本来进行学习和预测。监督学习包括回归和分类问题。
-
无监督学习(Unsupervised Learning):无监督学习是一种机器学习方法,其中模型使用无标签的训练样本进行学习和模式发现。无监督学习包括聚类、降维和关联规则等。
-
泛化能力(Generalization):泛化能力是指机器学习模型对未见过的数据的适应能力。一个具有良好泛化能力的模型能够在未知样本上表现良好,而不仅仅是在训练集上表现好。
-
过拟合(Overfitting):过拟合是指在训练模型时,模型过于复杂或过度拟合训练数据,导致在未知数据上的性能下降。过拟合通常是由于模型过度学习了训练集中的噪声或细节造成的。
-
欠拟合(Underfitting):欠拟合是指模型在训练数据上的性能较差,在训练数据和未知数据上的预测能力较弱。欠拟合通常是由于模型过于简单或者未能捕捉到数据中的关键特征造成的。
-
归一化(Normalization):归一化是数据预处理中的一种常用方法,它将数据缩放到一个特定的范围内,通常是0到1之间。这可以确保数据具有相同的尺度,避免了特征之间的数值差异对模型的影响。
-
标准化(Standardization):标准化是一种将事物、产品或过程按照统一的规则、准则、规范进行统一管理和处理的方法。标准化可以确保产品、服务和过程的质量、可靠性和相容性,以确保满足特定需求和达到一定的标准。
-
正则化(Regularization):正则化是将特征缩放到一个标准范围,使不同特征之间具有相似的尺度,以便更好地进行比较和分析。在某些机器学习算法(如K均值聚类、支持向量机等)中,正则化可以提高算法的性能和收敛速度。
......
六、机器学习的预处理环节
机器学习的预处理环节包括以下几个步骤:数据获取、数据预处理、数据标准化和数据降维。
-
数据获取:这一步骤是指从各种来源收集和获取数据。数据可以来自数据库、文件、传感器、API等。数据的获取方式和来源根据具体的应用场景和需求而定。
-
数据预处理:数据预处理是对原始数据进行清洗和处理的过程。这一步骤的目的是处理缺失值、异常值、重复值等数据问题,并进行数据的筛选、划分和转换。常见的数据预处理操作包括数据清洗、缺失值填充、异常值处理、重复值删除、数据筛选和数据转换等。
-
数据标准化:数据标准化是将不同尺度和范围的数据转化为统一的标准尺度和范围的过程。数据标准化的目的是消除不同特征之间的量纲差异,以便于机器学习算法对数据的处理和分析。常见的数据标准化方法包括最小-最大缩放、标准差标准化等。
-
数据降维:数据降维是通过减少数据的维度,保留数据中最重要和有用的信息,以便于提高计算效率和模型的泛化能力。数据降维可以通过主成分分析(PCA)、线性判别分析(LDA)等方法来实现。