[時計ブーム]Chapter 09


9.時計列のための機械学習

  • クラスタおよびツリーベースの方法
  • クロック列分類


    セシウム表列関連パッケージ
    :複数の有用なデータセットを提供
    異なるEEG測定

    →異なる時間に異なる患者に対して測定した独立クロック列
    特徴の生成方法:cesium
    from cesium import featurize.featurize_time_series as ft
    features_to_use = ["amplitude", "percent_beyond_1_std", "percent_close_to_median", "skew", "max_slope"]
    fset_cesium = ft(times = eeg["times"], values = eeg["measurements"], errors = None, features_to_use = features_to_use, scheduler = None)

    上記のコードを使用して、次の出力フィーチャーを生成します.

    けっていじゅほうしき


    :非線形意思決定を反映する1ステップ
    📌 ランダム森林
    :1つの決定ツリーではなく複数の決定ツリーを使用
    →学習する木の数、各木が許容する最大深さのパラメータに基づいて構造を決定する
    ただし、元のテーブル列データを使用する場合は、次の問題があります.
  • 不均一な長さのクロック列の処理は複雑である可能性がある
  • の大規模な入力は、計算コストの高いモデルおよび学習プロセスの結果
  • をもたらす可能性がある.
  • の特定の期間は重要ではないと仮定し、ツリービューは期間を個別の入力と見なし、極めて強いノイズと微弱な信号だけが
  • 存在する.
    元のデータがフィーチャーに圧縮されて要約されると、ランダムツリーが役に立つ可能性があります.
    効率/コンピューティングリソースの観点から、
  • は非常に有用です.
  • および
  • は、リスクの軽減に役立ちます.
  • プロセスの基本的な動作に適したモデルまたは仮定のないクロック列データ
  • 📌 ランプガイドツリー
  • の順序でツリーを生成する-各ツリーは、前のツリーの連結残差
  • を予測する.
  • 最初のツリーは、データ
  • に一致しようとしています.
  • 第2の木予測目標から予測値を減算残差
  • 第3本の木予測目標のうち第1本の木予測の値は、第1本の木の残差に対して、第2本の木予測の値から
  • を減算する.
    →パネル項目を含むモデル複雑度損失関数の最小化

    サンプルコード


    ランダムツリーをEEGデータに使用する
    from sklearn.ensemble import RandomForestClassifier
    rf_clf = RandomForestClassifier(n_estimators = 10, max_depth = 3, random_state = 21)
    rf_clf.fit(X_train, y_train)
    →すべてのEEGデータではなく要約データを使用して、より良い性能を得る
    XGBoostの使用
    import xgboost as xgb
    xgb_clf = xgb.XGBClassifier(n_estimators = 10, max_depth = 3, random_state = 21)
    xgb_clf.fit(X_train, y_train)
    →性能をチェックし、XGBoostはランダムforestより少し良い
    XGBoostの性能がより良い理由は特定のスーパーパラメータである
    2つの組み合わせに同じツリー数を割り当て、複雑さを低減するためにツリーの深さを制限します.
    ## 같은 수의 트리(10), 그러나 복잡성은 낮춘 경우를 테스트
    ## max_depth = 2
    
    ## XGBoost
    xgb_clf = xgb.XGBClassifier(n_estimators = 10, max_depth = 2, random_state = 21)
    xgb_clf.fit(X_train, y_train)
    
    ## 랜덤포레스트
    rf_clf = RandomForestClassifier(n_estimators = 10, max_depth = 2, random_state = 21)
    rf_clf.fit(X_train, y_train)
    →ツリーの複雑さをさらに低減しても、XGBoostモデルはランダムツリーモデルよりも精度が良い
    ⑤ Boostingは常にすべての特徴を使用しているため、関連度の高い特恵を与えているため、意味のない特徴は無視される可能性が高いが、≦(ランダムForest)の結果得られる木は意味のある特徴を強制的に使用される可能性がある.

    分類と回帰


    グラデーション・ブート・ツリー・モデルの利点:自主的なアクセス機能
    →モデル自体の相関が小さいとかノイズが大きいとかの特徴を取り除き、最も重要な特徴に焦点を当てる

    クラスタ


    :分析の目的で、互いに類似したデータは有意義な集団を構成する
    分類と予測の両方でクラスタを使用できます
  • 分類
    モデルの学習段階において任意の数のクラスタ
  • を識別することができる.
  • 予測
    クラスタ
  • は、純クラスタまたは距離測定法を用いることができる.
    クラスタリング技術をテーブル列データに適用する際の距離測定
  • フィーチャーに基づく距離
    クロック列の特徴を作成し、計算データの座標
  • と見なす.
  • 元のクロック列データに基づく距離
    異なるテーブル列間の距離を決定する方法
  • を見つける

    📌 データからフィーチャーを作成するには


    投影図とうえいず:2 D空間の画像を1 D空間に変換2 Dくうかんのぞうを1 Dくうかんにへんかん
    カテゴリデータを1 Dヒストグラムとして表す方法
    ## 범주형 데이터 그래프
    plt.plot(words.iloc[1, 1:-1])
    ## 히스토그램
    plt.hist(words.iloc[1, 1:-1], 10)

    単語の違いを確認する2つの単語の2 Dヒストグラムを設定
    x = np.array([])
    y = np.array([])
    
    w = 12
    selected_words = words[words.word == w]
    selected_words.shape
    
    for idx, row in selected_words.iterrows():
    	y = np.hstack([y, row[1:271]])
        x = np.hstack([x, np.array(range(270))])
        
    fig, ax = plt.subplots()

    2 Dヒストグラムは、各カテゴリのフィーチャーの可変性を示すのに役立ちます.したがって、データに過度に依存せずにフィーチャーを構築する方法を考慮できます.
    ヒストグラムは、値のタイプを表し、その位置ではありません.
    →高度点が一定時間位置に分布しない投影テーブル列を扱う場合に重要な役割
    270個の期間クロック列を持つフィーチャーの作成
    from cesium import featurize.featurize_time as ft
    
    word_vals = words.iloc[:, 1:271]
    times = []
    word_values = []
    for idx, row in word_vals.iterrows():
    	word_values.append(row.values)
        times.append(np.array([i for i in range(row.values.shape[0])]))
        
    features_to_use = ['amplitude', 'percent_beyond_1_std', 'percent_close_to_median']
    featurized_hists = ft(times = times, values = word_values, errors = None, features_to_use = features_to_use, scheduler = None)
    ヒストグラムを生成し、別のテーブル列としてフィーチャーを作成します.
    ## 히스토그램에서 파생된 일부 특징을 생성
    times = []
    hist_values = []
    for idx, row in words_features.iterrows():
    	hist_values.append(np.histogram(row.values, bins = 10, range=(-2.5, 5.0))[0]+.0001)
    	## 0들은 하위 작업에서 문제를 초래
        times.append(np.array([i for i in range(9)]))
        
    features_to_use = ["amplitude", "percent_close_to_median", "skew"]
    featurized_hists = ft(times = times, values = hist_values, errors = None, features_to_use = features_to_use, scheduler = None)
    異なる方法で得られた特徴を組み合わせる
    features = pd.concat([featurized_words.reset_index(drop=True), featurized_hists], axis = 1)

    📌 時間を識別する距離測定法


    テーブル列間の類似性測定問題を処理するための距離指標を定義する:動的時間ワープ(DTW)
    ダイナミックタイムワープの動作原理

    表示される2つのカーブ間のポイント間の最適な位置合わせで、2つのカーブのシェイプを比較するために時間軸がねじれます.
    DTWのルール
  • 1 1つのテーブル列のすべての時間は、少なくとも別のテーブル列の1つの時間
  • に対応する必要がある.
  • 各テーブル列の先頭と末尾は互いに対応し、
  • 時間以内のマッピングは過去ではなく、未来へ移動する関係
  • として表現されるべきである.
    def distDTW(ts1, ts2):
    	## 설정과정
        DTW = {}
        for i in range(len(ts1)):
        	DTW[(i, -1)] = np.inf
        for i in range(len(ts2)):
        	DTW[(-1, i)] = np.inf
        DTW[(-1, -1)] = 0
        
        ## 한 번에 한 단계씩
        ## 최적값 계산
        for i in range(len(ts1)):
        	for j in range(len(ts2)):
            	dist = (ts1[i] - ts2[j])**2
                DTW[(i, j)] = dist + min(DTW[(i-1, j)], DTW[(i, j-1)], DTW[(i-1, j-1)])
                
        ## 동적 프로그래밍의 한 예
        ## 완전한 경로를 찾으면 그 경로를 반환한다
        return sqrt(DTW[len(ts1-1, len(ts2)-1])
    →DTW距離は動的プログラミングにおける問題であり,各テーブル列は開始から終了まで一度に1つのステップを行うことができ,1つのステップの解決策は前のステップの決定を参照して構築される.
    DTWに加えて、クロック列間の距離を測定する方法
  • メインストリート
    :最大距離
  • 、タイムワープに似た2つのカーブ間で最小の2つのカーブ間の距離
  • ピルソン大尉
    :相関指標を最大化し、クロック列間の距離を最大化する
  • 最長共通部分数列
    :一連のカテゴリ値を表すテーブル列の適切な距離測定に基づいて、最長共通部分数列を用いて2つのテーブル列の類似性を判断する
  • 距離指標を自動的に選択する方法はなく、次のステップのバランスを求めるためには、最適な判断を下すべきです
  • 計算リソース使用量を最小化
  • 最終目標に最も関連するテーブル列の特徴を選択する指標
  • 距離指標が採用した分析方法の仮定、利点、弱点を反映しているかどうか

    📌 クラスタコード


    標準化フィーチャーの階層クラスタ
    特徴は異なる単位の大きさがあり、単一距離指標を適用するには正規化しなければならない.
    from sklearn import preprocessing
    feature_values = preprocessing.scale(features.values)
    階層型クラスタアルゴリズムを使用して、50個のクラスタに対して適切な選択を行い、データセットの50個の単語に一致するクラスタを検索します.
    from sklearn.cluster import AgglomerativeClustering
    feature_clustering = AgglomerativeClustering(n_clusters = 50, linkage = 'ward')
    feature_clustering.fit(feature_values)
    words['feature_labels'] = feature_clustering.fit_predict(p)
    クラスタが単語ラベルに役立つことを確認
    from sklearn .metrics.cluster import homogeneity_score
    homogeneity_score(words.word, words.feature_labels)
    DTW距離評価指標と階層クラスタ
    DTWを使用して双星距離行列を計算した結果を保存
    p = pairwise_distances(X, metric = distDTW)
    ## 계산하는 데 시간이 꽤 걸리므로 재사용을 위해 따로 저장
    with open("pairwise_word_distances.npy", "wb") as f: np.save(f, p)
    階層クラスタアルゴリズムの使用
    from sklearn.cluster import AgglomerativeClustering
    dtw_clustering = AgglomerativeClustering(linkage = 'average', n_clusters = 50, affinity = 'precomputed')
    words['dtw_labels'] = dtw_clustering.fit_predict(p)
    集約クラスタと既知のラベルの対応関係の比較
    from sklearn.metrics.cluster import homogeneity_score, completeness_score
    homogeneity_score(words.word, words.dtw_labels)
    completeness_score(words.word, words.dtw_labels)
    →DTWベースのクラスタ性能が特徴ベースのクラスタよりはるかに優れている