下面介紹的這幾種算法,既能用于回歸問題又能用于分類問題,接下來了解下吧。
決策樹
可參考:
決策樹(Decision Tree) | 菜鳥教程
決策樹(Decision Tree)是一種常用的監督學習算法,可用于分類和回歸任務。它通過構建樹形結構進行決策,每個內部節點代表一個特征上的 “判斷”,分支代表判斷結果,葉節點代表最終的預測類別或值。決策樹的核心思想是:通過對數據的特征進行逐層劃分,最終將數據映射到不同的類別或數值。
一、決策樹的基本結構
決策樹由三部分組成:
根節點:最初的決策點,包含全部訓練樣本。
內部節點:對應一個特征上的測試條件(如 “年齡> 30?”)。
葉節點:最終的預測結果(如 “購買” 或 “不購買”)。
例如,一個簡單的 “是否出門打籃球” 決策樹可能如下:
二、決策樹的構建過程
決策樹的構建是一個遞歸劃分的過程,主要步驟如下:
特征選擇:從當前節點的特征中選擇一個最優特征(如 “天氣”)作為劃分依據。
劃分數據集:根據該特征的不同取值,將數據集劃分為多個子集(如 “晴天” 和 “非晴天”)。
遞歸生成子樹:對每個子集重復步驟 1-2,直到滿足終止條件(如:
子集中所有樣本屬于同一類別。
沒有剩余特征可供劃分。
樹的深度達到預設上限。
其中,特征選擇是核心環節,常用的準則有:
信息增益(ID3 算法):選擇能最大減少信息熵的特征。
信息增益率(C4.5 算法):對信息增益進行修正,避免偏向取值多的特征。
基尼不純度(CART 算法):選擇能最小化基尼指數(樣本被誤分類的概率)的特征。
三、決策樹的優缺點
優點
直觀易懂:決策樹可以可視化,便于理解和解釋(如醫生診斷規則)。
無需預處理:對數據尺度、分布不敏感,無需歸一化或標準化。
處理非線性關系:能自動學習特征間的復雜非線性關系。
支持多輸出:可同時預測多個目標變量。
缺點
容易過擬合:決策樹可能過度擬合訓練數據,導致泛化能力差(解決方案:剪枝、隨機森林)。
不穩定:數據的微小變化可能導致樹結構劇烈變化(集成學習可緩解)。
偏向問題:對具有較多取值的特征有偏好(如 ID3)。
計算復雜度高:構建樹的時間復雜度較高(尤其是特征和樣本量較大時)。
四、決策樹的應用場景
分類任務:
醫療診斷(如根據癥狀判斷疾病類型)。
客戶細分(如根據消費行為劃分客戶類別)。
回歸任務:
房價預測(根據房屋面積、位置等預測價格)。
銷量預測(根據促銷活動、季節等預測銷量)。
集成學習基礎:作為隨機森林、梯度提升樹(GBDT)等集成算法的基模型。
五、決策樹的優化方法
剪枝(Pruning):
預剪枝:在樹構建過程中提前停止劃分(如限制樹的最大深度)。
后剪枝:構建完整樹后,通過交叉驗證移除不必要的節點。
特征選擇優化:使用信息增益率(C4.5)或基尼不純度(CART)替代信息增益。
集成學習:結合多個決策樹(如隨機森林、XGBoost)提高穩定性和準確性。
六、常見決策樹算法對比
算法 支持任務 特征選擇準則 樹結構 缺失值處理 ID3 分類 信息增益 多叉樹 不支持 C4.5 分類 信息增益率 多叉樹 支持 CART 分類 + 回歸 基尼不純度(分類)/ 均方誤差(回歸) 二叉樹 支持 總結
決策樹是一種強大且直觀的機器學習算法,適合處理非線性關系和需要可解釋性的場景。雖然它存在過擬合風險,但通過剪枝、集成學習等優化手段,決策樹在實際應用中仍然表現出色,尤其是作為集成模型(如隨機森林)的基礎組件。
SVM
可參考:
支持向量機 | 菜鳥教程
SVM(Support Vector Machine,支持向量機)是一種強大的監督學習算法,主要用于分類和回歸任務,尤其在處理高維數據時表現出色。其核心思想是:通過尋找一個最優超平面,將不同類別的數據分隔開,并最大化類別之間的間隔(Margin),從而獲得良好的泛化能力。
支持向量:
離超平面最近的樣本點被稱為“支持向量”。這些支持向量對于定義超平面至關重要。
支持向量機通過最大化支持向量到超平面的距離(即最大化間隔)來選擇最佳的超平面。
SVM 分類流程
選擇一個超平面:找到一個能夠最大化分類邊界的超平面。
訓練支持向量:通過支持向量機算法,選擇離超平面最近的樣本點作為支持向量。
通過最大化間隔來找到最優超平面:選擇一個最優超平面,使得間隔最大化。
使用核函數處理非線性問題:通過核函數將數據映射到高維空間來解決非線性可分問題。
SVM 也可用于回歸任務(Support Vector Regression,SVR)。與分類不同,SVR 的目標是找到一個超平面,使得所有訓練數據點到該超平面的距離不超過 \(\epsilon\),同時盡量使超平面平坦。
SVM 的優缺點
優點
適用于高維數據:在特征維度遠大于樣本數時仍表現良好(如文本分類)。
魯棒性強:只依賴支持向量,對離群點不敏感(通過軟間隔控制)。
避免過擬合:通過最大化間隔和核技巧,獲得良好的泛化能力。
核函數靈活性:可通過選擇不同核函數處理各種數據分布。
缺點
計算復雜度高:訓練時間隨樣本數增加顯著增長(尤其在大數據集上)。
參數敏感:核函數參數(如 RBF 的 \(\gamma\))和正則化參數 C 需要仔細調優。
不適用于大規模數據:傳統 SVM 求解器在樣本數超過 10 萬時效率較低(可使用 SGD 等優化)。
多分類需擴展:SVM 原生只支持二分類,處理多分類需組合多個二分類器(如 One-vs-One 或 One-vs-All)。
SVM 的應用場景
文本分類:如垃圾郵件識別、新聞分類(高維稀疏數據)。
圖像識別:如手寫數字識別、人臉識別。
生物信息學:如蛋白質結構預測、癌癥分類。
異常檢測:通過 One-Class SVM 識別罕見事件。
金融風控:如信用評分、欺詐檢測。
SVM 的優化與擴展
高效求解算法:如序列最小優化算法(SMO)、梯度下降法(SGD)。
集成 SVM:與 Bagging 或 Boosting 結合提高性能。
多分類擴展:如 One-vs-One、One-vs-All、DAG-SVM。
在線學習:如核感知機(Kernel Perceptron)。
總結
SVM 是一種優雅且強大的機器學習算法,特別適合處理高維、小樣本數據,且具有嚴格的數學理論保證。雖然其計算復雜度較高,但在許多領域(如文本和圖像分析)仍是首選算法之一。使用 SVM 時,需注意選擇合適的核函數和調優參數,以獲得最佳性能。
KNN
可參考:
K 近鄰算法 | 菜鳥教程
KNN(K-Nearest Neighbors,K 近鄰算法)是一種簡單且常用的監督學習算法,主要用于分類和回歸任務。
KNN(K-Nearest Neighbors)不屬于深度學習算法,而是一種傳統的機器學習算法。其核心思想可以概括為:“物以類聚,人以群分”—— 一個樣本的類別或數值,由與其最接近的 K 個鄰居的類別或數值決定。
一、KNN 的基本原理
核心邏輯 對于一個待預測的樣本,KNN 會在訓練數據集中找到與該樣本 “距離最近” 的 K 個樣本(即 “鄰居”),然后根據這 K 個鄰居的信息來預測結果:
分類任務:采用 “少數服從多數” 原則,K 個鄰居中出現次數最多的類別即為預測類別。
回歸任務:取 K 個鄰居的數值的平均值(或加權平均值)作為預測結果。
距離度量 衡量樣本間 “接近程度” 的常用指標包括:
二、KNN 的執行步驟
以分類任務為例,KNN 的工作流程如下:
準備訓練數據:包含已知類別的樣本(特征 + 標簽)。
確定參數 K:即選擇多少個鄰居(K 為正整數,需人為設定)。
計算距離:計算待預測樣本與訓練集中所有樣本的距離。
篩選鄰居:按距離從小到大排序,選取前 K 個樣本作為 “鄰居”。
投票預測:統計 K 個鄰居中出現次數最多的類別,作為待預測樣本的類別。
三、關鍵參數 K 的影響
K 的取值對模型結果影響很大,需要謹慎選擇:
K=1:模型容易過擬合(對噪聲敏感,決策邊界復雜)。
K 過大:模型會過度平滑,忽略局部特征,導致欠擬合(決策邊界簡單)。
經驗選擇:通常通過交叉驗證(如網格搜索)選擇最優 K 值,且 K 一般取奇數(避免投票平局)。
四、KNN 的優缺點
優點
簡單易懂:無需復雜的數學推導,原理直觀。
無需訓練過程:屬于 “懶惰學習”(Lazy Learning),新樣本到來時才計算距離,適合動態數據集。
適用于多分類問題:天然支持多類別預測,無需額外處理。
缺點
計算成本高:預測時需與所有訓練樣本計算距離,數據量大時效率低(時間復雜度為 O (n),n 為樣本數)。
對不平衡數據敏感:若某類樣本數量遠多于其他類,可能主導預測結果。
對特征尺度敏感:不同特征的量綱差異會影響距離計算(需先標準化 / 歸一化特征)。
五、KNN 的應用場景
分類任務:如手寫數字識別、鳶尾花種類分類、客戶流失預測等。
回歸任務:如房價預測、用戶評分預測等。
推薦系統:基于用戶相似度的 “近鄰推薦”(如 “和你相似的用戶也喜歡...”)。
六、優化方法
為解決 KNN 的效率問題,常用優化手段包括:
數據降維:減少特征數量,降低距離計算復雜度(如 PCA)。
索引結構:使用 KD 樹、球樹等數據結構加速鄰居搜索。
加權 KNN:給距離近的鄰居賦予更高權重,減少遠鄰的干擾。
總之,KNN 是一種 “簡單但不簡陋” 的算法,在小規模數據集或對可解釋性要求高的場景中非常實用,但在大數據場景下需結合優化手段使用。
補充
補充更多相關內容。
主成分分析
主成分分析(Principal Component Analysis,簡稱PCA)是一種常用的數據降維方法,它的核心思想是通過線性變換,將高維數據映射到低維空間,在盡可能保留原始數據信息(即方差)的前提下,減少數據的維度,從而簡化數據結構、去除冗余信息,并便于后續的分析或建模。
從嚴格意義上來說,PCA 更偏向于一種數據預處理技術。其本質是數據的線性變換與壓縮,而非 “學習” 輸入到輸出的映射關系:
它不涉及 “標簽”(即無監督),也不構建預測模型,僅關注數據本身的分布結構(方差、相關性)。
目標是簡化數據(降維)、去除冗余或噪聲,為后續任務(如分類、回歸)做準備。
PCA 不是嚴格意義上的機器學習算法,而是一種無監督的數據降維與預處理技術。但由于其在機器學習流程中的廣泛應用(如數據預處理、特征工程),常被納入機器學習的工具鏈中進行討論。
PCA 的核心目標
降維:將高維特征(如 100 個特征)轉化為低維特征(如 2 個或 3 個特征),降低計算復雜度。
保留信息:新的低維特征(稱為 “主成分”)應盡可能保留原始數據的大部分變異(方差),即數據的核心信息。
去相關性:新的主成分之間彼此線性無關,消除原始特征間的冗余關聯。
PCA 的基本原理
PCA 的本質是尋找一組新的正交坐標軸(主成分),使得數據在這些坐標軸上的投影具有最大的方差。具體步驟可概括為:
數據標準化 對原始數據進行均值中心化(每個特征減去其均值),確保各特征在同一量級上,避免方差大的特征主導結果(例如,若特征 A 的單位是 “米”,特征 B 是 “厘米”,需先標準化)。
計算協方差矩陣 協方差矩陣用于描述特征之間的相關性:若兩個特征的協方差為正,說明它們正相關;為負則負相關;為 0 則無關。PCA 的目標是通過變換消除這種相關性。
求解協方差矩陣的特征值和特征向量
特征向量:代表新的坐標軸(主成分)的方向。
特征值:表示數據在對應特征向量方向上的方差大小,特征值越大,該方向包含的信息越多。
選擇主成分 按特征值從大到小排序,選取前 k 個特征向量作為主成分(k < 原始維度),確保這 k 個主成分的累計方差貢獻率(即前 k 個特征值之和 / 總特征值之和)達到預設閾值(如 95%),以保留大部分信息。
映射數據到新空間 用選中的 k 個特征向量構成變換矩陣,將原始數據投影到該矩陣上,得到降維后的低維數據。
舉例說明
假設我們有一組二維數據(特征 X1 和 X2),分布近似一個橢圓。
原始數據中,X1 和 X2 可能存在相關性(例如,“身高” 和 “體重”)。
PCA 會找到橢圓的長軸(第一主成分)和短軸(第二主成分),其中長軸方向的方差最大,包含最多信息。
若我們選擇保留第一主成分,就將二維數據降為一維,此時數據在長軸上的投影保留了大部分原始信息。
PCA 的應用場景
數據可視化:將高維數據(如 100 維)降為 2 或 3 維,便于繪圖觀察分布(例如,用 PCA 將圖像的像素特征降維后可視化)。
降噪:低方差的主成分可能對應噪聲,去除這些成分可簡化數據并減少干擾。
預處理:在機器學習中,降維后的數據可加速模型訓練(如減少 SVM、KNN 的計算量)。
PCA 的局限性
是線性降維方法,無法處理非線性結構的數據(此時可考慮核 PCA、t-SNE 等非線性方法)。
降維后的數據(主成分)失去了原始特征的物理意義,解釋性較差(例如,原始特征是 “年齡”“收入”,主成分可能是兩者的混合,難以直接解讀)。
總之,PCA 是一種高效的降維工具,通過聚焦數據的核心變異方向,在簡化數據的同時保留關鍵信息,廣泛應用于數據分析、機器學習和模式識別等領域。
欠擬合和過擬合
過擬合(Overfitting)和欠擬合(Underfitting)是機器學習中兩種常見的模型性能問題,直接影響模型對新數據的預測能力。它們的本質是模型對訓練數據的 “學習程度” 與泛化能力之間的失衡,具體區別和應對方法如下:
一、欠擬合(Underfitting)
定義
模型無法充分捕捉訓練數據中的規律,導致在訓練集和測試集上的表現都很差(誤差較高)。形象地說,就是模型 “學得太淺”,對數據的復雜模式視而不見。
表現
訓練集準確率低,測試集準確率也低(兩者誤差都大)。
模型在訓練過程中收斂緩慢,甚至難以收斂。
常見原因
模型過于簡單:例如用線性模型(如線性回歸)去擬合非線性數據(如二次函數分布的數據)。
特征不足:輸入的特征數量太少或質量太低,無法描述數據的關鍵規律(如用 “身高” 單一特征預測 “體重”,忽略了 “年齡”“性別” 等重要因素)。
訓練時間不足:模型尚未充分學習到數據模式就停止訓練(如神經網絡迭代次數太少)。
解決方法
增加模型復雜度:例如將線性模型替換為非線性模型(如決策樹、多項式回歸、神經網絡)。
豐富特征工程:增加更多相關特征,或對現有特征進行組合、轉換(如多項式特征、特征交叉)。
延長訓練時間:增加迭代次數,讓模型有更多機會學習數據規律。
二、過擬合(Overfitting)
定義
模型過度學習訓練數據中的細節,甚至包括噪聲,導致在訓練集上表現極好,但對新數據(測試集)的泛化能力很差。形象地說,就是模型 “學得太死”,把偶然現象當成了普遍規律。
表現
訓練集準確率極高(誤差極小),但測試集準確率驟降(誤差顯著增大)。
模型在訓練過程中,訓練誤差持續下降,但測試誤差先降后升。
常見原因
模型過于復雜:例如用高階多項式擬合簡單線性數據,或神經網絡層數 / 參數過多。
訓練數據不足或有噪聲:數據量太少時,模型容易記住每個樣本的細節;數據中存在異常值或錯誤標簽(噪聲)時,模型會 “記住” 這些噪聲。
訓練過度:模型在訓練集上迭代次數過多,以至于擬合了無關的細節。
解決方法
簡化模型:減少模型參數(如減小神經網絡層數、限制決策樹深度),或選擇更簡單的模型(如用線性回歸替代復雜的集成模型)。
增加訓練數據:更多的數據能讓模型更難記住細節,被迫學習普遍規律(如數據增強技術,通過旋轉、裁剪等方式擴充圖像數據)。
正則化(Regularization):通過懲罰模型的復雜度來限制過擬合,常見方法包括:
L1 正則化(Lasso 回歸):對參數絕對值施加懲罰,可能使部分參數為 0(特征選擇)。
L2 正則化(Ridge 回歸):對參數平方施加懲罰,使參數值趨向于 0(權重衰減)。
Dropout(適用于神經網絡):訓練時隨機丟棄部分神經元,防止模型過度依賴特定神經元。
早停(Early Stopping):在訓練過程中監控測試誤差,當測試誤差不再下降時提前停止訓練,避免過度擬合。
交叉驗證:通過將數據分為多組訓練集和驗證集,選擇在驗證集上表現最佳的模型,減少對單一訓練集的依賴。
三、過擬合與欠擬合的對比
維度 欠擬合 過擬合 模型與數據的關系 模型太簡單,無法擬合數據規律 模型太復雜,過度擬合數據細節(含噪聲) 訓練集性能 差(誤差高) 好(誤差低) 測試集性能 差(誤差高) 差(誤差高) 核心問題 學習不足(欠學習) 學習過度(過學習) 解決思路 增強模型能力(增加復雜度、特征) 限制模型能力(簡化模型、正則化) 總結
過擬合和欠擬合的本質是模型復雜度與數據規律的不匹配。理想的模型應處于 “擬合適中” 的狀態:既能捕捉訓練數據的核心規律,又不過度關注細節,從而在新數據上表現穩定。在實際建模中,通常通過調整模型復雜度、優化數據質量、使用正則化等方法來平衡兩者,追求更強的泛化能力。
數據分離
數據分離是指將原始數據集劃分為不同的子集,以實現模型的訓練、驗證和測試,其核心目的是確保模型能夠在未見過的數據上評估泛化能力,避免因過度依賴訓練數據而導致的過擬合。
1. 常見的數據集劃分方式
訓練集(Training Set) 用于模型的訓練過程,模型通過學習該數據集的特征與標簽之間的關系,調整自身參數(如決策樹的分裂閾值、神經網絡的權重)。 占比通常為 60%~80%。
驗證集(Validation Set) 用于模型訓練過程中的參數調優(如選擇正則化系數、調整樹的深度)和超參數優化,幫助判斷模型是否過擬合或欠擬合,并選擇最優模型。 占比通常為 10%~20%。 注:在交叉驗證中,驗證集的角色由訓練集的子集交替承擔,無需單獨劃分。
測試集(Test Set) 用于最終評估模型的泛化能力,模擬模型在真實場景中的表現。測試集在模型訓練和調優階段需嚴格 “隱藏”,避免因人為調整模型適配測試集而導致評估結果失真。 占比通常為 10%~20%。
2. 劃分原則
隨機性:劃分需隨機進行,避免因數據順序(如時間序列中的趨勢)導致子集分布不一致。
分布一致性:各子集的特征分布和標簽分布應與原始數據集保持一致(如分類任務中,各子集的類別比例需匹配)。
獨立性:測試集需與訓練集、驗證集完全獨立,確保評估結果真實反映泛化能力。
3. 常見工具
在 Python 中,可通過
sklearn.model_selection.train_test_split
實現快速劃分,例如:from sklearn.model_selection import train_test_split X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.3, random_state=42) # 先分訓練集(70%)和臨時集(30%) X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42) # 臨時集再分為驗證集(15%)和測試集(15%)
數據分離通過劃分訓練集、驗證集、測試集,確保模型訓練和評估的客觀性,是構建可靠模型的基礎。
混淆矩陣
混淆矩陣是用于評估分類模型性能的可視化工具,通過展示模型對不同類別的預測結果與真實標簽的匹配情況,直觀反映模型的錯誤類型(如將 A 類誤判為 B 類的頻率)。它適用于二分類和多分類任務,以下以二分類為例說明:
1. 二分類混淆矩陣的基本結構
假設分類任務為 “判斷樣本是否為正例(Positive)”,混淆矩陣為 2×2 矩陣:
預測為正例(Predicted Positive) 預測為負例(Predicted Negative) 真實正例(Actual Positive) TP(True Positive,真正例) FN(False Negative,假負例) 真實負例(Actual Negative) FP(False Positive,假正例) TN(True Negative,真負例)
TP:模型正確預測為正例的樣本(如將 “癌癥患者” 正確預測為 “患病”)。
TN:模型正確預測為負例的樣本(如將 “健康人” 正確預測為 “健康”)。
FP:模型錯誤地將負例預測為正例(如 “健康人” 被誤診為 “患病”,又稱 “第一類錯誤”)。
FN:模型錯誤地將正例預測為負例(如 “癌癥患者” 被漏診為 “健康”,又稱 “第二類錯誤”)。
2. 基于混淆矩陣的評估指標
混淆矩陣可衍生出多個關鍵指標,用于量化模型性能:
指標 計算公式 含義 準確率(Accuracy) (TP + TN) / (TP + TN + FP + FN) 模型整體預測正確的比例(適用于平衡數據集)。 精確率(Precision) TP / (TP + FP) 預測為正例的樣本中,真正為正例的比例(如 “被診斷為患病者中,實際患病的比例”)。 召回率(Recall)/ 靈敏度 TP / (TP + FN) 真實正例中,被模型正確預測的比例(如 “所有患者中,被成功診斷的比例”)。 特異度(Specificity) TN / (TN + FP) 真實負例中,被模型正確預測的比例(如 “所有健康人中,被正確排除的比例”)。 F1 分數(F1-Score) 2×(Precision×Recall)/(Precision+Recall) 精確率和召回率的調和平均,平衡兩者的沖突(適用于不平衡數據集)。 3. 多分類混淆矩陣
對于多分類任務(如識別手寫數字 0-9),混淆矩陣為 N×N 矩陣(N 為類別數),其中第 i 行第 j 列的數值表示 “真實類別為 i 但被預測為 j” 的樣本數。通過分析對角線(正確預測)和非對角線(錯誤預測)的數值,可定位模型對哪些類別容易混淆(如將 “8” 誤判為 “3”)。
4. 應用場景
診斷模型錯誤類型:例如在醫療診斷中,FN(漏診)可能比 FP(誤診)后果更嚴重,需優先提高召回率。
指導模型優化:若某一類別的錯誤率極高,可針對性增加該類別的訓練樣本或調整模型參數。