机器学习
机器学习
特点
- 浅层学习,不涉及特征学习,特征来源于人工提取
代码
Sklearn
python的机器学习库鸢尾花数据集(iris dataset)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# 加载数据集
# 鸢尾花数据集(iris dataset)是一个经典的机器学习数据集,其中包含了150个样本,
# 每个样本有四个特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度。
# 这些样本被分为三个类别:山鸢尾(setosa)、变色鸢尾(versicolor)和维吉尼亚鸢尾(virginica)。
# 鸢尾花数据集通常被用来进行分类问题的训练和评估,是机器学习领域常用的基准数据集之一。您可以使用sklearn库中的datasets.load_iris()函数加载这个数据集。
iris = datasets.load_iris()
X = iris.data
y = iris.target
print(X)
print(y)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建线性分类器模型
model = LogisticRegression(max_iter=1) # 迭代次数
# 拟合模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估性能
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: {}".format(accuracy))
基本步骤
- 数据预处理(去掉一些有缺失特征的样本;去掉一些冗余的数据特征;对数值特征进行缩放和归一化;)
- 特征提取:从数据的原始特征中提取一些对特定机器学习任务有用的高质量特征(比如在图像分类中提取边缘)
- 特征转换:对特征进行进一步的加工,比如降维和升维,降维包括特征抽取和特征选择。常用特征转换方法有主成分分析(PCA)和线性判别(LDA)
- 预测:学习一个函数并进行预测
线性模型
线性模型是机器学习中应用最广泛的模型,指通过样本特征的线性组合来进行预测的模型,给定一个D维样本 $x = [x_1,…,x_D]^T$ , 其线性组合(判别)函数为
$$
f(x;w) = w_1x_1 + w_2x_2 + … + w_Dx_D + b
= w^Tx + b
$$
其中 $w = [w_1,…,w_D]$ 为 D维的权重向量,b为偏置
对于分类问题,要在线性组合函数的基础上引入非线性的决策函数 $g()$ 来预测输出目标
$$
y = g(f(x;w))
$$
一个 线性分类模型 主要由 一个或多个线性的判别函数 和 非线性的决策函数 组成
接下来介绍四种不同的线性分类模型(线性分类器):Logistic回归、Softmax回归、感知机、支持向量机。主要区别在于使用了不同的损失函数
训练数据集是线性可分
当说训练数据集是线性可分的时,意味着在数据集中存在一个能够清晰划分两个或多个类别的线性决策边界。
换句话说,存在一个线性函数或平面,可以将不同类别的样本有效地分开。这意味着在特征空间中,不同类别的样本在一定程度上能够被一条直线、平面或超平面等线性边界分开。
如果训练数据集是线性可分的,则意味着使用线性分类器(例如线性回归、逻辑回归、支持向量机等)能够很好地对数据进行分类或预测
如果数据集不是线性可分的,就需要使用更复杂的模型或非线性技术来处理数据。
机器学习算法
机器学习算法分类:监督学习、无监督学习、强化学习
监督学习算法 (Supervised Algorithms) 在监督学习训练过程中,可以由训练数据集学到或建立一个模式(函数 / learning model),并依此模式推测新的实例。该算法要求特定的输入/输出,首先需要决定使用哪种数据作为范例。例如,文字识别应用中一个手写的字符,或一行手写文字。主要算法包括神经网络、支持向量机、最近邻居法、朴素贝叶斯法、决策树等。
无监督学习算法 (Unsupervised Algorithms) 这类算法没有特定的目标输出,算法将数据集分为不同的组。
强化学习算法 (Reinforcement Algorithms) 强化学习普适性强,主要基于决策进行训练,算法根据输出结果(决策)的成功或错误来训练自己,通过大量经验训练优化后的算法将能够给出较好的预测。类似有机体在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的预期,产生能获得最大利益的习惯性行为。在运筹学和控制论的语境下,强化学习被称作“近似动态规划”
基本的机器学习算法:线性回归、支持向量机(SVM)、最近邻居(KNN)、逻辑回归、决策树、k平均、随机森林、朴素贝叶斯、降维、梯度增强
分类:K近邻、决策树、随机森林、朴素贝叶斯、GBDT、支持向量机等;
聚类:k均值聚类算法(K-Means)、基于密度聚类(DBSCAN)等;
回归:逻辑回归、线性回归;
降维:主成分分析算法(PCA)、LDA、局部线性嵌入(LLE)等
线性回归(Linear Regression)
什么是回归问题
线性回归算法(Linear Regression)的建模过程就是使用数据点来寻找最佳拟合线
- 多元线性回归
多元线性回归是回归分析中的一种复杂模型,它考虑了多个输入变量对输出变量的影响。与一元线性回归不同,多元线性回归通过引入多个因素,更全面地建模了系统关系。
多元线性回归模型的表达式为:$f ( x ) =\mathbf{k^T}\mathbf{x}+b$
其中,$\mathbf{x}$为输入向量,包含多个特征(自变量);$f(\mathbf{x})$为模型的输出或响应(预测的目标变量);$\mathbf{k^T}$ 为特征权重;$b$为是模型的截距或偏置;我们的目标是通过学习$\mathbf{k^T}$ 和 $b$ 使得 $f(\mathbf{x})$ 尽可能的接近真实观测值 $\mathbf{y}$
直白点说:首先求出当前模型的 所有采样点上的预测值𝑤𝑥(𝑖) +𝑏与真实值𝑦(𝑖)之间的差的平方和作为总误差ℒ,然后搜索一组参数𝑤∗,𝑏∗使得ℒ最小,对应的直线就是我们要寻找的最优直线
- 实现方式
全局梯度下降
梯度下降法是一种迭代算法。选取适当的初值x(0),不断迭代,更新x的值,进行目标函数(也是线性回归的损失函数)的极小化,直到收敛。(它从一个初始点开始,反复使用某种规则从移动到下一个点,构造这样一个数列,直到收敛到梯度为0的点处,即梯度下降算法)
由于负梯度方向时使函数值下降最快的方向,在迭代的每一步,以负梯度方向更新x的值,从而达到减少函数值的目的
线性回归一般选择的是MSE(均方误差)
均方误差是预测值与真实值之间差值的平方的平均值
学习率在梯度下降法中的作用
我们可以通过 𝜼 来控制每一步走的距离
- 以保证不要走的太快,错过了最低点
- 同时也要保证收敛速度不要太慢
逻辑回归(Logistic regression)
逻辑回归和线性回归区别:
逻辑回归:
- 逻辑回归是一种用于分类问题的模型,而不是回归问题。它用于预测二元分类或多元分类的概率。
- 损失函数通常是对数损失函数(log loss),也称为交叉熵损失函数(cross-entropy loss)。
- 目标是最大化似然函数或最小化损失函数,通常通过梯度下降等方法实现。
- 相比较线性回归的连续值直接求解,在逻辑回归中,还需要使用Sigmoid函数将回归方程映射成概率进行分类
- 它通过使用逻辑函数(如Sigmoid函数)将线性回归的输出值映射到0和1之间,从而表示概率。
线性回归:
- 线性回归用于预测连续型变量的值,是一种回归模型。
- 损失函数通常是均方误差(Mean Squared Error,MSE)。
- 目标是最小化损失函数,通过梯度下降等方法实现。
KNN算法(最近邻居/k-近邻算法,K-Nearest Neighbors)
口诀:近朱者赤,近墨者黑
KNN算法是一种基于实例的学习,或者是局部近似和将所有计算推迟到分类之后的惰性学习。KNN主要用于分类问题
用最近的邻居(k)来预测未知数据点。k 值是预测精度的一个关键因素,无论是分类还是回归,衡量邻居的权重都非常有用,较近邻居的权重比较远邻居的权重大
ex. 假设k = 5,代表用周围5个点来估计未知数据点的类别,这5个点中比例最高的类别即为该预测类别
需要想办法来计算两个样本之间的距离或者相似度,之后才能选出最相近的样本。欧氏距离是一个最简单常用的方法
怎么确定K值
确定KNN算法的K值通常需要通过交叉验证
- 将数据集分成K份(通常K取5或10),每次选择其中一份作为验证集,剩下的K-1份作为训练集。
- 对于每个K值,重复K次交叉验证,计算模型在验证集上的性能指标(如准确率、F1分数等)的平均值。
- 根据性能指标的表现选择最优的K值。
决策树(Decision Tress)
- 决策树(Decision tree)是一种特殊的树结构,由一个决策图和可能的结果(例如成本和风险)组成,用来辅助决策。
- 机器学习中,决策树是一个预测模型,树中每个节点表示某个对象,而每个分叉路径则代表某个可能的属性值,而每个叶节点(也是类别)则对应从根节点到该叶节点所经历的路径所表示的对象的值。
- 决策树仅有单一输出,通常该算法用于解决分类问题。
决策树节点的划分
熵:代表一个系统的混乱程度,越混乱熵越高
划分依据:最大化信息增益(熵)
比较多个特征的信息增益,选择信息增益最大的特征作为根节点进行划分。然后,重复这个过程,对每个子节点进行划分,直到满足停止条件(如节点包含的样本数小于预定义阈值)为止
信息增益的计算步骤:
- 计算每个类别的信息熵
- 求离散的特征属性值 a 对数据集 D 的条件信息熵
- 计算信息增益
k-平均算法(K-Means)
口诀:物以类聚,人以群分
k-平均算法(K-Means)是一种无监督学习算法,为聚类问题提供了一种解决方案。
K-Means 算法把 n 个点(可以是样本的一次观察或一个实例)划分到 k 个集群(cluster),使得每个点都属于离他最近的均值(即聚类中心,centroid)对应的集群。重复上述过程一直持续到重心不改变。
计算过程如下:
分配阶段:对每个数据点,计算其与每个类中心的距离,然后将其分配到距离最近的类中心所对应的类里。
更新阶段:对于每个类,根据该类中所有数据点的均值计算新的类中心。假设某个类包含的数据点集合为 𝑆, 其中包含 𝑛 个数据点,则该类的新的类中心 $𝐶_𝑗$ 可以通过以下公式计算得到, $𝑥_𝑖$ 是数据点集合 $S$ 中的第 $i$ 个数据点到类中心的距离
$$
[ C_j = \frac{1}{n} \sum_{i=1}^{n} x_i ]
$$
- 重复迭代:重复执行分配和更新阶段,直至达到停止条件为止。停止条件可以是类中心不再发生变化,即算法收敛;或者是达到最大迭代次数。
总结:通过迭代地移动簇中心(质心)来最小化每个点到其簇中心的距离之和。
预测新的未知数据点:迭代每类的聚类(簇)中心,计算该样本点距离每个中心的距离,距离最近的点即为该样本的类别
聚类和分类问题的区别
- 聚类是一种无监督学习,而分类是一种有监督的学习。
- 聚类只需要人工指定相似度的标准和类别数就可以,而分类需要从训练集学习分类的方法
SVM (支持向量机,Support Vector Machine)
基本想法 是求解能够正确划分训练数据集并且几何间隔最大的分离超平面
最大化类别间隔实现分类
支持向量 是指训练样本中,与分类超平面最近的数据点。其是训练数据的子集同时也是最难分类的点
SVM 模型将实例表示为空间中的点,将使用一条直线分隔数据点。需要注意的是,支持向量机需要对输入数据进行完全标记,仅直接适用于两类任务,如果是多类任务需要减少到几个二元问题 或者 修改损失函数比如使用softmax
支持向量机包含几种模型
主要是根据训练数据集是否线性可分以及是否允许出现分类错误进行划分的。主要包含以下三种模型:
硬间隔支持向量机:当训练数据线性可分时,硬间隔最大化不允许出现分类错误,此时超平面将所有训练数据集都分类正确,所以叫硬间隔支持向量机
软间隔支持向量机:当训练数据近似线性可分时,软间隔最大化允许出现分类错误,此时超平面不能将所有训练数据点都分类正确,所以叫软间隔支持向量机
非线性支持向量机:当训练数据线性不可分时,通过使用核函数和软间隔最大化对数据进行分类
硬间隔软间隔
间隔(margin)就是指决策面(y=0)与任意训练数据点之间的最小距离。
硬间隔是指SVM在分类中不允许出现分类错误。通俗点,硬间隔就是训练集中的任何数据点不允许出现在间隔内,即两条蓝线之间,但数据点可以出现在蓝色线上,这些点叫支持向量。
软间隔是指SVM在分类中允许出现分类错误的点,如下图所示。这些圈出的数据点都是支持向量,但是其中两个点不在蓝线上,一个在间隔内,另一个被分类错误(黑色直线所指的两个点)。软间隔允许这种情况存在,硬间隔则不允许。
SVM的优化
更好得找出混在正类中的负类 以及 混在负类中的正类
增加惩罚项
使用核函数
通俗解释:如果想把混在一起的沙子和黄豆分开,可以用力一拍,用于弹起后的高度不同,因此可以据此将其分开
集成算法
构建多个学习器,然后通过一定策略结合把它们来完成学习任务的,常常可以获得比单一学习显著优越的学习器。
集成学习通过训练学习出多个估计器
预测时通过结合器将多个估计器的结果整合起来当作最后的结果输出。
即训练时用多种分类器一起完成同一份任务,测试时对待测试样本分别通过不同的分类器,汇总最后的结果。
集成学习的优势: 是提升了单个估计器的通用性与鲁棒性,比单个估计器拥有更好的预测性能并且能更好得防止过拟合。集成学习的另一个特点是能方便的进行并行化操作
集成算法一般分为三类:Bagging,Boosting,Stacking(我们可以把它简单地看成并行,串行和树型)
Bagging 并行
Bagging的全称是bootstrap averaging,它把各个基模型的结果组织起来
随机森林(Random Forest)
随机:数据采样随机,特征选择随机(每次数据集是随机有放回的选出,同时随机选出部分特征作为输入)
森林:很多个决策树并行放在一起
随机森林可以看作一个决策树的集合,随机森林中每棵决策树估计一个分类,这个过程称为 “投票(vote)”。理想情况下,我们根据每棵决策树的每个投票,选择最多投票的分类
投票策略:软投票与硬投票
硬投票:直接用类别值,少数服从多数。
软投票:各自分类器的概率值进行加权平均
用随机的方式建立一个决策树的森林。当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行判断,预测时使用投票结果最多的分类,也是少数服从多数的算法。
随机森林优势:
- 它能够处理很高维度(feature很多)的数据,并且不用做特征选择。
- 在训练完后,它能够给出哪些feature比较重要。
- 容易做成并行化方法,速度比较快。
- 可以进行可视化展示,便于分析。
和决策树区别
BaggingClassifier/BaggingRegressor
是从原始数据集抽选S次(抽取实例,抽取属性),得到S个新数据集(有的值可能重复,有的值可能不出现)。使用同一模型,训练得到S个分类器,预测时使用投票结果最多的分类
VotingClassifier
可选择多个不同的基模型,分别进行预测,以投票方式决定最终结果。
Boosting 串行
从弱学习器开始加强,通过加权来进行训练。新模型是在旧模型的基本上建立的
Boosting相当于串联电路,先需要做好第一个模型,再做第二个,再做第三个,按照顺序一步一步做。
AdaBoost自适应提升算法
它对分类错误属性的给予更大权重,再做下次迭代,直到收敛
Gradient Boosting Machine(简称GBM)梯度提升算法
它通过求损失函数在梯度方向下降的方法,层层改进,sklearn中也实现了该算法GradientBoostingClassifier/GradientBoostingRegressor。GBM是目前非常流行的一类算法。
降维算法(Dimensional Reduction)
降维其更深层次的意义在于有效信息的提取综合及无用信息的摈弃。
数据降维算法是机器学习算法中的大家族,与分类、回归、聚类等算法不同,它的目标是将向量投影到低维空间,以达到某种目的如可视化,或是做分类。
数据降维就是寻找一个映射函数f,将高维向量x映射成低维向量y
$$
f : (x) -> (y)
$$
如何确定这个映射函数,是降维算法核心,它们往往根据不同的准则进行构造。
降维算法分类
目前已经存在大量的数据降维算法,可以从另个不同的维度对它们进行分类。
按照是否有使用样本的标签值,可以将降维算法分为有监督降维和无监督降维;
按照降维算法使用的映射函数,可以将算法分为线性降维与非线性降维;
无监督降维算法不使用样本标签值,因此是一种无监督学习算法,其典型代表是PCA;
有监督的降维算法则使用了样本标签值,是一种有监督学习算法,其典型代表是LDA;
线性降维算根据样本集构造出线性函数完成向低维空间的映射。一般通过对向量x进行线性变换即左乘一个投影矩阵W而得到结果向量y
$$
y = W x
$$
非线性降维算法则构造一个非线性映射完成数据的降维。很多时候数据是非线性的,因此需要使用非线性降维算法以取得更好的效果。
LAD算法(线性判别分析法)
Linear Discriminant Analysis
线性、有监督降维算法
LDA降维的目标:将带有标签的数据降维,投影到低维空间同时满足三个条件:
- 尽可能多地保留数据样本的信息(即选择最大的特征是对应的特征向量所代表的的方向)。
- 寻找使样本尽可能好分的最佳投影方向。
- 投影后使得同类样本尽可能近,不同类样本尽可能远。
思想: 投影之后同类的样本尽量集中,不同类的样本尽量分开
衡量指标: 类间散度/类内散度最大
PCA算法(主成分分析法)
从线性代数几何角度看降维(上):主成分分析(PCA)应用于降维
线性、无监督降维算法
主成分分析(Principal Component Analysis,PCA)是一种常用的降维技术,用于将高维数据转换为低维数据,同时保留数据集中的最大方差。PCA通过找到数据中的主成分(即数据最大方差方向) 来实现这一目标
从而可以减少数据集的特征数量,减少数据的维度,降低计算和存储开销,并帮助提高模型的泛化能力
PCA算法思想: 是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征
实现方法:
PCA算法有两种实现方法:
- 基于特征值分解 协方差矩阵 实现PCA算法
- 基于SVD分解 协方差矩阵 实现PCA算法
步骤
- 因为要提高计算效率和去除冗余特征,所以我们要做降维
- 由于特征之间存在相关性,所以不能直接通过扔掉部分特征来做降维
- 因此要先做特征转换,转换后的特征要满足彼此不相关
- 要令转换后的新特征不相关,体现在新特征的协方差矩阵要为对角矩阵(reason:协方差矩阵的对角线元素表示各个特征自身的方差,而非对角线元素表示特征之间的协方差。如果新特征不相关,那么它们的协方差应该为零,因此协方差矩阵的非对角线元素都为零,整个矩阵成为对角矩阵。)
- 接下来要开始扔特征(主成分),达到降维的目标 通常认为方差越大的特征含有的信息量越大,方差小的特征往往是噪声或无用信息