• 多项式回归 项目链接：https://github.com/Wchenguang/gglearn/blob/master/PolynomialClassifier/李航机器学习-讲解/PolynomialClassifier.ipynb 公式推导 损失函数定义为平方损失函数 cos⁡t=12(f(X)−Y)2L=1N×...
多项式回归
项目链接：https://github.com/Wchenguang/gglearn/blob/master/PolynomialClassifier/李航机器学习-讲解/PolynomialClassifier.ipynb
公式推导

损失函数定义为平方损失函数

$\begin{array}{l}{\cos t=\frac{1}{2}(f(X)-Y)^{2}} \\ {L=\frac{1}{N} \times \sum_{i=1}^{N} \frac{1}{2}\left(\sum_{j=0}^{M}\left(w_{j} x_{i}^{j}\right)-y_{i}\right)^{2}}\end{array}$

求导并使导数为0，直接求出权值

$\begin{array}{c}\begin{array}{l}{\frac{\partial L}{\partial w_{k}}=\frac{1}{N} \times \sum_{i=1}^{N} \frac{1}{2} \times 2\left(x_{i}^{k} \times\left(\sum_{j=0}^{M}\left(w_{j} x_{i}^{k}\right)-y_{i}\right)\right)} \\ {=\frac{1}{N} \times \sum_{i=1}^{N}\left(x_{i}^{k} \times \sum_{j=0}^{M}\left(w_{j} x_{i}^{j}\right)-x_{i}^{k} \times y_{i}\right)} \\ {=0}\end{array} \\ {\downarrow} \\ x_{1}^{k} \sum_{j=1}^{m} w_{j} x_{1}^{j}+x_{2}^{K} \sum_{j=1}^{m} w_{j} x_{2}^{j} \cdots x_{n}^{K} \sum_{j=1}^{m} w_{j} x_{n}^{j}=\sum_{i=1}^{n} x_{i}^{k} y_{i} \\ {\downarrow} \\ \left[x_{1}^{k} \dots x_{n}^{k}\right] \begin{bmatrix} x_{1}^{0}& \cdots\ &x_{1}^{m}\\ & \cdots\ &\\ &\vdots \\ x_{n}^{0}& \cdots\ &x_{n}^{m} \end{bmatrix} \left[\begin{array}{c}{w_{0}} \\ {\vdots} \\ {w_{m}}\end{array}\right] = \left[x_{1}^{k} \cdots\ x_{n}^{k}\right] \left[\begin{array}{c}{y_{1}} \\ {\vdots} \\ {y_{n}}\end{array}\right] \end{array}$

上式所求的$w_{k}$可以用含有$w_{0} w_{1} \cdots\ w_{k-1} w_{k+1}\cdots\ w_{m}$ 的式子表示，这些$w$值表示的是相应权重值的最优解，因而可以利用线性代数将所有权重值求出

$\begin{array}{c}\left[x_{1}^{k} \dots x_{n}^{k}\right] \begin{bmatrix} x_{1}^{0}& \cdots\ &x_{1}^{m}\\ & \cdots\ &\\ &\vdots \\ x_{n}^{0}& \cdots\ &x_{n}^{m} \end{bmatrix} \left[\begin{array}{c}{w_{0}} \\ {\vdots} \\ {w_{m}}\end{array}\right] = \left[x_{1}^{k} \cdots\ x_{n}^{k}\right] \left[\begin{array}{c}{y_{1}} \\ {\vdots} \\ {y_{n}}\end{array}\right] \\ {\downarrow} \\ \begin{bmatrix} x_{1}^{0}& \cdots\ &x_{n}^{0}\\ & \cdots\ &\\ &\vdots \\ x_{1}^{m}& \cdots\ &x_{n}^{m} \end{bmatrix} \begin{bmatrix} x_{1}^{0}& \cdots\ &x_{1}^{m}\\ & \cdots\ &\\ &\vdots \\ x_{n}^{0}& \cdots\ &x_{n}^{m} \end{bmatrix} \left[\begin{array}{c}{w_{0}} \\ {\vdots} \\ {w_{m}}\end{array}\right] = \begin{bmatrix} x_{1}^{0}& \cdots\ &x_{n}^{0}\\ & \cdots\ &\\ &\vdots \\ x_{1}^{m}& \cdots\ &x_{n}^{m} \end{bmatrix} \left[\begin{array}{c}{y_{1}} \\ {\vdots} \\ {y_{n}}\end{array}\right] \end{array}$

由上式即可得梯度下降中的正规方程
$\begin{array}{c} x^{\top} x w =x^{\top} y \\ {\downarrow} \\ w =\left(x^{\top} x\right)^{-1} x^{\top} y \end{array}$

实现多项式分类器PolynomialRegression
import numpy as np
class PolynomialRegression:
'''
只支持numpy数组的输入
'''
def __init__(self):
pass
def fit(self, x, y):
'''
只支持二维数组
'''
x= np.hstack((np.ones((len(x), 1)), x))
x = np.mat(x)
y = np.mat(y)
self.w = np.mat((x.T * x).I * x.T * y)
return self
def transform(self, x):
x= np.hstack((np.ones((len(x), 1)), x))
x = np.mat(x)
return x * self.w
def fit_transform(self, x, y):
x= np.hstack((np.ones((len(x), 1)), x))
x = np.mat(x)
y = np.mat(y)
self.w = (x.T * x).I * x.T * y
return x * self.w
#if __name__ == 'main':
for i in range(10, 51, 10):
x = np.random.randint(1, 100, (40, i))
y = np.random.randint(1, 100, (40, 1))
reg_result = PolynomialRegression().fit(x, y).transform(x)
import matplotlib.pyplot as plt
fig = plt.figure(num = 1, figsize = (15, 8))
plt.plot(np.arange(len(y)), y, label = 'real_y')
plt.plot(np.arange(len(reg_result)), reg_result, label = 'pred_y')
plt.legend()
plt.show()


运行结果


展开全文
• 多变量线性回归代价函数为： 其中：  正规方程是通过求解下面的方程来找出使得代价函数最小的参数： 设有m个训练实例，每个实例有n个特征，则训练实例集为：   其中表示第i个实例第j个特征。 特征参数为...
多变量线性回归代价函数为：

$J(\theta&space;_{0},\theta&space;_{1},\cdots&space;,\theta&space;n)=\frac{1}{2m}\sum_{m}^{i=1}\left&space;(&space;h_{\theta}&space;\left&space;(&space;x^{i}&space;\right&space;)-y^{\left&space;(&space;i&space;\right&space;)}&space;\right&space;)^{2}$

其中： $h_{\theta&space;}\left&space;(&space;x&space;\right&space;)=\theta&space;^{T}X=\theta&space;_{0}x_{0}+\theta&space;_{1}x_{1}+\cdots&space;+\theta&space;_{n}x_{n}$

正规方程是通过求解下面的方程来找出使得代价函数最小的参数：

$\frac{\partial&space;}{\partial&space;\theta&space;_{j}}J(\theta&space;_{j})=0$

设有m个训练实例，每个实例有n个特征，则训练实例集为：

其中表示第i个实例第j个特征。

特征参数为：

输出变量为：

故代价函数为：

进行求导，等价于如下的形式：

求导公式：

其中第一项：

第二项：

该矩阵求导为分母布局下的标量/向量形式：
故有，

第三项：

该矩阵求导为分母布局下的标量/向量形式：
故有：

第四项：

其中为标量，可看成一个常数。
该矩阵求导为分母布局下的标量/向量形式：
故有：

综上，正规方程为：

最终可得特征参数的表示：


展开全文
• 之前我们曾经学习了简单线性回归模型的推导、sklearn实战，并尝试从零搭建了一个简单线性回归的模型工具。...一、快速理解多项式回归原理 我们先来回顾一下简单线性回归的假设： y^=α+βx\hat{y}=...
之前我们曾经学习了简单线性回归模型的推导、sklearn实战，并尝试从零搭建了一个简单线性回归的模型工具。
但是我们遇到的数据并不总是线性的，这时如果我们还拿线性模型去拟合，我们模型的效果就会大打折扣。不过不用担心，我们仍然可以使用线性回归的方法来拟合非线性的数据，只不过我们要先对输入数据做一些处理。
一、快速理解多项式回归原理
我们先来回顾一下简单线性回归的假设：
$\hat{y}=\alpha + \beta x$
假如我们通过散点图发现变量y与x之间的关系大致符合二次分布，那么上述的假设就不太合适了，我们可以假设：
$\hat{y}=\alpha + \beta_1 x + \beta_2 x^2$
我们的残差依然是:
$error = y - \hat{y}$
与简单线性回归相同，我们的目标是最小化残差平方和：
$RSS(SSE) = \sum_{i=1}^{n}{(y_i-\hat{y_i})^2} = \sum_{i=1}^{n}{[y_i-(\alpha + \beta_1 x_i + \beta_2 x_i^2)]^2}$
然后我们分别对α、β1和β2求偏导，使其为0，我们可以得到三个等式，求解即可。
这部分推理与简单线性回归的推理部分极为相似，感兴趣的可以直接阅读我的《三步教你从零掌握简单线性回归》一文。
二、scikit-learn实战
那么接下来，我们就直接来看scikit-learn实战部分了。先放代码和输出，然后我们再详解一下：
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()

X_train = [[6], [8], [10], [14], [18]]
y_train = [[7], [9], [13], [17.5], [18]]
X_test = [[6], [8], [11], [16]]
y_test = [[8], [12], [15], [18]]

# 简单线性回归
model = LinearRegression()
model.fit(X_train, y_train)
xx = np.linspace(0, 26, 100)
yy = model.predict(xx.reshape(xx.shape[0], 1))
plt.scatter(x=X_train, y=y_train, color='k')
plt.plot(xx, yy, '-g')

# 多项式回归
model2 = LinearRegression()
yy2 = model2.predict(xx2)
plt.plot(xx, yy2, '-r')

print('X_train:\n', X_train)
print('X_test:\n', X_test)
print('简单线性回归R2：', model.score(X_test, y_test))

输出为：
X_train:
[[6], [8], [10], [14], [18]]
[[  1.   6.  36.]
[  1.   8.  64.]
[  1.  10. 100.]
[  1.  14. 196.]
[  1.  18. 324.]]
X_test:
[[6], [8], [11], [16]]
[[  1.   6.  36.]
[  1.   8.  64.]
[  1.  11. 121.]
[  1.  16. 256.]]
简单线性回归R2： 0.809726797707665
二次回归R2： 0.8675443656345073


三、步骤详解
我们来看看在每一步我们都做了什么。
第一步，我们导入了必要的库。
第二步，我们创建了训练集和测试集。
第三步，我们拟合了简单线性回归，并且绘制了预测的直线。
第四步，我们使用sklearn.preprocessing.PolynomialFeatures方法，将我们的原始特征集生成了n*3的数据集，其中第一列对应常数项α，相当于x的零次方，因此这一列都是1；第二列对应一次项，因此这一列与我们的原始数据是一致的；第三列对应二次项，因此这一列是我们原始数据的平方。
第四步，我们拿前边用PolynomialFeatures处理的数据集做一个多元线性回归，然后用训练好的模型预测一条曲线，并将其绘制出来。
第五步，输出数据方便理解；输出模型分数用于对比效果。
看到这里你可能已经明白了，多项式回归虽然拟合了多项式曲线，但其本质仍然是线性回归，只不过我们将输入的特征做了些调整，增加了它们的多次项数据作为新特征。其实除了多项式回归，我们还可以使用这种方法拟合更多的曲线，我们只需要对原始特征作出不同的处理即可。
你学会了吗？


展开全文
• 之前我们曾经学习了简单线性回归模型的推导、sklearn实战，并尝试从零搭建了一个简单线性回归的模型工具。 有任何问题都可以在下方留言，我都会耐心解答。 但是我们遇到的数据并不总是线性的，这时如果我们还拿...
https://www.toutiao.com/a6642221691839709704/

2019-01-03 18:52:31

之前我们曾经学习了简单线性回归模型的推导、sklearn实战，并尝试从零搭建了一个简单线性回归的模型工具。

有任何问题都可以在下方留言，我都会耐心解答。

但是我们遇到的数据并不总是线性的，这时如果我们还拿线性模型去拟合，我们模型的效果就会大打折扣。不过不用担心，我们仍然可以使用线性回归的方法来拟合非线性的数据，只不过我们要先对输入数据做一些处理。

一、快速理解多项式回归原理

我们先来回顾一下简单线性回归的假设：

假如我们通过散点图发现变量y与x之间的关系大致符合二次分布，那么上述的假设就不太合适了，我们可以假设：

我们的残差依然是:

与简单线性回归相同，我们的目标是最小化残差平方和：

然后我们分别对α、β1和β2求偏导，使其为0，我们可以得到三个等式，求解即可。

这部分推理与简单线性回归的推理部分极为相似，感兴趣的可以直接阅读我的《三步教你从零掌握简单线性回归》一文。

二、scikit-learn实战

那么接下来，我们就直接来看scikit-learn实战部分了。先放代码和输出，然后我们再详解一下：

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
X_train = [[6], [8], [10], [14], [18]]
y_train = [[7], [9], [13], [17.5], [18]]
X_test = [[6], [8], [11], [16]]
y_test = [[8], [12], [15], [18]]
# 简单线性回归
model = LinearRegression()
model.fit(X_train, y_train)
xx = np.linspace(0, 26, 100)
yy = model.predict(xx.reshape(xx.shape[0], 1))
plt.scatter(x=X_train, y=y_train, color='k')
plt.plot(xx, yy, '-g')
# 多项式回归
model2 = LinearRegression()
yy2 = model2.predict(xx2)
plt.plot(xx, yy2, '-r')
print('X_train:
', X_train)
print('X_test:
', X_test)
print('简单线性回归R2：', model.score(X_test, y_test))

输出为：

X_train:
[[6], [8], [10], [14], [18]]
[[ 1. 6. 36.]
[ 1. 8. 64.]
[ 1. 10. 100.]
[ 1. 14. 196.]
[ 1. 18. 324.]]
X_test:
[[6], [8], [11], [16]]
[[ 1. 6. 36.]
[ 1. 8. 64.]
[ 1. 11. 121.]
[ 1. 16. 256.]]
简单线性回归R2： 0.809726797707665
二次回归R2： 0.8675443656345073

三、步骤详解

我们来看看在每一步我们都做了什么。

第一步，我们导入了必要的库。

第二步，我们创建了训练集和测试集。

第三步，我们拟合了简单线性回归，并且绘制了预测的直线。

第四步，我们使用sklearn.preprocessing.PolynomialFeatures方法，将我们的原始特征集生成了n*3的数据集，其中第一列对应常数项α，相当于x的零次方，因此这一列都是1；第二列对应一次项，因此这一列与我们的原始数据是一致的；第三列对应二次项，因此这一列是我们原始数据的平方。

第四步，我们拿前边用PolynomialFeatures处理的数据集做一个多元线性回归，然后用训练好的模型预测一条曲线，并将其绘制出来。

第五步，输出数据方便理解；输出模型分数用于对比效果。

看到这里你可能已经明白了，多项式回归虽然拟合了多项式曲线，但其本质仍然是线性回归，只不过我们将输入的特征做了些调整，增加了它们的多次项数据作为新特征。其实除了多项式回归，我们还可以使用这种方法拟合更多的曲线，我们只需要对原始特征作出不同的处理即可。

你学会了吗？
展开全文
• 多项式分布表达式转为指数分布族表达式推导过程如下：   P ( y ; ϕ ) = ϕ   1 { y = 1 }   1   ϕ   1 { y = 2 }   2   ⋯ ϕ   1 { y = k }   k                         = ϕ   T ( y ...
• 多项式拟合，多项式拟合在《统计学习方法》中的勘误 线性回归的一些理论知识与推导
• 逻辑回归： 即可以看做回归算法，也可以看做分类算法。一般当做分类算法来用，解决二分类问题，如果要解决多分类问题，需要自己改进。 看下逻辑回归的问题点，对于逻辑回归来说，解决二分类问题。...下面附上推导...
• 前面的两篇文章比较清楚浅显的介绍了线性回归、多项式回归，并了解到其实多项式回归也可以看作是一种特殊的线性回归形式，也就是说回归的核心就是线性回归。其原理都是最小二乘法，这是一种很简单、很方便的算法，但...
• 推导过程：  1. 设拟合多项式为：    2. 各点到这条曲线的距离之和，即偏差平方和如下：    3. 为了求得符合条件的a值，对等式右边求ai偏导数，因而我们得到了：
• 分段多项式和样条分段多项式为什么分段...从线性回归到非线性回归，很自然的推广就是多项式回归，但是有时候想得到良好的拟合曲线，就要增加多项式的阶数，然而，随着阶数越高会出现更多的问题。分段多项式很好的解...
• 总结常见的机器学习线性回归的方法，最小二乘法、局部加权法、岭回归、Lasso回归、多项式回归公式推导过程
• 它在广义上说也是一种线性回归模型，不过是在线性回归的基础上加入了kernel函数，包括高斯核，多项式核，线性核等，于是可以解决线性回归难以解决的非线性问题。 倘若从损失函数的角度来看，LR的损失函数是基于极大...
• 目录0 前言1 最小二乘法概述2 最小二乘法求解多项式曲线系数向量的数学推导2.1 代数法2.2 矩阵法3 代码实现4 总结参考 0 前言 自动驾驶开发中经常涉及到多项式曲线拟合，本文详细描述了使用最小二乘法进行多项式曲线...
• 我最近在认真的读书 对于递推式（略去显然的边界情况 我们有... 幸运的是我们有 如果有两个类似的形式，就有可能凑出我们想要的 问题现在变得非常简单 幸于多项式恒等定理的正确性，稍有数学基础的人都能很快的想出...
• {线性{属性线性→打破属性非线性：特征转换（多项式回归）全局线性→打破全局非线性：线性分类（激活函数是非线性）系数线性→打破系数非线性：神经网络全局性→打破线性样条回归、决策树数据未加工→打破PCA、流形\...
• 线性回归的三个特性：线性，全局性，数据未加工。... 属性非线性(特征) 特征转换(多项式回归) 1.线性 全局非线性(输出) 线性分类(激活函数) 系数非线性(参数) 神经网络 2.全局性 输入x分段 决策树 3.数据未加工...
• 线性模型 线性回归——理论篇 公式推导如下： 附： 1、常用矩阵求导公式 2、西瓜书第三章线性模型总结 3、南瓜书公式推导 线性回归——实践篇...2. 多项式回归的代码实现 在这里插入代码片 运行结果： ...
• 是许多强大的非线性模型的基础（多项式回归、逻辑回归和SVM等可理解为线性回归法的拓展） 得到的结果具有很好的可解释性（通过对数据的分析、模型的建立，学习到真实世界真正的知识，最后我会举一些例子。正...
• 前言 本文将简单介绍线性回归算法的原理以及推导过程，因为本人也是新手，只按照...否则是非线性回归，常见的非线性回归包括多项式回归、逻辑回归。通过样本学习映射关系f:x->y，得到的预测结果y是连续值变量。 ...
• 本章的凸集间交互投影的迭代算法求线性模型的最小二乘通解，在数学上有一定...资料变换回归特意设了差分变换，软件还能自动显示多元线性回归二维拟合效果图及多元多项式回归的三维立体直观图，给实际工作尽量带来方便。
• 文章目录线性回归（预测）1、单变量线性回归1.1基本原理1.2最小二乘法1.3sklearn实现单变量线性回归2、多元线性回归2.1基本原理2.2正规方程法2.3梯度下降法2.4sklearn实现多元线性回归2.5模型优化2.5.1多项式回归...
• 多项式回归模型 主成分回归模型 自回归模型 核回归模型 决策树学习 ID3 算法 C4.5 算法 SLIQ 算法 SPRINT 算法 贝叶斯学习 朴素贝叶斯模型 层级贝叶斯模型 增广贝叶斯学习模型 基于Boosting技术的朴素贝叶斯模型 ...
• 简单的线性回归 ...同时也是许多强大的非线性模型（多项式回归、逻辑回归、SVM）的基础。并且其结果具有很好的可解释性。 基本的推导思路 我们所谓的建模过程，其实就是找到一个模型，最大程度的...
• 集成学习（上）Task02：掌握基本的回归模型1 度量模型的性能指标2 具体可选择的回归模型2.1 线性回归模型2.2 线性回归推广——多项式回归2.3 线性回归推广——广义可加模型(GAM)2.4 回归树模型2.4.1 方法2.4.2 与...
• 1. 机器学习的一些概念 1.1 损失函数、代价函数、目标函数 1.2 监督学习 无监督学习 1.3 正则化 1.4 泛化能力 1.5 过拟合 ...多项式线性回归 逻辑回归 (简要描述) 6. 正则化 岭回归 lasso回归 弹性网络 ...
• 线性回归模型是利用线性函数对一个或多个自变量(x或者(x1,x2,…，xk))(x或者(x_1,x_2,…，x_k))(x或者(x1​,x2​,…，xk​))和因变量（y）（y）（y）之间关系进行拟合的模型。 公式推导 参数解释 基本概念 线性 = ...
• 逻辑回归本质及其数学推导 逻辑回归代码实现与调用 逻辑回归中的决策边界、多项式以及正则化 2 学习内容 《出场率No.1的逻辑回归算法，是怎样“炼成”的？》 《逻辑回归的本质及其损失函数的推导、求解》 《逻辑...
• 文章目录第四章-多变量线性回归多功能多元梯度下降法梯度下降算法特征缩放学习率特征与多项式回归正规方程正规方程的概念公式的推导梯度下降法 VS 正规方程奇异矩阵的解决办法 多功能 我们探讨了单变量/特征的回归...
• 1、最小二乘法(拟合)功能描述：在进行线性回归时，通过一系列的实验所得到的值，来反推多项式的最佳参数。关键点：所得到的参数使得参数拟合的等式与实验所得值的差（向量）模最小。推导过程参考博客：...
• 假设我们使用多项式回归来做模拟,阶次为2,有4个特征,易知,我们的多项式展开为: 由上式易知,4个特征加一个偏置项bias,完全展开后有15项,当有m个特征,阶次为2时,展开后项数为 (m+1)*(m+2)/2,当阶次为3 4 5时请自行...