scikit-learn 1.1 广义线性模型(Generalized Linear Models)

Time: 2017/02/25   19:25    at   UTSZ

Environment: python2.7   pyCharm

 

首先这是一个回归问题,通过输入变量的线性组合得到目标函数和目标值。数学上表示为:

1_thumb1

  其中,向量 w=(w1, w2 ... wp) 表示系数(或者说是某个特征的权重),w0 表示线性函数的截距。

 

1.1.1 普通最小二乘法(ordinary Least Squares)

  LinearRegression 通过调整系数 w=(w1, w2 ... wp) 来使得数据集训练后得到的预测值与实际值之间的误差最小化。数学公式如下:

1_thumb

  我们也可以通过coef_这个成员变量查看训练后的模型的系数。

# !/usr/bin/env python2
# -*- coding:utf-8 -*-
from sklearn import linear_model
reg = linear_model.LinearRegression()
reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
print reg.coef_

结果如下:scikit-learn 1.1 广义线性模型(Generalized Linear Models)_第1张图片

但是,普通最小二乘法的系数估计依赖于模型样例的独立性。当样例相关时,向量矩阵就变得接近于一个单数。结果,最小二乘法得到的估计变得高敏感性,会产生很大的方差。多重共线性的这种情况常出现在没有实验设计而收集到的数据中。

Linear Regression Example:

为了在而为图形中表示出这个线性回归,我们使用diabetes数据集中的第一个特征。如下图所示,线性回归尝试画出一条直线以使得在训练集中的平方差值最小。

scikit-learn 1.1 广义线性模型(Generalized Linear Models)_第2张图片

 
# !/usr/bin/env python2
# -*- coding:utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
# 加载数据集
diabetes = datasets.load_diabetes()
# 只是用一个特征
diabetes_X = diabetes.data[:, np.newaxis, 2]
# 切分训练集和测试集
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]
# 切分训练集和测试集的目标值
diabetes_y_train = diabetes.target[:-20]
diabetes_y_test = diabetes.target[-20:]
# 确定线性回归算法
regr = linear_model.LinearRegression()
# 用训练集训练模型
regr.fit(diabetes_X_train, diabetes_y_train)
# 输出系数
print '系数:',regr.coef_
# 输出均方误差
print '均方误差:', np.mean((regr.predict(diabetes_X_test) - diabetes_y_test) ** 2)
# 输出方差:1表示完美预测
print '方差:',regr.score(diabetes_X_test, diabetes_y_test)
# 输出图形
plt.scatter(diabetes_X_test, diabetes_y_test, color='black')
plt.plot(diabetes_X_test, regr.predict(diabetes_X_test), color='blue', linewidth=3)
plt.xticks(())
plt.yticks(())
plt.show()
 
   

1.1.2 岭回归 (Ridge Regression)

岭回归在普通最小二乘法的基础上,加上了一个系数的惩罚项。同样,岭系数要使得下式的平方和最小。

1_thumb2

  其中,2_thumb1是控制步长的复杂度参数。

scikit-learn 1.1 广义线性模型(Generalized Linear Models)_第3张图片

同其他线性模型相同,岭回归用 fit 训练,将系数保存在(coef_),截距保存在(intercept_)中。

# !/usr/bin/env python2
# -*- coding:utf-8 -*-
from sklearn import linear_model
reg = linear_model.Ridge(alpha=0.5)
reg.fit([[0, 0], [0, 0], [1, 1]], [0, 0.1, 1])
print '系数:', reg.coef_
print '截距:', reg.intercept_

结果:

        scikit-learn 1.1 广义线性模型(Generalized Linear Models)_第4张图片

1.1.2.1 岭回归的复杂度

和普通最小二乘法的复杂度相同。

 

1.1.2.2 正则化参数的设置:广义交叉验证 (Setting the regularization parameter: generalized Cross-Validation)

岭交叉验证 (RidgeCV) 应用岭回归中内建的alpha参数交叉验证实现。这个对象与GridSearchCV的工作方式相同,除了它默认为广义交叉验证——一种高效形式的留一交叉验证。

# !/usr/bin/env python2
# -*- coding:utf-8 -*-
from sklearn import linear_model
reg = linear_model.RidgeCV(alphas=[0.1, 1.0, 10.0])
reg.fit([[0, 0], [0, 0], [1, 1]], [0, 0.1, 1])
print reg.alpha_

结果:

         scikit-learn 1.1 广义线性模型(Generalized Linear Models)_第5张图片

1.1.3 套索算法 (Lasso)

套索算法是一种估计稀疏系数的线性模型。

#TODO 略

1.1.4 多任务套索 (Multi-task Lasso)

#TODO 略

1.1.5 弹性网 (Elastic Net)

#TODO 略

1.1.6 多任务弹性网 (Multi-task Elastic Net)

#TODO 略

1.1.7 最小角度回归 (Least Angle Regression)

#TODO 略

1.1.8 LARS套索 (LARS Lasso)

#TODO 略

1.1.9 正交匹配追踪 (Orthogonal Matching Pursuit,OMP)

#TODO 略

1.1.10 贝叶斯回归 (Bayesian Regression)

贝叶斯线性回归的引入主要是在最大似然估计中很难决定模型的复杂程度,ridge回归加入的惩罚参数其实也是解决这个问题的,同时可以采用的方法还有对数据进行正规化处理,另一个可以解决此问题的方法就是采用贝叶斯方法。

为了获得完整的概率模型,假定输出 y 在 Xw 上服从正态分布(高斯分布):

1_thumb4

其中 alpha 是一个随机变量,通过训练数据估计得到。

贝叶斯回归的优点:

  • It adapts to the data at hand.
  • It can be used to include regularization parameters in the estimation procedure.

缺点:

  • Inference of the model can be time consuming.

  1.1.10.1 Bayesian Ridge Regression

  #TODO 略

 

1.1.11 逻辑回归 (Logistic Regression)

#TODO 略

1.1.12 随机梯度下降 (Stochastic Gradient Descent,SGD)

#TODO 略

1.1.13 感知器 (Preceptron)

#TODO 略

1.1.14 被动攻击算法 (Passive Aggressive Algorithms)

#TODO 略

1.1.15 鲁棒性回归:离群点和模型误差 (Robustness Regression:outliers and modeling errors)

#TODO 略

1.1.16 多项式回归:基函数拓展线性模型 (Polynomial Regression:extending linear models with basis functions)

#TODO 略

 

参考资料:http://scikit-learn.org/stable/modules/linear_model.html

转载于:https://www.cnblogs.com/aszhaoweiguo/p/6442539.html

你可能感兴趣的:(scikit-learn 1.1 广义线性模型(Generalized Linear Models))