简单线性回归的应用及画图(一)
本文采用线性回归的模型进行了练习。使用的模型的损失函数如下:
代码首先生成了一些用于使用线性回归的数据然后加上了一些噪声,然后使用简单的线性回归和多项式回归进行拟合,画图计算的得分值并画图来判断拟合的效果:
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
import matplotlib.pyplot as plt
from sklearn.pipeline import Pipeline
from sklearn.exceptions import ConvergenceWarning
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = [u'simHei']
mpl.rcParams['axes.unicode_minus'] = False
import warningswarnings.filterwarnings(action='ignore', category=ConvergenceWarning)
np.random.seed(0)
np.set_printoptions(linewidth=1000)
N = 7
x = np.linspace(0, 6, N) + 0.5 * np.random.randn(N)
x = np.sort(x)
y = x ** 2 - 4 * x - 3 + 2 * np.random.randn(N)
x.shape = -1, 1 # 将一维转换成二维
y.shape = -1, 1
model = Pipeline([('poly', PolynomialFeatures()), ('linear', LinearRegression(fit_intercept=False))])np.set_printoptions(suppress=True)
plt.figure(figsize=(15, 12), facecolor='w')
d_pool = np.arange(1, N, 1) # 阶
m = d_pool.size
title = '简单线性回归'
plt.figure(figsize=(12, 10), facecolor='w')
plt.plot(x, y, 'ro', ms=20, zorder=N)
for i, d in enumerate(d_pool):print()model.set_params(poly__degree=d)model.fit(x, y.ravel())lin = model.get_params('linear')['linear']output = '%s:%d阶,系数为:' % (title, d)print(output, lin.coef_.ravel()) # 偏置项和权重向量x_hat = np.linspace(x.min(), x.max(), num=100)x_hat.shape = -1, 1y_hat = model.predict(x_hat)s = model.score(x, y)print('预测性能得分(其实就是R^2):', s, '\n')z = N - 1 if (d == 2) else 0 # z是下面画图中的zorder参数的值,是指该线在图中的级别,数值越大,级别越高,# 在多线交叉时会显示在最上面,也就是会压住其他的线显示在最前面,这里是设置二阶拟合的级别最高label = '%d阶,$R^2$=%.3f' % (d, s)plt.plot(x_hat, y_hat, lw=5, alpha=1, label=label, zorder=z)plt.legend(loc='upper left')
plt.grid(True)
plt.title(title, fontsize=18)
plt.xlabel('X', fontsize=16)
plt.ylabel('Y', fontsize=16)plt.tight_layout(1, rect=(0, 0, 1, 0.95))
plt.suptitle('多项式曲线拟合比较', fontsize=22)
plt.show()
结果如下:
简单线性回归:1阶,系数为: [-11.59955139 3.21128547]
预测性能得分(其实就是R^2): 0.8473850440881161 简单线性回归:2阶,系数为: [-4.759704 -2.40817855 0.80729147]
预测性能得分(其实就是R^2): 0.9881672192691497 简单线性回归:3阶,系数为: [-3.10639837 -4.54966796 1.47170329 -0.05828197]
预测性能得分(其实就是R^2): 0.9894603396317786 简单线性回归:4阶,系数为: [-7.11535811 2.57656227 -2.37520833 0.73370352 -0.05455689]
预测性能得分(其实就是R^2): 0.9903631737208167 简单线性回归:5阶,系数为: [-3.60369003 -5.05417412 3.35121182 -1.18063556 0.23715757 -0.01645443]
预测性能得分(其实就是R^2): 0.9905487914062026 简单线性回归:6阶,系数为: [ 98.23215938 -304.34304116 330.18128658 -170.09864181 44.43797392 -5.66618534 0.27949474]
预测性能得分(其实就是R^2): 1.0
画出的图线如下:
一共有七个点,因此最高能够生成一个六次方程完全通过这些点,但是这条线已经出现了严重的龙格现象。从二次到五次的差别都不大。
简单线性回归的应用及画图(一)相关推荐
- c++ 线性回归_模型之母:简单线性回归的代码实现
模型之母:简单线性回归的代码实现 关于作者:饼干同学,某人工智能公司交付开发工程师/建模科学家.专注于AI工程化及场景落地,希望和大家分享成长中的专业知识与思考感悟. 0x00 前言 在<模型之 ...
- Python构建简单线性回归模型教程
本文介绍如何构建简单线性回归模型及计算其准确率,最后介绍如何持久化模型. 线性回归模型 线性回归表示发现函数使用线性组合表示输入变量.简单线性回归很容易理解,使用了基本的回归技术,一旦理解了这些基本概 ...
- 线性回归模型(简单线性回归、局部线性回归、非线性关系)从理论到Python实现.整理...
1.什么是线性回归? 线性回归是试图在一堆数据中训练得到自变量x和因变量y中一组线性关系,如.例如把人脚底板长度作为自变量,身高作为因变量,那么在这两种数据之间就可以做一个简单线性回归,可以得到脚底板 ...
- 机器学习系列 | 线性回归模型(简单线性回归、局部线性回归、非线性关系)
1.什么是线性回归? 线性回归是试图在一堆数据中训练得到自变量x和因变量y中一组线性关系,如 y = w x + b y=wx+b y=wx+b.例如把人脚底板长度作为自变量,身高作为因变量,那么在这 ...
- TensorFlow简单线性回归
TensorFlow简单线性回归 将针对波士顿房价数据集的房间数量(RM)采用简单线性回归,目标是预测在最后一列(MEDV)给出的房价. 波士顿房价数据集可从http://lib.stat.cmu.e ...
- R语言使用lmPerm包应用于线性模型的置换方法(置换检验、permutation tests)、使用lm模型构建简单线性回归模型、使用lmp函数生成置换检验回归分析模型
R语言使用lmPerm包应用于线性模型的置换方法(置换检验.permutation tests).使用lm模型构建简单线性回归模型.使用lmp函数生成置换检验回归分析模型(Permutation te ...
- Python Train_机器学习--基于Python的简单线性回归
一.概念 线性回归(Linear regression)是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析. 这种函数是一个或多个称为回归系数的模型参数的线性 ...
- plor 回归的r方_简单线性回归模型
点击"蓝字"关注我们吧 1 导言 回归分析是一个古老的话题.一百多年前,英国的统计学家高尔顿(F. Galton,1822-1911)和他的学生皮尔逊(K. Pearson,185 ...
- 机器学习第2天:简单线性回归模型
文章目录 一.概念 1. 什么是回归 2. 什么是线性 3. 什么是线性回归 二.具体实现步骤 第1步:数据预处理 第2步:使用简单线性回归模型来训练训练集 第3步:预测结果 第4步:可视化 训练集结 ...
- ML之LiR:基于编程实现简单线性回归案例
ML之LiR:基于编程实现简单线性回归案例 目录 LiR算法思路配图 编程实现简单线性回归案例 LiR算法思路配图 1.LiR输出结果 编程实现简单线性回归案例 结果显示
最新文章
- 三层交换机----VRRP协议学习
- 怎么自学python 知乎-你是如何自学 Python 的?
- ELSE 技术周刊(2017.12.25期)
- java中所有的类都继承于_Java中所有的类都是通过直接或间接地继承( )类得到的...
- android 如何修改百度导航诱导界面,Android 百度导航SDK
- 【Python学习】win10+Anaconda3环境,安装phthon第三方库Jieba
- python 如何判断一个函数执行完成_三步搞定 Python 中的文件操作
- Reactor网络编程模型
- 验证码图片 java_验证码图片
- java基础70 负责静态的网页制作语言XML(网页知识)
- 《指弹:Like a star》
- C# AD FS实现网站单点登录 Active Directory Federation Services-活动目录联合身份认证 AD域单点登录 ADFS单点登录
- springboot启动报错 java.lang.ArrayStoreException异常解决方法
- 艺术源于生活而高于生活,IT编程亦是如此
- uni-app 手势放大图片
- java马士兵网络编程_学习笔记-马士兵java - 网络编程
- 大数据-玩转数据-Maxcompute DDL
- tftp 服务器搭建测试版本ubuntu14.04
- WPF Prism框架之Dialog
- Fzu 2255 过河【Dp】好题!