Statistic Learning

Setting and Estimator

  • 在訓練前,必須確保 data 的格式為 (n_samples, n_features)

  • 例如以下為 iris dataset 的格式

    • 共 150 筆訓練資料,每筆含 4 個 features

from sklearn import datasets
iris = datasets.load_iris()
data = iris.data
print(data.shape)  # (150, 4)
  • 不是這個格式的話就要轉成該格式

  • 例如 digits dataset 的格式不符合訓練格式

    • 共 1797 筆訓練資料,每筆是個 8x8 圖案

    • 試著把他轉成 (1797, 64)

digits = datasets.load_digits()
print(digits.images.shape)  # (1797, 8, 8)

# =========補充 : 可以用以下方式來查看圖片=========
import matplotlib.pyplot as plt 
plt.imshow(digits.images[0], cmap=plt.cm.gray_r) 
plt.show()
# ===============================================

data = digits.images.reshape(digits.images.shape[0], -1)  
print(data.shape)  # (1797, 64)

Estimators

  • scikit-learn 最關鍵的物件就是 Estimator

  • 例如在 introduction 的 SVC

  • 每種 estimator 都要有 fit method 來訓練 data

    • 或是給定 transformer 來從 raw data 中 extract/filter 一些 useful features

  • 每種 estimator 都可以在定義時給予 hyperparameters

Supervised learning

k-Nearest neighbors classifier

訓練資料採用 iris dataset

首先將 iris 的 training data 分成 train 和 test 兩組

再來 import knn 的套件訓練 training data

Linear Regression

這裡用 diabetes dataset 實作 linear regression

該 dataset 共有 442 筆病人資料,每筆含 10 種 features

用 linear regrssion 方式學習

Classification

classification 比 linear regression 更適合用於 iris dataset

Exercise

  • 用 digits dataset 的前 90 % 作為 training data

  • 其餘作為 test data

  • 然後用 kNN 和 classification 來試著 train & predict

SVM

  • SVM 提供了兩種算法

    • SVR (Support Vector Regression)

    • SVC (Support Vector Classification)

  • 也能更改 kernel 類別

    • linear

      • svc = svm.SVC(kernel='linear')

    • poly (polynomial)

      • svc = svm.SVC(kernel='poly', degree=3)

    • rbf (radial basis function)

      • svc = svm.SVC(kernel='rbf')

      • gamma: inverse of size of radial kernel

Scores

  • 每個 estimator 都有一個 score 屬性能使用

  • 越高代表 fit 的成果越好

Cross-Validation

  • Scikit-learn 提供了 k-fold cross validation 來讓評分更精準

  • 實際應用時如下,就可以得到 n 組不同的評分

Unsupervised Learning

K-means Clustering

Last updated

Was this helpful?