python tensorflow学习笔记(六)最小二乘法
来源:互联网 发布:openwrt 网络摄像头 编辑:程序博客网 时间:2024/05/02 00:47
说明:本文不包括TensorFlow相关内容
概念
概念:回归分析
回归分析(regression analysis)是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。运用十分广泛,回归分析按照涉及的变量的多少,分为一元回归和多元回归分析;按照因变量的多少,可分为简单回归分析和多重回归分析;按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。如果在回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且自变量之间存在线性相关,则称为多重线性回归分析。
回归分析按照三个要素区分:
- 自变量的个数
- 因变量的类型
- 回归线的形状
概念:线性回归
线性回归(Linear Regression),也就是回归线的形状为线性的回归,它是最为人熟知的建模技术之一。线性回归通常是人们在学习预测模型时首选的技术之一。在这种技术中,因变量是连续的,自变量可以是连续的也可以是离散的,回归线的性质是线性的。
线性回归使用最佳的拟合直线(也就是回归线)在因变量(Y)和一个或多个自变量(X)之间建立一种关系。
多元线性回归可表示为
概念:一元线性回归
一元线性回归也就是自变量的个数为1的线性回归。
一元线性回归可以表示为
概念:残差
残差在数理统计中是指实际观察值与估计值(拟合值)之间的差。“残差”蕴含了有关模型基本假设的重要信息。如果回归模型正确的话, 我们可以将残差看作误差的观测值。一元线性回归中的残差即为
公式推导
设有
那么残差也就是
如果这些残差的简单求和视为总残差
由于这些残差有正有负,简单求和可能导致正负抵消,设有函数
为了避免正负抵消,函数
因为绝对值不便于公式推导,所以可以使用
因此,只要求出使
设
\displaystyle Q(a,b) & = \sum_{i=1}^n (y_i - b x_i - a)^2 \\
& = \sum_{i=1}^n \bigl( (y_i - b x_i) - a \bigr)^2 \\
& = \sum_{i=1}^n \bigl( (y_i - b x_i)^2 + a^2 - 2 a (y_i - b x_i) \bigr) \\
& = \sum_{i=1}^n (y_i - b x_i)^2 + \sum_{i=1}^n a^2 + \sum_{i=1}^n - 2 a (y_i - b x_i) \\
& = \sum_{i=1}^n (y_i - b x_i)^2 + \sum_{i=1}^n a^2 + \sum_{i=1}^n (- 2 a y_i + 2 a b x_i) \\
& = \sum_{i=1}^n (y_i - b x_i)^2 + \sum_{i=1}^n a^2 - 2 a \sum_{i=1}^n y_i + 2 a b \sum_{i=1}^n x_i \\
& = \sum_{i=1}^n (y_i - b x_i)^2 + \sum_{i=1}^n a^2 - 2 a \sum_{i=1}^n \bar y + 2 a b \sum_{i=1}^n \bar x \\
& = \sum_{i=1}^n (y_i - b x_i)^2 + \sum_{i=1}^n a^2 + \sum_{i=1}^n ( - 2 a \bar y + 2 a b \bar x ) \\
& = \sum_{i=1}^n (y_i - b x_i)^2 + \sum_{i=1}^n a^2 + \sum_{i=1}^n - 2 a (\bar y - b \bar x ) \\
& = \sum_{i=1}^n (y_i - b x_i)^2 - \sum_{i=1}^n (\bar y - b \bar x)^2 + \sum_{i=1}^n (\bar y - b \bar x)^2 + \sum_{i=1}^n a^2 + \sum_{i=1}^n - 2 a (\bar y - b \bar x ) \\
& = \sum_{i=1}^n (y_i - b x_i)^2 - \sum_{i=1}^n (\bar y - b \bar x)^2 + \sum_{i=1}^n \bigl( (\bar y - b \bar x) - a \bigr)^2 \\
& = \overbrace{\sum_{i=1}^n \bigl( (y_i - b x_i)^2 - (\bar y - b \bar x)^2 \bigr)}^{part 1} + \overbrace{\sum_{i=1}^n \bigl( (\bar y - b \bar x) - a \bigr)^2}^{part 2} \label{label1} \\
\end{align}
等式
\displaystyle
\eqref{label1} part 1 & = \sum_{i=1}^n \bigl( (y_i - b x_i)^2 - (\bar y - b \bar x)^2 \bigr) \\
& = \sum_{i=1}^n ( y_i^2 - 2 b x_i y_i + b^2 x_i^2 - {\bar y}^2 + 2 b \bar x \bar y - b^2 {\bar x}^2 ) \\
& = \sum_{i=1}^n \bigl( b^2 (x_i^2 - {\bar x}^2) - 2 b (x_i y_i - \bar x \bar y) + y_i^2 - {\bar y}^2 \bigr) \\
& = b^2 \sum_{i=1}^n x_i^2 - b^2 \sum_{i=1}^n {\bar x}^2 - 2 b \sum_{i=1}^n (x_i y_i - \bar x \bar y) + \sum_{i=1}^n ( y_i^2 - {\bar y}^2 ) \\
& = b^2 \sum_{i=1}^n x_i^2 - b^2 n {\bar x}^2 - 2 b \sum_{i=1}^n (x_i y_i - \bar x \bar y) + \sum_{i=1}^n ( y_i^2 - {\bar y}^2 ) \\
& = b^2 \sum_{i=1}^n x_i^2 - 2 b^2 n {\bar x}^2 + b^2 n {\bar x}^2 - 2 b \sum_{i=1}^n (x_i y_i - \bar x \bar y) + \sum_{i=1}^n ( y_i^2 - {\bar y}^2 ) \\
& = b^2 \sum_{i=1}^n x_i^2 - b^2 \sum_{i=1}^n 2 x_i \bar x + b^2 \sum_{i=1}^n {\bar x}^2 - 2 b \sum_{i=1}^n (x_i y_i - \bar x \bar y) + \sum_{i=1}^n ( y_i^2 - {\bar y}^2 ) \\
& = b^2 \sum_{i=1}^n (x_i^2 -2 x_i \bar x + {\bar x}^2) - 2 b \sum_{i=1}^n (x_i y_i - \bar x \bar y) + \sum_{i=1}^n ( y_i^2 - {\bar y}^2 ) \\
& = b^2 \sum_{i=1}^n (x_i - \bar x)^2 - 2 b \sum_{i=1}^n (x_i y_i - \bar x \bar y) + \sum_{i=1}^n ( y_i^2 - {\bar y}^2 ) \label{label2} \\
\end{align}
得出
\eqref{labela}
\begin{cases}\hat b \stackrel{\eqref{labelb}}= \frac{\displaystyle \sum_{i=1}^n (x_i y_i - \bar x \bar y)}{\displaystyle \sum_{i=1}^n (x_i - \bar x)^2} \\\hat a \stackrel{\eqref{label2}}= \bar y - \hat b \bar x\end{cases}
由此得到的直线
# -*- coding: utf-8 -*-"""filename : tutorial_example_1_helloworld.pyauthor: hu@daonao.com QQ: 443089607 weixin: huzhenghui weibo: http://weibo.com/443089607category : tensorflowtitle : python tensorflow学习笔记(六)最小二乘法csdn blog url :weibo article url :weibo message url :为了清晰直观展现python严格要求的缩进及数学公式,请访问博客上博文详细说明见源代码中的注释# 源代码"""# standard importimport loggingimport osimport matplotlibimport numpylogging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')logging.debug('start tensorflow tutorial example 6 least squares')STR_SCRIPT_DIR, STR_SCRIPT_FILE = os.path.split(__file__)logging.debug('STR_SCRIPT_DIR : %s', STR_SCRIPT_DIR)logging.debug('STR_SCRIPT_FILE : %s', STR_SCRIPT_FILE)STR_SCRIPT_PREFIX = os.path.splitext(STR_SCRIPT_FILE)[0]logging.debug('STR_SCRIPT_PREFIX : %s', STR_SCRIPT_PREFIX)# os.path.join(STR_SCRIPT_DIR, STR_SCRIPT_PREFIX + '.ext')# 样本xSAMPLE_X = numpy.asarray([474.7, 479.9, 488.1, 509.6, 576.4, 654.7, 755.6, 798.6, 815.4, 718.4, 767.2, 759.5, 820.3, 849.8, 974.7, 1041.0, 1099.3, 1186.1, 1252.5])logging.debug('SAMPLE_X : \n%s', SAMPLE_X)# 样本ySAMPLE_Y = numpy.asarray([526.9, 532.7, 566.8, 591.2, 700.0, 744.1, 851.2, 884.4, 847.3, 821.0, 884.2, 903.7, 984.1, 1035.3, 1200.9, 1289.8, 1432.9, 1539.0, 1663.6])logging.debug('SAMPLE_Y : \n%s', SAMPLE_Y)# 样本数量N_SAMPLES = SAMPLE_X.shape[0]logging.debug('N_SAMPLES : %d', N_SAMPLES)# 样本x的平均值MEAN_X = sum(SAMPLE_X) / N_SAMPLESlogging.debug('MEAN_X : %f', MEAN_X)# 样本y的平均值MEAN_Y = sum(SAMPLE_Y) / N_SAMPLESlogging.debug('MEAN_Y : %f', MEAN_Y)# 权重WEIGHT = ((sum(SAMPLE_X[i] * SAMPLE_Y[i] for i in range(N_SAMPLES)) - N_SAMPLES * MEAN_X * MEAN_Y) / sum((SAMPLE_X[i] - MEAN_X) * (SAMPLE_X[i] - MEAN_X) for i in range(N_SAMPLES)))logging.debug('WEIGHT : %f', WEIGHT)# 偏置BIAS = MEAN_Y - WEIGHT * MEAN_Xlogging.debug('BIAS : %f', BIAS)# 绘制样本matplotlib.pyplot.plot(SAMPLE_X, SAMPLE_Y, 'ro', label='样本')# 绘制拟合直线matplotlib.pyplot.plot(SAMPLE_X, SAMPLE_X * WEIGHT + BIAS, label='拟合')# 显示图例matplotlib.pyplot.legend()# 保存图片matplotlib.pyplot.savefig(os.path.join(STR_SCRIPT_DIR, STR_SCRIPT_PREFIX + '.png'))# 显示图片matplotlib.pyplot.show()# end of file
- python tensorflow学习笔记(六)最小二乘法
- TensorFlow学习笔记(六)
- TensorFlow学习笔记(六)
- TensorFlow学习笔记(六)Variable变量
- python学习笔记(六)
- python 学习笔记(六)
- Python学习笔记(六)
- Python学习笔记(六)
- python学习笔记(六)
- Python学习笔记(六)
- Python学习笔记(六)
- python tensorflow学习笔记(二)算数
- python tensorflow学习笔记(三)运算
- Python学习笔记(六):Python模块
- tensorflow学习笔记(六):LSTM 与 GRU
- tensorflow学习笔记(六):LSTM 与 GRU
- TensorFlow学习笔记(六):如何理解dropout?
- tensorflow学习笔记(六):TF.contrib.learn大杂烩
- Flutter实战一Flutter聊天应用(汇总)
- Struts2值栈详解
- PLSQL编程与JAVA编程
- python必知小知识
- java轮子-使用springboot做一个带界面的web程序
- python tensorflow学习笔记(六)最小二乘法
- 欢迎使用CSDN-markdown编辑器
- 回顾SSH 和SSL 协议+系统自动化安装 : PXE服务
- jQuery的helloworld
- VMware 中Linux 虚拟机中KVM新建虚拟机报错
- 关于博客停止更新的说明
- (Floyd)【HDU 1217】Arbitrage
- Android Beam 文件传输失败分析与解决
- InventorCAM