必威体育Betway必威体育官网
当前位置:首页 > IT技术

多项式回归(polynomial regression)转换为线性回归(linear regression)

时间:2019-10-01 00:41:08来源:IT技术作者:seo实验室小编阅读:72次「手机版」
 

多项式回归

一、介绍

一元m次多项式回归方程:

二元二次多项式回归方程

多元多次的多项式回归方程较复杂,加之实际生产生活中一元m次多项式归回就已经能够解决了,所以略!

对于一元m次多项式回归方程,令:

则该一元m次多项式就转化为m元线性回归方程:

因此,用多元线性函数的回归方法就可解决多项式回归问题!需要指出的是,在多项式回归分析中,检验回归系数是否显著,实质上就是判断自变量xi次方项对因变量y的影响是否显著。

对于二元二次多项式回归方程,令:

则该二元二次多项式函数就转化为五元线性回归方程:

二、一元m次多项式回归的最小二乘解

用矩阵表示他们的关系:

用矩阵符号表示:

此处推导过程忽略(参考线性回归最小二乘解的推导过程,基本过程是对每一个参数求偏导,令偏导 = 0,解联立方程组即可),最小二乘法解:

三、Python环境下利用sklearn库写的简单示例

import numpy as np
from sklearn.linear_model import Linearregression

from sklearn.preprocessing import PolynomialFeatures
import matplotlib.pyplot as plt
# seed
rng = np.random.RandomState(123)
# construct samples. give a x, generate y with noise
def genY(x):
	a0, a1, a2, a3, e = 0.1, -0.02, 0.03, -0.04, 0.05
	yr = a0 + a1*x + a2*(x**2) + a3*(x**3) + e
	y = yr + 0.03*rng.rand(1)
	return y
# plot
plt.figure()
plt.title('polynomial regression(sklearn)')
plt.xlabel('x')
plt.ylabel('y')
plt.grid(True)

x_tup = np.linspace(-1, 1, 30)
y = [genY(a) for a in x_tup]
print y
x = x_tup.reshape(-1,1)
y = np.array(y).reshape(-1,1)
plt.plot(x, y, 'k.')

qf = PolynomialFeatures(degree = 3)
qModel = LinearRegression()
qModel.fit(qf.fit_transform(x), y)
print '----'
print qf.get_params()

xp = np.linspace(-1, 2, 100)
yp = qModel.predict(qf.transform(xp.reshape(-1, 1)))

plt.plot(xp, yp, 'r-')
plt.show()

注释:PolynomialFeatures类的成员函数fit_transform根据自变量元数和指数次数(degree)转换成线性回归中的自变量,然后利用线性回归LinearRegression进行拟合。运行结果如下:

四、除了利用最小二乘直接解出参数的值外,也可以用梯度下降法最小化损失函数来训练出参数的值

#-*- coding:utf-8 -*-
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt

rng = np.random.RandomState(123)

def genY(x):
    a0, a1, a2, a3, e = 0.1, -0.02, 0.03, -0.04, 0.05
    yr = a0 + a1*x + a2*(x**2) + a3*(x**3) + e
    y = yr + 0.03*rng.rand(1)
    return y
    
plt.figure()
plt.title('polynomial regression(tensorflow)')
plt.xlabel('x')
plt.ylabel('y')
plt.grid(True)

x = np.linspace(-1, 1, 30)
y = [genY(a) for a in x]
x = x.reshape(-1,1)
y = np.array(y).reshape(-1,1)
plt.plot(x, y, 'k.')

X = tf.placeholder('float')
Y = tf.placeholder('float')
W = tf.Variable([0.] * 4)
print W

def Model(x, w):
    terms = []
    for i in range(0, 4):
        term = tf.multiply(w[i], tf.pow(x, i))
        terms.APPend(term)
    rs = tf.add_n(terms)
    return rs
YModel = Model(X, W)
Cost = tf.reduce_sum(tf.square(Y - YModel))
LearnRate = 0.01
train_op = tf.train.GradientDescentOptimizer(LearnRate).Minimize(Cost)

with tf.session() as sess:
	Init = tf.global_variables_initializer()
	sess.run(Init)
	for i in range(0, 100):
		for (_x, _y) in zip(x, y):
			sess.run(train_op, feed_dict = {X: _x, Y: _y})
	print sess.run(W)

	xp = np.linspace(-1, 2, 100)
	yp = 0
	for i in range(0, 4):
		yp += sess.run(W)[i] * np.power(xp, i)

	plt.plot(xp, yp, 'g-')
	plt.show()

相关阅读

回归算法和决策树

一、回归算法 1.回归分析的概念 回归分析(regression analysis)是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析

回归分析详解及matlab实现

回归分析方法想要资源的请关注公众号: 在一起的足球自动获取资源和数十种经典算法,帮助各位提升自己之前留的是自己的qq号 感觉好多

Android之LinearLayout详解

Android布局控件之LinearLayout详解 LinearLayout是线性布局控件,

[matalb]polyfit多项式拟合函数以及polyval

polyfit polyfit函数简介 polyfit函数是matlab中用于进行曲线拟合的一个函数。其数学基础是最小二乘法曲线拟合原理。曲线

什么是回归分析法

“回归分析”是解析“注目变量”和“因于变量”并明确两者关系的统计方法。以下是seo实验室小编

分享到:

栏目导航

推荐阅读

热门阅读