一、線性回歸概述
I‘m Linear Regression, One of the most important mathematical models and Mother of Models.
線性回歸模型形式簡(jiǎn)單、易于建模,簡(jiǎn)單到讓人懷疑其是否有研究?jī)r(jià)值以及使用價(jià)值。但實(shí)際上,線性回歸模型可以說是最重要的數(shù)學(xué)模型之一,蘊(yùn)含著機(jī)器學(xué)習(xí)中很多重要的思想,很多功能更強(qiáng)大的非線性模型(nonlinear nodel)都是建立在它的基礎(chǔ)之上,可以被稱為是“模型之母”。
二、簡(jiǎn)單線性回歸
2.1、簡(jiǎn)單線性回歸的定義
在機(jī)器學(xué)習(xí)算法中,算法大體被分為分類和回歸兩種類型,比如kNN算法屬于分類(Classification),即label為離散類別型(categorical variable),如:顏色類別、手機(jī)品牌、是否患病等。
而線性回歸是屬于回歸(regression),即label為連續(xù)數(shù)值型(continuous numerical variable),如:房?jī)r(jià)、股票價(jià)格、降雨量等。
那么什么是簡(jiǎn)單線性回歸?
- 簡(jiǎn)單,是指只有一個(gè)樣本特征,即只有一個(gè)自變量;
- 線性,是指方程是線性的;
- 回歸,是指用方程來模擬變量之間是如何關(guān)聯(lián)的。
2.2、簡(jiǎn)單的小例子
首先引入一個(gè)數(shù)據(jù)源,該數(shù)據(jù)源中保存了工作年限與薪水的若干條相關(guān)信息
income = pd.read_csv(r'./file/Salary_Data.csv')
income.head()
通過seabourn繪制工作年限與收入之間的散點(diǎn)圖
# 導(dǎo)入第三方模塊
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 繪制散點(diǎn)圖
sns.lmplot(x = 'YearsExperience', y = 'Salary', data = income, ci = None, fit_reg=False)
# 顯示圖形
plt.show()

通過對(duì)數(shù)據(jù)源的可視化會(huì)發(fā)現(xiàn)工作年限與薪水存在著一定的線性關(guān)系,那么我們是否可以畫出一條直線,最大程度的擬合樣本特征和樣本數(shù)據(jù)標(biāo)記之間的關(guān)系。如下圖所示:
sns.lmplot(x = 'YearsExperience', y = 'Salary', data = income, ci = None)
plt.show()

2.3、求解的基本思路
通過上圖發(fā)現(xiàn),這條直線是我們初中就學(xué)過的一個(gè)一次函數(shù) y = ax + b,那么我們?nèi)绾吻蟪鰠?shù)a與b的值呢?下面是簡(jiǎn)單的推導(dǎo)過程:
首先,則對(duì)于每個(gè)樣本點(diǎn),根據(jù)我們的直線方程,預(yù)測(cè)值為:
。
我們所期望的是當(dāng)選取合適的a和b后,直線方程能夠盡可能地?cái)M合真實(shí)情況,換句話說,就是真實(shí)值與方程得到的預(yù)測(cè)值
之間的差距盡可能的小。
這二者直接的值有可能為正也有可能為負(fù),因此使用絕對(duì)值來表示二者之間的差距:。
但是在線性回歸中,我們需要找極值,需要函數(shù)可導(dǎo),而 不是一個(gè)處處可導(dǎo)的函數(shù),因此很自然地想到可以使用:
考慮所有樣本,我們推導(dǎo)出:
最終我們目標(biāo)變?yōu)椋?strong>已知訓(xùn)練數(shù)據(jù)樣本x、y ,找到a和b的值,使盡可能小。
2.4、損失函數(shù)與風(fēng)險(xiǎn)函數(shù)
2.4.1、損失函數(shù)
在2.3節(jié)的思路中,我們的目的是找到一組參數(shù),使得真實(shí)值與預(yù)測(cè)值之間的差距盡可能地小,也就是損失的部分盡量小。
在機(jī)器學(xué)習(xí)中,我們使用損失函數(shù)(loss function)(也有算法是衡量擬合的程度,稱函數(shù)為效用函數(shù)(utility function))來描述沒有擬合的部分,損失函數(shù)是衡量預(yù)測(cè)模型預(yù)測(cè)期望結(jié)果表現(xiàn)的指標(biāo),用來度量模型一次預(yù)測(cè)的好壞。損失函數(shù)越小,模型的魯棒性越好。
常見的損失函數(shù)有一下幾種:
- 0-1損失函數(shù):用來表述分類問題,當(dāng)預(yù)測(cè)分類錯(cuò)誤時(shí),損失函數(shù)值為1,正確為0
- 平方損失函數(shù):用來描述回歸問題,用來表示連續(xù)性變量,為預(yù)測(cè)值與真實(shí)值差值的平方。(誤差值越大、懲罰力度越強(qiáng),也就是對(duì)差值敏感)
- 絕對(duì)損失函數(shù):用在回歸模型,用距離的絕對(duì)值來衡量
- 對(duì)數(shù)損失函數(shù):是預(yù)測(cè)值Y和條件概率之間的衡量。事實(shí)上,該損失函數(shù)用到了極大似然估計(jì)的思想。P(Y|X)通俗的解釋就是:在當(dāng)前模型的基礎(chǔ)上,對(duì)于樣本X,其預(yù)測(cè)值為Y,也就是預(yù)測(cè)正確的概率。由于概率之間的同時(shí)滿足需要使用乘法,為了將其轉(zhuǎn)化為加法,我們將其取對(duì)數(shù)。最后由于是損失函數(shù),所以預(yù)測(cè)正確的概率越高,其損失值應(yīng)該是越小,因此再加個(gè)負(fù)號(hào)取反。
以上損失函數(shù)是針對(duì)于單個(gè)樣本的,但是一個(gè)訓(xùn)練數(shù)據(jù)集中存在N個(gè)樣本,N個(gè)樣本給出N個(gè)損失,如何進(jìn)行選擇呢?
這就引出了風(fēng)險(xiǎn)函數(shù)。
2.4.2、風(fēng)險(xiǎn)函數(shù)
期望風(fēng)險(xiǎn):對(duì)所有樣本預(yù)測(cè)錯(cuò)誤程度的均值【全局】
期望風(fēng)險(xiǎn)是損失函數(shù)的期望,用來表達(dá)理論上模型f(X)關(guān)于聯(lián)合分布P(X,Y)的平均意義下的損失。又叫期望損失/風(fēng)險(xiǎn)函數(shù)。期望風(fēng)險(xiǎn)是全局的,基于所有樣本點(diǎn)損失函數(shù)最小化。期望風(fēng)險(xiǎn)是全局最優(yōu),是理想化的不可求的。
經(jīng)驗(yàn)風(fēng)險(xiǎn):多次預(yù)測(cè)的錯(cuò)誤程度的均值【局部】
模型f(X)關(guān)于訓(xùn)練數(shù)據(jù)集的平均損失,稱為經(jīng)驗(yàn)風(fēng)險(xiǎn)或經(jīng)驗(yàn)損失。經(jīng)驗(yàn)風(fēng)險(xiǎn)是局部的,基于訓(xùn)練集所有樣本點(diǎn)損失函數(shù)最小化。經(jīng)驗(yàn)風(fēng)險(xiǎn)是局部最優(yōu),是現(xiàn)實(shí)的可求的。
其公式含義為:模型關(guān)于訓(xùn)練集的平均損失(每個(gè)樣本的損失加起來,然后平均一下)
經(jīng)驗(yàn)風(fēng)險(xiǎn)最小的模型為最優(yōu)模型。在訓(xùn)練集上最小經(jīng)驗(yàn)風(fēng)險(xiǎn)最小,也就意味著預(yù)測(cè)值和真實(shí)值盡可能接近,模型的效果越好。公式含義為取訓(xùn)練樣本集中對(duì)數(shù)損失函數(shù)平均值的最小。
期望風(fēng)險(xiǎn)是模型關(guān)于聯(lián)合分布的期望損失,經(jīng)驗(yàn)風(fēng)險(xiǎn)是模型關(guān)于訓(xùn)練樣本數(shù)據(jù)集的平均損失。根據(jù)大數(shù)定律,當(dāng)樣本容量N趨于無窮時(shí),經(jīng)驗(yàn)風(fēng)險(xiǎn)趨于期望風(fēng)險(xiǎn)。
因此很自然地想到用經(jīng)驗(yàn)風(fēng)險(xiǎn)去估計(jì)期望風(fēng)險(xiǎn)。但是由于訓(xùn)練樣本個(gè)數(shù)有限,可能會(huì)出現(xiàn)過擬合的問題,即決策函數(shù)對(duì)于訓(xùn)練集幾乎全部擬合,但是對(duì)于測(cè)試集擬合效果過差。因此需要對(duì)其進(jìn)行矯正
結(jié)構(gòu)風(fēng)險(xiǎn):經(jīng)驗(yàn)風(fēng)險(xiǎn) + 正則項(xiàng)(懲罰項(xiàng))
結(jié)構(gòu)風(fēng)險(xiǎn)最小化:當(dāng)樣本容量不大的時(shí)候,經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化容易產(chǎn)生“過擬合”的問題,為了“減緩”過擬合問題,提出了結(jié)構(gòu)風(fēng)險(xiǎn)最小理論。結(jié)構(gòu)風(fēng)險(xiǎn)最小化為經(jīng)驗(yàn)風(fēng)險(xiǎn)與復(fù)雜度同時(shí)較小。
通過公式可以看出,結(jié)構(gòu)風(fēng)險(xiǎn):在經(jīng)驗(yàn)風(fēng)險(xiǎn)上加上一個(gè)正則化項(xiàng)(regularizer),或者叫做罰項(xiàng)(penalty) 。正則化項(xiàng)是J(f)是函數(shù)的復(fù)雜度再乘一個(gè)權(quán)重系數(shù)(用以權(quán)衡經(jīng)驗(yàn)風(fēng)險(xiǎn)和復(fù)雜度)
2.5、參數(shù)學(xué)習(xí)算法的基本思路
對(duì)于所有的參數(shù)學(xué)習(xí)模型來說,推導(dǎo)思路大致為:
- 通過分析問題,確定問題的損失函數(shù)或者效用函數(shù)
- 然后通過最優(yōu)化損失函數(shù)或者效用函數(shù),獲得機(jī)器學(xué)習(xí)的模型
區(qū)別在于模型不同,建立的目標(biāo)函數(shù)不同,優(yōu)化的方式也不同。
2.6、最小二乘法
回歸到之前的問題,如何計(jì)算的最小值呢?這里引入最小二乘法的概念
最小二乘法源于法國(guó)數(shù)學(xué)家阿德里安的猜想:
對(duì)于測(cè)量值來說,讓總的誤差的平方最小的就是真實(shí)值。這是基于,如果誤差是隨機(jī)的,應(yīng)該圍繞真值上下波動(dòng)。
....推導(dǎo)過程未完待續(xù)
最小二乘法得到a、b的表達(dá)式: