线性回归(linear regression)
基本形式

最小二乘法估计拟合参数
最小二乘法:基于均方误差最小化来进行模型求解的方法称为“最小二乘法”(least square method)
即
(左边代表 $\mathbf{\omega }$ 和 b 的解)
为了计算的方便,可以把常数 b 看出一个特殊的值为 1 的 x 。
将 $\mathbf{\omega }$ 和 b 吸收入向量形式
,如下所示:
$X = \begin{pmatrix}
x_{11} &x_{12} &... &x_{1d} &1\\
x_{21} &x_{2} &... &x_{2d} &1\\
\vdots &\vdots &\ddots &\vdots &\vdots \\
x_{m1} &x_{m2} &... &x_{md} &1
\end{pmatrix} = \begin{pmatrix}
\mathbf{x_{1}^{T}}& 1\\
\mathbf{x_{2}^{T}}&1 \\
\vdots & \vdots \\
\mathbf{x_{m}^{T}}& 1
\end{pmatrix}$
把标记也写成向量形式$\mathbf{y}=(y_{1};y_{2};...;y_{m})$,则参数的求解为:
$ \hat{\mathbf{\omega} }^{*}=_{\hat{\mathbf{\omega} }}^{arg\ min}\ \textrm{}(\mathbf{y}-\mathbf{X}\hat{\mathbf{\omega} })^{T}(\mathbf{y}-\mathbf{X\hat{\mathbf{\omega} }})$
令$E_{\hat{\mathbf{\omega} }}=(\mathbf{y}-\mathbf{X}\hat{\mathbf{\omega} })^{T}(\mathbf{y}-\mathbf{X\hat{\mathbf{\omega} }})$,对$\hat{\mathbf{\omega} }$求导得到:
$\frac{\partial E_{\hat{\mathbf{\omega} }}}{\partial\hat{\mathbf{\omega} }} = 2\mathbf{X}^{T}(\mathbf{X\hat{\mathbf{\omega} }-\mathbf{y}})$
要得到这个求导结果,需要知道一些矩阵求导的常见性质:
$f(x)=Ax,则\frac{\partial f(x)}{\partial x^{T}}=\frac{\partial (Ax)}{\partial x^{T}}=A$
$f(x)=x^{T}Ax,则\frac{\partial f(x)}{\partial x}=\frac{\partial (x^{T}Ax)}{\partial x}=Ax+A^{T}x$
$f(x)=a^{T}x,则\frac{\partial f(x)}{\partial x}=\frac{\partial (a^{T}x)}{\partial x}=\frac{\partial x^{T}a}{\partial x}=a$
令上式为0即可得参数的最优解,由于涉及到矩阵逆计算,所有只有当$\mathbf{X}^{T}\mathbf{X})^{-1}$为满秩矩阵或正定矩阵才可以得到如下结果:
$\hat{\mathbf{\omega} }^{*}=(\mathbf{X}^{T}\mathbf{X})^{-1}\mathbf{X}^{T}\mathbf{y}$
简单例子
该例子来自《机器学习实战》。
数据如下:

这里第一列均为1,目的就是将式子中的b转化为1。
首先可以绘制图形大致观察一下:

只要明白上面的,计算参数其实很简单,代码如下:
import numpy as np def load_data_set(filename): # 数据导入
fr = open(filename)
num_feat = len(open(filename).readline().split('\t'))-1 data_mat = []
label_mat = [] for line in fr.readlines():
line_arr = []
cur_line = line.strip().split('\t')
for i in range(num_feat):
line_arr.append(float(cur_line[i])) data_mat.append(line_arr)
label_mat.append(float(cur_line[-1]))
return data_mat, label_mat def stand_regress(x_arr, y_arr): # 计算拟合参数
x_mat = np.mat(x_arr)
y_mat = np.mat(y_arr).T
xtx = x_mat.T * x_mat
if np.linalg.det(xtx) == 0:
print("This matrix is singular, cannot do inverse")
return
ws = xtx.I * x_mat.T * y_mat
return ws # 返回最后得到的参数值
第一个函数打开用tab分隔的文本文件,提取出其中的数据。
第二个函数计算最佳拟合直线,代码中numpy的linalg.det()可以计算行列式的值。计算的公式直接套用上面所讲的最终公式即可。
最后得到的参数值为:

线性回归(linear regression)的更多相关文章
- Stanford机器学习---第二讲. 多变量线性回归 Linear Regression with multiple variable
原文:http://blog.csdn.net/abcjennifer/article/details/7700772 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归 ...
- 机器学习(三)--------多变量线性回归(Linear Regression with Multiple Variables)
机器学习(三)--------多变量线性回归(Linear Regression with Multiple Variables) 同样是预测房价问题 如果有多个特征值 那么这种情况下 假设h表示 ...
- Ng第二课:单变量线性回归(Linear Regression with One Variable)
二.单变量线性回归(Linear Regression with One Variable) 2.1 模型表示 2.2 代价函数 2.3 代价函数的直观理解 2.4 梯度下降 2.5 梯度下 ...
- 斯坦福第二课:单变量线性回归(Linear Regression with One Variable)
二.单变量线性回归(Linear Regression with One Variable) 2.1 模型表示 2.2 代价函数 2.3 代价函数的直观理解 I 2.4 代价函数的直观理解 I ...
- 机器学习方法:回归(一):线性回归Linear regression
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 开一个机器学习方法科普系列:做基础回顾之用,学而时习之:也拿出来与大家分享.数学水平有限,只求易懂,学习与工 ...
- 斯坦福CS229机器学习课程笔记 Part1:线性回归 Linear Regression
机器学习三要素 机器学习的三要素为:模型.策略.算法. 模型:就是所要学习的条件概率分布或决策函数.线性回归模型 策略:按照什么样的准则学习或选择最优的模型.最小化均方误差,即所谓的 least-sq ...
- 机器学习 (一) 单变量线性回归 Linear Regression with One Variable
文章内容均来自斯坦福大学的Andrew Ng教授讲解的Machine Learning课程,本文是针对该课程的个人学习笔记,如有疏漏,请以原课程所讲述内容为准.感谢博主Rachel Zhang的个人笔 ...
- 机器学习 (二) 多变量线性回归 Linear Regression with Multiple Variables
文章内容均来自斯坦福大学的Andrew Ng教授讲解的Machine Learning课程,本文是针对该课程的个人学习笔记,如有疏漏,请以原课程所讲述内容为准.感谢博主Rachel Zhang 的个人 ...
- ML 线性回归Linear Regression
线性回归 Linear Regression MOOC机器学习课程学习笔记 1 单变量线性回归Linear Regression with One Variable 1.1 模型表达Model Rep ...
- TensorFlow 学习笔记(1)----线性回归(linear regression)的TensorFlow实现
此系列将会每日持续更新,欢迎关注 线性回归(linear regression)的TensorFlow实现 #这里是基于python 3.7版本的TensorFlow TensorFlow是一个机器学 ...
随机推荐
- java学习之路--String类的基本方法
String类常见的功能 获取 1.1 字符串中包含的字符数,也就是获取字符串的长度:int length(); 1.2 根据位置获取某个位置上的字符:char charAt(int index) 1 ...
- Map 的putAll方法
如下段代码: public static void main(String[] args){ Map<String,String> map1 = new HashMap<>() ...
- ThinkPHP 缓存技术详解 使用大S方法
如果没有缓存的网站是百万级或者千万级的访问量,会给数据库或者服务器造成很大的压力,通过缓存,大幅减少服务器和数据库的负荷,假如我们把读取数据的过程分为三个层,第一个是访问层,第一个是缓存层,第三个是数 ...
- 解锁scott用户
具体操作步骤如下: C:> sqlplus 请输入用户名:sys 输入口令:sys as sysdba //注意:在口令这里输入的密码后面必须要跟上 as sysdba 才可以. SQL> ...
- ASP.NET Core 集成测试中通过 Serilog 向控制台输出日志
日志是程序员的雷达,不仅在生产环境中需要,在集成测试环境中也需要,可以在持续集成失败后帮助定位问题.与生产环境不同,在集成测试环境中使用控制台输出日志更方便,这样可以通过持续集成 runner 执行 ...
- MongoDB复制集原理、环境配置及基本测试详解
一.MongoDB复制集概述 MongoDB复制集实现了冗余备份和故障转移两大功能,这样能保证数据库的高可用性.在生产环境,复制集至少包括三个节点,其中一个必须为主节点,一个从节点,一个仲裁节点.其中 ...
- Golang go get第三方库的坑
在树莓派上go get fail的问题记录及解决方案 go get github.com/terrancewong/serial # 错误为GOPATH路径的问题 cannot find packag ...
- 项目实战02:LNMP的搭建、nginx的ssl加密、身份验证的实现
目录 实战一:搭建lnmp及类小米等商业网站的实现 1.安装包,开启服务 2.修改nginx的配置文件 3.修改php-fpm的配置文件 4.运行mysql ,创建一会网页需要的库 5.把事先找好的小 ...
- ext.js的mvc开发模式详解
ext.js的mvc开发模式详解和环境配置 在JS的开发过程中,大规模的JS脚本难以组织和维护,这一直是困扰前端开发人员的头等问题.Extjs为了解决这种问题,在Extjs 4.x版本中引入了MVC开 ...
- java框架之SpringCloud(2)-Rest微服务案例
在上一章节已经对微服务与 SpringCloud 做了介绍,为方便后面学习,下面以 Dept 部门模块为例做一个微服务通用 Demo —— Consumer 消费者(Client) 通过 REST 调 ...