Python 機(jī)器學(xué)習(xí)中 14 個(gè)常用算法實(shí)現(xiàn)
機(jī)器學(xué)習(xí)作為人工智能的一個(gè)重要分支,在當(dāng)今社會(huì)的應(yīng)用越來越廣泛。從簡(jiǎn)單的線性回歸到復(fù)雜的集成學(xué)習(xí)方法,每種算法都有其獨(dú)特的應(yīng)用場(chǎng)景。本文將介紹14種常用的機(jī)器學(xué)習(xí)算法,并通過實(shí)際代碼示例來幫助讀者更好地理解和應(yīng)用這些算法。
1. 線性回歸
線性回歸是預(yù)測(cè)連續(xù)值的一種方法。比如,根據(jù)房屋面積預(yù)測(cè)房?jī)r(jià)。
代碼示例:
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
# 創(chuàng)建數(shù)據(jù)集
X = np.array([[1], [2], [3], [4], [5], [6]])
y = np.array([2, 4, 5, 4, 5, 7])
# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 創(chuàng)建模型
model = LinearRegression()
# 訓(xùn)練模型
model.fit(X_train, y_train)
# 預(yù)測(cè)
predictions = model.predict(X_test)
# 可視化結(jié)果
plt.scatter(X, y, color='blue', label='Actual')
plt.plot(X, model.predict(X), color='red', label='Predicted')
plt.xlabel('Area (sq ft)')
plt.ylabel('Price ($)')
plt.legend()
plt.show()
這段代碼展示了如何使用LinearRegression類創(chuàng)建模型。它會(huì)根據(jù)給定的數(shù)據(jù)點(diǎn)畫出一條直線,盡可能地貼近這些點(diǎn)。
2. 邏輯回歸
邏輯回歸用于分類問題。比如,判斷一封郵件是否為垃圾郵件。
代碼示例:
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加載數(shù)據(jù)集
data = load_iris()
X = data.data
y = data.target
# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 創(chuàng)建模型
model = LogisticRegression()
# 訓(xùn)練模型
model.fit(X_train, y_train)
# 預(yù)測(cè)
predictions = model.predict(X_test)
# 模型評(píng)估
accuracy = accuracy_score(y_test, predictions)
print(f"Accuracy: {accuracy * 100:.2f}%")
這段代碼展示了如何使用LogisticRegression類創(chuàng)建模型。accuracy_score函數(shù)用來評(píng)估模型的準(zhǔn)確性。
3. 決策樹
決策樹可以解決分類和回歸問題。比如,決定是否批準(zhǔn)一筆貸款。
代碼示例:
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris
# 加載數(shù)據(jù)集
data = load_iris()
X = data.data
y = data.target
# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 創(chuàng)建模型
model = DecisionTreeClassifier()
# 訓(xùn)練模型
model.fit(X_train, y_train)
# 預(yù)測(cè)
predictions = model.predict(X_test)
# 模型評(píng)估
accuracy = accuracy_score(y_test, predictions)
print(f"Accuracy: {accuracy * 100:.2f}%")
這段代碼展示了如何使用DecisionTreeClassifier類創(chuàng)建模型。通過劃分?jǐn)?shù)據(jù),模型能夠做出決策。
4. 支持向量機(jī)(SVM)
支持向量機(jī)用于分類和回歸問題。比如,識(shí)別手寫數(shù)字。
代碼示例:
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_digits
# 加載數(shù)據(jù)集
data = load_digits()
X = data.data
y = data.target
# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 創(chuàng)建模型
model = SVC()
# 訓(xùn)練模型
model.fit(X_train, y_train)
# 預(yù)測(cè)
predictions = model.predict(X_test)
# 模型評(píng)估
accuracy = accuracy_score(y_test, predictions)
print(f"Accuracy: {accuracy * 100:.2f}%")
這段代碼展示了如何使用SVC類創(chuàng)建模型。SVM會(huì)在數(shù)據(jù)中找到最佳的邊界來區(qū)分不同類別。
5. K-近鄰算法(KNN)
K-近鄰算法用于分類和回歸問題。比如,判斷一款游戲是否受歡迎。
代碼示例:
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris
# 加載數(shù)據(jù)集
data = load_iris()
X = data.data
y = data.target
# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 創(chuàng)建模型
model = KNeighborsClassifier(n_neighbors=3)
# 訓(xùn)練模型
model.fit(X_train, y_train)
# 預(yù)測(cè)
predictions = model.predict(X_test)
# 模型評(píng)估
accuracy = accuracy_score(y_test, predictions)
print(f"Accuracy: {accuracy * 100:.2f}%")
這段代碼展示了如何使用KNeighborsClassifier類創(chuàng)建模型。KNN會(huì)根據(jù)最近的鄰居來判斷數(shù)據(jù)點(diǎn)的類別。
6. 隨機(jī)森林
隨機(jī)森林是一種集成學(xué)習(xí)方法,用于分類和回歸問題。比如,預(yù)測(cè)股票價(jià)格。
代碼示例:
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris
# 加載數(shù)據(jù)集
data = load_iris()
X = data.data
y = data.target
# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 創(chuàng)建模型
model = RandomForestClassifier(n_estimators=100)
# 訓(xùn)練模型
model.fit(X_train, y_train)
# 預(yù)測(cè)
predictions = model.predict(X_test)
# 模型評(píng)估
accuracy = accuracy_score(y_test, predictions)
print(f"Accuracy: {accuracy * 100:.2f}%")
這段代碼展示了如何使用RandomForestClassifier類創(chuàng)建模型。隨機(jī)森林通過多個(gè)決策樹的投票來做出最終的決策。
7. 主成分分析(PCA)
主成分分析用于降維。比如,簡(jiǎn)化高維數(shù)據(jù)集。
代碼示例:
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
# 加載數(shù)據(jù)集
data = load_iris()
X = data.data
y = data.target
# 創(chuàng)建PCA模型
pca = PCA(n_components=2)
# 轉(zhuǎn)換數(shù)據(jù)
X_pca = pca.fit_transform(X)
# 可視化結(jié)果
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis')
plt.xlabel('First Principal Component')
plt.ylabel('Second Principal Component')
plt.title('PCA of Iris Dataset')
plt.show()
這段代碼展示了如何使用PCA類進(jìn)行數(shù)據(jù)降維。通過將數(shù)據(jù)投影到新的坐標(biāo)軸上,PCA能夠保留數(shù)據(jù)的主要特征。
8. 聚類算法(K-Means)
聚類算法用于無監(jiān)督學(xué)習(xí)。比如,將顧客分成不同的群體。
代碼示例:
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
# 創(chuàng)建數(shù)據(jù)集
X, _ = make_blobs(n_samples=300, centers=4, random_state=42)
# 創(chuàng)建KMeans模型
kmeans = KMeans(n_clusters=4)
# 訓(xùn)練模型
kmeans.fit(X)
# 預(yù)測(cè)
labels = kmeans.predict(X)
# 可視化結(jié)果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='red', marker='x')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('K-Means Clustering')
plt.show()
這段代碼展示了如何使用KMeans類進(jìn)行聚類。通過將數(shù)據(jù)點(diǎn)分配給最近的質(zhì)心,K-Means能夠?qū)?shù)據(jù)分成不同的群組。
9. 梯度提升樹(Gradient Boosting)
梯度提升樹用于分類和回歸問題。比如,預(yù)測(cè)客戶是否會(huì)流失。
代碼示例:
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris
# 加載數(shù)據(jù)集
data = load_iris()
X = data.data
y = data.target
# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 創(chuàng)建模型
model = GradientBoostingClassifier()
# 訓(xùn)練模型
model.fit(X_train, y_train)
# 預(yù)測(cè)
predictions = model.predict(X_test)
# 模型評(píng)估
accuracy = accuracy_score(y_test, predictions)
print(f"Accuracy: {accuracy * 100:.2f}%")
這段代碼展示了如何使用GradientBoostingClassifier類創(chuàng)建模型。梯度提升樹通過組合多個(gè)弱模型來提高預(yù)測(cè)性能。
10. AdaBoost
AdaBoost也是一種集成學(xué)習(xí)方法,用于分類和回歸問題。比如,識(shí)別惡意軟件。
代碼示例:
from sklearn.ensemble import AdaBoostClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris
# 加載數(shù)據(jù)集
data = load_iris()
X = data.data
y = data.target
# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 創(chuàng)建模型
model = AdaBoostClassifier()
# 訓(xùn)練模型
model.fit(X_train, y_train)
# 預(yù)測(cè)
predictions = model.predict(X_test)
# 模型評(píng)估
accuracy = accuracy_score(y_test, predictions)
print(f"Accuracy: {accuracy * 100:.2f}%")
這段代碼展示了如何使用AdaBoostClassifier類創(chuàng)建模型。AdaBoost通過賦予錯(cuò)誤分類的數(shù)據(jù)更高的權(quán)重來改進(jìn)模型。
11. XGBoost
XGBoost是另一種梯度提升框架,廣泛應(yīng)用于分類和回歸問題。比如,預(yù)測(cè)股市趨勢(shì)。
代碼示例:
import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris
# 加載數(shù)據(jù)集
data = load_iris()
X = data.data
y = data.target
# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 創(chuàng)建模型
model = xgb.XGBClassifier()
# 訓(xùn)練模型
model.fit(X_train, y_train)
# 預(yù)測(cè)
predictions = model.predict(X_test)
# 模型評(píng)估
accuracy = accuracy_score(y_test, predictions)
print(f"Accuracy: {accuracy * 100:.2f}%")
這段代碼展示了如何使用XGBClassifier類創(chuàng)建模型。XGBoost通過優(yōu)化目標(biāo)函數(shù)來提高模型性能。
12. LightGBM
LightGBM是另一種高效的梯度提升框架,適用于大規(guī)模數(shù)據(jù)集。比如,推薦系統(tǒng)。
代碼示例:
import lightgbm as lgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris
# 加載數(shù)據(jù)集
data = load_iris()
X = data.data
y = data.target
# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 創(chuàng)建模型
model = lgb.LGBMClassifier()
# 訓(xùn)練模型
model.fit(X_train, y_train)
# 預(yù)測(cè)
predictions = model.predict(X_test)
# 模型評(píng)估
accuracy = accuracy_score(y_test, predictions)
print(f"Accuracy: {accuracy * 100:.2f}%")
這段代碼展示了如何使用LGBMClassifier類創(chuàng)建模型。LightGBM通過高效地處理數(shù)據(jù)來加速訓(xùn)練過程。
13. CatBoost
CatBoost是另一個(gè)高效的梯度提升框架,特別適合處理分類特征。比如,預(yù)測(cè)用戶行為。
代碼示例:
import catboost as cb
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris
# 加載數(shù)據(jù)集
data = load_iris()
X = data.data
y = data.target
# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 創(chuàng)建模型
model = cb.CatBoostClassifier()
# 訓(xùn)練模型
model.fit(X_train, y_train)
# 預(yù)測(cè)
predictions = model.predict(X_test)
# 模型評(píng)估
accuracy = accuracy_score(y_test, predictions)
print(f"Accuracy: {accuracy * 100:.2f}%")
這段代碼展示了如何使用CatBoostClassifier類創(chuàng)建模型。CatBoost通過處理分類特征來提高模型性能。
14. DBSCAN
DBSCAN是一種基于密度的聚類算法,用于發(fā)現(xiàn)任意形狀的簇。比如,異常檢測(cè)。
代碼示例:
from sklearn.cluster import DBSCAN
from sklearn.datasets import make_moons
import matplotlib.pyplot as plt
# 創(chuàng)建數(shù)據(jù)集
X, _ = make_moons(n_samples=300, noise=0.1, random_state=42)
# 創(chuàng)建DBSCAN模型
dbscan = DBSCAN(eps=0.2, min_samples=5)
# 訓(xùn)練模型
labels = dbscan.fit_predict(X)
# 可視化結(jié)果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('DBSCAN Clustering')
plt.show()
這段代碼展示了如何使用DBSCAN類進(jìn)行聚類。DBSCAN通過尋找密度相連的點(diǎn)來發(fā)現(xiàn)簇。
總結(jié)
本文介紹了14種常用的機(jī)器學(xué)習(xí)算法,并通過實(shí)際代碼示例展示了它們的基本用法。從簡(jiǎn)單的線性回歸到復(fù)雜的集成學(xué)習(xí)方法,每種算法都有其獨(dú)特的應(yīng)用場(chǎng)景。通過理解這些算法的工作原理,讀者可以更好地選擇合適的工具來解決實(shí)際問題。希望本文能幫助大家更深入地掌握機(jī)器學(xué)習(xí)的核心技術(shù)。