Skip to content

Instantly share code, notes, and snippets.

@tam17aki
Created April 9, 2022 15:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tam17aki/03815ba272c52d39eb4b577105e1a10e to your computer and use it in GitHub Desktop.
Save tam17aki/03815ba272c52d39eb4b577105e1a10e to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "48444004",
"metadata": {},
"outputs": [],
"source": [
"from __future__ import division, print_function\n",
"\n",
"import os\n",
"import sys\n",
"\n",
"from pyod.utils.data import evaluate_print, generate_data\n",
"from pyod.utils.example import visualize\n",
"\n",
"from kpca import KPCA"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "32213ba1",
"metadata": {},
"outputs": [],
"source": [
"contamination = 0.1 # percentage of outliers\n",
"n_train = 200 # number of training points\n",
"n_test = 100 # number of testing points\n",
"n_features = 2 # number of features on each point\n",
"\n",
"n_projections = 500 # number of random projection axes"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "52332bce",
"metadata": {},
"outputs": [],
"source": [
"X_train, X_test, y_train, y_test = generate_data(\n",
" n_train=n_train,\n",
" n_test=n_test,\n",
" n_features=n_features,\n",
" contamination=contamination,\n",
" random_state=42,\n",
" behaviour=\"new\",\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "f5b2771f",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"KPCA(alpha=1.0, coef0=1, contamination=0.1, copy_X=True, degree=3,\n",
" eigen_solver='auto', gamma=None, iterated_power='auto', kernel='rbf',\n",
" kernel_params=None, max_iter=None, n_components=2, n_jobs=None,\n",
" n_selected_components=2, random_state=42, remove_zero_eig=False, tol=0)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# train KPCA detector\n",
"clf_name = \"KPCA\"\n",
"clf = KPCA(random_state=42)\n",
"clf.fit(X_train)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "eee7a329",
"metadata": {},
"outputs": [],
"source": [
"# get the prediction labels and outlier scores of the training data\n",
"y_train_pred = clf.labels_ # binary labels (0: inliers, 1: outliers)\n",
"y_train_scores = clf.decision_scores_ # raw outlier scores"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "ed05102e",
"metadata": {},
"outputs": [],
"source": [
"# get the prediction on the test data\n",
"y_test_pred = clf.predict(X_test) # outlier labels (0 or 1)\n",
"y_test_scores = clf.decision_function(X_test) # outlier scores"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "537584eb",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"On Training Data:\n",
"KPCA ROC:0.9994, precision @ rank n:0.95\n",
"\n",
"On Test Data:\n",
"KPCA ROC:1.0, precision @ rank n:1.0\n"
]
}
],
"source": [
"# evaluate and print the results\n",
"print(\"\\nOn Training Data:\")\n",
"evaluate_print(clf_name, y_train, y_train_scores)\n",
"print(\"\\nOn Test Data:\")\n",
"evaluate_print(clf_name, y_test, y_test_scores)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "a0f90aa8",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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g/8KAEg2YjYaAMkrclu9QFo8VVq9sNYlyY2ADQDEbDSEhkteb7zxRq1du/b1n4888khlppKZNGmSNm7cWKuiJY/rlR6b5b9/bFayg0xaAjaAohCzi0DMRoOoTfJawyeuaCAMu/vuu7XzzjsXfK2ebMvP1IvVC6StG/z3W9cnN8ikKWADaUTMTgdiNhpEbZLXMj9xfec739FBBx2kgw46SFdccYVWrlypgw466PX9l19+uS6++GLdcccdWrJkiU455RSNGzdOW7Zs6XedMWPGaMMG/x//lltu0cSJEzVu3DidffbZrwe99vZ2ffnLX9bhhx+uBx98UBdccIHGjh2rgw8+WJ///OfL8n4SIRNcujv8z90dyQ0yaQnYhaI5DUlDzE4+YnbtELOrrvrJa5mfuJYuXaobbrhBixcv1kMPPaTrrrtOr7zySuyxJ554oiZMmKBbb71Vy5YtU2tra+xxTz75pG6//XY98MADWrZsmZqamnTrrbdKkjZv3qyDDjpIixcv1tixY7Vw4UI98cQTevzxx3XRRReV9F4SJRxcMpIYZNIUsAtFcxqShJidDsTs2iFmV131k9cyP3Hdf//9mjx5soYPH6729nadcMIJuu+++0q65qJFi7R06VIddthhGjdunBYtWqQVK1ZIkpqamjRlyhRJ0k477aSWlhZNnz5dCxYsUFtbW0n3TYxocMlIYpBJS8AuFM1pSBpidvIRs2uHmF0T1U1eK/DE5ZwbsG3jxo3q7e27ZldXV9HXPP3007Vs2TItW7ZMTz/9tC6++GJJUktLi5qamiRJzc3NevjhhzVlyhTdddddOvbYYwf9PhJlzV1S56r4fZ2r/P4kSFPALlS9Nach3YjZ6UDMrh1idk1UN3mtwBPXEUccobvuukudnZ3avHmzFi5cqH/913/VunXr9NJLL2nr1q36xS9+8frxO+64ozZt2pTzmkcddZTuuOMOrVu3TpL08ssv6/nnnx9wXEdHh1599VVNmjRJV1xxhZYtWzbo95Eow0dL+50vvf1zA1/7/YffnwRpCdiFqsfmNKQbMTsdiNm1Qcyumeaq3SnfE9dekyUrPpc+9NBDdcYZZ2jixImSpOnTp+uwww57vYP+3nvvrf333//148844wydc845am1t1YMPPhh7zbFjx+rSSy/VMccco97eXg0dOlRXX321Ro/uHwA2bdqk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\n",
"text/plain": [
"<Figure size 864x720 with 4 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# visualize the results\n",
"visualize(\n",
" clf_name,\n",
" X_train,\n",
" y_train,\n",
" X_test,\n",
" y_test,\n",
" y_train_pred,\n",
" y_test_pred,\n",
" show_figure=True,\n",
" save_figure=True,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "fa8af185",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.9"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment