机器学习入门(一)
文章目录
一、机器学习分类
机器学习经过几十年的发展,衍生出了很多种分类方法,这里按学习模式的不同,可分为监督学习、半监督学习、无监督学习和强化学习。
分类模式 | 定义 | 常见算法 | 应用场景 |
---|---|---|---|
监督学习 | 从有标签的训练数据中学习模型,然后对新数据预测标签。分类标签精确度越高,模型准确度越高。 | 回归:线性回归、回归树、K邻近、Adaboost、神经网络 分类:朴素贝叶斯、决策树、SVM、逻辑回归、K邻近、Adaboost、神经网络 | 回归和分类任务 |
半监督学习 | 利用少量标注数据和大量无标注数据进行学习的模式。侧重于在有监督的分类算法中加入无标记样本来实现半监督分类。 | Pseudo-Label、Π-Model、Temporal Ensembling、Mean Teacher、VAT、UDA、MixMatch、ReMixMatch、FixMatch | 半监督分类任务 |
无监督学习 | 从未标注数据中寻找隐含结构的过程。主要用于关联分析、聚类和降维。 | 稀疏自编码(Sparse Auto-Encoder)、主成分分析(PCA)、K-Means算法、DBSCAN算法、最大期望算法(EM) | 关联分析、聚类、降维 |
强化学习 | 通过智能体与环境的交互,通过不断试错进行学习的模式。包含策略、回报函数、价值函数和环境模型等核心要素。 | - | 机器人避障、棋牌类游戏、广告和推荐等 |
1.1 监督学习
监督学习(Supervised Learning)是从有标签的训练数据中学习模型,然后对某个给定的新数据利用模型预测它的标签。如果分类标签精确度越高,则学习模型准确度越高,预测结果越精确。
监督学习主要用于回归和分类。
常见的监督学习的回归算法有线性回归、回归树、K邻近、Adaboost、神经网络等。
常见的监督学习的分类算法有朴素贝叶斯、决策树、SVM、逻辑回归、K邻近、Adaboost、神经网络等。
1.2 半监督学习
半监督学习(Semi-Supervised Learning)是利用少量标注数据和大量无标注数据进行学习的模式。
半监督学习侧重于在有监督的分类算法中加入无标记样本来实现半监督分类。
常见的半监督学习算法有Pseudo-Label、Π-Model、Temporal Ensembling、Mean Teacher、VAT、UDA、MixMatch、ReMixMatch、FixMatch等。
1.3 无监督学习
无监督学习(Unsupervised Learning)是从未标注数据中寻找隐含结构的过程。
无监督学习主要用于关联分析、聚类和降维。
常见的无监督学习算法有稀疏自编码(Sparse Auto-Encoder)、主成分分析(Principal Component Analysis, PCA)、K-Means算法(K均值算法)、DBSCAN算法(Density-Based Spatial Clustering of Applications with Noise)、最大期望算法(Expectation-Maximization algorithm, EM)等。
1.4 强化学习
强化学习(Reinforcement Learning)类似于监督学习,但未使用样本数据进行训练,是是通过不断试错进行学习的模式。
在强化学习中,有两个可以进行交互的对象:智能体(Agnet)和环境(Environment),还有四个核心要素:策略(Policy)、回报函数(收益信号,Reward Function)、价值函数(Value Function)和环境模型(Environment Model),其中环境模型是可选的。
强化学习常用于机器人避障、棋牌类游戏、广告和推荐等应用场景中。
二、scikit-learn工具介绍
- Python语言机器学习工具
- Scikit-learn包括许多智能的机器学习算法的实现
- Scikit-learn文档完善,容易上手,丰富的API接口函数
- Scikit-learn官网:https://scikit-learn.org/stable/#
- Scikit-learn中文文档:https://scikitlearn.com.cn/
- scikit-learn中文社区
scikit-learn安装
参考以下安装教程:https://www.sklearncn.cn/62/
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scikit-learn
三、数据集
3.1 sklearn玩具数据集介绍
数据量小,数据在sklearn库的本地,只要安装了sklearn,不用上网就可以获取
3.2 sklearn现实世界数据集介绍
数据量大,数据只能通过网络获取
3.3 本地csv数据
(1) 创建csv文件
方式1:打开计事本,写出如下数据,数据之间使用英文下的逗号, 保存文件后把后缀名改为csv
csv文件可以使用excel打开
, milage,Liters,Consumtime,target
40920,8.326976,0.953952,3
14488,7.153469,1.673904,2
26052,1.441871,0.805124,1
75136,13.147394,0.428964,1
方式2:创建excel 文件, 填写数据,以csv为后缀保存文件
(2) pandas加载csv
使用pandas的read_csv(“文件路径”)函数可以加载csv文件,得到的结果为数据的DataFrame形式
pd.read_csv("./src/ss.csv")
四、数据集划分
在机器学习项目中,数据集的划分是至关重要的一步。通过合理地将数据集划分为训练集和测试集,我们能够有效地评估模型的性能,避免过拟合或欠拟合。
4.1数据集划分的基本概念
在机器学习中,数据集通常被划分为两部分:训练集(Training Set)和测试集(Test Set)。训练集用于训练模型,而测试集用于评估模型的性能。合理的划分比例和划分方式能够确保模型在未见过的数据上具有良好的泛化能力。
4.2使用 train_test_split
进行数据集划分
train_test_split
是 scikit-learn
库中提供的一个非常方便的工具,用于将数据集随机划分为训练集和测试集。以下是几个简单的示例,展示如何使用 train_test_split
进行数据集划分。
(一)简单数据集的划分
假设我们有一个简单的数据集 x
,包含 10 个样本:
x = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
我们可以使用 train_test_split
将其划分为训练集和测试集:
from sklearn.model_selection import train_test_split
x_train, x_test = train_test_split(x)
print("训练集:", x_train)
print("测试集:", x_test)
运行结果可能如下(由于随机性,结果可能不同):
训练集: [30 80 10 60 20 90]
测试集: [40 50 70 100]
(二)指定划分比例和随机种子
在实际应用中,我们通常会指定训练集和测试集的比例,以及随机种子以确保结果的可重复性。例如,我们可以将数据集划分为 80% 的训练集和 20% 的测试集,并设置随机种子为 42:
x_train, x_test = train_test_split(x, train_size=0.8, shuffle=True, random_state=42)
print("训练集:", x_train)
print("测试集:", x_test)
运行结果将始终一致:
训练集: [10 20 30 40 50 60 70 80]
测试集: [ 90 100]
(三)同时划分特征和标签
在实际的机器学习任务中,我们通常需要同时划分特征(x
)和标签(y
)。假设我们有以下特征和标签:
x = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
y = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
我们可以使用 train_test_split
同时对它们进行划分:
x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.8, shuffle=True, random_state=42)
print("训练集特征:", x_train)
print("测试集特征:", x_test)
print("训练集标签:", y_train)
print("测试集标签:", y_test)
运行结果可能如下:
训练集特征: [10 20 30 40 50 60 70 80]
测试集特征: [ 90 100]
训练集标签: [1 2 3 4 5 6 7 8]
测试集标签: [ 9 10]
4.3 实战应用:鸢尾花数据集的划分
为了更好地理解数据集划分的实际应用,我们以经典的鸢尾花数据集为例。鸢尾花数据集是一个包含 150 个样本的多分类数据集,每个样本有 4 个特征。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 加载鸢尾花数据集
iris = load_iris()
x = iris.data # 特征
y = iris.target # 标签
# 划分数据集
x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.8, shuffle=True, random_state=42)
# 打印划分结果
print("训练集特征形状:", x_train.shape)
print("训练集标签形状:", y_train.shape)
print("测试集特征形状:", x_test.shape)
print("测试集标签形状:", y_test.shape)
print("测试集标签:", y_test)
运行结果可能如下:
训练集特征形状: (120, 4)
训练集标签形状: (120,)
测试集特征形状: (30, 4)
测试集标签形状: (30,)
测试集标签: [0 2 1 0 2 0 0 1 1 1 2 1 0 1 2 0 2 0 2 1 0 2 0 1 2 0 0 2 1 0]