1. 程式人生 > >機器學習實踐(二)—sklearn之資料集

機器學習實踐(二)—sklearn之資料集

一、可用資料集

各資料集優點

sk 資料量小,方便學習

uci 資料真實,全面

ka 競賽平臺,資料集真實

二、Scikit-learn

1. 介紹

  • Python語言的機器學習工具
  • Scikit-learn包括許多知名的機器學習演算法的實現
  • Scikit-learn文件完善,容易上手,豐富的API
  • 目前穩定版本0.19.1

2. 安裝

通過 pip 安裝

pip3 install Scikit-learn==0.19.1

安裝好之後可以通過以下命令檢視是否安裝成功

import sklearn

注:安裝scikit-learn需要Numpy, Scipy等庫

3. Scikit-learn 主要的API

  1. 分類、聚類、迴歸
  2. 特徵工程
  3. 模型選擇、調優

三、SKlearn 資料集

1. 資料集介紹

  • sklearn.datasets
    • load_*()
      • 獲取小規模資料集,資料包含在datasets裡
    • fetch_*(data_home=None)
      • 獲取大規模資料集,需要從網路上下載。
      • 函式的第一個引數是data_home,表示資料集下載的目錄,預設目錄是根目錄下的 scikit_learn_data資料夾: ~/scikit_learn_data/

2. sklearn小資料集

  • 示例:
    • sklearn.datasets.load_iris()
      • 載入並返回鳶尾花資料集
    • sklearn.datasets.load_boston()
      • 載入並返回波士頓房價資料集

3. sklearn大資料集

  • 示例:
    • sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)
      • subset:‘train’或者’test’,‘all’,可選,選擇要載入的資料集。
      • 訓練集的“訓練”,測試集的“測試”,兩者的“全部”

4. sklearn資料集返回值介紹

  • load 和 fetch 返回的資料型別 datasets.base.Bunch (字典格式)
    • data:特徵資料陣列(特徵值輸入)
    • target:標籤陣列(目標輸出)
    • feature_names:特徵名稱
    • target_names:標籤名稱
    • DESCR:資料描述
  • Bunch 雖然是字典格式,但可以通過 ‘點’ 的形式把屬性點出來
  • 示例程式碼:

    from sklearn.datasets import load_iris
    
    # 獲取鳶尾花資料集
    iris = load_iris()
    
    print("鳶尾花資料集的返回值:\n", iris)
    
    print("鳶尾花的特徵值:\n", iris["data"])
    
    print("鳶尾花的目標值:\n", iris.target)
    
    print("鳶尾花特徵的名字:\n", iris.feature_names)
    
    print("鳶尾花目標值的名字:\n", iris.target_names)
    
    print("鳶尾花的描述:\n", iris.DESCR)
    

四、資料集劃分

  • 機器學習一般的資料集會劃分為兩個部分:

    • 訓練資料:用於訓練、構建模型
    • 測試資料:在模型檢驗時使用,用於 評估模型是否有效
  • 劃分比例:

    • 訓練集:70~80%
    • 測試集:20~30%
  • 資料集劃分 api

    • sklearn.model_selection.train_test_split( x, y, test_size, random_state )
      • x 資料集的特徵值
      • y 資料集的標籤值
      • test_size 測試集的大小,一般為float,預設 25%
      • random_state 隨機數種子,不同的種子會造成不同的隨機取樣結果。相同的種子取樣結果相同。
    • return
      • 測試集特徵
      • 訓練集特徵
      • 訓練標籤
      • 測試標籤 (預設隨機取)
  • 示例程式碼:

    from sklearn.datasets import load_iris
    from sklearn.model_selection import train_test_split
    
    # 獲取鳶尾花資料集
    iris = load_iris()
    
    # 預設測試集佔比 25%
    # 第一次劃分,隨機種子 22
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)
    
    # 第二次劃分,隨機種子 6
    x_train1, x_test1, y_train1, y_test1 = train_test_split(iris.data, iris.target, random_state=6)
    
    # 第三次劃分,隨機種子 6
    x_train2, x_test2, y_train2, y_test2 = train_test_split(iris.data, iris.target, random_state=6)
    
    # 比較第一次和第二次劃分,當隨機種子設定不同時,劃分結果不同
    print(x_train == x_train1)
    
    # 比較第二次和第三次劃分,當隨機種子設定相時,劃分結果相同
    print(x_train1 == x_train2)