監督式學習(Supervised Learning)是一種機器學習方法,其中模型在訓練階段利用標註過的數據進行學習。標註數據集包含輸入特徵(Features)和對應的正確結果或標籤(Labels)。模型通過學習輸入特徵與標籤之間的映射關係,來預測新數據的結果。監督式學習可分為分類和回歸兩類問題:分類旨在將數據點分配到預定義的類別中,而回歸則用於預測連續數值。
# 可使用目錄功能快速確認要閱覽的主題
線性回歸是一種用於預測連續變量的方法。它假設兩個變量之間存在線性關係,即自變量(輸入特徵)和因變量(目標值)之間可以用一條直線來表示。
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 假設 df 是你的資料框,其中包含特徵和目標值
X = df.drop(columns=['target']) # 自變量
y = df['target'] # 因變量
# 分割數據
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 建立線性回歸模型
model = LinearRegression()
model.fit(X_train, y_train)
# 預測
y_pred = model.predict(X_test)
# 計算均方誤差
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse}')
優點
缺點
邏輯回歸是一種用於分類問題的模型,特別適合於二元分類(如判斷是否生存)。雖然名稱中有「回歸」,但邏輯回歸實際上是用來預測一個二元結果(0或1,True或False)。
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 假設 df 是你的資料框,其中包含特徵和二元目標值
X = df.drop(columns=['target']) # 自變量
y = df['target'] # 因變量
# 分割數據
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 建立邏輯回歸模型
model = LogisticRegression(max_iter=3000)
model.fit(X_train, y_train)
# 預測
y_pred = model.predict(X_test)
# 計算準確率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
優點
缺點
決策樹是一種基於樹狀結構的分類和回歸模型。每個節點代表一個特徵,每個分支代表該特徵的一個可能取值,每個葉節點代表一個預測結果。決策樹易於解釋,適合處理非線性數據。
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 假設 df 是你的資料框,其中包含特徵和目標值
X = df.drop(columns=['target']) # 自變量
y = df['target'] # 因變量
# 分割數據
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 建立決策樹模型
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
# 預測
y_pred = model.predict(X_test)
# 計算準確率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
優點
缺點
支持向量機是一種分類算法,其目的是找到一條最佳的超平面來最大化分類邊界,從而將不同類別的數據點分開。支持向量機在高維空間中特別有效,並且能夠處理非線性問題,這可以通過使用核技巧來實現。
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
# 加載數據集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 分割數據
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 建立支持向量機模型
model = SVC(kernel='linear')
model.fit(X_train, y_train)
# 預測
y_pred = model.predict(X_test)
# 計算準確率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
優點
缺點
k-近鄰算法是一種簡單的非參數分類方法。該算法的基本思想是:對於給定的測試樣本,找出訓練集中與之最接近的k個樣本(鄰居),根據這k個樣本中的多數類別來決定測試樣本的類別。k-NN 對於少量數據集效果較好,但當數據量增大時計算開銷會增加。
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# 加載數據集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 分割數據
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 建立k-NN模型
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X_train, y_train)
# 預測
y_pred = model.predict(X_test)
# 計算準確率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
優點
缺點
隨機森林是一種集成學習方法,通過結合多棵決策樹的結果來提高模型的準確性和穩定性。它通常比單一的決策樹模型具有更好的表現,並且對於過擬合問題具有更好的抵抗力。
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 假設 df 是你的資料框,其中包含特徵和目標值
X = df.drop(columns=['target']) # 自變量
y = df['target'] # 因變量
# 分割數據
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 建立隨機森林模型
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# 預測
y_pred = model.predict(X_test)
# 計算準確率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
優點
缺點
梯度提升機是一種集成學習算法,通過多個弱學習器(如決策樹)來生成一個強大的預測模型。GBM的基本思想是逐步構建樹模型,每棵樹都試圖修正前一棵樹的錯誤預測。GBM能夠有效地處理非線性數據,並且在各種數據集上表現出色。
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import accuracy_score
# 加載數據集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 分割數據
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 建立GBM模型
model = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, random_state=42)
model.fit(X_train, y_train)
# 預測
y_pred = model.predict(X_test)
# 計算準確率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
優點
缺點