关于机器学习整体的概念,例如监督模型与无监督模型的概念,见笔者的之前的一篇文章
机器学习入门
线性模型的基本概念为构建一个方程,每一个Predictor(自变量)拥有各自的权重,通过线性关系来预测Response(因变量)的值
定义:
Predictor -
Response -
coefficients(权重) -
基本框架:
1.1.1 机器学习的起点 - Linear Regression (线性回归)
线性回归根据一个或者多个来对来进行预测。
Predictor可以接受Continuous Variable和Categorically Variable,但是Response只能是Continuous Variable。
线性回归本质上是最小化代价函数(每一个点至预测线的距离之和),来构建一条最好的拟合线。数学上等同于:
模型训练
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
这样就可以得到模型的结果:
模型预测
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])
模型性能
对于线性回归,常用测试模型性能两个指标为:
:代表模型的拟合程度,如果是单元线性回归,则等于两个变量的相关系数
:代表每一个点至预测线的距离之和
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,简单来说是将所有样本的特征值构建成一个矩阵,然后求解,时间复杂度为。
该方法在处理高维数据时,效率会较低,可以使用梯度下降来优化效率。
1.1.2 Rigde Regression(岭回归)
岭回归为在线性回归的基础上,增加了一个惩罚项,惩罚项为的数量,目的是为了防止模型采用的Feature过多而导致的过拟合。
又称之为L2 Norm,或者欧式距离(Euclidean Distance)。为复杂度,控制岭回归模型的衰减程度(Shrinkage),值越大,模型的鲁棒性(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。这个分类器会将二元数据的转换为{-1, 1}
然后执行回归操作。模型的预测值的正负号,则可以表示分类结果。
如果是多元数据,该模型则会进行多结果回归(multi-output regression),结果则取多个结果中的最高值。
Ridge Classifier的效率略微高于Logistic Regression,因为他只需要计算一次。
Ridge Classifier同时被称为拥有Linear Kernal的Least Squares Support Vector Machines
1.1.3 Lasso Regression
Lasso回归是一个拥有稀疏的系数(Sparse Coefficients)的线性模型,通常适用于结果只有少量的feature有非零系数项的数据集。这一点主要有两个好处:
- Feature选择
稀疏化可以自动对特征进行选择,将无用的特征系数归零 - 可解释性强
保留下来的特征可以很容易的解释,例如一个数据集有1000个feature,通过Lasso后只保留下了5个feature,则该5个feature为主要影响
与Ridge回归类似,该模型添加了惩罚项,但不同的是选择了L1 Norm,或者叫做曼哈顿距离(Manhatten Distance)。
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])
选择
控制了系数的离散度。除了使用常用的AIC与BIC,在Scikit-learn中,可以使用两种Cross Validation方法来选择恰当的:LassoCV,LassoLarsCV
拥有潜在多重共线性的高维数据,一般会使用LassoCV;样本量相比Features较少时,一般会使用LassoLarsCV
Multi-task Lasso
Multi-task Lasso模型为将一维的y替换为二维数组,也就是说有多个response。
Objective Function如下
其中指Frobenius Norm
以及为
该模型一般使用coordinate descent来最小化代价函数。
reference
周志华,机器学习
scikit learn官方文档
网友评论