Machine Learning Kurs im Rahmen der Studierendentage im SS 2023
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

467 lines
70 KiB

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Exercise: Classification of air showers measured with the MAGIC telescope\n",
"\n",
"The [MAGIC telescope](https://en.wikipedia.org/wiki/MAGIC_(telescope)) is a Cherenkov telescope situated on La Palma, one of the Canary Islands. The [MAGIC machine learning dataset](https://archive.ics.uci.edu/ml/datasets/magic+gamma+telescope) can be obtained from [UC Irvine Machine Learning Repository](https://archive.ics.uci.edu/ml/index.php).\n",
"\n",
"The task is to separate signal events (gamma showers) and background events (hadron showers) based on the features of a measured Cherenkov shower.\n",
"\n",
"The features of a shower are:\n",
"\n",
" 1. fLength: continuous # major axis of ellipse [mm]\n",
" 2. fWidth: continuous # minor axis of ellipse [mm] \n",
" 3. fSize: continuous # 10-log of sum of content of all pixels [in #phot]\n",
" 4. fConc: continuous # ratio of sum of two highest pixels over fSize [ratio]\n",
" 5. fConc1: continuous # ratio of highest pixel over fSize [ratio]\n",
" 6. fAsym: continuous # distance from highest pixel to center, projected onto major axis [mm]\n",
" 7. fM3Long: continuous # 3rd root of third moment along major axis [mm] \n",
" 8. fM3Trans: continuous # 3rd root of third moment along minor axis [mm]\n",
" 9. fAlpha: continuous # angle of major axis with vector to origin [deg]\n",
" 10. fDist: continuous # distance from origin to center of ellipse [mm]\n",
" 11. class: g,h # gamma (signal), hadron (background)\n",
"\n",
"g = gamma (signal): 12332\n",
"h = hadron (background): 6688\n",
"\n",
"For technical reasons, the number of h events is underestimated.\n",
"In the real data, the h class represents the majority of the events.\n",
"\n",
"You can find further information about the MAGIC telescope and the data discrimination studies in the following [paper](https://reader.elsevier.com/reader/sd/pii/S0168900203025051?token=8A02764E2448BDC5E4DD0ED53A301295162A6E9C8F223378E8CF80B187DBFD98BD3B642AB83886944002206EB1688FF4) (R. K. Bock et al., \"Methods for multidimensional event classification: a case studyusing images from a Cherenkov gamma-ray telescope\" NIM A 516 (2004) 511-528) (You need to be within the university network to get free access.) "
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"from sklearn.model_selection import train_test_split"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"filename = \"https://www.physi.uni-heidelberg.de/~reygers/lectures/2021/ml/data/magic04_data.txt\"\n",
"df = pd.read_csv(filename, engine='python')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"# use categories 1 and 0 insted of \"g\" and \"h\"\n",
"df['class'] = df['class'].map({'g': 1, 'h': 0})"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>fLength</th>\n",
" <th>fWidth</th>\n",
" <th>fSize</th>\n",
" <th>fConc</th>\n",
" <th>fConc1</th>\n",
" <th>fAsym</th>\n",
" <th>fM3Long</th>\n",
" <th>fM3Trans</th>\n",
" <th>fAlpha</th>\n",
" <th>fDist</th>\n",
" <th>class</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>28.7967</td>\n",
" <td>16.0021</td>\n",
" <td>2.6449</td>\n",
" <td>0.3918</td>\n",
" <td>0.1982</td>\n",
" <td>27.7004</td>\n",
" <td>22.0110</td>\n",
" <td>-8.2027</td>\n",
" <td>40.0920</td>\n",
" <td>81.8828</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>31.6036</td>\n",
" <td>11.7235</td>\n",
" <td>2.5185</td>\n",
" <td>0.5303</td>\n",
" <td>0.3773</td>\n",
" <td>26.2722</td>\n",
" <td>23.8238</td>\n",
" <td>-9.9574</td>\n",
" <td>6.3609</td>\n",
" <td>205.2610</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>162.0520</td>\n",
" <td>136.0310</td>\n",
" <td>4.0612</td>\n",
" <td>0.0374</td>\n",
" <td>0.0187</td>\n",
" <td>116.7410</td>\n",
" <td>-64.8580</td>\n",
" <td>-45.2160</td>\n",
" <td>76.9600</td>\n",
" <td>256.7880</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>23.8172</td>\n",
" <td>9.5728</td>\n",
" <td>2.3385</td>\n",
" <td>0.6147</td>\n",
" <td>0.3922</td>\n",
" <td>27.2107</td>\n",
" <td>-6.4633</td>\n",
" <td>-7.1513</td>\n",
" <td>10.4490</td>\n",
" <td>116.7370</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>75.1362</td>\n",
" <td>30.9205</td>\n",
" <td>3.1611</td>\n",
" <td>0.3168</td>\n",
" <td>0.1832</td>\n",
" <td>-5.5277</td>\n",
" <td>28.5525</td>\n",
" <td>21.8393</td>\n",
" <td>4.6480</td>\n",
" <td>356.4620</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" fLength fWidth fSize fConc fConc1 fAsym fM3Long fM3Trans \\\n",
"0 28.7967 16.0021 2.6449 0.3918 0.1982 27.7004 22.0110 -8.2027 \n",
"1 31.6036 11.7235 2.5185 0.5303 0.3773 26.2722 23.8238 -9.9574 \n",
"2 162.0520 136.0310 4.0612 0.0374 0.0187 116.7410 -64.8580 -45.2160 \n",
"3 23.8172 9.5728 2.3385 0.6147 0.3922 27.2107 -6.4633 -7.1513 \n",
"4 75.1362 30.9205 3.1611 0.3168 0.1832 -5.5277 28.5525 21.8393 \n",
"\n",
" fAlpha fDist class \n",
"0 40.0920 81.8828 1 \n",
"1 6.3609 205.2610 1 \n",
"2 76.9600 256.7880 1 \n",
"3 10.4490 116.7370 1 \n",
"4 4.6480 356.4620 1 "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### a) Create for each variable a figure with a plot for gammas and hadrons overlayed."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [],
"source": [
"df0 = df[df['class'] == 0] # hadron data set\n",
"df1 = df[df['class'] == 1] # gamma data set"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x122031130>"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x360 with 10 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig, axs = plt.subplots(nrows=2, ncols=5, figsize=(15,5))\n",
"plt.subplots_adjust(hspace = 0.3, wspace=0.3)\n",
"\n",
"for i in range(10):\n",
" kx = i // 5\n",
" ky = i % 5\n",
" axs[kx, ky].set_xlabel(df0.columns[i])\n",
" df0.iloc[:,i].hist(ax = axs[kx, ky], bins = 50, alpha=0.5, density=True, label='h')\n",
" df1.iloc[:,i].hist(ax = axs[kx, ky], bins = 50, alpha=0.5, density=True, label='g')\n",
"\n",
"axs[0, 0].legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### b) Create training and test data set. The tast data should amount to 50\\% of the total data set."
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"y = df['class'].values\n",
"X = df[[col for col in df.columns if col!=\"class\"]]\n",
"\n",
"### YOUR CODE ### \n",
"\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, shuffle=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### c) Define the logistic regressor and fit the training data"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"from sklearn import linear_model\n",
"\n",
"# define logistic regressor\n",
"\n",
"### YOUR CODE ###\n",
"\n",
"logreg=linear_model.LogisticRegression(fit_intercept=True,\n",
" penalty='none',\n",
" max_iter=1000,\n",
" tol=1E-5)\n",
"\n",
"# fit training data\n",
"\n",
"### YOUR CODE ###\n",
"\n",
"import time\n",
"start_time = time.time()\n",
"logreg.fit(X_train, y_train)\n",
"run_time = time.time() - start_time"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"y_pred = logreg.predict(X_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### d) Determine the Model Accuracy, the AUC score and the Run time"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model Accuracy: 78.99%\n",
"AUC score: 0.74\n",
"Run time: 0.22 sec\n",
"\n",
"\n"
]
}
],
"source": [
"from sklearn.metrics import roc_auc_score\n",
"\n",
"### YOUR CODE ###\n",
"\n",
"print(\"Model Accuracy: {:.2f}%\".format(100*logreg.score(X_test, y_test)))\n",
"print(\"AUC score: {:.2f}\".format(roc_auc_score(y_test,y_pred)))\n",
"print(\"Run time: {:.2f} sec\\n\\n\".format(run_time))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### e) Plot the ROC curve (Backgropund Rejection vs signal efficiency)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"from sklearn.metrics import roc_curve\n",
"%matplotlib inline\n",
"\n",
"y_pred_prob = logreg.predict_proba(X_test) # predicted probabilities\n",
"\n",
"### YOUR CODE ###\n",
"\n",
"fpr, tpr, _ = roc_curve(y_test, y_pred_prob[:,1])\n",
"plt.plot(tpr, 1-fpr)\n",
"plt.xlabel('Signal efficiency')\n",
"plt.ylabel('Background Rejection');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### f) Plot the Signal efficiency vs. the Background efficiency and compare it to the corresponding plot in the paper"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"### YOUR CODE ###\n",
"plt.plot(fpr, tpr)\n",
"plt.xscale(\"log\")\n",
"plt.xlabel('Background efficiency')\n",
"plt.ylabel('Signal efficiency');"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.8.16"
}
},
"nbformat": 4,
"nbformat_minor": 4
}