【資料分析】python機器學習-監督式學習常用方法選擇與基礎操作語法彙整

更新 發佈閱讀 1 分鐘
raw-image

監督式學習(Supervised Learning)是一種機器學習方法,其中模型在訓練階段利用標註過的數據進行學習。標註數據集包含輸入特徵(Features)和對應的正確結果或標籤(Labels)。模型通過學習輸入特徵與標籤之間的映射關係,來預測新數據的結果。監督式學習可分為分類和回歸兩類問題:分類旨在將數據點分配到預定義的類別中,而回歸則用於預測連續數值。


# 可使用目錄功能快速確認要閱覽的主題


方法選擇參考

  • 線性回歸: 當需要建立一個簡單且解釋性強的模型來預測連續數值,並且特徵與目標之間是線性關係時,選擇線性回歸。
  • 邏輯回歸: 當在處理二分類問題時,希望得到一個易於解釋且能預測樣本屬於某一類別的概率的模型,選擇邏輯回歸。
  • 決策樹: 當需要一個簡單易懂、能夠處理非線性關係且方便可視化的模型來做分類或回歸時,選擇決策樹。
  • 支持向量機 (SVM): 當需要一個強大的分類器來處理高維數據,尤其是當數據不可線性分離時,選擇支持向量機。
  • k-近鄰算法 (KNN): 當需要一個基於鄰近點進行分類或回歸的模型,且不需要提前訓練的情況下,選擇 KNN。
  • 隨機森林: 當想要一個具有高準確性且能夠自動處理過擬合的集成模型,尤其是面對高維數據或異常值時,選擇隨機森林。
  • 梯度提升機 (GBM): 當需要一個強大的集成模型來解決複雜的分類或回歸問題,且不介意較長的訓練時間,選擇梯度提升機。


線性回歸 (Linear Regression)

線性回歸是一種用於預測連續變量的方法。它假設兩個變量之間存在線性關係,即自變量(輸入特徵)和因變量(目標值)之間可以用一條直線來表示。


應用場景

  • 預測房價、銷售額等連續變量
  • 分析自變量與因變量之間的關係
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}')


線性回歸優點與缺點


優點

  • 簡單易解釋: 線性回歸模型簡單,容易理解和解釋。模型中的每個係數都能說明該特徵對目標變數的影響。
  • 計算效率高: 線性回歸的計算成本較低,適合大數據集的回歸問題。
  • 適合線性關係: 當特徵和目標變數之間的關係是線性的時,線性回歸表現良好。

缺點

  • 對異常值敏感: 線性回歸對異常值(outliers)非常敏感,異常值可能會極大影響模型的性能。
  • 不能捕捉非線性關係: 線性回歸只能捕捉線性關係,對於複雜的非線性數據表現較差。
  • 假設過於簡單: 假設特徵之間是獨立的,這在實際應用中可能不成立,影響模型的準確性。


邏輯回歸 (Logistic Regression)

邏輯回歸是一種用於分類問題的模型,特別適合於二元分類(如判斷是否生存)。雖然名稱中有「回歸」,但邏輯回歸實際上是用來預測一個二元結果(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}')



邏輯回歸優點與缺點


優點

  • 解釋性強: 邏輯回歸模型輸出的權重係數有清晰的物理意義,便於理解和解釋。
  • 適合二分類問題: 非常適合解決二元分類問題,比如醫療診斷、信用風險評估等。
  • 效率高: 計算開銷小,適合大規模數據集。

缺點

  • 不能捕捉複雜關係: 和線性回歸一樣,邏輯回歸假設數據是線性可分的,無法處理非線性可分的數據。
  • 對異常值敏感: 邏輯回歸也對異常值敏感,異常值可能會極大影響模型的性能。
  • 需要特徵工程: 數據可能需要進行大量的預處理和特徵工程才能得到良好的模型性能。


決策樹 (Decision Tree)

決策樹是一種基於樹狀結構的分類和回歸模型。每個節點代表一個特徵,每個分支代表該特徵的一個可能取值,每個葉節點代表一個預測結果。決策樹易於解釋,適合處理非線性數據。


應用場景

  • 分類問題,如用戶行為預測
  • 回歸問題,如預測某些連續變量
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}')


決策樹優點與缺點


優點

  • 簡單易解釋: 決策樹模型的結構直觀,容易可視化和理解,適合展示決策過程。
  • 處理非線性數據: 決策樹可以很好地處理非線性數據,不需要對數據進行線性變換。
  • 特徵選擇自動化: 决策树能够自动处理多重特征的选择,且不需要进行数据标准化。

缺點

  • 容易過擬合: 決策樹容易對訓練數據過度擬合,導致對新數據的泛化能力較差。這需要通過剪枝或其他技術來控制。
  • 不穩定: 決策樹對於數據集的小變動非常敏感,可能導致完全不同的結果。
  • 偏差較高: 單棵決策樹的模型表現可能較差,特別是在數據集複雜的情況下。


支持向量機 (Support Vector Machine, SVM)

支持向量機是一種分類算法,其目的是找到一條最佳的超平面來最大化分類邊界,從而將不同類別的數據點分開。支持向量機在高維空間中特別有效,並且能夠處理非線性問題,這可以通過使用核技巧來實現。


應用場景

  • 二元分類問題,如文本分類、人臉識別
  • 當數據集高維度且類別之間的邊界明確時
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}')


支持向量機優點與缺點


優點

  • 效果好: 支持向量機在高維空間中表現出色,能夠有效處理線性不可分的數據,並且通常有較高的分類準確性。
  • 防止過擬合: SVM使用正則化參數來防止過擬合,在小樣本情況下依然表現良好。
  • 適用於各種場合: SVM能夠處理線性和非線性分類問題,並且在數據集中異常值較少的情況下效果尤為突出。

缺點

  • 計算成本高: 當數據集較大時,SVM的訓練時間和內存消耗會迅速增加,尤其是在選擇非線性核函數時。
  • 對異常值敏感: 雖然正則化可以防止過擬合,但SVM仍對異常值較為敏感,這可能會影響模型的性能。
  • 參數調整複雜: SVM的效果很大程度上依賴於正確選擇核函數和超參數,這通常需要通過交叉驗證進行調整。


k-近鄰算法 (k-Nearest Neighbors, KNN)

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}')


k-近鄰算法優點與缺點


優點

  • 簡單易實現: k-NN算法簡單直觀,無需建模、訓練,直接進行分類或回歸,是一種典型的懶惰學習方法。
  • 適用於多類型數據: k-NN可以處理分類和回歸問題,並且不依賴數據的分佈形狀,適用於各種類型的數據集。
  • 無需假設: k-NN不需要對數據做任何假設,對於非線性數據同樣適用。

缺點

  • 計算量大: k-NN需要計算每個樣本與所有訓練數據的距離,當數據集較大時,計算成本較高,且對內存消耗大。
  • 對異常值敏感: k-NN對噪音和異常值較為敏感,這可能導致模型性能下降。
  • 需要調整k值: k值的選擇對結果影響較大,過小的k可能導致過擬合,過大的k可能導致欠擬合。


隨機森林 (Random Forest)

隨機森林是一種集成學習方法,通過結合多棵決策樹的結果來提高模型的準確性和穩定性。它通常比單一的決策樹模型具有更好的表現,並且對於過擬合問題具有更好的抵抗力。


應用場景

  • 複雜的分類和回歸問題
  • 當特徵數量多且特徵之間存在較大關聯時
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}')


隨機森林優點與缺點


優點

  • 高準確率: 隨機森林通過集成多棵決策樹,能夠提高模型的準確率和穩定性,並減少過擬合的風險。
  • 適用性廣泛: 隨機森林可以處理分類和回歸問題,且在大部分情況下都能得到較好的效果。
  • 自動特徵選擇: 隨機森林可以自動對特徵進行選擇和篩選,對於高維數據尤其有效。

缺點

  • 計算資源消耗大: 由於隨機森林需要訓練多棵決策樹,因此計算資源和時間消耗較大,尤其是在數據集較大時。
  • 模型解釋性差: 雖然隨機森林能夠給出特徵的重要性排序,但由於其複雜性,模型的整體解釋性較差。
  • 偏差-方差權衡: 隨機森林中個別決策樹的偏差可能會累積,對於某些應用場景而言,模型可能存在過擬合風險。


梯度提升機 (Gradient Boosting Machine, GBM)

梯度提升機是一種集成學習算法,通過多個弱學習器(如決策樹)來生成一個強大的預測模型。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}')


梯度提升機優點與缺點


優點

  • 高準確性: GBM通過逐步建立並結合弱學習器(如決策樹),在許多應用中能夠達到非常高的預測準確性。
  • 靈活性強: GBM可以處理各種數據類型,包括數值型和類別型數據,並且能夠用於分類和回歸問題。
  • 對異常值不敏感: 由於每棵樹只關注上一棵樹的殘差,GBM對異常值的影響較小。

缺點

  • 計算成本高: 由於GBM逐步構建樹的過程需要多次迭代,這使得訓練時間較長,計算資源需求較大。
  • 參數調整困難: GBM有許多超參數需要調整,如樹的數量、深度和學習率,這使得調參過程較為繁瑣。
  • 容易過擬合: 如果樹的數量過多或者學習率過高,GBM容易過擬合,需要通過參數調整和正則化來緩解。
留言
avatar-img
JayRay 的沙龍
21會員
23內容數
JayRay 的沙龍的其他內容
2025/01/21
本文章提供深度學習(Deep Learning)、深度神經網絡(DNN)、卷積神經網絡(CNN)和遞歸神經網絡(RNN)的簡介,並包含它們的定義、應用場景、基本結構、工作原理、優缺點和Python範例。
Thumbnail
2025/01/21
本文章提供深度學習(Deep Learning)、深度神經網絡(DNN)、卷積神經網絡(CNN)和遞歸神經網絡(RNN)的簡介,並包含它們的定義、應用場景、基本結構、工作原理、優缺點和Python範例。
Thumbnail
2025/01/05
本篇文章提供描述性統計的完整指南,涵蓋集中趨勢、離散趨勢和數據分佈等重要概念,並附上豐富的實務應用案例與 Python 資料視覺化參考連結,協助讀者快速瞭解數據分析的基礎知識。
Thumbnail
2025/01/05
本篇文章提供描述性統計的完整指南,涵蓋集中趨勢、離散趨勢和數據分佈等重要概念,並附上豐富的實務應用案例與 Python 資料視覺化參考連結,協助讀者快速瞭解數據分析的基礎知識。
Thumbnail
2024/12/25
Naive Bayes是一種基於貝葉斯定理的機器學習分類演算法,適用於文本分類、垃圾郵件檢測及情感分析等任務。雖然假設特徵之間相互獨立,這在現實中不常成立,但其高效計算與穩定性使得在小數據集及高維度特徵空間中表現良好。
Thumbnail
2024/12/25
Naive Bayes是一種基於貝葉斯定理的機器學習分類演算法,適用於文本分類、垃圾郵件檢測及情感分析等任務。雖然假設特徵之間相互獨立,這在現實中不常成立,但其高效計算與穩定性使得在小數據集及高維度特徵空間中表現良好。
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
前言 這篇會拿Finlab上的策略與機器學習預測線圖的因子進行結合。由於模型是透過2007-2011年的線圖作為訓練資料,回測的時候會從2012年開始以示公平。 還沒看過前面兩篇的可以點下面連結,會比較看得懂接下來的內容。 第一篇: 什麼?!AI也看得懂k線圖?利用機器學習來判斷股票漲
Thumbnail
前言 這篇會拿Finlab上的策略與機器學習預測線圖的因子進行結合。由於模型是透過2007-2011年的線圖作為訓練資料,回測的時候會從2012年開始以示公平。 還沒看過前面兩篇的可以點下面連結,會比較看得懂接下來的內容。 第一篇: 什麼?!AI也看得懂k線圖?利用機器學習來判斷股票漲
Thumbnail
還沒有看過上一篇的可以點擊下面連結 什麼?!AI也看得懂k線圖?利用機器學習來判斷股票漲跌。(1)論文解析。 這一篇會把注意力放在論文提到的技術並套用在台股市場,也會使用論文中的方法進行驗證,看看是否在台股也有一樣的超額報酬。 資料生成 第一步也是最難的一步-資料生成。 這裡
Thumbnail
還沒有看過上一篇的可以點擊下面連結 什麼?!AI也看得懂k線圖?利用機器學習來判斷股票漲跌。(1)論文解析。 這一篇會把注意力放在論文提到的技術並套用在台股市場,也會使用論文中的方法進行驗證,看看是否在台股也有一樣的超額報酬。 資料生成 第一步也是最難的一步-資料生成。 這裡
Thumbnail
前言 這個系列打算分三篇來完成。 第一篇先來解析論文中的方法以及實驗結果。 第二篇會把這篇論文應用在台股上,評估效果如何。 第三篇會把這篇論文實作成因子套用在Finlab上進行回測。 動機 今天要介紹的論文是這篇 (Re-)Imag(in)ing Price Trends。會知道
Thumbnail
前言 這個系列打算分三篇來完成。 第一篇先來解析論文中的方法以及實驗結果。 第二篇會把這篇論文應用在台股上,評估效果如何。 第三篇會把這篇論文實作成因子套用在Finlab上進行回測。 動機 今天要介紹的論文是這篇 (Re-)Imag(in)ing Price Trends。會知道
Thumbnail
在AI浪潮下的訊號開發 提到可將AI訓練好的模型產生之訊號當成一個商品來匯入,今天將手把把示範如何把這訊號進行匯入成商品,並在策略撰寫時,可引用至此訊號,當為輔助資訊。 此表格為筆者使用的CNN模型訊號,在此利用開盤價、最高價、最低價、收盤價的技巧,讓多方趨勢的日期呈現紅K、空方趨勢的日期呈現黑K
Thumbnail
在AI浪潮下的訊號開發 提到可將AI訓練好的模型產生之訊號當成一個商品來匯入,今天將手把把示範如何把這訊號進行匯入成商品,並在策略撰寫時,可引用至此訊號,當為輔助資訊。 此表格為筆者使用的CNN模型訊號,在此利用開盤價、最高價、最低價、收盤價的技巧,讓多方趨勢的日期呈現紅K、空方趨勢的日期呈現黑K
Thumbnail
多元線性迴歸分析(Multiple regression analysis)是一種統計學方法,用於探索多個解釋變量對一個目標變量的影響。它是建立在線性迴歸分析的基礎上的,多元迴歸分析用於探討多個預測變數及一個依變數之間的關係,並且每個變項都是連續變項。本文將介紹多元迴歸分析概念。
Thumbnail
多元線性迴歸分析(Multiple regression analysis)是一種統計學方法,用於探索多個解釋變量對一個目標變量的影響。它是建立在線性迴歸分析的基礎上的,多元迴歸分析用於探討多個預測變數及一個依變數之間的關係,並且每個變項都是連續變項。本文將介紹多元迴歸分析概念。
Thumbnail
這篇論文是用來交易ETF,利用cnn神經網路去預測買點跟賣點由於CNN吃的是圖片輸入更精確來說是一個二維矩陣輸入因此論文作者將ETF的開高低收去計算出15種技術指標乘上15天剛好就可以作成15X15的矩陣(當作圖片)餵給CNN模型當作輸入
Thumbnail
這篇論文是用來交易ETF,利用cnn神經網路去預測買點跟賣點由於CNN吃的是圖片輸入更精確來說是一個二維矩陣輸入因此論文作者將ETF的開高低收去計算出15種技術指標乘上15天剛好就可以作成15X15的矩陣(當作圖片)餵給CNN模型當作輸入
Thumbnail
1. 時間序列的基本概念 常見的時間序列分解方式有以下兩種: 1-1. 加法模型(Additive Model): Y(t)=Trend(t)+Cycle(t)+Seasonal(t)+Irregular(t) 適用於季節性的規模基本保持不變,不隨原始序列水平增減而變化(如圖1(a))。
Thumbnail
1. 時間序列的基本概念 常見的時間序列分解方式有以下兩種: 1-1. 加法模型(Additive Model): Y(t)=Trend(t)+Cycle(t)+Seasonal(t)+Irregular(t) 適用於季節性的規模基本保持不變,不隨原始序列水平增減而變化(如圖1(a))。
Thumbnail
除了如上篇那樣的學術分析之外,我們還有其他方式可以用來探討股價走勢,本篇從以下兩點作出發,並帶點資料科學的思維方式來做探討:技術指標的運用,與外在因素的作用(包含市場消息、公司基本面等)。
Thumbnail
除了如上篇那樣的學術分析之外,我們還有其他方式可以用來探討股價走勢,本篇從以下兩點作出發,並帶點資料科學的思維方式來做探討:技術指標的運用,與外在因素的作用(包含市場消息、公司基本面等)。
Thumbnail
A.i人工智慧真的能預測股市嗎 ? 我們不免俗再提到機器學習,前幾年機器學習,人工智慧這些名詞非常的夯,引領風潮,全世界都在瘋狂,因為AlphaGo 打敗了無數個圍棋高手,開始炒熱機器學習。有人也許好奇,AlphaGo的技術不就是人工神經網路嗎,他的概念由來已久......
Thumbnail
A.i人工智慧真的能預測股市嗎 ? 我們不免俗再提到機器學習,前幾年機器學習,人工智慧這些名詞非常的夯,引領風潮,全世界都在瘋狂,因為AlphaGo 打敗了無數個圍棋高手,開始炒熱機器學習。有人也許好奇,AlphaGo的技術不就是人工神經網路嗎,他的概念由來已久......
Thumbnail
這篇文章的標題有「預測」二字,但看完之後請大家思考一下,這種基於「統計學」、「機器學習」的預測方法,是否跟你心中的「預測」相差甚遠呢?
Thumbnail
這篇文章的標題有「預測」二字,但看完之後請大家思考一下,這種基於「統計學」、「機器學習」的預測方法,是否跟你心中的「預測」相差甚遠呢?
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News