线性回归 逻辑回归
分類就是到底是1類別還是0類別。
回歸就是預(yù)測的不是一個類別的值,而是一個具體的值,具體借給你多少錢哪?
一、回歸分析
回歸分析(英語:Regression Analysis)是一種統(tǒng)計學(xué)上分析數(shù)據(jù)的方法,目的在于了解兩個或多個變量間是否相關(guān)、相關(guān)方向與強度,并建立數(shù)學(xué)模型以便觀察特定變量來預(yù)測研究者感興趣的變量。更具體的來說,回歸分析可以幫助人們了解在只有一個自變量變化時因變量的變化量。一般來說,通過回歸分析我們可以由給出的自變量估計因變量的條件期望。
回歸分析是建立因變量Y(或稱依變量,反因變量)與自變量X(或稱獨變量,解釋變量)之間關(guān)系的模型。簡單線性回歸使用一個自變量X,復(fù)回歸使用超過一個自變量(X1,X2...XiX_{1},X_{2}...X_{i}X1?,X2?...Xi?)
- 目的在于找出一條最能夠代表所有觀測資料的函數(shù)(回歸估計式)。
- 用此函數(shù)代表因變量和自變量之間的關(guān)系。
二、線性回歸 & 邏輯回歸
0.引入
在進入正題之前,先講一個可能很多人(包括非初學(xué)者)沒有注意到的問題:邏輯回歸為什么叫“邏輯”?既然是分類算法,為什么又叫“回歸”?
其實邏輯回歸和邏輯二字沒有實際上的關(guān)系,純粹是由“Logistic”音譯而來,那么Logistic又該怎么解釋呢?且Regression的確是回歸的意思,那又該如何解釋呢?
這兩個問題的答案最后再揭開(不是我不想說_(:з)∠)_,是因為涉及到底層原理…)
1.線性回歸
在介紹邏輯回歸之前,先用線性回歸來熱熱身。線性回歸幾乎是最簡單的模型了,它假設(shè)因變量和自變量之間是線性關(guān)系的,一條直線簡單明了。
在有監(jiān)督(有標(biāo)簽的)學(xué)習(xí)中,我們會有一份數(shù)據(jù)集,由一列觀測(y,即因變量)和多列特征(X,即自變量)組成 。線性回歸的目的就是找到和樣本擬合程度最佳的線性模型(or式子,方程 whatever),在尋找過程中需要確定系數(shù)β和干擾項ε(干擾項的作用是捕獲除了X之外所有影響y的其他因素)。
直接上公式吧,有“看公式會發(fā)困病”的同學(xué)可以直接跳過到 加粗斜體黑字 噢 (●ˇ?ˇ●)~:
前面說過,線性回歸的過程就是要找到最優(yōu)的模型來描述數(shù)據(jù)。這里就產(chǎn)生了兩個問題:
如何定義“最優(yōu)”?
如何尋找“最優(yōu)”?
想要評價一個模型的優(yōu)良,就需要一個度量標(biāo)準(zhǔn)。對于回歸問題,最常用的度量標(biāo)準(zhǔn)就是均方差(MSE,Mean Squared Error),均方差是指預(yù)測值和實際值之間的平均方差。平均方差越小,說明測試值和實際值之間的差距越小,即模型性能更優(yōu)。
在線性回歸的式子中y和X是給定的,而β和ε是不確定的,也就是說,找到最優(yōu)的β和ε,就找到了最優(yōu)的模型。
明確了我們的目標(biāo),接下來就是該如何去尋找這兩個量呢?最常用的是參數(shù)估計方法是最小二乘法(Least Square Method), 最小二乘法試圖找到一條直線,使得樣本點和直線的歐氏距離之和最小。這個尋找的過程簡單描述就是:根據(jù)凸函數(shù)的性質(zhì),求其關(guān)于β和ε的二階導(dǎo)的零點。
( ?? ω ?? )?終于講完了理論知識,下面展示一個使用python3編寫的簡單例子。
from numpy.random import randint # 導(dǎo)入numpy庫中的隨機數(shù)生成函數(shù) import matplotlib.pyplot as plt # 導(dǎo)入繪圖庫X = np.array([x for x in range(1, 101)]).reshape(-1, 1) # X = 1,2,...,n y = np.array(list(map(lambda x: 2 * x + randint(-30, 30), X))) # y=2X+r, r=random(-30,+30) y_true = np.array(list(map(lambda x: 2 * x, X))) # y=2x plt.plot(X, y_true, c='b') # 繪制線圖 plt.scatter(X, y, alpha=0.7, s=60) # 繪制散點圖 plt.title('Random Scatter') plt.show()即使去掉標(biāo)準(zhǔn)的y=2x直線圖像,也可以很明顯地看出y和X具有線性關(guān)系(這里的X為了簡單起見只包含一個自變量,即X特征空間只有一維/列),但是由于我們加入了噪聲(隨機數(shù)),所以僅僅靠觀察的話找不到一條確切的直線能夠描述y和X的線性關(guān)系。
# 續(xù)上面的代碼 from sklearn.linear_model import LinearRegression # 導(dǎo)入sklearn庫中的線性回歸模塊 lr = LinearRegression() # 定義一個線性回歸模型 lr.fit(X, y) # 將模型擬合到數(shù)據(jù)上 y_pred = lr.predict(X) # 使用模型預(yù)測數(shù)據(jù)(方便起見就不劃分訓(xùn)練集和測試集了) plt.scatter(X, y, alpha=0.5, s=50) plt.plot(X, y_pred, c='r') plt.plot(X, y_true, c='b') plt.title('Linear Regression') plt.show()圖中的藍線是y=2x,紅線是回歸之后得到的擬合直線,由于噪聲比較多,所以擬合程度沒有非常理想,但也足以描述觀測量y和回歸量X之間的線性關(guān)系了。
2.從線性回歸推廣到廣義線性回歸
上面我們得到了線性回歸模型的數(shù)學(xué)原型,在數(shù)學(xué)上一個特例經(jīng)常都是歸屬于一個更普遍或更一般的原型。讓我們思考下面這兩個回歸模型:
左邊是我們之前得到的線性回歸模型,右邊是對數(shù)線性回歸模型(log-Linear Regression)。從等式的形式來看,對數(shù)線性回歸與線性回歸區(qū)別僅僅在于等式左部,形式依舊是線性回歸,但實質(zhì)上是完成了輸入空間X到輸出空間y的非線性映射。這里的對數(shù)函數(shù)ln(·),將線性回歸模型和真實觀測聯(lián)系起來。通俗地說,原本線性回歸模型無法描述的非線性y,套上了一個非線性函數(shù)ln(·),就可以描述對數(shù)形式的y了。
將以上兩個式子綜合,寫成更一般的形式就是廣義線性回歸模型(GLM,Generalized Linear Model)了。這里的g(·),即ln(·),是一個單調(diào)可微函數(shù),稱為聯(lián)系函數(shù)(Link Function)。顯然,前面的線性回歸和對數(shù)回歸都是廣義線性回歸的特例,根據(jù)聯(lián)系函數(shù)的不同,以不同的方式映射,可以是對數(shù),可以是指數(shù),也可以是其他更復(fù)雜的函數(shù)。
3.邏輯回歸
經(jīng)過上面的鋪墊,終于可以愉快地談?wù)勥壿嫽貧w了? ω ?
當(dāng)我們想將線性回歸應(yīng)用到分類問題中該怎么辦呢?比如二分類問題,將X對應(yīng)的y分為類別0和類別1。我們知道,線性回歸本身的輸出是連續(xù)的,也就是說要將連續(xù)的值分為離散的0和1。答案很容易想到,找到一個聯(lián)系函數(shù),將X映射到y(tǒng)∈{0,1}。
單位階躍函數(shù)的確直接明了,小于0為類別0,大于0為類別1,等于0則皆可。但是有一個原則性的問題,我們需要的聯(lián)系函數(shù),必須是一個單調(diào)可微的函數(shù),也就是說必須是連續(xù)的。(關(guān)于連續(xù)和可微的概念,忘了的同學(xué)趕緊回去補高數(shù)吧╮(╯_╰)╭)。
( ?? ω ?? )?所以邏輯回歸也是廣義線性回歸中的一種以對數(shù)幾率函數(shù)為聯(lián)系函數(shù)的特例。至于為什么要使用Sigmoid函數(shù)中的對數(shù)幾率函數(shù),這涉及到伯努利分布的指數(shù)族形式,最大熵理論等,這里就不展開討論啦,數(shù)學(xué)和英語比較ok的同學(xué)可以看下這兩篇詳細的數(shù)學(xué)推導(dǎo):
邏輯回歸與最大熵模型 www.win-vector.com
指數(shù)族分布與廣義線性回歸 blog.csdn.net
得到了邏輯回歸的數(shù)學(xué)原型,接下來就是找到最優(yōu)參數(shù)。
與線性回歸不同的是,邏輯回歸由于其聯(lián)系函數(shù)的選擇,它的參數(shù)估計方法不再使用最小二乘法,而是極大似然法(Maximum Likelihood Method)。
最小二乘法是最小化預(yù)測和實際之間的歐氏距離,極大似然法的思想也是如出一轍的,但是它是通過最大化預(yù)測屬于實際的概率來最小化預(yù)測和實際之間的“距離”。詳細推導(dǎo)涉及凸優(yōu)化理論,梯度下降法,牛頓法等,就不展開了。
講完了理論知識,為了防止大家發(fā)困( ̄o ̄) . z Z,下面同樣講個簡單的例子。
import matplotlib.pyplot as plt # 導(dǎo)入matplotlib繪圖庫 import seaborn as sns # 導(dǎo)入seaborn繪圖庫tips = sns.load_dataset('tips') # 加載小票數(shù)據(jù)集 tips['big_tip'] = (tips['tip'] / tips['total_bill']) < 0.15 # 構(gòu)造y sns.regplot(x=tips['total_bill'], y=tips['big_tip'], logistic=True) plt.title('Logistic Regression') plt.show()上面是一段簡單的邏輯回歸可視化代碼
tips是一個seaborn內(nèi)置的數(shù)據(jù)集,搜集了小票的信息,包括七個特征字段。注意這里沒有類標(biāo),即沒有y,所以在有監(jiān)督學(xué)習(xí)的情況下,需要我們自己構(gòu)造一個y。在我上面給出的代碼中,y代表的含義是{0:小費超過賬單的15%,1:小費沒超過賬單的15%}。為了方便可視化,這里只將total_bill一列作為我們的X。
這就是最后繪制出來的邏輯回歸圖像,由于現(xiàn)實中的數(shù)據(jù)不總是理想化的,所以很少出現(xiàn)像之前展示的sigmoid函數(shù)圖像那么的“S”,但也能看出規(guī)律:賬單較小的更有可能給出超過15%的小費,這也符合生活經(jīng)驗。
4.線性回歸和邏輯回歸的區(qū)別和聯(lián)系
- 線性回歸和邏輯回歸都是廣義線性回歸模型的特例
- 線性回歸只能用于回歸問題,邏輯回歸用于分類問題(可由二分類推廣至多分類)
- 線性回歸無聯(lián)系函數(shù)或不起作用,邏輯回歸的聯(lián)系函數(shù)是對數(shù)幾率函數(shù),屬于Sigmoid函數(shù)
- 線性回歸使用最小二乘法作為參數(shù)估計方法,邏輯回歸使用極大似然法作為參數(shù)估計方法
1)線性回歸要求變量服從正態(tài)分布,logistic回歸對變量分布沒有要求。
2)線性回歸要求因變量是連續(xù)性數(shù)值變量,而logistic回歸要求因變量是分類型變量。
3)線性回歸要求自變量和因變量呈線性關(guān)系,而logistic回歸不要求自變量和因變量呈線性關(guān)系
4)logistic回歸是分析因變量取某個值的概率與自變量的關(guān)系,而線性回歸是直接分析因變量與自變量的關(guān)系
總之,
logistic回歸與線性回歸實際上有很多相同之處,最大的區(qū)別就在于他們的因變量不同,其他的基本都差不多,正是因為如此,這兩種回歸可以歸于同一個家族,即廣義線性模型(generalized linear model)。這一家族中的模型形式基本上都差不多,不同的就是因變量不同,如果是連續(xù)的,就是多重線性回歸,如果是二項分布,就是logistic回歸。logistic回歸的因變量可以是二分類的,也可以是多分類的,但是二分類的更為常用,也更加容易解釋。所以實際中最為常用的就是二分類的logistic回歸。
5.最后
ヾ( ̄▽ ̄)最后,揭曉剛開始兩個問題的答案!
1.邏輯回歸的“Logistic”應(yīng)該怎么解釋?
2.為什么邏輯回歸是分類算法?
其實如果有仔細看正文的同學(xué)早就已經(jīng)知道答案啦:
1.Logistic并非邏輯的意思,其語義來自Logarithm:對數(shù)。這更體現(xiàn)了Logistic Regression的本質(zhì)。周志華老師在其書《機器學(xué)習(xí)》中,給出了一個更恰當(dāng)?shù)闹形拿Q:對數(shù)幾率回歸。我覺得這個翻譯比起不搭邊的“邏輯回歸”,或者畫蛇添足的“邏輯斯諦回歸”更靠譜。
2.對數(shù)幾率回歸的“回歸”并非針對可以應(yīng)用的問題,而是來自其父級:廣義線性回歸模型。對數(shù)幾率回歸之所以用于離散的分類而不是連續(xù)的回歸,是因為它將本來連續(xù)的輸出,通過對數(shù)幾率函數(shù),映射到了非線性的{0,1}空間上,所以它可以有效地解決二分類問題(甚至可推廣至多分類)。
https://zhuanlan.zhihu.com/p/39363869
https://www.jianshu.com/p/35f571f0b598
總結(jié)
- 上一篇: 语言信箱怎么设置(语音信箱怎么设置方法)
- 下一篇: 联邦学习 Federated Learn