1.1 統(tǒng)計(jì)學(xué)習(xí)
統(tǒng)計(jì)學(xué)習(xí)包括監(jiān)督學(xué)習(xí)、非監(jiān)督學(xué)習(xí)、半監(jiān)督學(xué)習(xí)及強(qiáng)化學(xué)習(xí)。
步驟:
1)得到一個(gè)有限的訓(xùn)練數(shù)據(jù)集合
2)確定包含所有可能的模型的假設(shè)空間,即學(xué)習(xí)模型的集合
3)確定模型選擇的準(zhǔn)則,即學(xué)習(xí)的策略
4)實(shí)現(xiàn)求解最優(yōu)模型的算法,即學(xué)習(xí)的算法
5)通過學(xué)習(xí)方法選擇最優(yōu)模型
6)利用學(xué)習(xí)的最優(yōu)模型對(duì)新數(shù)據(jù)進(jìn)行預(yù)測或分析
1.2 監(jiān)督學(xué)習(xí)
監(jiān)督學(xué)習(xí)(supervised learning)的任務(wù)是學(xué)習(xí)一個(gè)模型,使模型能夠?qū)θ我饨o定的輸入,對(duì)其相應(yīng)的輸出做出一個(gè)好的預(yù)測。從訓(xùn)練數(shù)據(jù)中學(xué)習(xí)模型,對(duì)測試數(shù)據(jù)進(jìn)行預(yù)測。
1.3 統(tǒng)計(jì)學(xué)習(xí)三要素
1)模型
本書中決策函數(shù)表示的模型為非概率模型
條件概率表示的模型為概率模型
2)策略
損失函數(shù)度量模型一次預(yù)測的好壞
a. 0-1損失函數(shù) L(Y, f(X))
b. 平方損失函數(shù)
c. 絕對(duì)損失函數(shù)
d. 對(duì)數(shù)損失函數(shù)
風(fēng)險(xiǎn)函數(shù)度量平均意義下的模型預(yù)測好壞
3)算法
1.4 模型估計(jì)與模型選擇
訓(xùn)練誤差:模型關(guān)于訓(xùn)練數(shù)據(jù)集的平均損失
測試誤差:模型關(guān)于測試數(shù)據(jù)集的平均損失
過擬合
1.5 模型選擇方法:正則化與交叉驗(yàn)證
1)正則化是結(jié)構(gòu)風(fēng)險(xiǎn)最小化策略的實(shí)現(xiàn),是在經(jīng)驗(yàn)風(fēng)險(xiǎn)上加上一個(gè)正則化項(xiàng)或罰項(xiàng)。正則化的作用是選擇經(jīng)驗(yàn)風(fēng)險(xiǎn)與模型復(fù)雜度同時(shí)較小的模型。
2)交叉驗(yàn)證
一種簡單的模型選擇方法是隨機(jī)的將數(shù)據(jù)集切分為訓(xùn)練集、驗(yàn)證集和測試集,訓(xùn)練集用于訓(xùn)練模型,驗(yàn)證集用于模型選擇,測試集用于最終對(duì)學(xué)習(xí)方法的評(píng)估。
在實(shí)際應(yīng)用中,數(shù)據(jù)不是充足的,為了選擇好的模型,采用交叉驗(yàn)證?;舅枷胧侵貜?fù)的使用數(shù)據(jù);把給定的數(shù)據(jù)切分,將切分的數(shù)據(jù)集組合為訓(xùn)練集和測試集,在此基礎(chǔ)上反復(fù)訓(xùn)練、測試及模型選擇。
簡單交叉驗(yàn)證、S折交叉驗(yàn)證、留一交叉驗(yàn)證。
1.6 泛化能力
學(xué)習(xí)方法的泛化能力是由該方法學(xué)習(xí)到的模型對(duì)未知數(shù)據(jù)的預(yù)測能力,是學(xué)習(xí)方法本質(zhì)上重要的性質(zhì)。
泛化誤差是所學(xué)習(xí)到的模型的期望風(fēng)險(xiǎn)。
1.7 生成模型與判別模型
生成方法由數(shù)據(jù)學(xué)習(xí)聯(lián)合概率分布P(X,Y),然后求出條件概率分布P(Y|X)作為預(yù)測的模型,即生成模型,典型的生成模型:樸素貝葉斯法和隱馬爾可夫模型。
判別方法由數(shù)據(jù)學(xué)習(xí)決策函數(shù)f(X)或者條件概率分布P(Y|X)作為預(yù)測的模型,即判別模型,典型的判別模型:k近鄰法、感知機(jī)、決策樹、邏輯斯諦回歸模型、最大熵模型、支持向量機(jī)、提升方法、條件隨機(jī)場等。
1.8 分類問題
1.9 標(biāo)注問題
1.10 回歸問題
練習(xí)
例題1.1 數(shù)據(jù)擬合
import numpy as np
import matplotlib.pyplot as plt
import scipy as sp
from scipy.optimize import leastsq
# 目標(biāo)函數(shù) sin2πx
def real_func(x):
return np.sin(2 * np.pi * x)
# 擬合函數(shù) 多項(xiàng)式
def fit_func(p, x):
f = np.poly1d(p)
return f(x)
# 殘差
def residuals_func(p, x, y):
ret = fit_func(p, x) - y
return ret
x = np.linspace(0, 1, 10) #0~1之間10個(gè)數(shù)字
x_points = np.linspace(0, 1, 1000)
# 增加正態(tài)分布噪音的目標(biāo)函數(shù)值
y_ = real_func(x)
y = [np.random.normal(0, 0.1) + y1 for y1 in y_] #正態(tài)分布均值0,標(biāo)準(zhǔn)差0.1
def fitting(m=0):
# m是多項(xiàng)式次數(shù)
# 隨機(jī)初始化多項(xiàng)式參數(shù)
p_init = np.random.rand(m + 1) #隨機(jī)生成[0,1)之間的m+1個(gè)數(shù),返回多項(xiàng)式的次數(shù)就是m
# 最小二乘
p_lsq = leastsq(residuals_func, p_init, args=(x, y)) #args數(shù)據(jù)點(diǎn)
# 可視化
plt.plot(x_points, real_func(x_points), label='real')
plt.plot(x_points, fit_func(p_lsq[0], x_points), label='fitted curve')
plt.plot(x, y, 'bo', label='noise')
plt.legend()
plt.show()
return p_lsq
p_lsq_0 = fitting(m=0)
p_lsq_0
m=0

m=1

m=3

m=9

m=9出現(xiàn)了過擬合,加入正則化項(xiàng),降低過擬合
regularization = 0.0001
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))) # L2范數(shù)作為正則化項(xiàng)
return ret
# 最小二乘法,加正則化項(xiàng)
p_init = np.random.rand(9 + 1)
p_lsq_regularization = leastsq(
residuals_func_regularization, p_init, args=(x, y))
plt.plot(x_points, real_func(x_points), label='real')
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()
