1. 概述
機器學習的定義是對于某類任務T和性能度量P,如果一個計算機程序在T上其性能P隨著經驗E而自我完善,那么我們就稱這個系統從經驗E中學習,機器學習是人工智能的一種方法,它通過在大量數據中學習隱藏的規則,模式和經驗,對新的情況作出有效的決策。機器學習已經在多個行業廣泛應用,在圖像識別,語音識別,機器翻譯,情感分析等多個領域取得不錯的成果。
2. 分類
按學習的方式來劃分,機器學習主要包括:
-
監督學習:輸入數據帶有標簽。監督學習建立一個學習過程,將預測結果與 “訓練數據”(即輸入數據)的實際結果進行比較,不斷的調整預測模型,直到模型的預測結果達到一個預期的準確率,比如分類和回歸問題等。常用算法包括決策樹、貝葉斯分類、最小二乘回歸、邏輯回歸、支持向量機、神經網絡等。
-
非監督學習:輸入數據沒有標簽,而是通過算法來推斷數據的內在聯系,比如聚類和關聯規則學習等。常用算法包括獨立成分分析、K-Means 和 Apriori 算法等。
-
半監督學習:輸入數據部分被標識,部分沒有被標識,這種學習模型可以用來進行預測,但是模型首先需要學習數據的內在結構以便合理的組織數據來進行預測。應用場景包括分類和回歸,算法包括一些對常用監督式學習算法的延伸,這些算法首先試圖對未標識數據進行建模,在此基礎上再對標識的數據進行預測。如圖論推理算法(Graph Inference)或者拉普拉斯支持向量機(Laplacian SVM)等。
-
強化學習:輸入數據作為對模型的反饋,強調如何基于環境而行動,以取得最大化的預期利益。與監督式學習之間的區別在于,它并不需要出現正確的輸入 / 輸出對,也不需要精確校正次優化的行為。強化學習更加專注于在線規劃,需要在探索(在未知的領域)和遵從(現有知識)之間找到平衡。 常見的應用場景包括動態系統以及機器人控制等。常見算法包括Q-Learning以及時間差學習(Temporal difference learning)
在企業數據應用的場景下, 人們最常用的可能就是監督式學習和非監督式學習的模型。 在圖像識別等領域,由于存在大量的非標識的數據和少量的可標識數據, 目前半監督式學習是一個很熱的話題。 而強化學習更多的應用在機器人控制及其他需要進行系統控制的領域。
3. sklearn庫
在正式總結常用算法之前,需要先了解sklearn 庫。
sklearn,全名 Scikit-learn,是 Python 中最常用的機器學習庫之一,提供了各種常見的機器學習算法(分類、回歸、聚類、降維等),并封裝得非常好用,尤其適合入門和快速原型開發。
3.1 主要功能模塊
- sklearn.linear_model :線性模型(如線性回歸、邏輯回歸)
- sklearn.naive_bayes :樸素貝葉斯分類器
- sklearn.tree :決策樹、隨機森林
- sklearn.svm :支持向量機
- sklearn.neighbors :KNN(近鄰算法)
- sklearn.cluster :聚類算法(如 KMeans)
- sklearn.decomposition :降維(如 PCA)
- sklearn.preprocessing :數據預處理(標準化、歸一化、編碼等)
- sklearn.model_selection :數據劃分、交叉驗證、超參搜索
- sklearn.metrics :評估指標(準確率、F1 等)
3.2 典型的使用流程
以邏輯回歸為例,展示 sklearn 的通用套路。
-
數據加載
-
數據劃分
-
數據預處理
-
模型訓練
-
模型預測
-
模型評估
-
模型保存 + 加載(可選)
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, confusion_matrix
import joblib # 模型保存/加載# 2. 加載數據
iris = load_iris()
X, y = iris.data, iris.target
print("特征維度:", X.shape)
print("類別:", np.unique(y))# 3. 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42, stratify=y)# 4. 數據預處理(標準化)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)# 5. 模型訓練
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)# 6. 預測
y_pred = model.predict(X_test)# 7. 模型評估
print("Confusion Matrix:")
print(confusion_matrix(y_test, y_pred))print("\nClassification Report:")
print(classification_report(y_test, y_pred, target_names=iris.target_names))# 8. 模型保存
joblib.dump(model, 'logistic_model.pkl')
joblib.dump(scaler, 'scaler.pkl')# 9. 模型加載示例(可選)
# model = joblib.load('logistic_model.pkl')
# scaler = joblib.load('scaler.pkl')
注意:
X_train = scaler.fit_transform(X_train)
fit_transform 是 兩步合一:
-
fit(X_train):計算訓練集的均值和標準差
-
transform(X_train):用剛才計算出的均值和標準差來標準化訓練集
X_test = scaler.transform(X_test)
這里只執行了 transform,意思是:
-
用 訓練集的均值和標準差來標準化測試集
-
這一步不會重新計算均值和標準差
4. 常用的算法
機器學習算法主要可應用于三大場景:
- 分類,即機器被訓練來完成對一組數據進行特定的分類。常見的算法有邏輯回歸、樸素貝葉斯、決策樹、隨機森林、K 近鄰、支持向量機,以及神經網絡等等。
- 二分類:預測結果只有兩個離散的值,如是否、1/0
- 多分類:預測結果是多個離散的值,如A/B/C
- 回歸,即機器根據先前標記的數據來預測未來。預測結果是連續的值,如房價的預測、庫存的預測。
- 聚類,無監督學習,將相似的樣本歸類在一起,如細分用戶、新聞聚類。假設,你現在是一個客服系統負責人,為了減輕人工客服的壓力,想把一部分常見的問題交給機器人來回復。解決這件事情的前提,就是我們要對用戶咨詢的商品問題先進行分組,找到用戶最關心的那些問題。這種需要根據用戶的特點或行為數據,對用戶進行分組,讓組內數據盡可能相似的的問題,就屬于聚類問題,用一個詞概括它的特點就是 “物以類聚”。常見的聚類算法有層次聚類、原型聚類(K-means)、密度聚類(DBSCAN)。其實,聚類算法的原理很簡單,就是根據樣本之間的距離把距離相近的聚在一起,在實際應用場景里,衡量樣本之間距離關系的方法會更復雜,可能會用語義相似度、情感相似度等等。聚類分析較為重要的一個應用就是用戶畫像。
(1)邏輯回歸
邏輯回歸(Logistic Regression)是一種用于分類的機器學習算法,盡管它的名字中有“回歸”二字,但它主要用于解決二分類問題。在邏輯回歸中,目標變量(因變量)是離散的,通常是二元的(0和1),例如判斷一封郵件是否是垃圾郵件(1表示垃圾郵件,0表示正常郵件)。和線性回歸很像,但加了一個 Sigmoid 函數把結果壓縮到 (0,1) 區間。
邏輯回歸模型的形式可以表示為:
P ( Y = 1 ∣ X ) = 1 1 + e ? ( β 0 + β 1 X 1 + β 2 X 2 + ? + β n X n ) P(Y = 1 \mid X) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_n X_n)}} P(Y=1∣X)=1+e?(β0?+β1?X1?+β2?X2?+?+βn?Xn?)1?
其中,P(Y=1∣X) 是在給定特征 X 的條件下,目標變量 Y 取值為1的概率。 β 0 β_0 β0? , β 1 β_1 β1?, β 2 β_2 β2?,…, β n β_n βn? 是模型的參數, X 0 X_0 X0? , X 1 X_1 X1?, X 2 X_2 X2?,…, X n X_n Xn? 是特征變量。這個模型的核心是一個邏輯函數,也稱為 Sigmoid 函數,其形式為: σ ( z ) = 1 1 + e ? z \sigma(z) = \frac{1}{1 + e^{-z}} σ(z)=1+e?z1?
Sigmoid 函數的輸出范圍在(0,1)之間,這使得它非常適合用來表示概率。
邏輯回歸的損失函數通常是交叉熵損失函數(Cross - Entropy Loss)。對于二分類問題,交叉熵損失函數可以表示為:
L ( β ) = ? 1 m ∑ i = 1 m [ y ( i ) log ? ( y ^ ( i ) ) + ( 1 ? y ( i ) ) log ? ( 1 ? y ^ ( i ) ) ] L(\beta) = -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)} \log(\hat{y}^{(i)}) + (1 - y^{(i)}) \log(1 - \hat{y}^{(i)}) \right] L(β)=?m1?i=1∑m?[y(i)log(y^?(i))+(1?y(i))log(1?y^?(i))]
其中,m 是訓練樣本的數量, y ( i ) y^(i) y(i) 是第 i 個樣本的真實標簽, y ^ ( i ) \hat{y}^{(i)} y^?(i) 是模型預測的樣本為1的概率。這個損失函數衡量了模型預測的概率分布和真實標簽的概率分布之間的差異。當模型預測的概率和真實標簽越接近時,損失值越小。
邏輯回歸模型的訓練過程主要是通過優化算法來最小化損失函數,從而找到最優的模型參數 β。常用的優化算法有梯度下降法(Gradient Descent)。
(2)樸素貝葉斯
樸素貝葉斯(Naive Bayes)是一種基于貝葉斯定理的簡單概率分類器,它假設特征之間相互獨立。盡管這個假設在現實世界中往往不成立,但樸素貝葉斯分類器在許多實際應用中仍然表現出色,特別是在文本分類和垃圾郵件過濾等領域。
樸素貝葉斯分類器的核心是貝葉斯定理,其公式如下:
P ( C k ∣ X ) = P ( X ∣ C k ) P ( C k ) P ( X ) P(C_k \mid X) = \frac{P(X \mid C_k) P(C_k)}{P(X)} P(Ck?∣X)=P(X)P(X∣Ck?)P(Ck?)?
其中:
P ( C k ∣ X ) P(C_k \mid X) P(Ck?∣X) 是后驗概率,即在給定特征 X 的條件下類別 C k C_k Ck? 的概率。
P ( X ∣ C k ) P(X \mid C_k) P(X∣Ck?) 是似然函數,即在類別 C k C_k Ck? 的條件下觀察到特征 X 的概率。
P ( C k ) P(C_k) P(Ck?) 是類別 C k C_k Ck? 的先驗概率。
P ( X ) P(X) P(X) 是特征 X 的邊緣概率,通常在計算中可以忽略,因為它對于所有類別都是相同的。
在計算 P ( X ∣ C k ) P(X \mid C_k) P(X∣Ck?) 時,假設所有特征 x 1 , x 2 , . . , x n x_1,x_2,..,x_n x1?,x2?,..,xn? 條件獨立:
P ( X ∣ C k ) = P ( x 1 , x 2 , … , x n ∣ C k ) = ∏ i = 1 n P ( x i ∣ C k ) P(X \mid C_k) = P(x_1, x_2, \ldots, x_n \mid C_k) = \prod_{i=1}^{n} P(x_i \mid C_k) P(X∣Ck?)=P(x1?,x2?,…,xn?∣Ck?)=i=1∏n?P(xi?∣Ck?)
這就是“樸素”的地方 —— 實際上大多數情況下特征并不獨立,但這種簡化讓計算變得高效,而且在很多實際任務中效果 surprisingly 好。
常見的樸素貝葉斯模型:
-
高斯樸素貝葉斯(GaussianNB):用于連續數據,假設特征值服從高斯分布(正態分布)
-
多項式樸素貝葉斯(MultinomialNB):用于離散計數數據,常用于文本分類(如詞頻)
-
伯努利樸素貝葉斯(BernoulliNB):特征為二元(0或1),表示某個詞是否出現,適合短文本分類
(3)決策樹
決策樹是一種樹狀模型,用于決策過程。它通過學習簡單的決策規則從數據特征中推斷出目標變量的值。其核心思想是通過一系列問題的判斷,將數據逐步劃分為不同的類別或預測目標值。它從根節點開始,通過選擇最優的特征進行劃分,逐步生成內部節點和葉子節點。最終,每個葉子節點代表一個類別或預測值。
例如,在一個二分類問題中,決策樹可能會先根據一個特征(如年齡是否大于30)將數據分為兩部分,然后在每個子部分繼續根據其他特征進行劃分,直到滿足停止條件(如葉子節點的樣本數量小于某個閾值或者樹達到最大深度)。
分類樹:用于分類任務,目標是將數據劃分為不同的類別。
回歸樹:用于回歸任務,目標是預測連續的數值。
決策樹的結構: 由節點(Node)和分支(Branch)組成:
- 根節點(Root Node):決策樹的起始點,包含整個數據集。
- 內部節點(Internal Node):表示一個特征或屬性。
- 分支(Branch):表示從特征到兩個子節點的決策路徑。
- 葉節點(Leaf Node):表示最終的決策結果,即分類或回歸的輸出值。
構建過程:
構建決策樹的關鍵在于如何選擇最優的特征進行劃分。常見的特征選擇方法包括:
- 信息增益(Information Gain):基于信息熵的概念,選擇使信息增益最大的特征。
- 增益率(Gain Ratio):對信息增益進行歸一化,避免偏向于具有較多值的特征。
- 基尼不純度(Gini Impurity):衡量數據的不純度,選擇使基尼不純度最小的特征。
常見的決策樹算法:
- ID3(Iterative Dichotomiser 3):使用信息增益作為特征選擇標準。不能處理連續特征。
- C4.5:使用增益率作為特征選擇標準。可以處理連續特征。
- CART(Classification and Regression Tree)可以用于分類和回歸任務。使用基尼不純度作為特征選擇標準。
剪枝技術:
為了防止決策樹過擬合,通常會采用剪枝技術,減少樹的復雜度。常見的剪枝方法包括:
- 預剪枝(Pre-pruning):在樹完全生長之前停止生長,例如限制樹的深度或節點數量。
- 后剪枝(Post-pruning):先生成完整的樹,然后通過剪掉一些分支來簡化樹結構。
優點:
- 決策樹的結構直觀,容易理解,可以清晰地展示決策過程。
- 既可以用于分類任務,也可以用于回歸任務。
- 不需要特征縮放:對特征的數值范圍不敏感。
缺點:
- 容易過擬合:在訓練數據上表現很好,但在測試數據上可能泛化能力差。
- 對噪聲數據敏感:噪聲數據可能導致樹結構發生較大變化。
- 計算復雜度高:尤其是當特征數量較多時,構建決策樹的計算成本較高。
(4)隨機森林
隨機森林的核心是決策樹。它通過構建多棵決策樹來提高模型的性能。這些決策樹是獨立訓練的,并且每棵樹都是在不同的數據子集上訓練的。
在訓練隨機森林中的每棵決策樹時,會從原始訓練數據集中使用有放回抽樣方法抽取一個與原數據集大小相同的數據子集。這種方法稱為Bootstrap抽樣。例如,假設原始數據集有100個樣本,對于隨機森林中的第一棵決策樹,會從這100個樣本中有放回地抽取100個樣本作為訓練數據。由于是有放回抽樣,所以這個子集中可能會有重復的樣本,而有些樣本可能一次也沒有被抽到。這種抽樣方式使得每棵決策樹看到的數據是略有差異的,從而增加了模型的多樣性。因為不同的數據子集可能會導致決策樹在特征選擇和劃分方式上有所不同。
在構建每棵決策樹的過程中,每次分裂節點時,并不是考慮所有特征。隨機森林會從所有特征中隨機選擇一部分特征作為候選特征。例如,在一個有10個特征的數據集中,每次分裂節點時可能只隨機選擇3個特征來考慮。這樣做的目的是進一步增加模型的隨機性和多樣性。如果每次都考慮所有特征,那么不同決策樹之間的差異可能主要來源于數據抽樣,而特征子集的選擇可以讓決策樹在結構上更加不同,從而減少過擬合的風險。
對于分類任務,隨機森林通過多數投票的方式來進行預測。例如,假設隨機森林中有100棵決策樹,對于一個測試樣本,每棵決策樹都會給出自己的預測類別。最后,隨機森林會統計所有決策樹預測結果中出現次數最多的類別作為最終的預測結果。
對于回歸任務,隨機森林則通過對所有決策樹的預測結果取平均值來得到最終的預測值。如果每棵決策樹對某個回歸目標的預測值分別是1.2、1.5、1.3……,那么隨機森林的預測值就是這些值的平均值。
優點:
- 抗過擬合能力強
由于隨機森林通過Bootstrap抽樣和特征子集選擇等方式引入了隨機性,使得每棵決策樹的結構和預測結果都有所不同。這種多樣性使得隨機森林在面對復雜的、含有噪聲的數據時,比單棵決策樹更不容易過擬合。即使數據中存在一些異常值或者不重要的特征,隨機森林也能夠通過集成的方式降低它們對模型的影響。 - 適用范圍廣
隨機森林既可以用于分類任務,也可以用于回歸任務。對于分類任務,它可以處理多分類問題,并且對不平衡數據集也有一定的適應性。例如,在一個二分類問題中,正樣本和負樣本的比例可能相差很大,隨機森林可以通過調整每棵決策樹的訓練數據等方式來緩解這種不平衡帶來的影響。在回歸任務中,它能夠很好地擬合連續的數值目標變量。 - 特征重要性評估
隨機森林可以提供特征重要性評分。在訓練過程中,它會根據每個特征在所有決策樹中的表現(如在分裂節點時對目標變量的貢獻大小)來評估特征的重要性。這對于理解數據中的關鍵因素非常有幫助。例如,在一個醫療診斷問題中,通過隨機森林可以發現哪些癥狀或檢查指標對疾病的預測最為關鍵,從而為醫學研究和臨床診斷提供參考。 - 易于并行計算
隨機森林中的每棵決策樹是獨立訓練的,這意味著可以同時在多個處理器或者計算節點上并行訓練這些決策樹。這大大提高了模型的訓練效率,尤其是在處理大規模數據集時。例如,如果有足夠的計算資源,可以同時訓練隨機森林中的所有決策樹,而不需要像一些順序訓練的模型那樣等待前一步的完成。
缺點:
- 模型復雜度高
隨機森林包含多棵決策樹,每棵決策樹本身又是一個復雜的結構。這使得隨機森林模型的存儲和計算成本相對較高。例如,對于一個包含幾百棵決策樹的隨機森林模型,存儲這些決策樹結構需要占用較大的內存空間。在預測階段,也需要對每棵決策樹進行遍歷,這會增加預測的計算時間。 - 可解釋性較差
雖然隨機森林可以提供特征重要性評分,但是相比于單棵決策樹,它的整體可解釋性要差一些。因為隨機森林是由多棵決策樹組合而成的,很難像單棵決策樹那樣直觀地展示出模型的決策過程。例如,單棵決策樹可以通過樹狀圖清晰地展示出樣本是如何根據特征逐步被劃分到不同類別或預測值的,而隨機森林的預測結果是基于多棵決策樹的綜合判斷,很難用一個簡單的邏輯來描述其決策路徑。
(5)K 近鄰
K 近鄰算法(K-Nearest Neighbors,簡稱 KNN)是一種基本的分類與回歸方法,通常用于分類問題。它的工作原理非常簡單直觀:給定一個訓練數據集,對新的輸入樣本,算法會找到訓練集中與其最接近的 K 個樣本(即“鄰居”),然后根據這些鄰居的已知標簽來預測新樣本的標簽。
主要步驟:
- 選擇參數 K:K 是用戶指定的一個正整數,表示鄰居的數量。K 值的選擇對算法的性能有很大影響。較小的 K 值意味著模型對數據中的噪聲更敏感,而較大的 K 值則可能導致模型對數據的局部結構不夠敏感。
- 距離度量:計算新樣本與訓練集中每個樣本之間的距離。常用的距離度量方法包括歐氏距離、曼哈頓距離和閔可夫斯基距離等。
- 尋找最近的 K 個鄰居:根據計算出的距離,選擇距離最近的 K 個訓練樣本。
- 決策規則:
- 分類:在 K 個鄰居中,選擇出現次數最多的類別標簽作為新樣本的預測標簽。
- 回歸:計算 K 個鄰居的目標值的平均值,作為新樣本的預測值。
- 輸出預測結果:根據決策規則,輸出新樣本的預測類別或連續值。
優點:
- 無需訓練:KNN 是一種惰性學習算法,它不需要在訓練階段構建模型,所有的計算都在預測階段進行。
- 適用于多分類問題:KNN 可以很容易地擴展到多分類問題。
- 可以用于非線性數據:KNN 不需要假設數據的分布,因此適用于非線性可分的數據。
缺點:
- 計算成本高:對于大數據集,計算每個新樣本與所有訓練樣本的距離可能非常耗時。
- 存儲成本高:KNN 需要存儲整個訓練數據集,這可能導致較高的存儲需求。
- 對不平衡數據敏感:如果數據集中的類別分布不均勻,KNN 可能會偏向于多數類。
- 對噪聲敏感:KNN 對數據中的噪聲點較為敏感,這可能會影響分類的準確性。
(6)支持向量機
支持向量機(Support Vector Machine,簡稱SVM)是一種用于分類和回歸分析的監督學習算法。它通過在特征空間中找到一個最優的超平面來區分不同類別的數據點。在二分類問題中,這個超平面能夠最大化兩個類別之間的間隔,從而實現良好的分類性能。
工作原理:
-
線性可分情況
- 超平面的定義
在二維空間中,超平面就是一條直線;在三維空間中,超平面是一個平面;在更高維空間中,超平面是一個線性子空間。假設我們有一個線性可分的數據集,每個數據點 x i x_i xi? 都有一個類別標簽 y i y_i yi? ,其中 y i ∈ { ? 1 , + 1 } y_i \in \{-1, +1\} yi?∈{?1,+1}。超平面可以用方程 w ? x + b = 0 w?x+b=0 w?x+b=0 表示,其中 w 是超平面的法向量,b 是截距。 - 間隔最大化
SVM的目標是找到一個超平面,使得兩個類別之間的間隔最大。間隔可以用公式 2 ∣ w ∣ \frac{2}{|\mathbf{w}|} ∣w∣2? 來表示。為了最大化間隔,我們需要最小化 ∥w∥。這可以通過求解以下優化問題來實現:
min ? w , b 1 2 ∥ w ∥ 2 \min_{\mathbf{w}, b} \frac{1}{2} \|\mathbf{w}\|^2 w,bmin?21?∥w∥2
y i ( w ? x i + b ) ≥ 1 y_i(w \cdot x_i + b) \geq 1 yi?(w?xi?+b)≥1
- 超平面的定義
-
線性不可分情況
-
核函數的引入
在實際問題中,數據往往是線性不可分的。為了處理這種情況,SVM引入了核函數。核函數的作用是將數據映射到高維空間,在這個高維空間中數據可能變得線性可分。常見的核函數有:- 線性核: K ( x i , x j ) = x i ? x j K(\mathbf{x}_i, \mathbf{x}_j) = \mathbf{x}_i \cdot \mathbf{x}_j K(xi?,xj?)=xi??xj? ,適用于線性可分的情況。
- 多項式核: K ( x i , x j ) = ( x i ? x j + c ) d K(\mathbf{x}_i, \mathbf{x}_j) = (\mathbf{x}_i \cdot \mathbf{x}_j + c)^d K(xi?,xj?)=(xi??xj?+c)d ,其中 c 和 d 是參數。可以處理非線性關系。
- 徑向基函數(RBF)核: K ( x i , x j ) = exp ? ( ? γ ∥ x i ? x j ∥ 2 ) K(\mathbf{x}_i, \mathbf{x}_j) = \exp(-\gamma \|\mathbf{x}_i - \mathbf{x}_j\|^2) K(xi?,xj?)=exp(?γ∥xi??xj?∥2) ,其中 γ 是參數。它是最常用的核函數之一,能夠處理復雜的非線性關系。
- sigmoid核: K ( x i , x j ) = tanh ? ( α x i ? x j + c ) K(\mathbf{x}_i, \mathbf{x}_j) = \tanh(\alpha \mathbf{x}_i \cdot \mathbf{x}_j + c) K(xi?,xj?)=tanh(αxi??xj?+c) ,與神經網絡中的激活函數類似,但使用較少。
-
優化問題的調整
- 當引入核函數后,SVM的優化問題變為:
min ? w , b , ξ 1 2 ∥ w ∥ 2 + C ∑ i = 1 n ξ i \min_{\mathbf{w}, b, \xi} \frac{1}{2} \|\mathbf{w}\|^2 + C \sum_{i=1}^{n} \xi_i w,b,ξmin?21?∥w∥2+Ci=1∑n?ξi?
y i ( w ? x i + b ) ≥ 1 ? ξ i , i = 1 , 2 , … , n ξ i ≥ 0 , i = 1 , 2 , … , n \begin{align*}\quad y_i(\mathbf{w} \cdot \mathbf{x}_i + b) \geq 1 - \xi_i, \quad i = 1, 2, \ldots, n & \quad \xi_i \geq 0, \quad i = 1, 2, \ldots, n\end{align*} yi?(w?xi?+b)≥1?ξi?,i=1,2,…,n?ξi?≥0,i=1,2,…,n?
其中, ξ i \xi_i ξi? 是松弛變量,用于允許一些數據點違反間隔約束。C 是正則化參數,用于控制間隔最大化和誤分類之間的平衡。通過拉格朗日對偶方法,可以將優化問題轉化為對偶問題,利用核函數來計算數據點之間的相似度。
- 當引入核函數后,SVM的優化問題變為:
-
多分類SVM:
原始的SVM是為二分類問題設計的。為了處理多分類問題,可以采用一些方法,如一對多(One - vs - All)、一對一(One - vs - One)等策略。在一對多方法中,對于每個類別,訓練一個SVM模型,將該類別與其他所有類別區分開來。在一對一方法中,每兩個類別之間訓練一個SVM模型,最后通過投票等方式確定最終的類別。
優點:
- 分類性能好
SVM在許多實際問題中都表現出良好的分類性能,尤其是在高維空間中。它通過最大化間隔來尋找最優超平面,能夠有效避免過擬合。 - 適用于小樣本數據
SVM對小樣本數據具有較好的適應性。它不需要大量的樣本數據來訓練模型,這在一些樣本獲取困難的領域(如生物醫學領域)非常有優勢。 - 核函數的靈活性
核函數的引入使得SVM能夠處理非線性問題。通過選擇合適的核函數,可以將數據映射到高維空間,從而找到更好的分類邊界。
缺點:
- 計算復雜度高
SVM的訓練過程涉及求解二次規劃問題,計算復雜度較高。特別是當數據量較大時,訓練時間可能會很長。 - 對核函數和參數選擇敏感
SVM的性能很大程度上依賴于核函數的選擇和參數的調整。不同的核函數和參數設置可能會導致不同的分類結果。在實際應用中,需要通過交叉驗證等方法來選擇合適的核函數和參數,這增加了模型的調試難度。 - 不適用于大規模數據集
由于計算復雜度的限制,SVM在處理大規模數據集時可能會遇到困難。相比之下,一些基于深度學習的算法在大規模數據集上可能具有更好的性能。