<jupyter_start><jupyter_text>AutoMLによる「異常検知」ライブラリPyCaretを使い、AutoMLによる「異常検知」を実装します。  様々なタンパク質の測定値から、異常なサンプルを検出します。    PyCaretのインストールAutoMLをサポートするライブラリ、PyCaretをバージョンを指定してインストールします。<jupyter_code>!pip install pycaret==2.3.1<jupyter_output><empty_output><jupyter_text>Google Colabの設定Google Colab環境でPyCaretのインタラクティブな要素を表示するためには、以下のコードを実行する必要があります。<jupyter_code>from pycaret.utils import enable_colab

enable_colab()<jupyter_output><empty_output><jupyter_text>データセットの読み込み今回は、UCIのMice Protein Expressionというデータセットを使います。  このデータセットは、大脳皮質の核の部分で検出可能なシグナルを出した、77のタンパク質／タンパク質修飾の発現レベルで構成されています。  このデータセットには、タンパク質ごとに合計1080の測定値が含まれおり、各測定値は独立したマウスのものです。  https://archive.ics.uci.edu/ml/datasets/Mice+Protein+Expression<jupyter_code>from pycaret.datasets import get_data

dataset = get_data("mice")  # データの取得
dataset.shape  # データの形状<jupyter_output><empty_output><jupyter_text>訓練済みモデルの検証に用いる「未知のデータ」を訓練データから取り出します。<jupyter_code>data = dataset.sample(frac=0.9, random_state=786)  # 訓練データ
data_unseen = dataset.drop(data.index)  # 未知のデータ

data.reset_index(drop=True, inplace=True)  # インデックスを初期化
data_unseen.reset_index(drop=True, inplace=True)  # インデックスを初期化

print("訓練データの形状: " + str(data.shape))
print("未知のデータの形状: " + str(data_unseen.shape))<jupyter_output><empty_output><jupyter_text>環境の設定PyCaretの環境を設定します。  setup関数はPyCaretの環境を初期化しますが、PyCaretの他の関数を実行する前に呼び出す必要があります。  以下のコードを実行すると、setup関数が実行されてすべての特徴のデータ型が自動的に推定されます。  この際に、必ずしも正しく推論されるとは限らないことにご注意ください。     データの型に問題が無ければ、空白を入力することで設定を完了することができます。<jupyter_code>from pycaret.anomaly import setup

clf = setup(data=data, normalize = True, ignore_features = ['MouseID'], session_id=123)  # 環境の初期化<jupyter_output><empty_output><jupyter_text>モデルの作成models関数により、全ての使用可能な異常検知のための機械学習モデルを確認することができます。<jupyter_code>from pycaret.anomaly import models

models()  # 機械学習モデルの一覧<jupyter_output><empty_output><jupyter_text>今回は、異常検知でよく使われるOne Class Support Vector Machine（OCSVM、One Class SVM）を使用します。  One Class SVMは大多数が正常であるようなデータセットをもとに学習を行い、未知のデータが正常であるのか、異常であるのかを判定するのに適しています。   以下のコードではcreate_modelで"svm"を設定し、One Class SVMを選択しています。  また、fractionで異常の割合を指定しています。<jupyter_code>from pycaret.anomaly import create_model

svm = create_model("svm", fraction=0.025)<jupyter_output><empty_output><jupyter_text>訓練済みモデルの概要を表示します。<jupyter_code>print(svm)<jupyter_output><empty_output><jupyter_text>ラベルの割当て`assign_model`関数により、サンプルが異常かどうかを表すラベル、および異常の程度を表すスコアを割り当てることができます。<jupyter_code>from pycaret.anomaly import assign_model

kmean_assigned = assign_model(svm)
kmean_assigned.head()<jupyter_output><empty_output><jupyter_text>モデルを評価するplot_model関数により、様々な角度からモデルを分析することができます。  https://pycaret.org/plot-model/plot_model関数でplotを指定しない場合、t-SNEの結果が表示されます。<jupyter_code>from pycaret.anomaly import plot_model

plot_model(svm)<jupyter_output><empty_output><jupyter_text>モデルの保存と読み込み `save_model`関数によりモデルを保存することができます。<jupyter_code>from pycaret.anomaly import save_model

save_model(svm, "model_anomaly_detection")<jupyter_output><empty_output><jupyter_text>`load_model`関数により、保存されたモデルを読み込むことができます。<jupyter_code>from pycaret.anomaly import load_model

loaded_svm = load_model("model_anomaly_detection")<jupyter_output><empty_output><jupyter_text>未知のデータで予測する「未知のデータ」が所属すべきクラスタを予測します。<jupyter_code>from pycaret.anomaly import predict_model

unseen_predictions = predict_model(loaded_svm, data=data_unseen)
unseen_predictions.head()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.0955223880597015, 'fraction_numerical': 0.00626865671641791, 'mean_word_length': 15.110576923076923, 'pattern_counts': {'":': 0, '<': 53, '<?xml version=': 0, '>': 53, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '13', 'dir': 'jupyter-structured-clean-dedup', 'id': '312394', 'license': 'MIT', 'n_tokens_mistral': 2029, 'n_tokens_neox': 1912, 'n_words': 108, 'path': 'section_3/03_anomaly_detection.ipynb', 'repo_name': 'nabe-o24/automl', 'size': '3350'}