机器学习:多项式回归(scikit-learn中的多项式回归和 Pipeline)
一、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)
- 相对于scikit-learn中的多项式回归,自己使用多项式回归,就是在使用线性回归前,改造了样本的特征;
- sklearn 中,多项式回归算法(PolynomialFeatures)封装在了 preprocessing 包中,也就是对数据的预处理;
- 对于多项式回归来说,主要做的事也是对数据的预处理,为数据添加一些新的特征;
使用 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]])
- degree=2:表示对原本数据集 X 添加一个最多为 2 次幂的相应的多项式特征;
- poly.transform(X):将原本数据集 X 的每一种特征,转化为对应的多项式的特征;
- X2:生成的多项式特征相应的数据集;
- 疑问:X 的样本原有一个特征,经过 PolynomialFeatures 后生成了 3 个特征?
- 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]])
- 当 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.]]) - 当 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 过程
使用多项式回归的过程
- 将原始数据集 X 讲过 PolynomialFeatures 算法,生成多项式的特征的样本的数据集;
- 数据归一化(StandardScaler):如果 degree 非常的大,样本生成的特征的数据的差距也会变动非常的大;
- 将新的数据集传给线性回归算法:LinearRegression;
- Pipeline 将这 3 步合为一体,使得每次使用多项式回归时,不需要重复这 3 个过程;
- 具体操作过程
- 模拟数据
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) - 使用 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) - 绘制拟合的结果
plt.scatter(x, y)
plt.plot(np.sort(x), y_predict[np.argsort(x)], color='r')
plt.show()
机器学习:多项式回归(scikit-learn中的多项式回归和 Pipeline)的更多相关文章
- 机器学习框架Scikit Learn的学习
一 安装 安装pip 代码如下:# wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=83 ...
- (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探
一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...
- (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探
目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...
- Scikit Learn: 在python中机器学习
转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...
- sklearn中的多项式回归算法
sklearn中的多项式回归算法 1.多项式回归法多项式回归的思路和线性回归的思路以及优化算法是一致的,它是在线性回归的基础上在原来的数据集维度特征上增加一些另外的多项式特征,使得原始数据集的维度增加 ...
- 【笔记】多项式回归的思想以及在sklearn中使用多项式回归和pipeline
多项式回归以及在sklearn中使用多项式回归和pipeline 多项式回归 线性回归法有一个很大的局限性,就是假设数据背后是存在线性关系的,但是实际上,具有线性关系的数据集是相对来说比较少的,更多时 ...
- scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类 (python代码)
scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...
- Scikit Learn
Scikit Learn Scikit-Learn简称sklearn,基于 Python 语言的,简单高效的数据挖掘和数据分析工具,建立在 NumPy,SciPy 和 matplotlib 上.
- 机器学习在IC设计中的应用(二)--根据GBA时序结果来预测PBA
本文转自:自己的微信公众号<集成电路设计及EDA教程> <机器学习在IC设计中的应用(二)--根据GBA时序结果来预测PBA> AOCV AOCV全称:Advanced OCV ...
随机推荐
- Java Comparator方法 和 Comparable接口
默认的排序方法: 让类继承Comparable接口,重写compareTo方法. 示例代码: package com.imooc.collection; import java.util.HashSe ...
- freemarker模板解析过程
例如:一个freemarker表达式<body> ${hello} </body>,会被解析成三个部分,分别是<body>${hello}</body> ...
- Centos6.5安装php5.6.7
1. 下载 官网:http://php.net/downloads.php wget http://cn2.php.net/get/php-5.6.7.tar.gz/from/this/mirror ...
- 安装mysql5.7后无法启动,/var/run/mysqld 目录每次重启后都需要手动去创建--终极解决方案
鉴于很多童鞋反应,mysql5.7安装后出现无法启动,建立/var/run/mysqld 并赋权mysql用户解决了启动的问题,但是重启系统后又出现无法启动的问题,导致/var/run/mysqld ...
- tyvj 1402 乌龟棋 dp
P1402 [NOIP2010]乌龟棋 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2010提高组复赛第二题 描述 小明过生日的时候,爸爸送给他一 ...
- STL视频_02
[01:05]主要讲一下几个要点: 1.模板.函数模板 类模板 以及它们的用法 2.容器.什么是容器 和 容器的分类,各种容器的数据结构 3.容器vector的具体用法,包括迭代器的具体用法 [01: ...
- iOS 使用宏定义函数和代码块
iOS使用宏定义函数和代码块 今天在开发过程中碰到一个问题:就是父类中要向外发送通知,然后子类中或者其他类中来接收它.当然一般是把它写到类方法中去,但是有个问题,就是如果调用的类不是它的子类,就不能直 ...
- review16
java.lang包中的Math类包含许多用来进行科学计算的方法,这些方法可以直接通过类名调用. Math类中还有两个静态常量E和PI,分别表示自然对数和圆周率. 以下是Math类的常用方法 pulb ...
- Microsoft Prism安装使用教程 搭建WPF松耦合架构框架
Microsoft Prism安装使用教程 搭建WPF松耦合架构框架 Prism是由微软Patterns & Practices团队开发的项目,目的在于帮助开发人员构建松散耦合的.更灵活.更易 ...
- Tomcat的bin目录下startup.bat、Tomcat6.exe、Tomcat6w.exe区别
从官方下载了apache-tomcat-6.0.37-windows-x64.zip安装包,解压后bin目录下的startup.bat.Tomcat6.exe.Tomcat6w.exe 3个程序有何区 ...