[機械学習]機械学習教科書Ch 04-(1)

4658 ワード

第四章はデータの前処理について、最も集中的に聞く必要がある章のようです.がんばって!
この章.
  • 欠落データ
  • 分類データ
  • データセットは、トレーニングデータセットとテストデータセット
  • に分けられる.
  • プロパティスケーリング
  • 有用特性
  • を選択する.
  • ランダムツリーを使用する特性の重要度
    ディレクトリがあります.
  • データ品質とデータに有用な情報量は機械学習アルゴリズムを学習する重要な要素であるため,前処理は非常に重要である.

    失われたデータをデータセットから削除または置換


    😉 テーブル形状データに欠落している値の識別


    isnull()セルに数値が含まれているか欠落しているかを確認します.
    isnull().欠落した値の数をsum()でチェック

    😊失われたデータを処理する最も簡単な方法:データセットからトレーニングサンプルまたは属性(行または列)を削除する


    欠落した値を除外するトレーニングサンプルまたはプロパティ
    dropna()の使用
    # 누락된 값이 있는 행을 삭제합니다
    df.dropna(axis=0)
    
    # 누락된 값이 있는 열을 삭제합니다
    df.dropna(axis=1)
    
    # 모든 열이 NaN인 행을 삭제합니다
    df.dropna(how='all') 
    
    # NaN 아닌 값이 네 개보다 작은 행을 삭제합니다
    df.dropna(thresh=4)
    
    # 특정 열에 NaN이 있는 행만 삭제합니다(여기서는 'C'열)
    df.dropna(subset=['C'])
    失われたデータを削除するのは簡単そうに見えますが、多くのデータを削除した場合、安定した分析ができないという欠点があります.また、属性列を削除しすぎると、分類ツリーに分類情報が失われる可能性があります.

    =>補間


    😋欠落した値の置換


    補間テクノロジーを使用して、データセットの他のトレーニングサンプルから欠落値を推定します.
    最も一般的な方法は、平均置換->単純Imputerクラス
    # 행의 평균으로 누락된 값 대체하기
    from sklearn.impute import SimpleImputer
    import numpy as np
    
    imr = SimpleImputer(missing_values=np.nan, strategy='mean')
    imr = imr.fit(df.values)
    imputed_data = imr.transform(df.values)
    imputed_data
    上のポリシーパラメータにmeanを追加しますが、中央値またはmost frequencyがあります.このオプションは、カテゴリ属性値を置き換えるときに便利です.
    より簡単な方法は,パラメータ欠落値としての充填法をPandasのfillna法に伝達することである.
    bfillまたはfillbackは、次の行の値を使用して欠落した値を入力します.ffillまたはpadは、欠落した値を前の行の値に入力します.
    from sklearn.impute import KNNImputer
    
    kimr = KNNImputer()
    kimr.fit_transform(df.values)
    
    df.fillna(df.mean())

    😎 Sikit Run推定器API


    データセットに欠落している値を置換することを変換と呼びます.データ変換に使用されるSikittrunと呼ばれる変換器クラス.
    推定器の2つの主な方法はfit transformです
    推定器には予測方法がありますが、transform方法もあります.
    --セキレン変換器の訓練と変換過程図

    --セキレン推定器の訓練と予測過程図

    機械学習アルゴリズムの分類データを変換する


    カテゴリデータについて話すときは、順序がないことを確認してください.順序付けされたプロパティは、ソート可能または順序付けされたカテゴリプロパティと考えられます.

    pandasによる分類データ符号化

    import pandas as pd
    
    df = pd.DataFrame([['green', 'M', 10.1, 'class2'],
                       ['red', 'L', 13.5, 'class1'],
                       ['blue', 'XL', 15.3, 'class2']])
    
    df.columns = ['color', 'size', 'price', 'classlabel']
    df

    このようにして作成されるデータには、無秩序特性(color)、秩序特性(size)、数値特性(price)がある.

    😍 カテゴリのプロパティを順番にマップするには


    順序フィーチャーを識別するには、カテゴリ文字列の整数に変換する必要があります.
    ++クラスラベルをエンコードする場合は、整数に変換し、整数配列に渡すことが望ましい.
    (クラスラベルに順序がない)

    😘 無秩序特性:温度-熱符号化


    ColumnTransformerでは、OrdinalEncoderがカテゴリデータを整数にエンコードする複数のカラムを一度に整数に変換できます.ColumnTransformerでは、Pandasデータフレームの各カラムに異なるフォーマットコピーを適用できます.
    しかし,このように配列を分類器に注入すると,クラスデータを処理する際に特性に順序がないと仮定するが,学習アルゴリズムには順序がある.この仮定は正しくないが,有意義な結果が得られる.しかし、これは最高の結果ではありません.
    これは,無秩序特性における固有値毎に,SikerunプリプロセッシングモジュールにおけるOneHotEncoderを用いて変換を実行する新しい擬人を,熱符号化(One‐hot encode)技術によって作成する考えである.
    from sklearn.preprocessing import OneHotEncoder
    
    X = df[['color', 'size', 'price']].values
    color_ohe = OneHotEncoder()
    color_ohe.fit_transform(X[:, 0].reshape(-1, 1)).toarray()
    
    #######
    from sklearn.compose import ColumnTransformer
    
    X = df[['color', 'size', 'price']].values
    c_transf = ColumnTransformer([ ('onehot', OneHotEncoder(), [0]),
                                   ('nothing', 'passthrough', [1, 2])])
    c_transf.fit_transform(X)
    OneHotEncoderのdtypeパラメータnpを指定します.intとして指定された整数で、熱符号化に使用されます.

    1-ホットコーディングデータセットを使用するときは、多重共線の問題に注意してください!!


    (特性間の相関が高いと逆行列の計算が難しくなり数値的に不安定になる)
    # get_dummies에서 다중 공선성 문제 처리
    pd.get_dummies(df[['price', 'color', 'size']], drop_first=True)
    
    # OneHotEncoder에서 다중 공선성 문제 처리
    color_ohe = OneHotEncoder(categories='auto', drop='first')
    c_transf = ColumnTransformer([ ('onehot', color_ohe, [0]),
                                   ('nothing', 'passthrough', [1, 2])])
    c_transf.fit_transform(X)

    🥰 データセットをトレーニングデータセットとテストデータセットに分ける


    モデルを実戦に投入して無バイアス性能測定を行う前に,テストデータセットのラベルと比較する必要がある.
    Sikit Runのmodel selectionモジュールのtrain test split関数を使用することにより、データランダムトレーニングデータセットとテストデータセットを容易に分離することができる.