机器学习基础(一)

机器学习

Overview

机器学习其实就是一种最优化问题——给定约束,最优化目标函数。简单来讲,在机器学习中,基于已知数据,假设数据之间存在某种关联,我们想要尽可能接近地找到这种关联。在这里,约束就是已知数据,目标函数则为“模型”和“真实”的差距。从数学的角度,这个问题可以这样表述:

  • 假设我们的模型可以表示为F_{\mathbf{w}}(\mathbf{x})
  • F可以是任意的函数,\mathbf{w}是参数向量,有些地方也把它叫做权重(weights),因为假如F是一个线性模型,\mathbf{w}就是权重一个直观的表示。总之叫参数也好,系数或者权重也好,表达的都是一个东西,只是叫法不同。
  • 此外我们定义一个合理的损失函数Loss Function:L(\mathbf{x},F_{\mathbf{w}}(\mathbf{x})) \rightarrow \mathbb{R}。损失函数表示“模型”和“真实”的差距。在确定模型表达形式后,我们的目标实际上就是找到权重向量,使得期望损失达到最小:
    {\underset {\mathbf{w}}{\operatorname {arg\,min} }}\,E[L(\mathbf{x},F_{\mathbf{w}}(\mathbf{x}))]

监督学习(Supervised Learning)

  • 在监督学习下,我们有一组训练集,训练集中数据可分为输入(input)\mathbf{x}和输出(output)\mathbf{y}。假设\mathbf{y}\mathbf{x}之间存在某个函数关系F使得\mathbf{y}=F(\mathbf{x})+\epsilon。也就是说,我们可以通过某一种方式,输入\mathbf{x}后可以得到\mathbf{y}

  • 因此,监督学习的问题可以表示为最小化期望损失:
    {\underset {\mathbf{w}}{\operatorname {arg\,min} }}\,E[L(\mathbf{x},\mathbf{y},F_{\mathbf{w}}(\mathbf{x}))]

  • 其中L(\mathbf{x},\mathbf{y},F_{\mathbf{w}}(\mathbf{x})) \rightarrow \mathbb{R}为损失函数。

  • 假设我们不存在训练集,没有输入输出数据,这个问题也就被一般化为无监督学习(Unsupervised Learning)。

Recall:统计学模型——最小二乘估计(OLS)

当我们做OLS线性回归模型时,给定因变量\mathbf{y}和自变量\mathbf{x},我们可以得到线性模型:
\mathbf{y} = \mathbf{w}^{T}\mathbf{x} + \mathbf{\epsilon}

其中
\begin{equation} \mathbf{y} = \begin{bmatrix} y_{1}\\ y_{2} \\ \vdots \\ y_{n} \\ \end{bmatrix} , \space \mathbf{x} = \begin{bmatrix} 1 & x_{11} & x_{12} & \cdots & x_{1m}\\ 1 & x_{21} & x_{22} & \cdots & x_{2m} \\ \vdots & \vdots & & & \vdots \\ 1 & x_{n1} & x_{n2} & \cdots & x_{nm} \\ \end{bmatrix} , \space \mathbf{w} = \begin{bmatrix} w_{1}\\ w_{2} \\ \vdots \\ w_{m} \end{bmatrix} , \space \mathbf{\epsilon} = \begin{bmatrix} \epsilon_{1}\\ \epsilon_{2} \\ \vdots \\ \epsilon_{n} \end{bmatrix} \end{equation}

该问题的的目标是最小化残差平方和(RSS):

{\underset {\mathbf{w}}{\operatorname {arg\,min} }}\,\sum_{i=1}^{n}\epsilon_i^2 = \sum_{i=1}^{n}\big(y_i - \mathbf{w}^{T}x_i\big)^2
得到:
\hat{\mathbf{w}} = (\mathbf{x}^{T}\mathbf{x})^{-1}\mathbf{x}^{T}\mathbf{y}

其实这也是一个简单的机器学习问题:

  • 损失函数:L(\mathbf{x},\mathbf{y},\mathbf{w}) = \sum_{i=1}^{n}\big(y_i - \mathbf{w}^{T}x_i\big)^2
  • 模型:F_{\mathbf{w}}(\mathbf{x}) = \mathbf{w}^{T}\mathbf{x}

机器学习的简单实践

  • 我们假设F_{\mathbf{w}}(\mathbf{x}) = \mathbf{w}^{T}\mathbf{x} = x^2 + 2x + 3
  • 此时\mathbf{w} = [1,2,3]^T\mathbf{x} = [x^2, x, 1]^T
  • 理论上\mathbf{y}\mathbf{x}存在基于以上形式的二次关系。
  • 我们现在随机生成一组数据$:
import numpy as np
import matplotlib.pyplot as plt
import scipy.optimize as opt

def F(x):
    return x**2 + 2*x + 3
xs = np.random.uniform(-6, 4, 20)
ys = [F(x) + np.random.normal(0,2) for x in xs]
data = (xs, ys)

我们看看随机生成的点的分布情况

domain = np.linspace(-6,4,50)
fig, ax = plt.subplots(figsize = (8,6))
ax.plot(domain, F(domain), label='Theoretical Model')
ax.scatter(xs, ys, c='r', marker='x', label='Data')
plt.legend()
output_13_1.png

现在我们不知道原本的函数关系,只已知这些数据,怎么去拟合这个函数?这就是机器学习中的一个简单问题。

fig, ax = plt.subplots(figsize = (8,6))
ax.scatter(xs, ys, c='r', marker='x', label='Data')
plt.legend()
output_15_1.png

函数F_{\mathbf{w}}(\mathbf{x})我们可以假设成任意的形式,因为基于泰勒展开原理,任何一个函数都可以展开成一个多项式的形式。因此我们函数的也理所当然地从多项式开始入手,可以是一次,可以是二次甚至更高次。

def F_hat_o1(x, w): 
    (a, b) = w
    return a*x + b

def F_hat_o2(x, w): 
    (a, b, c) = w
    return a*x**2 + b*x + c

def F_hat_o4(x, w): 
    (a, b, c, d, e) = w
    return a*x**4 + b*x**3 + c*x**2 + d*x + e

定义损失函数:

def L(w):
    predicted_data = np.array([F_hat(x, w) for x in data[0]])
    training_data = np.array(data[1])
    return np.sum((training_data - predicted_data) ** 2)

一阶:

initial_weights = [0., 0.]
F_hat = F_hat_o1
final_weights = opt.minimize(L, initial_weights)
weights_o1 = final_weights.x
print(weights_o1)
[ 0.46082929 10.87317174]

二阶:

initial_weights = [0., 0., 0.]
F_hat = F_hat_o2
final_weights = opt.minimize(L, initial_weights)
weights_o2 = final_weights.x
print(weights_o2)
[0.99123066 1.94480201 2.41571896]

四阶:

initial_weights = [0., 0., 0., 0., 0.]
F_hat = F_hat_o4
final_weights = opt.minimize(L, initial_weights)
weights_o4 = final_weights.x
print(weights_o4)
[-0.0155209  -0.05878026  1.28288611  2.52211275  1.32693671]
def F_hat(x, weights, order):
    xs = np.array([x**i for i in range(order,-1,-1)])
    weights = np.array(weights)
    y_hat = np.sum(np.array(xs.T*weights.T), axis=1)
    return y_hat
F_o1 = lambda x: F_hat(x, weights_o1, 1)
F_o2 = lambda x: F_hat(x, weights_o2, 2)
F_o4 = lambda x: F_hat(x, weights_o4, 4)
domain = np.linspace(-6,4,50)
fig, ax = plt.subplots(figsize = (8,6))
ax.plot(domain, F(domain), label='Theoretical Model')
ax.plot(domain, F_o1(domain), label='1st order')
ax.plot(domain, F_o2(domain), label='2nd order')
ax.plot(domain, F_o4(domain), label='4th order')
ax.scatter(xs, ys, c='r', marker='x', label='Data')
plt.legend()
output_29_1.png

虽然4阶的模型能够让数据点更紧密地落在曲线上,但实际上因为阶数过高而过拟合了,效果并没有二阶模型好。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容