机器学习原理01
介绍
为什么需要机器学习?
海量的数据要发挥价值:必须要引入机器学习的方法。
机器学习在实际生活中的应用?
自动驾驶,计算机视觉,生命科学,个性化推荐…
人类预测未来的做法?
- 规律提炼: 对过去大量经验的总结。经验+思维=规律
- 规律利用: 通过规律预测未来。新现象+规律=决策
机器预测未来的做法?
- 训练模型: 数据+机器学习算法=模型
- 模型应用:新数据+模型=决策
什么是机器学习算法?
计算机从 数据中 产生 模型 的算法,称为 机器学习算法。
机器学习和数据挖掘的关系?
机器学习和人工智能的关系?
机器学习和传统计算的区别?
如图所示:
- 传统计算是在给定人类已知解决问题的方法的基础上,去处理问题。
- 机器学习则是: 自己通过数据摸索出解决问题的方法,再去处理问题。
机器学习的分类
基本分类
-
监督学习
本质: 有预期的输出(决策空间),学习一个由输入x到输入y的映射。 -
无监督学习
本质: 无预期的输出(决策空间),学习数据中的统计规律或潜在结构。
- 强化学习
指: 智能系统在与环境的连续互动中学习最优行为策略的机器学习问题。
本质: 学习最优的序贯决策。强化学习过程中,系统不断地试错(trial and error),以达到学习最优策略的目的。
-
半监督学习
- 利用标注数据和未标注数据学习预测模型的机器学习问题。
- 通常有少量的标注数据,大量的未标注数据。
-
主动学习
- 机器不断主动给出实例让教师进行标注,然后利用标注数据学习预测模型的机器学习问题。
- 通常的监督学习使用给定的标注数据,看作"被动学习"。
按模型分类
- 概率模型
- 概率模型取条件概率分布形式P(y|x)
- 通常可以表示为联合概率分布的形式
- 非概率模型
- 非概率模型取函数形式: y=f(x)
- 不一定存在联合概率分布
- 线性模型
- 模型函数是线性函数
- 非线性模型。
- 模型函数是非线性函数
- 参数化模型
- 假设模型参数的维度固定
- 模型可以由有限维参数完全刻画
- 非参数化模型
- 模型参数的维度不固定或无穷大
按算法分类
- 在线学习
- 每次接收一个样本,进行预测,之后学习模型,并不断重复该操作的机器学习
- 随机梯度下降的感知机学习算法就是在线学习算法。
- 在线学习比批量学习更难,很难学到预测准确率更高的模型,因为每次模型更新中可利用的数据有限。
- 批量学习
- 一次接收所有数据,学习模型,之后进行预测。
按技巧分类
- 贝叶斯学习
- 在概率模型的学习和推理中,利用贝叶斯定理,计算在给定数据条件下模型的条件概率,即后验概率,并利用这个原理进行模型的估计,以及对数据的预测
- 核方法
- 使用核函数 表示和学习 非线性模型的一种机器学习方法
- 可以用于监督学习和无监督学习。
其它分类
- 生成模型
- 其原理: 由数据学习联合概率分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型,即生成模型: P(Y|X) = P(X,Y)/P(X)
- 之所以称为生成模型,是因为模型表示了给定输入X和产生输出Y的生成关系
- 判别模型
- 其原理: 由数据直接学习决策函数f(X)或者条件概率分布P(Y|X)作为预测的模型,即判别模型。
- 其关心的是对于给定的输入X,应该预测什么样的输出Y。
统计学习(机器学习)三要素:
机器学习方法 = 模型+策略+算法。
模型(模型的假设空间)
策略(模型选择的准则)
算法(模型学习的具体算法)
模型评估与模型选择
过拟合代码示例:
import numpy as np
import scipy as sp
from scipy.optimize import leastsq # scipy的最优化引入最小二乘法
import matplotlib.pyplot as plt
# 真实函数(生成y=sin2Πx的真实函数)
def real_func(x):
return np.sin(2 * np.pi * x)
# 生成多项式函数(用于拟合10个噪声点)
def fit_func(p, x):
"""
poly1d函数 就是输入一个列表,返回以这个列表中的值为参数的多项式
输入:[1,2,3]
返回:x^2 + 2x + 3
多项式的次数是从0开始记的,要注意这个地方
"""
f = np.poly1d(p) # f即 返回的多项式方程
# print(f)
return f(x) # f(x) 即传递具体值给方程得出y值
# 定义残差(即y-f(x)的形式),即自己定义的一个计算误差的函数
def residuals_func(p, x, y):
ret = fit_func(p, x) - y
return ret
# 随机生成0到1的十个点 用于表示10个噪声点的x
x = np.linspace(0, 1, 10) # linspace等差数列
# 加上正态分布噪音的函数的值
y_ = real_func(x) # 生成真实函数
y = [y1 for y1 in y_ + np.random.normal(0, 0.1)] # 真实函数的值加上正态分布的噪音 的y值
# 随机生成0-1的1000个等差数列的点用于 绘制目标函数
x_points = np.linspace(0, 1, 1000)
# 多项式函数拟合10个噪声点 并 进行可视化
def fitting(M=0):
"""
M 代表生成的多项式的次数
多项式方程的形式 如 3 2
21.08 x - 31.61 x + 10.65 x + 0.08102
"""
# 随机初始化多项式的各个参数
"""
通过本函数可以返回一个或一组服从“0~1”均匀分布的随机样本值列表
括号中形参的数字值代表生成的数字的个数(这里m+1是因为多项式方程需要产生M+1个系数)
"""
p_init = np.random.rand(M + 1)
# 使用 最小二乘法来优化 拟合的多项式模型的参数
"""
leastsq(func,x0,args=()) 函数可以求出任意的想要拟合的函数的参数
func: 自己定义的一个计算误差的函数
x0: 拟合函数的各个初始化参数值
args: 放置func函数中除了p形参外的其它形参
"""
p_lsq = leastsq(residuals_func, p_init, args=(x, y))
print("Fitting Parameters: ", p_lsq[0]) # p-lsq[0]是一个列表,保存的是拟合的曲线的参数
# 可视化
plt.plot(x_points, real_func(x_points), label="real") # 目标函数曲线
plt.plot(x_points, fit_func(p_lsq[0], x_points), label="fit") # 拟合曲线
plt.plot(x, y, 'bo', label="noise") # 十个噪声点
plt.legend() # 显示图例
# 显示图像
plt.show()
# 函数调用(传递不同数值的M值参数示例)
#fitting(0)
#fitting(1)
#fitting(3)
fitting(9)
实验结果:(当M=9时,会出现"过拟合")
正则化与交叉验证
正则化:
过拟合的代码进行正则化的代码示例:
"""
统计学习是关于计算机基于数据构建概率统计模型并运用模型对数据进行分析与预测的一门学科。统计学习包括监督学习、非监督学习、半监督学习和强化学习
统计学习包括监督学习、非监督学习、半监督学习和强化学习。
统计学习方法三要素——模型、策略、算法
"""
"""
主要讨论监督学习
从有限的训练数据出发, 假设数据是独立同分布
假设模型属于某个假设空间,应用某一评价准则,
从假设空间中选取一个最优的模型,
使它对已给训练数据及未知测试数据在给定评价标准意义下有最准确的预测。
"""
"""
统计学习中,进行模型选择或者说提高学习的泛化能力是一个重要问题。
如果只考虑减少训练误差,就可能产生过拟合现象。
模型选择的方法有正则化与交叉验证。
"""
import numpy as np
import scipy as sp
from scipy.optimize import leastsq # scipy的最优化引入最小二乘法
import matplotlib.pyplot as plt
"""
残差:r_i=h(x_i)-y_i
此时L2范数(残差平方和)最小时,h(x)和y相似度最高,即更拟合
一般的h(x)为n次的多项式,h(x)=w_0+w_1x+w_2x^2+...w_nx^n
w(w_0,w_1,w_2,...,w_n)为参数
最小二乘法就是要找到一组 w(w_0,w_1,w_2,...,w_n) ,
使得(残差平方和)最小
"""
# 真实函数(生成y=sin2Πx的真实函数)
def real_func(x):
return np.sin(2 * np.pi * x)
# 生成多项式函数(用于拟合10个噪声点)
def fit_func(p, x):
"""
poly1d函数 就是输入一个列表,返回以这个列表中的值为参数的多项式
输入:[1,2,3]
返回:x^2 + 2x + 3
多项式的次数是从0开始记的,要注意这个地方
"""
f = np.poly1d(p) # f即 返回的多项式方程
# print(f)
return f(x) # f(x) 即传递具体值给方程得出y值
# 定义残差(即y-f(x)的形式),即自己定义的一个计算误差的函数
def residuals_func(p, x, y):
ret = fit_func(p, x) - y
return ret
# 正则化(L2范数,系数的平方和)
regularization = 0.0001
"""
L1: regularization*abs(p)
L2: 0.5 * regularization * np.square(p)
"""
def residuals_func_regularization(p, x, y):
ret = fit_func(p, x) - y
ret = np.append(ret, np.sqrt(0.5*regularization*np.square(p)))
return ret
# 随机生成0到1的十个点 用于表示10个噪声点的x
x = np.linspace(0, 1, 10) # linspace等差数列
# 加上正态分布噪音的函数的值
y_ = real_func(x) # 生成真实函数
y = [y1 for y1 in y_ + np.random.normal(0, 0.1)] # 真实函数的值加上正态分布的噪音 即噪音的y值
# 随机生成0-1的1000个等差数列的点用于 绘制目标函数
x_points = np.linspace(0, 1, 1000)
# 多项式函数拟合10个噪声点 并 进行可视化
def fitting(M=0):
"""
M 代表生成的多项式的次数
多项式方程的形式 如 3 2
21.08 x - 31.61 x + 10.65 x + 0.08102
"""
# 随机初始化多项式的各个参数
"""
通过本函数可以返回一个或一组服从“0~1”均匀分布的随机样本值列表
括号中形参的数字值代表生成的数字的个数(这里m+1是因为多项式方程需要产生M+1个系数)
"""
p_init = np.random.rand(M + 1)
# 使用 最小二乘法来优化 拟合的多项式模型的参数
# 最小二乘法,加上正则化项
"""
leastsq(func,x0,args=()) 函数可以求出任意的想要拟合的函数的参数
func: 自己定义的一个计算误差的函数
x0: 拟合函数的各个初始化参数值
args: 放置func函数中除了p形参外的其它形参
"""
p_lsq = leastsq(residuals_func, p_init, args=(x, y))
p_lsq_regularization = leastsq(
residuals_func_regularization, p_init, args=(x, y))
print("Fitting Parameters: ", p_lsq[0]) # p-lsq[0]是一个列表,保存的是拟合的曲线的参数
# 可视化
plt.plot(x_points, real_func(x_points), label="real") # 目标函数曲线
plt.plot(x_points, fit_func(p_lsq[0], x_points), label="fit") # 拟合曲线
plt.plot(x_points, fit_func(
p_lsq_regularization[0], x_points), label="regularization") # 正则化后的拟合曲线
plt.plot(x, y, 'bo', label="noise") # 十个噪声点
plt.legend() # 显示图例
# 显示图像
plt.show()
# 函数调用(由于已经过正则化,当M=9时不会出现像之前那样的过拟合现象)
fitting(9)
交叉验证:
泛化能力
监督学习的应用
- 分类问题
- 标注问题
- 回归问题
使用最小二乘法拟和曲线
高斯于1823年在误差
e
1
,
…
,
e
n
e_1,…,e_n
e1,…,en独立同分布的假定下,证明了最小二乘方法的一个最优性质: 在所有无偏的线性估计类中,最小二乘方法是其中方差最小的! 对于数据
(
x
i
,
y
i
)
(
i
=
1
,
2
,
3...
,
m
)
(x_i, y_i) (i=1, 2, 3...,m)
(xi,yi)(i=1,2,3...,m)
拟合出函数
h
(
x
)
h(x)
h(x)
有误差,即残差:
r
i
=
h
(
x
i
)
−
y
i
r_i=h(x_i)-y_i
ri=h(xi)−yi
此时 L 2 L2 L2范数(残差平方和)最小时, h ( x ) h(x) h(x) 和 y y y 相似度最高,更拟合
一般的 h ( x ) h(x) h(x)为 n n n次的多项式, h ( x ) = w 0 + w 1 x + w 2 x 2 + . . . w n x n h(x)=w_0+w_1x+w_2x^2+...w_nx^n h(x)=w0+w1x+w2x2+...wnxn
w ( w 0 , w 1 , w 2 , . . . , w n ) w(w_0,w_1,w_2,...,w_n) w(w0,w1,w2,...,wn)为参数
最小二乘法就是要找到一组 w ( w 0 , w 1 , w 2 , . . . , w n ) w(w_0,w_1,w_2,...,w_n) w(w0,w1,w2,...,wn) ,使得 ∑ i = 1 n ( h ( x i ) − y i ) 2 \sum_{i=1}^n(h(x_i)-y_i)^2 ∑i=1n(h(xi)−yi)2 (残差平方和) 最小
即,求 m i n ∑ i = 1 n ( h ( x i ) − y i ) 2 min\sum_{i=1}^n(h(x_i)-y_i)^2 min∑i=1n(h(xi)−yi)2
最小二乘法的本质: —>>知乎高赞回答
The End!!创作不易,欢迎点赞/评论!!欢迎关注个人公众号