[時計ブーム]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つの決定ツリーではなく複数の決定ツリーを使用
→学習する木の数、各木が許容する最大深さのパラメータに基づいて構造を決定する
ただし、元のテーブル列データを使用する場合は、次の問題があります.
元のデータがフィーチャーに圧縮されて要約されると、ランダムツリーが役に立つ可能性があります.
効率/コンピューティングリソースの観点から、
→パネル項目を含むモデル複雑度損失関数の最小化
サンプルコード
ランダムツリーを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のルール
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つのテーブル列の類似性を判断する
📌 クラスタコード
標準化フィーチャーの階層クラスタ
特徴は異なる単位の大きさがあり、単一距離指標を適用するには正規化しなければならない.
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ベースのクラスタ性能が特徴ベースのクラスタよりはるかに優れているReference
この問題について([時計ブーム]Chapter 09), 我々は、より多くの情報をここで見つけました https://velog.io/@yun_lily00/시계열-Chapter-09テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol