機器學習常見問題解答
正則化
正則化是針對過擬合而提出的,以為在求解模型最優的是一般優化最小的經驗風險,現在在該經驗風險上加入模型複雜度這一項(正則化項是模型引數向量的範數),並使用一個rate比率來權衡模型複雜度與以往經驗風險的權重,如果模型複雜度越高,結構化的經驗風險會越大,現在的目標就變為了結構經驗風險的最優化,可以防止模型訓練過度複雜,有效的降低過擬合的風險。
奧卡姆剃刀原理,能夠很好的解釋已知資料並且十分簡單才是最好的模型。
過擬合
如果一味的去提高訓練資料的預測能力,所選模型的複雜度往往會很高,這種現象稱為過擬合。所表現的就是模型訓練時候的誤差很小,但在測試的時候誤差很大。
產生的原因
- 因為(特徵)引數太多,會導致我們的模型複雜度上升,容易過擬合
- 權值學習迭代次數足夠多(Overtraining),擬合了訓練資料中的噪聲和訓練樣例中沒有代表性的特徵.
解決方法
- 交叉驗證法
- 減少特徵
- 正則化
- 權值衰減
- 驗證資料
泛化能力
泛化能力是指模型對未知資料的預測能力
什麼是交叉驗證法?
它的基本思想就是將原始資料(dataset)進行分組,一部分做為訓練集來訓練模型,另一部分做為測試集來評價模型。
為什麼用交叉驗證法?
- 交叉驗證用於評估模型的預測效能,尤其是訓練好的模型在新資料上的表現,可以在一定程度上減小過擬合。
- 還可以從有限的資料中獲取儘可能多的有效資訊。
主要有:留出法 (holdout cross validation)(訓練集、驗證集和測試集), k 折交叉驗證(k-fold cross validation)(
還有一種比較特殊的交叉驗證方式,Bootstrapping: 通過自助取樣法,即在含有 m 個樣本的資料集中,每次隨機挑選一個樣本,再放回到資料集中,再隨機挑選一個樣本,這樣有放回地進行抽樣 m 次,組成了新的資料集作為訓練集。
生成模型和判別模型
- 生成模型:由資料學習聯合概率分佈P(X,Y),然後求出條件概率分佈P(Y|X)作為預測的模型,即生成模型:P(Y|X)= P(X,Y)/ P(X)。(樸素貝葉斯)
生成模型可以還原聯合概率分佈p(X,Y),並且有較快的學習收斂速度,還可以用於隱變數的學習 - 判別模型:由資料直接學習決策函式Y=f(X)或者條件概率分佈P(Y|X)作為預測的模型,即判別模型。(k近鄰、決策樹)
直接面對預測,往往準確率較高,直接對資料在各種程度上的抽象,所以可以簡化模型
線性分類器與非線性分類器的區別以及優劣
如果模型是引數的線性函式,並且存線上性分類面,那麼就是線性分類器,否則不是。
常見的線性分類器有:LR,貝葉斯分類,單層感知機、線性迴歸
常見的非線性分類器:決策樹、RF、GBDT、多層感知機
SVM兩種都有(看線性核還是高斯核)
- 線性分類器速度快、程式設計方便,但是可能擬合效果不會很好
- 非線性分類器程式設計複雜,但是效果擬合能力強
特徵比資料量還大時,選擇什麼樣的分類器?
線性分類器,因為維度高的時候,資料一般在維度空間裡面會比較稀疏,很有可能線性可分
對於維度很高的特徵,你是選擇線性還是非線性分類器?
理由同上
對於維度極低的特徵,你是選擇線性還是非線性分類器?
非線性分類器,因為低維空間可能很多特徵都跑到一起了,導致線性不可分
L1和L2正則的區別,如何選擇L1和L2正則
他們都是可以防止過擬合,降低模型複雜度
- L1是在loss function後面加上 模型引數的1範數(也就是|xi|)
L2是在loss function後面加上 模型引數的2範數(也就是sigma(xi^2)),注意L2範數的定義是sqrt(sigma(xi^2)),在正則項上沒有新增sqrt根號是為了更加容易優化
L1 會產生稀疏的特徵
- L2 會產生更多地特徵但是都會接近於0
L1會趨向於產生少量的特徵,而其他的特徵都是0,而L2會選擇更多的特徵,這些特徵都會接近於0。L1在特徵選擇時候非常有用,而L2就只是一種規則化而已。
特徵向量的歸一化方法
- 線性函式轉換,表示式如下:y=(x-MinValue)/(MaxValue-MinValue)
- 對數函式轉換,表示式如下:y=log10 (x)
- 反餘切函式轉換 ,表示式如下:y=arctan(x)*2/PI
- 減去均值,乘以方差:y=(x-means)/ variance
k-means與kNN雖然都是以k打頭,但卻是兩類演算法——kNN為監督學習中的分類演算法,而k-means則是非監督學習中的聚類演算法;二者相同之處:均利用近鄰資訊來標註類別。
聚類是資料探勘中一種非常重要的學習流派,指將未標註的樣本資料中相似的分為同一類,正所謂“物以類聚,人以群分”嘛。k-means是聚類演算法中最為簡單、高效的,核心思想:由使用者指定k個初始質心(initial centroids),以作為聚類的類別(cluster),重複迭代直至演算法收斂。
在k-means演算法中,用質心來表示cluster;且容易證明k-means演算法收斂等同於所有質心不再發生變化。基本的k-means演算法流程如下:
選取k個初始質心(作為初始cluster);
repeat:
對每個樣本點,計算得到距其最近的質心,將其類別標為該質心所對應的cluster;
重新計算k個cluser對應的質心;
until 質心不再發生變化
對於歐式空間的樣本資料,以平方誤差和(sum of the squared error, SSE)作為聚類的目標函式,同時也可以衡量不同聚類結果好壞的指標:(最小化)
SSE=∑i=1k∑x∈Cidist(x,ci)k-means存在缺點:
k-means是區域性最優的,容易受到初始質心的影響;因選擇初始質心不恰當而造成次優的聚類結果(SSE較大)
優化:
為了解決上述存在缺點,在基本k-means的基礎上發展而來二分 (bisecting) k-means,其主要思想:一個大cluster進行分裂後可以得到兩個小的cluster;為了得到k個cluster,可進行k-1次分裂。演算法流程如下:
初始只有一個cluster包含所有樣本點;
repeat:
從待分裂的clusters中選擇一個進行二元分裂,所選的cluster應使得SSE最小;
until 有k個cluster
二分k-means演算法對初始質心的選擇不太敏感,因為初始時只選擇一個質心。kNN演算法
kNN演算法是監督學習中分類方法的一種。所謂監督學習與非監督學習,是指訓練資料是否有標註類別,若有則為監督學習,若否則為非監督學習。監督學習是根據輸入資料(訓練資料)學習一個模型,能對後來的輸入做預測。在監督學習中,輸入變數與輸出變數可以是連續的,也可以是離散的。若輸入變數與輸出變數均為連續變數,則稱為迴歸;輸出變數為有限個離散變數,則稱為分類;輸入變數與輸出變數均為變數序列,則稱為標註
kNN演算法的核心思想非常簡單:在訓練集中選取離輸入的資料點最近的k個鄰居,根據這個k個鄰居中出現次數最多的類別(最大表決規則),作為該資料點的類別。最大表決規則等價於經驗風險最小化
存在問題:
k值得選取對kNN學習模型有著很大的影響。若k值過小,預測結果會對噪音樣本點顯得異常敏感。特別地,當k等於1時,kNN退化成最近鄰演算法,沒有了顯式的學習過程。若k值過大,會有較大的鄰域訓練樣本進行預測,可以減小噪音樣本點的減少;但是距離較遠的訓練樣本點對預測結果會有貢獻,以至於造成預測結果錯誤
SVM(Support Vector Machines)
由簡至繁SVM可分類為三類:線性可分(linear SVM in linearly separable case)的線性SVM、線性不可分的線性SVM、非線性(nonlinear)SVM。
線性可分(linear SVM
線性可分是理想情形,大多數情況下,由於噪聲或特異點等各種原因,訓練樣本是線性不可分的
將距離分離超平面最近的兩個不同類別的樣本點稱為支援向量(support vector)的,構成了兩條平行於分離超平面的長帶,二者之間的距離稱之為margin。顯然,margin更大,則分類正確的確信度更高(與超平面的距離表示分類的確信度,距離越遠則分類正確的確信度越高)。通過計算容易得到:
margin=2∥w∥非線性(nonlinear)SVM
解決非線性分類問題的思路,通過空間變換ϕϕ(一般是低維空間對映到高維空間x→ϕ(x)x→ϕ(x))後實現線性可分
AdaBoost能夠自適應(addaptive)地調整樣本的權值分佈,將分錯的樣本的權重設高、分對的樣本的權重設低;所以被稱為“Adaptive Boosting”。sklearn的AdaBoostClassifier實現了AdaBoost,預設的基分類器是能fit()
帶權值樣本的DecisionTreeClassifier。
整合學習(ensemble learning)通過組合多個基分類器(base classifier)來完成學習任務,頗有點“三個臭皮匠頂個諸葛亮”的意味。基分類器一般採用的是弱可學習(weakly learnable)分類器,通過整合學習,組合成一個強可學習(strongly learnable)分類器。所謂弱可學習,是指學習的正確率僅略優於隨機猜測的多項式學習演算法;強可學習指正確率較高的多項式學習演算法。整合學習的泛化能力一般比單一的基分類器要好,這是因為大部分基分類器都分類錯誤的概率遠低於單一基分類器的。
偏差-方差分解”(bias variance decomposition)是用來解釋機器學習演算法的泛化能力的一種重要工具。對於同一個演算法,在不同訓練集上學得結果可能不同
誤差可以分解為3個部分:bias、variance、noise
bias度量了演算法本身的擬合能力,刻畫模型的準確性;variance度量了資料擾動所造成的影響,刻畫模型的穩定性。為了取得較好的泛化能力,則需要充分擬合數據(bias小),並受資料擾動的影響小(variance小)。但是,bias與variance往往是不可兼得的:
- 當訓練不足時,擬合能力不夠強,資料擾動不足以產生較大的影響,此時bias主導了泛化錯誤率;
- 隨著訓練加深時,擬合能力隨之加強,資料擾動漸漸被學習到,variance主導了泛化錯誤率。
Bagging與Boosting
整合學習需要解決兩個問題:
- 如何調整輸入訓練資料的概率分佈及權值;
- 如何訓練與組合基分類器。
從上述問題的角度出發,整合學習分為兩類流派:Bagging與Boosting。
Bagging(Bootstrap Aggregating)對訓練資料擦用自助取樣(boostrap sampling),即有放回地取樣資料;每一次的取樣資料集訓練出一個基分類器,經過
MM次取樣得到MM個基分類器,然後根據最大表決(majority vote)原則組合基分類器的分類結果。Boosting的思路則是採用重賦權(re-weighting)法迭代地訓練基分類器,即對每一輪的訓練資料樣本賦予一個權重,並且每一輪樣本的權值分佈依賴上一輪的分類結果;基分類器之間採用序列式的線性加權方式進行組合。
從“偏差-方差分解”的角度看,Bagging關注於降低variance,而Boosting則是降低bias;Boosting的基分類器是強相關的,並不能顯著降低variance。Bagging與Boosting有分屬於自己流派的兩大殺器:Random Forests(RF)和Gradient Boosting Decision Tree(GBDT)。本文所要講的AdaBoost屬於Boosting流派。樸素貝葉斯
樸素貝葉斯(Naïve Bayes)屬於監督學習的生成模型,實現簡單,沒有迭代,學習效率高,在大樣本量下會有較好的表現。但因為假設太強——假設特徵條件獨立,在輸入向量的特徵條件有關聯的場景下並不適用。樸素貝葉斯分類器的主要思路:通過聯合概率P(x,y)=P(x|y)P(y)P(x,y)=P(x|y)P(y)建模,運用貝葉斯定理求解後驗概率P(y|x)P(y|x);將後驗概率最大者對應的的類別作為預測類別。