summary: 本文总结了几种常见的线性回归的的方式以及各种方式的优缺点。

1,简单现性回归(OSL):

OSL:就是一种最为简单的普通最小二乘法的实现,y = a0 + a1*x1 + a2*x2 + a3*x3 + ....    。需要注意的是,对自变量(即训练样本中的特征)进行拟合都是一次方的,即简单的一次线性关系。我们只是对每个特征加了一个对应的权重而已。

特点:

对于普通最小二乘的系数估计问题,其依赖于模型各项的相互独立性。当各项是相关的,且设计矩阵的各列近似线性相关,那么,设计矩阵会趋向于奇异矩阵,这会导致最小二乘估计对于随机误差非常敏感,产生很大的方差。例如,在没有实验设计的情况下收集到的数据,这种多重共线性(multicollinearity)的情况可能真的会出现。

示例:

# 在 Jupyter notebook 中实现

>>> from sklearn import linear_model
>>> reg = linear_model.LinearRegression()
>>> reg.fit ([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False) >>> reg.coef_
array([ 0.5, 0.5]) # y = 0.5 * x1 + 0.5 * x2

1.2,一元多项式线性回归:

同样是简单的线性回归,不同的是,对于样本中的每个特征值,进行不同幂的系数进行拟合。y = a0 + a1 * x + a2 * x^2 + a3 * x^3 + ....   .

特点:对参数选择不当非常容易产生过拟合。

示例:

from sklearn import datasets
from sklearn import metrics
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression loaded_data = datasets.load_boston() # 处理数据
data_X = loaded_data.data
data_y = loaded_data.target
X_train,X_test,y_train,y_test = train_test_split(data_X,data_y,test_size=0.3) poly_reg = PolynomialFeatures(degree=4) # 设置最大次幂到 x^4
X_train_trans = poly_reg.fit_transform(X_train) # 对训练集进行拟合和转换,将学 到的特征保留到 poly_reg 中 linreg2 = LinearRegression() # 对转换过的数据进行拟合
linreg2.fit(X_train_trans,y_train) y_pred = linreg2.predict(poly_reg.fit_transform(X_test)) print("MSE:",metrics.mean_squared_error(y_test,y_pred))

2,岭回归(ride regression):

岭回归(英文名:ridge regression, Tikhonov regularization)是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法,对病态数据的拟合要强于最小二乘法。本质是在自变量信息矩阵的主对角线元素上人为地加入一个非负因子。

特点:在训练集中如果特征矩阵的两列特别相近,这样的矩阵就是奇异矩阵,在求 (X'X) 的行列式时会趋近于 0 。成为所谓的病态矩阵。通过选择一个合适的惩罚因子 a 来进行改进。具体原因参见百度百科:https://baike.baidu.com/item/岭回归/554917

from sklearn.linear_model import Ridge

ridge_reg = Ridge(alpha=1, solver="cholesky")
ridge_reg.fit(X, y) y_pred=ridge_reg.predict(X)
# using Jupyter notebook
>>> from sklearn import linear_model >>> reg = linear_model.Ridge (alpha = .5)
>>> reg.fit ([[0, 0], [0, 0], [1, 1]], [0, .1, 1])
Ridge(alpha=0.5, copy_X=True, fit_intercept=True, max_iter=None,
normalize=False, random_state=None, solver='auto', tol=0.001) >>> reg.coef_
array([ 0.34545455, 0.34545455])
>>> reg.intercept_
0.13636...

RidgeCV 能通过内置的 Alpha 参数的交叉验证来实现岭回归:

>>> 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, .1, 1])
RidgeCV(alphas=[0.1, 1.0, 10.0], cv=None, fit_intercept=True, scoring=None,
normalize=False) >>> reg.alpha_
0.1

--------有空再更

python 进行机器学习的更多相关文章

  1. 用Python开始机器学习(7:逻辑回归分类) --好!!

    from : http://blog.csdn.net/lsldd/article/details/41551797 在本系列文章中提到过用Python开始机器学习(3:数据拟合与广义线性回归)中提到 ...

  2. [resource]23个python的机器学习包

    23个python的机器学习包,从常见的scikit-learn, pylearn2,经典的matlab替代orange, 到最新最酷的Theano(深度学习)和torch 7 (well,其实lua ...

  3. 机器学习00:如何通过Python入门机器学习

    我们都知道机器学习是一门综合性极强的研究课题,对数学知识要求很高.因此,对于非学术研究专业的程序员,如果希望能入门机器学习,最好的方向还是从实践触发. 我了解到Python的生态对入门机器学习很有帮助 ...

  4. Python相关机器学习‘武器库’

    开始学习Python,之后渐渐成为我学习工作中的第一辅助脚本语言,虽然开发语言是Java,但平时的很多文本数据处理任务都交给了Python.这些年来,接触和使用了很多Python工具包,特别是在文本处 ...

  5. 基于Python的机器学习实战:KNN

    1.KNN原理: 存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一个数据与所属分类的对应关系.输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应 ...

  6. Windows+Python+anaconda机器学习安装及环境配置步骤

    Windows+Python+anaconda机器学习安装及环境配置步骤 1. 下载安装python3.6以上版本(包含pip,不用自己安装)2. 直接下载安装pycharm安装包(用于编写pytho ...

  7. 用Python开始机器学习(2:决策树分类算法)

    http://blog.csdn.net/lsldd/article/details/41223147 从这一章开始进入正式的算法学习. 首先我们学习经典而有效的分类算法:决策树分类算法. 1.决策树 ...

  8. Python开源机器学习框架:Scikit-learn六大功能,安装和运行Scikit-learn

    Python开源机器学习框架:Scikit-learn入门指南. Scikit-learn的六大功能 Scikit-learn的基本功能主要被分为六大部分:分类,回归,聚类,数据降维,模型选择和数据预 ...

  9. 沉淀再出发:使用python进行机器学习

    沉淀再出发:使用python进行机器学习 一.前言 使用python进行学习运算和机器学习是非常方便的,因为其中有很多的库函数可以使用,同样的python自身语言的特点也非常利于程序的编写和使用. 二 ...

  10. 机器学习:如何通过Python入门机器学习

    我们都知道机器学习是一门综合性极强的研究课题,对数学知识要求很高.因此,对于非学术研究专业的程序员,如果希望能入门机器学习,最好的方向还是从实践触发. 我了解到Python的生态对入门机器学习很有帮助 ...

随机推荐

  1. Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean)

    eclipse在使用maven的tomcat控件编译java程序时,报错 Failed to execute goal org.apache.maven.plugins:maven-clean-plu ...

  2. otter 数据同步

    阿里巴巴分布式数据库同步系统(解决中美异地机房) 基本介绍: https://github.com/alibaba/otter 快速使用: https://github.com/alibaba/ott ...

  3. poi excel设置合并单元格边框格式

    版本3.17 //设置合并单元格的边框 public static void setBorderForMergeCell(BorderStyle style,int color, CellRangeA ...

  4. JAVA版开源微信管家—JeeWx捷微3.1小程序版本发布,支持微信公众号,微信企业号,支付窗

    支持小程序,JeeWx捷微3.1小程序版本发布^_^ JeeWx捷微V3.1--多触点小程序版本管理平台(支持微信公众号,微信企业号,支付窗) JeeWx捷微V3.1.0版本紧跟微信小程序更新,在原有 ...

  5. 常用jqueryPlugin

    http://www.jq22.com editable-select :  jQuery可编辑可下拉插件jquery.editable-select.js

  6. Block 语法

    Block,代码块,^符号是block的语法标记. 比如说,一个block的参数列表是一个UIView,返回值是个CGFloat,block名称是testBlock 可以定义为  CGFloat (^ ...

  7. java序列化问题

    今天无意中看到了     redistemplet封装的类中,出现了序列化的字眼 ,了解下序列化的知识 1.什么是序列化 我们把变量从内存中变成可存储或传输的过程称之为序列化,(java中一般是用来保 ...

  8. nodejs 热更新插件

    键入命令: npm -g install supervisor supervisor必须安装到全局 可以用supervisor 来启动服务 命令supervisor app.js

  9. JSFL 禁止脚本运行时间太长的警告

    fl.showIdleMessage(false);

  10. 理解 IntelliJ IDEA 的项目配置和Web部署(转载)

    理解 IntelliJ IDEA 的项目配置和Web部署   1.项目配置的理解 IDEA 中最重要的各种设置项,就是这个 Project Structre 了,关乎你的项目运行,缺胳膊少腿都不行.最 ...