机器学习

机器学习[2] - 监督模型之线性模型

2021-02-26  本文已影响0人  屹然1ran

关于机器学习整体的概念,例如监督模型与无监督模型的概念,见笔者的之前的一篇文章
机器学习入门

线性模型的基本概念为构建一个方程,每一个Predictor(自变量)拥有各自的权重,通过线性关系来预测Response(因变量)的值

定义:
Predictor - x
Response - y
coefficients(权重) - w
基本框架:y = w_0+w_1x_1+w_2x_2+...+w_px_p

1.1.1 机器学习的起点 - Linear Regression (线性回归)

线性回归根据一个或者多个x来对y来进行预测。
Predictor可以接受Continuous Variable和Categorically Variable,但是Response只能是Continuous Variable。

线性回归
线性回归本质上是最小化代价函数(每一个点至预测线的距离之和),来构建一条最好的拟合线。数学上等同于:
min_w||wx - y||_2^2

模型训练

from sklearn import linear_model
import numpy as np
import pandas as pd

lm = linear_model.LinearRegression()

data = pd.DataFrame({'x1': [0, 1, 2, 3, 4],
                     'x2': [4, 3, 2, 1, 0],
                     'y':[1, 1.5, 2, 2.5, 3]})

lm.fit(data[['x1', 'x2']], data['y'])
Out[41]: LinearRegression()

lm.coef_
Out[42]: array([ 0.25, -0.25])

lm.intercept_
Out[43]: 2.0

这样就可以得到模型的结果:y = 2.0 + 0.25x_1 + 0.25x_2

模型预测

test_data = pd.DataFrame({'x1': [1, 2, 3],
                          'x2': [-1, 2, 5],
                          'y': [2.5, 1, 1]})

lm.predict(test_data[['x1', 'x2']])
Out[47]: array([2.5, 2. , 1.5])

模型性能

对于线性回归,常用测试模型性能两个指标为:
R^2:代表模型的拟合程度,如果是单元线性回归,则等于两个变量的相关系数
MSE(Mean\ Squared\ Error):代表每一个点至预测线的距离之和

from sklearn.metrics import mean_squared_error, r2_score
y_hat = lm.predict(test_data[['x1', 'x2']])

mean_squared_error(y_hat, test_data['y'])
Out[52]: 0.4166666666666666

r2_score(y_hat, test_data['y'])
Out[53]: -1.4999999999999987

时间复杂度

一般线性回归最小化代价函数使用的方法为Singular Value Decomposition,简单来说是将所有样本的特征值构建成一个矩阵,然后求解(X^TX)^{-1}X^TY,时间复杂度为O(n_{样本量}n_{特征数}^2 )

该方法在处理高维数据时,效率会较低,可以使用梯度下降来优化效率。

1.1.2 Rigde Regression(岭回归)

岭回归为在线性回归的基础上,增加了一个惩罚项,惩罚项为w的数量,目的是为了防止模型采用的Feature过多而导致的过拟合。
min_w||wx - y||_2^2+\alpha||w||_2^2
||w||_2^2又称之为L2 Norm,或者欧式距离(Euclidean Distance)。\alpha \geq 0为复杂度,控制岭回归模型的衰减程度(Shrinkage),\alpha值越大,模型的鲁棒性(Robustness)就越强,更不容易有共线性问题。

lm_ridge = linear_model.Ridge(alpha = 0.5).fit(data[['x1', 'x2']], data['y'])

lm_ridge.coef_
Out[55]: array([ 0.24390244, -0.24390244])

lm_ridge.intercept_
Out[56]: 2.0000000000000018

岭分类器(Rigde Classifier)

Ridge回归器拥有一个变种Ridge Classifier。这个分类器会将二元数据的y转换为{-1, 1}然后执行回归操作。模型的预测值的正负号,则可以表示分类结果。
如果y是多元数据,该模型则会进行多结果回归(multi-output regression),结果则取多个结果中的最高值。
Ridge Classifier的效率略微高于Logistic Regression,因为他只需要计算(X^TX)^{-1}X^T一次。
Ridge Classifier同时被称为拥有Linear Kernal的Least Squares Support Vector Machines

1.1.3 Lasso Regression

Lasso回归是一个拥有稀疏的系数(Sparse Coefficients)的线性模型,通常适用于结果只有少量的feature有非零系数项的数据集。这一点主要有两个好处:

  1. Feature选择
    稀疏化可以自动对特征进行选择,将无用的特征系数归零
  2. 可解释性强
    保留下来的特征可以很容易的解释,例如一个数据集有1000个feature,通过Lasso后只保留下了5个feature,则该5个feature为主要影响

与Ridge回归类似,该模型添加了惩罚项,但不同的是选择了L1 Norm,或者叫做曼哈顿距离(Manhatten Distance)。
min_w \frac{1}{2n_{samples}}||wx - y||_2^2+\alpha||w||_2^2

lm_lasso = linear_model.Lasso(alpha=0.1)
lm_lasso.fit([[0, 0], [1, 1]], [0, 1])
Out[57]: Lasso(alpha=0.1)

reg.predict([[1, 1]])
Out[58]: array([0.8])

\alpha选择

\alpha控制了系数的离散度。除了使用常用的AIC与BIC,在Scikit-learn中,可以使用两种Cross Validation方法来选择恰当的\alpha:LassoCV,LassoLarsCV
拥有潜在多重共线性的高维数据,一般会使用LassoCV;样本量相比Features较少时,一般会使用LassoLarsCV

Alpha选择 AIC&BIC Alpha选择 LassoCV Alpha选择 LassoLarsCV

Multi-task Lasso

Multi-task Lasso模型为将一维的y替换为二维数组,也就是说有多个response。
Objective Function如下

min_w \frac{1}{2n_{samples}}||XW-Y||_{ Fro}^2+\alpha||W||_{21}

其中Fro指Frobenius Norm

||A||_{ Fro } = \sqrt{\sum_{ij}a_{ij}^2}

以及l_1l_2

||A||_{21} = \sum_i \sqrt{\sum_j{a_{ij}^2}}

该模型一般使用coordinate descent来最小化代价函数。

reference

周志华,机器学习
scikit learn官方文档

上一篇 下一篇

猜你喜欢

热点阅读