模型就是針對存在於不一樣變量之間的數學或機率聯繫的一種規範(函數關係、統計關係)。html
機器學習是指建立並使用那些由學習數據而得出的模型。也叫作預測模型或數據挖掘。web
通常來講,機器學習的目標是利用已有的數據來開發能夠用來對新數據預測多種可能結果的模型。好比:算法
預測一封郵件是不是垃圾郵件機器學習
預測一筆信用卡交易是不是欺詐行爲函數
預測哪一種廣告最有可能被購物者點擊學習
選擇特徵須要經驗和專業知識的積累。若是你基於一我的的工做年限來預測薪水,那麼工做年限就是你的特徵(feature)。測試
設想你要創建一個垃圾郵件過濾器來預測一封郵件是不是垃圾郵件。你提取了以下特徵:ui
郵件文本中包含「偉哥」搜索引擎
單字「買」出現了多少次編碼
發件人的域名是什麼
第一個特徵是是否問題,一般編碼爲0或1。第二個特徵是數值。第三個特徵是從一個離散的選擇集中做出的選擇。
特徵的類型限制了咱們所用的模型的類型。樸素貝葉斯分類器適合是與否的二元特徵;迴歸模型要求有數值型的特徵,固然也能夠包含0或1這樣的虛擬編碼變量,如性別;決策樹會涉及數值或屬性數據。
有時,咱們須要設法移除特徵。好比,模型的輸入可能包含不少變量,這時你會用到降維技術來將這些變量縮減到少許重要的維度,從而只使用少數的特徵,或者使用一些技術如正則化技術來對應用過多特徵的模型進行懲罰。
過擬合(overfit)是指在訓練數據上表現良好,但對新數據的泛化能力卻不好的模型。太複雜的模型會致使過擬合。
欠擬合(underfoot)是指在訓練數據上沒有好的表現,這代表你的模型不夠好,須要繼續尋找更好的模型。
通常來講,只有常數項(水平線,0階,1個參數)的模型對訓練數據來講會存在嚴重的欠擬合;而過於複雜的模型(例如階數爲九、10個參數的多項式)精確穿過訓練數據的每一個點,是嚴重過擬合的,若是取到更多的點,這個多項式極可能會偏離不少;擬合良好的模型可以很好地把握平衡,它和訓練集的每一個點都很接近,而且也會和新的數據點很接近。
如何確保咱們的模型不會太複雜?最基本的方法是使用不一樣的數據集來訓練和測試模型,例如三分之二用來訓練模型,三分之一用來衡量模型的表現。
若是一個模型的準確率超過了98%,那麼這個模型是好仍是壞呢?
先別急着回答。假設咱們要預測一封郵件是不是垃圾郵件,那麼會有四種狀況:
垃圾郵件 | 非垃圾郵件 | |
---|---|---|
預測是垃圾郵件 | 真陽性(tp) 是垃圾郵件,咱們作了正確的預測 |
假陽性(fp)-第1類錯誤 不是垃圾郵件,咱們預測錯了 |
預測是非垃圾郵件 | 假陰性(fn)-第2類錯誤 是垃圾郵件,但咱們預測它不是 |
真陰性(tn) 不是垃圾郵件,咱們也預測對了 |
這個矩陣也被稱爲混淆矩陣(confusion matrix)。
現在,大約每1000名嬰兒中有5我的會取名Luke;每人一輩子中患白血病的概念大概是1.4%,即1000我的中會有14我的得白血病。假設兩個因素是獨立的,運行「Luke是白血病患者」測試(即僅當嬰兒起名爲Luke時預測會得白血病),獲得如下的矩陣:
白血病 | 非白血病 | 總計 | |
---|---|---|---|
Luke | 70 | 4930 | 5000 |
非Luke | 13930 | 981070 | 995000 |
總計 | 14000 | 986000 | 1000000 |
那麼正確預測的比例就是accuracy=(tp+tn)/(tp+fp+fn+tn)=0.98114。這是一個很蠢的測試,但準確率高達98%。
查準率(precision)度量模型所作的關於陽性的預測有多準確:
precision=tp/(tp+fp)=0.014
查全率(recall)度量模型所識別的陽性的比例:
recall=tp/(tp+fn)=0.005
若是兩個指標都很低,那就不是一個好的模型。
F1 score是查準率與查全率的調和平均值:
F1 score=2precisionrecall/(precision+recall)
爲了更爲直觀地理解查準率和查全率的概念,摘取維基百科的兩個例子:
假設某個計算機程序在視頻中識別出7只狗,這個視頻實際包含9只狗和一些貓。程序認爲的7只狗中有4只確實是狗,但3只實際上是貓,那麼程序的查準率就是4/7,查全率則是4/9。
假設某個搜索引擎返回了30頁結果,但只有20頁是相關的,還有40頁的相關內容沒有返回。那麼這個搜索引擎的查準率就是20/30=2/3,查全率就是20/60=1/3。查準率反映搜索結果是否有用,查全率反映搜索結果是否完整。
簡單來說,高的查準率意味着算法返回了更多的相關結果而不是不相關結果,高的查全率意味着算法返回了大部分的相關結果。
模型的選擇一般是查準率和查全率之間的權衡。一個模型若是在信心不足的狀況下預測「是」,那它的查準率低,但查全率可能會較高;而若是一個模型在信心十足的狀況下預測「是」,那它的查準率高,但查全率可能會較低。例如,假設有10個風險因素預測一我的患抑鬱症,你具有的風險因素越多,越容易患上抑鬱症。假設進行一系列測試:「至少有一個風險因素預測會得抑鬱症」、「至少有兩個風險因素預測會的抑鬱症」等等。隨着臨界值不斷提升,測試的查準率提升了(由於風險因素越多,越容易患上抑鬱症),但測試的查全率則降低了(由於具有越多風險因素的人會愈來愈少)。選擇合適的臨界值實際上就是作出正確的權衡。
你也能夠把模型選擇看成假陽性和假陰性之間的權衡。預測「是」太多一般會獲得不少假陽性,預測「否」太多一般會得出不少的假陰性。
思考模型選擇問題的另外一個角度是誤差-方差權衡。
這裏有一張圖能夠直觀地理解誤差(有時也稱爲偏倚)和方差之間的區別:
紅色的靶心區域是咱們試圖預測其真值的隨機變量,整個區域表明這個變量的分佈。每次咱們抽取一個樣原本預測這個變量,這些樣本用藍色的點表示。若是藍色的點落在紅色區域,表明預測正確。也就是說,誤差度量的是預測的藍點與真實的紅色區域之間的距離,這是模型的偏差(error);而方差(variance)則是指預測的藍點的疏密程度。
誤差-方差權衡是什麼呢?
要減小模型的誤差或偏差,就要增長特徵,模型的複雜度提升,但它的方差就會變大(預測值的藍點變的稀疏);而要減小模型的方差,移除特徵,下降模型複雜度,誤差又會增大。那麼,就存在一個最優的模型複雜度(optimum model complexity),使得方差和誤差的大小都是能夠接受的。這就是誤差-方差權衡。
再好比:
你有一份兩個維度的數據:某所中學全部學生的身高和體重數據,表現爲橫縱座標軸上的散點。
假設你用一條水平線去擬合這些點,直線上的點表明你的預測值,它的方差爲0,但誤差卻很大,即它並無很好地擬合真實數據點,模型是欠擬合的。
因而你用一個高階的多項式樣條函數(polynomial spline)去擬合數據,但你對擬合優度並不滿意,因而提升階數,模型擬合優度提升。這時,模型的誤差就是在不斷接近0,但方差卻不斷增大。
若是你的模型有高方差,除了移除特徵外,你也能夠獲取更多的數據。基於10個點擬合的模型過擬合問題嚴重,而若是在100個數據點上訓練,就會大大減小過擬合問題。也就是說,在模型複雜度不變的狀況下,數據越多,越難過擬合。
但數據越多並不會對模型的誤差有什麼幫助。
課程:
https://www.coursera.org/lear...
http://work.caltech.edu/telec...
教材:
http://statweb.stanford.edu/~...
《數據科學入門》[美]Joel Grus
https://en.wikipedia.org/wiki...
http://stats.stackexchange.co...
http://scott.fortmann-roe.com...