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. 1. ibatis 查询的sql列存在相同的列名

    如果SQL语句存在两个相同的查询列名,则映射时,取第一个列名的值进行映射 <?xml version="1.0" encoding="UTF-8" ?&g ...

  2. leetcode986

    class Solution: def judgeIntersection(self,a:'Interval',b:'Interval'): #返回值1,bool类型,是否有交集:True-有交集,F ...

  3. NRF51822之RNG

    在裸机下官方已经提供另一个RNG的例子(RF51_SDK_10.0.0_dc26b5e\examples\peripheral\rng) 好了现在我将给出在蓝牙模式下如何使用例子 #include & ...

  4. ubuntu建立wifi热点的方法

    原文在这里: http://www.linuxidc.com/Linux/2014-07/104624.htm 方法一:network manager 这种方法建立的热点,据说android搜不到. ...

  5. 深度学习原理与框架-RNN网络架构-RNN网络 1.RNN的前向传播 2.RNN的反向传播

    对于神经网络而言,每一个样本的输入与输入直接都是独立的,即预测的结果之间并没有联系 而对于RNN而言:不仅仅是有当前的输入,而且上一层的隐藏层也将进行输入,用于进行结果的预测.因此每一个输入都与之前的 ...

  6. APP-8.1-百度语音应用

    1.百度语音登录地址 http://yuyin.baidu.com/ 2.控制台创建应用 3.生成签名 3.1Postman软件应用 APP-8.2-Postman应用 3.2Postman执行 UR ...

  7. Delphi 文件目录相关的操作函数

    需要User   SysUtils 取文件名 ExtractFileName(FileName); 取文件扩展名: ExtractFileExt(filename); 取文件名,不带扩展名: 方法一: ...

  8. 尚硅谷redis学习1-NOSQL简介

    本系列是自己学习尚硅谷redis视频的记录,防止遗忘,供以后用到时快速回忆起来,照抄视频和资料而已,没什么技术含量,仅给自己入门了解,我是对着视频看一遍再写的,视频地址如下:尚硅谷Redis视频 背景 ...

  9. Python基础-TypeError:takes 2 positional arguments but 3 were given

    Error: 今天写一段简单类定义python代码所遇到报错问题:TypeError: drive() takes 2 positional arguments but 3 were given 代码 ...

  10. String特殊值的判断方式

    对String的特殊值的判断上,除了要关注是否为null,还要关注是否是空字符串. 经常处理的时候直接判断是否为Null就好了,这样很容易出现问题: if(null!=str) { //not goo ...