天天看點

2023雙非計算機碩士應戰秋招算法崗之機器學習基礎知識随機森林回歸模型 (屬于集合算法的一種)max_depth:決策樹最大深度10n_estimators:建構1000棵決策樹,訓練模型min_samples_split: 子表中最小樣本數 若小于這個數字,則不再繼續向下拆分

目錄

特征工程 2

缺失值處理 15

評價名額 33

邏輯回歸 37

決策樹 40

随機森林 46

SVM 49

Knn 56

Kmeans 59

PCA 66

樸素貝葉斯 68

常見分類算法的優缺點 72

特征工程

1.什麼是特征工程

有這麼一句話在業界廣泛流傳,資料和特征決定了機器學習的上限,而模型和算法隻是逼近這個上限而已。那特征工程到底是什麼呢?顧名思義,其本質是一項工程活動,目的是最大限度地從原始資料中提取特征以供算法和模型使用。

特征工程主要分為三部分:

1.資料預處理 對應的sklearn包:sklearn-Processing data

2.特征選擇 對應的sklearn包: sklearn-Feature selection

3.降維 對應的sklearn包: sklearn-Dimensionality reduction

本文中使用sklearn中的IRIS(鸢尾花)資料集來對特征處理功能進行說明,

2. 資料預處理

通過特征提取,我們能得到未經處理的特征,這時的特征可能有以下問題:

• 不屬于同一量綱:即特征的規格不一樣,不能夠放在一起比較。無量綱化可以解決這一問題。

• 資訊備援:對于某些定量特征,其包含的有效資訊為區間劃分,例如學習成績,假若隻關心“及格”或不“及格”,那麼需要将定量的考分,轉換成“1”和“0”表示及格和未及格。二值化可以解決這一問題。

• 定性特征不能直接使用:通常使用啞編碼的方式将定性特征轉換為定量特征,假設有N種定性值,則将這一個特征擴充為N種特征,當原始特征值為第i種定性值時,第i個擴充特征指派為1,其他擴充特征指派為0。啞編碼的方式相比直接指定的方式,不用增加調參的工作,對于線性模型來說,使用啞編碼後的特征可達到非線性的效果。

• 存在缺失值:填充缺失值。

• 資訊使用率低:不同的機器學習算法和模型對資料中資訊的利用是不同的,之前提到線上性模型中,使用對定性特征啞編碼可以達到非線性的效果。類似地,對定量變量多項式化,或者進行其他的資料變換,都能達到非線性的效果。

我們使用sklearn中的preproccessing庫來進行資料預處理。

2.1 無量綱化

無量綱化使不同規格的資料轉換到同一規格

2.1.1 标準化(也叫Z-score standardization)(對列向量處理)

将服從正态分布的特征值轉換成标準正态分布,标準化需要計算特征的均值和标準差,公式表達為:

2.1.2 區間縮放(對列向量處理)

區間縮放法的思路有多種,常見的一種為利用兩個最值進行縮放,公式表達為:

使用preproccessing庫的MinMaxScaler類對資料進行區間縮放的代碼如下:

在什麼時候使用标準化比較好,什麼時候區間縮放比較好呢?

  1. 在後續的分類、聚類算法中,需要使用距離來度量相似性的時候、或者使用PCA、LDA這些需要用到協方差分析進行降維的時候,同時資料分布可以近似為正太分布,标準化方法(Z-score

    standardization)表現更好。

  2. 在不涉及距離度量、協方差計算、資料不符合正太分布的時候,可以使用區間縮放法或其他歸一化方法。比如圖像進行中,将RGB圖像轉換為灰階圖像後将其值限定在[0

    255]的範圍。

    2.1.3 歸一化(對行向量處理)

    歸一化目的在于樣本向量在點乘運算或其他核函數計算相似性時,擁有統一的标準,也就是說都轉化為“機關向量”。規則為l2的歸一化公式如下:

使用preproccessing庫的Normalizer類對資料進行歸一化的代碼如下:

2.2 對定量特征二值化(對列向量處理)

定性與定量差別

定性:部落客很胖,部落客很瘦

定量:部落客有80kg,部落客有60kg

一般定性都會有相關的描述詞,定量的描述都是可以用數字來量化處理

定量特征二值化的核心在于設定一個門檻值,大于門檻值的指派為1,小于等于門檻值的指派為0,公式表達如下:

2.3 對定性特征啞編碼(對列向量處理)

因為有些特征是用文字分類表達的,或者說将這些類轉化為數字,但是數字與數字之間是沒有大小關系的,純粹的分類标記,這時候就需要用啞編碼對其進行編碼。IRIS資料集的特征皆為定量特征,使用其目标值進行啞編碼(實際上是不需要的)。

2.4 缺失值計算(對列向量處理)

由于IRIS資料集沒有缺失值,故對資料集新增一個樣本,4個特征均指派為NaN,表示資料缺失。

2.5 資料變換

2.5.1 多項式變換(對行向量處理)

常見的資料變換有基于多項式的、基于指數函數的、基于對數函數的。4個特征,度為2的多項式轉換公式如下:

1

2.5.1 自定義變換

基于單變元函數的資料變換可以使用一個統一的方式完成,

總結

  1. 特征選擇

    當資料預處理完成後,我們需要選擇有意義的特征輸入機器學習的算法和模型進行訓練。通常來說,從兩個方面考慮來選擇特征:

    • 特征是否發散:如果一個特征不發散,例如方差接近于0,也就是說樣本在這個特征上基本上沒有差異,這個特征對于樣本的區分并沒有什麼用。

    • 特征與目标的相關性:這點比較顯見,與目标相關性高的特征,應當優選選擇。除方差法外,本文介紹的其他方法均從相關性考慮。

    根據特征選擇的形式又可以将特征選擇方法分為3種:

    • Filter:過濾法,不用考慮後續學習器,按照發散性或者相關性對各個特征進行評分,設定門檻值或者待選擇門檻值的個數,選擇特征。

    • Wrapper:包裝法,需考慮後續學習器,根據目标函數(通常是預測效果評分),每次選擇若幹特征,或者排除若幹特征。

    • Embedded:嵌入法,是Filter與Wrapper方法的結合。先使用某些機器學習的算法和模型進行訓練,得到各個特征的權值系數,根據系數從大到小選擇特征。

    我們使用sklearn中的feature_selection庫來進行特征選擇。

    3.1 Filter

    先進行特征選擇,然後去訓練學習器,是以特征選擇的過程與學習器無關相當于先對特征進行過濾操作,然後用特征子集來訓練分類器。

    主要思想:對每一維特征“打分”,即給每一維的特征賦予權重,這樣的權重就代表着該特征的重要性,然後依據權重排序。

    主要方法:

    Chi-squared test(卡方檢驗)

    Information gain(資訊增益)

    Correlation coefficient scores(相關系數)

    優點:運作速度快,是一種非常流行的特征選擇方法。

    缺點:無法提供回報,特征選擇的标準/規範的制定是在特征搜尋算法中完成,學習算法無法向特征搜尋算法傳遞對特征的需求。另外,可能處理某個特征時由于任意原因表示該特征不重要,但是該特征與其他特征結合起來則可能變得很重要。

    3.1.1 方差選擇法

    使用方差選擇法,先要計算各個特征的方差,然後根據門檻值,選擇方差大于門檻值的特征。

    3.1.2 卡方檢驗

    卡方檢驗是一種用途很廣的計數資料的假設檢驗方法,由卡爾•皮爾遜提出。卡方值描述兩個事件的獨立性或者描述實際觀察值與期望值的偏離程度。卡方值越大,表名實際觀察值與期望值偏離越大,也說明兩個事件的互相獨立性越弱。

    檢驗特征對标簽的相關性,選擇其中K個與标簽最相關的特征。

    隻适用于分類問題中離散型特征篩選,不能用于分類問題中連續型特征的篩選,也不能用于回歸問題的特征篩選。

    3.1.3 Pearson相關系數(Pearson Correlation)

    皮爾森相關系數是一種最簡單的,能幫助了解特征和響應變量之間關系的方法,該方法衡量的是變量之間的線性相關性。

協方差是度量各個次元偏離其均值的程度,協方差的值為正值時說明兩者是正相關,否則是負相關的。結果的取值區間為[-1,1],-1表示完全的負相關,+1表示完全的正相關,0表示沒有線性相關,絕對值表示相關性的強度。

标準差也稱均方差,是方差的算術平方根,能反映一個資料集的離散程度。

3.2 Wrapper

3.2.1 遞歸特征消除法

遞歸消除特征法使用一個基模型來進行多輪訓練,每輪訓練後,消除若幹權值系數的特征,再基于新的特征集進行下一輪訓練。

3.3 Embedded

3.3.1 基于懲罰項的特征選擇法

使用帶懲罰項的基模型,除了篩選出特征外,同時也進行了降維。

3.3.2 基于樹模型的特征選擇法

樹模型中GBDT可用來作為基模型進行特征選擇,

總結

  1. 降維

    當特征選擇完成後,可以直接訓練模型了,但是可能由于特征矩陣過大,導緻計算量大,訓練時間長的問題,是以降低特征矩陣次元也是必不可少的。常見的降維方法除了以上提到的基于L1懲罰項的模型以外,另外還有主成分分析法(PCA)和線性判别分析(LDA),線性判别分析本身也是一個分類模型。PCA和LDA有很多的相似點,其本質是要将原始的樣本映射到次元更低的樣本空間中,但是PCA和LDA的映射目标不一樣:PCA是為了讓映射後的樣本具有最大的發散性;而LDA是為了讓映射後的樣本有最好的分類性能。是以說PCA是一種無監督的降維方法,而LDA是一種有監督的降維方法。

其他特征選擇的方法

5.去掉取值變化小的特征(Removing features with low variance)

該方法一般用在特征選擇前作為一個預處理的工作,即先去掉取值變化小的特征,然後再使用其他特征選擇方法選擇特征。

考察某個特征下,樣本的方內插補點,可以認為給定一個門檻值,抛棄哪些小于某個門檻值的特征。

1.實作原理

• 離散型變量:假設某特征的特征值隻有0和1,并且在所有輸入樣本中,95%的執行個體的該特征取值都是1,那就可以認為這個特征作用不大。如果100%都是1,那這個特征就沒意義了。

• 連續型變量:需要将連續變量離散化之後才能用。

而且實際當中,一般不太會有95%以上都取某個值的特征存在,是以這種方法雖然簡單但是不太好用。可以把它作為特征選擇的預處理,先去掉那些取值變化小的特征,然後再從接下來提到的的特征選擇方法中選擇合适的進行進一步的特征選擇。

6.随機森林選擇

随機森林具有準确率高、魯棒性好、易于使用等優點,這使得它成為了目前最流行的機器學習算法之一。随機森林提供了兩種特征選擇的方法:mean decrease impurity和mean decrease accuracy。

6.1.平均不純度減少(mean decrease impurity)

1)原理介紹

• 随機森林由多顆CART決策樹構成,決策樹中的每一個節點都是關于某個特征的條件,為的是将資料集按照不同的響應變量一分為二。

• CART利用不純度可以确定節點(最優條件),對于分類問題,通常采用基尼不純度,對于回歸問題,通常采用的是方差或者最小二乘拟合。

• 當訓練決策樹的時候,可以計算出每個特征減少了多少樹的不純度。對于一個決策樹森林來說,可以算出每個特征平均減少了多少不純度,并把它平均減少的不純度作為特征選擇的标準。

• 随機森林基于不純度的排序結果非常鮮明,在得分最高的幾個特征之後的特征,得分急劇的下降。

6.2.平均精确度減少(mean decrease accuracy)

1)原理介紹

  1. 通過直接度量每個特征對模型精确率的影響來進行特征選擇。
  2. 主要思路是打亂每個特征的特征值順序,并且度量順序變動對模型的精确率的影響。

    • 對于不重要的變量來說,打亂順序對模型的精确率影響不會太大。

    • 對于重要的變量來說,打亂順序就會降低模型的精确率。

    7.頂層特征選擇

    頂層特征選擇發建立在基于模型的特征選擇方法基礎之上的,例如線性回歸和SVM等,在不同的子集上建立模型,然後彙總最終确定特征得分。

    7.1.穩定性選擇(Stability selection)

    穩定性選擇常常是一種既能夠有助于了解資料又能夠挑出優質特征的這種選擇。

    1)原理介紹

    • 穩定性選擇是一種基于二次抽樣和選擇算法相結合較新的方法,選擇算法可以是回歸、SVM或其他類似的方法。

    • 它的主要思想是在不同的資料子集和特征子集上運作特征選擇算法,不斷的重複,最終彙總特征選擇結果。比如可以統計某個特征被認為是重要特征的頻率(被選為重要特征的次數除以它所在的子集被測試的次數)。

    • 理想情況下,重要特征的得分會接近100%。稍微弱一點的特征得分會是非0的數,而最無用的特征得分将會接近于0。

    7.2.遞歸特征消除(Recursive feature elimination,RFE)

    1)原理介紹

    • 遞歸特征消除的主要思想是反複的構模組化型(如SVM或者回歸模型)然後選出最好的(或者最差的)的特征(可以根據系數來選),把選出來的特征放到一遍,然後在剩餘的特征上重複這個過程,直到所有特征都周遊了。

    • 這個過程中特征被消除的次序就是特征的排序。是以,這是一種尋找最優特征子集的貪心算法。

    • RFE的穩定性很大程度上取決于在疊代的時候底層用哪種模型。

    假如RFE采用的普通的回歸,沒有經過正則化的回歸是不穩定的,那麼RFE就是不穩定的。

    假如RFE采用的是Ridge,而用Ridge正則化的回歸是穩定的,那麼RFE就是穩定的。

    8.線性模型與正則化

    8.1.主要思想

    當所有特征在相同尺度上時,最重要的特征應該在模型中具有最高系數,而與輸出變量不相關的特征應該具有接近零的系數值。即使使用簡單的線性回歸模型,當資料不是很嘈雜(或者有大量資料與特征數量相比)并且特征(相對)獨立時,這種方法也能很好地工作。

    8.2.正則化模型

    正則化就是把額外的限制或者懲罰項加到已有模型(損失函數)上,以防止過拟合并提高泛化能力。損失函數由原來的E(X,Y)變為E(X,Y)+alpha||w||,w是模型系數組成的向量(有些地方也叫參數parameter,coefficients),||·||一般是L1或者L2範數,alpha是一個可調的參數,控制着正則化的強度。當用線上性模型上時,L1正則化和L2正則化也稱為Lasso和Ridge。

    1)L1正則化/Lasso regression

    L1正則化将系數w的l1範數作為懲罰項加到損失函數上,由于正則項非零,這就迫使那些弱的特征所對應的系數變成0。是以L1正則化往往會使學到的模型很稀疏(系數w經常為0),這個特性使得L1正則化成為一種很好的特征選擇方法。

    Lasso能夠挑出一些優質特征,同時讓其他特征的系數趨于0。當如需要減少特征數的時候它很有用,但是對于資料了解來說不是很好用。

    2)L2正則化/Ridge regression

    L2正則化将系數向量的L2範數添加到了損失函數中。

    • 由于L2懲罰項中系數是二次方的,這使得L2和L1有着諸多差異,最明顯的一點就是,L2正則化會讓系數的取值變得平均。

    • 對于關聯特征,這意味着他們能夠獲得更相近的對應系數。

    • Ridge将回歸系數均勻的分攤到各個關聯變量上。

    L2正則化對于特征選擇來說一種穩定的模型,不像L1正則化那樣,系數會因為細微的資料變化而波動。是以L2正則化和L1正則化提供的價值是不同的,L2正則化對于特征了解來說更加有用:表示能力強的特征對應的系數是非零。

    許多特征具有系數0。L1正則化回歸的穩定性與非正則化線性模型類似,這意味着當資料中存在相關特征時,系數(以及特征等級)即使在小資料變化時也會發生顯着變化。

    3)L2正則化線性模型

    從示例中可以看出,線性回歸的系數變化很大,具體取決于生成的資料。然而,對于L2正則化模型,系數非常穩定并且密切反映資料的生成方式(所有系數接近1)。

    (1) 單變量特征選擇可以用于了解資料、資料的結構、特點,也可以用于排除不相關特征,但是它不能發現備援特征。

    (2) 正則化的線性模型可用于特征了解和特征選擇。相比起L1正則化,L2正則化的表現更加穩定,L2正則化對于資料的了解來說很合适。由于響應變量和特征之間往往是非線性關系,可以采用basis expansion的方式将特征轉換到一個更加合适的空間當中,在此基礎上再考慮運用簡單的線性模型。

    (3) 随機森林是一種非常流行的特征選擇方法,它易于使用。但它有兩個主要問題:

    • 重要的特征有可能得分很低(關聯特征問題)

    • 這種方法對特征變量類别多的特征越有利(偏向問題)

    (4)特征選擇在很多機器學習和資料挖掘場景中都是非常有用的。在使用的時候要弄清楚自己的目标是什麼,然後找到哪種方法适用于自己的任務。

    • 當選擇最優特征以提升模型性能的時候,可以采用交叉驗證的方法來驗證某種方法是否比其他方法要好。

    • 當用特征選擇的方法來了解資料的時候要留心,特征選擇模型的穩定性非常重要,穩定性差的模型很容易就會導緻錯誤的結論。

    • 對資料進行二次采樣然後在子集上運作特征選擇算法能夠有所幫助,如果在各個子集上的結果是一緻的,那就可以說在這個資料集上得出來的結論是可信的,可以用這種特征選擇模型的結果來了解資料。

    (5)關于訓練模型的特征篩選,建議的實施流程 :

  3. 資料預處理後,先排除取值變化很小的特征。如果機器資源充足,并且希望盡量保留所有資訊,可以把門檻值設定得比較高,或者隻過濾離散型特征隻有一個取值的特征。
  4. 如果資料量過大,計算資源不足(記憶體不足以使用所有資料進行訓練、計算速度過慢),可以使用單特征選擇法排除部分特征。這些被排除的特征并不一定完全被排除不再使用,在後續的特征構造時也可以作為原始特征使用。
  5. 如果此時特征量依然非常大,或者是如果特征比較稀疏時,可以使用PCA(主成分分析)和LDA(線性判别)等方法進行特征降維。
  6. 經過樣本采樣和特征預篩選後,訓練樣本可以用于訓練模型。但是可能由于特征數量比較大而導緻訓練速度慢,或者想進一步篩選有效特征或排除無效特征(或噪音),我們可以使用正則化線性模型選擇法、随機森林選擇法或者頂層特征選擇法進一步進行特征篩選。

    最後,特征篩選是為了了解資料或更好地訓練模型,我們應該根據自己的目标來選擇适合的方法。為了更好/更容易地訓練模型而進行的特征篩選,如果計算資源充足,應盡量避免過度篩選特征,因為特征篩選很容易丢失有用的資訊。如果隻是為了減少無效特征的影響,為了避免過拟合,可以選擇随機森林和XGBoost等內建模型來避免對特征過拟合。

缺失值處理

資料值缺失是資料分析中經常遇到的問題之一。當缺失比例很小時,可直接對缺失記錄進行舍棄或進行手工處理。但在實際資料中,往往缺失資料占有相當的比重。這時如果手工處理非常低效,如果舍棄缺失記錄,則會丢失大量資訊,使不完全觀測資料與完全觀測資料間産生系統差異,對這樣的資料進行分析,很可能會得出錯誤的結論。

造成資料缺失的原因

  1. 資訊被遺漏,可能是因為輸入時認為不重要、忘記填寫了或對資料了解錯誤而遺漏,也可能是由于資料采集裝置的故障、存儲媒體的故障、傳輸媒體的故障、一些人為因素等原因而丢失。
  2. 資訊暫時無法擷取。例如在醫療資料庫中,并非所有病人的所有臨床檢驗結果都能在給定的時間内得到,就緻使一部分屬性值空缺出來
  3. 擷取這些資訊的代價太大。

    對缺失值的處理要具體問題具體分析,屬性缺失有時并不意味着資料缺失,缺失本身是包含資訊的,是以需要根據不同應用場景下缺失值可能包含的資訊進行合理填充。

    缺失的類型

    将資料集中不含缺失值的變量稱為完全變量,資料集中含有缺失值的變量稱為不完全變量。從缺失的分布來将缺失可以分為完全随機缺失,随機缺失和完全非随機缺失。

  4. 完全随機缺失(missing completely at

    random,MCAR):指的是資料的缺失是完全随機的,不依賴于任何不完全變量或完全變量,不影響樣本的無偏性。如家庭位址缺失。

  5. 随機缺失(missing at

    random,MAR):指的是資料的缺失不是完全随機的,即該類資料的缺失依賴于其他完全變量。例如财務資料缺失情況與企業的大小有關。

  6. 非随機缺失(missing not at

    random,MNAR):指的是資料的缺失與不完全變量自身的取值有關。如高收入人群的不原意提供家庭收入。

    随機缺失可以通過已知變量對缺失值進行估計;而非随機缺失還沒有很好的解決辦法。

    缺失值處理的方法

    缺失值處理主要有三種主要方法:删除元組、資料補齊、不處理

    删除元組

    存在遺漏資訊屬性值的對象(元組,記錄)删除,進而得到一個完備的資訊表,在對象有多個屬性缺失值、被删除的含缺失值的對象與初始資料集的資料量相比非常小的情況下非常有效

    優點:快速,不需要任何先驗知識;

    缺點:它以減少曆史資料來換取資訊的完備,會丢棄大量隐藏在這些對象中的資訊

    資料補齊

    這類方法是用一定的值去填充空值,進而使資訊表完備化。

    常用的方法如下:

    人工填寫(filling manually)

    由于最了解資料的還是使用者自己,是以這個方法産生資料偏離最小,可能是填充效果最好的一種。然而一般來說,該方法很費時,當資料規模很大、空值很多的時候,該方法是不可行的。

  7. 特殊值填充(Treating Missing Attribute values as Special values)
  8. 将空值作為一種特殊的屬性值來處理,它不同于其他的任何屬性值。如所有的空值都用“unknown”填充。這樣将形成另一個有趣的概念,可能導緻嚴重的資料偏離,一般不推薦使用。
  9. 平均值填充(Mean/Mode Completer)

    将初始資料集中的屬性分為數值屬性和非數值屬性來分别進行處理。

    如果空值是數值型的,就根據該屬性在其他所有對象的取值的平均值來填充該缺失的屬性值;

    如果空值是非數值型的,就根據統計學中的衆數原理,用該屬性在其他所有對象的取值次數最多的值(即出現頻率最高的值)來補齊該缺失的屬性值。

    條件平均值填充法(Conditional Mean Completer)

    在該方法中,用于求平均的值并不是從資料集的所有對象中取,而是從與該對象具有相同決策屬性值的對象中取得。

  10. 熱卡填充(Hot deck imputation,或就近補齊)

    對于一個包含空值的對象,熱卡填充法在完整資料中找到一個與它最相似的對象,然後用這個相似對象的值來進行填充。不同的問題可能會選用不同的标準來對相似進行判定。該方法概念上很簡單,且利用了資料間的關系來進行空值估計。這個方法的缺點在于難以定義相似标準,主觀因素較多。

  11. K最近距離鄰法(K-means clustering)

    先根據歐式距離或相關分析來确定距離具有缺失資料樣本最近的K個樣本,将這K個值權重平均來估計該樣本的缺失資料。

  12. 回歸(Regression)

    基于完整的資料集,建立回歸方程。對于包含空值的對象,将已知屬性值代入方程來估計未知屬性值,以此估計值來進行填充。當變量不是線性相關時會導緻有偏差的估計。

  13. 期望值最大化方法(Expectation maximization,EM)

    EM算法是一種在不完全資料情況下計算極大似然估計或者後驗分布的疊代算法。在每一疊代循環過程中交替執行兩個步驟:E步(Excepctaion step,期望步),在給定完全資料和前一次疊代所得到的參數估計的情況下計算完全資料對應的對數似然函數的條件期望;M步(Maximzation step,極大化步),用極大化對數似然函數以确定參數的值,并用于下步的疊代。算法在E步和M步之間不斷疊代直至收斂,即兩次疊代之間的參數變化小于一個預先給定的門檻值時結束。該方法可能會陷入局部極值,收斂速度也不是很快,并且計算很複雜。

  14. C4.5方法

    通過尋找屬性間的關系來對遺失值填充。它尋找之間具有最大相關性的兩個屬性,其中沒有遺失值的一個稱為代理屬性,另一個稱為原始屬性,用代理屬性決定原始屬性中的遺失值。這種基于規則歸納的方法隻能處理基數較小的名詞型屬性

  15. 不處理

    補齊處理隻是将未知值補以我們的主觀估計值,不一定完全符合客觀事實,在對不完備資訊進行補齊處理的同時,我們或多或少地改變了原始的資訊系統。而且,對空值不正确的填充往往将新的噪聲引入資料中,使挖掘任務産生錯誤的結果。是以,在許多情況下,我們還是希望在保持原始資訊不發生變化的前提下對資訊系統進行處理。

    主要有以下幾種方法:

    • 貝葉斯網絡

    • 人工神經網絡

    • 把變量映射到高維空間

    比如性别,有男、女、缺失三種情況,則映射成3個變量:是否男、是否女、是否缺失。連續型變量也可以這樣處理。比如Google、百度的CTR預估模型,預處理時會把所有變量都這樣處理,達到幾億維。這樣做的好處是完整保留了原始資料的全部資訊、不用考慮缺失值、不用考慮線性不可分之類的問題。缺點是計算量大大提升

    總結

    總的來說,處理缺失值的主要方法如下:

    使用可用特征的均值來填補缺失值

    使用特殊值來填補缺失值

    忽略有缺失值的樣本

    使用相似樣本的均值填補缺失值

    使用另外的機器學習算法預測缺失值

8.給你一個資料集,這個資料集有缺失值,且這些缺失值分布在離中值有1個标準偏差的範圍内。百分之多少的資料不會受到影響?為什麼?

這個問題給了我們足夠的提示來開始思考!由于資料分布在中位數附近,讓我們先假設這是一個正态分布。

我們知道,在一個正态分布中,約有68%的資料位于跟平均數(或衆數、中位數)1個标準差範圍内的,那樣剩下的約32%的資料是不受影響的。

是以,約有32%的資料将不受到缺失值的影響。

9.給你一個缺失值多于30%的資料集?比方說,在50個變量中,有8個變量的缺失值都多于30%。你對此如何處理

• 1.把缺失值分成單獨的一類,這些缺失值說不定會包含一些趨勢資訊。

• 2.我們可以毫無顧忌地删除它們。

• 3.或者,我們可以用目标變量來檢查它們的分布,如果發現任何模式,我們将保留那些缺失值并給它們一個新的分類,同時删除其他缺失值。

1、L1與L2正則化

他們都是可以防止過拟合,降低模型複雜度。

L1會趨向于産生少量的特征,而其他的特征都是0;L2會選擇更多的特征,這些特征都會接近于0。L1在特征選擇時非常有用,L2就隻是一種規則化而已。

簡單總結一下就是:

L1範數: 為x向量各個元素絕對值之和。

L2範數: 為x向量各個元素平方和的1/2次方,L2範數又稱Euclidean範數或者Frobenius範數 。

Lp範數: 為x向量各個元素絕對值p次方和的1/p次方。

在支援向量機學習過程中,L1範數實際是一種對于成本函數求解最優的過程,是以,L1範數正則化通過向成本函數中添加L1範數,使得學習得到的結果滿足稀疏化,進而友善人類提取特征,即L1範數可以使權值稀疏,友善特征提取。

L2範數可以防止過拟合,提升模型的泛化能力。

L1和L2的差别,為什麼一個讓絕對值最小,一個讓平方最小,會有那麼大的差别呢?看導數一個是1一個是w便知, 在靠進零附近, L1以勻速下降到零, 而L2則完全停下來了. 這說明L1是将不重要的特征(或者說, 重要性不在一個數量級上)盡快剔除, L2則是把特征貢獻盡量壓縮最小但不至于為零. 兩者一起作用, 就是把重要性在一個數量級(重要性最高的)的那些特征一起平等共事(簡言之, 不養閑人也不要超人)。

2、歸一化

能不歸一化最好不歸一化,之是以進行資料歸一化是因為各次元的量綱不相同。而且需要看情況進行歸一化。

歸一化就是要把你需要處理的資料經過處理後限制在你需要的一定範圍内。

  1. 歸一化後加快了梯度下降求最優解的速度。等高線變得顯得圓滑,能較快的收斂。不做歸一化,梯度下降過程容易走之字,很難收斂甚至不能收斂;
  2. 把有量綱表達式變為無量綱表達式,

    有可能提高精度。一些分類器需要計算樣本之間的距離,如果一個特征值域範圍非常大,那麼距離計算就主要取決于這個特征,而實際情況可能是值域範圍小的特征更重要。

    3、特征向量的歸一化方法有哪些?

    線性函數轉換,表達式如下:y=(x-MinValue)/(MaxValue-MinValue)

    對數函數轉換,表達式如下:y=log10 (x)

    反餘切函數轉換 ,表達式如下:y=arctan(x)*2/PI

    減去均值,除以方差:y=(x-means)/ variance

    4、怎麼解釋置信區間?

    置信區間屬于頻率學派的範疇。真值要麼在,要麼不在。比如,95%置信區間,并不是真值在這個區間内的機率是95%,而是100次随機抽樣中如果95次包含了參數真值,那麼置信度為95%。

    5、哪些機器學習算法不需要做歸一化處理?

    機率模型不需要歸一化,因為它們不關心變量的值,而是關心變量的分布和變量之間的條件機率,如決策樹、随機森林。而像adaboost、gbdt、xgboost、svm、lr、KNN、KMeans之類的最優化問題就需要歸一化。

    6、标準化與歸一化的差別?

    标準化是依照特征矩陣的列處理資料,将樣本的特征值轉換到同一量綱下;歸一化是依照特征矩陣的行處理資料,其目的在于樣本向量在點乘運算或其他核函數計算相似性時,擁有統一的标準,也就是說都轉化為“機關向量”。

    7、為什麼越小的參數說明模型越簡單?

    過拟合的,拟合會經過曲面的每個點,也就是說在較小的區間裡面可能會有較大的曲率,這裡的導數就是很大,線性模型裡面的權值就是導數,是以越小的參數說明模型越簡單。

    8、過拟合和欠拟合産生的原因有哪些?

  3. 樣本資料的問題

    a 樣本數量太少

    b 抽樣方法錯誤,抽出的樣本資料不能足夠代表業務場景。比如樣本符合正态分布,卻按均分分布抽樣,或者樣本資料不能代表整體資料的分布

    c 樣本裡的噪音資料幹擾過大

  4. 模型問題

    a 模型複雜度高 、參數太多

    b 特征選擇/特征降維

    c 權值學習疊代次數足夠多(Overtraining),拟合了訓練資料中的噪聲和訓練樣例中沒有代表性的特征

    欠拟合(underfiting / high bias)

    訓練誤差和驗證誤差都很大,這種情況稱為欠拟合。出現欠拟合的原因是模型尚未學習到資料的真實結構。是以,模拟在訓練集和驗證集上的性能都很差。

    解決辦法

    • 1 做特征工程,添加跟多的特征項。如果欠拟合是由于特征項不夠,沒有足夠的資訊支援模型做判斷。

    • 2

    增加模型複雜度。如果模型太簡單,不能夠應對複雜的任務。可以使用更複雜的模型,減小正則化系數。比如說可以使用SVM的核函數,增加了模型複雜度,把低維不可分的資料映射到高維空間,就可以線性可分,減小欠拟合。還可以使用一些內建學習方法。

    • 3 內建學習方法boosting(如GBDT)能有效解決high bias

    9、解決過拟合的方法有哪些?

    過拟合是泛化的反面,好比鄉下快活的劉外婆進了大觀園會各種不适應,但受過良好教育的林黛玉進賈府就不會大驚小怪。實際訓練中, 降低過拟合的辦法一般如下:

  5. 樣本資料方面

    a 增加樣本數量,對樣本進行降維,添加驗證資料

    b 抽樣方法要符合業務場景

    c 清洗噪聲資料

  6. 模型或訓練問題

    a 控制模型複雜度,優先選擇簡單的模型,或者用模型融合技術。

    b 利用先驗知識,添加正則項。L1正則更加容易産生稀疏解、L2正則傾向于讓參數w趨向于0.

    c 交叉驗證

    d 不要過度訓練,最優化求解時,收斂之前停止疊代

    正則化(Regularization)

    L2正則化:目标函數中增加所有權重w參數的平方之和, 逼迫所有w盡可能趨向零但不為零. 因為過拟合的時候, 拟合函數需要顧忌每一個點, 最終形成的拟合函數波動很大, 在某些很小的區間裡, 函數值的變化很劇烈, 也就是某些w非常大. 為此, L2正則化的加入就懲罰了權重變大的趨勢.

    L1正則化:目标函數中增加所有權重w參數的絕對值之和, 逼迫更多w為零(也就是變稀疏. L2因為其導數也趨0, 奔向零的速度不如L1給力了). 大家對稀疏規則化趨之若鹜的一個關鍵原因在于它能實作特征的自動選擇。一般來說,xi的大部分元素(也就是特征)都是和最終的輸出yi沒有關系或者不提供任何資訊的,在最小化目标函數的時候考慮xi這些額外的特征,雖然可以獲得更小的訓練誤差,但在預測新的樣本時,這些沒用的特征權重反而會被考慮,進而幹擾了對正确yi的預測。稀疏規則化算子的引入就是為了完成特征自動選擇的光榮使命,它會學習地去掉這些無用的特征,也就是把這些特征對應的權重置為0。

    提前終止(early stopping)

    理論上可能的局部極小值數量随參數的數量呈指數增長, 到達某個精确的最小值是不良泛化的一個來源. 實踐表明, 追求細粒度極小值具有較高的泛化誤差。這是直覺的,因為我們通常會希望我們的誤差函數是平滑的, 精确的最小值處所見相應誤差曲面具有高度不規則性, 而我們的泛化要求減少精确度去獲得平滑最小值, 是以很多訓練方法都提出了提前終止政策. 典型的方法是根據交叉叉驗證提前終止: 若每次訓練前, 将訓練資料劃分為若幹份, 取一份為測試集, 其他為訓練集, 每次訓練完立即拿此次選中的測試集自測. 因為每份都有一次機會當測試集, 是以此方法稱之為交叉驗證. 交叉驗證的錯誤率最小時可以認為泛化性能最好, 這時候訓練錯誤率雖然還在繼續下降, 但也得終止繼續訓練了.

    10、機器學習與資料挖掘的差別

    答:機器學習是指在沒有明确的程式指令的情況下,給予計算機學習能力,使它能自主的學習、設計和擴充相關算法。資料挖掘則是一種從資料裡面提取知識或者未知的、人們感興趣的規則。在這個過程中應用了機器學習算法。

    11、有監督學習和無監督學習的差別

    • 有監督學習:對具有标記的訓練樣本進行學習,以盡可能對訓練樣本集外的資料進行分類預測。如LR,SVM,BP,RF,GBDT;

    • 無監督學習:對未标記的樣本進行訓練學習,發現這些樣本中的結構知識。如聚類、降維。

    12、什麼是生成模型和判别模型

    • 生成模型:由資料學習聯合機率分布P(X,Y),然後求出條件機率分布P(Y|X)作為預測的模型,即生成模型:P(Y|X)= P(X,Y)/

    P(X)。如樸素貝葉斯、Kmeans;生成模型可以還原聯合機率分布p(X,Y),并有較快的學習收斂速度;

    • 判别模型:由資料直接學習決策函數Y=f(X)或者條件機率分布P(Y|X)作為預測的模型,即判别模型。如k近鄰、決策樹、SVM直接面對預測,往往準确率較高。

    13、線性分類器與非線性分類器的差別以及優劣

    如果模型是參數的線性函數,并且存線上性分類面,那麼就是線性分類器,否則不是。

    • 常見的線性分類器有:LR,貝葉斯分類,單層感覺機、線性回歸 常見的非線性分類器:決策樹、RF、GBDT、多層感覺機

    • SVM兩種都有(看線性核還是高斯核)

    • 線性分類器速度快、程式設計友善,但是可能拟合效果不會很好 非線性分類器程式設計複雜,但是拟合能力強

    14、對于次元很高(特征比資料量還大時)的特征,選擇什麼樣的分類器

    線性分類器,因為次元高的時候,資料一般在次元空間裡面會比較稀疏,很有可能線性可分。

    15、對于次元極低的特征,你是選擇線性還是非線性分類器

    非線性分類器,低維空間可能很多特征都跑到一起了,導緻線性不可分。

    其他高人見解:

  7. 如果Feature的數量很大,跟樣本數量差不多,這時候選用LR或者是Linear Kernel的SVM
  8. 如果Feature的數量比較小,樣本數量一般,不算大也不算小,選用SVM+Gaussian Kernel
  9. 如果Feature的數量比較小,而樣本數量很多,需要手工添加一些feature變成第一種情況

    16、什麼是偏差與方差?

    泛化誤差可以分解成偏差的平方加上方差加上噪聲。

    • 偏差度量了學習算法的期望預測和真實結果的偏離程度,刻畫了學習算法本身的拟合能力;

    • 方差度量了同樣大小的訓練集的變動所導緻的學習性能的變化,刻畫了資料擾動所造成的影響;噪聲表達了目前任務上任何學習算法所能達到的期望泛化誤差下界,刻畫了問題本身的難度。

    • 方差描述的是訓練資料在不同疊代階段的訓練模型中,預測值的變化波動情況(或稱之為離散情況)。從數學角度看,可以了解為每個預測值與預測均值差的平方和的再求平均數。通常在模型訓練中,初始階段模型複雜度不高,為低方差;随着訓練量加大,模型逐漸拟合訓練資料,複雜度開始變高,此時方差會逐漸變高。

    • 偏差和方差一般稱為bias和variance,一般訓練程度越強,偏差越小,方差越大,泛化誤差一般在中間有一個最小值,如果偏差較大,方差較小,此時一般稱為欠拟合,而偏差較小,方差較大稱為過拟合。

    如左下角的“打靶圖”,假設我們的目标是中心的紅點,所有的預測值都偏離了目标位置,這就是偏差;

    在右上角的“打靶圖”中,預測值圍繞着紅色中心周圍,沒有大的偏差,但是整體太分散了,不集中,這就是方差。

    • 低偏差,低方差:這是訓練的理想模型,此時藍色點集基本落在靶心範圍内,且資料離散程度小,基本在靶心範圍内;

    • 低偏差,高方差:這是深度學習面臨的最大問題,過拟合了。也就是模型太貼合訓練資料了,導緻其泛化(或通用)能力差,若遇到測試集,則準确度下降的厲害;

    • 高偏差,低方差:這往往是訓練的初始階段;

    • 高偏差,高方差:這是訓練最糟糕的情況,準确度差,資料的離散程度也差。

    17、模型誤差

    模型誤差 = 偏差 + 方差 + 不可避免的誤差(噪音)。一般來說,随着模型複雜度的增加,方差會逐漸增大,偏差會逐漸減小,見下圖:

    18、偏差方差産生的原因

    一個模型有偏差,主要的原因可能是對問題本身的假設是不正确的,或者欠拟合。如:針對非線性的問題使用線性回歸;或者采用的特征和問題完全沒有關系,如用學生姓名預測考試成績,就會導緻高偏差。

    方差表現為資料的一點點擾動就會較大地影響模型。即模型沒有完全學習到問題的本質,而學習到很多噪音。通常原因可能是使用的模型太複雜,如:使用高階多項式回歸,也就是過拟合。

    有一些算法天生就是高方差的算法,如kNN算法。非參數學習算法通常都是高方差,因為不對資料進行任何假設。

    有一些算法天生就是高偏差算法,如線性回歸。參數學習算法通常都是高偏差算法,因為對資料有迹象。

    19、偏差與方差的權衡

    我們要知道偏差和方差是無法完全避免的,隻能盡量減少其影響。

    • 在避免偏差時,需盡量選擇正确的模型,一個非線性問題而我們一直用線性模型去解決,那無論如何,高偏差是無法避免的。

    • 有了正确的模型,我們還要慎重選擇資料集的大小,通常資料集越大越好,但大到資料集已經對整體所有資料有了一定的代表性後,再多的資料已經不能提升模型了,反而會帶來計算量的增加。而訓練資料太小一定是不好的,這會帶來過拟合,模型複雜度太高,方差很大,不同資料集訓練出來的模型變化非常大。

    • 最後,要選擇合适的模型複雜度,複雜度高的模型通常對訓練資料有很好的拟合能力。

    • 其實在機器學習領域,主要的挑戰來自方差。處理高方差的手段有:

    降低模型複雜度

    減少資料次元;降噪

    增加樣本數

    使用驗證集

    20、特征離散化

    一、什麼是離散化?

    連續資料:身高,年齡,工資

    離散資料:矮,高,紅,綠,好,壞

連續屬性的離散化就是将連續屬性的值域上,将值域劃分為若幹個離散的區間,最後用不同的符号或整數值代表落在每個子區間中的屬性值。

二、離散化原因

資料離散化是指将連續的資料進行分段,使其變為一段段離散化的區間。

連續特征離散化的本質是:決定選擇多少個分割點和确定分割點的位置。

分段的原則有基于等距離、等頻率或優化的方法。

資料離散化的原因主要有以下幾點:

1、算法需要

比如決策樹、樸素貝葉斯等算法,都是基于離散型的資料展開的。如果要使用該類算法,必須将離散型的資料進行。有效的離散化能減小算法的時間和空間開銷,提高系統對樣本的分類聚類能力和抗噪聲能力。

2、離散化的特征相對于連續型特征更易了解,更接近知識層面的表達

比如工資收入,月薪2000和月薪20000,從連續型特征來看高低薪的差異還要通過數值層面才能了解,但将其轉換為離散型資料(底薪、高薪),則可以更加直覺的表達出了我們心中所想的高薪和底薪。

3、可以有效的克服資料中隐藏的缺陷,使模型結果更加穩定

三、離散化的優勢

離散特征的增加和減少都很容易,易于模型的快速疊代;

稀疏向量内積乘法運算速度快,計算結果友善存儲,容易擴充;

離散化後的特征對異常資料有很強的魯棒性(穩定性):比如一個特征是年齡>30是1,否則0。如果特征沒有離散化,一個異常資料“年齡300歲”會給模型造成很大的幹擾;

邏輯回歸屬于廣義線性模型,表達能力受限;單變量離散化為N個後,每個變量有單獨的權重,相當于為模型引入了非線性,能夠提升模型表達能力,加大拟合;

離散化後可以進行特征交叉,由M+N個變量變為M*N個變量,進一步引入非線性,提升表達能力;

特征離散化後,模型會更穩定,比如如果對使用者年齡離散化,20-30作為一個區間,不會因為一個使用者年齡長了一歲就變成一個完全不同的人。當然處于區間相鄰處的樣本會剛好相反,是以怎麼劃分區間是門學問;

特征離散化以後,起到了簡化了邏輯回歸模型的作用,降低了模型過拟合的風險。

四、離散化的方法

1、無監督學習方法

等寬法

等寬法即是将屬性值分為具有相同寬度的區間,區間的個數k根據實際情況來決定。比如屬性值在[0,60]之間,最小值為0,最大值為60,我們要将其分為3等分,則區間被劃分為[0,20] 、[21,40] 、[41,60],每個屬性值對應屬于它的那個區間

等頻法

等寬法即是将屬性值分為具有相同寬度的區間,區間的個數k根據實際情況來決定。比如有60個樣本,我們要将其分為k=3部分,則每部分的長度為20個樣本。

基于聚類的方法

基于聚類的方法分為兩個步驟,即:

標明聚類算法将其進行聚類,将在同一個簇内的屬性值做為統一标記。

注:基于聚類的方法,簇的個數要根據聚類算法的實際情況來決定,比如對于k-means算法,簇的個數可以自己決定,但對于DBSCAN,則是算法找尋簇的個數。

2、有監督學習方法:

1R方法

基于資訊熵的方法

基于卡方的方法

五、離散化處理的一般過程

對連續特征值按照某種指定的規則進行排序

初步确定連續屬性的劃分斷點

按照某種給定的判斷标準繼續分割斷點或合并斷點

如果第三步得到判斷标準的終止條件,則終止整個連續特征離散化的過程,否則繼續按第三步執行

六、離散化方法的評價

區間的個數:是對模型簡潔性的要求

離散化所導緻的不一緻性:離散化後的不一緻性不能比離散化之前高。

預測準确性:通常通過交叉檢驗模式建立分叉樹來衡量。

具有最簡單的離散化結果

七、 總結

李沐曾經說過:模型是使用離散特征還是連續特征,其實是一個“海量離散特征+簡單模型” 同 “少量連續特征+複雜模型”的權衡。既可以離散化用線性模型,也可以用連續特征加深度學習。就看是喜歡折騰特征還是折騰模型了。通常來說,前者容易,而且可以n個人一起并行做,有成功經驗;後者目前看很贊,能走多遠還須拭目以待。

21、特征交叉

1.為什麼需要特征組合、特征交叉?

特征交叉是資料特征的一種處理方式,通過特征組合的方式增加特征的次元,以求得更好的訓練效果。

在實際場景中,我們常常遇到這要的情況,線性分類起無法在如下樣本中(無法畫一條直線将下列黃點和藍點分開),是以特征組合是一種讓線性模型學習到非線性特征的方式:

例如在廣告模型中用到了大量的特征組合,因為LR是廣告推廣中最常用的模型,但LR本身不夠複雜,為了使得LR學到更複雜的非線性特征,常常使用原始特征加上特征組合的方式。

2.如何做特征組合?

特征組合的思想很簡單,通過将單獨的特征進行組合(相乘或求笛卡爾積)而形成的合成特征。

比如屬性A有三個特征,屬性B有兩個特征,笛卡爾積後就有六個組合特征,然後用one hot 或其他embedding方式給新的特征編碼。

3.暴力做交叉可能産生稀疏問題。

這種暴力做交叉很可能導緻特征稀疏的問題,這裡可以參考FM、FMM以及阿裡媽媽釋出的MLR的做法和解決思路

22、樣本類别不均衡

定義:所謂的不平衡指的是不同類别的樣本量異非常大。樣本類别分布不平衡主要出現在分類相關的模組化問題上。樣本類别分布不均衡從資料規模上可以分為大資料分布不均衡和小資料分布不均衡兩種。

如何解決:

1 通過過抽樣和欠抽樣解決樣本不均衡

抽樣是解決樣本分布不均衡相對簡單且常用的方法,包括過抽樣和欠抽樣兩種。

過抽樣

過抽樣(也叫上采樣、over-sampling)方法通過增加分類中少數類樣本的數量來實作樣本均衡,最直接的方法是簡單複制少數類樣本形成多條記錄,這種方法的缺點是如果樣本特征少而可能導緻過拟合的問題;經過改進的過抽樣方法通過在少數類中加入随機噪聲、幹擾資料或通過一定規則産生新的合成樣本,例如SMOTE算法。

欠抽樣

欠抽樣(也叫下采樣、under-sampling)方法通過減少分類中多數類樣本的樣本數量來實作樣本均衡,最直接的方法是随機地去掉一些多數類樣本來減小多數類的規模,缺點是會丢失多數類樣本中的一些重要資訊。

總體上,過抽樣和欠抽樣更适合大資料分布不均衡的情況,尤其是第一種(過抽樣)方法應用更加廣泛。

2 通過正負樣本的懲罰權重解決樣本不均衡

通過正負樣本的懲罰權重解決樣本不均衡的問題的思想是在算法實作過程中,對于分類中不同樣本數量的類别分别賦予不同的權重(一般思路分類中的小樣本量類别權重高,大樣本量類别權重低),然後進行計算和模組化。

使用這種方法時需要對樣本本身做額外處理,隻需在算法模型的參數中進行相應設定即可。很多模型和算法中都有基于類别參數的調整設定,以scikit-learn中的SVM為例,通過在class_weight: {dict, ‘balanced’}中針對不同類别針對不同的權重,來手動指定不同類别的權重。如果使用其預設的方法balanced,那麼SVM會将權重設定為與不同類别樣本數量呈反比的權重來做自動均衡處理,計算公式為:n_samples / (n_classes * np.bincount(y))。

如果算法本身支援,這種思路是更加簡單且高效的方法。

3 通過組合/內建方法解決樣本不均衡

組合/內建方法指的是在每次生成訓練集時使用所有分類中的小樣本量,同時從分類中的大樣本量中随機抽取資料來與小樣本量合并構成訓練集,這樣反複多次會得到很多訓練集和訓練模型。最後在應用時,使用組合方法(例如投票、權重投票等)産生分類預測結果。

例如,在資料集中的正、負例的樣本分别為100和10000條,比例為1:100。此時可以将負例樣本(類别中的大量樣本集)随機分為100份(當然也可以分更多),每份100條資料;然後每次形成訓練集時使用所有的正樣本(100條)和随機抽取的負樣本(100條)形成新的資料集。如此反複可以得到100個訓練集和對應的訓練模型。

這種解決問題的思路類似于随機森林。在随機森林中,雖然每個小決策樹的分類能力很弱,但是通過大量的“小樹”組合形成的“森林”具有良好的模型預測能力。

如果計算資源充足,并且對于模型的時效性要求不高的話,這種方法比較合适。

4通過特征選擇解決樣本不均衡

上述幾種方法都是基于資料行的操作,通過多種途徑來使得不同類别的樣本資料行記錄均衡。除此以外,還可以考慮使用或輔助于基于列的特征選擇方法。

一般情況下,樣本不均衡也會導緻特征分布不均衡,但如果小類别樣本量具有一定的規模,那麼意味着其特征值的分布較為均勻,可通過選擇具有顯著型的特征配合參與解決樣本不均衡問題,也能在一定程度上提高模型效果。

23、如何進行特征選擇

特征選擇是一個重要的資料預處理過程,

主要有兩個原因:

• 一是減少特征數量、降維,使模型泛化能力更強,減少過拟合;

• 二是增強對特征和特征值之間的了解

常見的特征選擇方式:

  1. 去除方差較小的特征
  2. 正則化。L1正則化能夠生成稀疏的模型。L2正則化的表現更加穩定,由于有用的特征往往對應系數非零。
  3. 随機森林,對于分類問題,通常采用基尼不純度或者資訊增益,對于回歸問題,通常采用的是方差或者最小二乘拟合。一般不需要feature engineering、調參等繁瑣的步驟。它的兩個主要問題,1是重要的特征有可能得分很低(關聯特征問題),2是這種方法對特征變量類别多的特征越有利(偏向問題)。
  4. 穩定性選擇。是一種基于二次抽樣和選擇算法相結合較新的方法,選擇算法可以是回歸、SVM或其他類似的方法。它的主要思想是在不同的資料子集和特征子集上運作特征選擇算法,不斷的重複,最終彙總特征選擇結果,比如可以統計某個特征被認為是重要特征的頻率(被選為重要特征的次數除以它所在的子集被測試的次數)。理想情況下,重要特征的得分會接近100%。稍微弱一點的特征得分會是非0的數,而最無用的特征得分将會接近于0。

    24、資料預處理

  5. 缺失值,填充缺失值fillna:

    i. 離散:None,

    ii. 連續:均值。

    iii. 缺失值太多,則直接去除該列

  6. 連續值:離散化。有的模型(如決策樹)需要離散值
  7. 對定量特征二值化。核心在于設定一個門檻值,大于門檻值的指派為1,小于等于門檻值的指派為0。如圖像操作
  8. 皮爾遜相關系數,去除高度相關的列

    25、缺失值處理的政策

    一方面,缺失值較多.直接将該特征舍棄掉,否則可能反倒會帶入較大的noise,對結果造成不良影響。

    另一方面缺失值較少,其餘的特征缺失值都在10%以内,我們可以采取很多的方式來處理:

  9. 把NaN直接作為一個特征,假設用0表示;
  10. 用均值填充;
  11. 用随機森林等算法預測填充。

    26、衡量分類器的好壞

    這裡首先要知道TP、FN(真的判成假的)、FP(假的判成真)、TN四種(可以畫一個表格)。

    幾種常用的名額:

    • 精度precision = TP/(TP+FP) = TP/~P (~p為預測為真的數量)

    • 召回率 recall = TP/(TP+FN) = TP/ P

    • F1值: 2/F1 = 1/recall + 1/precision

    • ROC曲線:ROC空間是一個以僞陽性率(FPR,false positive rate)為X軸,真陽性率(TPR, true

    positive rate)為Y軸的二維坐标系所代表的平面。其中真陽率TPR = TP / P = recall, 僞陽率FPR = FP/ N

    27、什麼是共線性, 跟過拟合有什麼關聯?

    共線性:多變量線性回歸中,變量之間由于存在高度相關關系而使回歸估計不準确。

    共線性會造成備援,導緻過拟合。

    解決方法:排除變量的相關性/加入權重正則。

    28.連續特征,既可以離散化,也可以做幅度縮放,那這兩種處理方式分别适用于什麼場景呢?

    幅度縮放一般在計算型模型裡會用到,比如LR DNN

    離散化一般是線性模型會用到,比如LR。

    如七月線上寒老師所說,離散化的目的有以下幾個方面:

    ① 非線性!非線性!非線性!邏輯回歸屬于廣義線性模型,表達能力受限;單變量離散化為N個後,每個變量有單獨的權重,相當于為模型引入了非線性,能夠提升模型表達能力,加大拟合;

    離散特征的增加和減少都很容易,易于模型的快速疊代;

    ② 速度快!速度快!速度快!稀疏向量内積乘法運算速度快,計算結果友善存儲,容易擴充;

    ③ 魯棒性!魯棒性!魯棒性!離散化後的特征對異常資料有很強的魯棒性:比如一個特征是年齡>30是1,否則0。如果特征沒有離散化,一個異常資料“年齡300歲”會給模型造成很大的幹擾;

    ④ 友善交叉與特征組合:離散化後可以進行特征交叉,由M+N個變量變為M*N個變量,進一步引入非線性,提升表達能力;

    ⑤ 穩定性:特征離散化後,模型會更穩定,比如如果對使用者年齡離散化,20-30作為一個區間,不會因為一個使用者年齡長了一歲就變成一個完全不同的人。當然處于區間相鄰處的樣本會剛好相反,是以怎麼劃分區間是門學問;

    ⑥ 簡化模型:特征離散化以後,起到了簡化了邏輯回歸模型的作用,降低了模型過拟合的風險。

    29.交叉驗證

    交叉驗證其實就是為了檢查模型的泛化行和穩定性,讓模型的輸出更加可靠。因為當我們隻将訓練資料劃分一次時,有可能劃分的不好,是以模型的結果會有偏差,不可靠。是以,我們可以使用交叉驗證。

    基本思想:

    将原始資料(dataset)進行分組,一部分做為訓練集來訓練模型,另一部分做為測試集來評價模型。

    交叉驗證是一種模型選擇的方法!(引自李航統計學習方法)可以分為以下三種:

    • 簡單交叉驗證。即将資料按照一定比例 比如73開,分為訓練集和測試集。

    • S折交叉驗證。将已給資料切分為S個互不相交、大小相同的子集,将S-1個子集的資料作為訓練集來訓練模型,剩餘的一個測試模型,重複S次,選擇S次中平均測試誤差最小的模型。

    • 留一交叉驗證。即S=n。往往在資料缺乏的時候使用。因為資料很少沒法再分了!

    評價名額

1.1 分類準确度夠用麼?

分類準确度在評價分類算法時,會有很大的問題的。分類算法的評價要比回歸算法多很多。

對于一個癌症預測系統,輸入檢查名額,判斷是否患有癌症,預測準确度99.9%。這個系統是好是壞呢?

如果癌症産生的機率是0.1%,那其實根本不需要任何機器學習算法,隻要系統預測所有人都是健康的,即可達到99.9%的準确率。也就是說對于極度偏斜(Skewed Data)的資料,隻使用分類準确度是不能衡量。

這時就需要使用混淆矩陣(Confusion Matrix)做進一步分析。

1.2 混淆矩陣

對于二分類問題來說,所有的問題被分為0和1兩類,混淆矩陣是2*2的矩陣:

• TN:真實值是0,預測值也是0,即我們預測是negative,預測正确了。

• FP:真實值是0,預測值是1,即我們預測是positive,但是預測錯誤了。

• FN:真實值是1,預測值是0,即我們預測是negative,但預測錯誤了。

• TP:真實值是1,預測值是1,即我們預測是positive,預測正确了。

現在假設有1萬人進行預測,填入混淆矩陣如下:

對于1萬個人中,有9978個人本身并沒有癌症,我們的算法也判斷他沒有癌症;有12個人本身沒有癌症,但是我們的算法卻錯誤地預測他有癌症;有2個人确實有癌症,但我們算法預測他沒有癌症;有8個人确實有癌症,而且我們也預測對了。

因為混淆矩陣表達的資訊比簡單的分類準确度更全面,是以可以通過混淆矩陣得到一些有效的名額。

2.1精準率和召回率

根據混淆矩陣可以求得名額:

精準率:

即精準率為8/(8+12)=40%。所謂的精準率是:分母為所有預測為1的個數,分子是其中預測對了的個數,即預測值為1,且預測對了的比例。

為什麼管它叫精準率呢?在有偏的資料中,我們通常更關注值為1的特征,比如“患病”,比如“有風險”。在100次結果為患病的預測,平均有40次預測是對的。即精準率為我們關注的那個事件,預測的有多準。

召回率:

即召回率為8/(8+2)=80%。所謂召回率是:所有真實值為1的資料中,預測對了的個數。每當有100個癌症患者,算法可以成功的預測出8個 。也就是我們關注的那個事件真實的發生情況下,我們成功預測的比例是多少。

那麼為什麼需要精準率和召回率呢?還是下面的這個例子,有10000個人,混淆矩陣如下:

如果我們粗暴的認為所有人都是健康的,那算法的準确率是99.78%,但這是毫無意義的。如果算精準率則是40%,召回率是80%。

2.2更關注哪個?

精準率(查準率):預測值為1,且預測對了的比例,即:我們關注的那個事件,預測的有多準。

召回率(查全率):所有真實值為1的資料中,預測對了的個數,即:我們關注的那個事件真實的發生情況下,我們成功預測的比例是多少。

有的時候,對于一個算法而言,精準率高一些,召回率低一些;或者召回率高一些,精準率低一些。那麼如何取舍呢?

其實在衡量機器學習的其他名額中,我們也需要進行取舍,通常隻需要把握一個原則:

視場景而定。

比如我們做了一個股票預測系統,未來股票是📈還是📉這樣一個二分類問題。很顯然“漲”才是我們關注的焦點,那麼我們肯定希望:系統預測上漲的股票中,真正上漲的比例越大越好,這就是希望查準率高。那麼我們是否關注查全率呢?在大盤中有太多的真實上漲股票,雖然我們漏掉了一些上升周期,但是我們沒有買進,也就沒有損失。但是如果查準率不高,預測上漲的結果下跌了,那就是實實在在的虧錢了。是以在這個場景中,查準率更重要。

當然也有追求召回率的場景,在醫療領域做疾病診斷,如果召回率低,意味着本來有一個病人得病了,但是沒有正确預測出來,病情就惡化了。我們希望盡可能地将所有有病的患者都預測出來,而不是在看在預測有病的樣例中有多準。

但是,在實際業務場景中,也有很多沒有這麼明顯的選擇。那麼在同時需要關注精準率和召回率,如何在兩個名額中取得平衡呢?在這種情況下,我們使用一種新的名額:F1 Score。

2.3二者兼顧 F1 Score

如果要我們綜合精準率和召回率這兩個名額,我們可能會想到取平均值這樣的方法。F1 Score的思想也差不多:

F1 Score 是精準率和召回率的調和平均值。

什麼是調和平均值?為什麼要取調和平均值?調和平均值的特點是如果二者極度不平衡,如某一個值特别高、另一個值特别低時,得到的F1 Score值也特别低;隻有二者都非常高,F1才會高。這樣才符合我們對精準率和召回率的衡量标準。

3.1ROC曲線

在了解ROC曲線之前,先看三個概念:分類門檻值、TPR和FPR

3.1.1 分類門檻值

分類門檻值,即設定判斷樣本為正例的門檻值thr,

如果某個邏輯回歸模型對某封電子郵件進行預測時傳回的機率為 0.9995,則表示該模型預測這封郵件非常可能是垃圾郵件。相反,在同一個邏輯回歸模型中預測分數為 0.0003 的另一封電子郵件很可能不是垃圾郵件。可如果某封電子郵件的預測分數為 0.6 呢?為了将邏輯回歸值映射到二進制類别,您必須指定分類門檻值(也稱為判定門檻值)。如果值高于該門檻值,則表示“垃圾郵件”;如果值低于該門檻值,則表示“非垃圾郵件”。人們往往會認為分類門檻值應始終為 0.5,但門檻值取決于具體問題,是以您必須對其進行調整。

我們知道,精準率和召回率這兩個名額有内在的聯系,并且互相沖突。precision随着threshold的增加而降低,recall随着threshold的增大而減小。如果某些場景需要precision,recall都保持在80%,可以通過這種方式求出threshold

3.1.2TPR

TPR:預測為1,且預測對了的數量,占真實值為1的資料百分比。很好了解,就是召回率。

3.1.3 FPR

FPR:預測為1,但預測錯了的數量,占真實值不為1的資料百分比。與TPR相對應,FPR除以真實值為0的這一行所有的數字和 。

TPR和FPR之間是成正比的,TPR高,FPR也高。ROC曲線就是刻畫這兩個名額之間的關系。

3.2 什麼是ROC曲線

ROC曲線(Receiver Operation Characteristic Cureve),描述TPR和FPR之間的關系。x軸是FPR,y軸是TPR。

我們已經知道,TPR就是所有正例中,有多少被正确地判定為正;FPR是所有負例中,有多少被錯誤地判定為正。 分類門檻值取不同值,TPR和FPR的計算結果也不同,最理想情況下,我們希望所有正例 & 負例 都被成功預測 TPR=1,FPR=0,即 所有的正例預測值 > 所有的負例預測值,此時門檻值取最小正例預測值與最大負例預測值之間的值即可。

TPR越大越好,FPR越小越好,但這兩個名額通常是沖突的。為了增大TPR,可以預測更多的樣本為正例,與此同時也增加了更多負例被誤判為正例的情況。

3.3分析

ROC曲線距離左上角越近,證明分類器效果越好。如果一條算法1的ROC曲線完全包含算法2,則可以斷定性能算法1>算法2。這很好了解,此時任做一條 橫線(縱線),任意相同TPR(FPR) 時,算法1的FPR更低(TPR更高),故顯然更優。

我們可以看出,左上角的點(TPR=1,FPR=0),為完美分類,也就是這個醫生醫術高明,診斷全對。TPR>FPR,說明醫生的判斷大體是正确的。中線上的點TPR=FPR,也就是醫生全都是蒙的,蒙對一半,蒙錯一半;下半平面的點TPR<FPR,這個醫生說你有病,那麼你很可能沒有病,醫生的話我們要反着聽,為真庸醫。

很多時候兩個分類器的ROC曲線交叉,無法判斷哪個分類器性能更好,這時可以計算曲線下的面積AUC,作為性能度量。

4.AUC

一般在ROC曲線中,我們關注是曲線下面的面積, 稱為AUC(Area Under Curve)。這個AUC是橫軸範圍(0,1 ),縱軸是(0,1)是以總面積是小于1的。

ROC和AUC的主要應用:比較兩個模型哪個好?主要通過AUC能夠直覺看出來。

ROC曲線下方由梯形組成,矩形可以看成特征的梯形。是以,AUC的面積可以這樣算:(上底+下底)* 高 / 2,曲線下面的面積可以由多個梯形面積疊加得到。AUC越大,分類器分類效果越好。

• AUC = 1,是完美分類器,采用這個預測模型時,不管設定什麼門檻值都能得出完美預測。絕大多數預測的場合,不存在完美分類器。

• 0.5 < AUC < 1,優于随機猜測。這個分類器(模型)妥善設定門檻值的話,能有預測價值。

• AUC = 0.5,跟随機猜測一樣,模型沒有預測價值。

• AUC < 0.5,比随機猜測還差;但隻要總是反預測而行,就優于随機猜測。

邏輯回歸

1.邏輯回歸概述

邏輯回歸是一個線性的二分類模型,主要是計算在某個樣本特征下事件發生的機率,比如根據使用者的浏覽購買情況作為特征來計算他是否會購買這個商品,LR的最終值是根據一個線性和函數再通過一個sigmoid函數來求得的,該線性和函數是權重與特征值的累加以及加上偏置求出來的,是以訓練LR也就是訓練線性和函數的各個權重w。

權重w一般使用最大似然法來估計,估計出似然函數的負号極小值就會得到最優w解,通常采用随機梯度下降和拟牛頓法來進行優化。

**一句話總結:**邏輯回歸假設資料服從伯努利分布,通過極大化似然函數的方法,運用梯度下降來求解參數,來達到将資料二分類的目的。

2.邏輯回歸的目的

将資料進行二分類

3.邏輯回歸是如何做分類的

邏輯回歸作為一個回歸函數,如何用于分類問題。 邏輯回歸中,對于每個 x,其條件機率 y 的确是一個連續的變量。而邏輯回歸中可以設定一個門檻值,y 值大于這個門檻值的是一類,y 值小于這個門檻值的是另外一類。至于門檻值的選擇,通常是根據實際情況來确定,一般情況下選取 0.5 作為門檻值來劃分。

4.邏輯回歸損失函數

邏輯回歸的損失函數是其極大似然函數。

5.邏輯回歸的參數求解方法

極大似然函數無法直接求解,一般是通過對該函數進行梯度下降來不斷逼近其最優解。這裡需要注意的點是要對梯度下降有一定的了解,就梯度下降本身來看的話就有随機梯度下降,批梯度下降,small batch 梯度下降三種方式,面試官可能會問這三種方式的優劣以及如何選擇最合适的梯度下降方式。

• 批梯度下降會獲得全局最優解,缺點是在更新每個參數的時候需要周遊所有的資料,計算量會很大,并且會有很多的備援計算,導緻的結果是當資料量大的時候,每個參數的更新都會很慢。

• 随機梯度下降是以高方差頻繁更新,優點是使得 sgd 會跳到新的和潛在更好的局部最優解,缺點是使得收斂到局部最優解的過程更加的複雜。

• 小批量梯度下降結合了批梯度下降和随機梯度下降的優點,每次更新的時候使用 n個樣本。減少了參數更新的次數,可以達到更加穩定收斂結果,一般在深度學習當中我們采用這種方。

6.邏輯回歸中為什麼使用對數損失而不用平方損失

對于邏輯回歸,這裡所說的對數損失和極大似然是相同的。 不使用平方損失的原因是,在使用 Sigmoid 函數作為正樣本的機率時,同時将平方損失作為損失函數,這時所構造出來的損失函數是非凸的,不容易求解,容易得到其局部最優解。 而如果使用極大似然,其目标函數就是對數似然函數,該損失函數是關于未知參數的高階連續可導的凸函數,便于求其全局最優解。

7.邏輯回歸的如何分類

這個在上面的時候提到了,要設定一個門檻值,判斷正類機率是否大于該門檻值,一般門檻值是0.5,是以隻用判斷正類機率是否大于0.5即可。

8.邏輯回歸在訓練的過程當中,如果有很多的特征高度相關或者說有一個特征重複了100遍,會造成怎樣的影響:

• 先說結論,如果在損失函數最終收斂的情況下,其實就算有很多特征高度相關也不會影響分類器的效果。

• 但是對特征本身來說的話,假設隻有一個特征,在不考慮采樣的情況下,你現在将它重複100遍。訓練以後完以後,資料還是這麼多,但是這個特征本身重複了100遍,實質上将原來的特征分成了100份,每一個特征都是原來特征權重值的百分之一。

• 如果在随機采樣的情況下,其實訓練收斂完以後,還是可以認為這100個特征和原來那一個特征扮演的效果一樣,隻是可能中間很多特征的值正負相消了。

9.為什麼我們還是會在訓練的過程當中将高度相關的特征去掉

• 去掉高度相關的特征會讓模型的可解釋性更好可以大大提高訓練的速度。如果模型當中有很多特征高度相關的話,就算損失函數本身收斂了,但實際上參數是沒有收斂的,這樣會拉低訓練的速度。

• 其次是特征多了,本身就會增大訓練的時間。

10. 邏輯回歸的優缺點總結

優點

• 形式簡單,模型的可解釋性非常好。從特征的權重可以看到不同的特征對最後結果的影響,某個特征的權重值比較高,那麼這個特征最後對結果的影響會比較大。

• 模型效果不錯。在工程上是可以接受的(作為baseline),如果特征工程做的好,效果不會太差,并且特征工程可以大家并行開發,大大加快開發的速度。

• 訓練速度較快。分類的時候,計算量僅僅隻和特征的數目相關。并且邏輯回歸的分布式優化sgd發展比較成熟,訓練的速度可以通過堆機器進一步提高,這樣我們可以在短時間内疊代好幾個版本的模型。

• 資源占用小,尤其是記憶體。因為隻需要存儲各個次元的特征值。

• 友善輸出結果調整。邏輯回歸可以很友善的得到最後的分類結果,因為輸出的是每個樣本的機率分數,我們可以很容易的對這些機率分數進行cut off,也就是劃分門檻值(大于某個門檻值的是一類,小于某個門檻值的是一類)。

缺點:

• 準确率并不是很高。因為形式非常的簡單(非常類似線性模型),很難去拟合資料的真實分布。

• 很難處理資料不平衡的問題。舉個例子:如果我們對于一個正負樣本非常不平衡的問題比如正負樣本比10000:1.我們把所有樣本都預測為正也能使損失函數的值比較小。但是作為一個分類器,它對正負樣本的區分能力不會很好。

• 處理非線性資料較麻煩。邏輯回歸在不引入其他方法的情況下,隻能處理線性可分的資料,或者進一步說,處理二分類的問題 。

• 邏輯回歸本身無法篩選特征。有時候,我們會用gbdt來篩選特征,然後再上邏輯回歸。

11. 邏輯回歸怎麼實作多分類

方式一:修改邏輯回歸的損失函數,使用softmax函數構造模型解決多分類問題,softmax分類模型會有相同于類别數的輸出,輸出的值為對于樣本屬于各個類别的機率,最後對于樣本進行預測的類型為機率值最高的那個類别。

方式二:根據每個類别都建立一個二分類器,本類别的樣本标簽定義為1,其它分類樣本标簽定義為0,則有多少個類别就構造多少個邏輯回歸分類器,若所有類别之間有明顯的互斥則使用softmax分類器,若所有類别不互斥有交叉的情況則構造相應類别個數的邏輯回歸分類器。

決策樹

1.什麼是決策樹

首先從訓練樣本矩陣中選擇第一個特征進行子表劃分,使每個子表中該特征的值全部相同,然後再在每個子表中選擇下一個特征按照同樣的規則繼續劃分更小的子表,不斷重複直到所有的特征全部使用完為止,此時便得到葉級子表,其中所有樣本的特征值全部相同。對于待預測樣本,根據其每一個特征的值,選擇對應的子表,逐一比對,直到找到與之完全比對的葉級子表,用該子表中樣本的輸出,通過平均(回歸)或者投票(分類)為待預測樣本提供輸出。

• 一棵樹

• if-then規則的集合,該集合是決策樹上的所有從根節點到葉節點的路徑的集合

• 定義在特征空間與類空間上的條件機率分布,決策樹實際上是将特征空間劃分成了互不相交的單元,每個從根到葉的路徑對應着一個單元。決策樹所表示的條件機率分布由各個單元給定條件下類的條件機率分布組成。實際中,哪個類别有較高的條件機率,就把該單元中的執行個體強行劃分為該類别。

2.決策樹和條件機率分布的關系?

決策樹可以表示成給定條件下類的條件機率分布。

決策樹中的每一條路徑都對應是劃分的一個條件機率分布. 每一個葉子節點都是通過多個條件之後的劃分空間,在葉子節點中計算每個類的條件機率,必然會傾向于某一個類,即這個類的機率最大。

3.資訊增益比相對資訊增益有什麼好處?

• 使用資訊增益時:模型偏向于選擇取值較多的特征

• 使用資訊增益比時:對取值多的特征加上的懲罰,對這個問題進行了校正。

  1. ID3算法—>C4.5算法—> CART算法

5.決策樹的缺失值是怎麼處理的

原始資料為:

(比如“色澤”這個屬性有的樣本在該屬性上的值是缺失的,那麼該如何計算“色澤”的資訊增益?)

• 每個樣本設定一個權重(初始可以都為1)

• 劃分資料,一部分是有特征值A的資料D1,另一部分是沒有特征值A的資料D2.

• 對沒有缺失特征值A的資料集D1來和對應的A特征的各個特征值一起計算權重重後的資訊增益比,最後乘上一個系數,這個系數是無特征值A缺失的樣本權重後所占權重總樣本的比例。

Gain(all_data) = p * (Gain(not_missing_data))

Gain(not_missing_data) = H1 - H2

H1 = -( (6 / 14) * np.log2(6 / 14) + (8 / 14) * np.log2(8 / 14) ) = 0.985228

H2 = - ( (6 / 14) * ( (4 / 6) * np.log2(4 / 6) + (2 / 6) * np.log2(2 / 6) ) ) -

( (4 / 14) * ( (2 / 4) * np.log2(2 / 4) + (2 / 4) * np.log2(2 / 4) ) ) - 0 = 0.6792696

Gain(not_missing_data) = H1 - H2 = 0.985228 - 0.6792696 = 0.305958

p為非缺失值樣本個數占所有樣本的個數,即14 / 17

Gain(all_data) = p * (Gain(not_missing_data)) = (14 / 17) * (0.305958) = 0.251966。

6.既然資訊增益可以計算,為什麼C4.5還使用資訊增益比?

在使用資訊增益的時候,如果某個特征有很多取值,使用這個取值多的特征會的大的資訊增益,這個問題是出現很多分支,将資料劃分更細,模型複雜度高,出現過拟合的機率更大。使用資訊增益比就是為了解決偏向于選擇取值較多的特征的問題. 使用資訊增益比對取值多的特征加上的懲罰,對這個問題進行了校正。

7.基尼指數可以表示資料不确定性,資訊熵也可以表示資料的不确定性。為什麼CART使用基尼指數?

資訊熵0, logK都是值越大,資料的不确定性越大. 資訊熵需要計算對數,計算量大;資訊熵是可以處理多個類别,基尼指數就是針對兩個類計算的,由于CART樹是一個二叉樹,每次都是選擇yes or no進行劃分,從這個角度也是應該選擇簡單的基尼指數進行計算。

8.基尼系數存在的問題?

基尼指數偏向于多值屬性;當類數較大時,基尼指數求解比較困難;基尼指數傾向于支援在兩個分區中生成大小相同的測試。

9.如何學習一棵決策樹?

決策樹的學習本質上就是從訓練資料集中歸納出一組分類規則,使它與訓練資料沖突較小的同時具有較強的泛華能力。從另一個角度看,學習也是基于訓練資料集估計條件機率模型(至此,回答完了模型部分,下面接着說政策和算法)。

決策樹的損失函數通常是正則化的極大似然函數,學習的政策是以損失函數為目标函數的最小化(說完了政策,該說算法了)。

由于這個最小化問題是一個NP完全問題,現實中,我們通常采用啟發式算法(這裡,面試官可能會問什麼是啟發式算法,要有準備,SMO算法就是啟發式算法)來近似求解這一最優化問題,得到的決策樹是次最優的。

該啟發式算法可分為三步:

• 特征選擇

• 模型生成

• 決策樹的剪枝

本答案出自,更多具體請參考如下https://www.jianshu.com/p/fb97b21aeb1d

10.決策樹怎麼防止過拟合?

預剪枝(提前停止):控制深度、目前的節點數、分裂對測試集的準确度提升大小

• 限制樹的高度,可以利用交叉驗證選擇

• 利用分類名額,如果下一次切分沒有降低誤差,則停止切分

• 限制樹的節點個數,比如某個節點小于100個樣本,停止對該節點切分

後剪枝(自底而上):生成決策樹、交叉驗證剪枝:子樹删除,節點代替子樹、測試集準确率判斷決定剪枝

• 在決策樹建構完成之後,根據加上正則項的結構風險最小化自下向上進行的剪枝操作.

剪枝的目的就是防止過拟合,使模型在測試資料上變現良好,更加魯棒。

11. 如果特征很多,決策樹中最後沒有用到的特征一定是無用嗎?

不是無用的,從兩個角度考慮:

• 特征替代性,如果可以已經使用的特征A和特征B可以提點特征C,特征C可能就沒有被使用,但是如果把特征C單獨拿出來進行訓練,依然有效

• 決策樹的每一條路徑就是計算條件機率的條件,前面的條件如果包含了後面的條件,隻是這個條件在這棵樹中是無用的,如果把這個條件拿出來也是可以幫助分析資料.

12.決策樹的優缺點

優點:

  1. 簡單直覺,生成的決策樹很直覺。
  2. 基本不需要預處理,不需要提前歸一化,處理缺失值。
  3. 使用決策樹預測的代價是O(log2m)O(log2m)。m為樣本數。
  4. 既可以處理離散值也可以處理連續值。很多算法隻是專注于離散值或者連續值。
  5. 可以處理多元度輸出的分類問題。
  6. 相比于神經網絡之類的黑盒分類模型,決策樹在邏輯上可以得到很好的解釋
  7. 可以交叉驗證的剪枝來選擇模型,進而提高泛化能力。
  8. 對于異常點的容錯能力好,健壯性高。

    模型具有可解釋性,容易向業務部門人員描述。

    分類速度快

    缺點:

  9. 決策樹算法非常容易過拟合,導緻泛化能力不強。可以通過設定節點最少樣本數量和限制決策樹深度來改進。
  10. 決策樹會因為樣本發生一點點的改動,就會導緻樹結構的劇烈改變。這個可以通過內建學習之類的方法解決。
  11. 尋找最優的決策樹是一個NP難的問題,我們一般是通過啟發式方法,容易陷入局部最優。可以通過內建學習之類的方法來改善。
  12. 有些比較複雜的關系,決策樹很難學習,比如異或。這個就沒有辦法了,一般這種關系可以換神經網絡分類方法來解決。
  13. 如果某些特征的樣本比例過大,生成決策樹容易偏向于這些特征。這個可以通過調節樣本權重來改善。

    13.樹形結構為什麼不需要歸一化?

    • 數值縮放不影響分裂點位置,對樹模型的結構不造成影響。

    • 按照特征值進行排序的,排序的順序不變,那麼所屬的分支以及分裂點就不會有不同。

    • 樹模型是不能進行梯度下降的,因為建構樹模型(回歸樹)尋找最優點時是通過尋找最優分裂點完成的,是以樹模型是階躍的,階躍點是不可導的,并且求導沒意義,也就不需要歸一化。

    14.其他面試案例

    引自知乎——資料取經團:呂洞賓

    15.決策樹怎麼剪枝?

    一般算法在構造決策樹的都是盡可能的細分,直到資料不可劃分才會到達葉子節點,停止劃分. 因為給訓練資料巨大的信任,這種形式形式很容易造成過拟合,為了防止過拟合需要進行決策樹剪枝. 一般分為預剪枝和後剪枝,預剪枝是在決策樹的建構過程中加入限制,比如控制葉子節點最少的樣本個數,提前停止. 後剪枝是在決策樹建構完成之後,根據加上正則項的結構風險最小化自下向上進行的剪枝操作. 剪枝的目的就是防止過拟合,是模型在測試資料上變現良好,更加魯棒。

随機森林

自助聚合

每次從總樣本矩陣中以有放回抽樣的方式随機抽取部分樣本建構決策樹,這樣形成多棵包含不同訓練樣本的決策樹,以削弱某些強勢樣本對模型預測結果的影響,提高模型的泛化特性。

随機森林

在自助聚合的基礎上,每次建構決策樹模型時,不僅随機選擇部分樣本,而且還随機選擇部分特征,這樣的集合算法,不僅規避了強勢樣本對預測結果的影響,而且也削弱了強勢特征的影響,使模型的預測能力更加泛化。

随機森林相關API:

import sklearn.ensemble as se

随機森林回歸模型 (屬于集合算法的一種)

max_depth:決策樹最大深度10

n_estimators:建構1000棵決策樹,訓練模型

min_samples_split: 子表中最小樣本數 若小于這個數字,則不再繼續向下拆分

model = se.RandomForestRegressor(max_depth=10, n_estimators=1000, min_samples_split=2)

1.1 随機森林算法思想

随機森林(Random Forest)使用多個CART決策樹作為弱學習器,不同決策樹之間沒有關聯。當我們進行分類任務時,新的輸入樣本進入,就讓森林中的每一棵決策樹分别進行判斷和分類,每個決策樹會得到一個自己的分類結果,決策樹的分類結果中哪一個分類最多,那麼随機森林就會把這個結果當做最終的結果。

随機森林在生成決策樹的時候用随機選擇的特征,即使用Bagging方法。這麼做的原因是:如果訓練集中的某幾個特征對輸出的結果有很強的預測性,那麼這些特征會被每個決策樹所應用,這樣會導緻樹之間具有相關性,這樣并不會減小模型的方差。

1.2 随機森林建立過程

下面我們來描述一下随機森林的建立過程

  1. 第一步:原始訓練集

    中有N個樣本,且每個樣本有W維特征。從資料集D中有放回的随機抽取x個樣本(Bootstraping方法)組成訓練子集,一共進行w次采樣,即生成w個訓練子集。

  2. 第二步:每個訓練子集

    形成一棵決策樹,形成了一共w棵決策樹。而每一次未被抽到的樣本則組成了w個oob(用來做預估)。

  3. 第三步:對于單個決策樹,樹的每個節點處從M個特征中随機挑選m(m<M)個特征,按照結點不純度最小原則進行分裂。每棵樹都一直這樣分裂下去,直到該節點的所有訓練樣例都屬于同一類。在決策樹的分裂過程中不需要剪枝。
  4. 第四步:根據生成的多個決策樹分類器對需要進行預測的資料進行預測。根據每棵決策樹的投票結果,如果是分類樹的話,最後取票數最高的一個類别;如果是回歸樹的話,利用簡單的平均得到最終結果。

    1.3 随機森林算法優缺點總結

    随機森林是Bagging的一個擴充變體,是在以決策樹為基學習器建構Bagging內建的基礎上,進一步在決策樹的訓練過程中引入了随機屬性選擇。

    随機森林簡單、容易實作、計算開銷小,在很多實際應用中都變現出了強大的性能,被譽為“代表內建學習技術水準的方法”。可以看出,随機森林對Bagging隻做了小改動。并且,Bagging滿足差異性的方法是對訓練集進行采樣;而随機森林不但對訓練集進行随機采樣,而且還随機選擇特征子集,這就使最終內建的泛化性進一步提升。

    随着基學習器數目的增加,随機森林通常會收斂到更低的泛化誤差,并且訓練效率是優于Bagging的。

    總結一下随機森林的優缺點:

    優點:

    • 訓練可以高度并行化,對于大資料時代的大樣本訓練速度有優勢。個人覺得這是的最主要的優點。

    • 由于可以随機選擇決策樹節點劃分特征,這樣在樣本特征次元很高的時候,仍然能高效的訓練模型。

    • 在訓練後,可以給出各個特征對于輸出的重要性。

    • 由于采用了随機采樣,訓練出的模型的方差小,泛化能力強。

    • 相對于Boosting系列的Adaboost和GBDT, RF實作比較簡單。

    • 對部分特征缺失不敏感。

    缺點有:

    • 在某些噪音比較大的樣本集上,RF模型容易陷入過拟合。

    • 取值劃分比較多的特征容易對RF的決策産生更大的影響,進而影響拟合的模型的效果。

    1.4其他面試題

    1、為什麼要有放回的抽樣?

    保證樣本集間有重疊,若不放回,每個訓練樣本集及其分布都不一樣,可能導緻訓練的各決策樹差異性很大,最終多數表決無法 “求同”,即最終多數表決相當于“求同”過程。

    2、為什麼RF的訓練效率優于bagging?

    因為在個體決策樹的建構過程中,Bagging使用的是“确定型”決策樹,bagging在選擇劃分屬性時要對每棵樹是對所有特征進行考察;而随機森林僅僅考慮一個特征子集。

    3、随機森林需要剪枝嗎?

    不需要,後剪枝是為了避免過拟合,随機森林随機選擇變量與樹的數量,已經避免了過拟合,沒必要去剪枝了。一般rf要控制的是樹的規模,而不是樹的置信度,剩下的每棵樹需要做的就是盡可能的在自己所對應的資料(特征)集情況下盡可能的做到最好的預測結果。剪枝的作用其實被內建方法消解了,是以用處不大

    4.随機森林如何處理缺失值

    根據随機森林建立和訓練的特點,随機森林對缺失值的處理還是比較特殊的。

    • 首先,給缺失值預設一些估計值,比如數值型特征,選擇其餘資料的中位數或衆數作為目前的估計值。

    • 然後,根據估計的數值,建立随機森林,把所有的資料放進随機森林裡面跑一遍。記錄每一組資料在決策樹中一步一步分類的路徑。

    • 判斷哪組資料和缺失資料路徑最相似,引入一個相似度矩陣,來記錄資料之間的相似度,比如有N組資料,相似度矩陣大小就是N*N。

    • 如果缺失值是類别變量,通過權重投票得到新估計值,如果是數值型變量,通過權重平均得到新的估計值,如此疊代,直到得到穩定的估計值。

    其實,該缺失值填補過程類似于推薦系統中采用協同過濾進行評分預測,先計算缺失特征與其他特征的相似度,再權重得到缺失值的估計,而随機森林中計算相似度的方法(資料在決策樹中一步一步分 類的路徑)乃其獨特之處。

    原文連結:https://blog.csdn.net/weixin_41510260/article/details/94987861

5.随機森林的過拟合問題

交叉驗證

SVM

1.你能給我講講什麼是SVM嗎?

回答:SVM是一種二分類模型,它的基本模型是在特征空間中尋找間隔最大化的分割超平面的線性分類器。如在下面的兩個類别中(暫且稱兩個類為黃球和紅球),

我們要将其分割開的方式有多種,但是究竟哪一種才是最優的分割方式呢?這就是支援向量機所要解決的問題。簡單而又通俗點的了解:支援向量機的優化目标是找到一條線(w和b), 使得離該線最近的點之間的距離最長。但是在這個過程中,不同的資料所采用的分割政策可能會有所不同,主要的分割政策有三種:

  1. 當訓練樣本線性可分時,通過硬間隔最大化,學習一個線性分類器,即線性可分支援向量機;
  2. 當訓練資料近似線性可分時,引入松弛變量,通過軟間隔最大化,學習一個線性分類器,即線性支援向量機;
  3. 當訓練資料線性不可分時,通過使用核技巧及軟間隔最大化,學習非線性支援向量機。

    2.你知道什麼是支援向量嗎?alpha什麼時候為0什麼時候不為0?

    回答:支援向量的本質其實也是向量。支援向量機是想找到一個分割超平面或者說分類面,使得它所産生的結果是最魯棒的,即對未知執行個體的泛化能力是最強的(這也是支援向量機為什麼采用間隔最大化的原因之一)。而支援向量就是這些支撐分割超平面的資料點,其實就是距離分界線最近的點,或者說分界面就是靠這些資料點來确定的,它們支撐着分界面。 對于邊界上的樣本來說,alpha不等于0,這些邊界上的樣本點屬于支援向量,它們會對最終的結果産生影響。而對于非邊界上的樣本點來說,alpha等于0, 非邊界上的這些樣本點是非支援向量,非支援向量不會對最終的結果産生影響。

    舉個栗子,如在下方的圖形中,A、B、C三點就屬于支援向量,它們的alpha不為0,且支撐着分割超平面。而其它的樣本點的alpha等于0,它們對分割超平面不會造成影響。

    3.請問可以怎麼提高SVM的泛化能力?

    回答:我們知道SVM的限制條件常常會有過拟合(過拟合表現為在訓練集上模型的預測結果很準,但是在未知資料上預測效果卻很差)的風險,而決定分割超平面的是支援向量,如果這些支援向量中存在異常值點,那麼我們還傻兮兮地嚴格按照SVM的定義去訓練模型,那訓練出來的模型效果肯定就不會太好。為了解決這個問題,我們可以使用軟間隔來處理,所謂軟間隔就是為SVM引入了一個松弛變量,使得SVM能夠容忍異常值點的存在。因為引入了松弛變量之後,所有點到分割超平面的距離可以不需要嚴格地大于等于1了,而隻需要>= 1-松弛變量值就可以了。

    舉個例子,如果松弛變量 = 0.1, 那麼資料點到分割超平面的距離隻需要>= 0.9就可以。通過這個方法就可以将異常值轉為非支援向量,将異常值作為一個普通的資料點存在,那麼我們的支援向量和分割超平面就都不會收到它的影響了。(下圖是使用了軟間隔對資料進行分類的可視化結果)

    4.SVM為什麼要引入核函數?

    回答:在現實世界中,不是所有的樣本都是線性可分的,有時候我們也會遇到線性不可分的樣本。如以下情形:

    在這種情況下,想要在二維空間中使用線性分割的方法将紅球與黃球完全分割開似乎是不可能的。

    對于這樣的問題,我們可以将樣本從原始空間映射到一個更高維的特征空間中,使得樣本在這個特征空間中線性可分。我們知道如果原始空間是有限維,即屬性數有限,那麼就一定存在一個高維特征空間能夠将樣本分開。通過将輸入空間映射到了高維的特征空間,可以把平面上不好區分的非線性資料很好地區分開。但是對于映射後的對偶問題,如果我們直接去計算的話會較為難算,為了解決這個問題,才引入了核函數(目的:為了解決映射後難以計算的問題,方法:設想在原始樣本空間中能找到一個函數滿足映射後需要計算的兩個樣本間的特征空間内積)即:

    而目前我們所常用的核函數主要有線性核函數、多項式核函數、高斯核函數、拉普拉斯核函數、Sigmoid核函數。

    當然,引入核函數之後,核函數的選擇就變成了支援向量機中的最大變數了,若核函數的選擇不正确的話,那麼就可能将樣本映射到了一個不合适的特征空間,導緻的後果就很有可能是模型的性能不好。

    (對于核函數這一部分,建議大家可以準備一下各種核函數的使用場景以及核函數的選擇這一塊的内容)

    5.SVM中為什麼會有SMO算法?

    回答:SVM的基本型就是一個凸二次規劃的問題,使用拉格朗日乘子法轉換後所獲得的關于alpha的函數的求解也是一個二次規劃的問題,雖然可以直接使用二次規劃問題的算法來進行求解;但是,該問題(二次規劃問題)的規模正比于訓練樣本數,這會在實際任務中造成很大的開銷,為求出alpha同時為避免通用的二次規劃算法所造成的巨大開銷,才引入了SMO算法。

    (關于SMO,我覺得大家可以準備一下SMO的算法思想、SMO算法優化的終止條件等方面的知識)

    SMO算法實作SVM

    轉自資料挖掘知識點串燒:SVM

    5.SVM有什麼樣的優點跟缺點呢?

    優點:

    • 可以使用核函數将原始資料映射到高維的特征空間上,進而解決非線性的分類問題;

    • SVM的分類思想很簡單,就是将樣本與分類面的間隔最大化

    • SVM的分類效果較好;

    缺點:

    • SVM無法直接支援多分類任務,但是可以通過間接的方法來實作多分類(這點跟邏輯回歸的分類思想很像,間接的多分類方法有一對一、一對其餘、多對多這三種拆分政策);

    • 對某些缺失資料敏感,對核函數的選擇也很敏感

    6.為什麼SVM對缺失資料敏感?

    這裡說的缺失資料是指缺失某些特征資料,向量資料不完整。SVM沒有處理缺失值的政策(決策樹有)。而SVM希望樣本在特征空間中線性可分,是以特征空間的好壞對SVM的性能很重要。缺失特征資料将影響訓練結果的好壞。

    7.LR和SVM的聯系與差別

    相同點

    • ①都是線性分類器。本質上都是求一個最佳分類超平面。

    • ②都是監督學習算法。

    • ③都是判别模型。判别模型不關心資料是怎麼生成的,它隻關心信号之間的差别,然後用差别來簡單對給定的一個信号進行分類。常見的判别模型有:KNN、SVM、LR,常見的生成模型有:樸素貝葉斯,隐馬爾可夫模型。

    差別:

    • LR是參數模型,svm是非參數模型,linear和rbf則是針對資料線性可分和不可分的差別;

    • 從目标函數來看,差別在于邏輯回歸采用的是logistical loss,SVM采用的是hinge loss,這兩個損失函數的目的都是增加對分類影響較大的資料點的權重,減少與分類關系較小的資料點的權重。

    • SVM的處理方法是隻考慮support vectors,也就是和分類最相關的少數點,去學習分類器。而邏輯回歸通過非線性映射,大大減小了離分類平面較遠的點的權重,相對提升了與分類最相關的資料點的權重。

    • 邏輯回歸相對來說模型更簡單,好了解,特别是大規模線性分類時比較友善。而SVM的了解和優化相對來說複雜一些,SVM轉化為對偶問題後,分類隻需要計算與少數幾個支援向量的距離,這個在進行複雜核函數計算時優勢很明顯,能夠大大簡化模型和計算。

    • logic 能做的 svm能做,但可能在準确率上有問題,svm能做的logic有的做不了。

    8.帶核的SVM為什麼能分類非線性問題?

    核函數的本質是兩個函數的內積,通過核函數将其隐射到高維空間,在高維空間非線性問題轉化為線性問題, SVM得到超平面是高維空間的線性分類平面

    9.SVM、LR、決策樹的對比

    模型複雜度:SVM支援核函數,可處理線性非線性問題;LR模型簡單,訓練速度快,适合處理線性問題;決策樹容易過拟合,需要進行剪枝

    損失函數:SVM hinge loss; LR L2正則化; adaboost 指數損失

    資料敏感度:SVM添加容忍度對outlier不敏感,隻關心支援向量,且需要先做歸一化; LR對遠點敏感

    資料量:資料量大就用LR,資料量小且特征少就用SVM非線性核

    10.為什麼要将求解SVM的原始問題轉換為其對偶問題?

  4. 對偶問題往往更易求解(當我們尋找限制存在時的最優點的時候,限制的存在雖然減小了需要搜尋的範圍,但是卻使問題變得更加複雜。為了使問題變得易于處理,我們的方法是把目标函數和限制全部融入一個新的函數,即拉格朗日函數,再通過這個函數來尋找最優點。
  5. 自然引入核函數,進而推廣到非線性分類問題。
  6. (a) 目前處理的模型嚴重依賴于資料集的次元d,如果次元d太高就會嚴重提升運算時間;(b) 對偶問題事實上把SVM從依賴d個次元轉變到依賴N個資料點,考慮到在最後計算時隻有支援向量才有意義,是以這個計算量實際上比N小很多。
  7. SVM如何處理多分類問題?

    一般有兩種做法:一種是直接法,直接在目标函數上修改,将多個分類面的參數求解合并到一個最優化問題裡面。看似簡單但是計算量卻非常的大。

    另外一種做法是間接法:對訓練器進行組合。其中比較典型的有一對一,和一對多。

    一對多,就是對每個類都訓練出一個分類器,由svm是二分類,是以将此而分類器的兩類設定為目标類為一類,其餘類為另外一類。這樣針對k個類可以訓練出k個分類器,當有一個新的樣本來的時候,用這k個分類器來測試,那個分類器的機率高,那麼這個樣本就屬于哪一類。這種方法效果不太好,bias比較高。

    一對一法(one-vs-one),針對任意兩個類訓練出一個分類器,如果有k類,一共訓練出C(2,k) 個分類器,這樣當有一個新的樣本要來的時候,用這C(2,k) 個分類器來測試,每當被判定屬于某一類的時候,該類就加一,最後票數最多的類别被認定為該樣本的類。

    12.如何對SVM進行調參

    核函數的參數:

    1)對于線性核函數,沒有專門需要設定的參數

    2)對于多項式核函數,有三個參數。-d用來設定多項式核函數的最高此項次數,也就是公式中的d,預設值是3。-g用來設定核函數中的gamma參數設定,也就是公式中的第一個r(gamma),預設值是1/k(k是類别數)。-r用來設定核函數中的coef0,也就是公式中的第二個r,預設值是0。

    3)對于RBF核函數,有一個參數。-g用來設定核函數中的gamma參數設定,也就是公式中的第一個r(gamma),預設值是1/k(k是類别數)。

    4)對于sigmoid核函數,有兩個參數。-g用來設定核函數中的gamma參數設定,也就是公式中的第一個r(gamma),預設值是1/k(k是類别數)。-r用來設定核函數中的coef0,也就是公式中的第二個r,預設值是0。

    SVM模型有兩個非常重要的參數C與gamma。

    • 其中 C是懲罰系數,即對誤差的寬容度。c越高,說明越不能容忍出現誤差,容易過拟合。C越小,容易欠拟合。C過大或過小,泛化能力變差

    • gamma是選擇RBF函數作為kernel後,該函數自帶的一個參數。隐含地決定了資料映射到新的特征空間後的分布,gamma越大,支援向量越少,gamma值越小,支援向量越多。支援向量的個數影響訓練與預測的速度。

    Grid Search

    使用grid Search雖然比較簡單,而且看起來很naïve。但是他确實有兩個優點: 可以得到全局最優 (C,gamma)互相獨立,便于并行化進行

    在實際工程應用中,我們需要不斷的調整gamma和c的值,并對資料不斷地進行交叉驗證,使得模型的預測結果更高。此時對應的訓練結果w和b作為svm最終的訓練結果。

    Knn

    1.簡述一下KNN算法的原理

    KNN既可以用于分類,也可以用于回歸。本身沒有顯示的模型訓練,多數情況用于分類算法。KNN算法我們主要要考慮三個重要的要素,對于固定的訓練集,隻要這三點确定了,算法的預測方式也就決定了。這三個最終的要素是k值的選取,距離度量的方式和分類決策規則。

    1,K值的選擇一般選擇一個較小的值,這取決于資料量的大小和資料次元。通常K為3~10.一種常見的做法就是設定K等于訓練集中樣本數量的平方根。但是呢這個不一定有交叉驗    證出來的好,是以呀,資料量不大,在電腦可以跑得動的前提下還是乖乖用交叉驗證吧。

    選擇較小的k值,就相當于用較小的領域中的訓練執行個體進行預測,訓練誤差會減小,隻有與輸入執行個體較近或相似的訓練執行個體才會對預測結果起作用,與此同時帶來的問題是泛化誤差會增大,換句話說,K值的減小就意味着整體模型變得複雜,容易發生過拟合;

       選擇較大的k值,就相當于用較大領域中的訓練執行個體進行預測,其優點是可以減少泛化誤差,但缺點是訓練誤差會增大。這時候,與輸入執行個體較遠(不相似的)訓練執行個體也會對預測器作用,使預測發生錯誤,且K值的增大就意味着整體的模型變得簡單。

    一個極端是k等于樣本數m,則完全沒有分類,此時無論輸入執行個體是什麼,都隻是簡單的預測它屬于在訓練執行個體中最多的類,模型過于簡單。

    2,距離度量的方式有很多,歐式距離是闵可夫斯基距離距離在p=2時的特例,而曼哈頓距離是p=1時的特例。不做詳細接招

    3,決策規則,在分類中一般用投票,回歸中一般用均值。

    KNN的暴力破解法:在預測樣本的時候,将計算預測樣本和所有訓練集中的樣本的距離,然後計算出最小的k個距離即可,接着多數表決,很容易做出預測。這個方法的确簡單直接,在樣本量少,樣本特征少的時候有效。但是在實際運用中很多時候用不上,為什麼呢?因為我們經常碰到樣本的特征數有上千以上,樣本量有幾十萬以上,如果我們這要去預測少量的測試集樣本,算法的時間效率很成問題。是以,這個方法我們一般稱之為蠻力實作。比較适合于少量樣本的簡單模型的時候用。

    2.KNN算法有哪些優點和缺點?

    優:1,該算法比較适用于樣本容量比較大的類域的自動分類,而那些樣本容量較小的類域采用這種算法比較容易産生誤分

    2,由于KNN方法主要靠周圍有限的鄰近的樣本,而不是靠判别類域的方法來确定所屬類别的,是以對于類域的交叉或重疊較多的待分樣本集來說,KNN方法較其他方法更為适合

    3,可用于非線性分類

    4, 訓練時間複雜度比支援向量機之類的算法低,僅為O(n)

    5,和樸素貝葉斯之類的算法比,對資料沒有假設,準确度高,對異常點不敏感

    缺:1,計算量大,尤其是特征數非常多的時候

    2,樣本不平衡的時候,對稀有類别的預測準确率低

    3,KD樹,球樹之類的模型建立需要大量的記憶體

    4,使用懶散學習方法,基本上不學習,導緻預測時速度比起邏輯回歸之類的算法慢

      5,相比決策樹模型,KNN模型可解釋性不強

    3.k-d樹實作原理

      參考K近鄰法(KNN)原理小結

      缺點: 如果執行個體點是随機分布的,那麼kd樹搜尋的平均計算複雜度是O(logN),這裡的N是訓練執行個體樹。是以說,kd樹更适用于訓練執行個體數遠大于空間維數時的k近鄰搜尋,當空間維數接近訓練執行個體數時,它的效率會迅速下降,一降降到“解放前”:線性掃描的速度。 也正因為上述k最近鄰搜尋算法的第4個步驟中的所述:“回退到根結點時,搜尋結束”,每個最近鄰點的查詢比較完成過程最終都要回退到根結點而結束,而導緻了許多不必要回溯通路和比較到的結點,這些多餘的損耗在高次元資料查找的時候,搜尋效率将變得相當之低下

    4.基于k-d樹缺點改進的BBF算法

    BBF算法是在k-d樹建立好的基礎上,在我們搜尋的過程中加入一個隊列。

    為了便于說明,這裡例一個簡單的例子

    以上面的查詢(2,4.5)為例,搜尋的算法流程為:

      1,将(7,2)壓人優先隊列中;

      2,提取優先隊列中的(7,2),由于(2,4.5)位于(7,2)分割超平面的左側,是以檢索其左子結點(5,4)。同時,根據BBF機制”搜尋左/右子樹,就把對應這一層的兄弟結點即右/左結點存進隊列”,将其(5,4)對應的兄弟結點即右子結點(9,6)壓人優先隊列中,此時優先隊列為{(9,6)},最佳點為(7,2);然後一直檢索到葉子結點(4,7),此時優先隊列為{(2,3),(9,6)},“最佳點”則為(5,4);

      3,提取優先級最高的結點(2,3),重複步驟2,直到優先隊列為空。

       5.不平衡的樣本可以給KNN的預測結果造成哪些問題,有沒有什麼好的解決方式?

    • 輸入執行個體的K鄰近點中,大數量類别的點會比較多,但其實可能都離執行個體較遠,這樣會影響最後的分類。

    • 可以使用權值來改進,距執行個體較近的點賦予較高的權值,較遠的賦予較低的權值。

    • 樣本不平衡的時候,對稀有類别的預測準确率低。有時候我們會遇到這樣的問題,即樣本中某系類别的樣本非常的少,甚至少于K,這導緻稀有類别樣本在找K個最近鄰的時候,會把距離其實較遠的其他

    • 樣本考慮進來,而導緻預測不準确。為了解決這個問題,我們限定最近鄰的一個最大距離,也就是說,我們隻在一個距離範圍内搜尋所有的最近鄰,這避免了上述問題。這個距離我們一般稱為限定半徑。

    6.為了解決KNN算法計算量過大的問題,可以使用分組的方式進行計算,簡述一下該方式的原理。

    • 先将樣本按距離分解成組,獲得質心,然後計算未知樣本到各質心的距離,選出距離最近的一組或幾組,再在這些組内引用KNN。

    • 本質上就是事先對已知樣本點進行剪輯,事先去除對分類作用不大的樣本,該方法比較适用于樣本容量比較大時的情況。

    7.KD樹建立過程中切分次元的順序是否可以優化?

    可以先對每一次元求方差,方差大說明資料分布越分散,則從方差大的次元來逐漸切分,可以取得更好的切分效果及樹的平衡性。

    8.KD樹每一次繼續切分都要計算該子區間在需切分次元上的中值,計算量很大,有什麼方法可以對其進行優化?

    在建構KD樹前,依據每一次元先排序,在之後的切分中直接使用

    9.為了防止某一次元的資料較大(50,100),而另外一次元的資料較小(0.1,0.2)而産生的距離計算的問題,需要進行歸一化。

    10.KNN總結

    • 1.對異常資料不敏感。

    • 2.可以用來做分類也可以用來做回歸

    • 3.可用于非線性分類

    • 4.使用懶散學習方法,基本上不學習,導緻預測時速度比起邏輯回歸之類的算法慢

    • 5.計算量大,尤其是特征數非常多的時候

    • 6.樣本不平衡的時候,對稀有類别的預測準确率低

    • 7.KD樹,球樹之類的模型建立需要大量的記憶體

    • 8.相比決策樹模型,KNN模型可解釋性不強

    11.簡述KNN最近鄰分類算法的過程?

    • 計算測試樣本和訓練樣本中每個樣本點的距離(常見的距離度量有歐式距離,馬氏距離等);

    • 對上面所有的距離值進行排序;

    • 選前 k 個最小距離的樣本;

    • 根據這 k 個樣本的标簽進行投票,得到最後的分類類别;

    Kmeans

    聚類

    分類(class)與聚類(cluster)不同,分類是有監督學習模型,聚類屬于無監督學習模型。聚類講究使用一些算法把樣本劃分為n個群落。一般情況下,這種算法都需要計算歐氏距離。

    歐氏距離即歐幾裡得距離。

    P ( x 1 ) − Q ( x 2 ) : ∣ x 1 − x 2 ∣ = ( x 1 − x 2 ) 2 P ( x 1 , y 1 ) − Q ( x 2 , y 2 ) : ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 P ( x 1 , y 1 , z 1 ) − Q ( x 2 , y 2 , z 2 ) : ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 + ( z 1 − z 2 ) 2 P(x_1) - Q(x_2): |x_1-x_2| = \sqrt{(x_1-x_2)^2} \ P(x_1,y_1) - Q(x_2,y_2): \sqrt{(x_1-x_2)2+(y_1-y_2)2} \ P(x_1,y_1,z_1) - Q(x_2,y_2,z_2): \sqrt{(x_1-x_2)2+(y_1-y_2)2+(z_1-z_2)^2} \P(x1)−Q(x2):∣x1−x2∣=(x1−x2)2P(x1,y1)−Q(x2,y2):(x1−x2)2+(y1−y2)2P(x1,y1,z1)−Q(x2,y2,z2):(x1−x2)2+(y1−y2)2+(z1−z2)2

    用兩個樣本對應特征值之差的平方和之平方根,即歐氏距離,來表示這兩個樣本的相似性。

    K均值算法

    第一步:随機選擇k個樣本作為k個聚類的中心,計算每個樣本到各個聚類中心的歐氏距離,将該樣本配置設定到與之距離最近的聚類中心所在的類别中。

    第二步:根據第一步所得到的聚類劃分,分别計算每個聚類的幾何中心,将幾何中心作為新的聚類中心,重複第一步,直到計算所得幾何中心與聚類中心重合或接近重合為止。

    注意:

  8. 聚類數k必須事先已知。借助某些評估名額,優選最好的聚類數。
  9. 聚類中心的初始選擇會影響到最終聚類劃分的結果。初始中心盡量選擇距離較遠的樣本。

    以下原文連結https://blog.csdn.net/hua111hua/article/details/86556322

    1.K-means中常用的到中心距離的度量有哪些?

    K-means中比較常用的距離度量是歐幾裡得距離和餘弦相似度。

    第一種:歐幾裡得距離,最常見的兩點之間或多點之間的距離表示法,又稱之為歐幾裡得度量,它定義于歐幾裡得空間中,N維歐式空間中兩點x1和x2間的距離公式:

第二種:餘弦相似度,餘弦相似度用向量空間中兩個向量夾角的餘弦值作為衡量兩個個體間差異的大小。相比距離度量,餘弦相似度更加注重兩個向量在方向上的差異,而非距離或者長度上。下圖表示餘弦相似度的餘弦是哪個角的餘弦,A,B是三維空間中的兩個向量,這兩個點與三維空間原點連線形成的交,如果角度越小,說明這兩個向量在方向上越接近,在聚類時就歸成一類。

2.kmeans聚類中,如何确定k的大小?

轉自AI商學院kmeans聚類中,如何确定k的大小?

1 )按需選擇

簡單地說就是按照模組化的需求和目的來選擇聚類的個數。比如說,一個遊戲公司想把所有玩家做聚類分析,分成頂級、進階、中級、菜鳥四類,那麼K=4;如果房地産公司想把當地的商品房分成高中低三檔,那麼K=3。

按需選擇雖然合理,但是未必能保證在做K-Means時能夠得到清晰的分界線。

2) 觀察法

就是用肉眼看,看這些點大概聚成幾堆。這個方法雖然簡單,但是同時也模棱兩可。

第一張是原始點,第二張分成了兩類,第三張是三類,第四張是四類。至于K到底是選3還是選4,可能每個人都有不同的選擇。

觀察法的另一個缺陷就是:原始資料維數要低,一般是兩維(平面散點)或者三維(立體散點),否則人類肉眼則無法觀察。

對于高維資料,我們通常利用PCA降維,然後再進行肉眼觀察。

3)手肘法Elbow Method

手肘法本質上也是一種間接的觀察法。這裡需要一點K-Means的背景知識。當K-Means算法完成後,我們将得到K個聚類的中心點Mi,i=1,2,⋯,Ki=1,2,⋯,K。

以及每個原始點所對應的聚類Ci,i=1,2,⋯,K。我們通常采用所有樣本點到它所在的聚類的中心點的距離的和作為模型的度量,記為DK。

這裡距離可以采用歐式距離。

對于不同的K,最後我們會得到不同的中心點和聚類,所有會有不同的度量。我們把K作為橫坐标,DK作為縱坐标,可以得到下面的折線。

很顯然K越大,距離和越小。

但是我們注意到K=3是一個拐點,就像是我們的肘部一樣,K=1到3下降很快,K=3之後趨于平穩。

手肘法認為這個拐點就是最佳的K。

換句話說,曲線類似于人的手肘,“肘關節”部分對應的 K 值就是最恰當的 K 值。

04Gap Statistic法

這個方法是源自斯坦福幾個machine learning大牛的paper Estimating the number of clusters in a data set via the gap statistic 。

這裡我們要繼續使用上面的DK,Gap Statistic的定義為:

這裡E(logDk)指的是logDk的期望。

這個數值通常通過蒙特卡洛模拟産生,我們在樣本裡所在的矩形區域中(高維的話就是立方體區域)按照均勻分布随機地産生和原始樣本數一樣多的随機樣本,并對這個随機樣本做K-Means,進而得到一個DK。

如此往複多次,通常20次,我們可以得到20個logDK。對這20個數值求平均值,就得到了E(logDK)的近似值。最終可以計算Gap Statisitc。而Gap statistic取得最大值所對應的K就是最佳的K。

用上圖的例子,我們計算了K=1,2,…9對應的Gap Statisitc.

Gap Statistic的優點是,我們不再需要肉眼了。我們隻需要找到最大gap statistic所對應的K即可。

是以這種方法也适用于“批量化作業”,如果我們要做1000次聚類分析,不需要肉眼去看1000次了。

輪廓系數法

使用輪廓系數法評估分類品質,選擇分類品質最好的K值

5)穩定性方法

對一個資料集進行2次重采樣産生2個資料子集,再用相同的聚類算法對2個資料自己進行聚類,産生2個具有K個聚類的聚類結果,計算2個聚類結果的相似度的分布情況。2個聚類結果具有高的相似度說明K個聚類反映了穩定的聚類結構,其相似度可以用來評估聚類個數。采用此方法試探多個K,找到合适的K值。

6)與層次聚類結合

首先采用層次聚類算法決定結果簇的數目,并找到一個初始聚類,然後用疊代重定位來改進該聚類。

7)Canopy Method

• stage1:聚類最耗費計算的地方是計算對象相似性的時候,Canopy

Method在第一階段選擇簡單,計算代價較低的方法計算對象相似性,将相似的對象放在一個子集中,這個子集被叫做Canopy,通過一系列計算得到若幹Canopy,Canopy之間是可以重疊的,但不會存在某個對象不屬于任何Canopy的情況,可以把這一階段看成是預處理。

• stage2:在各個Canopy内使用傳統的聚類方法(如K-means),不屬于同一Canopy的對象之間不進行相似性計算。

從這個方法起碼可以看出兩點好處:首先,Canopy不要太大且Canopy之間重疊的不要太多的話會大大減少後續所需要計算相似性的對象的個數;其次,類似于K-means這樣的聚類方法是需要人為指出K的值的,通過stage1得到額Canopy個數完全可以作為這個K值,一定程度上減少了這個選擇k的盲目性。

3.K-means聚類中每個類别中心的初始點如何選擇?

1)随機法

最簡單的确定初始類簇中心點的方法是随機選擇K個點作為初始的類簇中心點。

2)選擇各批次距離盡可能遠的k個點,首先随機選擇一個點作為第一個初始類簇中心點,然後選擇距離該點最遠的那個點作為第二個初始類簇中心點,然後再選擇距離前兩個點的最近距離最大的點作為第三個初始類簇的中心點,以此類推,直到選出k個初始類簇中心。

3)層次聚類或者Canopy預處理,選擇中心點。選用層次聚類或者Canopy算法進行初始聚類,然後利用這些類簇的中心點作為Kmeans算法初始類簇中心點。

4.K-means中空聚類的處理

如果所有的點在指派步驟都未配置設定到某個簇,就會得到空簇。如果這種情況發生,則需要某種政策來選擇一個替補質心,否則的話,平方誤差将會偏大。一種方法是選擇一個距離目前任何質心最遠的點。這将消除目前對總平方誤差影響最大的點。另一種方法是從具有最大SEE的簇中選擇一個替補的質心。這将分裂簇并降低聚類的總SEE。如果有多個空簇,則該過程重複多次。另外程式設計實作時,要注意空簇可能導緻的程式bug。

5.K-means是否會一直陷入選擇質心的循環停不下來?

不會,有數學證明Kmeans一定會收斂,大概思路是利用SSE的概念(也就是誤差平方和),即每個點到自身所歸屬質心的距離的平方和,這個平方和是一個凸函數,通過疊代一定可以到達它的局部最優解。(不一定是全局最優解)

6.如何快速收斂資料量超大的K-means?

K-means算法是常用的聚類算法,但其算法本身存在一定的問題。例如,在大資料量下的計算時間過長就是一個重要問題。

Mini Batch Kmeans使用了一種叫做Mini Batch(分批處理)的方法對資料點之間的距離進行計算。Mini Batch的好處是計算過程中不必使用所有的資料樣本,而是從不同類别的樣本中抽取一部分樣本來代表各自類型進行計算。由于計算樣本數量少,是以會相應的減少運作時間,但另一方面抽樣頁必然會帶來準确度的下降。

該算法的疊代步驟有兩步:

1)從資料集中随機抽取一些資料形成小批量,把他們配置設定給最近的質心

2)更新質心:與k均值算法相比,資料的更新是在每一個小的樣本集上。對于每一個小批量,通過計算平均值得到更新質心,并把小批量裡的資料配置設定給該質心,随着疊代次數的增加,這些質心的變化是逐漸減小的,直到質心穩定或者達到指定的疊代次數,停止計算。

7.K-means算法的優點和缺點是什麼?

K-means算法試圖找到使誤差平方和最小的簇。當潛在的簇形狀是凸面(即球形)的,簇與簇之間差別較明顯,且簇大小相近時,其聚類結果較理想。對于處理大資料集合,該算法非常高效,且伸縮性較好。

但該算法除了要事先确定簇數K和對初始聚類中心敏感外,經常以局部最優結束,同時對“噪聲”和孤立點敏感,并且該方法不适于發現非凸面形狀的簇或者大小差别很大的簇。

8.如何對K-means聚類效果進行評估?

輪廓系數

好的聚類:内密外疏,同一個聚類内部的樣本要足夠密集,不同聚類之間樣本要足夠疏遠。

輪廓系數計算規則:針對樣本空間中的一個特定樣本,計算它與所在聚類其它樣本的平均距離a,以及該樣本與距離最近的另一個聚類中所有樣本的平均距離b,該樣本的輪廓系數為(b-a)/max(a, b),将整個樣本空間中所有樣本的輪廓系數取算數平均值,作為聚類劃分的性能名額s。

輪廓系數的區間為:[-1, 1]。 -1代表分類效果差,1代表分類效果好。0代表聚類重疊,沒有很好的劃分聚類。比較低,内密外不夠疏

9.K-Means與KNN有什麼差別

• 1)KNN是分類算法,K-means是聚類算法;

• 2)KNN是監督學習,K-means是非監督學習

• 3)KNN喂給它的資料集是帶Label的資料,已經是完全正确的資料,K-means喂給它的資料集是無label的資料,是雜亂無章的,經過聚類後才變得有點順序,先無序,後有序。

• 4)KNN沒有明顯的前期訓練過程,K-means有明顯的前期訓練過程

• 5)K的含義KNN來了一個樣本x,要給它分類,即求出它的y,就從資料集中,在X附近找距離它最近的K個資料點,這K個資料點,類别C占的個數最多,就把x的label設為c.

• K-means中K是人工固定好的數字,假設資料集合可以分為k個簇,由于是依靠人工定好,需要一些先驗知識。

PCA

1.PCA降維

降維的必要性

  1. 多重共線性–預測變量之間互相關聯。多重共線性會導緻解空間的不穩定,進而可能導緻結果的不連貫。
  2. 高維空間本身具有稀疏性。一維正态分布有68%的值落于正負标準差之間,而在十維空間上隻有0.02%。
  3. 過多的變量會妨礙查找規律的建立。
  4. 僅在變量層面上分析可能會忽略變量之間的潛在聯系。例如幾個預測變量可能落入僅反映資料某一方面特征的一個組内。

    降維的目的:

  5. 減少預測變量的個數
  6. 確定這些變量是互相獨立的
  7. 提供一個架構來解釋結果 降維的方法有:主成分分析、因子分析、使用者自定義複合等。
  8. PCA(Principal Component Analysis)不僅僅是對高維資料進行降維,更重要的是經過降維去除了噪聲,發現了資料中的模式。

    原文連結:https://blog.csdn.net/forest_world/article/details/50926055

1.用于:特征降維,去除備援和可分性不強的特征;

2.目标:降維後的各個特征不相關,即特征之間的協方差為0;

3.原理:基于訓練資料X的協方差矩陣的特征向量組成的k階矩陣U,通過XU得到降維後的k階矩陣Z;因為矩陣的乘積可以看作成線性變化,是以我們找到u就可以用它來降維

4.實體意義:方差越大,熵越大,特征所含的資訊越多

5.算法步驟

計算訓練樣本的協方差矩陣C;

計算C的特征值和特征向量;

将C的特征值降序排列,特征值對應特征向量也依次排列;

假如要得到X的k階降維矩陣,選取C的前k個特征{u1,u2…uk},組成降維轉換矩陣U;

Z = XU,Z即為降維後的矩陣;

主成分分析

2.PCA為什麼要用協方差矩陣的特征向量矩陣來做投影矩陣呢?

降維的目的就是“降噪”和“去備援”。

“降噪”的目的就是使保留下來的次元間的相關性盡可能小,而“去備援”的目的就是使保留下來的次元含有的“能量”即方差盡可能大。

我們要最大化方差來保留更多的資訊。去噪。

有趣的是,協方差矩陣能同時表現不同次元間的相關性以及各個次元上的方差。

協方差矩陣度量的是次元與次元之間的關系,而非樣本與樣本之間。協方差矩陣的主對角線上的元素是各個次元上的方差(即能量),其他元素是兩兩次元間的協方差(即相關性)。

先看“降噪”,讓保留下的不同次元間的相關性盡可能小,也就是說讓協方差矩陣中非對角線元素都基本為零。達到這個目的的方式——矩陣對角化。

再看“去備援”,對角化後的協方差矩陣,對角線上較小的新方差對應的就是那些該去掉的次元。我們隻取那些含有較大能量(特征值)的次元,其餘的就舍掉即可。

原文連結:https://blog.csdn.net/qq1376725255/article/details/84996725

3.給你一個資料集。該資料集包含很多變量,你知道其中一些是高度相關的。經理要求你用PCA。你會先去掉相關的變量嗎?為什麼?

丢棄相關變量會對PCA有實質性的影響,因為有相關變量的存在,由特定成分解釋的方差被放大。

例如:在一個資料集有3個變量,其中有2個是相關的。如果在該資料集上用PCA,第一主成分的方差會是與其不相關變量的差異的兩倍。此外,加入相關的變量使PCA錯誤地提高那些變量的重要性,這是有誤導性的。

4.在PCA中有必要做旋轉變換嗎?如果有必要,為什麼?如果你沒有旋轉變換那些成分,會發生什麼情況?

是的,旋轉(正交)是必要的,因為它把由主成分捕獲的方差之間的差異最大化。這使得主成分更容易解釋。但是不要忘記我們做PCA的目的是選擇更少的主成分(與特征變量個數相較而言),那些選上的主成分能夠解釋資料集中最大方差。

通過做旋轉,各主成分的相對位置不發生變化,它隻能改變點的實際坐标。如果我們沒有旋轉主成分,PCA的效果會減弱,那樣我們會不得不選擇更多個主成分來解釋資料集裡的方差。

樸素貝葉斯

1.什麼是貝葉斯決策論?

貝葉斯決策論是機率架構下實施決策的基本方法。要了解貝葉斯決策論,首先得先了解以下幾個概念:先驗機率、條件機率、後驗機率、誤判損失、條件風險、貝葉斯判别準則。

先驗機率: 所謂先驗機率,就是根據以往的經驗或者現有資料的分析所得到的機率。如,随機扔一枚硬币,則p(正面) = p(反面) = 1/2,這是我們根據已知的知識所知道的資訊,即p(正面) = 1/2為先驗機率。

條件機率: 所謂條件機率是指事件A在另一事件B發生的條件下發送的機率。用數學符号表示為:P(B|A),即B在A發生的條件下發生的機率。舉個栗子,你早上誤喝了一瓶過期了的牛奶(A),那我們來算一下你今天拉肚子的機率(B),這個就叫做條件機率。即P(拉肚子|喝了過期牛奶), 易見,條件機率是有因求果(知道原因推測結果)。

後驗機率: 後驗機率跟條件機率的表達形式有點相似。數學表達式為p(A|B), 即A在B發生的條件下發生的機率。以誤喝牛奶的例子為例,現在知道了你今天拉肚子了(B),算一下你早上誤喝了一瓶過期了的牛奶(A)的機率, 即P(A|B),這就是後驗機率,後驗機率是有果求因(知道結果推出原因)

誤判損失:

數學表達式:L(j|i),

判别損失表示把一個标記為i類的樣本誤分類為j類所造成的損失。

比如,當你去參加體檢時,明明你各項名額都是正常的,但是醫生卻把你分為癌症病人,這就造成了誤判損失,用數學表示為:L(癌症|正常)。

條件風險: 是指基于後驗機率P(i|x)可獲得将樣本x分類為i所産生的期望損失,公式為:R(i|x) = ∑L(i|j)P(j|x)。(其實就是所有判别損失的權重和,而這個權就是樣本判為j類的機率,樣本本來應該含有P(j|x)的機率判為j類,但是卻判為了i類,這就造成了錯判損失,而将所有的錯判損失與正确判斷的機率的乘積相加,就能得到樣本錯判為i類的平均損失,即條件風險。)

舉個栗子,假設把癌症病人判為正常人的誤判損失是100,把正常人判為癌症病人的誤判損失是10,把感冒病人判為癌症的誤判損失是8,即L(正常|癌症) = 100, L(癌症|正常) = 10,L(癌症|感冒) = 8, 現在,我們經過計算知道有一個來體檢的員工的後驗機率分别為:p(正常|各項名額) = 0.2, p(感冒|各項名額) = 0.4, p( 癌症|各項名額)=0.4。假如我們需要計算将這個員工判為癌症的條件風險,則:R(癌症|各項名額) = L(癌症|正常)* p(正常|各項名額) + L(癌症|感冒) * p(感冒|各項名額) = 5.2。

貝葉斯判别準則: 貝葉斯判别準則是找到一個使條件風險達到最小的判别方法。即,将樣本判為哪一類,所得到的條件風險R(i|x)(或者說平均判别損失)最小,那就将樣本歸為那個造成平均判别損失最小的類。

此時:h*(x) = argminR(i|x) 就稱為 貝葉斯最優分類器。

總結:貝葉斯決策論是基于先驗機率求解後驗機率的方法,其核心是尋找一個判别準則使得條件風險達到最小。而在最小化分類錯誤率的目标下,貝葉斯最優分類器又可以轉化為求後驗機率達到最大的類别标記,即 h*(x) = argmaxP(i|x)。(此時,L(i|j) = 0, if i = j;L(i|j) = 1, otherwise)

2.你知道什麼叫做樸素貝葉斯嗎?

樸素貝葉斯采用 屬性條件獨立性 的假設,對于給定的待分類觀測資料X,計算在X出現的條件下,各個目标類出現的機率(即後驗機率),将該後驗機率最大的類作為X所屬的類。而計算後驗機率的貝葉斯公式為:p(A|B) =[ p(A) * p(B|A)]/p(B),因為p(B)表示觀測資料X出現的機率,它在所有關于X的分類計算公式中都是相同的,是以我們可以把p(B)忽略,則 p(A|B)= p(A) * p(B|A)。

舉個栗子,公司裡面男性有60人,女性有40人,男性穿皮鞋的人數有25人,穿運動鞋的人數有35人,女性穿皮鞋的人數有10人,穿高跟鞋的人數有30人。現在你隻知道有一個人穿了皮鞋,這時候你就需要推測他的性别是什麼。如果推測出他是男性的機率大于女性,那麼就認為他是男性,否則認為他是女性。(如果此時條件允許,你可以現場給面試官示範一下怎麼計算, 計算過程如下:

在這裡插入圖檔描述因為0.2502>0.1, 是以我們可以認為這個人是男性)

在這裡插入圖檔描述3.樸素貝葉斯中的“樸素”怎麼了解?

樸素貝葉斯中的樸素可以了解為是“簡單、天真”的意思,因為“樸素”是假設了特征之間是同等重要、互相獨立、互不影響的,但是在我們的現實社會中,屬性之間并不是都是互相獨立的,有些屬性也會存在性,是以說樸素貝葉斯是一種很“樸素”的算法。

4.樸素貝葉斯有什麼優缺點?

優點

樸素貝葉斯模型發源于古典數學理論,有穩定的分類效率。

對缺失資料不太敏感,算法也比較簡單,常用于文本分類。

分類準确度高,速度快。

對小規模的資料表現很好,能處理多分類任務,适合增量式訓練,當資料量超出記憶體時,我們可以一批批的去增量訓練(樸素貝葉斯在訓練過程中隻需要計算各個類的機率和各個屬性的類條件機率,這些機率值可以快速地根據增量資料進行更新,無需重新全量計算)。

缺點:

對訓練資料的依賴性很強,如果訓練資料誤差較大,那麼預測出來的效果就會不佳。

理論上,樸素貝葉斯模型與其他分類方法相比具有最小的誤差率。

但是在實際中,因為樸素貝葉斯“樸素,”的特點,導緻在屬性個數比較多或者屬性之間相關性較大時,分類效果不好。

而在屬性相關性較小時,樸素貝葉斯性能最為良好。

對于這一點,有半樸素貝葉斯之類的算法通過考慮部分關聯性适度改進。

需要知道先驗機率,且先驗機率很多時候是基于假設或者已有的訓練資料所得的,這在某些時候可能會因為假設先驗機率的原因出現分類決策上的錯誤。

5.“樸素”是樸素貝葉斯在進行預測時候的缺點,那麼有這麼一個明顯的假設缺點在,為什麼樸素貝葉斯的預測仍然可以取得較好的效果?

對于分類任務來說,隻要各個條件機率之間的排序正确,那麼就可以通過比較機率大小來進行分類,不需要知道精确的機率值(樸素貝葉斯分類的核心思想是找出後驗機率最大的那個類,而不是求出其精确的機率)

如果屬性之間的互相依賴對所有類别的影響相同,或者互相依賴關系可以互相抵消,那麼屬性條件獨立性的假設在降低計算開銷的同時不會對分類結果産生不良影響。

6.樸素貝葉斯中有沒有超參數可以調?

樸素貝葉斯是沒有超參數可以調的,是以它不需要調參,樸素貝葉斯是根據訓練集進行分類,分類出來的結果基本上就是确定了的,拉普拉斯估計器不是樸素貝葉斯中的參數,不能通過拉普拉斯估計器來對樸素貝葉斯調參。

7.樸素貝葉斯中有多少種模型?

樸素貝葉斯含有3種模型,分别是高斯模型,對連續型資料進行處理;多項式模型,對離散型資料進行處理,計算資料的條件機率(使用拉普拉斯估計器進行平滑的一個模型);伯努利模型,伯努利模型的取值特征是布爾型,即出現為ture,不出現為false,在進行文檔分類時,就是一個單詞有沒有在一個文檔中出現過。

8.你知道樸素貝葉斯有哪些應用嗎?

樸素貝葉斯的應用最廣的應該就是在文檔分類、垃圾文本過濾(如垃圾郵件、垃圾資訊等)、情感分析(微網誌、論壇上的積極、消極等情緒判别)這些方面,除此之外還有多分類實時預測、推薦系統(貝葉斯與協同過濾組合使用)、拼寫矯正(當你輸入一個錯誤單詞時,可以通過文檔庫中出現的機率對你的輸入進行矯正)等。

9.你覺得樸素貝葉斯對異常值敏不敏感?

樸素貝葉斯對異常值不敏感。是以在進行資料處理時,我們可以不去除異常值,因為保留異常值可以保持樸素貝葉斯算法的整體精度,而去除異常值則可能在進行預測的過程中由于失去部分異常值導緻模型的泛化能力下降。

你覺得樸素貝葉斯對缺失值敏不敏感?

樸素貝葉斯是一種對缺失值不敏感的分類器,樸素貝葉斯算法能夠處理缺失的資料,在算法的模組化時和預測時資料的屬性都是單獨處理的。是以如果一個資料執行個體缺失了一個屬性的數值,在模組化時将被忽略,不影響類條件機率的計算,在預測時,計算資料執行個體是否屬于某類的機率時也将忽略缺失屬性,不影響最終結果。

10.樸素貝葉斯是高方差還是低方差模型?

樸素貝葉斯是低方差模型。(誤差 = 偏差 + 方差)對于複雜模型來說,由于複雜模型充分拟合了部分資料,使得它們的偏差變小,但由于對部分資料過分拟合,這就導緻預測的方差會變大。因為樸素貝葉斯假設了各個屬性之間是互相的,算是一個簡單的模型。對于簡單的模型來說,則恰恰相反,簡單模型的偏差會更大,相對的,方差就會較小。(偏差是模型輸出值與真實值的誤差,也就是模型的精準度,方差是預測值與模型輸出期望的的誤差,即模型的穩定性,也就是資料的集中性的一個名額)

11.樸素貝葉斯為什麼适合增量計算?

因為樸素貝葉斯在訓練過程中實際隻需要計算出各個類别的機率和各個特征的類條件機率,這些機率值可以快速的根據增量資料進行更新,無需重新全量訓練,是以其十分适合增量計算,該特性可以使用在超出記憶體的大量資料計算和按小時級等擷取的資料計算中。

12.樸素貝葉斯與 LR 差別?

樸素貝葉斯是生成模型,LR是判别模型

樸素貝葉斯是基于很強的條件獨立假設(在已知分類Y的條件下,各個特征變量取值是互相獨立的),而 LR 則對此沒有要求

樸素貝葉斯适用于資料集少的情景,而LR适用于大規模資料集。

13.高度相關的特征對樸素貝葉斯有什麼影響?

假設有兩個特征高度相關,相當于該特征在模型中發揮了兩次作用(計算兩次條件機率),使得樸素貝葉斯獲得的結果向該特征所希望的方向進行了偏移,影響了最終結果的準确性,是以樸素貝葉斯算法應先處理特征,把相關特征去掉。

常見分類算法的優缺點

貝葉斯分類法

優點:

1)所需估計的參數少,對于缺失資料不敏感。

2)有着堅實的數學基礎,以及穩定的分類效率。

缺點:

1)假設屬性之間互相獨立,這往往并不成立。(喜歡吃番茄、雞蛋,卻不喜歡吃番茄炒蛋)。

2)需要知道先驗機率。

3)分類決策存在錯誤率。

決策樹

優點:

1)不需要任何領域知識或參數假設。

2)适合高維資料。

3)簡單易于了解。

4)短時間内處理大量資料,得到可行且效果較好的結果。

5)能夠同時處理資料型和正常性屬性。

缺點:

1)對于各類别樣本數量不一緻資料,資訊增益偏向于那些具有更多數值的特征。

2)易于過拟合。

3)忽略屬性之間的相關性。

4)不支援線上學習。

支援向量機

優點:

1)可以解決小樣本下機器學習的問題。

2)提高泛化性能。

3)可以解決高維、非線性問題。超高維文本分類仍受歡迎。

4)避免神經網絡結構選擇和局部極小的問題。

缺點:

1)對缺失資料敏感。

2)記憶體消耗大,難以解釋。

3)運作和調參略煩人。

K近鄰

優點:

1)思想簡單,理論成熟,既可以用來做分類也可以用來做回歸;

2)可用于非線性分類;

3)訓練時間複雜度為O(n);

4)準确度高,對資料沒有假設,對outlier不敏感;

缺點:

1)計算量太大

2)對于樣本分類不均衡的問題,會産生誤判。

3)需要大量的記憶體。

4)輸出的可解釋性不強。

Logistic回歸

優點:

1)速度快。

2)簡單易于了解,直接看到各個特征的權重。

3)能容易地更新模型吸收新的資料。

4)如果想要一個機率架構,動态調整分類閥值。

缺點:

特征處理複雜。需要歸一化和較多的特征工程。

神經網絡

優點:

1)分類準确率高。

2)并行處理能力強。

3)分布式存儲和學習能力強。

4)魯棒性較強,不易受噪聲影響。

缺點:

1)需要大量參數(網絡拓撲、閥值、門檻值)。

2)結果難以解釋。

3)訓練時間過長。

Adaboost

優點:

1)adaboost是一種有很高精度的分類器。

2)可以使用各種方法建構子分類器,Adaboost算法提供的是架構。

3)當使用簡單分類器時,計算出的結果是可以了解的。而且弱分類器構造極其簡單。

4)簡單,不用做特征篩選。

5)不用擔心overfitting。

缺點:

對outlier比較敏感

原文連結:https://www.julyedu.com/question/topic_list/23

随機森林

優點:

1)可以處理高維資料,不同進行特征選擇(特征子集是随機選擇)

2)模型的泛化能力較強

3)訓練模型時速度快,成并行化方式,即樹之間互相獨立

4)模型可以處理不平衡資料,平衡誤差

5)最終訓練結果,可以對特種額排序,選擇比較重要的特征

6)随機森林有袋外資料(OOB),是以不需要單獨劃分交叉驗證集

7)對缺失值、異常值不敏感

8)模型訓練結果準确度高

9)相對Bagging能夠收斂于更小的泛化誤差

缺點:

1)當資料噪聲比較大時,會産生過拟合現象

2) 對有不同取值的屬性的資料,取值劃分較多的屬性會對随機森林産生更大的影響