invalid table name什么意思_机器学习 第31集:什么是最小二乘法?( 含有笔记、代码、注释 )...

什么是最小二乘法?

① 最小二乘法的本质上就是:在观测到一系列 {xi, yi} 的情况下去推测 {w, b} 的最靠谱的取值

② 例如,面临一个现实中的任务,需要设计一个线性模型 y=wx+b,然后根据 x 来估算 y 值。

  1. 先要测量一组 { x, y} 的数值。
  2. 根据这些测量出来的 { x, y } 来求解一个线性模型 y=wx+b 中的参数 w 和 b。

注:似乎我们只要有两对 { x, y } 的取值就可以求解出线性方程组得到 w 和 b 的取值。

注:这个思路是不对的,测量出来的 {xi, yi} 并不完全符合 y=wx+b 这个线性关系。

③ 例如,有五把尺子:

fe994a930ac8af92e7fd724608ac725e.png

④ 用它们来分别测量一线段的长度,得到的数值为:

85aa02bb1b5c203f5ea2a0c131a047c0.png

⑤ 之所以出现不同的值可能因为:

  • 不同厂家的尺子的生产精度不同
  • 尺子材质不同,热胀冷缩不一样
  • 测量的时候心情起伏不定
  • ......

由上图,可以看出,每把尺子测量的情况是不一样的。

注:这种情况下,一般取平均值来作为线段的长度。

⑥ 也就是说:

  1. 每个人都想这个世界是真实的,但是实际上是非真实的。
  2. 于是我们努力做出一个 ≈ 真实的,它只需要近似尽可能满足各个条件达到方差最小。

注:方差代表着各个数据分别与其平均数之差的平方的和的平均数。

注:方差即代表着数据偏离程度。

⑦ 我们测量出的 ( xi, yi ) 实际所符合的模型其实是这样的:

f7cb9b919eaa3a0ac450ed88e1e6b867.png

注:其中

代表我们测量的误差。

注:在无法彻底消除误差的情况下,我们永远都不能得到完全精确的 w 和 b 的取值。

注:幸运的是,我们可以根据 "概率论" 去 "推测" 一个比较有可能的 w 和 b 的取值。

⑧ 假设

符合高斯分布

注:我们先得将不确定的量

确定下来,虽然我们不能确定
的取值,但是我们可以假设
满足一个分布。

注:由于

受到相当多因素的影响,根据中心极限定理,可以猜测
服从高斯分布,也就是

注:参考文献:1. 什么是高斯分布? 2. 什么是中心极限定理?

⑨ 这里我们采用最大似然估计,综合所有的观测值 {xi, yi} 的概率,可得模型的参数 {w, b}

eaa478561486fb4730c0b722d38f66a0.png

9ec8a0041463f0251787f5af4b4fb959.png

注:参考文献:1. 什么是最大似然估计?

注:在测量误差

服从正态分布的前提下,我们只要求出一对
使得预测值与实际值的平方差之和最小,我们就可以保证这些观测值{x, y}的出现概率是最高的。

⑩ 最小二乘法就是要找到一组模型参数

,使得
(残差平方和) 最小,即,求

注:高斯于 1823 年在误差 e1,…,en 独立同分布的假定下,证明了最小二乘方法的一个最优性质: 在所有无偏的线性估计类中,最小二乘方法是其中方差最小的!

Python基础积累

字符串

name="alex"
print(name.capitalize())

运行结果:

Alex

注:capitalize()使得首写子母大写。

print(name.count("a"))

运行结果:

1

注:统计字母个数。

print(name.center(50,"-"))

运行结果:

-----------------------alex-----------------------

注:总共打印50个字符,并把nam放在中间,不够的用-补上。

print(name.endswith("ex"))

运行结果:

True

注:判断字符串是否以ex结尾。

name="alex tname is alex"
print(name.expandtabs(tabsize=30))

运行结果:

alex name is alex

注:原本的t为一个tabsize键,现在将name中t转为30个空格。

print(name.find("x"))

运行结果:

3

注:取索引。

print(name[name.find("x"):])

运行结果:

x name is alex

注:字符串切片,这里的应用是从x这里开始切片。

name="my tname is {name} and i am {year} old"
print(name.format(name="alex",year=23))

运行结果:

my name is alex and i am 23 old

注:将集合里面的name、year进行替换,这是集合打印的第一种形式

print(name.format_map({'name':'alex','year':23}))

运行结果:

my name is alex and i am 23 old

注:这是集合打印的第二种形式。

print('ab123'.isalnum())

运行结果:

True

注:isalnum()包含所有字母及数字,如果不是这两个,则为False。

print('ab123'.isalpha())

运行结果:

False

注:isalpha()判断包含纯英文字符,若否,则返回值为False。

print('1A'.isdecimal())

运行结果:

False

注:判断是否是十进制,若否,则返回值为False。

print('1A'.isdigit())

运行结果:

False

注:判断是否是整数,若否,则返回值为False。

print('_'.isidentifier())

运行结果:

True

注:判断是否是合法的标识符,若是,则返回值为True。

print('aasd'.islower())

运行结果:

True

注:判断是否是小写,若是,则返回值为True。

print(' '.isspace())

运行结果:

True

注:判断是否是空格,若否,则返回值为False。

print('My name is'.istitle())

运行结果:

False

注:istitle()检测字符串中所有的单词拼写首字母是否为大写,且其他字母为小写。

注:如果字符串中所有的单词拼写首字母为大写,且其他字母为小写则返回True,否则返回 False。

print('+'.join(['1','2','3']))

运行结果:

1+2+3

注:对一列表中所有元素进行join操作。

print(name.ljust(50,'*'))

运行结果:

my name is {name} and i am {year} old************

注:左对齐字符串,多余位用*补全。

print(name.rjust(50,'-'))

运行结果:

------------my name is {name} and i am {year} old

注:右对齐字符串,多余位用-补全。

print('n Alex'.lstrip())

运行结果:

Alex

注:去掉左边的空格/回车。

print('nAlexn'.rstrip())

运行结果:

Alex

注:去掉右边的空格/回车。

print('nAlexn'.strip())

运行结果:

Alex

注:去掉左边和右边的空格/回车。

print('Alex')
Alex
p=str.maketrans("abcdef","123456")
print("alex li".translate(p))

运行结果:

1l5x li

注:把alex li换成上一行对应的值。

注:Python中maketrans()用于创建字符映射的转换表。

注:第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。

注:maketrans() 中两个字符串的长度必须相同,为一一对应的关系。

注:Python中translate() 方法根据参数table给出的表(包含 256 个字符)转换字符串的字符, 要过滤掉的字符放到 del 参数中。

注:table -- 翻译表,翻译表是通过maketrans方法转换而来。deletechars -- 字符串中要过滤的字符列表。

注:例如:

  1. from string import maketrans # 引用 maketrans 函数。
  2. intab = "aeiou"
  3. outtab = "12345"
  4. trantab = maketrans(intab, outtab)
  5. str = "this is string example....wow!!!";
  6. print str.translate(trantab);
  7. 以上实例输出结果如下:th3s 3s str3ng 2x1mpl2....w4w!!!
print("alex li".replace('l','L',1))

运行结果:

aLex li

注:替换 1表示替换几个l,从左到右计算替换个数。

注:Python中replace()函数把字符串中的 old(旧字符串) 替换成 new(新字符串)。

注:如果指定第三个参数max,则替换不超过 max 次。

注:str.replace(old, new[, max])

print("alex li".rfind('l'))

运行结果:

5

注:找到的最右边的 下标 返回。

print("alex li".split('l'))

运行结果:

['a', 'ex ', 'i']

注:默认将字符串按照空格分隔成列表,也可以在()中填写相应的分隔符。

注:比如以字符l分隔,print("alex li".split(‘l’)),而且分隔符在列表中不会出现。

print("1+2+3+4".split('+'))

运行结果:

['1', '2', '3', '4']

注:将+号分离出来。

print("1+2n+3+4".splitlines())

运行结果:

['1+2', '+3+4']

注:Python splitlines() 按照行('r', 'rn', n')分隔,返回一个包含各行作为元素的列表。

注:如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。

注:keepends -- 在输出结果里是否保留换行符('r', 'rn', n')。

注:默认为 False,不包含换行符,如果为 True,则保留换行符。

print("Alex Li".swapcase())

运行结果:

aLEX lI

注:swapcase函数是用于对字符串的大小写字母进行转换。

print('lex li'.title())

运行结果:

Lex Li

注:将字符串改为title格式。

print('lex li'.zfill(50)) #不够以0填充
print('---')

运行结果:

00000000000000000000000000000000000000000000lex li
---

注:zfill()函数返回指定长度的字符串,原字符串右对齐,前面填充0。

"♥每天积累一点点♥"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值