基本概念
1. 机器学习基础
深度学习是机器学习的一个特定分支,大部分机器学习算法都有超参数(在学习算法外设定),如何使用额外的数据设置超参数。
机器学习算法是一种能够从数据中学习的算法。在整个数据集上获取经验,数据集是很多样本组成的集合,也称为数据点。
"学习"是什么?
获取完成任务的能力。Mitchell(1997)提供了一个简洁的定义:“对于某类任务T和性能度量P,一个计算机程序被认为可以从经验E中学习是指,通过经验E改进后,它在任务T上由性能度量P衡量的性能有所提升”。
-
机器学习任务T:机器学习系统 应该如何处理样本(example)。样本是指我们从某些 希望 机器学习系统 处理的的对象或事件 中 收集到的已经量化的特征。常见的机器学习任务:
- (输入缺失 )分类:指定某些输入属于k类中的哪一类。输入缺失分类,是当输入向量的每个度量不被保证的时候,学习算法只需要定义一个从输入向量映射到输出类别的函数。一些输入可能丢失的时候,学习算法必须学习一组函数,而不是单个分类函数,每个函数对应分类具有不同缺失输入子集。
- 回归:给定输入 预测 数值。
- 转录
- 机器翻译,输入是一种语言的符号序列,计算机程序将其转化为另一种语言的符号序列。
- 结构化输出:输出的是向量或者其他包含多个值的数据结构,并且构成输出的这些不同元素间具有重要关系。
- 异常检测:计算机程序在一组事件或对象中国呢筛选,并标记不正常或非典型的个体,例如信用卡欺诈检测。
- 合成和采样:生成一些和训练数据相似的新样本。
-
性能度量P:
- 准确率accuracy:输出正确结果的样本比例;
- 错误率error:输出错误结果的样本比例。
2监督 & 无监督
是否拥有标记信息。
- 监督学习:
- 监督学习是使用已知正确答案的示例来训练网络。已知数据和其一一对应的标签,训练一个预测模型,将输入数据映射到标签的过程。
- 监督式学习的常见应用场景如分类问题和回归问题。
- 深度学习(Deep Learning)也是大多数以监督学习的方式呈现,常见的有监督机器学习算法包括:支持向量机(Support Vector Machine, SVM),朴素贝叶斯(Naive Bayes),逻辑回归(Logistic Regression),K近邻(K-Nearest Neighborhood, KNN),决策树(Decision Tree),随机森林(Random Forest)以及AdaBoost,线性判别分析(Linear Discriminant Analysis, LDA)等。
- 无监督学习:
- 在非监督式学习中,数据并不被特别标识,适用于具有数据集但无标签的情况。学习模型是为了推断出数据的一些内在结构。
- 常见的应用场景包括关联规则的学习以及聚类等。
- 常见算法包括Apriori算法以及k-Means算法
3 模型评估
-
泛化能力:学到的模型适用于未知数据的预测能力,称为"泛化能力"。具有强泛化能力的模型能很好的适用于整个样本空间。泛化误差越小,该模型越有效。
-
过拟合(over-fitting)学习时选择的模型包含的参数过多,以至于出现该模型对于已知数据预测得很好,而对于未知数据预测得很差的现象。模型在训练集上具有较低的误差,在测试集上具有较高的误差,此时模型的方差较大。它通常发生在模型过于复杂的情况下,如参数过多等,会使得模型的预测性能变弱,并且增加数据的波动性。虽然模型在训练时的效果可以表现的很完美,基本上记住了数据的全部特点,但这种模型在未知数据的表现能力会大减折扣,因为简单的模型泛化能力通常都是很弱的。
如何解决过拟合:
- 重新清洗数据,数据不纯会导致过拟合,此类情况需要重新清洗数据。
- 增加训练样本数量。
- 降低模型复杂程度。
- 增大正则项系数。
- 采用dropout方法,dropout方法,通俗的讲就是在训练的时候让神经元以一定的概率不工作。
- early stopping。
- 减少迭代次数。
- 增大学习率。
- 添加噪声数据。
- 树结构中,可以对树进行剪枝。
- 减少特征项。
-
欠拟合(under-fitting)
与过拟合相对,训练集以及测试集上同时具有较高的误差,此时模型的偏差较大。对训练样本的一般性质尚未学好,一般是学习能力低下造成的。欠拟合比较容易克服。
如何解决欠拟合:
- 添加其他特征项。组合、泛化、相关性、上下文特征、平台特征等特征是特征添加的重要手段,有时候特征项不够会导致模型欠拟合。
- 添加多项式特征。例如将线性模型添加二次项或三次项使模型泛化能力更强。例如,FM(Factorization Machine)模型、FFM(Field-aware Factorization Machine)模型,其实就是线性模型,增加了二阶多项式,保证了模型一定的拟合程度。
- 可以增加模型的复杂程度。
- 减小正则化系数。正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。
欠拟合和过拟合这些方法,需要根据实际问题,实际模型,进行选择。
-
偏差,方差,泛化误差:
在机器学习中,Bias(偏差),Error(误差),和Variance(方差):
**误差(Error) **:
- 误差(error):一般地,我们把学习器的实际预测输出与样本的真实输出之间的差异称为“误差”。
- Error = Bias + Variance + Noise,Error反映的是整个模型的准确度。
噪声(Noise)
描述了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。
偏差(Bias)
- Bias衡量模型拟合训练数据的能力(训练数据不一定是整个 training dataset,而是只用于训练它的那一部分数据,例如:mini-batch),Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度。
- Bias 越小,拟合能力越高(可能产生overfitting);反之,拟合能力越低(可能产生underfitting)。
- 偏差越大,越偏离真实数据,如下图第二行所示。
方差(Variance)
- 方差公式: S N 2 = 1 N ∑ i = 1 N ( x i − x ˉ ) 2 S_{N}^{2}=\frac{1}{N}\sum_{i=1}^{N}(x_{i}-\bar{x})^{2} SN2=N1∑i=1N(xi−xˉ)2
- Variance描述的是预测值的变化范围,离散程度,也就是离其期望值的距离。方差越大,数据的分布越分散,模型的稳定程度越差。
- Variance反映的是模型每一次输出结果与模型输出期望之间的误差,即模型的稳定性。
- Variance越小,模型的泛化的能力越高;反之,模型的泛化的能力越低。
- 如果模型在训练集上拟合效果比较优秀,但是在测试集上拟合效果比较差劣,则方差较大,说明模型的稳定程度较差,出现这种现象可能是由于模型对训练集过拟合造成的。 如下图右列所示。
-
**交叉验证法:**S折交叉验证(S-Fold Cross Validation, S-Fold CV):数据随机划分成S个互不相交且大小相同的子集,利用S-1个子集数据训练模型,利用余下的一个子集测试模型(一共有 C s s − 1 = S C _{s}^{s-1}=S Css−1=S种组合)。对于S种组合一次重复进行,获取测试误差的均值,这个均值称为泛化误差的估计。
4线性回归模型(liner regression)
- 原理
给定 x = ( x 1 , x 2 , … , x n ) x=(x _{1},x _{2},…,x _{n}) x=(x1,x2,…,xn), x i x _{i} xi为样本 x x x的第i个特征,特征有n种,线性模型是图学得一个通过属性的线性组合来进行预测的函数。 θ T \theta ^{T} θT为每个特征对应的权重生成的权重向量。
拟合函数为: f ( x ) = θ T x = θ 1 x 1 + θ 2 x 2 + . . . + θ n x n f(x)=\theta ^{T}x=\theta _{1}x _{1}+\theta _{2}x _{2}+...+\theta _{n}x _{n} f(x)=θTx=θ1x1+θ2x2+...+θnxn。
当 θ T x > 0 \theta ^{T}x>0 θTx>0,则y>0.5;若$\theta ^{T}x\rightarrow +\infty , 则 ,则 ,则y \rightarrow 1 $;
当 θ T x < 0 \theta ^{T}x<0 θTx<0,则y<0.5;若$\theta ^{T}x\rightarrow -\infty , 则 ,则 ,则y \rightarrow 0 $;
对f(x)的输出变量y的拟合,在线性回归中 θ T x \theta ^{T}x θTx为预测值的拟合函数;
- 损失函数
损失函数(Loss Function)又叫做误差函数,用来衡量算法的运行情况,估量模型的预测值与真实值的不一致程度,是一个非负实值函数,通常使用$
L(Y, f(x))$来表示。损失函数越小,模型的鲁棒性就越好。损失函数是经验风险函数的核心部分,也是结构风险函数重要组成部分。常见的损失函数由,0-1损失函数,绝对值损失函数,平方损失函数,对数损失函数,指数损失函数等等。
- 代价函数(cost)&目标函数
训练代价函数得到参数,目的是找到最优解,在回归问题中,通过代价函数求解最优解,假设函数为
h
(
x
)
=
A
+
B
x
h(x) = A + Bx
h(x)=A+Bx
假设函数中有
A
A
A和
B
B
B两个参数,当参数发生变化时,假设函数状态也会随着变化。
如下图所示:
想要拟合图中的离散点,我们需要尽可能找到最优的
A
A
A和
B
B
B来使这条直线更能代表所有数据。如何找到最优解呢,这就需要使用代价函数来求解,以平方误差代价函数为例,假设函数为
h
(
x
)
=
θ
0
x
h(x)=\theta_0x
h(x)=θ0x。
J
(
θ
0
,
θ
1
)
=
1
m
∑
i
=
1
m
(
h
(
x
(
i
)
)
−
y
(
i
)
)
2
J(\theta_0, \theta_1) = \frac{1}{m}\sum_{i=1}^m(h(x^{(i)})-y^{(i)})^2
J(θ0,θ1)=m1i=1∑m(h(x(i))−y(i))2
最优解即为代价函数的最小值
min
J
(
θ
0
,
θ
1
)
\min J(\theta_0, \theta_1)
minJ(θ0,θ1)。如果是1个参数,代价函数一般通过二维曲线便可直观看出。如果是2个参数,代价函数是三维图像。
- 优化方法(梯度下降法、牛顿法、拟牛顿法等)
1)梯度下降法(Gradient Descent)
-
梯度下降是迭代法的一种,可以用于求解最小二乘问题。
-
在求解机器学习算法的模型参数,即无约束优化问题时,主要有梯度下降法(Gradient Descent)和最小二乘法。
-
在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。
-
如果我们需要求解损失函数的最大值,可通过梯度上升法来迭代。梯度下降法和梯度上升法可相互转换。
-
在机器学习中,梯度下降法主要有随机梯度下降法和批量梯度下降法。
2)牛顿法(Newton’s method)
牛顿法是一种在实数域和复数域上近似求解方程的方法。方法使用函数f (x)的泰勒级数的前面几项来寻找方程f (x) = 0的根。基于当前位置的切线来确定下一次的位置,所以牛顿法又被很形象地称为是"切线法"。牛顿法的搜索路径(二维情况)。
牛顿法最大的特点就在于它的收敛速度很快。
优点:二阶收敛,收敛速度快;
缺点:牛顿法是一种迭代算法,每一步都需要求解目标函数的Hessian矩阵的逆矩阵,计算比较复杂。
3)拟牛顿法(Quasi-Newton Methods)
拟牛顿法是求解非线性优化问题最有效的方法之一,于20世纪50年代由美国Argonne国家实验室的物理学家W.C.Davidon所提出来。Davidon设计的这种算法在当时看来是非线性优化领域最具创造性的发明之一。不久R. Fletcher和M. J. D. Powell证实了这种新的算法远比其他方法快速和可靠,使得非线性优化这门学科在一夜之间突飞猛进。
**拟牛顿法的本质思想是改善牛顿法每次需要求解复杂的Hessian矩阵的逆矩阵的缺陷,它使用正定矩阵来近似Hessian矩阵的逆,从而简化了运算的复杂度。**拟牛顿法和最速下降法一样只要求每一步迭代时知道目标函数的梯度。通过测量梯度的变化,构造一个目标函数的模型使之足以产生超线性收敛性。这类方法大大优于最速下降法,尤其对于困难的问题。另外,因为拟牛顿法不需要二阶导数的信息,所以有时比牛顿法更为有效。如今,优化软件中包含了大量的拟牛顿算法用来解决无约束,约束,和大规模的优化问题。
-
线性回归的评估指标
回归模型常用评估方法:
指标 描述 Mean Square Error (MSE, RMSE) 平均方差 Absolute Error (MAE, RAE) 绝对误差 R-Squared R平方值 线性回归中常有MSE,对应欧几里得距离(欧式距离),基于均方误差最小化来模型求解的方法称为"最小二乘法",找到一条直线,使所有样本到直线上的欧式距离之和最小。
-
sklearn参数详解
用UCI大学公开的机器学习数据来跑线性回归。
里面是一个循环发电场的数据,共有9568个样本数据,每个数据有5列,分别是:AT(温度), V(压力), AP(湿度), RH(压强), PE(输出电力)。我们不用纠结于每项具体的意思。
对应PE是样本输出,而AT/V/AP/RH这4个是样本特征, 机器学习的目的就是得到一个线性回归模型,即:
P E = θ T x = θ 0 + θ 1 ∗ A T + θ 2 ∗ V + θ 3 ∗ A P + θ 4 ∗ R H PE=\theta ^{T}x=\theta _{0}+\theta _{1}*AT+\theta _{2}*V+\theta _{3}*AP+\theta _{4}*RH PE=θTx=θ0+θ1∗AT+θ2∗V+θ3∗AP+θ4∗RH
需要学习的,是 θ 0 , θ 1 , θ 2 , θ 3 , θ 4 \theta _{0},\theta _{1},\theta _{2},\theta _{3},\theta _{4} θ0,θ1,θ2,θ3,θ4这5个参数。
from sklearn import datasets, linear_model
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
#导入数据集
data = pd.read_csv('ccpp.csv')
#sklearn导入线性模型
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
#sklearn导入交叉验证,10折交叉验证
from sklearn.model_selection import cross_val_predict
X = data[['AT', 'V', 'AP', 'RH']]
y = data[['PE']]
predicted = cross_val_predict(linreg, X, y, cv=10)
# 用scikit-learn计算MSE
print ("MSE:",metrics.mean_squared_error(y, predicted))
# 用scikit-learn计算RMSE
print ("RMSE:",np.sqrt(metrics.mean_squared_error(y, predicted)))
fig, ax = plt.subplots()
ax.scatter(y, predicted)
ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)
ax.set_xlabel('Measured')
ax.set_ylabel('Predicted')
plt.show()