超強!必會的十大機器學習算法
1.線性回歸
線性回歸是用于預測建模的最簡單且使用最廣泛的機器學習算法之一。
它是一種監督學習算法,用于根據一個或多個自變量預測因變量的值。
定義
線性回歸的核心是根據觀察到的數據擬合線性模型。
線性模型由以下方程表示:
其中
- 是因變量(我們想要預測的變量)
- 是自變量(我們用來進行預測的變量)
- 是直線的斜率
- 是 y 軸截距(直線與 y 軸的交點)
線性回歸算法涉及找到通過數據點的最佳擬合線。這通常是通過最小化觀測值和預測值之間的平方差之和來完成的。
評估指標
- 均方誤差 (MSE):測量誤差平方的平均值。值越低越好。
- R平方:表示可以根據自變量預測的因變量變異的百分比。越接近 1 越好。
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
# Load the Diabetes dataset
diabetes = load_diabetes()
X, y = diabetes.data, diabetes.target
# Splitting the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Creating and training the Linear Regression model
model = LinearRegression()
model.fit(X_train, y_train)
# Predicting the test set results
y_pred = model.predict(X_test)
# Evaluating the model
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print("MSE is:", mse)
print("R2 score is:", r2)
2.邏輯回歸
邏輯回歸用于分類問題。它預測給定數據點屬于某個類別的概率,例如是/否或 0/1。
評估指標
- 準確度:準確度是正確預測的觀測值與總觀測值的比率。
- 精確度和召回率:精確度是正確預測的正觀察值與所有預期的正觀察值的比率。召回率是正確預測的積極觀察與實際中所有觀察的比例。
- F1 分數:召回率和精確率之間的平衡。
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
# Load the Breast Cancer dataset
breast_cancer = load_breast_cancer()
X, y = breast_cancer.data, breast_cancer.target
# Splitting the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Creating and training the Logistic Regression model
model = LogisticRegression(max_iter=10000)
model.fit(X_train, y_train)
# Predicting the test set results
y_pred = model.predict(X_test)
# Evaluating the model
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)
# Print the results
print("Accuracy:", accuracy)
print("Precision:", precision)
print("Recall:", recall)
print("F1 Score:", f1)
3.決策樹
決策樹是多功能且強大的機器學習算法,可用于分類和回歸任務。
它們因其簡單性、可解釋性以及處理數值和分類數據的能力而廣受歡迎。
定義
決策樹由代表決策點的節點、代表可能結果的分支以及代表最終決策或預測的葉子組成。
決策樹中的每個節點對應一個特征,分支代表該特征的可能值。
構建決策樹的算法涉及根據不同特征的值遞歸地將數據集分割成子集。目標是創建同質子集,其中目標變量(我們想要預測的變量)在每個子集中都是相似的。
分裂過程持續進行,直到滿足停止標準,例如達到最大深度、最小樣本數,或者無法進行進一步改進。
評估指標
- 對于分類:準確率、精確率、召回率和 F1 分數
- 對于回歸:均方誤差 (MSE)、R 平方
from sklearn.datasets import load_wine
from sklearn.tree import DecisionTreeClassifier
# Load the Wine dataset
wine = load_wine()
X, y = wine.data, wine.target
# Splitting the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Creating and training the Decision Tree model
model = DecisionTreeClassifier(random_state=42)
model.fit(X_train, y_train)
# Predicting the test set results
y_pred = model.predict(X_test)
# Evaluating the model
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average='macro')
recall = recall_score(y_test, y_pred, average='macro')
f1 = f1_score(y_test, y_pred, average='macro')
# Print the results
print("Accuracy:", accuracy)
print("Precision:", precision)
print("Recall:", recall)
print("F1 Score:", f1)
4.樸素貝葉斯
樸素貝葉斯分類器是一系列簡單的 “概率分類器”,它們使用貝葉斯定理和特征之間的強(樸素)獨立性假設。它特別用于文本分類。
它計算給定每個輸入值的每個類別的概率和每個類別的條件概率。然后使用這些概率根據最高概率對新值進行分類。
評估指標:
- 準確性:衡量模型的整體正確性。
- 精確率、召回率和 F1 分數:在類別分布不平衡的情況下尤其重要。
from sklearn.datasets import load_digits
from sklearn.naive_bayes import GaussianNB
# Load the Digits dataset
digits = load_digits()
X, y = digits.data, digits.target
# Splitting the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Creating and training the Naive Bayes model
model = GaussianNB()
model.fit(X_train, y_train)
# Predicting the test set results
y_pred = model.predict(X_test)
# Evaluating the model
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average='macro')
recall = recall_score(y_test, y_pred, average='macro')
f1 = f1_score(y_test, y_pred, average='macro')
# Print the results
print("Accuracy:", accuracy)
print("Precision:", precision)
print("Recall:", recall)
print("F1 Score:", f1)
5.K-最近鄰(KNN)
K 最近鄰 (KNN) 是一種簡單直觀的機器學習算法,用于分類和回歸任務。
它根據輸入數據點與其在特征空間中最近鄰居的相似性進行預測。
在 KNN 中,新數據點的預測由其 k 個最近鄰的多數類(用于分類)或平均值(用于回歸)確定。KNN 中的 “k” 表示要考慮的鄰居數量,這是用戶選擇的超參數。
算法
KNN 算法包括以下步驟
- 計算距離:計算新數據點與數據集中所有其他數據點之間的距離。
- 查找鄰居:根據計算的距離選擇 k 個最近鄰居。
- 多數投票或平均:對于分類,分配 k 個鄰居中出現最頻繁的類標簽。對于回歸,計算 k 個鄰居的目標變量的平均值。
- 進行預測:將預測的類標簽或值分配給新數據點。
評估指標
- 「分類」:準確率、精確率、召回率、F1 分數。
- 「回歸」:均方誤差 (MSE)、R 平方。
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
# Load the Wine dataset
wine = load_wine()
X, y = wine.data, wine.target
# Splitting the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Creating and training the KNN model
knn_model = KNeighborsClassifier(n_neighbors=3)
knn_model.fit(X_train, y_train)
# Predicting the test set results
y_pred_knn = knn_model.predict(X_test)
# Evaluating the model
accuracy_knn = accuracy_score(y_test, y_pred_knn)
precision_knn = precision_score(y_test, y_pred_knn, average='macro')
recall_knn = recall_score(y_test, y_pred_knn, average='macro')
f1_knn = f1_score(y_test, y_pred_knn, average='macro')
# Print the results
print("Accuracy:", accuracy_knn)
print("Precision:", precision_knn)
print("Recall:", recall_knn)
print("F1 Score:", f1_knn)
6.SVM
支持向量機 (SVM) 是一種強大的監督學習算法,用于分類和回歸任務。
它們在高維空間中特別有效,廣泛應用于圖像分類、文本分類和生物信息學等各個領域。
算法原理
支持向量機的工作原理是找到最能將數據分為不同類別的超平面。
選擇超平面以最大化邊距,即超平面與每個類的最近數據點(支持向量)之間的距離。
SVM 還可以通過使用核函數將輸入空間轉換為可以線性分離的高維空間來處理非線性數據。
訓練 SVM 的算法包括以下步驟:
- 數據準備:預處理數據并根據需要對分類變量進行編碼。
- 選擇核:選擇合適的核函數,例如線性、多項式或徑向基函數 (RBF)。
- 模型訓練:通過尋找使類之間的間隔最大化的超平面來訓練 SVM。
- 模型評估:使用交叉驗證或保留驗證集評估 SVM 的性能。
評估指標
- 「分類」:準確率、精確率、召回率、F1 分數。
- 「回歸」:均方誤差 (MSE)、R 平方。
from sklearn.svm import SVC
breast_cancer = load_breast_cancer()
X, y = breast_cancer.data, breast_cancer.target
# Splitting the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Creating and training the SVM model
svm_model = SVC()
svm_model.fit(X_train, y_train)
# Predicting the test set results
y_pred_svm = svm_model.predict(X_test)
# Evaluating the model
accuracy_svm = accuracy_score(y_test, y_pred_svm)
precision_svm = precision_score(y_test, y_pred_svm, average='macro')
recall_svm = recall_score(y_test, y_pred_svm, average='macro')
f1_svm = f1_score(y_test, y_pred_svm, average='macro')
accuracy_svm, precision_svm, recall_svm, f1_svm
# Print the results
print("Accuracy:", accuracy_svm)
print("Precision:", precision_svm)
print("Recall:", recall_svm)
print("F1 Score:", f1_svm)
7.隨機森林
隨機森林是一種集成學習技術,它結合了多個決策樹來提高預測性能并減少過度擬合。
它們廣泛用于分類和回歸任務,并以其魯棒性和多功能性而聞名。
算法步驟
隨機森林是根據數據集的隨機子集并使用特征的隨機子集進行訓練的決策樹的集合。
森林中的每棵決策樹獨立地進行預測,最終的預測是通過聚合所有樹的預測來確定的。
構建隨機森林的算法包括以下步驟
- 隨機采樣:從數據集中隨機選擇樣本子集(帶替換)來訓練每棵樹。
- 特征隨機化:隨機選擇每個節點的特征子集以考慮分割。
- 樹構建:使用采樣數據和特征構建多個決策樹。
- 投票或平均:聚合所有樹的預測以做出最終預測。
評估指標
- 分類:準確率、精確率、召回率、F1 分數。
- 回歸:均方誤差 (MSE)、R 平方。
from sklearn.ensemble import RandomForestClassifier
breast_cancer = load_breast_cancer()
X, y = breast_cancer.data, breast_cancer.target
# Splitting the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Creating and training the Random Forest model
rf_model = RandomForestClassifier(random_state=42)
rf_model.fit(X_train, y_train)
# Predicting the test set results
y_pred_rf = rf_model.predict(X_test)
# Evaluating the model
accuracy_rf = accuracy_score(y_test, y_pred_rf)
precision_rf = precision_score(y_test, y_pred_rf, average='macro')
recall_rf = recall_score(y_test, y_pred_rf, average='macro')
f1_rf = f1_score(y_test, y_pred_rf, average='macro')
# Print the results
print("Accuracy:", accuracy)
print("Precision:", precision)
print("Recall:", recall)
print("F1 Score:", f1)
8.K-均值聚類
K 均值聚類是一種無監督學習算法,用于將數據分組為 “K” 個聚類。確定 k 個質心后,每個數據點被分配到最近的簇。
該算法將數據點分配給一個簇,使得數據點與簇質心之間的平方距離之和最小。
評估指標
- 「慣性」:樣本到最近聚類中心的總平方距離稱為慣性。值越低越好。
- 「Silhouette Score」:表示一個項目屬于其自身集群的緊密程度。高輪廓分數意味著該項目與其自身的集群匹配良好,而與附近的集群匹配不佳。輪廓得分從 -1 到 1。
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# Load the Iris dataset
iris = load_iris()
X = iris.data
# Applying K-Means Clustering
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)
# Predicting the cluster for each data point
y_pred_clusters = kmeans.predict(X)
# Evaluating the model
inertia = kmeans.inertia_
silhouette = silhouette_score(X, y_pred_clusters)
print("Inertia:", inertia)
print("Silhouette:", silhouette)
9.PCA
降維是通過使用主成分分析 (PCA) 來完成的。它將數據轉換為新的坐標系,減少變量數量,同時盡可能多地保留原始數據的變化。
使用 PCA 可以找到使數據方差最大化的主要成分或軸。第一個主成分捕獲最大方差,第二個主成分(與第一個主成分正交)捕獲第二大方差,依此類推。
評估指標
- 「解釋方差」:表示每個主成分捕獲的數據方差有多少。
- 「總解釋方差」:由所選主成分解釋的累積方差。
from sklearn.datasets import load_breast_cancer
from sklearn.decomposition import PCA
import numpy as np
# Load the Breast Cancer dataset
breast_cancer = load_breast_cancer()
X = breast_cancer.data
# Applying PCA
pca = PCA(n_compnotallow=2) # Reducing to 2 dimensions for simplicity
pca.fit(X)
# Transforming the data
X_pca = pca.transform(X)
# Explained Variance
explained_variance = pca.explained_variance_ratio_
# Total Explained Variance
total_explained_variance = np.sum(explained_variance)
print("Explained variance:", explained_variance)
print("Total Explained Variance:", total_explained_variance)
10.梯度提升算法
梯度提升是一種先進的機器學習技術。它依次構建多個弱預測模型(通常是決策樹)。每個新模型都逐漸最小化整個模型的損失函數(誤差)。
評估指標
- 「對于分類」:準確率、精確率、召回率、F1 分數。
- 「對于回歸」:均方誤差 (MSE)、R 平方。
from sklearn.datasets import load_diabetes
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.metrics import mean_squared_error, r2_score
# Load the Diabetes dataset
diabetes = load_diabetes()
X, y = diabetes.data, diabetes.target
# Splitting the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Creating and training the Gradient Boosting model
gb_model = GradientBoostingRegressor(random_state=42)
gb_model.fit(X_train, y_train)
# Predicting the test set results
y_pred_gb = gb_model.predict(X_test)
# Evaluating the model
mse_gb = mean_squared_error(y_test, y_pred_gb)
r2_gb = r2_score(y_test, y_pred_gb)
print("MSE:", mse_gb)