本小节内容:
开始的时候,是从三个方面介绍线性回归算法,分别是单变量,多变量,梯度下降。
由于之前这个已经记录过博客,在此就不加以赘述了,可以翻看以前的机器学习栏目中的博客,具体公式推导已经全部写了。
主要来讲一下如何利用线性回归算法去拟合正弦函数
首先我们要随机生成一些正弦函数上的点,然后再生成一些噪声点(不在正弦函数上的点),最后将这些点进行格式化成sklearn试用的点
然后用多阶函数去拟合这些点,最后算出评分,再将这些拟合的数据构建成一个二维的坐标图,直观的观测出拟合的效果


生成点并且格式数组

n_dots = 200
X = np.linspace(-2 * np.pi, 2 * np.pi, n_dots) # 生成200个正弦函数点
Y = np.sin(X) + 0.2 * np.random.rand(n_dots) - 0.1 # 生成一些随机点(噪声点)
X = X.reshape(-1, 1) # 格式化
Y = Y.reshape(-1, 1); # 格式化

多阶函数拟合模型

用pipeline把函数与函数弄在一起,可以在原有阶乘上增加特征矩阵(特征值)
具体的解释:

from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline# 生成多项式模型
def polynomial_model(degree=1): # degree是阶乘的阶数# PolynomialFeatures:生成一个新的特征矩阵# 如果有a,b两个特征,那么它的2次多项式为(1,a,b,a^2,ab, b^2),这个多项式的形式是使用poly的效果。# include_bias:默认为True。如果为True的话,那么就会有上面的 1那一项polynomial_features = PolynomialFeatures(degree=degree,include_bias=False)# LinearRegression:普通最小二乘线性回归# normalize=True是标准化linear_regression = LinearRegression(normalize=True)# 这个是一个流水线,先增加多项式的阶数,然后再用线性回归算法来拟合数据pipeline = Pipeline([("polynomial_features", polynomial_features),("linear_regression", linear_regression)])return pipeline

开始拟合并算出score

算出2阶,3阶,5阶,10阶的函数,并算出score和均方根误差mean_squared_error,并依此输出

from sklearn.metrics import mean_squared_errordegrees = [2, 3, 5, 10]
results = []
for d in degrees:model = polynomial_model(degree=d)model.fit(X, Y)train_score = model.score(X, Y)mse = mean_squared_error(Y, model.predict(X))results.append({"model": model, "degree": d, "score": train_score, "mse": mse})
for r in results:print("degree: {}; train score: {}; mean squared error: {}".format(r["degree"], r["score"], r["mse"]))


看拟合效果

我们根据上面的数据,可以看出10阶的拟合效果是最好的,但是我们想更加直观的看出效果的话,可以将数据放入图像中直接拟合出来

from matplotlib.figure import SubplotParamsplt.figure(figsize=(12, 6), dpi=200, subplotpars=SubplotParams(hspace=0.3))
for i, r in enumerate(results):fig = plt.subplot(2, 2, i+1)plt.xlim(-8, 8)plt.title("LinearRegression degree={}".format(r["degree"]))plt.scatter(X, Y, s=5, c='b', alpha=0.5)plt.plot(X, r["model"].predict(X), 'r-')


思考题


完整代码:

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
n_dots = 1000X = np.linspace(-20, 20, n_dots)
Y = np.sin(X) + 0.2 * np.random.rand(n_dots) - 0.1
X = X.reshape(-1, 1)
Y = Y.reshape(-1, 1);
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline# 生成多项式模型
def polynomial_model(degree=1): # degree是阶乘的阶数# PolynomialFeatures:生成一个新的特征矩阵# 如果有a,b两个特征,那么它的2次多项式为(1,a,b,a^2,ab, b^2),这个多项式的形式是使用poly的效果。# include_bias:默认为True。如果为True的话,那么就会有上面的 1那一项polynomial_features = PolynomialFeatures(degree=degree,include_bias=False)# LinearRegression:普通最小二乘线性回归# normalize=True是标准化linear_regression = LinearRegression(normalize=True)# 这个是一个流水线,先增加多项式的阶数,然后再用线性回归算法来拟合数据pipeline = Pipeline([("polynomial_features", polynomial_features),("linear_regression", linear_regression)])return pipelinefrom sklearn.metrics import mean_squared_error
degrees = [2, 3, 5, 10, 13, 15, 18, 20, 21, 22, 23, 24]
results = []
for d in degrees:model = polynomial_model(degree=d)model.fit(X, Y)train_score = model.score(X, Y)mse = mean_squared_error(Y, model.predict(X))results.append({"model": model, "degree": d, "score": train_score, "mse": mse})
for r in results:print("degree: {}; train score: {}; mean squared error: {}".format(r["degree"], r["score"], r["mse"]))
from matplotlib.figure import SubplotParamsplt.figure(figsize=(12, 6), dpi=200, subplotpars=SubplotParams(hspace=0.3))
for i, r in enumerate(results):fig = plt.subplot(4, 4, i+1)plt.xlim(-8, 8)plt.title("LinearRegression degree={}".format(r["degree"]))plt.scatter(X, Y, s=5, c='b', alpha=0.5)plt.plot(X, r["model"].predict(X), 'r-')

最后拟合图为:

《scikit-learn机器学习》 使用线性回归算法拟合正弦函数相关推荐

  1. 线性回归算法--拟合正弦函数

    目录 步骤 代码实现 本博客参考书籍:<scikit-learn机器学习:常用算法原理及编程实战> 本博客源码地址:码云 步骤 生成200个在[−2π,2π][-2\pi,2\pi][−2 ...

  2. TF之LiR:基于tensorflow实现机器学习之线性回归算法

    TF之LiR:基于tensorflow实现机器学习之线性回归算法 目录 输出结果 代码设计 输出结果 代码设计 # -*- coding: utf-8 -*-#TF之LiR:基于tensorflow实 ...

  3. python 预测算法_通过机器学习的线性回归算法预测股票走势(用Python实现)

    本文转自博客园,作者为hsm_computer 原文链接:https://www.cnblogs.com/JavaArchitect/p/11717998.html在笔者的新书里,将通过股票案例讲述P ...

  4. 通过机器学习的线性回归算法预测股票走势(用Python实现)

    在本人的新书里,将通过股票案例讲述Python知识点,让大家在学习Python的同时还能掌握相关的股票知识,所谓一举两得.这里给出以线性回归算法预测股票的案例,以此讲述通过Python的sklearn ...

  5. 详解机器学习基础--线性回归算法

    线性回归解决了什么? 线性回归算法可以帮助解决回归问题,对处理回归问题有着天然的优势,线性回归算法虽然简单,但是对于处理回归问题还是有着比较好的作用 线性回归算法思想简单,实现容易,结果具有较好的解释 ...

  6. 机器学习之线性回归算法 Linear Regression

    回归分析(Regression Analysis)是统计学的数据分析方法,目的在于了解两个或多个变量间是否相关.相关方向与强度,并建立数学模型以便观察特定变量来预测其它变量的变化情况. 线性回归算法( ...

  7. 机器学习------一元线性回归算法

    文章目录 预测数据型数据:回归 回归的含义 回归应用 线性回归 利用Sklearn做线性回归的预测 线性回归拟合原理(fit方法) 损失函数 梯度下降法 梯度下降的分类 "Batch&quo ...

  8. python计算股票趋势_通过机器学习的线性回归算法预测股票走势(用Python实现)...

    1 波士顿房价数据分析 安装好Python的Sklearn库后,在安装包下的路径中就能看到描述波士顿房价的csv文件,具体路径是"python安装路径\Lib\site-packages\s ...

  9. python股票预测_通过机器学习的线性回归算法预测股票走势(用Python实现)

    1 波士顿房价数据分析 安装好Python的Sklearn库后,在安装包下的路径中就能看到描述波士顿房价的csv文件,具体路径是"python安装路径\Lib\site-packages\s ...

最新文章

  1. 卷积神经网络matlab_基于卷积神经网络的遥感图像养殖区自动划分
  2. 为什么不采用“两次握手”建立连接呢?
  3. VC实现基于Office 2007 MODI 12.0实现图形文字识别(OCR)的程序
  4. L 1 ,L 2 参数正则化
  5. java程序模拟atm机_Java项目实现模拟ATM机
  6. 不断迭代,严苛细节,最终性能如何满足? 基于ELK的大数据平台实践分享
  7. day10 Python 形参顺序
  8. ubuntu中安装mongodb注意事项
  9. maven java jar_如何去maven仓库下载jar包
  10. 微软悬赏25万美元捉拿Conficker蠕虫作者
  11. 网页授权前端 java_在开发网页授权获取用户基本信息时code是null
  12. 最经济方案 谈P2P电影服务器
  13. ktv服务器管理系统,KTV收银管理系统.doc
  14. 批处理控制VMware Workstation服务
  15. 电脑能登录QQ和微信,但是打不开网页浏览器
  16. 电商平台-财务系统模块的设计与架构
  17. jQuery php 多条件筛选,jquery筛选
  18. 【心理咨询师考试笔记】基础理论(六)——心理咨询概论
  19. 【二叉树的遍历-3】后序遍历(递归与非递归)
  20. 王国两位君主 多功能修改器V1.0.0 / Kingdom tow Crowns Trainer(千月修改器)

热门文章

  1. Docker10: docker compose
  2. 机器学习(十)分类算法之朴素贝叶斯(Naive Bayes)算法
  3. 什么是接口测试?接口测试基础、案例及Json格式详解
  4. Python3 通过字典的get()方法和setdefault()方法添加映射多个值的元素(用列表和集合实现)
  5. 弘辽科技:直通车推广新思路,真正实现低价引流
  6. iview transfer穿梭框
  7. 福尔摩斯式的推理和软件构造
  8. 前端将base64图片转换成file文件
  9. java logback策略输出无效,如何修改覆盖spring boot默认日志策略logback详解
  10. pyecharts 标准线_数据可视化之pyecharts