线性回归之标准方程法求损失函数最小值

在吴恩达-人工智能视频学习过程中,关于线性回归之标准方程法求损失函数最小值,比较经典的两处截图:
图1

图2

关于图2的证明,其实有个简单的思路。在电脑上打数字公式太为难了,我还是在纸上写吧:
先将图1的X矩阵转置为1行n列。那么就有

更详细的推演可以参考:
https://blog.csdn.net/zhangbaodan1/article/details/81013056

具体编码实现:下图@改为乘号*

在前文https://www.cnblogs.com/myshuzhimei/p/11743544.html案例中,套用该方法即:
import numpy as np
x=np.matrix([[1,1],[1,2],[1,2],[1,1],[1,3]])
y=np.matrix([[14],[24],[18],[17],[27]])
z=np.linalg.inv(x.Tx)x.T*y #代码复制后乘号显示异常
print z

输出结果:
[[9.71428571]
[5.71428571]]

注意:
x0全部置为1,所以X矩阵至少有两列,第1列全部是1,第2列是特征值。
x1表示特征1...xn表示特征n,从单特征角度来看X和Y矩阵都是列向量。
Z也是列向量,行结果分别对应截距、特征1的向量...特征n的向量。

原文地址:https://www.cnblogs.com/myshuzhimei/p/12053787.html

时间: 2024-11-09 01:53:54

线性回归之标准方程法求损失函数最小值的相关文章

二分法与黄金分割法求函数方程最小值

二分法与黄金分割法求函数方程最小值 程序设计语言:C++ 输入:线性搜索模型(目标函数系数,搜索区间,误差限等) 输出:最优解及对应目标函数值 实验数据 区间[0.3,1],误差ε=1e-4 结果 二分法最后结果为:导数在0.637009处取零点,函数在区间[0.3,1]取得最小值11.252754. (二分法结果图) 黄金分割法最后结果为:输入初始值0.3,导数在0.636939处取零点,函数在区间[0.46,0.94]取得最小值11.252756. (黄金分割法结果图) 两种方法所求无论是极

筛选法求素数

筛选法求素数,不断的用3,5,7,等素数作为筛子,筛除这些数的倍数,即将合数筛除.用辅助数组p记录数i是否是素数. vector<int> prime(int n) { vector<int> p(n+1); for(int i=2;i<=n;i+=2) { if(i%2==0&&i>2) p[i]=0; else p[i]=1; } for(int i=3;i<=(int)(sqrt((double)n));i+=2) { if(p[i]) fo

线段树2 求区间最小值

线段树2 求区间最小值 从数组arr[0...n-1]中查找某个数组某个区间内的最小值,其中数组大小固定,但是数组中的元素的值可以随时更新. 数组[2, 5, 1, 4, 9, 3]可以构造如下的二叉树(背景为白色表示叶子节点,非叶子节点的值是其对应数组区间内的最小值,例如根节点表示数组区间arr[0...5]内的最小值是1): 线段树的四种操作: 1.线段树的创建 2.线段树的查询 3.线段树的更新单节点 4.线段树的更新区间 直接上完整代码吧 1 #include <bits/stdc++.

欧几里得算法求最大公约数(gcd)

关于欧几里得算法求最大公约数算法, 代码如下: int gcd( int a , int b ) { if( b == 0 ) return a ; else gcd( b , a % b ) ; } 证明: 对于a,b,有a = kb + r  (a , k , b , r 均为整数),其中r = a mod b . 令d为a和b的一个公约数,则d|a,d|b(即a.b都被d整除), 那么 r =a - kb ,两边同时除以d 得 r/d = a/d - kb/d = m (m为整数,因为r也

BZOJ 1057: [ZJOI2007]棋盘制作 悬线法求最大子矩阵+dp

1057: [ZJOI2007]棋盘制作 Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳.而我们的主人公小Q,正是国际象棋的狂热爱好者.作为一个顶尖高手,他已不满足于普通的棋盘与规则,于是他跟他的好朋友小W决定将棋盘扩大以适应他们的新规则.小Q找到了一张由N*M个正方形的格子组成的矩形纸片,每个格子被涂有黑白两种颜色之一.小Q想在这种纸中裁减

【算法】普通方法和筛选法求素数

素数指的是因子只有1和本身的数(1不是素数),求解素数在数学上应用非常广泛,而求解n以内的素数也是我们编程时常遇到的问题,在这个问题上,筛选法求解素数运行得非常快.下面首先介绍如何判断一个是不是素数,然后介绍用普通方法求n以内的素数,接着是筛选法求n以内的素数,最后是两种算法的运行时间比较 判断一个数是不是素数 算法思想:判断小于等于一个数的平方的所有大于1的整数是不是能整除这个数,如果能,则表明这个数不是素数:反之,则是素数. //判断一个数是否为素数 bool isPlain(int val

欧几里得算法求两个整数的最大公因数

unsigned int Gcd (unsigned int m,unsigned int n){ unsigned int rem; while(n>0){ rem = m % n; m = n; n = rem; } return m; } 对于m<n的情况,第一次循环m,n会交换 算法的时间复杂度计算 时间复杂度 logn 若M > N,则第一次循环交换M和N. 若想分析其时间复杂度,则要求循环次数,即生成余数的次数. 可以证明: 当M > N, 则M % N < M

POJ 2478 Farey Sequence 筛选法求欧拉函数

题目来源:POJ 2478 Farey Sequence 题意:输入n 求 phi(2)+phi(3)+phi(4)+...+phi(n) 思路:用类似筛法的方式计算phi(1), phi(2), ..., phi(n) 再求前缀和 #include <cstdio> #include <cstring> #include <cmath> //欧拉phi函数 const int maxn = 1000010; typedef long long LL; int eule

hdu2824 The Euler function 筛选法求欧拉函数模板题

//求a , b范围内的所有的欧拉函数 //筛选法求欧拉函数模板题 #include<cstdio> #include<cstring> #include<iostream> using namespace std ; const int maxn = 3000010 ; typedef __int64 ll ; int e[maxn] ; int a ,  b ; void Euler() { int i,j; for (i=1;i<maxn;i++) e[i]