scikit-learn是什麼?可以拿來做什麼?

scikit-learn是什麼?可以拿來做什麼?

scikit-learn 是一個功能強大的 Python 開源機器學習庫,廣泛應用於資料分析、預測建模和人工智慧相關任務。它提供了簡單易用的介面,讓開發者能快速實現各種機器學習算法,特別適合初學者和專業數據科學家。以下是 scikit-learn 的主要用途與功能,搭配實際應用場景說明:


1. 分類(Classification)

  • 用途:預測資料屬於哪個類別(離散標籤)。
  • 常見算法
    • 隨機森林(RandomForestClassifier)
      • 用來預測連續數值的目標變量
      • 基於決策樹的集成學習方法
    • 邏輯回歸(LogisticRegression)
      • 基於線性回歸,使用 sigmoid 函數將結果映射到 0-1,預測類別機率
      • 簡單、可解釋性強,對線性可分數據效果好
      • 適用於二元分類(ex. 垃圾信件檢測)
    • K-最近鄰(K-Nearest Neighbors,KNN)
      • 根據最近的 K 個鄰居的類別投票決定新數據的類別
      • 優點:無需訓練過程,直觀簡單
      • 缺點:對大數據集計算成本高,對噪音敏感
      • 適用於:圖像分類、小型數據集
    • 支援向量機(SVC)
      • 尋找分隔類別的最佳超平面,支援核技巧處理非線性數據
      • 優點:對高維數據和小樣本有效
      • 缺點:訓練時間長,對參數敏感。
      • 適用於:文字分類(ex. 情感分析)
    • 決策樹(Decision Tree)
      • 基於特徵條件構建樹狀結構,分類數據
      • 優點:易理解、可視化
      • 缺點::容易過擬合,單棵樹性能有限
      • 適用於:簡單分類任務、特徵重要性分析
    • 朴素貝葉斯(Naive Bayes)
      • 基於貝葉斯定理,假設特徵間獨立,計算類別機率
      • 優點:計算效率高,適合文字數據
      • 缺點:特徵獨立假設不總成立
      • 適用於:垃圾郵件過濾、文本分類
    • 梯度提升樹(Gradient Boosting Trees, e.g., GradientBoostingClassifier)
      • 通過迭代添加弱學習器(決策樹),優化損失函數
      • 優點:高準確性,抗過擬合能力強
      • 缺點:訓練速度慢,參數調優複雜
      • 適用於:競賽(如 Kaggle)、結構化數據分類
    • AdaBoost(Adaptive Boosting)
      • 通過加權弱分類器(通常是決策樹),逐步提升性能
      • 優點:簡單有效,適合二元分類
      • 缺點:對噪音數據敏感
      • 適用於:適合二元分類,ex. 人臉檢測
    • XGBoost(Extreme Gradient Boosting)
      • 優化的梯度提升實現,支援並行計算與正則化
      • 優點:速度快、準確性高,廣泛應用於競賽
      • 缺點:需要安裝額外庫(pip install xgboost)
      • 適用於:金融預測、客戶流失分析
    • LightGBM
      • 基於梯度提升,使用直方圖分割技術,優化速度與記憶體
      • 優點:處理大數據集效率高
      • 缺點:需安裝(pip install lightgbm)
      • 適用於:實時分類任務
    • CatBoost
      • 專為類別特徵設計的梯度提升算法,自動處理類別編碼
      • 優點:對類別數據友好,減少預處理
      • 缺點:需安裝(pip install catboost)
      • 適用於:零售數據分析
  • 應用場景
    • 垃圾郵件檢測:判斷郵件是「垃圾」還是「正常」。
    • 醫療診斷:根據症狀預測疾病(如「陽性」或「陰性」)。
from sklearn.ensemble import RandomForestClassifier

X = [[0, 0], [1, 1]] # 特徵數據 
y = [0, 1] # 標籤
clf = RandomForestClassifier() 
clf.fit(X, y) print(clf.predict([[2, 2]])) # 預測新數據

2. 回歸(Regression)

  • 用途:預測連續數值結果。
  • 常見算法
    • LinearRegression(線性回歸)
    • Ridge(嶺回歸)
    • RandomForestRegressor(隨機森林回歸)
  • 應用場景
    • 房價預測:根據面積、位置預測房價。
    • 銷售預測:預測下個月產品銷量。
from sklearn.linear_model import LinearRegression 

X = [[1], [2], [3]] # 特徵 
y = [2, 4, 6] # 目標值 
reg = LinearRegression() 
reg.fit(X, y) print(reg.predict([[4]])) # 預測結果

3. 聚類(Clustering)

  • 用途:將資料分組,發現內在結構(無標籤數據)。
  • 常見算法
    • KMeans(K均值聚類)
    • DBSCAN(密度聚類)
  • 應用場景
    • 客戶分群:根據購買行為將客戶分成不同類型。
    • 圖像分割:將圖像像素聚類為不同區域。
from sklearn.cluster import KMeans 

X = [[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]] 
kmeans = KMeans(n_clusters=2) 
kmeans.fit(X) print(kmeans.labels_) # 聚類標籤

4. 降維(Dimensionality Reduction)

  • 用途:減少特徵數量,簡化數據並保留重要資訊。
  • 常見算法
    • PCA(主成分分析)
    • TSNE(t-SNE,用於視覺化)
  • 應用場景
    • 數據壓縮:減少儲存與計算成本。
    • 視覺化:將高維數據投影到 2D 或 3D 空間。
from sklearn.decomposition import PCA 

X = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
pca = PCA(n_components=2) 
X_reduced = pca.fit_transform(X) 
print(X_reduced) # 降維後數據

5. 模型評估與選擇(Model Evaluation & Selection)

  • 用途:評估模型性能並選擇最佳模型。
  • 工具
    • train_test_split:分割訓練與測試數據。
    • cross_val_score:交叉驗證。
    • GridSearchCV:超參數調優。
  • 應用場景
    • 比較不同算法的準確率。
    • 優化模型參數以提升預測效果。
from sklearn.model_selection import train_test_split 
from sklearn.ensemble import RandomForestClassifier 

X = [[0, 0], [1, 1], [2, 2], [3, 3]] 
y = [0, 1, 0, 1] 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) 
clf = RandomForestClassifier() 
clf.fit(X_train, y_train) print(clf.score(X_test, y_test)) # 測試準確率

6. 資料預處理(Data Preprocessing)

  • 用途:清理與轉換數據,為建模做準備。
  • 功能
    • StandardScaler:標準化數據(均值 0,變異數 1)。
    • MinMaxScaler:縮放到指定範圍(如 0-1)。
    • LabelEncoder:將類別標籤轉為數值。
  • 應用場景
    • 處理缺失值或異常值。
    • 將數據正規化,提升模型性能。
from sklearn.preprocessing import StandardScaler 

X = [[1, 2], [3, 4], [5, 6]] 
scaler = StandardScaler() 
X_scaled = scaler.fit_transform(X) 
print(X_scaled) # 標準化後數據

7. 特徵選擇(Feature Selection)

  • 用途:挑選重要特徵,提升模型效率與準確性。
  • 工具
    • SelectKBest:選擇前 K 個最佳特徵。
    • feature_importances_(隨機森林內建)。
  • 應用場景
    • 過濾無關變數,減少過擬合風險。
    • 分析哪些特徵對預測最重要。
from sklearn.feature_selection import SelectKBest, f_classif 

X = [[0, 0, 1], [0, 1, 0], [1, 0, 0]] 
y = [0, 1, 1] 
selector = SelectKBest(f_classif, k=2) 
X_new = selector.fit_transform(X, y) 
print(X_new) # 選出最佳特徵

8. 其他應用

  • 異常檢測:使用 IsolationForest 或 OneClassSVM 找出異常數據。
  • 時間序列:結合 pandas 處理簡單時間序列預測。
  • 管道(Pipeline):串聯預處理與建模步驟,提升程式碼效率。

優勢與限制

  • 優勢
    • 簡單易用,API 一致,學習曲線平緩。
    • 支援多種算法,適合快速原型設計。
    • 與 pandas、numpy 等庫高度整合。
  • 限制
    • 不支援深度學習(需用 TensorFlow 或 PyTorch)。
    • 大規模數據處理效率不如分散式框架(如 Spark)。
    • 進階應用可能需要自行實現細節。