Added desicion tree to info
This commit is contained in:
1 parent
e329515d79
commit
94c7df0712
1 file changed
+94
-33
+94
-33
@@ -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": "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 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",
|
||||
" \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",
|
||||
"# 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",
|
||||
" 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"
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
Reference in new issue
Block a user