一个完整的机器学习项目分为以下步骤:
- 明确项目任务:回归/分类
- 收集数据集并选择合适的特征
- 选择度量模型性能的指标
- 选择具体的模型并进行训练以优化模型
- 评估模型的性能并调参
2.1 使用sklearn构建完整的回归项目
1 收集数据集并选择合适的特征
特征解释:
- CRIM:各城镇的人均犯罪率
- ZN:规划地段超过25,000平方英尺的住宅用地比例
- INDUS:城镇非零售商业用地比例
- CHAS:是否在查尔斯河边(=1是)
- NOX:一氧化氮浓度(/千万分之一)
- RM:每个住宅的平均房间数
- AGE:1940年以前建造的自住房屋的比例
- DIS:到波士顿五个就业中心的加权距离
- RAD:放射状公路的可达性指数
- TAX:全部价值的房产税率(每1万美元)
- PTRATIO:按城镇分配的学生与教师比例
- B:1000(Bk - 0.63)^2其中Bk是每个城镇的黑人比例
- LSTAT:较低地位人口
- Price:房价
2. 选择度量模型性能的指标(metrics)
- mean squared error
- mean absolute error
- R^2
- 解释方差得分:explained_variance(y, y_hat)
sklearn的regression metrics有:
- metrics.explained_variance_score
- metrics.max_error
- metrics.mean_absolute_error
- metrics.mean_squared_error
- metrics.mean_squared_log_error
- metrics.median_absolute_error
- metrics.r2_score
- metrics.mean_poisson_deviance
- metrics.mean_gamma_deviance
- metrics.mean_tweedie_deviance
3. 选择具体的模型并进行训练
线性回归模型
wow原来回归还有个小故事
回归这个概念是19世纪80年代由英国统计学家郎西斯.高尔顿在研究父子身高关系提出来的,他发 现:在同一族群中,子代的平均身高介于父代的身高以及族群的平均身高之间。具体而言,高个 子父亲的儿子的身高有低于其父亲身高的趋势,而矮个子父亲的儿子身高则有高于父亲的身高的 趋势。也就是说,子代的身高有向族群平均身高"平均"的趋势,这就是统计学上"回归"的最初含义。
regression - 是一种预测性的建模技术,它研究的是因变量(目标)和自变量(特征)之间的关系。
通常用于
- 预测分析 prediction
- 时间序列模型 time series
- 发现变量之间的因果关系
通常使用曲线/线来拟合数据点,目标是使曲线到数据点的距离差异最小。
线性回归(linear regression)是回归问题的一种,线性回归假设目标值与特征之间线性相关,aka满足一个多元一次方程。
通过构建loss function,来求解loss function最小时的参数。
假设X和Y之间存在线性关系, y ^ = f ( w ) = w T x \ \hat{y}=f(w) =w^Tx y^=f(w)=wTx
最小二乘估计
我们需要衡量真实值 y i y_i yi与线性回归模型的预测值 w T x i w^Tx_i wTxi之间的差距,在这里我们和使用 二范数的平方和L(w) 来描述这种差距
L ( w ) = ∑ i = 1 N ∣ ∣ w T x i − y i ∣ ∣ 2 2 L(w) = \sum\limits_{i=1}^{N}||w^Tx_i-y_i||_2^2 L(w)=i=1∑N∣∣wTxi−yi∣∣22
= ∑ i = 1 N ( w T x i − y i ) 2 =\sum\limits_{i=1}^{N}(w^Tx_i-y_i)^2 =i=1∑N(wTxi−yi)2
= ( w T X T − Y T ) ( w T X T − Y T ) T = (w^TX^T-Y^T)(w^TX^T-Y^T)^T =(wTXT−YT)(wTXT−YT)T
= w T X T X w − 2 w T X T Y + Y Y T = w^TX^TXw - 2w^TX^TY+YY^T =wTXTXw−2wTXTY+YYT
我们要找到 a r g m i n L ( w ) argminL(w) argminL(w) – aka L ( w ) L(w) L(w)最小时的参数 w w w
为了达到求解最小化
L
(
w
)
L(w)
L(w)问题,我们使用求导来解决这个问题:
∂
L
(
w
)
∂
w
=
2
X
T
X
w
−
2
X
T
Y
=
0
\frac{\partial L(w)}{\partial w} = 2X^TXw-2X^TY = 0
∂w∂L(w)=2XTXw−2XTY=0
因此
w
^
=
(
X
T
X
)
−
1
X
T
Y
\hat{w} = (X^TX)^{-1}X^TY
w^=(XTX)−1XTY
几何解释
啊。。看不懂。。线性代数都不记得了
概率视角
假设噪声
ϵ
∽
N
(
0
,
σ
2
)
,
y
=
f
(
w
)
+
ϵ
=
w
T
x
+
ϵ
\epsilon \backsim N(0,\sigma^2), y=f(w)+\epsilon=w^Tx+\epsilon
ϵ∽N(0,σ2),y=f(w)+ϵ=wTx+ϵ
因此:
y
∣
x
i
,
w
N
(
w
T
x
,
σ
2
)
y|x_i,w ~ N(w^Tx,\sigma^2)
y∣xi,w N(wTx,σ2)
使用极大似然估计MLE对参数w进行估计:
L ( w ) = l o g P ( Y ∣ X ; w ) = l o g ∏ i = 1 N P ( y i ∣ x i ; w ) = ∑ i = 1 N l o g P ( y i ∣ x i ; w ) L(w) = logP(Y|X;w)= log\prod_{i=1}^N P(y_i|x_i;w) = \sum\limits_{i=1}^{N}logP(y_i|x_i;w) L(w)=logP(Y∣X;w)=log∏i=1NP(yi∣xi;w)=i=1∑NlogP(yi∣xi;w)
= ∑ i = 1 N l o g ( 1 2 π σ e x p ( − ( y i − w T x i ) 2 2 σ 2 ) ) =\sum\limits_{i=1}^{N}log(\frac{1}{\sqrt{2\pi \sigma}}exp(-\frac{(y_i-w^Tx_i)^2}{2\sigma^2})) =i=1∑Nlog(2πσ1exp(−2σ2(yi−wTxi)2))
= ∑ i = 1 N [ l o g ( 1 2 π σ ) − 1 2 σ 2 ( y i − w T x i ) 2 ] =\sum\limits_{i=1}^{N}[log(\frac{1}{\sqrt{2\pi}\sigma})-\frac{1}{2\sigma^2}(y_i-w^Tx_i)^2] =i=1∑N[log(2πσ1)−2σ21(yi−wTxi)2]
---------.-------.-----
a r g m a x w L ( w ) = a r g m i n w [ l ( w ) = ∑ i = 1 N ( y i − w T x i ) 2 ] argmax_w L(w) = argmin_w[l(w) = \sum\limits_{i = 1}^{N}(y_i-w^Tx_i)^2] argmaxwL(w)=argminw[l(w)=i=1∑N(yi−wTxi)2]
线性回归的推广
线性回归的假设:因变量和特征之间的关系是线性关系
线性reg的缺点:当数据存在非线性关系时,我们使用线性回归模型进行预测会导致预测性能极其低下。
多项式回归
体现因变量和特征的非线性关系,一个很自然而然的想法就是将标准的线性回归模型换成一个多项式函数
y
i
=
w
0
+
w
1
x
i
+
w
2
x
i
2
+
.
.
.
+
w
d
x
i
d
+
ϵ
y_i = w_0 + w_1x_i + w_2x_i^2 + ...+w_dx_i^d + \epsilon
yi=w0+w1xi+w2xi2+...+wdxid+ϵ
对于多项式的阶数d不能取过大
- 一般不大于3或者4
- d越大,多项式曲线就会越光滑,在X 的边界处有异常的波动
多项式回归模型实例
广义可加模型(GAM)
广义可加模型GAM实际上是线性模型推广至非线性模型的一个框架
- 每一个变量都用一个非线性函数来代替,但模型本身保持整体可加性
- GAM模型可以用在
- 线性回归的推广
- 线性分类的推广
GAM模型框架:
y
i
=
w
0
+
∑
j
=
1
p
f
j
(
x
i
j
)
+
ϵ
i
y_i = w_0 + \sum\limits_{j=1}^{p}f_{j}(x_{ij}) + \epsilon_i
yi=w0+j=1∑pfj(xij)+ϵi
GAM优缺点:
- 优点
- 简单,容易操作
- 能够很自然的推广线性回归模型 --> 非线性模型
- 模型预测精度上升
- 模型本身可加,因此GAM还能像线性回归一样把其他因素控制不变的情况下单独对某个变量进行推断,保留了线性回归易于推断的性质
- 缺点
- GAM经常忽略一些有意义的交互作用
- e.g. 两个特征共同影响因变量
- GAM经常忽略一些有意义的交互作用
GAM模型实例
安装pygam
package
回归树
基于树的回归方法 - 主要是依据分层和分割的方式将特征空间划分为一系列简单的区域。
对基于给定的待预测的自变量,用他所属区域中训练集的mean或mod对其进行预测。
由于划分特征空间的分裂规则可以用树的形式进行概括,因此这类方法成为决策树方法。
决策树由
- 节点(node)
- 节点有两种类型:内部节点(internal node)& 叶子节点(leaf node)
- 内部节点 – 表示一个特征/属性
- 叶子节点 – 表示一个类别/某个值
- 有向边(directed edge)组成
建立回归树的过程大致分为两步:
- 将自变量的特征空间(即 x ( 1 ) , x ( 2 ) , x ( 3 ) , . . . , x ( p ) x^{(1)},x^{(2)},x^{(3)},...,x^{(p)} x(1),x(2),x(3),...,x(p))的可能取值构成的几何分割称J个互不重叠的区域 R 1 , R 2 , . . . , R j R_1,R_2,...,R_j R1,R2,...,Rj。
- 对落入区域 R j R_j Rj的每个观测值作相同的预测,预测值等于 R j R_j Rj上训练集的因变量的简单算数平均。
具体步骤:
- 选择最优切分特征j以及该特征上的最优点s:
遍历特征j以及固定j后遍历切分点s,选择使得下式最小的(j,s)
m i n j , s [ m i n c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + m i n c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] min_{j,s}[min_{c_1}\sum\limits_{x_i\in R_1(j,s)}(y_i-c_1)^2 + min_{c_2}\sum\limits_{x_i\in R_2(j,s)}(y_i-c_2)^2 ] minj,s[minc1xi∈R1(j,s)∑(yi−c1)2+minc2xi∈R2(j,s)∑(yi−c2)2] - 按照(j,s)分裂特征空间
R 1 ( j , s ) = { x ∣ x j ≤ s } R_1(j,s) = \{x|x^{j} \le s \} R1(j,s)={x∣xj≤s}和 R 2 ( j , s ) = { x ∣ x j > s } , c ^ m = 1 N m ∑ x ∈ R m ( j , s ) y i , m = 1 , 2 R_2(j,s) = \{x|x^{j} > s \},\hat{c}_m = \frac{1}{N_m}\sum\limits_{x \in R_m(j,s)}y_i,\;m=1,2 R2(j,s)={x∣xj>s},c^m=Nm1x∈Rm(j,s)∑yi,m=1,2 - 继续调用步骤1,2直到满足停止条件,就是每个区域的样本数小于等于5
- 将特征空间划分为J个不同的区域,生成回归树 f ( x ) = ∑ m = 1 J c ^ m I ( x ∈ R m ) f(x) = \sum\limits_{m=1}^{J}\hat{c}_mI(x \in R_m) f(x)=m=1∑Jc^mI(x∈Rm)
- 懵
回归树与线性模型的比较,哪种模型更优呢?
- 如果特征变量与因变量的关系能很好的用线性关系来表达,线性回归更好,拟合效果优于不能揭示线性结构的回归树
- 如果特征变量与因变量的关系呈现高度复杂的非线性,树方法比传统方法好
树模型优缺点:
- 优点
- 解释性更强
- 更接近人的决策方式
- 可以用图来表示,非专业人士也可以轻松解读
- 可以直接作定性的特征而不需要像线性回归一样哑元化
- 很好处理缺失值和异常值,对异常值不敏感(但这对线性模型来说却是致命的)
- 缺点
- 预测准确性一般无法达到其他回归模型的水平,但改进方法很多
sklearn使用回归树的实例
sklearn.tree.DecisionTreeRegressor
(*, criterion=‘mse’, splitter=‘best’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, presort=‘deprecated’, ccp_alpha=0.0)
- 参数
- criterion :{“ mse”,“ friedman_mse”,“ mae”} 默认=“ mse”。衡量分割标准的函数
- splitter:{“best”, “random”}, default=”best”。分割方式
- max_depth:树的最大深度
- min_samples_split:拆分内部节点所需的最少样本数,默认是2
- min_samples_leaf:在叶节点处需要的最小样本数。默认是1
- min_weight_fraction_leaf:在所有叶节点处(所有输入样本)的权重总和中的最小加权分数。如果未提供sample_weight,则样本的权重相等。默认是0。
支持向量机回归
约束优化
- 约束优化问题 ( P ) (P) (P)
- KKT条件(最优解的一阶必要条件)
- 对偶理论
- (懵,这一部分要补充学习一下)
支持向量回归SVR
在线性回归的理论中,每个样本点都要计算平方损失,但是SVR却是不一样的。SVR认为:落在
f
(
x
)
f(x)
f(x)的
ϵ
\epsilon
ϵ邻域空间中的样本点不需要计算损失,这些都是预测正确的,其余的落在
ϵ
\epsilon
ϵ邻域空间以外的样本才需要计算损失
sklearn中使用SVR实例
sklearn.svm.SVR
(*, kernel=‘rbf’, degree=3, gamma=‘scale’, coef0=0.0, tol=0.001, C=1.0, epsilon=0.1, shrinking=True, cache_size=200, verbose=False, max_iter=-1)
- 参数
- kernel:核函数,{‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’}, 默认=’rbf’
- degree:多项式核函数的阶数。默认 = 3
- C:正则化参数,默认=1.0
- epsilon:SVR模型允许的不计算误差的邻域大小。默认0.1
教材来自datawhale:EnsembleLearning/CH2-机器学习基础模型回顾