一、scikit-learn 中的多项式回归

 1)实例过程

  • 模拟数据
    import numpy as np
    import matplotlib.pyplot as plt x = np.random.uniform(-3, 3, size=100)
    X = x.reshape(-1, 1)
    y = 0.5 * x**2 + x + np.random.normal(0, 1, 100)
  1. 相对于scikit-learn中的多项式回归,自己使用多项式回归,就是在使用线性回归前,改造了样本的特征;
  2. sklearn 中,多项式回归算法(PolynomialFeatures)封装在了 preprocessing 包中,也就是对数据的预处理;
  3. 对于多项式回归来说,主要做的事也是对数据的预处理,为数据添加一些新的特征;
  • 使用 PolynomialFeatures 生成新的数据集
    from sklearn.preprocessing import PolynomialFeatures
    
    poly = PolynomialFeatures(degree=2)
    poly.fit(X)
    X2 = poly.transform(X) X2.shape
    # 输出:(100, 3) X2[:5, :]
    # 输出:
    array([[1. , 2.98957009, 8.93752931],
    [1. , 0.5481444 , 0.30046228],
    [1. , 2.43260405, 5.91756246],
    [1. , 1.86837318, 3.49081835],
    [1. , 2.89120321, 8.35905598]])
  1. degree=2:表示对原本数据集 X 添加一个最多为 2 次幂的相应的多项式特征;
  2. poly.transform(X):将原本数据集 X 的每一种特征,转化为对应的多项式的特征;
  3. X2:生成的多项式特征相应的数据集;
  4. 疑问:X 的样本原有一个特征,经过 PolynomialFeatures 后生成了 3 个特征?
  5. X2 == [1., x, x2];
  • 使用 LinearRegression 类操作新的数据集 X2

    from sklearn.linear_model import LinearRegression
    
    lin_reg2 = LinearRegression()
    lin_reg2.fit(X2, y)
    y_predict2 = lin_reg2.predict(X2)
  • 绘制拟合结果
    plt.scatter(x, y)
    plt.plot(np.sort(x), y_predict2[np.argsort(x)], color='r')
    plt.show()

二、Pipeline(管道)

 1)疑问:如果数据集有 n 个特征,经过 PolynomialFeatures 生成的数据集有多少个?

  • 模拟数据集

    X = np.arange(1, 11).reshape(-1, 2)
    X.shape
    # 输出:(5, 2) X
    # 输出:
    array([[ 1, 2],
    [ 3, 4],
    [ 5, 6],
    [ 7, 8],
    [ 9, 10]])
  1. 当 degree = 2

    poly = PolynomialFeatures(degree=2)
    poly.fit(X)
    X2 = poly.transform(X) X2.shape
    # 输出:(5, 6) X2
    # 输出:
    array([[ 1., 1., 2., 1., 2., 4.],
    [ 1., 3., 4., 9., 12., 16.],
    [ 1., 5., 6., 25., 30., 36.],
    [ 1., 7., 8., 49., 56., 64.],
    [ 1., 9., 10., 81., 90., 100.]])
  2. 当 degree = 3
    poly = PolynomialFeatures(degree=3)
    poly.fit(X)
    X3 = poly.transform(X) X3.shape
    # 输出:(5, 10) X3
    # 输出:
    array([[ 1., 1., 2., 1., 2., 4., 1., 2., 4., 8.],
    [ 1., 3., 4., 9., 12., 16., 27., 36., 48., 64.],
    [ 1., 5., 6., 25., 30., 36., 125., 150., 180., 216.],
    [ 1., 7., 8., 49., 56., 64., 343., 392., 448., 512.],
    [ 1., 9., 10., 81., 90., 100., 729., 810., 900., 1000.]])
  • 分析:经过 PolynomialFeatures 之后,样本特征呈指数增长,新增的特征包含了所有可能的所样式;

 2)Pipeline 过程

  • 使用多项式回归的过程
  1. 将原始数据集 X 讲过 PolynomialFeatures 算法,生成多项式的特征的样本的数据集;
  2. 数据归一化(StandardScaler):如果 degree 非常的大,样本生成的特征的数据的差距也会变动非常的大;
  3. 将新的数据集传给线性回归算法:LinearRegression;
  • Pipeline 将这 3 步合为一体,使得每次使用多项式回归时,不需要重复这 3 个过程;
  • 具体操作过程
  1. 模拟数据

    x = np.random.uniform(-3, 3, size=100)
    X = x.reshape(-1, 1)
    y = 0.5 * x**2 + x + 2 + np.random.normal(0, 1, 100)
  2. 使用 Pipeline
    from sklearn.pipeline import Pipeline
    from sklearn.linear_model import LinearRegression
    from sklearn.preprocessing import PolynomialFeatures
    from sklearn.preprocessing import StandardScaler
    import numpy as np
    import matplotlib.pyplot as plt # 实例化 Pipeline
    poly_reg = Pipeline([
    ("poly", PolynomialFeatures(degree=2)),
    ("std_scaler", StandardScaler()),
    ("lin_reg", LinearRegression())
    ]) poly_reg.fit(X, y)
    y_predict = poly_reg.predict(X)
  3. 绘制拟合的结果
    plt.scatter(x, y)
    plt.plot(np.sort(x), y_predict[np.argsort(x)], color='r')
    plt.show()

机器学习:多项式回归(scikit-learn中的多项式回归和 Pipeline)的更多相关文章

  1. 机器学习框架Scikit Learn的学习

    一   安装 安装pip 代码如下:# wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=83 ...

  2. (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探

    一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...

  3. (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探

    目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...

  4. Scikit Learn: 在python中机器学习

    转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...

  5. sklearn中的多项式回归算法

    sklearn中的多项式回归算法 1.多项式回归法多项式回归的思路和线性回归的思路以及优化算法是一致的,它是在线性回归的基础上在原来的数据集维度特征上增加一些另外的多项式特征,使得原始数据集的维度增加 ...

  6. 【笔记】多项式回归的思想以及在sklearn中使用多项式回归和pipeline

    多项式回归以及在sklearn中使用多项式回归和pipeline 多项式回归 线性回归法有一个很大的局限性,就是假设数据背后是存在线性关系的,但是实际上,具有线性关系的数据集是相对来说比较少的,更多时 ...

  7. scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类 (python代码)

    scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...

  8. Scikit Learn

    Scikit Learn Scikit-Learn简称sklearn,基于 Python 语言的,简单高效的数据挖掘和数据分析工具,建立在 NumPy,SciPy 和 matplotlib 上.

  9. 机器学习在IC设计中的应用(二)--根据GBA时序结果来预测PBA

    本文转自:自己的微信公众号<集成电路设计及EDA教程> <机器学习在IC设计中的应用(二)--根据GBA时序结果来预测PBA> AOCV AOCV全称:Advanced OCV ...

随机推荐

  1. Tomcat虚拟目录的配置

    Tomcat可以作为应用服务器部署Java应用,同时可以创建虚拟目录存放图片,相当于一个图片服务器使用1. 创建目录 /usr/images/2. 编辑TOMCAT_HOME/conf/server. ...

  2. Luogu-1527 [国家集训队]矩阵乘法

    Luogu-1527 [国家集训队]矩阵乘法 题面 Luogu-1527 题解 昨天学CDQ分治时做了一些题,但是因为题(wo)太(tai)水(lan)了(le)并没有整理 学了一晚上的整体二分,拿这 ...

  3. MVC 中 System.Web.Optimization 找不到引用

    在MVC4的开发中,如果创建的项目为空MVC项目,那么在App_Start目录下没有BundleConfig.cs项的内容,在手动添加时在整个库中都找不到:System.Web.Optimizatio ...

  4. 添加vue调试工具vue-devtolls

    1.在使用脚手架vue-cli.js下载好node-modules 2.在node-modules目录下找的vue-devtools文件(如果没有可以用npm install vue-devtools ...

  5. makefile下$(wildcard $^),$^,$@,$?,$<,$(@D),$(@F) 含义

    makefile下$(wildcard $^),$^,$@,$?,$<,$(@D),$(@F)代表的不同含义 $(filter-out $(PHONY) $(wildcard $^),$^) 常 ...

  6. Codeforces Round #372 (Div. 2) A ,B ,C 水,水,公式

    A. Crazy Computer time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  7. (转)Nova中的compute_node

    如需转载,请标明原文出处以及作者 陈锐 RuiChen @kiwik *2015/2/4 22:44:22 * 写在最前面: 这段时间连续改了几个scheduler和resource_tracker相 ...

  8. 【NOIP2014 普及组】螺旋矩阵

    [NOIP2014 普及组]螺旋矩阵 一.题目 [NOIP2014 普及组]螺旋矩阵 时间限制: 1 Sec  内存限制: 128 MB 提交: 18  解决: 0 [提交][状态][讨论版] 题目描 ...

  9. 解决:AttributeError: module 'requests' has no attribute 'get'”

    今天学习Requests库,当用pip install requests安装后,写了一段代码报错:AttributeError: module 'requests' has no attribute ...

  10. hdu6237 分解质因子

    题意:给一堆石子,每次移动一颗到另一堆,要求最小次数使得,所有石子数gcd>1 题解:枚举所有质因子,然后找次数最小的那一个,统计次数时,我们可以事先记录下每堆石子余质因子 的和,对所有石子取余 ...