F 11 Scikit-Learnによる機械学習

16582 ワード

💡 機械学習タイプ

  • サポートラーニング
  • 分類
  • 回帰
  • 予測
  • 指導学習なし
  • クラスタ
  • 次元減少
  • 次元
  • 強化学習
  • Monte Carlo methods
  • Q-Learning
  • Policy Gradient methods
  • 💡 同期タスク



    写真の出所:http://https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html

    💡 中間チャネルキーモジュール


    📌 データひょうげん


  • Sikit Runではnumpyの標準、PandasのDataFrame、およびScipyのSparse行列で表すことができます.

  • 2つの典型的な表現
  • 特性マトリクス
    これは、
  • がデータを入力することを意味する.
  • nサンプルで、nフィーチャーは行、列形式の2次元配列構造を有する.
  • 特性行列は主に変数名「X」で表される.
  • ターゲットベクトル
    これは、
  • がデータのラベル(正解)を入力することを意味する.
  • ターゲットベクトルは、主に変数名「y」で表される.
  • 特性行列のXのnサンプルと目標ベクトルyのnサンプルは同じでなければならない.
  • 📌 回帰モデル実習

    import numpy as np
    import matplotlib.pyplot as plt
    r = np.random.RandomState(10)
    x = 10 * r.rand(100)
    y = 2 * x - 3 * r.rand(100)
    plt.scatter(x,y)

    マシンラーニングモデルを使用するモデルオブジェクトを作成します.
    from sklearn.linear_model import LinearRegression
    model = LinearRegression()
    ここで、入力データxをfit()メソッドに直接入れるとエラーが発生します.
    xの形状は(100,),1次元ベクトルであるからである.マトリクス形式の入力データと1次元ベクトル形状のラベルを追加する必要があります.
    X = x.reshape(100,1)
    model.fit(X,y)
    新しいデータを追加して予測します.np.linspace()を使用して生成します.
    x_new = np.linspace(-1, 11, 100)
    X_new = x_new.reshape(100,1)
    y_new = model.predict(X_new)
    plt.scatter(x, y, label='input data')
    plt.plot(X_new, y_new, color='red', label='regression line')

    📌 データセットモジュール


    Toy datasetの例

  • datasets.load boston():回帰問題、米ボストンの住宅価格予測
  • datasets.load breast cancer():分類問題、乳癌判別
  • datasets.load digitals():分類問題、0から9デジタル分類
  • datasets.load iris():分類問題、iris品種分類
  • datasets.load wine():分類問題、ワイン分類
  • datasets.load wine()ブラウズ


    input :
    from sklearn.datasets import load_wine
    data = load_wine()
    type(data)
    output :
    sklearn.utils.Bunch
    ここで、BranchはPythonのディックシャナ形式に類似したデータ型である.
    input :
    print(data.keys())
    ouput :
    dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names'])
  • data:キー値dataは特性マトリクスです.
  • target:ターゲットベクトル.
  • feature names:鍵にプロパティの名前が格納されています.
  • target names:分類するオブジェクト.
  • DESCR:データの説明.
  • 💡 トレーニングデータとテストデータを分離


    📌 データを直接切断


    通常、トレーニングデータとテストデータの比率は8:2です.
    検証データがある場合はtrain,validation,testをそれぞれ6:2:2に分割する.
    from sklearn.datasets import load_wine
    data = load_wine()
    print(data.data.shape)
    print(data.target.shape)
    (178, 13)
    (178,)
    総データ量は178個で,テストデータを8:2の割合で分割した.
    train 142個のテストは36個に分けられた.
    X_train = data.data[:142]
    X_test = data.data[142:]
    y_train = data.target[:142]
    y_test = data.target[142:]
    訓練データとテストデータは分離され、訓練と予測が再開された.
    from sklearn.ensemble import RandomForestClassifier
    model = RandomForestClassifier()
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    精度を評価すると、
    from sklearn.metrics import accuracy_score
    print("정답률=", accuracy_score(y_test, y_pred))
    output :
    정답률= 0.9444444444444444

    📌 train test split()を使用して分離


    Sikittrunはtrainデータとtestデータを分離するAPI機能を提供する.
    from sklearn.model_selection import train_test_split
    result = train_test_split(X, y, test_size=0.2, random_state=42)
    print(result[0].shape)
    print(result[1].shape)
    print(result[2].shape)
    print(result[3].shape)
    (142, 13)
    (36, 13)
    (142,)
    (36,)
    0番目の要素から順に、列車データ特性行列、試験データ特性行列、列車データ目標ベクトル、試験データ目標ベクトルである.一般ユーザーは以下のフリーパッケージを使用します.
    from sklearn.model_selection import train_test_split
    from sklearn.datasets import load_wine
    from sklearn.model_selection import train_test_split
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.metrics import accuracy_score
    data = load_wine()
    X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=11)
    model = RandomForestClassifier()
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    print("정답률=", accuracy_score(y_test, y_pred))