Python学习之多项式回归
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理
线性回归的改进版本中的多项式回归。如果您知道线性回归,那么对您来说很简单。如果没有,我将在本文中解释这些公式。还有其他先进且更有效的机器学习算法。但是,学习基于线性的回归技术是一个好主意。因为它们简单,快速并且可以使用众所周知的公式。尽管它可能不适用于复杂的数据集。
多项式回归公式
仅当输入变量和输出变量之间存在线性相关性时,线性回归才能很好地执行。如前所述,多项式回归建立在线性回归的基础上。如果您需要线性回归的基础知识,请访问线性回归:
Python中的线性回归算法
学习线性回归的概念并从头开始在python中开发完整的线性回归算法
多项式回归可以更好地找到输入要素与输出变量之间的关系,即使该关系不是线性的。它使用与线性回归相同的公式:
Y = BX + C
我敢肯定,我们都在学校学过这个公式。对于线性回归,我们使用如下符号:

在这里,我们从数据集中获得X和Y。X是输入要素,Y是输出变量。Theta值是随机初始化的。
对于多项式回归,公式如下所示:

我们在这里添加更多术语。我们使用相同的输入功能,并采用不同的指数以制作更多功能。这样,我们的算法将能够更好地了解数据。
幂不必为2、3或4。它们也可以为1 / 2、1 / 3或1/4。然后,公式将如下所示:

成本函数和梯度下降
成本函数给出了预测假设与值之间的距离的概念。公式为:

这个方程可能看起来很复杂。它正在做一个简单的计算。首先,从原始输出变量中减去假设。取平方消除负值。然后将该值除以训练示例数量的2倍。
什么是梯度下降?它有助于微调我们随机初始化的theta值。我不打算在这里进行微积分。如果对每个θ取成本函数的偏微分,则可以得出以下公式:

在这里,alpha是学习率。您选择alpha的值。
多项式回归的Python实现
这是多项式回归的逐步实现。
(1) 在此示例中,我们将使用一个简单的虚拟数据集,该数据集提供职位的薪水数据。导入数据集:
import pandas as pd
import numpy as np
df = pd.read_csv('position_salaries.csv')
df.head()

(2) 添加theta 0的偏差列。该偏差列将仅包含1。因为如果将1乘以数字,则它不会改变。
df = pd.concat([pd.Series(1, index=df.index, name='00'), df], axis=1)
df.head()

(3) 删除"位置"列。由于"位置"列中包含字符串,并且算法无法理解字符串。我们有"级别"列来代表职位。
dfdf = df.drop(columns='Position')
(4) 定义我们的输入变量X和输出变量y。在此示例中,"级别"是输入功能,而"薪水"是输出变量。我们要预测各个级别的薪水。
y = df['Salary']X = df.drop(columns = 'Salary')
X.head()

(5) 以"级别"列的指数为基础,创建"级别1"和"级别2"列。
X['Level1'] = X['Level']**2
X['Level2'] = X['Level']**3
X.head()

(6) 现在,标准化数据。用每一列除以该列的最大值。这样,我们将获得每列的值,范围从0到1。即使没有规范化,该算法也应该起作用。但这有助于收敛更快。同样,计算m的值,它是数据集的长度。
m = len(X)
XX = X/X.max()
(7) 定义假设函数。这将使用X和theta来预测" y"。
def hypothesis(X, theta):
y1 = theta*X
return np.sum(y1, axis=1)
(8) 使用上面的成本函数公式定义成本函数:
def cost(X, y, theta):
y1 = hypothesis(X, theta)
return sum(np.sqrt((y1-y)**2))/(2*m)
(9) 编写梯度下降函数。我们将不断更新theta值,直到找到最佳成本。对于每次迭代,我们将计算成本以供将来分析。
def gradientDescent(X, y, theta, alpha, epoch):
J=[]
k=0
while k < epoch:
y1 = hypothesis(X, theta)
for c in range(0, len(X.columns)):
theta[c] = theta[c] - alpha*sum((y1-y)* X.iloc[:, c])/m
j = cost(X, y, theta)
J.append(j)
k += 1
return J, theta
(10) 定义了所有功能。现在,初始化theta。我正在初始化零数组。您可以采用任何其他随机值。我选择alpha为0.05,我将迭代700个纪元的theta值。
theta = np.array([0.0]*len(X.columns))
J, theta = gradientDescent(X, y, theta, 0.05, 700)
(11) 我们还获得了最终的theta值以及每次迭代的成本。让我们使用最终theta查找薪水预测。
y_hat = hypothesis(X, theta)
(12) 现在根据水平绘制原始薪水和我们的预期薪水。
%matplotlib inline
import matplotlib.pyplot as plt
plt.figure()
plt.scatter(x=X['Level'],yy= y)
plt.scatter(x=X['Level'], y=y_hat)
plt.show()

我们的预测并不完全符合薪资趋势,但接近。线性回归只能返回一条直线。但是在多项式回归中,我们可以得到这样的曲线。如果该线不是一条好曲线,则多项式回归也可以学习一些更复杂的趋势。
(13) 让我们绘制我们在梯度下降函数中每个时期计算的成本。
plt.figure()
plt.scatter(x=list(range(0, 700)), y=J)
plt.show()

成本从一开始就急剧下降,然后下降缓慢。在一个好的机器学习算法中,成本应该一直下降直到收敛。请随意尝试不同的时期和不同的学习率(alpha)。
这是数据集:salary_data https://github.com/rashida048/Machine-Learning-With-Python/blob/master/position_salaries.csv
想要获取更多Python学习资料可以加
QQ:2955637827私聊
或加Q群630390733
大家一起来学习讨论吧!
Python学习之多项式回归的更多相关文章
- Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
- Python学习--01入门
Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...
- Python 学习小结
python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...
- Python学习路径及练手项目合集
Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159
- python学习笔记-python程序运行
小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...
- Python学习记录day6
title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...
- Python学习记录day5
title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...
- [Python] 学习资料汇总
Python是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大且完善的通用型语言,已经有十多年的发展历史,成熟且稳定.Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用 ...
- Python学习之路【目录】
本系列博文包含 Python基础.前端开发.Web框架.缓存以及队列等,希望可以给正在学习编程的童鞋提供一点帮助!!! 目录: Python学习[第一篇]python简介 Python学习[第二篇]p ...
随机推荐
- word-流程图
将 业务洽谈 签订合同 客户付费 发货 收获 信息反馈 制作成流程图: 插入-SmartArt-根据需要选择图形,如下图所示 点击红框选中部分,变成如下图所示,将要编辑的内容选中复制粘贴进去,一般最后 ...
- Django rest framework 基础
01: Django rest framework 基础 1.1 什么是RESTful 1. REST与技术无关,代表的是一种软件架构风格(REST是Representational Stat ...
- TCP接收窗口为什么变大了?
今天用wireshark抓取TCP连接时的报文发现客户端的Win变大了,这里是使用了Window Scale来扩张TCP接收窗口,使得接收窗口可以大于65535字节. 首先1号包是TCP第一次握手连接 ...
- python菜鸟教程学习9:函数
函数的定义 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.python提供了很多内建函数,但我们依然可以自己创建函数,叫做用户自定义函数. 自定义函数 你可以定义一个由自己想要功能 ...
- 对Tarjan——有向图缩点算法的理解
开始学tarjan的时候,有关无向图的割点.桥.点双边双缩点都比较容易地理解了,唯独对有向图的缩点操作不甚明了.通过对luoguP2656_采蘑菇一题的解决,大致搞清了tarjan算法的正确性. 首先 ...
- Linux服务器学习----tomcat 服务配置实验报告(一)
一.实验目的 1. 掌握 tomcat 服务的搭建 二.实验内容 1. 搭建一台缓存 tomcat 服务器 三.实验环境1. tomcat 服务器 centos7 对应主机 ip 为 10.10.64 ...
- Kubernetes日志系统新贵Loki-Stack
Loki简介 Grafana Loki是可以组成功能齐全的日志记录堆栈的一组组件. 与其他日志记录系统不同,Loki是基于仅索引有关日志的元数据的想法而构建的:标签(就像Prometheus标签一样) ...
- codeforces 1424J,为了过这题,我把祖传的C++都用上了!
大家好,我们选择的是Bubble Cup比赛Div2场次的J题,不用问我Bubble Cup是什么比赛,我也不清楚.总之是一场算法比赛就是了.可能是这个比赛知名度比较低吧,参与的人数也不是很多,我们选 ...
- C#(一)基础篇—类型与变量
于今日起学习巩固C#基础 2020-12-01 本随笔用于个人回忆理解,记录当天学习过程,内容多从书中整理与自我学习了解,如有问题麻烦指正 以后有时间会单独分版块叙述 不管什么语言,都从一个Hello ...
- 基于CefSharp开发(三)浏览器头部优化
一.上文回顾 上编实现了简单的网页加载功能包括URL输入.打开空标签页.网页链接中新页面处理等 本编将对网页的Title绑定.前进.后退.刷新等事件处理 二.Title绑定处理 当打开网页时Title ...