机器学习sklearn-多项式回归
目录
线性关系
线性模型和非线性模型
利用线性回归解决非线性问题
多项式回归
线性模型
线性关系
线性模型和非线性模型
![](/assets/blank.gif)
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressorrnd=np.random.RandomState(40)#设置随机数种子
X = rnd.uniform(-3, 3, size=100) #random.uniform,从输入的任意两个整数中取出size个随机数
#生成y的思路:先使用NumPy中的函数生成一个sin函数图像,然后再人为添加噪音
y = np.sin(X) + rnd.normal(size=len(X)) / 3 #random.normal,生成size个服从正态分布的随机数#使用散点图观察建立的数据集是什么样子
# plt.scatter(X, y,marker='o',c='k',s=20)
# plt.show()X=X.reshape(-1,1)#将数据升到二维
#使用原始数据进行建模
LinearR = LinearRegression().fit(X, y)
TreeR = DecisionTreeRegressor(random_state=0).fit(X, y)#放置画布
fig,ax1=plt.subplots(1)
#创建测试数据:一系列分布在横坐标上的点
line = np.linspace(-3, 3, 1000, endpoint=False).reshape(-1, 1)
#将测试数据代入predict接口,并绘制
ax1.plot(line,LinearR.predict(line),linewidth=2, color='green',label="linear regression")
ax1.plot(line, TreeR.predict(line), linewidth=2, color='red',label="decision tree")
#将原数据上的拟合绘制在图像上
ax1.plot(X[:, 0], y, 'o', c='k')ax1.legend(loc="best")
ax1.set_ylabel("Regression output")
ax1.set_xlabel("Input feature")
ax1.set_title("Result before discretization")
plt.tight_layout()
plt.show()
![](/assets/blank.gif)
利用线性回归解决非线性问题
![](/assets/blank.gif)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor
from sklearn.preprocessing import KBinsDiscretizer #分箱rnd=np.random.RandomState(40)#设置随机数种子
X = rnd.uniform(-3, 3, size=100) #random.uniform,从输入的任意两个整数中取出size个随机数
#生成y的思路:先使用NumPy中的函数生成一个sin函数图像,然后再人为添加噪音
y = np.sin(X) + rnd.normal(size=len(X)) / 3 #random.normal,生成size个服从正态分布的随机数
X = X.reshape(-1, 1)
line = np.linspace(-3, 3, 1000, endpoint=False).reshape(-1, 1)#测试集数据#分箱操作
enc=KBinsDiscretizer(n_bins=10,#分几个箱子encode='onehot',#采用哑变量方式做离散化)
X_binned=enc.fit_transform(X)#之后返回一个稀疏矩阵(m,n_bins),m是样本数量,每一列是一个分好的类别
line_binned = enc.transform(line)LinearR = LinearRegression().fit(X, y)
TreeR = DecisionTreeRegressor(random_state=0).fit(X, y)#将两张图像绘制在一起,布置画布
fig, (ax1, ax2) = plt.subplots(ncols=2, sharey=True #让两张图共享y轴上的刻度, figsize=(10, 4))
#在图1中布置在原始数据上建模的结果
ax1.plot(line, LinearR.predict(line), linewidth=2, color='green',label="linear regression")
ax1.plot(line, TreeR.predict(line), linewidth=2, color='red',label="decision tree")
ax1.plot(X[:, 0], y, 'o', c='k')
ax1.legend(loc="best")
ax1.set_ylabel("Regression output")
ax1.set_xlabel("Input feature")
ax1.set_title("Result before discretization")#使用分箱数据进行建模
LinearR_ = LinearRegression().fit(X_binned, y)
TreeR_ = DecisionTreeRegressor(random_state=0).fit(X_binned, y)
#进行预测,在图2中布置在分箱数据上进行预测的结果
ax2.plot(line #横坐标, LinearR_.predict(line_binned) #分箱后的特征矩阵的结果, linewidth=2, color='green', linestyle='-', label='linear regression')
ax2.plot(line, TreeR_.predict(line_binned), linewidth=2, color='red',linestyle=':', label='decision tree')#绘制和箱宽一致的竖线,可有可无
ax2.vlines(enc.bin_edges_[0] #x轴, *plt.gca().get_ylim() #y轴的上限和下限, linewidth=1, alpha=.2) #将原始数据分布放置在图像上ax2.plot(X[:, 0], y, 'o', c='k')
ax2.legend(loc="best")
ax2.set_xlabel("Input feature")
ax2.set_title("Result after discretization")
plt.tight_layout()
plt.show()
多项式回归
![](/assets/blank.gif)
一维的转换公式
二维转换公式
![](/assets/blank.gif)
from sklearn.preprocessing import PolynomialFeatures
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegressiond=5#多项式维度
rnd=np.random.RandomState(40)#设置随机数种子
X = rnd.uniform(-3, 3, size=100) #random.uniform,从输入的任意两个整数中取出size个随机数
#生成y的思路:先使用NumPy中的函数生成一个sin函数图像,然后再人为添加噪音
y = np.sin(X) + rnd.normal(size=len(X)) / 3 #random.normal,生成size个服从正态分布的随机数
X = X.reshape(-1, 1)
line = np.linspace(-3, 3, 1000, endpoint=False).reshape(-1, 1)#测试集数据
line_=PolynomialFeatures(degree=d).fit_transform(line)LinearR = LinearRegression().fit(X, y)
X_=PolynomialFeatures(degree=d).fit_transform(X)#对数据进行多项式处理
LinearR_=LinearRegression().fit(X_, y)#放置画布
fig, ax1 = plt.subplots(1) #将测试数据带入predict接口,获得模型的拟合效果并进行绘制
#多项式处理前
ax1.plot(line, LinearR.predict(line), linewidth=2, color='green',label="linear regression")
#多项式处理后 训练时使用多项式数据,预测时也应采用多项式数据
ax1.plot(line, LinearR_.predict(line_), linewidth=2, color='red',label="Polynomial regression") #将原数据上的拟合绘制在图像上
ax1.plot(X[:, 0], y, 'o', c='k') #其他图形选项
ax1.legend(loc="best")
ax1.set_ylabel("Regression output")
ax1.set_xlabel("Input feature")
ax1.set_title("Linear Regression ordinary vs poly")
plt.tight_layout()
plt.show()
#随后可以试试看较低和较高的次方会发生什么变化
线性模型
机器学习sklearn-多项式回归相关推荐
- 【机器学习】多项式回归原理介绍
[机器学习]多项式回归原理介绍 [机器学习]多项式回归python实现 [机器学习]多项式回归sklearn实现 在上一节中我们介绍了线性回归的原理,然后分别用python和sklearn实现了不同变 ...
- Py之scikit-learn:机器学习Sklearn库的简介、安装、使用方法(ML算法如何选择)、代码实现之详细攻略
Py之scikit-learn:机器学习Sklearn库的简介.安装.使用方法.代码实现之详细攻略 目录 scikit-learn的简介 scikit-learn的安装 scikit-learn的使用 ...
- svd降维 python案例_菜菜的机器学习sklearn实战-----sklearn中的降维算法PCA和SVD
菜菜的机器学习sklearn实战-----sklearn中的降维算法PCA和SVD 概述 从什么叫维度说开来 简单讲,shape中返回了几个数字就是几维. 一张表最多就是一维 当一个数组中存在2张3行 ...
- [机器学习-Sklearn]函数sklearn.feature_extraction.DictVectorizer理解与总结
机器学习-Sklearn之DictVectorizer函数学习 函数介绍 例子1 例子2 - 文件中读数据 函数介绍 sklearn.featture_extraction.DictVectorize ...
- python机器学习-sklearn挖掘乳腺癌细胞(五)
python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...
- 《菜菜的机器学习sklearn课堂》学习笔记 + 课件
<菜菜的机器学习sklearn课堂> sklearn入门与决策树 随机森林应用泛化误差调参实例 数据预处理和特征工程 降维算法PCA和SVD 逻辑回归 聚类算法Kmeans SVM支持向量 ...
- 《菜菜的机器学习sklearn课堂》聚类算法Kmeans
聚类算法 聚类算法 无监督学习与聚类算法 sklearn中的聚类算法 KMeans KMeans是如何工作的 簇内误差平方和的定义和解惑 sklearn.cluster.KMeans 重要参数 n_c ...
- 《菜菜的机器学习sklearn课堂》逻辑回归
逻辑回归 概述:名为"回归"的分类器 为什么需要逻辑回归? sklearn中的逻辑回归 linear_model.LogisticRegression 二元逻辑回归的损失函数 损失 ...
- 《菜菜的机器学习sklearn课堂》sklearn入门与决策树
决策树 sklearn简介 决策树 - 概述 决策树是如何工作的 sklearn中的决策树 分类树 DecisionTreeClassifier 重要参数 criterion 建立一颗树(只有一个参数 ...
- 机器学习Sklearn学习总结
Sklearn学习资料推荐: sklearn中文文档 机器学习入门必看:使用 scikit-learn 构建模型的通用模板 机器学习神器Scikit-Learn保姆教程! python机器学习_FF_ ...
最新文章
- 项目执行maven update时,报:Preference node org.eclipse.wst.validation
- Oracle 表连接方式(内连接/外连接/自连接) 详解
- JSP简单练习-使用JDOM创建xml文件
- SpringBoot 信息输出
- MessageQueue Message Looper Handler的解释说明
- Ruby编程语言学习笔记4
- golang 的枚举
- 小米发布2021年第二季度财报:小米手机二季度平均售价1116.7元
- webpack 基本功能和原理
- 自己配置外接屏幕和驱动,最终通过hdmi连接
- 08Oracle Database 完整性约束
- 拓端tecdat|R语言分层线性模型案例
- @RequestMapping、@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping详解
- python矩阵连乘_python动态演示动态规划解决矩阵连乘
- python忽略错误继续执行_python能在错误出现之后再进行处理吗?
- html支付系统时间,中国人民银行支付系统介绍
- deactive(Deactive breakpoint)
- 【C语言典例】——day8:猜名次
- C语言编程判断输入的英文字母是星期几
- 【深度强化学习】神经网络、爬山法优化控制倒立摆问题实战(附源码)
热门文章
- 让我郁闷的不行的SQL Anywhere 10
- smokeping图表各值意义解释
- java的依赖注入_Java依赖注入的三种方式
- Go语言upnp和socket编程
- 系统管理Lesson 10. Managing Data Concurrency
- 算法2.2 已知线性表LA和LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列。
- WireShark实战笔记之DNS协议分析
- 世界杯开幕:AI模拟了上万场比赛 告诉你这四大热门夺冠队
- 中国商用燃气煎锅行业市场供需与战略研究报告
- c语言 函数strdup,C/C++ strdup()、strndup()用法及代码示例