{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "acute-darkness", "metadata": {}, "outputs": [], "source": [ "import pandas as pd #biblioteka za rad sa podacima\n", "\n", "#u biblioteci sklearn su implementirane klase i funkcije za istrazivanje podataka\n", "from sklearn.tree import DecisionTreeClassifier, export_graphviz, plot_tree\n", "from sklearn.model_selection import train_test_split\n", "import sklearn.metrics as met #modul metrics sadrzi f-je za evaluaciju modela za klasifikaciju\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "third-authorization", "metadata": {}, "outputs": [], "source": [ "#ucitavanje podataka iz datoteke u csv formatu i\n", "#pravljenje tabele, tj. objekta klase DataFrame\n", "\n", "df=pd.read_csv('C:/Users/student/Desktop/ipIndustija4/ipVezbe62021/iris.csv')" ] }, { "cell_type": "markdown", "id": "weird-evening", "metadata": {}, "source": [ "Deo sa upoznavanjem i pripremom podataka\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "coordinated-group", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Sepal_LengthSepal_WidthPetal_LengthPetal_WidthSpecies
05.13.51.40.2setosa
14.93.01.40.2setosa
24.73.21.30.2setosa
34.63.11.50.2setosa
45.03.61.40.2setosa
\n", "
" ], "text/plain": [ " Sepal_Length Sepal_Width Petal_Length Petal_Width Species\n", "0 5.1 3.5 1.4 0.2 setosa\n", "1 4.9 3.0 1.4 0.2 setosa\n", "2 4.7 3.2 1.3 0.2 setosa\n", "3 4.6 3.1 1.5 0.2 setosa\n", "4 5.0 3.6 1.4 0.2 setosa" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head()" ] }, { "cell_type": "code", "execution_count": 4, "id": "intellectual-institution", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Sepal_LengthSepal_WidthPetal_LengthPetal_WidthSpecies
count150.000000150.000000150.000000150.000000150
uniqueNaNNaNNaNNaN3
topNaNNaNNaNNaNvirginica
freqNaNNaNNaNNaN50
mean5.8433333.0573333.7580001.199333NaN
std0.8280660.4358661.7652980.762238NaN
min4.3000002.0000001.0000000.100000NaN
25%5.1000002.8000001.6000000.300000NaN
50%5.8000003.0000004.3500001.300000NaN
75%6.4000003.3000005.1000001.800000NaN
max7.9000004.4000006.9000002.500000NaN
\n", "
" ], "text/plain": [ " Sepal_Length Sepal_Width Petal_Length Petal_Width Species\n", "count 150.000000 150.000000 150.000000 150.000000 150\n", "unique NaN NaN NaN NaN 3\n", "top NaN NaN NaN NaN virginica\n", "freq NaN NaN NaN NaN 50\n", "mean 5.843333 3.057333 3.758000 1.199333 NaN\n", "std 0.828066 0.435866 1.765298 0.762238 NaN\n", "min 4.300000 2.000000 1.000000 0.100000 NaN\n", "25% 5.100000 2.800000 1.600000 0.300000 NaN\n", "50% 5.800000 3.000000 4.350000 1.300000 NaN\n", "75% 6.400000 3.300000 5.100000 1.800000 NaN\n", "max 7.900000 4.400000 6.900000 2.500000 NaN" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.describe(include='all')" ] }, { "cell_type": "code", "execution_count": 5, "id": "actual-death", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#provera da li postoje nedostajuce vrednosti u skupu, jer ako\n", "#postoje moraju biti obradjene\n", "df.isna().any().any()" ] }, { "cell_type": "code", "execution_count": 6, "id": "proper-blame", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Sepal_LengthSepal_WidthPetal_LengthPetal_Width
Sepal_Length1.000000-0.1175700.8717540.817941
Sepal_Width-0.1175701.000000-0.428440-0.366126
Petal_Length0.871754-0.4284401.0000000.962865
Petal_Width0.817941-0.3661260.9628651.000000
\n", "
" ], "text/plain": [ " Sepal_Length Sepal_Width Petal_Length Petal_Width\n", "Sepal_Length 1.000000 -0.117570 0.871754 0.817941\n", "Sepal_Width -0.117570 1.000000 -0.428440 -0.366126\n", "Petal_Length 0.871754 -0.428440 1.000000 0.962865\n", "Petal_Width 0.817941 -0.366126 0.962865 1.000000" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.corr()\n", "#posto je korelacija izmedju Petal_Width i Petal_Length 0.96,\n", "#jedan od ova dva atributa se moze izostaviti pri pravljenju modela" ] }, { "cell_type": "markdown", "id": "tribal-depression", "metadata": {}, "source": [ "Deo sa klasifikacijom\n" ] }, { "cell_type": "code", "execution_count": 10, "id": "deadly-yorkshire", "metadata": {}, "outputs": [], "source": [ "#Posto fja train_test_split kao prvi parametar prima opis instanci (bez ciljnog atributa),\n", "#a kao drugi parametar listu sa klasama instanci koje su zadate kao prvi argument,\n", "#ucitani skup se prema tim potrebama deli na dva dela\n", "\n", "features = df.columns[:4].tolist()" ] }, { "cell_type": "code", "execution_count": 11, "id": "academic-satisfaction", "metadata": {}, "outputs": [], "source": [ "#ako se eliminise jedan atribut zbog korelacije, npr. Petal_Length\n", "#features.remove('Petal_Length')\n" ] }, { "cell_type": "code", "execution_count": 12, "id": "mysterious-score", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['Sepal_Length', 'Sepal_Width', 'Petal_Length', 'Petal_Width']" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "features" ] }, { "cell_type": "code", "execution_count": 13, "id": "latest-supervision", "metadata": {}, "outputs": [], "source": [ "#features.remove('Petal_Length')" ] }, { "cell_type": "code", "execution_count": 14, "id": "banner-glory", "metadata": {}, "outputs": [], "source": [ "x=df[features] #opis instanci (skup sadrzi samo atribute koji se koriste za pravljenje modela)\n", "y=df['Species'] #skup sa ciljnim atributom\n" ] }, { "cell_type": "code", "execution_count": 15, "id": "finnish-curve", "metadata": {}, "outputs": [], "source": [ "\"\"\"\n", "f-ja train_test_split kao rezultat vraca\n", " x_train: instance u trening skupu (bez ciljnog atributa)\n", " x_test: instance u test skupu (bez ciljnog atributa)\n", " y_train: klase instanci u trening skupu\n", " y_test: klase instanci u test skupu\n", "\"\"\"\n", "\n", "x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=100)" ] }, { "cell_type": "code", "execution_count": 16, "id": "republican-bottle", "metadata": {}, "outputs": [], "source": [ "#pravljenje klasifikatora koriscenjem klase DecisionTreeClassifier (u slajdovima je detaljnije opisana)\n", "\n", "#dt = DecisionTreeClassifier()\n", "#dt = DecisionTreeClassifier(criterion='entropy')\n", "dt = DecisionTreeClassifier(max_depth=2)\n", "#dt = DecisionTreeClassifier(min_samples_split=20, max_depth=4)\n", "#dt = DecisionTreeClassifier(min_samples_split=20, max_depth=4, max_leaf_nodes=4)\n", "#dt = DecisionTreeClassifier(min_impurity_split=0.05)\n" ] }, { "cell_type": "code", "execution_count": 17, "id": "after-twelve", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DecisionTreeClassifier(max_depth=2)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#pravljenje modela na osnovu trening skupa\n", "\n", "dt.fit(x_train, y_train)" ] }, { "cell_type": "code", "execution_count": 18, "id": "fatty-personal", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['setosa', 'versicolor', 'virginica'], dtype=object)" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dt.classes_" ] }, { "cell_type": "code", "execution_count": 20, "id": "sunset-wholesale", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0. , 0. , 0.56711176, 0.43288824])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dt.feature_importances_ " ] }, { "cell_type": "code", "execution_count": 21, "id": "brazilian-protein", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Sepal_Length 0.000000\n", "Sepal_Width 0.000000\n", "Petal_Length 0.567112\n", "Petal_Width 0.432888\n", "dtype: float64" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.Series(dt.feature_importances_, index=features) " ] }, { "cell_type": "code", "execution_count": 26, "id": "passing-blues", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
prob_setosaprob_versicolorprob_virginica
790.00.8888890.111111
261.00.0000000.000000
271.00.0000000.000000
31.00.0000000.000000
610.00.8888890.111111
1030.00.0312500.968750
411.00.0000000.000000
670.00.8888890.111111
810.00.8888890.111111
1480.00.0312500.968750
451.00.0000000.000000
91.00.0000000.000000
351.00.0000000.000000
550.00.8888890.111111
1210.00.0312500.968750
1000.00.0312500.968750
441.00.0000000.000000
800.00.8888890.111111
221.00.0000000.000000
580.00.8888890.111111
1130.00.0312500.968750
590.00.8888890.111111
1250.00.0312500.968750
401.00.0000000.000000
41.00.0000000.000000
1140.00.0312500.968750
870.00.8888890.111111
1360.00.0312500.968750
321.00.0000000.000000
1300.00.0312500.968750
51.00.0000000.000000
171.00.0000000.000000
1310.00.0312500.968750
990.00.8888890.111111
900.00.8888890.111111
1160.00.0312500.968750
111.00.0000000.000000
431.00.0000000.000000
710.00.8888890.111111
1380.00.0312500.968750
1190.00.8888890.111111
540.00.8888890.111111
720.00.8888890.111111
481.00.0000000.000000
820.00.8888890.111111
131.00.0000000.000000
630.00.8888890.111111
620.00.8888890.111111
1230.00.0312500.968750
1440.00.0312500.968750
\n", "
" ], "text/plain": [ " prob_setosa prob_versicolor prob_virginica\n", "79 0.0 0.888889 0.111111\n", "26 1.0 0.000000 0.000000\n", "27 1.0 0.000000 0.000000\n", "3 1.0 0.000000 0.000000\n", "61 0.0 0.888889 0.111111\n", "103 0.0 0.031250 0.968750\n", "41 1.0 0.000000 0.000000\n", "67 0.0 0.888889 0.111111\n", "81 0.0 0.888889 0.111111\n", "148 0.0 0.031250 0.968750\n", "45 1.0 0.000000 0.000000\n", "9 1.0 0.000000 0.000000\n", "35 1.0 0.000000 0.000000\n", "55 0.0 0.888889 0.111111\n", "121 0.0 0.031250 0.968750\n", "100 0.0 0.031250 0.968750\n", "44 1.0 0.000000 0.000000\n", "80 0.0 0.888889 0.111111\n", "22 1.0 0.000000 0.000000\n", "58 0.0 0.888889 0.111111\n", "113 0.0 0.031250 0.968750\n", "59 0.0 0.888889 0.111111\n", "125 0.0 0.031250 0.968750\n", "40 1.0 0.000000 0.000000\n", "4 1.0 0.000000 0.000000\n", "114 0.0 0.031250 0.968750\n", "87 0.0 0.888889 0.111111\n", "136 0.0 0.031250 0.968750\n", "32 1.0 0.000000 0.000000\n", "130 0.0 0.031250 0.968750\n", "5 1.0 0.000000 0.000000\n", "17 1.0 0.000000 0.000000\n", "131 0.0 0.031250 0.968750\n", "99 0.0 0.888889 0.111111\n", "90 0.0 0.888889 0.111111\n", "116 0.0 0.031250 0.968750\n", "11 1.0 0.000000 0.000000\n", "43 1.0 0.000000 0.000000\n", "71 0.0 0.888889 0.111111\n", "138 0.0 0.031250 0.968750\n", "119 0.0 0.888889 0.111111\n", "54 0.0 0.888889 0.111111\n", "72 0.0 0.888889 0.111111\n", "48 1.0 0.000000 0.000000\n", "82 0.0 0.888889 0.111111\n", "13 1.0 0.000000 0.000000\n", "63 0.0 0.888889 0.111111\n", "62 0.0 0.888889 0.111111\n", "123 0.0 0.031250 0.968750\n", "144 0.0 0.031250 0.968750" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# pravljenje skupa koji sadrzi oznaku instance i\n", "# verovatnocu pripadnosti svakoj od klasa\n", "pd.DataFrame(dt.predict_proba(x_test),\n", " index= x_test.index,\n", " columns=['prob_' + x for x in dt.classes_])\n" ] }, { "cell_type": "code", "execution_count": 27, "id": "introductory-pleasure", "metadata": {}, "outputs": [], "source": [ "from sklearn.tree import plot_tree" ] }, { "cell_type": "code", "execution_count": 29, "id": "imposed-american", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#graficki prikaz drveta\n", "t=plot_tree(dt, rounded=True, filled=True, impurity=False, feature_names=features, class_names=dt.classes_ )" ] }, { "cell_type": "code", "execution_count": 31, "id": "sought-injection", "metadata": {}, "outputs": [], "source": [ "y_pred=dt.predict(x_train) #primena modela na trening podatke\n" ] }, { "cell_type": "code", "execution_count": 32, "id": "living-processing", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.95" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "met.accuracy_score(y_train, y_pred) #preciznost modela na trening skupu" ] }, { "cell_type": "code", "execution_count": 34, "id": "undefined-research", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
setosaversicolorvirginica
setosa3200
versicolor0321
virginica0431
\n", "
" ], "text/plain": [ " setosa versicolor virginica\n", "setosa 32 0 0\n", "versicolor 0 32 1\n", "virginica 0 4 31" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#matrica konfuzije za trening skup\n", "pd.DataFrame(met.confusion_matrix(y_train, y_pred), index=dt.classes_, columns=dt.classes_)" ] }, { "cell_type": "code", "execution_count": 35, "id": "aerial-memory", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " setosa 1.00 1.00 1.00 32\n", " versicolor 0.89 0.97 0.93 33\n", " virginica 0.97 0.89 0.93 35\n", "\n", " accuracy 0.95 100\n", " macro avg 0.95 0.95 0.95 100\n", "weighted avg 0.95 0.95 0.95 100\n", "\n" ] } ], "source": [ "#izvestaj klasifikacije za trening skup\n", "print(met.classification_report(y_train, y_pred))" ] }, { "cell_type": "code", "execution_count": 36, "id": "potential-midwest", "metadata": {}, "outputs": [], "source": [ "#funkcija za primenu modela(clf) na podacima i ispis rezultata\n", "def calculate_metrix(test_data, true_values, clf):\n", " y_pred=clf.predict(test_data)\n", " print('Preciznost:', met.accuracy_score(true_values, y_pred))\n", " print('Matrica kofuzije')\n", " print(pd.DataFrame(met.confusion_matrix(true_values, y_pred), index=clf.classes_, columns=clf.classes_))\n", " print('Izvestaj')\n", " print(met.classification_report(true_values, y_pred))" ] }, { "cell_type": "code", "execution_count": 37, "id": "legal-paper", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Preciznost: 0.95\n", "Matrica kofuzije\n", " setosa versicolor virginica\n", "setosa 32 0 0\n", "versicolor 0 32 1\n", "virginica 0 4 31\n", "Izvestaj\n", " precision recall f1-score support\n", "\n", " setosa 1.00 1.00 1.00 32\n", " versicolor 0.89 0.97 0.93 33\n", " virginica 0.97 0.89 0.93 35\n", "\n", " accuracy 0.95 100\n", " macro avg 0.95 0.95 0.95 100\n", "weighted avg 0.95 0.95 0.95 100\n", "\n" ] } ], "source": [ "calculate_metrix(x_train, y_train, dt)" ] }, { "cell_type": "code", "execution_count": 38, "id": "experimental-practitioner", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Preciznost: 0.98\n", "Matrica kofuzije\n", " setosa versicolor virginica\n", "setosa 18 0 0\n", "versicolor 0 17 0\n", "virginica 0 1 14\n", "Izvestaj\n", " precision recall f1-score support\n", "\n", " setosa 1.00 1.00 1.00 18\n", " versicolor 0.94 1.00 0.97 17\n", " virginica 1.00 0.93 0.97 15\n", "\n", " accuracy 0.98 50\n", " macro avg 0.98 0.98 0.98 50\n", "weighted avg 0.98 0.98 0.98 50\n", "\n" ] } ], "source": [ "calculate_metrix(x_test, y_test, dt) #primena modela na test podatke" ] }, { "cell_type": "code", "execution_count": 34, "id": "correct-sport", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.6" } }, "nbformat": 4, "nbformat_minor": 5 }