Skip to content

Instantly share code, notes, and snippets.

@moneebullah25
Created June 12, 2023 19:23
Show Gist options
  • Select an option

  • Save moneebullah25/c7e18c778e0a26b9c3b99bd4e0d28d61 to your computer and use it in GitHub Desktop.

Select an option

Save moneebullah25/c7e18c778e0a26b9c3b99bd4e0d28d61 to your computer and use it in GitHub Desktop.
Applied SVM on rohitsahoo/employee
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "code",
"source": [
"!wget --load-cookies /tmp/cookies.txt \"https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=FILEID' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\\1\\n/p')&id=1ahnlBBCUHaTMMQ6Fz5-L2Y7dPJJkLpRW\" -O ibm-employee.csv && rm -rf /tmp/cookies.txt"
],
"metadata": {
"id": "AllJevy__GFj"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"id": "Z9_5XpT95Hmh"
},
"outputs": [],
"source": [
"import torch\n",
"import torch.nn as nn\n",
"import pandas as pd\n",
"import torch.optim as optim\n",
"from sklearn.metrics import confusion_matrix, accuracy_score, precision_score, recall_score, f1_score\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"source": [
"# Read the CSV file\n",
"data_frame = pd.read_csv('train.csv')\n",
"\n",
"# Select the desired columns for the dataset\n",
"selected_columns = ['BusinessTravel', 'DailyRate', 'Department', 'DistanceFromHome', 'Education',\n",
" 'EducationField', 'EmployeeCount', 'EmployeeNumber', 'EnvironmentSatisfaction',\n",
" 'Gender', 'HourlyRate', 'JobInvolvement', 'JobLevel', 'JobRole',\n",
" 'JobSatisfaction', 'MaritalStatus', 'MonthlyIncome', 'MonthlyRate',\n",
" 'NumCompaniesWorked', 'Over18', 'OverTime']\n",
"\n",
"# Convert selected columns to numerical format\n",
"numeric_columns = ['DailyRate', 'DistanceFromHome', 'Education', 'EmployeeCount', 'EmployeeNumber',\n",
" 'EnvironmentSatisfaction', 'HourlyRate', 'JobInvolvement', 'JobLevel', 'JobSatisfaction',\n",
" 'MonthlyIncome', 'MonthlyRate', 'NumCompaniesWorked', 'Attrition']\n",
"\n",
"# Convert selected columns to one-hot encoding\n",
"data_frame = pd.concat([pd.get_dummies(data_frame[selected_columns]), data_frame[numeric_columns]], axis=1)\n",
"\n",
"\n",
"# Extract the dataset and labels\n",
"data = torch.tensor(data_frame.values, dtype=torch.float32)\n",
"labels = torch.tensor(data_frame['Attrition'].values)"
],
"metadata": {
"id": "3XKvMwX26hSY"
},
"execution_count": 19,
"outputs": []
},
{
"cell_type": "code",
"source": [
"n = round(0.9*len(data_frame))\n",
"\n",
"\n",
"train_data = data[:n]\n",
"train_labels = labels[:n]\n",
"test_data = data[n:]\n",
"test_labels = labels[n:]"
],
"metadata": {
"id": "ZqwGYRQzAsm4"
},
"execution_count": 25,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# Define the SVM model using the Linear kernel\n",
"model = nn.Linear(train_data.shape[1], 1)\n",
"\n",
"# Define the loss function and optimizer\n",
"criterion = nn.BCEWithLogitsLoss()\n",
"optimizer = optim.SGD(model.parameters(), lr=0.01)\n",
"\n",
"# Training loop\n",
"num_epochs = 100\n",
"for epoch in range(num_epochs):\n",
" # Forward pass\n",
" outputs = model(train_data.float())\n",
" loss = criterion(outputs.flatten(), train_labels.float())\n",
"\n",
" # Backward and optimize\n",
" optimizer.zero_grad()\n",
" loss.backward()\n",
" optimizer.step()\n"
],
"metadata": {
"id": "R8v1uJyC60KE"
},
"execution_count": 32,
"outputs": []
},
{
"cell_type": "code",
"source": [
"with torch.no_grad():\n",
" predicted_labels = torch.round(torch.sigmoid(model(test_data.float()))).flatten().numpy()"
],
"metadata": {
"id": "t3LPNYeD62fR"
},
"execution_count": 33,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# Convert the predicted labels to binary values (0 or 1)\n",
"predicted_labels_binary = [1 if val >= 0.5 else 0 for val in predicted_labels]\n",
"\n",
"# Calculate the performance metrics\n",
"confusion_mat = confusion_matrix(test_labels, predicted_labels_binary)\n",
"accuracy = accuracy_score(test_labels, predicted_labels_binary)\n",
"precision = precision_score(test_labels, predicted_labels_binary)\n",
"recall = recall_score(test_labels, predicted_labels_binary)\n",
"f1 = f1_score(test_labels, predicted_labels_binary)\n",
"specificity = confusion_mat[0, 0] / (confusion_mat[0, 0] + confusion_mat[0, 1])\n"
],
"metadata": {
"id": "FTqZ6xCR64Zg",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "52e5b9a9-a2ee-48c5-8db5-c93e952d1206"
},
"execution_count": 34,
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, msg_start, len(result))\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"print(\"Confusion Matrix:\")\n",
"print(confusion_mat)\n",
"print(\"Accuracy:\", accuracy)\n",
"print(\"Precision:\", precision)\n",
"print(\"Recall:\", recall)\n",
"print(\"Specificity:\", specificity)\n",
"print(\"F1 Score:\", f1)\n",
"\n",
"# Visualize the confusion matrix\n",
"plt.imshow(confusion_mat, cmap=plt.cm.Blues)\n",
"plt.title(\"Confusion Matrix\")\n",
"plt.colorbar()\n",
"plt.xlabel(\"Predicted Label\")\n",
"plt.ylabel(\"True Label\")\n",
"plt.xticks([0, 1], [\"Negative\", \"Positive\"])\n",
"plt.yticks([0, 1], [\"Negative\", \"Positive\"])\n",
"plt.show()\n"
],
"metadata": {
"id": "Ir-81Joo66qF",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 611
},
"outputId": "27c9bde2-8462-4490-8133-654f2288c219"
},
"execution_count": 35,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Confusion Matrix:\n",
"[[86 0]\n",
" [20 0]]\n",
"Accuracy: 0.8113207547169812\n",
"Precision: 0.0\n",
"Recall: 0.0\n",
"Specificity: 1.0\n",
"F1 Score: 0.0\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
],
"image/png": "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lWJfC7hZkKAApcxisUiSzp07V6zjf/zxR3l4eCgiIsKuPSgoSAEBAfrxxx/t2mvXrl2oj8qVK+vs2bPXGXFhvXr1UsuWLTVo0CAFBgaqd+/eeuedd/4wWSmIs27duoX21a9fX7/++qvOnz9v137lvVSuXFmSHLqXv/zlL/L399fbb7+t5cuX609/+lOh77JAfn6+5syZozp16shsNqtatWqqXr269u/fr/T09GJf85ZbbnFoQuw///lPValSRfv27dO8efNUo0aNYp8L3CxIUIBSZrFYFBwcrK+//tqh866cpHo1FSpUKLLdMIzrvkbB/IgCPj4+2rZtmzZu3Kh+/fpp//796tWrl9q3b1/o2JIoyb0UMJvN6t69u5YuXapVq1ZdtXoiSS+88ILi4+PVunVrvfnmm1q/fr02bNigO+64o9iVIunS9+OIL7/8UqdPn5YkHThwwKFzgZsFCQpQBjp37qxjx45p586d1zw2NDRU+fn5OnLkiF17amqq0tLSbCtynKFy5cp2K14KXFmlkSQPDw/dd999mj17tg4ePKhp06Zp06ZN2rx5c5F9F8R56NChQvu+++47VatWTb6+viW7gavo06ePvvzyS507d67IicUF3n33XbVt21aLFi1S7969df/99ys6OrrQd1LcZLE4zp8/rwEDBqhBgwYaPHiwZs6cqT179jitf6C8IEEBysDYsWPl6+urQYMGKTU1tdD+Y8eO6cUXX5R0aYhCUqGVNrNnz5YkderUyWlx3XbbbUpPT9f+/fttbcnJyVq1apXdcb/99luhcwseWHbl0ucCNWvWVJMmTbR06VK7f/C//vprffLJJ7b7LA1t27bV888/r5deeklBQUFXPa5ChQqFqjMrV67Uzz//bNdWkEgVlcw56plnntGJEye0dOlSzZ49W2FhYYqNjb3q9wjcrHhQG1AGbrvtNq1YsUK9evVS/fr17Z4k++mnn2rlypWKi4uTJDVu3FixsbF69dVXlZaWpjZt2uizzz7T0qVL1a1bt6suYb0evXv31jPPPKMHH3xQI0aM0IULF7Rw4ULdfvvtdpNEp0yZom3btqlTp04KDQ3V6dOn9fLLL6tWrVpq1arVVfv/xz/+oY4dOyoyMlIDBw7U77//rvnz58tqtWrSpElOu48reXh46LnnnrvmcZ07d9aUKVM0YMAARUVF6cCBA1q+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/jp16pS2bNmi9957T6+++qpOnz5t14+Hh4fmzZunb775RkuXLtWmTZs0duxYSVJUVJTmzp0ri8Wi5ORkJScna8yYMYVi6du3r9asWWNLbCRp/fr1unDhgh588EFJUkJCgpYtW6bExER98803GjVqlB555BFt3brVKd8XAAA2JidtLsgllhk/+OCDatKkiSZOnKhFixbZ7UtISFDfvn01cuRISVKdOnU0b948tWnTRgsXLtQPP/ygjRs3as+ePbr77rslSf/6179Up04du34KzpcuVUWmTp2qIUOG6OWXX5aXl5esVqtMJpOCgoKuGmdMTIx8fX21atUq9evXT5K0YsUKPfDAA/L391d2drZeeOEFbdy4UZGRkZKkW2+9Vdu3b9crr7yiNm3aFNlvdna2srOzbZ8zMjKK98UBAFBOuUSCIkkzZsxQu3btClUuvvrqK+3fv1/Lly+3tRmGofz8fB0/flyHDx9WxYoV1bRpU9v+iIgIVa5c2a6fjRs3KiEhQd99950yMjJ08eJFZWVl6cKFC8WeY1KxYkX17NlTy5cvV79+/XT+/Hm9//77euuttyRJR48e1YULF9S+fXu783JycnTXXXddtd+EhARNnjy5WDEAAFCgPD8HxWUSlNatWysmJkbjxo1TXFycrT0zM1OPP/64RowYUeic2rVr6/Dhw9fs+4cfflDnzp01dOhQTZs2TVWqVNH27ds1cOBA5eTkODQJtm/fvmrTpo1Onz6tDRs2yMfHRx06dLDFKknr1q3TLbfcYnee2Wy+ap/jxo1TfHy87XNGRoZCQkKKHRMA4OZEglJGpk+friZNmqhu3bq2tqZNm+rgwYOKiIgo8py6devq4sWL+vLLL9WsWTNJlyoZl68K2rt3r/Lz8zVr1ix5eFyadvPOO+/Y9ePl5aW8vLxrxhgVFaWQkBC9/fbb+uijj/TQQw/J09NTktSgQQOZzWadOHHiqsM5RTGbzX+YwAAAUBST6dJW0j5ckUslKA0bNlTfvn01b948W9szzzyjFi1aaPjw4Ro0aJB8fX118OBBbdiwQS+99JLq1aun6OhoDR48WAsXLpSnp6dGjx4tHx8fW1YYERGh3NxczZ8/X126dNGOHTuUmJhod+2wsDBlZmYqKSlJjRs3VqVKla5aWenTp48SExN1+PBhbd682dbu7++vMWPGaNSoUcrPz1er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lOMpKAzxAAAA10MFBQAAd1WOSygkKAAAuClW8QAAAJQhKigAALgpVvEAAACXU46noJCgAADgtspxhsIcFAAA4HKooAAA4KbK8yoeEhQAANyVEybJumh+whAPAABwPVRQAABwU+V4jiwJCgAAbqscZygM8QAAAJdDBQUAADdVnlfxUEEBAMBNFTzqvqSbI7Zt26YuXbooODhYJpNJq1evtttvGIYmTJigmjVrysfHR9HR0Tpy5IjD90aCAgAAiu38+fNq3LixFixYUOT+mTNnat68eUpMTNTu3bvl6+urmJgYZWVlOXQdhngAAHBTN2KObMeOHdWxY8ci9xmGoblz5+q5555T165dJUnLli1TYGCgVq9erd69exf7OlRQAABwVyYnbU5y/PhxpaSkKDo62tZmtVrVvHlz7dy506G+qKAAAOCmnDlJNiMjw67dbDbLbDY71FdKSookKTAw0K49MDDQtq+4qKAAAACFhITIarXatoSEhBsaDxUUAADclEklfxdPweknT56UxWKxtTtaPZGkoKAgSVJqaqpq1qxpa09NTVWTJk0c6osKCgAAbsqZU1AsFovddj0JSnh4uIKCgpSUlGRry8jI0O7duxUZGelQX1RQAABAsWVmZuro0aO2z8ePH9e+fftUpUoV1a5dWyNHjtTUqVNVp04dhYeHa/z48QoODla3bt0cug4JCgAAbup6HrRWVB+O+Pzzz9W2bVvb5/j4eElSbGyslixZorFjx+r8+fMaPHiw0tLS1KpVK3388cfy9vZ26DokKAAAuK2yfxLKvffeK8Mwrt6byaQpU6ZoypQpJYqKOSgAAMDlUEEBAMBN3YghnrJCggIAgJu6EY+6LysM8QAAAJdDBQUAADfFEA8AAHA5znwXj6shQQEAwF2V40kozEEBAAAuhwoKAABuqhwXUEhQAABwV+V5kixDPAAAwOVQQQEAwE2xigcAALiecjwJhSEeAADgcqigAADgpspxAYUEBQAAd8UqHgAAgDJEBQUAALdV8lU8rjrIQ4ICAICbYogHAACgDJGgAAAAl8MQDwAAbqo8D/GQoAAA4KbK86PuGeIBAAAuhwoKAABuiiEeAADgcsrzo+4Z4gEAAC6HCgoAAO6qHJdQSFAAAHBTrOIBAAAoQ1RQAABwU6ziAQAALqccT0FhiAcAALdlctLmoAULFigsLEze3t5q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s/Xhhx9q2LBh8vT01Lhx4wodm5OTIy8vL6dct0qVKk7pBwAcQQUFcBNms1lBQUEKDQ3V0KFDFR0drQ8++EDS/w9VTJs2TcHBwba3P588eVI9e/ZUQECAqlSpoq5du+qHH36w9ZmXl6f4+HgFBASoatWqGjt2rK58NNKVQzzZ2dl65plnFBISIrPZrIiICC1atEg//PCD2rZtK0mqXLmyTCaT4uLiJEn5+flKSEhQeHi4fHx81LhxY7377rt21/nwww91++23y8fHR23btrWL83rk5eVp4MCBtmvWrVtXL774YpHHTp48WdWrV5fFYtGQIUOUk5Nj21ec2AE4HxUUwE35+PjozJkzts9JSUmyWCzasGGDpEtP042JiVFkZKT++9//qmLFipo6dao6dOig/fv3y8vLS7NmzdKSJUv0+uuvq379+po1a5ZWrVqldu3aXfW6/fv3186dOzVv3jw1btxYx48f16+//qqQkBC999576tGjhw4dOiSLxSIfHx9JUkJCgt58800lJiaqTp062rZtmx555BFVr15dbdq00cmTJ9W9e3cNGzZMgwcP1ueff67Ro0eX6PvJz89XrVq1tHLlSlWtWlWffvqpBg8erJo1a6pnz55235u3t7e2bNmiH374QQMGDFDVqlU1bdq0YsUOoJTcwBcVAiimy992m5+fb2zYsMEwm83GmDFjbPsDAwON7Oxs2zlvvPGGUbduXbs30WZnZxs+Pj7G+vXrDcMwjJo1axozZ8607c/NzTVq1apl92bdNm3aGE899ZRhGIZx6NAhQ5KxYcOGIuMs6u25WVlZRqVKlYxPP/3U7tiBAwcaDz/8sGEYhjFu3DijQYMGdvufeeaZQn1dqai38P6RYcOGGT169LB9jo2NNapUqWKcP3/e1rZw4ULDz8/PyMvLK1bsRd0zgJKjggK4ibVr18rPz0+5ubnKz89Xnz59NGnSJNv+hg0b2s07+eqrr3T06FH5+/vb9ZOVlaVjx44pPT1dycnJat68uW1fxYoVdffddxca5imwb98+VahQwaHKwdGjR3XhwgW1b9/erj0nJ0d33XWXJOnbb7+1i0OSIiMji32Nq1mwYIFef/11nThxQr///rtycnLUpEkTu2MaN26sSpUq2V03MzNTJ0+eVGZm5jVjB1A6SFAAN9G2bVstXLhQXl5eCg4OVsWK9v/z9fX1tfucmZmpZs2aafny5YX6ql69+nXFUDBk44jMzExJ0rp163TLLbfY7TObzdcVR3G89dZbGjNmjGbNmqXIyEj5+/vrH//4h3bv3l3sPm5U7ABIUAC34evrq4iIiGIf37RpU7399tuqUaOGLBZLkcfUrFlTu3fvVuvWrSVJFy9e1N69e9W0adMij2/YsKHy8/O1detWRUdHF9pfUMHJy8uztTVo0EBms1knTpy4auWlfv36tgm/BXbt2nXtm/wDO3bsUFRUlJ544glb27Fjxwod99VXX+n333+3JV+7du2Sn5+fQkJCVKVKlWvGDqB0sIoHKKf69u2ratWqqWvXrvrvf/+r48ePa8uWLRoxYoR++uknSdJTTz2l6dOna/Xq1fruu+/0xBNP/OEzTMLCwhQbG6tHH31Uq1evtvX5zjvvSJJCQ0NlMpm0du1a/fLLL8rMzJS/v7/GjBmjUaNGaenSpTp27Ji++OILzZ8/X0uXLpUkDRkyREeOHNHTTz+tQ4cOacWKFVqyZEmx7vPnn3/Wvn377LazZ8+qTp06+vzzz7V+/XodPnxY48eP1549ewqdn5OTo4EDB+rgwYP68MMPNXHiRA0fPlweHh7Fih1AKbnRk2AAXNvlk2Qd2Z+cnGz079/fqFatmmE2m41bb73VeOyxx4z09HTDMC5Nin3qqacMi8ViBAQEGPHx8Ub//v2vOknWMAzj999/N0aNGmXUrFnT8PLyMiIiIozXX3/dtn/KlClGUFCQYTKZjNjYWMMwLk3snTt3rlG3bl3D09PTqF69uhETE2Ns3brVdt6aNWuMiIgIw2w2G/fcc4/x+uuvF2uSrKRC2xtvvGFkZWUZcXFxhtVqNQICAoyhQ4cazz77rNG4ceNC39uECROMqlWrGn5+fsZjjz1mZGVl2Y65VuxMkgVKh8kwrjIbDgAA4AZhiAcAALgcEhQAAOBySFAAAIDLIUEBAAAuhwQFAAC4HBIUAADgckhQAACAyyFBAQAALocEBQAAuBwSFAAA4HJIUAAAgMshQQEAAC7n/wAvT6GTdDaH0AAAAABJRU5ErkJggg==\n"
},
"metadata": {}
}
]
},
{
"cell_type": "code",
"source": [],
"metadata": {
"id": "V3c7e-fCC710"
},
"execution_count": null,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment