预备知识及相关文档博客

学习吴恩达机器学习课程笔记,并用python实现算法

python numpy基本教程: numpy相关教程

数据来自于UCI的机器学习数据库: UCI的机器学习数据库

python绘制图形所用包matplotlib文档: matplotlib相关教程

数据计算处理工具pandas相关博客: pandas相关博客

数据介绍

数据介绍: Auto-mpg 汽车性能相关参数:

共有398个样本,以及9个变量,分别是mpg(燃料效率)、cylinders(发动机里的气缸数量)、displacement(发动机的位移)、horsepower(发动机的马力,有缺失值)、weight(汽车的重量)、acceleration(汽车的加速性能)、model year(汽车类型的生产年份)、car name(汽车品牌)等等

梯度下降算法及线性回归算法介绍

回归分析:

数学意义上来说是给定一个点集,能够用一条曲线去拟合之,如果这个曲线是一条直线,那就被称为线性回归,线性回归在这里也不过多解释,这篇文章主要是为了实现算法。在回归分析中,只包括一个自变量和一个因变量,即y=θ0+θ1X称为一元线性回归分析。若是包含多个因变量则是多元线性回归,即y=θ0+θ1X1+θ2X2+…+θnXn。

简单来说就是给你一堆数据,你从几个不同变量中找出它们之间的函数关系,并求出这些匹配不同变量的系数,如θ0,θ1等。

梯度下降算法:

梯度下降法是一种最优化算法,它是用迭代的方法求解目标函数得到最优解,是在cost function(成本函数)的基础上,利用梯度迭代求出局部最优解。

这里不过多解释,下面实现代码时会给出公式推导。

算法实现

相关数据截图:

UCI的机器学习数据库

网站的数据是以csv文件形式给出的,因此可以用pandas的read_csv()读取,但由于这个网站的数据没有表头,所以我们在读取时要加上表头,下面是代码,并且后面会针对部分代码给出解释

from io import StringIO

from urllib import request

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

from matplotlib import cm

import ssl

import pandas as pd

import numpy as np

import linearRegrassion as lg

ssl._create_default_https_context = ssl._create_unverified_context

names =["mpg","cylinders","displacement","horsepower",

"weight","acceleration","model year","origin","car name"]

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data'

s = request.urlopen(url).read().decode('utf8')

dataFile = StringIO(s)

cReader = pd.read_csv(dataFile,delim_whitespace=True,names=names) # 将流 转换为可迭代的 reader(csv row)

names是加上的表头,作为read_csv()的参数传给它

read_csv()还有一个参数filepath_or_buffer :

str,pathlib。str, pathlib.Path, py._path.local.LocalPath or any object with a read() method (such as a file handle or StringIO)

可以是URL,可用URL类型包括:http, ftp, s3和文件

这里要注意一下,直接读取url: pd.read_csv(url,delim_whitespace=True,names=names)会报urllib.error.URLError: 的错误

因此要import ssl并加上下面这几行语句

ssl._create_default_https_context = ssl._create_unverified_context

s = request.urlopen(url).read().decode('utf8')

dataFile = StringIO(s) # 将字符串转换为 StringIO对象,使其具有文件属性

观察加载后的数据(如下图),截图较短,你可以对照上下表或是元数据集观察

加上表头后的数据

我们可以发现,有一定变化幅度并且比较相关联的几个量是mpg(燃料效率),displacement(发动机的位移),horsepower(发动机的马力,有缺失值),acceleration(汽车的加速性能)

通常情况下,我们关注汽车性能时主要看它的加速性能,所以我们选取acceleration为关键性能,考量mpg,displacement对其的影响,以此做一个回归分析

其实horsepower与加速性能也很相关,但由于有缺失值,需要额外操作,在此我们还是要把重心放到实现算法本身上,所以先不予考虑

我们首先将上面代码得到的数据集绘制散点图,观察一下它的分布,代码如下:

ax = plt.subplot(111, projection='3d') # 创建一个三维的绘图工程

ax.scatter(cReader["mpg"][:100],cReader["displacement"][:100],cReader["acceleration"][:100],c='y')

#根据不同数据范围散点取不同颜色以便于区分

ax.scatter(cReader["mpg"][100:250],cReader["displacement"][100:250],cReader["acceleration"][100:250],c='r')

ax.scatter(cReader["mpg"][250:],cReader["displacement"][250:],cReader["acceleration"][250:],c='b')

ax.set_zlabel('acceleration') # 坐标轴

ax.set_ylabel('displacement')

ax.set_xlabel('mpg')

plt.show()

# 绘制mpg和displacement的二维散点图,其实也是三维散点图在x,y平面上的投影

plt.scatter(cReader["mpg"],cReader["displacement"])

plt.xlabel('mpg')

plt.ylabel('displacement')

plt.show()

得到的散点图:

3d散点图.png

mpg和displacement的二维散点图:

Figure_2d.png

在这篇文章里我们介绍了一些准备知识,并且通过python的pandas模块获取了相关数据集并将其可视化,在下面的系列文章里我会介绍如何处理这些数据并且实现算法:

第二篇已更新: Python实现梯度下降求多元线性回归(二)

python多元线性回归代码_Python实现梯度下降算法求多元线性回归(一)相关推荐

  1. python求解多元方程最优解_Python实现梯度下降算法求多元线性回归(二)

    前言 上一篇我们对数据进行了读取并进行了可视化,今天我们来继续实现算法. 完整代码会在最后给出,如果你直接复制下面零散的代码可能会运行不了. 这篇的代码已经默认import了pandas,numpy等 ...

  2. 基于jupyter notebook的python编程-----利用梯度下降算法求解多元线性回归方程,并与最小二乘法求解进行精度对比

    基于jupyter notebook的python编程-----利用梯度下降算法求解多元线性回归方程,并与最小二乘法求解进行精度对比目录 一.梯度下降算法的基本原理 1.梯度下降算法的基本原理 二.题 ...

  3. 批量梯度下降python实现_python实现梯度下降算法的实例详解

    python版本选择 这里选的python版本是2.7,因为我之前用python3试了几次,发现在画3d图的时候会报错,所以改用了2.7. 数据集选择 数据集我选了一个包含两个变量,三个参数的数据集, ...

  4. 用Python学习吴恩达机器学习——梯度下降算法理论篇

    开篇词:(CSDN专供) 欢迎阅读我的文章,本文起先是在B站上进行投稿,一开始是采用吴恩达机器学习2012年版的,目前已经出了十二期了.现在我决定将我摸索出来的学习笔记在各个平台上进行连载,保证同时更 ...

  5. python动态爱心代码_python 动态绘制爱心的示例

    python 动态绘制爱心的示例 代码 import turtle turtle.bgcolor("black") turtle.pensize(2) sizeh = 1.2 de ...

  6. python画画的代码_python画画代码

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! life is short, just use python.自从08年接触py ...

  7. python视频处理代码_python如何实现视频转代码视频

    本文实例为大家分享了python如何实现视频转代码视频的具体代码,供大家参考,具体内容如下 # -*- coding:utf-8 -*- #coding:utf-8 import argparse i ...

  8. python五边形的代码_python正五边形代码

    python正五边形代码 第一步先找规律,抽象化问题.首先我们观察到,第一行为[1],我们直接赋给一个变量:初始化数列 p = [1].核心点是这个除去首位两个 [1] 的中间部分:[p[0] + p ...

  9. python阶乘的代码_python编码阶乘

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 需求:阶乘:也是数学里的一种术语: 阶乘指从1乘以2乘以3乘以4一直乘到所要求的 ...

最新文章

  1. 太励志!80 后草根创业者自学编程年收入上亿
  2. 在linux下修改oracle字符集
  3. 学习XML(添加一个子节点) 摘录
  4. 项目管理指标_项目经理必掌握的九大项目管理问题
  5. linux 使用碎碎记
  6. redis-shake简介
  7. 【BZOJ】[SDOI2009]HH的项链
  8. python 异常处理小结 try except raise assert
  9. 巴比特 | 元宇宙每日必读:红杉中国“雇”了一位虚拟员工,自称每秒可看百份商业计划书,期待时薪为0.68元...
  10. python随手记自动记账_随手记的5个常用功能,让你记账省心,高效,又安全
  11. 计算机硬件设备介绍 ppt,计算机硬件设备的认识课件.ppt
  12. SDN环境搭建和基本功能验证
  13. 达观数据智能对公审贷系统,深化上海银行普惠金融、供应链金融科技创新
  14. 侯耀文两女告侯耀华争遗产
  15. 互联网公司常用的DevOps 工具,你都认识吗?
  16. Cannot find module ‘webpack‘ Require stack
  17. 微波射频学习笔记13-------π型衰减和T型衰减
  18. 网盘可以良心到什么程度? 试试MEGA吧!
  19. 台式计算机电源键坏了,电脑电源开关键损坏怎么解决 电脑电源灯不亮了怎么办...
  20. 伪原创之造就百万点击率

热门文章

  1. 单片机STM8S测量电压电路_单片机设计的胶带输送机智能模糊检测系统,准确性高,胶带寿命长...
  2. verilog实现汉明权重_(学习Verilog)6. FIR IP核的基础功能使用总结
  3. idea 修改样式要编译_在IDEA中DEBUG Javac源码
  4. PostgreSQL11.7逻辑复制的搭建
  5. 86-90linux下配置javaEE环境
  6. linux 1060显卡,Steam最受欢迎显卡型号出炉:GTX 1060显卡的占有率依然排名第一
  7. php 连接 onenet,arduino一直连接不上onenet
  8. java ios 字符串_Java 与 iOS使用RSA 加密签名
  9. MySQL InnoDB 存储引擎索引那些事儿
  10. linux执行使分区生效的命令,Linux硬盘分区生效命令partprobe