Commit 9cd92268 authored by Pinky Sabu's avatar Pinky Sabu

uploading files

parent 63662436
{
"cells": [
{
"cell_type": "code",
"execution_count": 27,
"id": "d3c9f522",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"from sklearn.preprocessing import LabelEncoder\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.metrics import accuracy_score,confusion_matrix\n",
"from sklearn.tree import plot_tree"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "e0f90203",
"metadata": {},
"outputs": [],
"source": [
"data=pd.read_csv(\"Breast_cancer_data_kaggle.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "eaf2713f",
"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>mean_radius</th>\n",
" <th>mean_texture</th>\n",
" <th>mean_perimeter</th>\n",
" <th>mean_area</th>\n",
" <th>mean_smoothness</th>\n",
" <th>diagnosis</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>17.99</td>\n",
" <td>10.38</td>\n",
" <td>122.80</td>\n",
" <td>1001.0</td>\n",
" <td>0.11840</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>20.57</td>\n",
" <td>17.77</td>\n",
" <td>132.90</td>\n",
" <td>1326.0</td>\n",
" <td>0.08474</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>19.69</td>\n",
" <td>21.25</td>\n",
" <td>130.00</td>\n",
" <td>1203.0</td>\n",
" <td>0.10960</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>11.42</td>\n",
" <td>20.38</td>\n",
" <td>77.58</td>\n",
" <td>386.1</td>\n",
" <td>0.14250</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>20.29</td>\n",
" <td>14.34</td>\n",
" <td>135.10</td>\n",
" <td>1297.0</td>\n",
" <td>0.10030</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" mean_radius mean_texture mean_perimeter mean_area mean_smoothness \\\n",
"0 17.99 10.38 122.80 1001.0 0.11840 \n",
"1 20.57 17.77 132.90 1326.0 0.08474 \n",
"2 19.69 21.25 130.00 1203.0 0.10960 \n",
"3 11.42 20.38 77.58 386.1 0.14250 \n",
"4 20.29 14.34 135.10 1297.0 0.10030 \n",
"\n",
" diagnosis \n",
"0 0 \n",
"1 0 \n",
"2 0 \n",
"3 0 \n",
"4 0 "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "51ed540f",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"mean_radius 0\n",
"mean_texture 0\n",
"mean_perimeter 0\n",
"mean_area 0\n",
"mean_smoothness 0\n",
"diagnosis 0\n",
"dtype: int64"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.isnull().sum()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "5f721690",
"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>mean_radius</th>\n",
" <th>mean_texture</th>\n",
" <th>mean_perimeter</th>\n",
" <th>mean_area</th>\n",
" <th>mean_smoothness</th>\n",
" <th>diagnosis</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>17.99</td>\n",
" <td>10.38</td>\n",
" <td>122.80</td>\n",
" <td>1001.0</td>\n",
" <td>0.11840</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>20.57</td>\n",
" <td>17.77</td>\n",
" <td>132.90</td>\n",
" <td>1326.0</td>\n",
" <td>0.08474</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>19.69</td>\n",
" <td>21.25</td>\n",
" <td>130.00</td>\n",
" <td>1203.0</td>\n",
" <td>0.10960</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>11.42</td>\n",
" <td>20.38</td>\n",
" <td>77.58</td>\n",
" <td>386.1</td>\n",
" <td>0.14250</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>20.29</td>\n",
" <td>14.34</td>\n",
" <td>135.10</td>\n",
" <td>1297.0</td>\n",
" <td>0.10030</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" mean_radius mean_texture mean_perimeter mean_area mean_smoothness \\\n",
"0 17.99 10.38 122.80 1001.0 0.11840 \n",
"1 20.57 17.77 132.90 1326.0 0.08474 \n",
"2 19.69 21.25 130.00 1203.0 0.10960 \n",
"3 11.42 20.38 77.58 386.1 0.14250 \n",
"4 20.29 14.34 135.10 1297.0 0.10030 \n",
"\n",
" diagnosis \n",
"0 0 \n",
"1 0 \n",
"2 0 \n",
"3 0 \n",
"4 0 "
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"encoder=LabelEncoder()\n",
"data=data.assign(diagnosis=encoder.fit_transform(data['diagnosis']))\n",
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "80af128c",
"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>mean_radius</th>\n",
" <th>mean_texture</th>\n",
" <th>mean_perimeter</th>\n",
" <th>mean_area</th>\n",
" <th>mean_smoothness</th>\n",
" <th>diagnosis</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>17.99</td>\n",
" <td>10.38</td>\n",
" <td>122.80</td>\n",
" <td>1001.0</td>\n",
" <td>0.11840</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>20.57</td>\n",
" <td>17.77</td>\n",
" <td>132.90</td>\n",
" <td>1326.0</td>\n",
" <td>0.08474</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>19.69</td>\n",
" <td>21.25</td>\n",
" <td>130.00</td>\n",
" <td>1203.0</td>\n",
" <td>0.10960</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>11.42</td>\n",
" <td>20.38</td>\n",
" <td>77.58</td>\n",
" <td>386.1</td>\n",
" <td>0.14250</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>20.29</td>\n",
" <td>14.34</td>\n",
" <td>135.10</td>\n",
" <td>1297.0</td>\n",
" <td>0.10030</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" mean_radius mean_texture mean_perimeter mean_area mean_smoothness \\\n",
"0 17.99 10.38 122.80 1001.0 0.11840 \n",
"1 20.57 17.77 132.90 1326.0 0.08474 \n",
"2 19.69 21.25 130.00 1203.0 0.10960 \n",
"3 11.42 20.38 77.58 386.1 0.14250 \n",
"4 20.29 14.34 135.10 1297.0 0.10030 \n",
"\n",
" diagnosis \n",
"0 0 \n",
"1 0 \n",
"2 0 \n",
"3 0 \n",
"4 0 "
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X=data.loc[:,'mean_radius':]\n",
"y=data['diagnosis']\n",
"X.head()"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "077beffc",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 56, 0],\n",
" [ 0, 115]])"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"clf=DecisionTreeClassifier()\n",
"x_train,x_test,y_train,y_test=train_test_split(X,y,test_size=.3)\n",
"clf.fit(x_train,y_train)\n",
"y_pred=clf.predict(x_test)\n",
"y_pred\n",
"confusion_matrix(y_test,y_pred)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "8eacf997",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 26,
"id": "628cbc49",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.0"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"accuracy_score(y_test,y_pred)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "67a37b74",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"plt=plot_tree(clf)"
]
}
],
"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.9.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
{
"cells": [
{
"cell_type": "code",
"execution_count": 19,
"id": "46ba8b93",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"from sklearn.preprocessing import LabelEncoder\n",
"from sklearn.naive_bayes import MultinomialNB\n",
"from sklearn.tree import plot_tree\n",
"from sklearn.metrics import accuracy_score,confusion_matrix\n",
"from sklearn.model_selection import train_test_split"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "b8b365ef",
"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>mean_radius</th>\n",
" <th>mean_texture</th>\n",
" <th>mean_perimeter</th>\n",
" <th>mean_area</th>\n",
" <th>mean_smoothness</th>\n",
" <th>diagnosis</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>17.99</td>\n",
" <td>10.38</td>\n",
" <td>122.80</td>\n",
" <td>1001.0</td>\n",
" <td>0.11840</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>20.57</td>\n",
" <td>17.77</td>\n",
" <td>132.90</td>\n",
" <td>1326.0</td>\n",
" <td>0.08474</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>19.69</td>\n",
" <td>21.25</td>\n",
" <td>130.00</td>\n",
" <td>1203.0</td>\n",
" <td>0.10960</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>11.42</td>\n",
" <td>20.38</td>\n",
" <td>77.58</td>\n",
" <td>386.1</td>\n",
" <td>0.14250</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>20.29</td>\n",
" <td>14.34</td>\n",
" <td>135.10</td>\n",
" <td>1297.0</td>\n",
" <td>0.10030</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" mean_radius mean_texture mean_perimeter mean_area mean_smoothness \\\n",
"0 17.99 10.38 122.80 1001.0 0.11840 \n",
"1 20.57 17.77 132.90 1326.0 0.08474 \n",
"2 19.69 21.25 130.00 1203.0 0.10960 \n",
"3 11.42 20.38 77.58 386.1 0.14250 \n",
"4 20.29 14.34 135.10 1297.0 0.10030 \n",
"\n",
" diagnosis \n",
"0 0 \n",
"1 0 \n",
"2 0 \n",
"3 0 \n",
"4 0 "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data=pd.read_csv(\"Breast_cancer_data_kaggle.csv\")\n",
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "9d6deb44",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"mean_radius 0\n",
"mean_texture 0\n",
"mean_perimeter 0\n",
"mean_area 0\n",
"mean_smoothness 0\n",
"diagnosis 0\n",
"dtype: int64"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.isnull().sum()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "85559b70",
"metadata": {},
"outputs": [],
"source": [
"clf=MultinomialNB()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "9dfd38f1",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1,\n",
" 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,\n",
" 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0,\n",
" 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,\n",
" 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1,\n",
" 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0,\n",
" 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1,\n",
" 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1])"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X=data.loc[:,'mean_radius':]\n",
"y=data['diagnosis']\n",
"x_train,x_test,y_train,y_test=train_test_split(X,y,test_size=.3)\n",
"clf.fit(x_train,y_train)\n",
"y_pred=clf.predict(x_test)\n",
"y_pred"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "65aeb3a2",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[54, 14],\n",
" [ 4, 99]])"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"confusion_matrix(y_test,y_pred)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "bb3dd22d",
"metadata": {},
"outputs": [
{
"ename": "AttributeError",
"evalue": "'numpy.ndarray' object has no attribute 'plot'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m/var/folders/m7/36jtw44947q44fbpkfbr42_00000gr/T/ipykernel_63966/1064681650.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0my_pred\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mAttributeError\u001b[0m: 'numpy.ndarray' object has no attribute 'plot'"
]
}
],
"source": []
}
],
"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.9.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
{
"cells": [
{
"cell_type": "code",
"execution_count": 4,
"id": "6769f29e",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"from sklearn.preprocessing import LabelEncoder\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.metrics import accuracy_score,confusion_matrix\n",
"from sklearn.tree import plot_tree"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "1576c085",
"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>mean_radius</th>\n",
" <th>mean_texture</th>\n",
" <th>mean_perimeter</th>\n",
" <th>mean_area</th>\n",
" <th>mean_smoothness</th>\n",
" <th>diagnosis</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>17.99</td>\n",
" <td>10.38</td>\n",
" <td>122.80</td>\n",
" <td>1001.0</td>\n",
" <td>0.11840</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>20.57</td>\n",
" <td>17.77</td>\n",
" <td>132.90</td>\n",
" <td>1326.0</td>\n",
" <td>0.08474</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>19.69</td>\n",
" <td>21.25</td>\n",
" <td>130.00</td>\n",
" <td>1203.0</td>\n",
" <td>0.10960</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>11.42</td>\n",
" <td>20.38</td>\n",
" <td>77.58</td>\n",
" <td>386.1</td>\n",
" <td>0.14250</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>20.29</td>\n",
" <td>14.34</td>\n",
" <td>135.10</td>\n",
" <td>1297.0</td>\n",
" <td>0.10030</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" mean_radius mean_texture mean_perimeter mean_area mean_smoothness \\\n",
"0 17.99 10.38 122.80 1001.0 0.11840 \n",
"1 20.57 17.77 132.90 1326.0 0.08474 \n",
"2 19.69 21.25 130.00 1203.0 0.10960 \n",
"3 11.42 20.38 77.58 386.1 0.14250 \n",
"4 20.29 14.34 135.10 1297.0 0.10030 \n",
"\n",
" diagnosis \n",
"0 0 \n",
"1 0 \n",
"2 0 \n",
"3 0 \n",
"4 0 "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data=pd.read_csv(\"Breast_cancer_data_kaggle.csv\")\n",
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "c4394780",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"mean_radius 0\n",
"mean_texture 0\n",
"mean_perimeter 0\n",
"mean_area 0\n",
"mean_smoothness 0\n",
"diagnosis 0\n",
"dtype: int64"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.isnull().sum()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "2000f0aa",
"metadata": {},
"outputs": [],
"source": [
"clf=RandomForestClassifier()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "89e47e80",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 56, 0],\n",
" [ 0, 115]])"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X=data.loc[:,'mean_radius':]\n",
"y=data['diagnosis']\n",
"X.head()\n",
"x_train,x_test,y_train,y_test=train_test_split(X,y,test_size=.3)\n",
"clf.fit(x_train,y_train)\n",
"y_pred=clf.predict(x_test)\n",
"confusion_matrix(y_test,y_pred)"
]
}
],
"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.9.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
{
"cells": [
{
"cell_type": "code",
"execution_count": 39,
"id": "ab25a671",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"from sklearn.feature_extraction.text import CountVectorizer\n",
"from sklearn.naive_bayes import MultinomialNB\n",
"from sklearn.preprocessing import LabelEncoder\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.metrics import accuracy_score,confusion_matrix"
]
},
{
"cell_type": "code",
"execution_count": 40,
"id": "60224855",
"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>v1</th>\n",
" <th>v2</th>\n",
" <th>Unnamed: 2</th>\n",
" <th>Unnamed: 3</th>\n",
" <th>Unnamed: 4</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>ham</td>\n",
" <td>Go until jurong point, crazy.. Available only ...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>ham</td>\n",
" <td>Ok lar... Joking wif u oni...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>spam</td>\n",
" <td>Free entry in 2 a wkly comp to win FA Cup fina...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>ham</td>\n",
" <td>U dun say so early hor... U c already then say...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>ham</td>\n",
" <td>Nah I don't think he goes to usf, he lives aro...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" v1 v2 Unnamed: 2 \\\n",
"0 ham Go until jurong point, crazy.. Available only ... NaN \n",
"1 ham Ok lar... Joking wif u oni... NaN \n",
"2 spam Free entry in 2 a wkly comp to win FA Cup fina... NaN \n",
"3 ham U dun say so early hor... U c already then say... NaN \n",
"4 ham Nah I don't think he goes to usf, he lives aro... NaN \n",
"\n",
" Unnamed: 3 Unnamed: 4 \n",
"0 NaN NaN \n",
"1 NaN NaN \n",
"2 NaN NaN \n",
"3 NaN NaN \n",
"4 NaN NaN "
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data=pd.read_csv('spam.csv',encoding='latin-1')\n",
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "5d3c9849",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"v1 0\n",
"v2 0\n",
"Unnamed: 2 5522\n",
"Unnamed: 3 5560\n",
"Unnamed: 4 5566\n",
"dtype: int64"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.isnull().sum()"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "5d0726b5",
"metadata": {},
"outputs": [],
"source": [
"data.drop(['Unnamed: 2','Unnamed: 3','Unnamed: 4'],inplace=True,axis=1)\n"
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "7953e2f6",
"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>v1</th>\n",
" <th>v2</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>ham</td>\n",
" <td>Go until jurong point, crazy.. Available only ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>ham</td>\n",
" <td>Ok lar... Joking wif u oni...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>spam</td>\n",
" <td>Free entry in 2 a wkly comp to win FA Cup fina...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>ham</td>\n",
" <td>U dun say so early hor... U c already then say...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>ham</td>\n",
" <td>Nah I don't think he goes to usf, he lives aro...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" v1 v2\n",
"0 ham Go until jurong point, crazy.. Available only ...\n",
"1 ham Ok lar... Joking wif u oni...\n",
"2 spam Free entry in 2 a wkly comp to win FA Cup fina...\n",
"3 ham U dun say so early hor... U c already then say...\n",
"4 ham Nah I don't think he goes to usf, he lives aro..."
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 44,
"id": "7b2dac92",
"metadata": {},
"outputs": [],
"source": [
"X=data.v2\n",
"Y=data.v1"
]
},
{
"cell_type": "code",
"execution_count": 49,
"id": "45b59096",
"metadata": {},
"outputs": [],
"source": [
"x_train,x_test,y_train,y_test=train_test_split(X,Y,test_size=.3)\n",
"vectorizer=CountVectorizer(min_df=5)\n",
"counts=vectorizer.fit_transform(x_train.values)"
]
},
{
"cell_type": "code",
"execution_count": 50,
"id": "e6692882",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"matrix([[0, 0, 0, ..., 0, 0, 0],\n",
" [0, 0, 0, ..., 0, 0, 0],\n",
" [0, 0, 0, ..., 0, 0, 0],\n",
" ...,\n",
" [0, 0, 0, ..., 0, 0, 0],\n",
" [0, 0, 0, ..., 0, 0, 0],\n",
" [0, 0, 0, ..., 0, 0, 0]])"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"counts.todense()"
]
},
{
"cell_type": "code",
"execution_count": 51,
"id": "543c9929",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"MultinomialNB()"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"clf=MultinomialNB()\n",
"targets=y_train.values\n",
"clf.fit(counts,targets)"
]
},
{
"cell_type": "code",
"execution_count": 52,
"id": "ebcf6f81",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[1433, 11],\n",
" [ 15, 213]])"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_pred=clf.predict(vectorizer.transform(x_test))\n",
"confusion_matrix(y_test,y_pred)"
]
}
],
"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.9.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment