Added desicion tree to info

This commit is contained in:
Jany committed 2025-10-09 17:25:53 +02:00
1 parent e329515d79
commit 94c7df0712
1 file changed
+94 -33
+94 -33
View File
@@ -2,19 +2,71 @@
"cells": [
{
"cell_type": "code",
"execution_count": null,
"execution_count": 10,
"id": "b6ea6c3b",
"metadata": {},
"outputs": [
{
"ename": "TypeError",
"evalue": "'numpy.ndarray' object is not callable",
"output_type": "error",
"traceback": [
"\u001b[31m---------------------------------------------------------------------------\u001b[39m",
"\u001b[31mTypeError\u001b[39m Traceback (most recent call last)",
"\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[25]\u001b[39m\u001b[32m, line 20\u001b[39m\n\u001b[32m 18\u001b[39m X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=\u001b[32m0.2\u001b[39m, random_state=\u001b[32m42\u001b[39m)\n\u001b[32m 19\u001b[39m X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=\u001b[32m0.2\u001b[39m, random_state=\u001b[32m42\u001b[39m)\n\u001b[32m---> \u001b[39m\u001b[32m20\u001b[39m X_train = \u001b[43mX_train\u001b[49m\u001b[43m.\u001b[49m\u001b[43mvalues\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 23\u001b[39m n_features = \u001b[32m10\u001b[39m\n\u001b[32m 24\u001b[39m fig=plt.figure( figsize=(\u001b[32m15\u001b[39m, \u001b[32m15\u001b[39m) )\n",
"\u001b[31mTypeError\u001b[39m: 'numpy.ndarray' object is not callable"
"name": "stdout",
"output_type": "stream",
"text": [
" age workclass education.num marital.status occupation \\\n",
"0 90 0 9 6 0 \n",
"1 82 4 9 6 4 \n",
"2 66 0 10 6 0 \n",
"3 54 4 4 0 7 \n",
"4 41 4 10 5 10 \n",
"... ... ... ... ... ... \n",
"32556 22 4 10 4 11 \n",
"32557 27 4 12 2 13 \n",
"32558 40 4 9 2 7 \n",
"32559 58 4 9 6 1 \n",
"32560 22 4 9 4 1 \n",
"\n",
" relationship race sex capital.gain capital.loss hours.per.week \n",
"0 1 4 0 0 4356 40 \n",
"1 1 4 0 0 4356 18 \n",
"2 4 2 0 0 4356 40 \n",
"3 4 4 0 0 3900 40 \n",
"4 3 4 0 0 3900 40 \n",
"... ... ... ... ... ... ... \n",
"32556 1 4 1 0 0 40 \n",
"32557 5 4 0 0 0 38 \n",
"32558 0 4 1 0 0 40 \n",
"32559 4 4 0 0 0 40 \n",
"32560 3 4 1 0 0 20 \n",
"\n",
"[32561 rows x 11 columns]\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAB1AAAAN8CAYAAADmrDj+AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3XV0FNcXwPHvStyFCElwd3d3dyvSAoXS0gKlSIVfFdpSWlooBQpV3N3dAwRNgiXE3d2T3f39sWQhZDdGIAl9n3NyTrLz3szdie3OnXufRKVSqRAEQRAEQRAEQRAEQRAEQRAEQRAEQRCQl3UAgiAIgiAIgiAIgiAIr4vk5GQOHz7M2bNniY2NJT0traxDEgThP0Kup4elpSUNGzZk1KhR1KpVq6xDEgRBEIQKSyIqUAVBEARBEARBEARBEF5MTEwM786YwZGjR8jIyKRBVQccLI0x0pcjkZR1dIIg/Bdk5yhJSMvEMyCStIwsmjdrynffL6Vfv35lHZogCIIgVDgigSoIgiAIgiAIgiAIgvACYmJi6NG9GxEhgcwa1Joh7erhUsmirMMSBOE/Ki0zm9N3fPnr5B3cHoexZ89eBg0aVNZhCYIgCEKFIhKogiAIgiAIgiAIgiAIJaRQKGjZojlhQf7s/3wc9ZxtyzokQRAEALJyFExbeZBTd/04f/4C7du3L+uQBEEQBKHCkJZ1AIIgCIIgCIIgCIIgCBXVxYsXcffw5O85Q0TyVBCEckVfLuPPOUNwsTVn/fr1ZR2OIAiCIFQoIoEqCIIgCIIgCIIgCIJQQrt27cLFzor29V3KOhRBEIR89OUyhrWry/59e8nKyirrcARBEAShwhAJVEEQBEEQBEEQBEEQhBLav28vg1vXQiKRlHUogiAIWg1tV4+ExCQuXrxY1qEIgiAIQoUhEqiCIAiCIAiCIAiCIAglkJOTQ3hEJPVcROteQRDKrzpONgAEBweXcSSCIAiCUHGIBKogCIIgCIIgCIIgCEIJJCcnA2BmZFDGkQiCIOimJ5dhbKhPYmJiWYciCIIgCBWGSKAKgiAIgiAIgiAIgiCUgEqlAkAqfT3b924974HN2KU0+2DNf/L4peny/UBsxi7FZuzSMpkvCDKpVPM3SxAEQRCEwsnLOgBBEARBEARBEARBEAThvyMoKoFtFzwB+Hh05zKORvivSU7PZM1hNw5d9yYoKgGpVEpNRytGdKjP9P6t0JfLSrTfH3ZdYtnuK4WOu7FyBjUcrEp0DEEQBEEQXh2RQBUEQRAEQRAEQRAEQRBemaDoRE2iqaAEqrmxAbUqW+NobfaqQiu3jAz0qFXZuqzDqPCCoxMZ8vVWgqLVrWyNDfTIysnhrl8Ed/0i2H35Afs+fwNLU8MSH0NPJsXK1EjndvlrWrEuCIIgCK8bkUAVBEEQBEEQBEEQBEEQyp1BbeoyqE3dsg6jXGhZqzLXf3mnrMOo0HIUSsYv201QdCL2VqasmTmIbk2qoVSqOHDtER+uP4ZHQCTv/naI7Z+MLvFx2tR14uCXE0oxckEQBEEQyoJYA1UQBEEQBEEQBEEQBEEQhFL3KCSGG96hZR0GANsvePIgKBqADR8Np1uTaoB6DePhHerz8/R+AJy648sFz4AyilIQBEEQhPJCVKAKgiAIgiAIgiAIgiBUMEO+3sKVB8EsHNWRj4Z3YP2xm+xxfYh/RDxJaZkc+OINOjWsqhn/MCia9cdvcvl+EOFxyUglEqraW9K3ZS3eG9AaG3PjYh0/O0fB6bt+nLztg7t/JBFxycQlp2NhYkjjava80a0xIzrURyLJ26602QdrCI5O0nxtM3Zpnu3jujZi9cxBAGw978GstUdxqWTO3d9mao3DPyKe3w67cdEzgLDYZORyKTXsrRjQujYzBrTG3Ngg35zL9wMZ+s02AGJ3fIJfRDy/7HPlvGcAMYlp2Jgb06tZDRaO7kRlHe2DvUNjWXvEjSsPggiLTUapUmFjboyjlRmdG1VlbJdG1HGy0Xn+invM52N+1vPn6ZyHP2uP3OCubzipGdlUtbdkRIf6fDC4LYb6L/9SYHRiKnsuP2DnpXu4+0eycFRHWtdxeunHLcz2J+vudmpYRWs8IzrU59vtFwiMSmTHxXt0bVztFUcoCIIgCEJ5IhKogiAIgiAIgiAIgiAIFVRGtoIhX2/FzTsUuUyKqaE+z+Us+fXANRZvu4BSpQLU6z5mK5Q8CIrmQVA0W897sv3jUTSp7lDk4173CmHij3s0X5sZGWCgLycmKY1zHv6c8/DniJs3f84ZivSZNR9tzIxJTssiITUDADsLkzz71Zbw1GX/1YfMXH2YzGwFAKZG+mTnKPAIiMQjIJJNZz3Y9dkY6jrb6tzHpXuBTPhxD6kZWZga6aNUqQiPS2bTWXdO3fHl1Hdv5UtonvPwZ8Ky3Zrj6smkGBvqERabTFhsMrd8wtCXS3Wu71qSYxbVXydu8/E/J1GpwMLEgBylEq+QGL7feYkjbt4vvL6nLulZ2Ry78Zidl+5zzsOfHIUSAH25DCcb81I/XnGlZWZz3UtdCdurWU2tYyQSCT2a1uCfU3c47+H/KsMTBEEQBKEcEglUQRAEQRAEQRAEQRCECuqvE7cBWPXeAIZ3qI+Rvh5xyemaJOrms+58vfU8Job6fDisHRO6N8He0hSFUolnQBRfbTmnSehd/Xk6pob6RTqukYEek3s1Y3DberSo5ahJfManpLPz0n2+33GJA9ce0baeMzP6t9LMO/P95DzVlA/XzyrR83b3i+DdVYfIVihpW9eZn6b1oUEVO5RKFSfv+PDRHycIjU1iwrLdnF82VefzmvzzPjo3qsKX47tTx8mGrBwFR294M2fdMSLiU1i89TxrPxicZ86CP0+Qma2ge5PqLJ7Ug/pVKgGQkZVDQGQ8h6574WSrO2lYkmMWRWxSOos2nGZI23osntQDJ1tz0rOy2X7hHos2nMYjIJLZvx9l4/wRxd63NiqVisv3g9h56R4Hr3uRkp4FgEQC7es5M7pzI4a2q/dSErbF5R0aq7mBoL6L7oR6fRf19zIyIZX4lHSsTI2KfaxHwTF0nPcngVEJSCUSHKzN6FDfhal9mhfrJgVBEARBEMqWSKAKgiAIgiAIgiAIgiBUUKkZWWxZOJJ+LWtrHrM2Uyd9ktMz+WLzWQD+nTuMHs1qaMbIpFKa1XBg92dj6fO/jbj7RbD5jDvvDmxdpOO2rFWZlrUq53vcytSIGf1b4WhlypRf9vPHsZt5Eqil5dsdF8lWKKnhYMXuRWMxNtAD1OtZ9mtZm8rWZvRetBH/yAT+PXWHDwa31bqfRtXs2DRvpKZKVl8uY1j7+kQlpPLpv6c5dN2LVe8NRC6TAur2tP6RCQD8NnMgDlammn0Z6sup51KJek+ScLoU95hFlZaZTccGLnmqfo309ZjSuzl6Milz1h3jyA1vbvuE06KWY7H2/SyvkBh2XrrPrkv3CY192o65vkslRnVqwKhODXC2tShwH88m0Uti1XsDGN+tSZHHR8Qnaz53LKC619H66fczIi6lRAnU2OR04lMysDAxIDk9C9/wOHzD49h8zp25wzqwaFyXYu9TEARBEIRXTyRQBUEQBEEQBEEQBEEQKqh6zrZ5kqfPOnTdi8TUTJpUs8+TPH2WXCZlZIf6uPtFcNbDv8gJ1ML0bqFuk+ofmUBkQgr2lqaFzCi6xNQMzrr7AfDB4Laa5OmzmlR3YFCbOuy/+oi9Vx7oTKDOHdYhT4vhXANa1+bTf0+TnpWDb3icpg2wqZE+UokEpUpFZHxKngRqURX3mMXx0fCOWvc9vlsTfth9mbDYZPa5Pih2AjU6MZW9Vx6w49J93P0iNI9XtjFjZAd10rRRNfsi709fLsvXvrk4jPTzf88LklsdC+rqaZ37fWZbSkaWznHa1HCw5qsJ3enfqjZV7SzQk8vIylFw5X4Qi7dfwN0vgp/3uWJpYsD7On4eBUEQBEEoP0QCVRAEQRAEQRDKgFKp5OrVq+zatYuzZ88QGxtLWlp6WYclCILw0kkkEiwszHFxcWHo0GGMGjWKqlWrlnVYFVbbus46t7k9WfPROzSW+u+s0jkuPSsHgODoxGIdOzk9k39P3eXkbR+8Q2NJTM0g+8nal88Ki00u1QSqu38ET7qx0rVxNZ3jujWuzv6rj7gfFE12jgI9uSzfmJa1tScSHayeVikmpGRoPjfS16NL46qc9whgzPc7mdy7Gb2b16JJdXv0texfm+Ies6jkMint62v/eZBKJXRsUIVdl+5z95kEaFGExSXT/IO1mnVNLUwMGNymLqM6NaRTwypInl90twja1HUucfvm8mp054b5HtOXy+jetDrt67sw6Kst3PEN54fdV5jUsynmxmXf2vh1plAouHLlCrt27eL8k9fa6RnF/70SBEEobYYGBlhbW9Gxc1dGjx5N9+7dkctFqq48Et8VQRAEQRAEQXjFPDw8GDx4MEFBQTja2zGgVzccHewwNjIq0UVIQRCEikShUJCUnMIDbx8WLVrE/PnzGTp0CNu2bcfIqPjtMv/rbC2MdW6LiE8BICM7h4zEnEL3lZ6VXeTj+oTFMXzJNsJin7ZGNTbQw8LEEOmT/2VRiamAurVsaYpJTNN8/mzL1edVtlEnJHMUSuJTMrCzzF/xaGZkoHXus+1zsxWKPNtWzujPhGV7uBcYxU97XPlpjyv6chnNazrSv1VtJvZoUmDr15IcsyhszIww0NN9qS+3dW30M+evKHJyFJrkKUCvZjUZ3qEBHRuULHlaFkyNnq6Bm17Az+Oz24q6HnBRGOrL+d+4roz8djupGVlc8AxkcNu6pbZ/Ia+bN28ybOgQQsPCcbQyoVc9W+xcrDDSk1FBfmQFQXiNZWQriU7O4NT+7fzxxx/Y2lizfcdOevbsWdahCc8RCVRBEARBEARBeIU8PDzo0aMHVZwc+HflFjq0aYlUWrw1zgRBEF4XSckp7D18nDmLvmHLine truncated
"text/plain": [
"<Figure size 2000x1000 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Feature Importances:\n",
" feature importance\n",
"5 relationship 0.218174\n",
"0 age 0.174282\n",
"2 education.num 0.147966\n",
"8 capital.gain 0.129988\n",
"10 hours.per.week 0.105884\n",
"4 occupation 0.085228\n",
"1 workclass 0.052566\n",
"9 capital.loss 0.044720\n",
"6 race 0.023650\n",
"3 marital.status 0.011255\n",
"7 sex 0.006286\n"
]
}
],
@@ -24,42 +76,51 @@
"import matplotlib.pyplot as plt\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.pipeline import Pipeline\n",
"from sklearn.tree import DecisionTreeClassifier, plot_tree\n",
"from sklearn.preprocessing import LabelEncoder\n",
"\n",
"df = pd.read_csv('./Datasets/adult.csv', comment = '#')\n",
"\n",
"# First, create a copy of the dataframe to avoid modifying the original\n",
"df_encoded = df.copy()\n",
"\n",
"data = pd.read_csv('./Datasets/adult.csv', comment = '#')\n",
"# Apply label encoding to categorical columns\n",
"label_encoder = LabelEncoder()\n",
"categorical_columns = ['workclass', 'marital.status', 'occupation', \n",
" 'relationship', 'race', 'sex', 'income']\n",
"\n",
"# Features\n",
"X = data.drop(columns=['income'])\n",
"\n",
"# Labels\n",
"y = data['income']\n",
"for column in categorical_columns:\n",
" df_encoded[column] = label_encoder.fit_transform(df_encoded[column])\n",
"\n",
"# Now properly separate features and target\n",
"X = df_encoded.drop(columns=['income', 'native.country', 'education','fnlwgt'])\n",
"y = df_encoded['income']\n",
"\n",
"# Split the data\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
"X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=42)\n",
"\n",
"print(X)\n",
"\n",
"# Create and train the decision tree classifier\n",
"clf = DecisionTreeClassifier(random_state=42)\n",
"clf.fit(X, y)\n",
"\n",
"n_features = 10\n",
"fig=plt.figure( figsize=(15, 15) )\n",
"plt_num = 1\n",
"for i in range(n_features):\n",
" for j in range(n_features):\n",
" ax = fig.add_subplot(n_features, n_features, plt_num)\n",
" if(i == j):\n",
" ax.hist(X_train[:, i], bins=25, color='gray')\n",
" else:\n",
" ax.scatter(X_train[:, j], X_train[:, i], c=np.array(colors)[y_train], s=30, alpha=0.3)\n",
"# Visualize the tree\n",
"plt.figure(figsize=(20,10))\n",
"plot_tree(clf, feature_names=X.columns, class_names=['No', 'Yes'], \n",
" filled=True, rounded=True, fontsize=18)\n",
"plt.title(\"Rod Breaking Decision Tree\",fontsize=30)\n",
"plt.show()\n",
"\n",
" if(i == n_features-1):\n",
" ax.set_xlabel(f'$x_{{{j}}}$', fontsize=22)\n",
" \n",
" if(j==0):\n",
" ax.set_ylabel(f'$x_{{{i}}}$', fontsize=22)\n",
"\n",
" ax.grid(True)\n",
" plt_num +=1\n"
"# Print feature importances\n",
"importances = pd.DataFrame({\n",
" 'feature': X.columns,\n",
" 'importance': clf.feature_importances_\n",
"})\n",
"print(\"\\nFeature Importances:\")\n",
"print(importances.sort_values('importance', ascending=False))\n",
"\n"
]
}
],